The key generation tool can generate encryption keys for anonymity revokers, signature keys for identity providers, and update keys. The tool can be found in ../src/bin/keygen.rs.
The keygen tool can
- generate keys for anonymity revokers via the subcommand
keygen-ar
- generate keys for identity providers via the subcommand
keygen-ip
- generate a randomness file via the subcommand
gen-rand
- generate update keys via the subcommand
keygen-governance
Generated keys are in a format that can be used to include the public keys in genesis, and used by other tools. Private keys can be emitted either as plaintext or password encrypted. The user is asked for a password before emitting private keys. If the empty password is used then the keys are not going to be encrypted, otherwise they will be.
To see all the options use the --help
option at different levels.
The keygen-ip tool generates keys deterministically from the given randomness file. The keygen-ar tool uses the same method as gen-rand to generate randomness. The keygen-governance currently generates keys using the system randomness.
Generate keys for an anonymity revoker. The following options are supported
--ar-identity
is the integer identifying the anonymity revoker on the chain. This needs to be unique among anonymity revokers. It has meaning in cryptographic protocols (it is used as the evaluation point of the sharing polynomial) and so it must be non-zero.--description
string, a free-form description containing information that users will want to see about the anonymity revoker--global
a filename, containing cryptographic parameters of the chain anonymity revokers will be a part of.--in-len
an integer determining how many words to user is asked to enter.--name
a string, a simple identifier of the anonymity revoker. Chosen by themselves.--url
a URL with the website of the anonymity revoker--out
, a filename where the private keys will be emitted--out-pub
, a filename where the public data will be emitted. This is the data that must go to the chain.--recover-from-phrase
if set, recover keys from backup phrase. Otherwise, fresh keys are generated.--no-confirmation
if set, do not ask user to re-enter generated recovery phrase.--no-verification
if set, do not verify the validity of the input. Otherwise the input is verified to be a valid BIP39 sentence.--only-system-randomness
if set, do not ask the user for a list of words to add to randomness, instead only relying on system randomness.--v1
if set, use the deprecated version of the BLS keygen when generatingar_secret_key
. If keys were generated with version 1, this flag must be used during recovery.
No arguments are required. If the arguments ar-identity
, description
,
global
, name
, url
, out
, or out-pub
are not supplied they are queried
by the tool.
Generate keys for the identity provider. The following options are supported
--ip-identity
is the integer identifying the identity provider on the chain. This needs to be unique among identity providers. It has no special meaning--description
string, a free-form description containing information that users will want to see about the identity provider--name
a string, a simple identifier of the identity provider. Chosen by themselves.--url
a URL with the website of the identity provider--rand-input
, a filename with the randomness input. It must contain at least 64 bytes.--out
, a filename where the private keys will be emitted--out-pub
, a filename where the public data will be emitted. This is the data that must go to the chain.--bound
, upper bound on the number of messages signed by the identity provider's key. See the Pointcheval-Sanders signatures scheme for details of what this means. This defaults to 30 which is sufficient for the current numbers.--v1
if set, use the deprecated version of the BLS keygen when generatingip_secret_key
. If keys were generated with version 1, this flag must be used during recovery.
Generates random words that can be used as a randomness file for keygen-ip. The following options are supported
--in-len
an integer determining how many words the user is asked to enter. Value is ignored if input file is provided.--in
a filename from which inputs words are read. If not provided, words are read from stdin.--out
, a filename where the private keys will be emitted--no-verification
if set, do not verify the validity of the input. Otherwise the input is verified to be a valid BIP39 sentence.
Generates keys suitable for using as governance keys. The following options are supported
--level
Governance key level, one ofroot
,1
or2
.--out
, a filename where the private keys will be emitted. This is potentially encrypted.--out-pub
a filename where the public data will be emitted.
The public keys are in a format suitable for inclusion in the desktop wallet update transaction. The private keys format is a JSON file with the following structure
{
"keyPair": {
"signKey": "5e152fc71f8ca92d9ea1196893b7f7df1a3aa8ff61ef3878950465dde056202e",
"verifyKey": "667470661d0fde4a7a94351334e8f88da5527fc35bece8e1a15f71c9bb210faf"
},
"type": "level2"
}
If encrypted, there is the usual Concordium format for encryption on top of this file.
As mentioned above, one has to provide a file containing at least 64 random bytes to keygen-ip. In the following it is assumed that this file is called bytes.txt and has the content 12345678901234567890123456789012345678904989849123456789012345678901231
.
Run
./keygen keygen-ar --ar-identity 1 --name "Some name" --description "Some description" --url "Some url" --global cryptographic-parameters.json --out ar_keys.json --out-pub ar_keys_pub.json
Wrote private keys to ar_keys.json.
Wrote public keys to ar_keys_pub.json.
After running the command above, the content of ar_keys.json will be
{
"arInfo": {
"arIdentity": 1,
"arDescription": {
"name": "Some name",
"url": "Some url",
"description": "Some description"
},
"arPublicKey": "ad28984984033ea8b1a284f711f822927d1ad6e7d60415d8880e7f9bc34ea8aa4c7e1986fad957400d74cd856d18005d9826920be917d12926938cfb7152174b8a087dbdab266b6b0f0d7da2145e654b9c86126b0b71b932793142e9ac3037b8"
},
"arSecretKey": "ad28984984033ea8b1a284f711f822927d1ad6e7d60415d8880e7f9bc34ea8aa4c7e1986fad957400d74cd856d18005d472376170966aa7881769a014e191551c0f06ba17c27355dc893fab0a738b843"
}
while the content of ar_keys_pub.json will be
{
"v": 0,
"value": {
"arIdentity": 1,
"arDescription": {
"name": "Some name",
"url": "Some url",
"description": "Some description"
},
"arPublicKey": "ad28984984033ea8b1a284f711f822927d1ad6e7d60415d8880e7f9bc34ea8aa4c7e1986fad957400d74cd856d18005d9826920be917d12926938cfb7152174b8a087dbdab266b6b0f0d7da2145e654b9c86126b0b71b932793142e9ac3037b8"
}
}
Run
./keygen keygen-ip --rand-input bytes.txt --ip-identity 1 --name "Some name" --description "Some description" --url "Some url" --out ip_keys.json --out-pub "ip_keys_pub.json"
Wrote private to ip_keys.json.
Wrote public keys to ip_keys_pub.json.
After running the command above, the content of ip_keys.json will be
{
"ipInfo": {
"ipIdentity": 1,
"ipDescription": {
"name": "Some name",
"url": "Some url",
"description": "Some description"
},
"ipVerifyKey": "97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb93e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000001e8291b474edadbf9235824f4ceedf0cc33460d6c6a33e4d824763ccb5f8fafadbf4d90f3c4ee6aa0e2897f24c023018808bf3dae766d587b99cb2d001e099d7451e3cecf7bab6ecf746a92b0ddbbfcf0d3d9d72ff5fd8cb9f3ee998fa7763dad6b6f17fecdb85a5631335c3f007baa65e0d0779c40154d91413f809f2234e3bdc597e065d5ba52d4e1d5f9d102452ce50aa22fa4194beae55dfbbdfa23b06301f5633ab0cf8c97c7a75c302928833a1bdaae27c9b746f89df688bd9f82a8c01a4afbf88355db8e135bbcca355216be7a350bfb31701d778017fd4e366b1df8d9ea12d784722281f1f0cf1ca396e450efdac5fdd8770dd0b68dd484edfb46900e9462abb767d806d061c5ca461d47864ba63e56d42443b1c8a74b8433433b337198fa098084b932ccd319ad95ccbdb574d697f6cb990d2fcf503d362a4bf2f292a7c2e6b823b9a466df46a151c61e773c7810902e91ede169d75eeff4660e184698877ca5529b115ac995ab2a65583497ae5cb96a50d6733f115d56d2a30d2ab3d8474aa15ee9e5cdc2c8ac5ff7515052740c9bffcb9258fd16de0e204cf1a84b3a4ab8ff5729d04f66c1c0365f0841aec8b4c0d0c9a2f9fea112755a7707f13a8c57b22977423f71ceda2bc1deff8f117e51ad22003c1de13ccdf0fed482e59068b210332dce14c3b5bd10b0f13c48a171bc49d0a73c8cc8ed716485cc562847b6a1a11c69c2737b31fbc65249947c421aa3970fec68ec948c0e21f6c48ac5aba231732576293e28ba4390d99dea76a3271ab6f9951c8fe2c43dc1e9687b6fcc0918fcbc4bdfd2f00a884fadee89a6ca159633f210c57d02fc0eb19bc3598441d47ee44320349514e03b846079aa2c3a18782250355ae64a1e0ead8b2713db110669640ec85ffadb0ce4e6024a0f9fe1d887433cfd6b6e05e2612e2ea94419e3e858e2f2899677933caa2fad541d9065a06fa9a08ec2034026913c646df9d1be994a6bca142a3c62d2a108d28f8c61a93821043df20641950e3622bc82dd114dad57777740be46f8b69666fd10a8bd73f70e5a75b0c961bf07614e078b5520a81b5031ee84cb1379291440b366042811ad7076689c050efd4b14100f7ba975d74816c4d1ec4e09ad9fd1ebeaa40d2fb6eaa8434c42d740af328100513562601b3c00d81cdadfaa441278e0b8378967f5173ad5077633b5633e4f34c8f9666f5aba378accbe02d18911981954116e25f06628e7a954f5b608d2f9ad1038d6880387b15a54b0b916df10d1b2301c03812fd993d6ad4d8410d24c8909e0f24361a2a9879166d86290e0b368c24e44a9c39fad8244d71b676bb202985c5b18d25376db58d8b5ac1777406ffadda79863167487eeaa93ea88366c3c1985be92424ae664f26ad7e60cba04d824b80b815b976f0a0ea7a2f1dffc38506d6ca922640e087303f3e7d185cd42bc5a828f4adcc91a6ed7d1f52af198145bb15549259bacc4b990264c983f36179f80f298a1d3a5eb312a735b1f6f986031b013205ece6a592ce921ba0f4fa4ea94b3fa35b7fb9f44aa4eea80d06d716b938eeb71a7a1ce589f674b97824a40a067545dfede4c63cf300d3565982adfaf13d5c5d73e6e4334993904a649f127847bc3b5ea85d8097ad8ac0a7c1e1159fc69f19a46a365627783609cc57076b57c40f0385a8f4f1f0988a16b4eed30eb1ab9ba040e52fa4f61dec42bd537120434984d3d39fb2f50dbf3a41f123da0f734b779a0e97170c8348a018dce54a4352dca72873372c1b217b1a5e9925bfe8d8e4188e2564103cb9f6bf00d45d46d5a7a6959180e40fce1b858bcdd7e05cd3ddc882a5dfc851b4e7dd44088dd0d7f360eaae5792a1abd293166f50ff1894431e3cb36a467b654e2d7d980c6a85295453bf0713050d46255b0c3bb5f1fa32a2eb46440c6b82dff94946f5b5b7d6cca11b6a5fe58556309622099843200ab6068fde4d063742851643961c2e6dd4d01a07b47c0cc307ac3f98744802dabad810a0a29ecbb99de9591b340000001ead41ecdf25709d4947be8e3d394d080e89cc24201ce52dc0ac65b32337263313dc2f37cda8887a7f238e2c1bc1ac81310e0f6ac407f31a4066a7f156a0574f1305a2370fcda7ed40a618c97972878b407bf12381efaf5dec1e39416fb1341cd8b56505a0f5ee18d2fae6849cbf3313a622b530f54249a1e65c136aae518db79ca4ace708cd0dfa773ce42f511e318b3010056db7d0396e95784250ee0454d6175261bd9d78e6a63f571dacb9e0c2168e84078b5d361233e91705f074c742d6d3b1353f4fd30496b3866166fec4a1793c26808ab36b33ba8d3a3e4d29a76b49ab1466e84864799295d604635d8fdcc4b810ca915c5e22f54671c30947259a5d6c4fe2297185237c292cbcdbbec87d21a2df9fc19aadf071d78056af0195c22911899e3e449819953b225e9f577ef686c94e0aa610d639927f50d90acd46a19bd69c85c2a3aaac0436c1e4e824e9f2c6640c386995308a7c4a22c8ef0d0d8705bba724ed4bc8d0141ea3ca2a787bd1d70e8d0a0a2471e53d9216b803fecda57161aec630b829f0c84689c96910179778f388fe8d7867783c8e931cd77c23e26ac245ccff377c9fd9808a06e8b8a016a3eb191d0c3d9b3500275ed49e882943816289cf645399b619e6224f1ee5ed2ab3a088a667733f207d4a0c7e614ec68c7627834f1983d0d84529bfbda71ac07019ab4fb9ee65e89ad09b96c8f37b47414d674dc1da1e1e22b0047ef1f88f06ddd1ff09a40ec1d8c17c6800b5a71c5b753e43a5fe84945c886d0ef48dc043f7ff2bb0ace68a5c03fd33fbd8acc4c31ab7b95f94b4fc621e96614510f6d2219ee0e5af25a71419c19df89e3282efc4793f4d8040ffc60704a77e557f4394bbb8358980144ef0f14875d99d5e24acb285a6166461ddb14df7ad05384fdd659c397cba14c8a96305263a44b57c93d5e94cfb258ba5b67af6a70f3bc992014b6f0c363d3c1dd056717e636449a7d23f31078cd9be9ffd0355763dccf9d0e9e7ee96df849c142001100e034140d3229f8d2eb2c4e903c4995fd500ec4af5f46429f4fe81fb45dc1ab233bc34a93a75bd81da539d4ab16db60d610a495900f00ce603d3756dab1e64ad66c8a0d1edb4f02bdf52df12d2723aeb8c7fa5437a4df2992f7c1dd617150bdf289832d8cd997271f5dde003e88207b1827a540d4aeba41bcd66cd230a2d675eeefc440a826910a9726672d5a181ae8e6e91ebabe68033d51647a7e5e4ebfb5e9d1456f6a0d10c086aa7a6fc40de62278de5c14f8bd6ee99f9b07bea011b4a9c9d18918cb269887bb6b1e1d711bcd1fff72dac8bc27fa607cc754ebb629ff44f3244f4bd6397d676f71fa4fa81da2ae7abe9790c60d15ec47112dc28e7bc418fbb4571ad5d317515eb3259cc5742a89125540bf940698274ef0329811247c2e4ecb984fa1abb95f40de1bb952f5b5722f134de777b1420a04482d28141963d3c5bdf9545c824cb6df806624da15757fe263a5142dbef181759d07f44adbc5c9506f4bed69ab6603d5b02d27269dbad138d15ca37f232e4ad7fcfc53309c43e1065fb7835893cc4ab97253043ecca874290644e8478acb13e1ac0313fa42e263afda472b54ba3d620a70562b6a8a1c70faf917d7cc429e1df73febc40d49b8d1f010713061dc0369b9bbe71d9185572b46eb3aeeb766ab948a899462b14b76b2c9179a3b372d05868ec417dc64819acb81697baf06745b9b2496e07376f5dd3fde0c8e10b6581c4fdd1dba292af4c93f98bd0ba1697ea96e0012750d0621d3fdb5c956bac7858010e87e2a0c3580ccf3e43ecd19875f6521a387691b9156b69f2fd576eb4d52db2f5c395ebe7011167fb7cdf0560eccc018b891ec89fbea135f486a82ab5883d9e63de7d2768abb79569714f2265f2c25e6464f62994e7ce78bdacfc5f75ab173cf0d1ded4efafe0585237f886bfa8e0360f4cb79f78144ff460dbf84c7822bb443529c00dce2f9fb19c4a554b7fc2bd6039e1a32b2a0597918337ff388531196608af1da65fa10101d7b8782bbe7370e77e30768bfe5fa16b1957893b22552e3325c9fe620363ea348c7dbffb91c30a9ffaf9d0ee4710e85870778cdcea4e978c777ff3b263afbc4ad8b54f6c505aa207a257c58b4a381b530218f0f65d051937437b074f53b4cfbe1c57967a90325e61181d887c3b36fc21551661c11e8c8705e84dcaa6b340c80a59a3f2503cfc2a3ebe1c5309aa14e540fdde5c519f92948e4c9228b38268debded64766ab25ddcaa22968b184a7f4198d1367e9577803a58f1728791e8aa648db02a04ec195ed25af8d6be98c0ccb6b8992fc595e205f481e783e3f2ff68bdddec3885392f6f76c16e714696c816c52698116f3c7fe5c62f1d0b425f262820d076776294b76890d1add359e583884f2dbd007d940c04c069fdb7f0c0c18dfa7f34df0f0038e166b99d7771bd2e1c142c05a81a3bee909821f364ed9b5d8d2411e09442b9e29707548de5490c821258069bd51130781dad6ead669638a148adec873f1c5fc33cb1d7956da8ed9ba124924b39136aa82206ab39ca2a36ce96e2f8b62e733ccad07d48f24397dceecc2a9b8ffa5bf89b9e4cb4c21f2e528dff51d4f231288c224ab5efe7b73ce66b041babdee2051841bdbc63d90694b00cbcbbb448df35cc3047e66625e0fde2ba2da2ea084e46d8b05aaf79bee4fa463c8e793adfae1d6b8f9a040b98cb40759e1f726ccc58f08435c8904d96278ab55dda82bad489507adf0a64f801ad669b8a0e035865c9fc99c70fcd1aa6cfb4ef9d1f70db53720933dcd2fac760e2dbed69910a358b2b9203672c54c28472b8112787c043cc40b68bf2871349b324f05928f1c23793514ab86ea53a38eb8538cebfe52b4260e558ea28de3fe67e9a04de780701651182d430fdc39cfab61f7998de74c17383a85a0cd933020b94bfce8ca033a7cec31cf22e722ed45e00bbceb0a9b3b4685d2599d33f810a2ed0910909a31bfb97455c071ce114bd300dd36ef605725a10744fe6339f89189036aaa7eeb813a8dbe1a5fa33c41cf665ed20ed2cdab1b639666ee8612405be77c9826827749b1f67f09e3288f27f8028e33a1c41109730f439f951cf3ba93af47a0b8d09991d0401160b17b4a7730ef49a6d3017d2a9a483fbbfef7627906dc3754b05f51415eb22d94c2884cee53d2a7c1f78cfd033e659aa31f9f5141aa8aabcf9e83efb4419cd2898fa535ac290cb4be2636ce4b99681ebcdfa0b66161a84d59ad0c3ba2d85e7c208f73ed5df4505366514074b4e2dac542f1aeb1829c33c404e1a008f0681a7d9495fe9d4ca9b6d2d98da18317f600ca908f808d141d8ed795e25803b09ac5547b4c7752af0c8a7aadb81a62b831f5afa6064ea1ba4ceeee2bd527d5637e56f5f1b82d584c9a142756e40abec6074a92f35b0d2d0e99a9f2520985c0a109b96767d66ef5cd57949cde9d818707113809d6ea75fcd3de47c27238b0a41f4646f99049210021c885e962c3f9238aa11de0264124b4ba5b0b806bd482a906faee56bc3b5b6c4fb6ac9cfe462052c52b1f8f5a26c241d7413bec6915e4fc1054bdca8ff791dd90502414a0b7e44d34ebeead1565c5ca34b1638897d63fd78b056d92604517059f4af9b31e15e12a6b281d72b8986525651c243e2484cf14835e94aa32949c6652605dbf5c0cd31521e38d0e6d34952d3469629b6af52c339136d2a110599ff01e34ae6bfe984583c97b1970c783fd1f2107fec15c917de76c52f72b5bc2e9c0dd00627f98c6cf4be98266ce6371d2260a433e0e4a09ff30d128ffe1af48966dc05ca8bc7b00b93b7bf4a7641eb58224530b9002405703d6a1929f59810194f03d828e90ec8b0c2f4e84e336fa3d63c00c352a3f6b4c8bb9be00cbaebdc06d7a22a942f1d3053f70493338568631ae614f5bf59e901b44db124efab421545570fd6a7dba520d10fae90a67866aca2e51a18808a6c81c11f9411d19812d2288cc759765d7c612caa292fd23c6a0f0851e8ff1cadedd6965b427744485fd5362000d9e68e3fe37e1e70ac831f3ab7343f920d5f6a63be2aefa1d9068afaa9aba35a2a79dafc1c3c12f819b05baac236c3733295a18815ece5ff12a1d7e6b1cf893b0cfcdc0ef2d2e330d27bcdbba393f01e8e6e02e91673dbcddc767b553829646114255ee3372bef5a",
"ipCdiVerifyKey": "d397373f507d1e9d234beceaf9b96c90d41dd052f0b502aa809fc4e20a628763"
},
"ipSecretKey": "97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb93e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000001e0db5bf534883e41957d1aa86db1a67f9eb0ea4af54a4482ced4cbb9a86b2a8c30b36d4b4d6c44c02444af2eb79cd8d64862360c570c97bd84417e03d982afe1a1ccc5dbe74dcd9c560cdca24b2f1f8820200ed0fc761822b6c0ffa4e3755585f497b00b913283df226554be4d44e6643f3b1d6363a28ee75444885bb6cdc8c963f736a1d55b694a7ab8e50352abecdd29885d1765bc5065d49dc2aa3c750c85e52c4409cc6c503a1f2378e2a1720f3c1a5a5bb16e6f0b3aba88167eac227c24136cc94137601a2b23c516cb32f89789a481c0bc50d03b52098698e47ef0a32f243218d17964e4060a2252a036a238abc8bc6ad17fea0df353ab83d5d5aec9f7841e33dd8a1159996a74f6675b8af8c095b87bc346a425a371b264f3e1857e4275eda9aa4cac560e3cb6c2b9cfbbef83ecd4e0e4d3ee9f2fe0a481c8629e1e33c31cdf004dfb3874da0529bb1d7557b58b60485f1f28c5aa3a53c2e909bf72cfd27c2cd841fbe2fe86677ebac1f78d0993c31b28c06b56e99c9ca24a4de6230790af892d4a12409d8547bb7a1dfba77a434e513f3edd7ef73523185f206ae20cc5349f9b4ca53721ad0594bcbddd2a8dd6e91e6ce98f6990066f48b9c609477ac4e6d67bba1e3be3180f3ad1e4a0a8143968e5e7bd1180abd40defbebb302c259420cd09f32cb1f965930bc1da6859d2e4b0c7624b7195fc5f8d87ed1f901dad2393a0d712c0deb7030e9d4db858442f3e43dc280c3faab00dc687b79aff9374142d5f5397413bf76e6f486354dab4486b25c89b26aacfe01fa8d3474ad349baa02e72eeb317365ec6ff7082838454caf7258a796eefacddebfef6a7e958fe67c3abcfa36f9dac5187c659ffeb71d244e1aced60ad0cd517ecccceb3e3b4d6abe3f98bf0c5711782ff085538946e736cd1f5983d4e3bbb9858d1b050ff10ab65b5948ee1e11f12d245c5c71297e3a7f064db9dc7b694af31a88012e719308795b3273498077a39939e9dc338663037c8c50a258e5746d23090ca423a662c4693f18a8dc2506de487110ac347a3d84fcfc33896da7d15935813ae267d2c90cb87c10ddc5d621afd63c31e9e0b0649465806f7ee378e51782e78fae229ba1b9bf9d348cc132e8bd78441d02a30b33e414090756faa9556f0b0e13ff10b38de9e88c2747d21523865175542762320a887113dd04982a6a24f1a67aebb263231c17546509f0ce7e7864da441eb3c22e3326216a78ee739a52ef76925a0addf0cae8e2028a2365e1932f2664c8253e2530dcc00a6ac94f37e6b4c4322c07e62d294cc30ce592db558b66ab56f02c336521f3052941d99f18ed6fe19cf1581fa51c6cf73df2ce4835d4eb1f44c30da55152d38337d53ab4683283161853c2cf39502596",
"ipCdiSecretKey": "04d38446424e77abdbb5b2def3bc38dd10092aeda98ed3986ee6de4cb24df0b2"
}
while the content of ip_keys_pub.json will be
{
"v": 0,
"value": {
"ipIdentity": 1,
"ipDescription": {
"name": "Some name",
"url": "Some url",
"description": "Some description"
},
"ipVerifyKey": "97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb93e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000001e8291b474edadbf9235824f4ceedf0cc33460d6c6a33e4d824763ccb5f8fafadbf4d90f3c4ee6aa0e2897f24c023018808bf3dae766d587b99cb2d001e099d7451e3cecf7bab6ecf746a92b0ddbbfcf0d3d9d72ff5fd8cb9f3ee998fa7763dad6b6f17fecdb85a5631335c3f007baa65e0d0779c40154d91413f809f2234e3bdc597e065d5ba52d4e1d5f9d102452ce50aa22fa4194beae55dfbbdfa23b06301f5633ab0cf8c97c7a75c302928833a1bdaae27c9b746f89df688bd9f82a8c01a4afbf88355db8e135bbcca355216be7a350bfb31701d778017fd4e366b1df8d9ea12d784722281f1f0cf1ca396e450efdac5fdd8770dd0b68dd484edfb46900e9462abb767d806d061c5ca461d47864ba63e56d42443b1c8a74b8433433b337198fa098084b932ccd319ad95ccbdb574d697f6cb990d2fcf503d362a4bf2f292a7c2e6b823b9a466df46a151c61e773c7810902e91ede169d75eeff4660e184698877ca5529b115ac995ab2a65583497ae5cb96a50d6733f115d56d2a30d2ab3d8474aa15ee9e5cdc2c8ac5ff7515052740c9bffcb9258fd16de0e204cf1a84b3a4ab8ff5729d04f66c1c0365f0841aec8b4c0d0c9a2f9fea112755a7707f13a8c57b22977423f71ceda2bc1deff8f117e51ad22003c1de13ccdf0fed482e59068b210332dce14c3b5bd10b0f13c48a171bc49d0a73c8cc8ed716485cc562847b6a1a11c69c2737b31fbc65249947c421aa3970fec68ec948c0e21f6c48ac5aba231732576293e28ba4390d99dea76a3271ab6f9951c8fe2c43dc1e9687b6fcc0918fcbc4bdfd2f00a884fadee89a6ca159633f210c57d02fc0eb19bc3598441d47ee44320349514e03b846079aa2c3a18782250355ae64a1e0ead8b2713db110669640ec85ffadb0ce4e6024a0f9fe1d887433cfd6b6e05e2612e2ea94419e3e858e2f2899677933caa2fad541d9065a06fa9a08ec2034026913c646df9d1be994a6bca142a3c62d2a108d28f8c61a93821043df20641950e3622bc82dd114dad57777740be46f8b69666fd10a8bd73f70e5a75b0c961bf07614e078b5520a81b5031ee84cb1379291440b366042811ad7076689c050efd4b14100f7ba975d74816c4d1ec4e09ad9fd1ebeaa40d2fb6eaa8434c42d740af328100513562601b3c00d81cdadfaa441278e0b8378967f5173ad5077633b5633e4f34c8f9666f5aba378accbe02d18911981954116e25f06628e7a954f5b608d2f9ad1038d6880387b15a54b0b916df10d1b2301c03812fd993d6ad4d8410d24c8909e0f24361a2a9879166d86290e0b368c24e44a9c39fad8244d71b676bb202985c5b18d25376db58d8b5ac1777406ffadda79863167487eeaa93ea88366c3c1985be92424ae664f26ad7e60cba04d824b80b815b976f0a0ea7a2f1dffc38506d6ca922640e087303f3e7d185cd42bc5a828f4adcc91a6ed7d1f52af198145bb15549259bacc4b990264c983f36179f80f298a1d3a5eb312a735b1f6f986031b013205ece6a592ce921ba0f4fa4ea94b3fa35b7fb9f44aa4eea80d06d716b938eeb71a7a1ce589f674b97824a40a067545dfede4c63cf300d3565982adfaf13d5c5d73e6e4334993904a649f127847bc3b5ea85d8097ad8ac0a7c1e1159fc69f19a46a365627783609cc57076b57c40f0385a8f4f1f0988a16b4eed30eb1ab9ba040e52fa4f61dec42bd537120434984d3d39fb2f50dbf3a41f123da0f734b779a0e97170c8348a018dce54a4352dca72873372c1b217b1a5e9925bfe8d8e4188e2564103cb9f6bf00d45d46d5a7a6959180e40fce1b858bcdd7e05cd3ddc882a5dfc851b4e7dd44088dd0d7f360eaae5792a1abd293166f50ff1894431e3cb36a467b654e2d7d980c6a85295453bf0713050d46255b0c3bb5f1fa32a2eb46440c6b82dff94946f5b5b7d6cca11b6a5fe58556309622099843200ab6068fde4d063742851643961c2e6dd4d01a07b47c0cc307ac3f98744802dabad810a0a29ecbb99de9591b340000001ead41ecdf25709d4947be8e3d394d080e89cc24201ce52dc0ac65b32337263313dc2f37cda8887a7f238e2c1bc1ac81310e0f6ac407f31a4066a7f156a0574f1305a2370fcda7ed40a618c97972878b407bf12381efaf5dec1e39416fb1341cd8b56505a0f5ee18d2fae6849cbf3313a622b530f54249a1e65c136aae518db79ca4ace708cd0dfa773ce42f511e318b3010056db7d0396e95784250ee0454d6175261bd9d78e6a63f571dacb9e0c2168e84078b5d361233e91705f074c742d6d3b1353f4fd30496b3866166fec4a1793c26808ab36b33ba8d3a3e4d29a76b49ab1466e84864799295d604635d8fdcc4b810ca915c5e22f54671c30947259a5d6c4fe2297185237c292cbcdbbec87d21a2df9fc19aadf071d78056af0195c22911899e3e449819953b225e9f577ef686c94e0aa610d639927f50d90acd46a19bd69c85c2a3aaac0436c1e4e824e9f2c6640c386995308a7c4a22c8ef0d0d8705bba724ed4bc8d0141ea3ca2a787bd1d70e8d0a0a2471e53d9216b803fecda57161aec630b829f0c84689c96910179778f388fe8d7867783c8e931cd77c23e26ac245ccff377c9fd9808a06e8b8a016a3eb191d0c3d9b3500275ed49e882943816289cf645399b619e6224f1ee5ed2ab3a088a667733f207d4a0c7e614ec68c7627834f1983d0d84529bfbda71ac07019ab4fb9ee65e89ad09b96c8f37b47414d674dc1da1e1e22b0047ef1f88f06ddd1ff09a40ec1d8c17c6800b5a71c5b753e43a5fe84945c886d0ef48dc043f7ff2bb0ace68a5c03fd33fbd8acc4c31ab7b95f94b4fc621e96614510f6d2219ee0e5af25a71419c19df89e3282efc4793f4d8040ffc60704a77e557f4394bbb8358980144ef0f14875d99d5e24acb285a6166461ddb14df7ad05384fdd659c397cba14c8a96305263a44b57c93d5e94cfb258ba5b67af6a70f3bc992014b6f0c363d3c1dd056717e636449a7d23f31078cd9be9ffd0355763dccf9d0e9e7ee96df849c142001100e034140d3229f8d2eb2c4e903c4995fd500ec4af5f46429f4fe81fb45dc1ab233bc34a93a75bd81da539d4ab16db60d610a495900f00ce603d3756dab1e64ad66c8a0d1edb4f02bdf52df12d2723aeb8c7fa5437a4df2992f7c1dd617150bdf289832d8cd997271f5dde003e88207b1827a540d4aeba41bcd66cd230a2d675eeefc440a826910a9726672d5a181ae8e6e91ebabe68033d51647a7e5e4ebfb5e9d1456f6a0d10c086aa7a6fc40de62278de5c14f8bd6ee99f9b07bea011b4a9c9d18918cb269887bb6b1e1d711bcd1fff72dac8bc27fa607cc754ebb629ff44f3244f4bd6397d676f71fa4fa81da2ae7abe9790c60d15ec47112dc28e7bc418fbb4571ad5d317515eb3259cc5742a89125540bf940698274ef0329811247c2e4ecb984fa1abb95f40de1bb952f5b5722f134de777b1420a04482d28141963d3c5bdf9545c824cb6df806624da15757fe263a5142dbef181759d07f44adbc5c9506f4bed69ab6603d5b02d27269dbad138d15ca37f232e4ad7fcfc53309c43e1065fb7835893cc4ab97253043ecca874290644e8478acb13e1ac0313fa42e263afda472b54ba3d620a70562b6a8a1c70faf917d7cc429e1df73febc40d49b8d1f010713061dc0369b9bbe71d9185572b46eb3aeeb766ab948a899462b14b76b2c9179a3b372d05868ec417dc64819acb81697baf06745b9b2496e07376f5dd3fde0c8e10b6581c4fdd1dba292af4c93f98bd0ba1697ea96e0012750d0621d3fdb5c956bac7858010e87e2a0c3580ccf3e43ecd19875f6521a387691b9156b69f2fd576eb4d52db2f5c395ebe7011167fb7cdf0560eccc018b891ec89fbea135f486a82ab5883d9e63de7d2768abb79569714f2265f2c25e6464f62994e7ce78bdacfc5f75ab173cf0d1ded4efafe0585237f886bfa8e0360f4cb79f78144ff460dbf84c7822bb443529c00dce2f9fb19c4a554b7fc2bd6039e1a32b2a0597918337ff388531196608af1da65fa10101d7b8782bbe7370e77e30768bfe5fa16b1957893b22552e3325c9fe620363ea348c7dbffb91c30a9ffaf9d0ee4710e85870778cdcea4e978c777ff3b263afbc4ad8b54f6c505aa207a257c58b4a381b530218f0f65d051937437b074f53b4cfbe1c57967a90325e61181d887c3b36fc21551661c11e8c8705e84dcaa6b340c80a59a3f2503cfc2a3ebe1c5309aa14e540fdde5c519f92948e4c9228b38268debded64766ab25ddcaa22968b184a7f4198d1367e9577803a58f1728791e8aa648db02a04ec195ed25af8d6be98c0ccb6b8992fc595e205f481e783e3f2ff68bdddec3885392f6f76c16e714696c816c52698116f3c7fe5c62f1d0b425f262820d076776294b76890d1add359e583884f2dbd007d940c04c069fdb7f0c0c18dfa7f34df0f0038e166b99d7771bd2e1c142c05a81a3bee909821f364ed9b5d8d2411e09442b9e29707548de5490c821258069bd51130781dad6ead669638a148adec873f1c5fc33cb1d7956da8ed9ba124924b39136aa82206ab39ca2a36ce96e2f8b62e733ccad07d48f24397dceecc2a9b8ffa5bf89b9e4cb4c21f2e528dff51d4f231288c224ab5efe7b73ce66b041babdee2051841bdbc63d90694b00cbcbbb448df35cc3047e66625e0fde2ba2da2ea084e46d8b05aaf79bee4fa463c8e793adfae1d6b8f9a040b98cb40759e1f726ccc58f08435c8904d96278ab55dda82bad489507adf0a64f801ad669b8a0e035865c9fc99c70fcd1aa6cfb4ef9d1f70db53720933dcd2fac760e2dbed69910a358b2b9203672c54c28472b8112787c043cc40b68bf2871349b324f05928f1c23793514ab86ea53a38eb8538cebfe52b4260e558ea28de3fe67e9a04de780701651182d430fdc39cfab61f7998de74c17383a85a0cd933020b94bfce8ca033a7cec31cf22e722ed45e00bbceb0a9b3b4685d2599d33f810a2ed0910909a31bfb97455c071ce114bd300dd36ef605725a10744fe6339f89189036aaa7eeb813a8dbe1a5fa33c41cf665ed20ed2cdab1b639666ee8612405be77c9826827749b1f67f09e3288f27f8028e33a1c41109730f439f951cf3ba93af47a0b8d09991d0401160b17b4a7730ef49a6d3017d2a9a483fbbfef7627906dc3754b05f51415eb22d94c2884cee53d2a7c1f78cfd033e659aa31f9f5141aa8aabcf9e83efb4419cd2898fa535ac290cb4be2636ce4b99681ebcdfa0b66161a84d59ad0c3ba2d85e7c208f73ed5df4505366514074b4e2dac542f1aeb1829c33c404e1a008f0681a7d9495fe9d4ca9b6d2d98da18317f600ca908f808d141d8ed795e25803b09ac5547b4c7752af0c8a7aadb81a62b831f5afa6064ea1ba4ceeee2bd527d5637e56f5f1b82d584c9a142756e40abec6074a92f35b0d2d0e99a9f2520985c0a109b96767d66ef5cd57949cde9d818707113809d6ea75fcd3de47c27238b0a41f4646f99049210021c885e962c3f9238aa11de0264124b4ba5b0b806bd482a906faee56bc3b5b6c4fb6ac9cfe462052c52b1f8f5a26c241d7413bec6915e4fc1054bdca8ff791dd90502414a0b7e44d34ebeead1565c5ca34b1638897d63fd78b056d92604517059f4af9b31e15e12a6b281d72b8986525651c243e2484cf14835e94aa32949c6652605dbf5c0cd31521e38d0e6d34952d3469629b6af52c339136d2a110599ff01e34ae6bfe984583c97b1970c783fd1f2107fec15c917de76c52f72b5bc2e9c0dd00627f98c6cf4be98266ce6371d2260a433e0e4a09ff30d128ffe1af48966dc05ca8bc7b00b93b7bf4a7641eb58224530b9002405703d6a1929f59810194f03d828e90ec8b0c2f4e84e336fa3d63c00c352a3f6b4c8bb9be00cbaebdc06d7a22a942f1d3053f70493338568631ae614f5bf59e901b44db124efab421545570fd6a7dba520d10fae90a67866aca2e51a18808a6c81c11f9411d19812d2288cc759765d7c612caa292fd23c6a0f0851e8ff1cadedd6965b427744485fd5362000d9e68e3fe37e1e70ac831f3ab7343f920d5f6a63be2aefa1d9068afaa9aba35a2a79dafc1c3c12f819b05baac236c3733295a18815ece5ff12a1d7e6b1cf893b0cfcdc0ef2d2e330d27bcdbba393f01e8e6e02e91673dbcddc767b553829646114255ee3372bef5a",
"ipCdiVerifyKey": "d397373f507d1e9d234beceaf9b96c90d41dd052f0b502aa809fc4e20a628763"
}
}