@openzeppelin/miden-multisig-client 0.12.7 → 0.13.0
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 +42 -4
- package/dist/account/builder.d.ts +1 -1
- package/dist/account/builder.d.ts.map +1 -1
- package/dist/account/builder.js +7 -5
- package/dist/account/builder.js.map +1 -1
- package/dist/account/masm.d.ts +3 -3
- package/dist/account/masm.d.ts.map +1 -1
- package/dist/account/masm.js +101 -98
- package/dist/account/masm.js.map +1 -1
- package/dist/account/storage.d.ts +1 -1
- package/dist/account/storage.d.ts.map +1 -1
- package/dist/account/storage.js +17 -7
- package/dist/account/storage.js.map +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +2 -2
- package/dist/client.js.map +1 -1
- package/dist/client.test.js +4 -4
- package/dist/client.test.js.map +1 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/inspector.d.ts +1 -1
- package/dist/inspector.d.ts.map +1 -1
- package/dist/inspector.js +16 -10
- package/dist/inspector.js.map +1 -1
- package/dist/inspector.test.js +33 -22
- package/dist/inspector.test.js.map +1 -1
- package/dist/multisig/helpers.d.ts +1 -1
- package/dist/multisig/helpers.d.ts.map +1 -1
- package/dist/multisig/helpers.js +1 -1
- package/dist/multisig/helpers.js.map +1 -1
- package/dist/multisig/helpers.test.js +2 -2
- package/dist/multisig/helpers.test.js.map +1 -1
- package/dist/multisig/proposal/execution.d.ts +18 -0
- package/dist/multisig/proposal/execution.d.ts.map +1 -0
- package/dist/multisig/proposal/execution.js +147 -0
- package/dist/multisig/proposal/execution.js.map +1 -0
- package/dist/multisig/proposal/parser.d.ts +17 -0
- package/dist/multisig/proposal/parser.d.ts.map +1 -0
- package/dist/multisig/proposal/parser.js +147 -0
- package/dist/multisig/proposal/parser.js.map +1 -0
- package/dist/multisig/signing.d.ts +5 -0
- package/dist/multisig/signing.d.ts.map +1 -0
- package/dist/multisig/signing.js +14 -0
- package/dist/multisig/signing.js.map +1 -0
- package/dist/multisig.d.ts +9 -13
- package/dist/multisig.d.ts.map +1 -1
- package/dist/multisig.js +109 -337
- package/dist/multisig.js.map +1 -1
- package/dist/multisig.test.js +8 -4
- package/dist/multisig.test.js.map +1 -1
- package/dist/signer.d.ts +2 -20
- package/dist/signer.d.ts.map +1 -1
- package/dist/signer.js +2 -82
- package/dist/signer.js.map +1 -1
- package/dist/signer.test.js +24 -24
- package/dist/signer.test.js.map +1 -1
- package/dist/signers/ecdsa.d.ts +12 -0
- package/dist/signers/ecdsa.d.ts.map +1 -0
- package/dist/signers/ecdsa.js +30 -0
- package/dist/signers/ecdsa.js.map +1 -0
- package/dist/signers/falcon.d.ts +12 -0
- package/dist/signers/falcon.d.ts.map +1 -0
- package/dist/signers/falcon.js +31 -0
- package/dist/signers/falcon.js.map +1 -0
- package/dist/signers/falcon.test.d.ts +2 -0
- package/dist/signers/falcon.test.d.ts.map +1 -0
- package/dist/signers/falcon.test.js +113 -0
- package/dist/signers/falcon.test.js.map +1 -0
- package/dist/signers/index.d.ts +5 -0
- package/dist/signers/index.d.ts.map +1 -0
- package/dist/signers/index.js +5 -0
- package/dist/signers/index.js.map +1 -0
- package/dist/signers/miden-wallet.d.ts +16 -0
- package/dist/signers/miden-wallet.d.ts.map +1 -0
- package/dist/signers/miden-wallet.js +35 -0
- package/dist/signers/miden-wallet.js.map +1 -0
- package/dist/signers/miden-wallet.test.d.ts +2 -0
- package/dist/signers/miden-wallet.test.d.ts.map +1 -0
- package/dist/signers/miden-wallet.test.js +107 -0
- package/dist/signers/miden-wallet.test.js.map +1 -0
- package/dist/signers/para.d.ts +21 -0
- package/dist/signers/para.d.ts.map +1 -0
- package/dist/signers/para.js +43 -0
- package/dist/signers/para.js.map +1 -0
- package/dist/signers/para.test.d.ts +2 -0
- package/dist/signers/para.test.d.ts.map +1 -0
- package/dist/signers/para.test.js +88 -0
- package/dist/signers/para.test.js.map +1 -0
- package/dist/transaction/consumeNotes.d.ts +3 -3
- package/dist/transaction/consumeNotes.d.ts.map +1 -1
- package/dist/transaction/consumeNotes.js +11 -7
- package/dist/transaction/consumeNotes.js.map +1 -1
- package/dist/transaction/options.d.ts +2 -2
- package/dist/transaction/options.d.ts.map +1 -1
- package/dist/transaction/p2id.d.ts +1 -1
- package/dist/transaction/p2id.d.ts.map +1 -1
- package/dist/transaction/p2id.js +5 -5
- package/dist/transaction/p2id.js.map +1 -1
- package/dist/transaction/summary.d.ts +1 -1
- package/dist/transaction/summary.d.ts.map +1 -1
- package/dist/transaction/summary.js +1 -1
- package/dist/transaction/summary.js.map +1 -1
- package/dist/transaction/updatePsm.d.ts +1 -1
- package/dist/transaction/updatePsm.d.ts.map +1 -1
- package/dist/transaction/updatePsm.js +5 -5
- package/dist/transaction/updatePsm.js.map +1 -1
- package/dist/transaction/updateSigners.d.ts +1 -1
- package/dist/transaction/updateSigners.d.ts.map +1 -1
- package/dist/transaction/updateSigners.js +5 -5
- package/dist/transaction/updateSigners.js.map +1 -1
- package/dist/transaction.test.js +1 -1
- package/dist/transaction.test.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/digest.d.ts +6 -0
- package/dist/utils/digest.d.ts.map +1 -0
- package/dist/utils/digest.js +22 -0
- package/dist/utils/digest.js.map +1 -0
- package/dist/utils/ecdsa.d.ts +8 -0
- package/dist/utils/ecdsa.d.ts.map +1 -0
- package/dist/utils/ecdsa.js +60 -0
- package/dist/utils/ecdsa.js.map +1 -0
- package/dist/utils/ecdsa.test.d.ts +2 -0
- package/dist/utils/ecdsa.test.d.ts.map +1 -0
- package/dist/utils/ecdsa.test.js +85 -0
- package/dist/utils/ecdsa.test.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/key.d.ts +10 -0
- package/dist/utils/key.d.ts.map +1 -0
- package/dist/utils/key.js +38 -0
- package/dist/utils/key.js.map +1 -0
- package/dist/utils/key.test.d.ts +2 -0
- package/dist/utils/key.test.d.ts.map +1 -0
- package/dist/utils/key.test.js +80 -0
- package/dist/utils/key.test.js.map +1 -0
- package/dist/utils/random.d.ts +1 -1
- package/dist/utils/random.d.ts.map +1 -1
- package/dist/utils/random.js +1 -1
- package/dist/utils/random.js.map +1 -1
- package/dist/utils/signature.d.ts +2 -1
- package/dist/utils/signature.d.ts.map +1 -1
- package/dist/utils/signature.js +6 -3
- package/dist/utils/signature.js.map +1 -1
- package/dist/utils/signature.test.js +11 -11
- package/dist/utils/signature.test.js.map +1 -1
- package/dist/utils/word.d.ts +6 -1
- package/dist/utils/word.d.ts.map +1 -1
- package/dist/utils/word.js +11 -0
- package/dist/utils/word.js.map +1 -1
- package/dist/utils/word.test.js +54 -3
- package/dist/utils/word.test.js.map +1 -1
- package/package.json +4 -5
- package/src/account/builder.ts +7 -5
- package/src/account/masm.ts +103 -99
- package/src/account/storage.ts +19 -7
- package/src/client.test.ts +4 -4
- package/src/client.ts +3 -3
- package/src/index.ts +8 -1
- package/src/inspector.test.ts +38 -25
- package/src/inspector.ts +18 -10
- package/src/multisig/helpers.test.ts +2 -2
- package/src/multisig/helpers.ts +2 -1
- package/src/multisig/proposal/execution.ts +320 -0
- package/src/multisig/proposal/parser.ts +191 -0
- package/src/multisig/signing.ts +24 -0
- package/src/multisig.test.ts +8 -4
- package/src/multisig.ts +153 -434
- package/src/signer.ts +2 -95
- package/src/signers/ecdsa.ts +35 -0
- package/src/{signer.test.ts → signers/falcon.test.ts} +29 -33
- package/src/signers/falcon.ts +36 -0
- package/src/signers/index.ts +4 -0
- package/src/signers/miden-wallet.test.ts +119 -0
- package/src/signers/miden-wallet.ts +49 -0
- package/src/signers/para.test.ts +103 -0
- package/src/signers/para.ts +60 -0
- package/src/transaction/consumeNotes.ts +14 -10
- package/src/transaction/options.ts +2 -2
- package/src/transaction/p2id.ts +3 -8
- package/src/transaction/summary.ts +2 -2
- package/src/transaction/updatePsm.ts +5 -6
- package/src/transaction/updateSigners.ts +5 -6
- package/src/transaction.test.ts +1 -1
- package/src/types.ts +1 -1
- package/src/utils/digest.ts +25 -0
- package/src/utils/ecdsa.test.ts +104 -0
- package/src/utils/ecdsa.ts +77 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/key.test.ts +89 -0
- package/src/utils/key.ts +49 -0
- package/src/utils/random.ts +1 -1
- package/src/utils/signature.test.ts +11 -11
- package/src/utils/signature.ts +10 -3
- package/src/utils/word.test.ts +57 -3
- package/src/utils/word.ts +13 -1
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
} from './signature.js';
|
|
9
9
|
|
|
10
10
|
// Mock the Miden SDK
|
|
11
|
-
vi.mock('@
|
|
11
|
+
vi.mock('@miden-sdk/miden-sdk', () => ({
|
|
12
12
|
AdviceMap: vi.fn().mockImplementation(() => ({
|
|
13
13
|
insert: vi.fn(),
|
|
14
14
|
})),
|
|
@@ -88,7 +88,7 @@ describe('signature utilities', () => {
|
|
|
88
88
|
|
|
89
89
|
describe('buildSignatureAdviceEntry', () => {
|
|
90
90
|
it('returns key and values', async () => {
|
|
91
|
-
const { Word, Signature } = await import('@
|
|
91
|
+
const { Word, Signature } = await import('@miden-sdk/miden-sdk');
|
|
92
92
|
const pubkeyCommitment = Word.fromHex('0x' + 'a'.repeat(64));
|
|
93
93
|
const message = Word.fromHex('0x' + 'b'.repeat(64));
|
|
94
94
|
const signature = Signature.deserialize(new Uint8Array([0, 1, 2, 3]));
|
|
@@ -100,7 +100,7 @@ describe('signature utilities', () => {
|
|
|
100
100
|
});
|
|
101
101
|
|
|
102
102
|
it('hashes pubkey commitment and message to produce key', async () => {
|
|
103
|
-
const { Word, Signature, Rpo256 } = await import('@
|
|
103
|
+
const { Word, Signature, Rpo256 } = 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]));
|
|
@@ -111,7 +111,7 @@ describe('signature utilities', () => {
|
|
|
111
111
|
});
|
|
112
112
|
|
|
113
113
|
it('uses toPreparedSignature to get values', async () => {
|
|
114
|
-
const { Word, Signature } = await import('@
|
|
114
|
+
const { Word, Signature } = await import('@miden-sdk/miden-sdk');
|
|
115
115
|
const pubkeyCommitment = Word.fromHex('0x' + 'a'.repeat(64));
|
|
116
116
|
const message = Word.fromHex('0x' + 'b'.repeat(64));
|
|
117
117
|
const signature = Signature.deserialize(new Uint8Array([0, 1, 2, 3]));
|
|
@@ -125,7 +125,7 @@ describe('signature utilities', () => {
|
|
|
125
125
|
|
|
126
126
|
describe('mergeSignatureAdviceMaps', () => {
|
|
127
127
|
it('inserts all entries into advice map', async () => {
|
|
128
|
-
const { AdviceMap, Word, Signature } = await import('@
|
|
128
|
+
const { AdviceMap, Word, Signature } = await import('@miden-sdk/miden-sdk');
|
|
129
129
|
const advice = new AdviceMap();
|
|
130
130
|
|
|
131
131
|
const entries = [
|
|
@@ -146,7 +146,7 @@ describe('signature utilities', () => {
|
|
|
146
146
|
});
|
|
147
147
|
|
|
148
148
|
it('returns the same advice map', async () => {
|
|
149
|
-
const { AdviceMap } = await import('@
|
|
149
|
+
const { AdviceMap } = await import('@miden-sdk/miden-sdk');
|
|
150
150
|
const advice = new AdviceMap();
|
|
151
151
|
|
|
152
152
|
const result = mergeSignatureAdviceMaps(advice, []);
|
|
@@ -155,7 +155,7 @@ describe('signature utilities', () => {
|
|
|
155
155
|
});
|
|
156
156
|
|
|
157
157
|
it('handles empty entries array', async () => {
|
|
158
|
-
const { AdviceMap } = await import('@
|
|
158
|
+
const { AdviceMap } = await import('@miden-sdk/miden-sdk');
|
|
159
159
|
const advice = new AdviceMap();
|
|
160
160
|
|
|
161
161
|
mergeSignatureAdviceMaps(advice, []);
|
|
@@ -166,7 +166,7 @@ describe('signature utilities', () => {
|
|
|
166
166
|
|
|
167
167
|
describe('toWord', () => {
|
|
168
168
|
it('creates Word from hex string', async () => {
|
|
169
|
-
const { Word } = await import('@
|
|
169
|
+
const { Word } = await import('@miden-sdk/miden-sdk');
|
|
170
170
|
|
|
171
171
|
const word = toWord('abc123');
|
|
172
172
|
|
|
@@ -175,7 +175,7 @@ describe('signature utilities', () => {
|
|
|
175
175
|
});
|
|
176
176
|
|
|
177
177
|
it('normalizes hex before creating Word', async () => {
|
|
178
|
-
const { Word } = await import('@
|
|
178
|
+
const { Word } = await import('@miden-sdk/miden-sdk');
|
|
179
179
|
|
|
180
180
|
toWord('abc');
|
|
181
181
|
|
|
@@ -184,7 +184,7 @@ describe('signature utilities', () => {
|
|
|
184
184
|
});
|
|
185
185
|
|
|
186
186
|
it('handles 0x prefix', async () => {
|
|
187
|
-
const { Word } = await import('@
|
|
187
|
+
const { Word } = await import('@miden-sdk/miden-sdk');
|
|
188
188
|
|
|
189
189
|
toWord('0xdef');
|
|
190
190
|
|
|
@@ -192,7 +192,7 @@ describe('signature utilities', () => {
|
|
|
192
192
|
});
|
|
193
193
|
|
|
194
194
|
it('handles full 64-char hex', async () => {
|
|
195
|
-
const { Word } = await import('@
|
|
195
|
+
const { Word } = await import('@miden-sdk/miden-sdk');
|
|
196
196
|
const fullHex = 'f'.repeat(64);
|
|
197
197
|
|
|
198
198
|
toWord(fullHex);
|
package/src/utils/signature.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AdviceMap, Felt, FeltArray, Rpo256, Signature, Word } from '@
|
|
2
|
-
import * as midenSdk from '@
|
|
1
|
+
import { AdviceMap, Felt, FeltArray, Rpo256, Signature, Word } from '@miden-sdk/miden-sdk';
|
|
2
|
+
import * as midenSdk from '@miden-sdk/miden-sdk';
|
|
3
3
|
import { hexToBytes, normalizeHexWord } from './encoding.js';
|
|
4
4
|
import type { SignatureScheme } from '../types.js';
|
|
5
5
|
|
|
@@ -57,9 +57,16 @@ export function buildSignatureAdviceEntry(
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
export function tryComputeEcdsaCommitmentHex(pubkeyHex: string): string | null {
|
|
60
|
+
return tryComputeCommitmentHex(pubkeyHex, 'ecdsa');
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export function tryComputeCommitmentHex(
|
|
64
|
+
pubkeyHex: string,
|
|
65
|
+
scheme: SignatureScheme,
|
|
66
|
+
): string | null {
|
|
60
67
|
const bytes = hexToBytes(pubkeyHex);
|
|
61
68
|
const withPrefix = new Uint8Array(bytes.length + 1);
|
|
62
|
-
withPrefix[0] = 1;
|
|
69
|
+
withPrefix[0] = scheme === 'ecdsa' ? 1 : 0;
|
|
63
70
|
withPrefix.set(bytes, 1);
|
|
64
71
|
|
|
65
72
|
try {
|
package/src/utils/word.test.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
-
import { wordElementToBigInt, wordToHex } from './word.js';
|
|
3
|
-
import { Word } from '@
|
|
2
|
+
import { wordElementToBigInt, wordToHex, wordToBytes } from './word.js';
|
|
3
|
+
import { Word } from '@miden-sdk/miden-sdk';
|
|
4
4
|
|
|
5
5
|
// Mock the Miden SDK Word class
|
|
6
|
-
vi.mock('@
|
|
6
|
+
vi.mock('@miden-sdk/miden-sdk', () => ({
|
|
7
7
|
Word: {
|
|
8
8
|
fromHex: (hex: string): { toU64s: () => BigUint64Array; toHex: () => string } => {
|
|
9
9
|
// Parse hex string (remove 0x prefix if present)
|
|
@@ -61,4 +61,58 @@ describe('word utilities', () => {
|
|
|
61
61
|
expect(hex).toBe(originalHex);
|
|
62
62
|
});
|
|
63
63
|
});
|
|
64
|
+
|
|
65
|
+
describe('wordToBytes', () => {
|
|
66
|
+
it('should convert a word with known felt values to LE bytes', () => {
|
|
67
|
+
const word = {
|
|
68
|
+
toFelts: () => [
|
|
69
|
+
{ asInt: () => 1n },
|
|
70
|
+
{ asInt: () => 2n },
|
|
71
|
+
{ asInt: () => 3n },
|
|
72
|
+
{ asInt: () => 4n },
|
|
73
|
+
],
|
|
74
|
+
};
|
|
75
|
+
const bytes = wordToBytes(word);
|
|
76
|
+
expect(bytes.length).toBe(32);
|
|
77
|
+
expect(bytes[0]).toBe(1);
|
|
78
|
+
expect(bytes[1]).toBe(0);
|
|
79
|
+
expect(bytes[8]).toBe(2);
|
|
80
|
+
expect(bytes[16]).toBe(3);
|
|
81
|
+
expect(bytes[24]).toBe(4);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
it('should encode felts in little-endian order', () => {
|
|
85
|
+
const word = {
|
|
86
|
+
toFelts: () => [
|
|
87
|
+
{ asInt: () => 0x0102030405060708n },
|
|
88
|
+
{ asInt: () => 0n },
|
|
89
|
+
{ asInt: () => 0n },
|
|
90
|
+
{ asInt: () => 0n },
|
|
91
|
+
],
|
|
92
|
+
};
|
|
93
|
+
const bytes = wordToBytes(word);
|
|
94
|
+
expect(bytes[0]).toBe(0x08);
|
|
95
|
+
expect(bytes[1]).toBe(0x07);
|
|
96
|
+
expect(bytes[2]).toBe(0x06);
|
|
97
|
+
expect(bytes[3]).toBe(0x05);
|
|
98
|
+
expect(bytes[4]).toBe(0x04);
|
|
99
|
+
expect(bytes[5]).toBe(0x03);
|
|
100
|
+
expect(bytes[6]).toBe(0x02);
|
|
101
|
+
expect(bytes[7]).toBe(0x01);
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
it('should handle zero felts', () => {
|
|
105
|
+
const word = {
|
|
106
|
+
toFelts: () => [
|
|
107
|
+
{ asInt: () => 0n },
|
|
108
|
+
{ asInt: () => 0n },
|
|
109
|
+
{ asInt: () => 0n },
|
|
110
|
+
{ asInt: () => 0n },
|
|
111
|
+
],
|
|
112
|
+
};
|
|
113
|
+
const bytes = wordToBytes(word);
|
|
114
|
+
expect(bytes.length).toBe(32);
|
|
115
|
+
expect(bytes.every((b) => b === 0)).toBe(true);
|
|
116
|
+
});
|
|
117
|
+
});
|
|
64
118
|
});
|
package/src/utils/word.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Word } from '@
|
|
1
|
+
import { Word } from '@miden-sdk/miden-sdk';
|
|
2
2
|
|
|
3
3
|
export function wordToHex(word: Word): string {
|
|
4
4
|
return word.toHex();
|
|
@@ -9,3 +9,15 @@ export function wordElementToBigInt(word: Word, index: number): bigint {
|
|
|
9
9
|
return index >= 0 && index < elements.length ? elements[index] : 0n;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
+
export function wordToBytes(word: { toFelts: () => Array<{ asInt: () => bigint }> }): Uint8Array {
|
|
13
|
+
const felts = word.toFelts();
|
|
14
|
+
const buf = new Uint8Array(32);
|
|
15
|
+
for (let i = 0; i < 4; i++) {
|
|
16
|
+
const val = felts[i].asInt();
|
|
17
|
+
for (let b = 0; b < 8; b++) {
|
|
18
|
+
buf[i * 8 + b] = Number((val >> BigInt(b * 8)) & BigInt(0xff));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return buf;
|
|
22
|
+
}
|
|
23
|
+
|