From 07945a37c04148145582a9cede2f225acae27f69 Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Wed, 23 Aug 2023 12:51:33 +0530 Subject: [PATCH] chore(rln_keystore_generator): generate and persist credentials (#1928) * chore(rln_keystore_generator): next iteration * fix: error accessing * fix: indentation --- .../external_config.nim | 8 ++- .../rln_keystore_generator.nim | 57 +++++++++++++++++-- 2 files changed, 60 insertions(+), 5 deletions(-) diff --git a/tools/rln_keystore_generator/external_config.nim b/tools/rln_keystore_generator/external_config.nim index 1373c38d7..7000bbed7 100644 --- a/tools/rln_keystore_generator/external_config.nim +++ b/tools/rln_keystore_generator/external_config.nim @@ -51,7 +51,7 @@ type defaultValue: "", name: "rln-relay-eth-contract-address" }: string - rlnRelayCredentialsPassword* {. + rlnRelayCredPassword* {. desc: "Password for encrypting RLN credentials", defaultValue: "", name: "rln-relay-cred-password" }: string @@ -59,6 +59,12 @@ type proc loadConfig*(T: type RlnKeystoreGeneratorConf): Result[T, string] = try: let conf = RlnKeystoreGeneratorConf.load() + if conf.rlnRelayCredPath == "": + return err("--rln-relay-cred-path must be set") + if conf.rlnRelayEthContractAddress == "": + return err("--rln-relay-eth-contract-address must be set") + if conf.rlnRelayCredPassword == "": + return err("--rln-relay-cred-password must be set") ok(conf) except CatchableError: err(getCurrentExceptionMsg()) diff --git a/tools/rln_keystore_generator/rln_keystore_generator.nim b/tools/rln_keystore_generator/rln_keystore_generator.nim index 3a6e2a98a..58e14dbac 100644 --- a/tools/rln_keystore_generator/rln_keystore_generator.nim +++ b/tools/rln_keystore_generator/rln_keystore_generator.nim @@ -5,26 +5,75 @@ else: import chronicles, - stew/[results] + stew/[results], + std/tempfiles import - ./external_config + ../../waku/waku_keystore, + ../../waku/waku_rln_relay/rln, + ../../waku/waku_rln_relay/conversion_utils, + ./external_config logScope: topics = "rln_keystore_generator" when isMainModule: {.pop.} + # 1. load configuration let confRes = RlnKeystoreGeneratorConf.loadConfig() if confRes.isErr(): - error "failure while loading the configuration", error=confRes.error() + error "failure while loading the configuration", error=confRes.error quit(1) let conf = confRes.get() debug "configuration", conf = $conf - # initialize keystore + # 2. initialize rlnInstance + let rlnInstanceRes = createRLNInstance(d=20, + tree_path = genTempPath("rln_tree", "rln_keystore_generator")) + if rlnInstanceRes.isErr(): + error "failure while creating RLN instance", error=rlnInstanceRes.error + quit(1) + + let rlnInstance = rlnInstanceRes.get() + + # 3. generate credentials + let credentialRes = rlnInstance.membershipKeyGen() + if credentialRes.isErr(): + error "failure while generating credentials", error=credentialRes.error + quit(1) + + let credential = credentialRes.get() + debug "credentials", idTrapdoor = credential.idTrapdoor.inHex(), + idNullifier = credential.idNullifier.inHex(), + idSecretHash = credential.idSecretHash.inHex(), + idCommitment = credential.idCommitment.inHex() + + # 4. write to keystore + ## TODO: after hooking up to the OnchainGroupManager, + ## obtain chainId and treeIndex from the contract + let keystoreCred = MembershipCredentials( + identityCredential: credential, + membershipGroups: @[MembershipGroup( + membershipContract: MembershipContract( + chainId: "1155511", + address: conf.rlnRelayEthContractAddress, + ), + treeIndex: 0, + )] + ) + + let persistRes = addMembershipCredentials(conf.rlnRelayCredPath, + @[keystoreCred], + conf.rlnRelayCredPassword, + RLNAppInfo) + if persistRes.isErr(): + error "failed to persist credentials", error=persistRes.error + quit(1) + + info "credentials persisted", path = conf.rlnRelayCredPath +