@openzeppelin/miden-multisig-client 0.13.4 → 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 +7 -4
- package/dist/multisig.d.ts.map +1 -1
- package/dist/multisig.js +53 -35
- package/dist/multisig.js.map +1 -1
- package/dist/multisig.test.js +17 -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 +17 -29
- package/src/multisig.ts +61 -36
- 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
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 {
|