@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.
Files changed (201) hide show
  1. package/README.md +42 -4
  2. package/dist/account/builder.d.ts +1 -1
  3. package/dist/account/builder.d.ts.map +1 -1
  4. package/dist/account/builder.js +7 -5
  5. package/dist/account/builder.js.map +1 -1
  6. package/dist/account/masm.d.ts +3 -3
  7. package/dist/account/masm.d.ts.map +1 -1
  8. package/dist/account/masm.js +101 -98
  9. package/dist/account/masm.js.map +1 -1
  10. package/dist/account/storage.d.ts +1 -1
  11. package/dist/account/storage.d.ts.map +1 -1
  12. package/dist/account/storage.js +17 -7
  13. package/dist/account/storage.js.map +1 -1
  14. package/dist/client.d.ts +1 -1
  15. package/dist/client.d.ts.map +1 -1
  16. package/dist/client.js +2 -2
  17. package/dist/client.js.map +1 -1
  18. package/dist/client.test.js +4 -4
  19. package/dist/client.test.js.map +1 -1
  20. package/dist/index.d.ts +8 -1
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +6 -1
  23. package/dist/index.js.map +1 -1
  24. package/dist/inspector.d.ts +1 -1
  25. package/dist/inspector.d.ts.map +1 -1
  26. package/dist/inspector.js +16 -10
  27. package/dist/inspector.js.map +1 -1
  28. package/dist/inspector.test.js +33 -22
  29. package/dist/inspector.test.js.map +1 -1
  30. package/dist/multisig/helpers.d.ts +1 -1
  31. package/dist/multisig/helpers.d.ts.map +1 -1
  32. package/dist/multisig/helpers.js +1 -1
  33. package/dist/multisig/helpers.js.map +1 -1
  34. package/dist/multisig/helpers.test.js +2 -2
  35. package/dist/multisig/helpers.test.js.map +1 -1
  36. package/dist/multisig/proposal/execution.d.ts +18 -0
  37. package/dist/multisig/proposal/execution.d.ts.map +1 -0
  38. package/dist/multisig/proposal/execution.js +147 -0
  39. package/dist/multisig/proposal/execution.js.map +1 -0
  40. package/dist/multisig/proposal/parser.d.ts +17 -0
  41. package/dist/multisig/proposal/parser.d.ts.map +1 -0
  42. package/dist/multisig/proposal/parser.js +147 -0
  43. package/dist/multisig/proposal/parser.js.map +1 -0
  44. package/dist/multisig/signing.d.ts +5 -0
  45. package/dist/multisig/signing.d.ts.map +1 -0
  46. package/dist/multisig/signing.js +14 -0
  47. package/dist/multisig/signing.js.map +1 -0
  48. package/dist/multisig.d.ts +9 -13
  49. package/dist/multisig.d.ts.map +1 -1
  50. package/dist/multisig.js +109 -337
  51. package/dist/multisig.js.map +1 -1
  52. package/dist/multisig.test.js +8 -4
  53. package/dist/multisig.test.js.map +1 -1
  54. package/dist/signer.d.ts +2 -20
  55. package/dist/signer.d.ts.map +1 -1
  56. package/dist/signer.js +2 -82
  57. package/dist/signer.js.map +1 -1
  58. package/dist/signer.test.js +24 -24
  59. package/dist/signer.test.js.map +1 -1
  60. package/dist/signers/ecdsa.d.ts +12 -0
  61. package/dist/signers/ecdsa.d.ts.map +1 -0
  62. package/dist/signers/ecdsa.js +30 -0
  63. package/dist/signers/ecdsa.js.map +1 -0
  64. package/dist/signers/falcon.d.ts +12 -0
  65. package/dist/signers/falcon.d.ts.map +1 -0
  66. package/dist/signers/falcon.js +31 -0
  67. package/dist/signers/falcon.js.map +1 -0
  68. package/dist/signers/falcon.test.d.ts +2 -0
  69. package/dist/signers/falcon.test.d.ts.map +1 -0
  70. package/dist/signers/falcon.test.js +113 -0
  71. package/dist/signers/falcon.test.js.map +1 -0
  72. package/dist/signers/index.d.ts +5 -0
  73. package/dist/signers/index.d.ts.map +1 -0
  74. package/dist/signers/index.js +5 -0
  75. package/dist/signers/index.js.map +1 -0
  76. package/dist/signers/miden-wallet.d.ts +16 -0
  77. package/dist/signers/miden-wallet.d.ts.map +1 -0
  78. package/dist/signers/miden-wallet.js +35 -0
  79. package/dist/signers/miden-wallet.js.map +1 -0
  80. package/dist/signers/miden-wallet.test.d.ts +2 -0
  81. package/dist/signers/miden-wallet.test.d.ts.map +1 -0
  82. package/dist/signers/miden-wallet.test.js +107 -0
  83. package/dist/signers/miden-wallet.test.js.map +1 -0
  84. package/dist/signers/para.d.ts +21 -0
  85. package/dist/signers/para.d.ts.map +1 -0
  86. package/dist/signers/para.js +43 -0
  87. package/dist/signers/para.js.map +1 -0
  88. package/dist/signers/para.test.d.ts +2 -0
  89. package/dist/signers/para.test.d.ts.map +1 -0
  90. package/dist/signers/para.test.js +88 -0
  91. package/dist/signers/para.test.js.map +1 -0
  92. package/dist/transaction/consumeNotes.d.ts +3 -3
  93. package/dist/transaction/consumeNotes.d.ts.map +1 -1
  94. package/dist/transaction/consumeNotes.js +11 -7
  95. package/dist/transaction/consumeNotes.js.map +1 -1
  96. package/dist/transaction/options.d.ts +2 -2
  97. package/dist/transaction/options.d.ts.map +1 -1
  98. package/dist/transaction/p2id.d.ts +1 -1
  99. package/dist/transaction/p2id.d.ts.map +1 -1
  100. package/dist/transaction/p2id.js +5 -5
  101. package/dist/transaction/p2id.js.map +1 -1
  102. package/dist/transaction/summary.d.ts +1 -1
  103. package/dist/transaction/summary.d.ts.map +1 -1
  104. package/dist/transaction/summary.js +1 -1
  105. package/dist/transaction/summary.js.map +1 -1
  106. package/dist/transaction/updatePsm.d.ts +1 -1
  107. package/dist/transaction/updatePsm.d.ts.map +1 -1
  108. package/dist/transaction/updatePsm.js +5 -5
  109. package/dist/transaction/updatePsm.js.map +1 -1
  110. package/dist/transaction/updateSigners.d.ts +1 -1
  111. package/dist/transaction/updateSigners.d.ts.map +1 -1
  112. package/dist/transaction/updateSigners.js +5 -5
  113. package/dist/transaction/updateSigners.js.map +1 -1
  114. package/dist/transaction.test.js +1 -1
  115. package/dist/transaction.test.js.map +1 -1
  116. package/dist/types.d.ts +1 -1
  117. package/dist/types.d.ts.map +1 -1
  118. package/dist/utils/digest.d.ts +6 -0
  119. package/dist/utils/digest.d.ts.map +1 -0
  120. package/dist/utils/digest.js +22 -0
  121. package/dist/utils/digest.js.map +1 -0
  122. package/dist/utils/ecdsa.d.ts +8 -0
  123. package/dist/utils/ecdsa.d.ts.map +1 -0
  124. package/dist/utils/ecdsa.js +60 -0
  125. package/dist/utils/ecdsa.js.map +1 -0
  126. package/dist/utils/ecdsa.test.d.ts +2 -0
  127. package/dist/utils/ecdsa.test.d.ts.map +1 -0
  128. package/dist/utils/ecdsa.test.js +85 -0
  129. package/dist/utils/ecdsa.test.js.map +1 -0
  130. package/dist/utils/index.d.ts +1 -0
  131. package/dist/utils/index.d.ts.map +1 -1
  132. package/dist/utils/index.js +1 -0
  133. package/dist/utils/index.js.map +1 -1
  134. package/dist/utils/key.d.ts +10 -0
  135. package/dist/utils/key.d.ts.map +1 -0
  136. package/dist/utils/key.js +38 -0
  137. package/dist/utils/key.js.map +1 -0
  138. package/dist/utils/key.test.d.ts +2 -0
  139. package/dist/utils/key.test.d.ts.map +1 -0
  140. package/dist/utils/key.test.js +80 -0
  141. package/dist/utils/key.test.js.map +1 -0
  142. package/dist/utils/random.d.ts +1 -1
  143. package/dist/utils/random.d.ts.map +1 -1
  144. package/dist/utils/random.js +1 -1
  145. package/dist/utils/random.js.map +1 -1
  146. package/dist/utils/signature.d.ts +2 -1
  147. package/dist/utils/signature.d.ts.map +1 -1
  148. package/dist/utils/signature.js +6 -3
  149. package/dist/utils/signature.js.map +1 -1
  150. package/dist/utils/signature.test.js +11 -11
  151. package/dist/utils/signature.test.js.map +1 -1
  152. package/dist/utils/word.d.ts +6 -1
  153. package/dist/utils/word.d.ts.map +1 -1
  154. package/dist/utils/word.js +11 -0
  155. package/dist/utils/word.js.map +1 -1
  156. package/dist/utils/word.test.js +54 -3
  157. package/dist/utils/word.test.js.map +1 -1
  158. package/package.json +4 -5
  159. package/src/account/builder.ts +7 -5
  160. package/src/account/masm.ts +103 -99
  161. package/src/account/storage.ts +19 -7
  162. package/src/client.test.ts +4 -4
  163. package/src/client.ts +3 -3
  164. package/src/index.ts +8 -1
  165. package/src/inspector.test.ts +38 -25
  166. package/src/inspector.ts +18 -10
  167. package/src/multisig/helpers.test.ts +2 -2
  168. package/src/multisig/helpers.ts +2 -1
  169. package/src/multisig/proposal/execution.ts +320 -0
  170. package/src/multisig/proposal/parser.ts +191 -0
  171. package/src/multisig/signing.ts +24 -0
  172. package/src/multisig.test.ts +8 -4
  173. package/src/multisig.ts +153 -434
  174. package/src/signer.ts +2 -95
  175. package/src/signers/ecdsa.ts +35 -0
  176. package/src/{signer.test.ts → signers/falcon.test.ts} +29 -33
  177. package/src/signers/falcon.ts +36 -0
  178. package/src/signers/index.ts +4 -0
  179. package/src/signers/miden-wallet.test.ts +119 -0
  180. package/src/signers/miden-wallet.ts +49 -0
  181. package/src/signers/para.test.ts +103 -0
  182. package/src/signers/para.ts +60 -0
  183. package/src/transaction/consumeNotes.ts +14 -10
  184. package/src/transaction/options.ts +2 -2
  185. package/src/transaction/p2id.ts +3 -8
  186. package/src/transaction/summary.ts +2 -2
  187. package/src/transaction/updatePsm.ts +5 -6
  188. package/src/transaction/updateSigners.ts +5 -6
  189. package/src/transaction.test.ts +1 -1
  190. package/src/types.ts +1 -1
  191. package/src/utils/digest.ts +25 -0
  192. package/src/utils/ecdsa.test.ts +104 -0
  193. package/src/utils/ecdsa.ts +77 -0
  194. package/src/utils/index.ts +1 -0
  195. package/src/utils/key.test.ts +89 -0
  196. package/src/utils/key.ts +49 -0
  197. package/src/utils/random.ts +1 -1
  198. package/src/utils/signature.test.ts +11 -11
  199. package/src/utils/signature.ts +10 -3
  200. package/src/utils/word.test.ts +57 -3
  201. 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('@demox-labs/miden-sdk', () => ({
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('@demox-labs/miden-sdk');
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('@demox-labs/miden-sdk');
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('@demox-labs/miden-sdk');
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('@demox-labs/miden-sdk');
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('@demox-labs/miden-sdk');
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('@demox-labs/miden-sdk');
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('@demox-labs/miden-sdk');
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('@demox-labs/miden-sdk');
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('@demox-labs/miden-sdk');
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('@demox-labs/miden-sdk');
195
+ const { Word } = await import('@miden-sdk/miden-sdk');
196
196
  const fullHex = 'f'.repeat(64);
197
197
 
198
198
  toWord(fullHex);
@@ -1,5 +1,5 @@
1
- import { AdviceMap, Felt, FeltArray, Rpo256, Signature, Word } from '@demox-labs/miden-sdk';
2
- import * as midenSdk from '@demox-labs/miden-sdk';
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 {
@@ -1,9 +1,9 @@
1
1
  import { describe, it, expect, vi } from 'vitest';
2
- import { wordElementToBigInt, wordToHex } from './word.js';
3
- import { Word } from '@demox-labs/miden-sdk';
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('@demox-labs/miden-sdk', () => ({
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 '@demox-labs/miden-sdk';
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
+