h8]+      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None5I Public Key Private Key Point addingPoint subtraction Point scalingPoint scaling, flip (*.). % $ NoneIDegree of a polynomialDegree 0 : constant : P(x) = C Degree 1 : linear : P(x) = C0 + C1 * x .. Degree n : : P(x) = C0 + C1 * x + ... + Cn * x^n:a group of coefficient starting from the smallest degree./Generate a polynomial of the specified degree n+a0 + a1 * x + a2 * x^2 + ... + an-1 * x^n-12Lambda polynomial value for lagrange interpolation,Lambda(i) = Product ( s(j) / (s(j) - s(i)) )None5I The generated proof g1 parameterh1 parameter where h1 = g1^a g2 parameterh2 parameter where h2 = g2^aGenerate a proofVerify a proof:Generate all the proofs with a commonly computed challenge/verify proof with a commonly computed challenge  random valuea DLEQ parameters to generate fromDLEQ parameter used to verifythe proof to verify  None5I8This is a list of participants in one instance of SCRAPEoThe list has a specific *order*, and the order is important to be kept between various calls in this protocol.1An decrypted share decrypted by a party's key anddecrypted shareproof the decryption is valid/Encrypted i'th share value with i'th public keyi'th share valueSecretExtra generator!The ID associated with a share"7The number of shares needed to reconstitute the secret.When the threshold is reached, as in the number of decrypted shares is equal or more than the threshold, the secret should be recoverable through the protocolThreshold need to be a strictly positive, and less to number of participants given N the number of participants, this should hold: 1 <= t < N&-Transform a secret into a usable random value'Prepare a new escrowing contextbThe only needed parameter is the threshold do not re-use an escrow context for different context.(UPrepare a secret into public encrypted shares for distributions using the PVSS schemereturns: * the encrypted secret * the list of public commitments to the scheme * The encrypted shares that should be distributed to each partipants.)Escrow with a given polynomial*Decrypt an Encrypted share using the party's key pair. Doesn't verify if an encrypted share is valid, for this you need to have use +Q1) compute Si = Yi ^ (1/xi) = G^(p(i)) 2) create a proof of the valid decryption,GVerify a decrypted share against the public key and the encrypted share-0Verify that a secret recovered is the one escrow/Recover the DhSecret usedJNeed to pass the correct amount of shares (threshold), preferably from a . call( !"#$%&'('PVSS scheme configuration n/t thresholdParticipants public keys)Participants public keys*+,-./012340  !"#$%&'()*+,-./0"!   #$%()'*+,-/&.  !"#$%&'()*+,-./01234None5IU1An decrypted share decrypted by a party's key andXdecrypted shareYproof the decryption is validZ/An encrypted share associated to a party's key.]#encrypted by participant public key^proof it's a valid share_Secret`Extra generatoraThe ID associated with a share#The number of parties in the schemeb6The number of shares needed to reconstitute the secretThreshold need to be a strictly positive, and less or equal to number of participants given N the number of participants, this should hold: 1 <= t <= Nd-Transform a secret into a usable random valueePrepare a new escrowing contextbThe only needed parameter is the threshold do not re-use an escrow context for different context.fUPrepare a secret into public encrypted shares for distributions using the PVSS schemereturns: * the encrypted secret which is locked symmetrically to the DH-secret (g^random) * the list of public commitments (Cj) to the scheme * The encrypted shares that should be distributed to each partipants.gEscrow with a given polynomialhCreate all the commitments there is  threshold commitments in the listiBCreate all the encrypted share associated with specific public keyjECreate a specific share given a public key and the overall parameterskDecrypt an Encrypted share using the party's key pair. Doesn't verify if an encrypted share is valid, for this you need to use lQ1) compute Si = Yi ^ (1/xi) = G^(p(i)) 2) create a proof of the valid decryptionlVerify an encrypted share@anyone can do that given the extra generator and the commitmentsmGVerify a decrypted share against the public key and the encrypted sharen0Verify that a secret recovered is the one escrowoRecover the DhSecret usedLNeed to pass the correct amount of shares (# threshold), preferably from a p callp4Get #Threshold decrypted share that are deemed validFSum all commitment multiplied by the share id raised at the power of iQC_0 * 1 + C_1 * shareid + C_2 * shareid^2 + C_3 * shareid^3 ... + C_n * shareid^n-OPQRSTUVWXYZ[\]^_`abcdef'PVSS scheme configuration n/t thresholdParticipants public keysgParticipants public keyshijkl+the encrypted and the associated public keymnopindex iall commitmentsqrstu0 OPQRSTUVXYWZ[\]^_`abcdefghijklmnop0ba`_ OPQRSTcZ[\]^UVWXYfgehijklmnpod OPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstu         !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKKLMN!"#$OPQ%R'(*S-./TU0123456789:;VWXABCDEFYZ[\]^_`abcdefghijklmnopqrstuvwxyz{xy|}~z !pvss-0.2.0-44yZEAS3v5K3yAPZSxB9tG Crypto.SCRAPE Crypto.PVSSCrypto.PVSS.ECCCrypto.PVSS.PolynomialCrypto.PVSS.DLEQScalarPoint PublicKey PrivateKeyDhSecretKeyPair toPrivateKey toPublicKeykeyPairGenerateParallelProofsProof ParticipantsEscrowescrowExtraGenescrowPolynomial escrowSecret escrowProofDecryptedShareshareDecryptedValdecryptedValidProof EncryptedSiSecretExtraGenShareId Threshold Commitment unCommitmentsecretToDhSecret escrowNewescrow escrowWith shareDecryptverifyEncryptedSharesverifyDecryptedShare verifySecretreorderDecryptSharesrecover$fBinaryParticipants$fNFDataParticipants$fNFDataEscrow$fBinaryDecryptedShare$fNFDataDecryptedShare$fShowCommitment$fEqCommitment$fNFDataCommitment$fBinaryCommitment$fShowExtraGen $fEqExtraGen$fNFDataExtraGen$fBinaryExtraGen $fShowSecret $fEqSecret$fNFDataSecret$fBinarySecret$fShowEncryptedSi$fEqEncryptedSi$fGenericEncryptedSi$fNFDataEncryptedSi$fBinaryEncryptedSi$fShowDecryptedShare$fEqDecryptedShare$fGenericDecryptedShare $fShowEscrow $fEqEscrow$fGenericEscrow$fShowParticipants$fEqParticipants$fGenericParticipantsdecryptedShareIDEncryptedShareshareIDshareEncryptedValshareValidProofcreateCommitments sharesCreate shareCreateverifyEncryptedSharegetValidRecoveryShares$fBinaryEncryptedShare$fNFDataEncryptedShare$fShowEncryptedShare$fEqEncryptedShare$fGenericEncryptedShare.+.-.**.unScalarunPoint keyFromBytesp256 keyFromNum keyInverse keyGeneratepointToDhSecretpointFromSecret pointIdentity hashPointshashPointsToKeycurveGenerator#+#-#*#^ mulAndSummulPowerAndSum hashSHA256$fBinaryScalar $fBinaryPoint $fEqPoint $fShowPoint $fNFDataPoint$fNFDataKeyPair$fBinaryKeyPairDegree PolynomialgeneratelambdaevaluateatZerodleq_g1dleq_h1dleq_g2dleq_h2verifygenerateParallelverifyParallelparallelProofsChallengeparallelProofsValues ParallelProofparallelProof_zproof_cproof_z ChallengeDLEQ$fNFDataParallelProofs$fBinaryParallelProofs$fNFDataParallelProof$fBinaryParallelProof $fNFDataProof $fBinaryProof$fBinaryChallenge $fNFDataDLEQSicreateXi