@openzeppelin/miden-multisig-client 0.13.3 → 0.14.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -13
- package/dist/account/builder.d.ts +3 -3
- package/dist/account/builder.d.ts.map +1 -1
- package/dist/account/builder.js +10 -10
- package/dist/account/builder.js.map +1 -1
- package/dist/account/builder.test.js +16 -14
- package/dist/account/builder.test.js.map +1 -1
- package/dist/account/masm/account-components/auth.d.ts +4 -4
- package/dist/account/masm/account-components/auth.d.ts.map +1 -1
- package/dist/account/masm/account-components/auth.js +8 -12
- package/dist/account/masm/account-components/auth.js.map +1 -1
- package/dist/account/masm/auth.d.ts +4 -4
- package/dist/account/masm/auth.d.ts.map +1 -1
- package/dist/account/masm/auth.js +226 -124
- package/dist/account/masm/auth.js.map +1 -1
- package/dist/account/storage.d.ts.map +1 -1
- package/dist/account/storage.js +24 -6
- package/dist/account/storage.js.map +1 -1
- package/dist/account/storage.test.d.ts +2 -0
- package/dist/account/storage.test.d.ts.map +1 -0
- package/dist/account/storage.test.js +73 -0
- package/dist/account/storage.test.js.map +1 -0
- package/dist/client.d.ts +9 -9
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +24 -14
- package/dist/client.js.map +1 -1
- package/dist/client.test.js +45 -8
- package/dist/client.test.js.map +1 -1
- package/dist/index.d.ts +6 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -12
- package/dist/index.js.map +1 -1
- package/dist/multisig/proposal/execution.d.ts +3 -2
- package/dist/multisig/proposal/execution.d.ts.map +1 -1
- package/dist/multisig/proposal/execution.js +8 -12
- package/dist/multisig/proposal/execution.js.map +1 -1
- package/dist/multisig.d.ts +10 -4
- package/dist/multisig.d.ts.map +1 -1
- package/dist/multisig.js +97 -71
- package/dist/multisig.js.map +1 -1
- package/dist/multisig.test.js +481 -29
- package/dist/multisig.test.js.map +1 -1
- package/dist/procedures.d.ts +8 -8
- package/dist/procedures.js +8 -8
- package/dist/raw-client.d.ts +13 -0
- package/dist/raw-client.d.ts.map +1 -0
- package/dist/raw-client.js +42 -0
- package/dist/raw-client.js.map +1 -0
- package/dist/raw-client.test.d.ts +2 -0
- package/dist/raw-client.test.d.ts.map +1 -0
- package/dist/raw-client.test.js +89 -0
- package/dist/raw-client.test.js.map +1 -0
- package/dist/signers/ecdsa.d.ts +3 -1
- package/dist/signers/ecdsa.d.ts.map +1 -1
- package/dist/signers/ecdsa.js +15 -1
- package/dist/signers/ecdsa.js.map +1 -1
- package/dist/signers/ecdsa.test.js +27 -4
- package/dist/signers/ecdsa.test.js.map +1 -1
- package/dist/signers/falcon.d.ts +3 -1
- package/dist/signers/falcon.d.ts.map +1 -1
- package/dist/signers/falcon.js +15 -1
- package/dist/signers/falcon.js.map +1 -1
- package/dist/signers/falcon.test.js +39 -3
- package/dist/signers/falcon.test.js.map +1 -1
- package/dist/transaction/consumeNotes.d.ts +2 -2
- package/dist/transaction/consumeNotes.d.ts.map +1 -1
- package/dist/transaction/consumeNotes.js +5 -4
- package/dist/transaction/consumeNotes.js.map +1 -1
- package/dist/transaction/options.d.ts +1 -0
- package/dist/transaction/options.d.ts.map +1 -1
- package/dist/transaction/p2id.d.ts.map +1 -1
- package/dist/transaction/p2id.js +7 -10
- package/dist/transaction/p2id.js.map +1 -1
- package/dist/transaction/p2id.test.js +19 -9
- package/dist/transaction/p2id.test.js.map +1 -1
- package/dist/transaction/summary.d.ts +2 -2
- package/dist/transaction/summary.d.ts.map +1 -1
- package/dist/transaction/summary.js +4 -2
- package/dist/transaction/summary.js.map +1 -1
- package/dist/transaction/updateGuardian.d.ts +2 -2
- package/dist/transaction/updateGuardian.d.ts.map +1 -1
- package/dist/transaction/updateGuardian.js +8 -11
- package/dist/transaction/updateGuardian.js.map +1 -1
- package/dist/transaction/updateProcedureThreshold.d.ts +2 -2
- package/dist/transaction/updateProcedureThreshold.d.ts.map +1 -1
- package/dist/transaction/updateProcedureThreshold.js +8 -10
- package/dist/transaction/updateProcedureThreshold.js.map +1 -1
- package/dist/transaction/updateSigners.d.ts +2 -2
- package/dist/transaction/updateSigners.d.ts.map +1 -1
- package/dist/transaction/updateSigners.js +8 -10
- package/dist/transaction/updateSigners.js.map +1 -1
- package/dist/transaction.test.js +6 -6
- package/dist/transaction.test.js.map +1 -1
- package/dist/utils/key.d.ts.map +1 -1
- package/dist/utils/key.js +3 -3
- package/dist/utils/key.js.map +1 -1
- package/dist/utils/key.test.js +4 -2
- package/dist/utils/key.test.js.map +1 -1
- package/dist/utils/signature.d.ts +2 -0
- package/dist/utils/signature.d.ts.map +1 -1
- package/dist/utils/signature.js +10 -5
- package/dist/utils/signature.js.map +1 -1
- package/dist/utils/signature.test.js +9 -9
- package/dist/utils/signature.test.js.map +1 -1
- package/masm/account_components/auth/multisig.masm +2 -3
- package/masm/account_components/auth/multisig_ecdsa.masm +2 -3
- package/masm/account_components/auth/multisig_guardian.masm +2 -3
- package/masm/account_components/auth/multisig_guardian_ecdsa.masm +2 -3
- package/masm/auth/guardian.masm +30 -8
- package/masm/auth/guardian_ecdsa.masm +24 -7
- package/masm/auth/multisig.masm +86 -55
- package/masm/auth/multisig_ecdsa.masm +86 -54
- package/package.json +3 -3
- package/src/account/builder.test.ts +16 -14
- package/src/account/builder.ts +13 -12
- package/src/account/masm/account-components/auth.ts +8 -12
- package/src/account/masm/auth.ts +226 -124
- package/src/account/storage.test.ts +90 -0
- package/src/account/storage.ts +27 -6
- package/src/client.test.ts +52 -8
- package/src/client.ts +39 -16
- package/src/index.ts +6 -12
- package/src/multisig/proposal/execution.ts +18 -14
- package/src/multisig.test.ts +572 -29
- package/src/multisig.ts +121 -83
- package/src/procedures.ts +8 -8
- package/src/raw-client.test.ts +133 -0
- package/src/raw-client.ts +75 -0
- package/src/signers/ecdsa.test.ts +35 -4
- package/src/signers/ecdsa.ts +18 -2
- package/src/signers/falcon.test.ts +50 -3
- package/src/signers/falcon.ts +18 -2
- package/src/transaction/consumeNotes.ts +16 -5
- package/src/transaction/options.ts +1 -0
- package/src/transaction/p2id.test.ts +19 -9
- package/src/transaction/p2id.ts +8 -13
- package/src/transaction/summary.ts +11 -4
- package/src/transaction/updateGuardian.ts +22 -14
- package/src/transaction/updateProcedureThreshold.ts +20 -15
- package/src/transaction/updateSigners.ts +22 -14
- package/src/transaction.test.ts +6 -6
- package/src/utils/key.test.ts +4 -2
- package/src/utils/key.ts +7 -3
- package/src/utils/signature.test.ts +10 -10
- package/src/utils/signature.ts +12 -5
|
@@ -2,11 +2,12 @@ import {
|
|
|
2
2
|
AdviceMap,
|
|
3
3
|
Felt,
|
|
4
4
|
FeltArray,
|
|
5
|
-
|
|
5
|
+
type MidenClient,
|
|
6
|
+
Poseidon2,
|
|
6
7
|
TransactionRequest,
|
|
7
8
|
TransactionRequestBuilder,
|
|
8
9
|
TransactionScript,
|
|
9
|
-
|
|
10
|
+
type WasmWebClient,
|
|
10
11
|
Word,
|
|
11
12
|
Word as WordType,
|
|
12
13
|
} from '@miden-sdk/miden-sdk';
|
|
@@ -14,6 +15,7 @@ import {
|
|
|
14
15
|
MULTISIG_ECDSA_MASM,
|
|
15
16
|
MULTISIG_MASM,
|
|
16
17
|
} from '../account/masm/auth.js';
|
|
18
|
+
import { compileTxScript } from '../raw-client.js';
|
|
17
19
|
import { normalizeHexWord } from '../utils/encoding.js';
|
|
18
20
|
import { randomWord } from '../utils/random.js';
|
|
19
21
|
import type { SignatureOptions } from './options.js';
|
|
@@ -35,33 +37,35 @@ function buildMultisigConfigAdvice(
|
|
|
35
37
|
felts.push(...word.toFelts());
|
|
36
38
|
}
|
|
37
39
|
const payload = new FeltArray(felts);
|
|
38
|
-
const configHash =
|
|
40
|
+
const configHash = Poseidon2.hashElements(payload);
|
|
39
41
|
return { configHash, payload };
|
|
40
42
|
}
|
|
41
43
|
|
|
42
|
-
function buildUpdateSignersScript(
|
|
43
|
-
|
|
44
|
+
async function buildUpdateSignersScript(
|
|
45
|
+
client: MidenClient | WasmWebClient,
|
|
44
46
|
signatureScheme: SignatureScheme,
|
|
45
|
-
|
|
46
|
-
|
|
47
|
+
midenRpcEndpoint?: string,
|
|
48
|
+
): Promise<TransactionScript> {
|
|
47
49
|
const multisigMasm = signatureScheme === 'ecdsa' ? MULTISIG_ECDSA_MASM : MULTISIG_MASM;
|
|
48
50
|
|
|
49
|
-
const multisigLib = libBuilder.buildLibrary('auth::multisig', multisigMasm);
|
|
50
|
-
libBuilder.linkDynamicLibrary(multisigLib);
|
|
51
|
-
|
|
52
51
|
const scriptSource = `
|
|
53
|
-
use
|
|
52
|
+
use oz_multisig::multisig
|
|
54
53
|
|
|
55
54
|
begin
|
|
56
55
|
call.multisig::update_signers_and_threshold
|
|
57
56
|
end
|
|
58
57
|
`;
|
|
59
58
|
|
|
60
|
-
return
|
|
59
|
+
return compileTxScript(
|
|
60
|
+
client,
|
|
61
|
+
scriptSource,
|
|
62
|
+
[{ namespace: 'oz_multisig::multisig', code: multisigMasm }],
|
|
63
|
+
midenRpcEndpoint,
|
|
64
|
+
);
|
|
61
65
|
}
|
|
62
66
|
|
|
63
67
|
export async function buildUpdateSignersTransactionRequest(
|
|
64
|
-
|
|
68
|
+
client: MidenClient | WasmWebClient,
|
|
65
69
|
threshold: number,
|
|
66
70
|
signerCommitments: string[],
|
|
67
71
|
options: SignatureOptions = {},
|
|
@@ -76,7 +80,11 @@ export async function buildUpdateSignersTransactionRequest(
|
|
|
76
80
|
const advice = new AdviceMap();
|
|
77
81
|
advice.insert(configHashForAdvice, payload);
|
|
78
82
|
|
|
79
|
-
const script = buildUpdateSignersScript(
|
|
83
|
+
const script = await buildUpdateSignersScript(
|
|
84
|
+
client,
|
|
85
|
+
signatureScheme,
|
|
86
|
+
options.midenRpcEndpoint,
|
|
87
|
+
);
|
|
80
88
|
|
|
81
89
|
const authSaltHex = options.salt ? options.salt.toHex() : randomWord().toHex();
|
|
82
90
|
|
package/src/transaction.test.ts
CHANGED
|
@@ -6,7 +6,7 @@ vi.mock('@miden-sdk/miden-sdk', () => ({
|
|
|
6
6
|
AdviceMap: vi.fn(),
|
|
7
7
|
Felt: vi.fn().mockImplementation((v) => ({ value: v })),
|
|
8
8
|
FeltArray: vi.fn().mockImplementation((arr) => arr),
|
|
9
|
-
|
|
9
|
+
Poseidon2: { hashElements: vi.fn() },
|
|
10
10
|
Signature: { deserialize: vi.fn() },
|
|
11
11
|
TransactionRequestBuilder: vi.fn().mockImplementation(() => ({
|
|
12
12
|
withCustomScript: vi.fn().mockReturnThis(),
|
|
@@ -110,21 +110,21 @@ describe('transaction utilities', () => {
|
|
|
110
110
|
});
|
|
111
111
|
|
|
112
112
|
describe('signatureHexToBytes', () => {
|
|
113
|
-
it('should prepend auth scheme byte (
|
|
113
|
+
it('should prepend auth scheme byte (2 = Falcon Poseidon2)', () => {
|
|
114
114
|
const result = signatureHexToBytes('deadbeef');
|
|
115
|
-
expect(result[0]).toBe(
|
|
115
|
+
expect(result[0]).toBe(2);
|
|
116
116
|
expect(result.slice(1)).toEqual(new Uint8Array([0xde, 0xad, 0xbe, 0xef]));
|
|
117
117
|
});
|
|
118
118
|
|
|
119
119
|
it('should prepend auth scheme byte (1 = ECDSA)', () => {
|
|
120
120
|
const result = signatureHexToBytes('deadbeef', 'ecdsa');
|
|
121
|
-
expect(result[0]).toBe(1);
|
|
121
|
+
expect(result[0]).toBe(1);
|
|
122
122
|
expect(result.slice(1)).toEqual(new Uint8Array([0xde, 0xad, 0xbe, 0xef]));
|
|
123
123
|
});
|
|
124
124
|
|
|
125
125
|
it('should handle 0x prefix', () => {
|
|
126
126
|
const result = signatureHexToBytes('0xaabbccdd');
|
|
127
|
-
expect(result[0]).toBe(
|
|
127
|
+
expect(result[0]).toBe(2);
|
|
128
128
|
expect(result.slice(1)).toEqual(new Uint8Array([0xaa, 0xbb, 0xcc, 0xdd]));
|
|
129
129
|
});
|
|
130
130
|
|
|
@@ -136,7 +136,7 @@ describe('transaction utilities', () => {
|
|
|
136
136
|
|
|
137
137
|
it('should handle empty signature', () => {
|
|
138
138
|
const result = signatureHexToBytes('');
|
|
139
|
-
expect(result).toEqual(new Uint8Array([
|
|
139
|
+
expect(result).toEqual(new Uint8Array([2]));
|
|
140
140
|
});
|
|
141
141
|
});
|
|
142
142
|
});
|
package/src/utils/key.test.ts
CHANGED
|
@@ -18,6 +18,8 @@ vi.mock('@miden-sdk/miden-sdk', () => ({
|
|
|
18
18
|
}));
|
|
19
19
|
|
|
20
20
|
vi.mock('./signature.js', () => ({
|
|
21
|
+
ECDSA_AUTH_SCHEME_ID: 1,
|
|
22
|
+
FALCON_AUTH_SCHEME_ID: 2,
|
|
21
23
|
tryComputeCommitmentHex: vi.fn((_hex: string, _scheme: string) => '0x' + 'cc'.repeat(32)),
|
|
22
24
|
}));
|
|
23
25
|
|
|
@@ -32,9 +34,9 @@ describe('PublicKeyFormat', () => {
|
|
|
32
34
|
expect(result.publicKeyHex).toMatch(/^0x[a-f0-9]{64}$/);
|
|
33
35
|
});
|
|
34
36
|
|
|
35
|
-
it('should detect
|
|
37
|
+
it('should detect 0x02-prefixed key as falcon', () => {
|
|
36
38
|
const bytes = new Uint8Array(200);
|
|
37
|
-
bytes[0] =
|
|
39
|
+
bytes[0] = 0x02;
|
|
38
40
|
bytes[1] = 0xab;
|
|
39
41
|
const result = PublicKeyFormat.parse(bytes);
|
|
40
42
|
expect(result.scheme).toBe('falcon');
|
package/src/utils/key.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { Word } from '@miden-sdk/miden-sdk';
|
|
2
2
|
import type { SignatureScheme } from '../types.js';
|
|
3
3
|
import { bytesToHex } from './encoding.js';
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
ECDSA_AUTH_SCHEME_ID,
|
|
6
|
+
FALCON_AUTH_SCHEME_ID,
|
|
7
|
+
tryComputeCommitmentHex,
|
|
8
|
+
} from './signature.js';
|
|
5
9
|
|
|
6
10
|
export class PublicKeyFormat {
|
|
7
11
|
static parse(publicKey: Uint8Array): {
|
|
@@ -16,12 +20,12 @@ export class PublicKeyFormat {
|
|
|
16
20
|
|
|
17
21
|
const firstByte = publicKey[0];
|
|
18
22
|
|
|
19
|
-
if (firstByte ===
|
|
23
|
+
if (firstByte === FALCON_AUTH_SCHEME_ID && publicKey.length > 100) {
|
|
20
24
|
const hex = bytesToHex(publicKey.slice(1));
|
|
21
25
|
return { scheme: 'falcon', publicKeyHex: hex, commitment: tryComputeCommitmentHex(hex, 'falcon') };
|
|
22
26
|
}
|
|
23
27
|
|
|
24
|
-
if (firstByte ===
|
|
28
|
+
if (firstByte === ECDSA_AUTH_SCHEME_ID && publicKey.length === 34) {
|
|
25
29
|
const hex = bytesToHex(publicKey.slice(1));
|
|
26
30
|
return { scheme: 'ecdsa', publicKeyHex: hex, commitment: tryComputeCommitmentHex(hex, 'ecdsa') };
|
|
27
31
|
}
|
|
@@ -14,7 +14,7 @@ vi.mock('@miden-sdk/miden-sdk', () => ({
|
|
|
14
14
|
})),
|
|
15
15
|
Felt: vi.fn().mockImplementation((v: bigint) => ({ value: v })),
|
|
16
16
|
FeltArray: vi.fn().mockImplementation((arr: any[]) => arr),
|
|
17
|
-
|
|
17
|
+
Poseidon2: {
|
|
18
18
|
hashElements: vi.fn().mockReturnValue({
|
|
19
19
|
toHex: () => '0x' + 'h'.repeat(64),
|
|
20
20
|
}),
|
|
@@ -48,15 +48,15 @@ describe('signature utilities', () => {
|
|
|
48
48
|
});
|
|
49
49
|
|
|
50
50
|
describe('signatureHexToBytes', () => {
|
|
51
|
-
it('prepends auth scheme byte (
|
|
51
|
+
it('prepends auth scheme byte (2 = Falcon Poseidon2)', () => {
|
|
52
52
|
const result = signatureHexToBytes('deadbeef');
|
|
53
|
-
expect(result[0]).toBe(
|
|
53
|
+
expect(result[0]).toBe(2);
|
|
54
54
|
});
|
|
55
55
|
|
|
56
56
|
it('prepends auth scheme byte (1 = ECDSA)', () => {
|
|
57
57
|
const result = signatureHexToBytes('deadbeef', 'ecdsa');
|
|
58
|
-
expect(result[0]).toBe(1);
|
|
59
|
-
|
|
58
|
+
expect(result[0]).toBe(1);
|
|
59
|
+
});
|
|
60
60
|
|
|
61
61
|
it('converts hex to bytes after prefix', () => {
|
|
62
62
|
const result = signatureHexToBytes('deadbeef');
|
|
@@ -65,7 +65,7 @@ describe('signature utilities', () => {
|
|
|
65
65
|
|
|
66
66
|
it('handles 0x prefix', () => {
|
|
67
67
|
const result = signatureHexToBytes('0xaabbccdd');
|
|
68
|
-
expect(result[0]).toBe(
|
|
68
|
+
expect(result[0]).toBe(2);
|
|
69
69
|
expect(result.slice(1)).toEqual(new Uint8Array([0xaa, 0xbb, 0xcc, 0xdd]));
|
|
70
70
|
});
|
|
71
71
|
|
|
@@ -77,12 +77,12 @@ describe('signature utilities', () => {
|
|
|
77
77
|
|
|
78
78
|
it('handles empty signature', () => {
|
|
79
79
|
const result = signatureHexToBytes('');
|
|
80
|
-
expect(result).toEqual(new Uint8Array([
|
|
80
|
+
expect(result).toEqual(new Uint8Array([2]));
|
|
81
81
|
});
|
|
82
82
|
|
|
83
83
|
it('handles empty with 0x prefix', () => {
|
|
84
84
|
const result = signatureHexToBytes('0x');
|
|
85
|
-
expect(result).toEqual(new Uint8Array([
|
|
85
|
+
expect(result).toEqual(new Uint8Array([2]));
|
|
86
86
|
});
|
|
87
87
|
});
|
|
88
88
|
|
|
@@ -100,14 +100,14 @@ describe('signature utilities', () => {
|
|
|
100
100
|
});
|
|
101
101
|
|
|
102
102
|
it('hashes pubkey commitment and message to produce key', async () => {
|
|
103
|
-
const { Word, Signature,
|
|
103
|
+
const { Word, Signature, Poseidon2 } = await import('@miden-sdk/miden-sdk');
|
|
104
104
|
const pubkeyCommitment = Word.fromHex('0x' + 'a'.repeat(64));
|
|
105
105
|
const message = Word.fromHex('0x' + 'b'.repeat(64));
|
|
106
106
|
const signature = Signature.deserialize(new Uint8Array([0, 1, 2, 3]));
|
|
107
107
|
|
|
108
108
|
buildSignatureAdviceEntry(pubkeyCommitment, message, signature);
|
|
109
109
|
|
|
110
|
-
expect(
|
|
110
|
+
expect(Poseidon2.hashElements).toHaveBeenCalled();
|
|
111
111
|
});
|
|
112
112
|
|
|
113
113
|
it('uses toPreparedSignature to get values', async () => {
|
package/src/utils/signature.ts
CHANGED
|
@@ -1,15 +1,22 @@
|
|
|
1
|
-
import { AdviceMap, Felt, FeltArray,
|
|
1
|
+
import { AdviceMap, Felt, FeltArray, Poseidon2, Signature, Word } from '@miden-sdk/miden-sdk';
|
|
2
2
|
import * as midenSdk from '@miden-sdk/miden-sdk';
|
|
3
3
|
import { hexToBytes, normalizeHexWord } from './encoding.js';
|
|
4
4
|
import type { ProposalSignatureEntry, SignatureScheme } from '../types.js';
|
|
5
5
|
|
|
6
|
+
export const ECDSA_AUTH_SCHEME_ID = 1;
|
|
7
|
+
export const FALCON_AUTH_SCHEME_ID = 2;
|
|
8
|
+
|
|
9
|
+
function authSchemeId(scheme: SignatureScheme): number {
|
|
10
|
+
return scheme === 'ecdsa' ? ECDSA_AUTH_SCHEME_ID : FALCON_AUTH_SCHEME_ID;
|
|
11
|
+
}
|
|
12
|
+
|
|
6
13
|
export function signatureHexToBytes(
|
|
7
14
|
hex: string,
|
|
8
15
|
scheme: SignatureScheme = 'falcon',
|
|
9
16
|
): Uint8Array {
|
|
10
17
|
const sigBytes = hexToBytes(hex);
|
|
11
18
|
const withPrefix = new Uint8Array(sigBytes.length + 1);
|
|
12
|
-
withPrefix[0] = scheme
|
|
19
|
+
withPrefix[0] = authSchemeId(scheme);
|
|
13
20
|
withPrefix.set(sigBytes, 1);
|
|
14
21
|
return withPrefix;
|
|
15
22
|
}
|
|
@@ -45,7 +52,7 @@ export function buildSignatureAdviceEntry(
|
|
|
45
52
|
...pubkeyCommitment.toFelts(),
|
|
46
53
|
...message.toFelts(),
|
|
47
54
|
]);
|
|
48
|
-
const key =
|
|
55
|
+
const key = Poseidon2.hashElements(elements);
|
|
49
56
|
|
|
50
57
|
let values: Felt[];
|
|
51
58
|
if (ecdsaPubkeyHex && ecdsaSigHex) {
|
|
@@ -69,7 +76,7 @@ export function tryComputeCommitmentHex(
|
|
|
69
76
|
): string | null {
|
|
70
77
|
const bytes = hexToBytes(pubkeyHex);
|
|
71
78
|
const withPrefix = new Uint8Array(bytes.length + 1);
|
|
72
|
-
withPrefix[0] = scheme
|
|
79
|
+
withPrefix[0] = authSchemeId(scheme);
|
|
73
80
|
withPrefix.set(bytes, 1);
|
|
74
81
|
|
|
75
82
|
try {
|
|
@@ -98,7 +105,7 @@ export function verifyEcdsaCommitment(
|
|
|
98
105
|
|
|
99
106
|
const packedFelts = bytesToPackedU32Felts(bytes);
|
|
100
107
|
const feltArray = new FeltArray(packedFelts);
|
|
101
|
-
const computed =
|
|
108
|
+
const computed = Poseidon2.hashElements(feltArray);
|
|
102
109
|
const computedHex = normalizeHexWord(computed.toHex());
|
|
103
110
|
const expectedNorm = normalizeHexWord(expectedCommitmentHex);
|
|
104
111
|
return {
|