Skip to content

Commit 202e4be

Browse files
committed
refactor(identity): add identity commitment attribute
1 parent fee7f10 commit 202e4be

File tree

5 files changed

+22
-28
lines changed

5 files changed

+22
-28
lines changed

packages/identity/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ yarn add @semaphore-protocol/identity
7676
import { Identity } from "@semaphore-protocol/identity"
7777

7878
// The identity will be generated randomly.
79-
const { privateKey, publicKey } = new Identity()
79+
const { privateKey, publicKey, identityCommitment } = new Identity()
8080

8181
// Alternatively, you can pass your private key.
8282
const identity = new Identity("your-private-key")
@@ -106,7 +106,7 @@ const signature = identity.signMessage(message)
106106
identity.verifySignature(message, signature)
107107
```
108108

109-
\# **Identity.verifySignature**(message: _BigNumberish_, signature: _Signature_, publicKey: _BigNumber_ | _Point_): _boolean_
109+
\# **Identity.verifySignature**(message: _BigNumberish_, signature: _Signature_, publicKey: _Point_): _boolean_
110110

111111
```typescript
112112
import { Identity } from "@semaphore-protocol/identity"

packages/identity/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
"rollup-plugin-typescript2": "^0.31.2"
3737
},
3838
"dependencies": {
39-
"@zk-kit/eddsa-poseidon": "0.4.1"
39+
"@zk-kit/eddsa-poseidon": "0.4.1",
40+
"poseidon-lite": "^0.2.0"
4041
}
4142
}

packages/identity/src/identity.test.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,18 @@ describe("Identity", () => {
88
const identity = new Identity()
99

1010
expect(Buffer.isBuffer(identity.privateKey)).toBeTruthy()
11-
expect(typeof identity.publicKey).toBe("string")
1211
expect(typeof identity.secretScalar).toBe("string")
13-
expect(identity.unpackedPublicKey).toHaveLength(2)
12+
expect(identity.publicKey).toHaveLength(2)
13+
expect(typeof identity.identityCommitment).toBe("string")
1414
})
1515

1616
it("Should create deterministic identities from a secret (private key)", () => {
1717
const identity = new Identity(privateKey)
1818

1919
expect(typeof identity.privateKey).toBe("string")
20-
expect(typeof identity.publicKey).toBe("string")
2120
expect(typeof identity.secretScalar).toBe("string")
22-
expect(identity.unpackedPublicKey).toHaveLength(2)
23-
expect(typeof identity.unpackedPublicKey[0]).toBe("string")
21+
expect(identity.publicKey).toHaveLength(2)
22+
expect(typeof identity.identityCommitment).toBe("string")
2423
})
2524
})
2625

@@ -51,15 +50,14 @@ describe("Identity", () => {
5150
const signature = identity.signMessage("message")
5251

5352
expect(Identity.verifySignature("message", signature, identity.publicKey)).toBeTruthy()
54-
expect(Identity.verifySignature("message", signature, BigInt(identity.publicKey))).toBeTruthy()
5553
})
5654

5755
it("Should verify an external signature with an unpacked public key", () => {
5856
const identity = new Identity(privateKey)
5957

6058
const signature = identity.signMessage("message")
6159

62-
expect(Identity.verifySignature("message", signature, identity.unpackedPublicKey)).toBeTruthy()
60+
expect(Identity.verifySignature("message", signature, identity.publicKey)).toBeTruthy()
6361
})
6462
})
6563
})

packages/identity/src/identity.ts

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,20 @@
11
import {
2-
BigNumber,
32
BigNumberish,
43
Point,
54
Signature,
65
derivePublicKey,
76
deriveSecretScalar,
8-
packPublicKey,
97
signMessage,
10-
unpackPublicKey,
118
verifySignature
129
} from "@zk-kit/eddsa-poseidon"
1310
import { randomBytes } from "crypto"
11+
import { poseidon2 } from "poseidon-lite/poseidon2"
1412

1513
export default class Identity {
1614
private _privateKey: BigNumberish
1715
private _secretScalar: string
18-
private _unpackedPublicKey: Point<string>
19-
private _publicKey: string
16+
private _publicKey: Point<string>
17+
private _identityCommitment: string
2018

2119
/**
2220
* Initializes the class attributes based on the parameters.
@@ -26,9 +24,9 @@ export default class Identity {
2624
this._privateKey = privateKey
2725
this._secretScalar = deriveSecretScalar(privateKey)
2826

29-
this._unpackedPublicKey = derivePublicKey(privateKey)
27+
this._publicKey = derivePublicKey(privateKey)
3028

31-
this._publicKey = packPublicKey(this._unpackedPublicKey) as string
29+
this._identityCommitment = poseidon2(this._publicKey).toString()
3230
}
3331

3432
/**
@@ -51,31 +49,27 @@ export default class Identity {
5149
* Returns the public key.
5250
* @returns The public key.
5351
*/
54-
public get publicKey(): string {
52+
public get publicKey(): Point<string> {
5553
return this._publicKey
5654
}
5755

5856
/**
59-
* Returns the unpacked public key.
60-
* @returns The unpacked public key.
57+
* Returns the identity commitment.
58+
* @returns The identity commitment.
6159
*/
62-
public get unpackedPublicKey(): Point<string> {
63-
return this._unpackedPublicKey
60+
public get identityCommitment(): string {
61+
return this._identityCommitment
6462
}
6563

6664
public signMessage(message: BigNumberish): Signature<string> {
6765
return signMessage(this.privateKey, message)
6866
}
6967

7068
public verifySignature(message: BigNumberish, signature: Signature): boolean {
71-
return verifySignature(message, signature, this._unpackedPublicKey)
69+
return verifySignature(message, signature, this._publicKey)
7270
}
7371

74-
static verifySignature(message: BigNumberish, signature: Signature, publicKey: BigNumber | Point): boolean {
75-
if (typeof publicKey === "string" || typeof publicKey === "bigint") {
76-
publicKey = unpackPublicKey(publicKey)
77-
}
78-
72+
static verifySignature(message: BigNumberish, signature: Signature, publicKey: Point): boolean {
7973
return verifySignature(message, signature, publicKey)
8074
}
8175
}

yarn.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8492,6 +8492,7 @@ __metadata:
84928492
"@rollup/plugin-commonjs": ^24.0.1
84938493
"@rollup/plugin-node-resolve": ^15.0.1
84948494
"@zk-kit/eddsa-poseidon": 0.4.1
8495+
poseidon-lite: ^0.2.0
84958496
rollup-plugin-cleanup: ^3.2.1
84968497
rollup-plugin-typescript2: ^0.31.2
84978498
languageName: unknown

0 commit comments

Comments
 (0)