Skip to content

Commit

Permalink
Merge pull request #197 from privacy-scaling-explorations/feat/random-pk
Browse files Browse the repository at this point in the history
Generate a random EdDSA private key if it is not provided by devs
  • Loading branch information
cedoor committed Mar 13, 2024
2 parents 8ea2995 + 9a533a9 commit 1ab175c
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 2 deletions.
7 changes: 5 additions & 2 deletions packages/eddsa-poseidon/src/eddsa-poseidon.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,15 @@ import {
unpackPoint
} from "@zk-kit/baby-jubjub"
import type { BigNumberish } from "@zk-kit/utils"
import { crypto } from "@zk-kit/utils"
import { bigNumberishToBigInt, leBigIntToBuffer, leBufferToBigInt } from "@zk-kit/utils/conversions"
import { requireBigNumberish } from "@zk-kit/utils/error-handlers"
import F1Field from "@zk-kit/utils/f1-field"
import * as scalar from "@zk-kit/utils/scalar"
import { Buffer } from "buffer"
import { poseidon5 } from "poseidon-lite/poseidon5"
import { Signature } from "./types"
import { checkMessage, checkPrivateKey, isPoint, isSignature, pruneBuffer, hash as blake } from "./utils"
import { hash as blake, checkMessage, checkPrivateKey, isPoint, isSignature, pruneBuffer } from "./utils"

/**
* Derives a secret scalar from a given EdDSA private key.
Expand Down Expand Up @@ -188,9 +190,10 @@ export class EdDSAPoseidon {

/**
* Initializes a new instance, deriving necessary cryptographic parameters from the provided private key.
* If the private key is not passed as a parameter, a random 32-byte key is generated.
* @param privateKey The private key used for signing and public key derivation.
*/
constructor(privateKey: BigNumberish) {
constructor(privateKey: BigNumberish = Buffer.from(crypto.getRandomValues(32))) {
this.privateKey = privateKey
this.secretScalar = deriveSecretScalar(privateKey)
this.publicKey = derivePublicKey(privateKey)
Expand Down
12 changes: 12 additions & 0 deletions packages/eddsa-poseidon/tests/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -260,4 +260,16 @@ describe("EdDSAPoseidon", () => {
expect(eddsa.packedPublicKey).toBe(packPublicKey(eddsa.publicKey))
expect(eddsa.verifySignature(message, signature)).toBeTruthy()
})

it("Should create an EdDSAPoseidon instance with a random private key", async () => {
const eddsa = new EdDSAPoseidon()

const signature = eddsa.signMessage(message)

expect(eddsa.privateKey).toBeInstanceOf(Buffer)
expect(eddsa.privateKey).toHaveLength(32)
expect(eddsa.secretScalar).toBe(deriveSecretScalar(eddsa.privateKey))
expect(eddsa.packedPublicKey).toBe(packPublicKey(eddsa.publicKey))
expect(eddsa.verifySignature(message, signature)).toBeTruthy()
})
})

0 comments on commit 1ab175c

Please sign in to comment.