@openzeppelin/miden-multisig-client 0.13.0 → 0.13.2

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 (273) hide show
  1. package/README.md +98 -119
  2. package/dist/account/builder.d.ts +18 -0
  3. package/dist/account/builder.d.ts.map +1 -1
  4. package/dist/account/builder.js +59 -29
  5. package/dist/account/builder.js.map +1 -1
  6. package/dist/account/builder.test.d.ts +2 -0
  7. package/dist/account/builder.test.d.ts.map +1 -0
  8. package/dist/account/builder.test.js +115 -0
  9. package/dist/account/builder.test.js.map +1 -0
  10. package/dist/account/index.d.ts +1 -1
  11. package/dist/account/index.d.ts.map +1 -1
  12. package/dist/account/index.js +1 -1
  13. package/dist/account/index.js.map +1 -1
  14. package/dist/account/masm/account-components/auth.d.ts +5 -0
  15. package/dist/account/masm/account-components/auth.d.ts.map +1 -0
  16. package/dist/account/masm/account-components/auth.js +67 -0
  17. package/dist/account/masm/account-components/auth.js.map +1 -0
  18. package/dist/account/masm/auth.d.ts +5 -0
  19. package/dist/account/masm/auth.d.ts.map +1 -0
  20. package/dist/account/masm/auth.js +1395 -0
  21. package/dist/account/masm/auth.js.map +1 -0
  22. package/dist/account/masm/index.d.ts +3 -0
  23. package/dist/account/masm/index.d.ts.map +1 -0
  24. package/dist/account/masm/index.js +5 -0
  25. package/dist/account/masm/index.js.map +1 -0
  26. package/dist/account/masm.d.ts +1 -4
  27. package/dist/account/masm.d.ts.map +1 -1
  28. package/dist/account/masm.js +3 -1034
  29. package/dist/account/masm.js.map +1 -1
  30. package/dist/account/storage.d.ts +2 -2
  31. package/dist/account/storage.d.ts.map +1 -1
  32. package/dist/account/storage.js +18 -16
  33. package/dist/account/storage.js.map +1 -1
  34. package/dist/client.d.ts +67 -9
  35. package/dist/client.d.ts.map +1 -1
  36. package/dist/client.js +73 -22
  37. package/dist/client.js.map +1 -1
  38. package/dist/client.test.js +31 -32
  39. package/dist/client.test.js.map +1 -1
  40. package/dist/index.d.ts +54 -12
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +53 -9
  43. package/dist/index.js.map +1 -1
  44. package/dist/inspector.d.ts +32 -6
  45. package/dist/inspector.d.ts.map +1 -1
  46. package/dist/inspector.js +58 -23
  47. package/dist/inspector.js.map +1 -1
  48. package/dist/inspector.test.js +18 -18
  49. package/dist/inspector.test.js.map +1 -1
  50. package/dist/multisig/proposal/execution.d.ts +6 -5
  51. package/dist/multisig/proposal/execution.d.ts.map +1 -1
  52. package/dist/multisig/proposal/execution.js +49 -27
  53. package/dist/multisig/proposal/execution.js.map +1 -1
  54. package/dist/multisig/proposal/parser.d.ts +3 -3
  55. package/dist/multisig/proposal/parser.d.ts.map +1 -1
  56. package/dist/multisig/proposal/parser.js +23 -23
  57. package/dist/multisig/proposal/parser.js.map +1 -1
  58. package/dist/multisig/signing.d.ts +3 -3
  59. package/dist/multisig/signing.d.ts.map +1 -1
  60. package/dist/multisig/signing.js +3 -3
  61. package/dist/multisig/signing.js.map +1 -1
  62. package/dist/multisig.d.ts +187 -46
  63. package/dist/multisig.d.ts.map +1 -1
  64. package/dist/multisig.js +650 -289
  65. package/dist/multisig.js.map +1 -1
  66. package/dist/multisig.test.js +1680 -241
  67. package/dist/multisig.test.js.map +1 -1
  68. package/dist/procedures.d.ts +46 -24
  69. package/dist/procedures.d.ts.map +1 -1
  70. package/dist/procedures.js +46 -21
  71. package/dist/procedures.js.map +1 -1
  72. package/dist/proposal/factory.d.ts +18 -0
  73. package/dist/proposal/factory.d.ts.map +1 -0
  74. package/dist/proposal/factory.js +99 -0
  75. package/dist/proposal/factory.js.map +1 -0
  76. package/dist/proposal/metadata.d.ts +8 -0
  77. package/dist/proposal/metadata.d.ts.map +1 -0
  78. package/dist/proposal/metadata.js +156 -0
  79. package/dist/proposal/metadata.js.map +1 -0
  80. package/dist/proposal/signatures.d.ts +10 -0
  81. package/dist/proposal/signatures.d.ts.map +1 -0
  82. package/dist/proposal/signatures.js +54 -0
  83. package/dist/proposal/signatures.js.map +1 -0
  84. package/dist/signer.d.ts +2 -0
  85. package/dist/signer.d.ts.map +1 -1
  86. package/dist/signer.js +2 -0
  87. package/dist/signer.js.map +1 -1
  88. package/dist/signers/ecdsa.d.ts +3 -0
  89. package/dist/signers/ecdsa.d.ts.map +1 -1
  90. package/dist/signers/ecdsa.js +8 -4
  91. package/dist/signers/ecdsa.js.map +1 -1
  92. package/dist/signers/ecdsa.test.d.ts +2 -0
  93. package/dist/signers/ecdsa.test.d.ts.map +1 -0
  94. package/dist/signers/ecdsa.test.js +65 -0
  95. package/dist/signers/ecdsa.test.js.map +1 -0
  96. package/dist/signers/falcon.d.ts +3 -0
  97. package/dist/signers/falcon.d.ts.map +1 -1
  98. package/dist/signers/falcon.js +8 -4
  99. package/dist/signers/falcon.js.map +1 -1
  100. package/dist/signers/falcon.test.js +12 -0
  101. package/dist/signers/falcon.test.js.map +1 -1
  102. package/dist/signers/miden-wallet.d.ts +3 -1
  103. package/dist/signers/miden-wallet.d.ts.map +1 -1
  104. package/dist/signers/miden-wallet.js +11 -2
  105. package/dist/signers/miden-wallet.js.map +1 -1
  106. package/dist/signers/miden-wallet.test.js +26 -0
  107. package/dist/signers/miden-wallet.test.js.map +1 -1
  108. package/dist/signers/para.d.ts +3 -3
  109. package/dist/signers/para.d.ts.map +1 -1
  110. package/dist/signers/para.js +15 -6
  111. package/dist/signers/para.js.map +1 -1
  112. package/dist/signers/para.test.js +39 -0
  113. package/dist/signers/para.test.js.map +1 -1
  114. package/dist/transaction/consumeNotes.d.ts.map +1 -1
  115. package/dist/transaction/consumeNotes.js +1 -0
  116. package/dist/transaction/consumeNotes.js.map +1 -1
  117. package/dist/transaction/index.d.ts +2 -1
  118. package/dist/transaction/index.d.ts.map +1 -1
  119. package/dist/transaction/index.js +2 -1
  120. package/dist/transaction/index.js.map +1 -1
  121. package/dist/transaction/options.d.ts +1 -1
  122. package/dist/transaction/options.d.ts.map +1 -1
  123. package/dist/transaction/p2id.d.ts +1 -0
  124. package/dist/transaction/p2id.d.ts.map +1 -1
  125. package/dist/transaction/p2id.js +9 -3
  126. package/dist/transaction/p2id.js.map +1 -1
  127. package/dist/transaction/p2id.test.d.ts +2 -0
  128. package/dist/transaction/p2id.test.d.ts.map +1 -0
  129. package/dist/transaction/p2id.test.js +138 -0
  130. package/dist/transaction/p2id.test.js.map +1 -0
  131. package/dist/transaction/rpoRandomCoin.d.ts +7 -0
  132. package/dist/transaction/rpoRandomCoin.d.ts.map +1 -0
  133. package/dist/transaction/rpoRandomCoin.js +17 -0
  134. package/dist/transaction/rpoRandomCoin.js.map +1 -0
  135. package/dist/transaction/rpoRandomCoin.test.d.ts +2 -0
  136. package/dist/transaction/rpoRandomCoin.test.d.ts.map +1 -0
  137. package/dist/transaction/rpoRandomCoin.test.js +52 -0
  138. package/dist/transaction/rpoRandomCoin.test.js.map +1 -0
  139. package/dist/transaction/updateGuardian.d.ts +7 -0
  140. package/dist/transaction/updateGuardian.d.ts.map +1 -0
  141. package/dist/transaction/{updatePsm.js → updateGuardian.js} +15 -29
  142. package/dist/transaction/updateGuardian.js.map +1 -0
  143. package/dist/transaction/updateProcedureThreshold.d.ts +9 -0
  144. package/dist/transaction/updateProcedureThreshold.d.ts.map +1 -0
  145. package/dist/transaction/updateProcedureThreshold.js +55 -0
  146. package/dist/transaction/updateProcedureThreshold.js.map +1 -0
  147. package/dist/transaction/updateSigners.d.ts.map +1 -1
  148. package/dist/transaction/updateSigners.js +5 -23
  149. package/dist/transaction/updateSigners.js.map +1 -1
  150. package/dist/transaction.d.ts +2 -1
  151. package/dist/transaction.d.ts.map +1 -1
  152. package/dist/transaction.js +2 -1
  153. package/dist/transaction.js.map +1 -1
  154. package/dist/types/proposal.d.ts +32 -15
  155. package/dist/types/proposal.d.ts.map +1 -1
  156. package/dist/types.d.ts +24 -7
  157. package/dist/types.d.ts.map +1 -1
  158. package/dist/utils/digest.d.ts +5 -0
  159. package/dist/utils/digest.d.ts.map +1 -1
  160. package/dist/utils/digest.js +34 -1
  161. package/dist/utils/digest.js.map +1 -1
  162. package/dist/utils/digest.test.d.ts +2 -0
  163. package/dist/utils/digest.test.d.ts.map +1 -0
  164. package/dist/utils/digest.test.js +48 -0
  165. package/dist/utils/digest.test.js.map +1 -0
  166. package/dist/utils/signature.d.ts +3 -1
  167. package/dist/utils/signature.d.ts.map +1 -1
  168. package/dist/utils/signature.js +31 -6
  169. package/dist/utils/signature.js.map +1 -1
  170. package/dist/utils/word.test.js +1 -52
  171. package/dist/utils/word.test.js.map +1 -1
  172. package/masm/account_components/auth/multisig.masm +13 -0
  173. package/masm/account_components/auth/multisig_ecdsa.masm +13 -0
  174. package/masm/account_components/auth/multisig_guardian.masm +17 -0
  175. package/masm/account_components/auth/multisig_guardian_ecdsa.masm +17 -0
  176. package/masm/auth/guardian.masm +177 -0
  177. package/masm/auth/guardian_ecdsa.masm +178 -0
  178. package/masm/{multisig.masm → auth/multisig.masm} +149 -55
  179. package/masm/{multisig_ecdsa.masm → auth/multisig_ecdsa.masm} +148 -56
  180. package/package.json +11 -9
  181. package/src/account/builder.test.ts +165 -0
  182. package/src/account/builder.ts +71 -34
  183. package/src/account/index.ts +1 -1
  184. package/src/account/masm/account-components/auth.ts +70 -0
  185. package/src/account/masm/auth.ts +1398 -0
  186. package/src/account/masm/index.ts +5 -0
  187. package/src/account/masm.ts +3 -1040
  188. package/src/account/storage.ts +18 -16
  189. package/src/client.test.ts +31 -35
  190. package/src/client.ts +98 -26
  191. package/src/index.ts +84 -22
  192. package/src/inspector.test.ts +17 -17
  193. package/src/inspector.ts +63 -29
  194. package/src/multisig/proposal/execution.ts +102 -41
  195. package/src/multisig/proposal/parser.ts +26 -26
  196. package/src/multisig/signing.ts +4 -4
  197. package/src/multisig.test.ts +2097 -248
  198. package/src/multisig.ts +882 -365
  199. package/src/procedures.ts +50 -26
  200. package/src/proposal/factory.ts +171 -0
  201. package/src/proposal/metadata.ts +165 -0
  202. package/src/proposal/signatures.ts +68 -0
  203. package/src/signer.ts +2 -0
  204. package/src/signers/ecdsa.test.ts +80 -0
  205. package/src/signers/ecdsa.ts +15 -4
  206. package/src/signers/falcon.test.ts +19 -0
  207. package/src/signers/falcon.ts +16 -5
  208. package/src/signers/miden-wallet.test.ts +47 -0
  209. package/src/signers/miden-wallet.ts +18 -1
  210. package/src/signers/para.test.ts +57 -0
  211. package/src/signers/para.ts +26 -7
  212. package/src/transaction/consumeNotes.ts +1 -0
  213. package/src/transaction/index.ts +2 -2
  214. package/src/transaction/options.ts +1 -2
  215. package/src/transaction/p2id.test.ts +190 -0
  216. package/src/transaction/p2id.ts +11 -5
  217. package/src/transaction/rpoRandomCoin.test.ts +64 -0
  218. package/src/transaction/rpoRandomCoin.ts +24 -0
  219. package/src/transaction/{updatePsm.ts → updateGuardian.ts} +19 -32
  220. package/src/transaction/updateProcedureThreshold.ts +97 -0
  221. package/src/transaction/updateSigners.ts +12 -27
  222. package/src/transaction.ts +5 -3
  223. package/src/types/proposal.ts +43 -11
  224. package/src/types.ts +29 -11
  225. package/src/utils/digest.test.ts +55 -0
  226. package/src/utils/digest.ts +51 -1
  227. package/src/utils/signature.ts +47 -9
  228. package/src/utils/word.test.ts +1 -55
  229. package/dist/account.d.ts +0 -104
  230. package/dist/account.d.ts.map +0 -1
  231. package/dist/account.js +0 -136
  232. package/dist/account.js.map +0 -1
  233. package/dist/builder.d.ts +0 -54
  234. package/dist/builder.d.ts.map +0 -1
  235. package/dist/builder.js +0 -78
  236. package/dist/builder.js.map +0 -1
  237. package/dist/http.d.ts +0 -64
  238. package/dist/http.d.ts.map +0 -1
  239. package/dist/http.js +0 -162
  240. package/dist/http.js.map +0 -1
  241. package/dist/keystore.d.ts +0 -65
  242. package/dist/keystore.d.ts.map +0 -1
  243. package/dist/keystore.js +0 -121
  244. package/dist/keystore.js.map +0 -1
  245. package/dist/miden.d.ts +0 -9
  246. package/dist/miden.d.ts.map +0 -1
  247. package/dist/miden.js +0 -26
  248. package/dist/miden.js.map +0 -1
  249. package/dist/multisig/metadata.d.ts +0 -18
  250. package/dist/multisig/metadata.d.ts.map +0 -1
  251. package/dist/multisig/metadata.js +0 -100
  252. package/dist/multisig/metadata.js.map +0 -1
  253. package/dist/multisig/metadata.test.d.ts +0 -2
  254. package/dist/multisig/metadata.test.d.ts.map +0 -1
  255. package/dist/multisig/metadata.test.js +0 -323
  256. package/dist/multisig/metadata.test.js.map +0 -1
  257. package/dist/signer.test.d.ts +0 -2
  258. package/dist/signer.test.d.ts.map +0 -1
  259. package/dist/signer.test.js +0 -117
  260. package/dist/signer.test.js.map +0 -1
  261. package/dist/transaction/updatePsm.d.ts +0 -7
  262. package/dist/transaction/updatePsm.d.ts.map +0 -1
  263. package/dist/transaction/updatePsm.js.map +0 -1
  264. package/dist/transport/http.d.ts +0 -64
  265. package/dist/transport/http.d.ts.map +0 -1
  266. package/dist/transport/http.js +0 -162
  267. package/dist/transport/http.js.map +0 -1
  268. package/dist/transport/index.d.ts +0 -5
  269. package/dist/transport/index.d.ts.map +0 -1
  270. package/dist/transport/index.js +0 -5
  271. package/dist/transport/index.js.map +0 -1
  272. package/masm/psm.masm +0 -178
  273. package/masm/psm_ecdsa.masm +0 -179
@@ -1 +1 @@
1
- {"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../../src/utils/signature.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAqB,SAAS,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAG3F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,eAA0B,GAAG,UAAU,CAM/F;AAsBD,wBAAgB,yBAAyB,CACvC,gBAAgB,EAAE,IAAI,EACtB,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,SAAS,EACpB,cAAc,CAAC,EAAE,MAAM,EACvB,WAAW,CAAC,EAAE,MAAM,GACnB;IAAE,GAAG,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,IAAI,EAAE,CAAA;CAAE,CAiB/B;AAED,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE7E;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,eAAe,GACtB,MAAM,GAAG,IAAI,CAaf;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,qBAAqB,EAAE,MAAM,GAC5B;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA8BhF;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,IAAI,EAAE,CAAA;CAAE,CAAC,GAAG,SAAS,CAKpH;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAExC"}
1
+ {"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../../src/utils/signature.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAqB,SAAS,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAG3F,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE3E,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,eAA0B,GACjC,UAAU,CAMZ;AAsBD,wBAAgB,yBAAyB,CACvC,gBAAgB,EAAE,IAAI,EACtB,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,SAAS,EACpB,cAAc,CAAC,EAAE,MAAM,EACvB,WAAW,CAAC,EAAE,MAAM,GACnB;IAAE,GAAG,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,IAAI,EAAE,CAAA;CAAE,CAiB/B;AAED,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE7E;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,eAAe,GACtB,MAAM,GAAG,IAAI,CAaf;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,qBAAqB,EAAE,MAAM,GAC5B;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA8BhF;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,IAAI,EAAE,CAAA;CAAE,CAAC,GAC5C,SAAS,CAKX;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAExC;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUlE;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,sBAAsB,EACjC,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,GAC7B,sBAAsB,CAexB"}
@@ -12,7 +12,7 @@ function bytesToPackedU32Felts(bytes) {
12
12
  const felts = [];
13
13
  for (let i = 0; i < bytes.length; i += 4) {
14
14
  let packed = 0;
15
- for (let j = 0; j < 4 && i + j < bytes.length; j++) {
15
+ for (let j = 0; j < 4 && i + j < bytes.length; j += 1) {
16
16
  packed |= bytes[i + j] << (j * 8);
17
17
  }
18
18
  felts.push(new Felt(BigInt(packed >>> 0)));
@@ -66,7 +66,7 @@ export function verifyEcdsaCommitment(pubkeyHex, expectedCommitmentHex) {
66
66
  const packedU32Values = [];
67
67
  for (let i = 0; i < bytes.length; i += 4) {
68
68
  let packed = 0;
69
- for (let j = 0; j < 4 && i + j < bytes.length; j++) {
69
+ for (let j = 0; j < 4 && i + j < bytes.length; j += 1) {
70
70
  packed |= bytes[i + j] << (j * 8);
71
71
  }
72
72
  packedU32Values.push(packed >>> 0);
@@ -79,15 +79,15 @@ export function verifyEcdsaCommitment(pubkeyHex, expectedCommitmentHex) {
79
79
  return {
80
80
  match: computedHex === expectedNorm,
81
81
  computedHex,
82
- packedFelts: packedU32Values.map(v => v.toString()),
82
+ packedFelts: packedU32Values.map((value) => value.toString()),
83
83
  };
84
84
  }
85
- catch (e) {
85
+ catch (error) {
86
86
  return {
87
87
  match: false,
88
- computedHex: `ERROR: ${e}`,
88
+ computedHex: `ERROR: ${error}`,
89
89
  packedFelts: [],
90
- error: String(e),
90
+ error: String(error),
91
91
  };
92
92
  }
93
93
  }
@@ -100,4 +100,29 @@ export function mergeSignatureAdviceMaps(advice, entries) {
100
100
  export function toWord(hex) {
101
101
  return Word.fromHex(normalizeHexWord(hex));
102
102
  }
103
+ export function normalizeSignerCommitment(signerId) {
104
+ const hex = signerId.startsWith('0x') || signerId.startsWith('0X')
105
+ ? signerId.slice(2)
106
+ : signerId;
107
+ if (hex.length !== 64 || !/^[0-9a-fA-F]+$/.test(hex)) {
108
+ throw new Error(`expected signerId as 32-byte hex, got ${signerId}`);
109
+ }
110
+ return normalizeHexWord(signerId);
111
+ }
112
+ export function canonicalizeSignature(signature, signerCommitments) {
113
+ try {
114
+ const signerId = normalizeSignerCommitment(signature.signerId);
115
+ if (!signerCommitments.has(signerId)) {
116
+ throw new Error(`signer ${signerId} is not part of this multisig`);
117
+ }
118
+ return {
119
+ ...signature,
120
+ signerId,
121
+ };
122
+ }
123
+ catch (error) {
124
+ const message = error instanceof Error ? error.message : String(error);
125
+ throw new Error(message);
126
+ }
127
+ }
103
128
  //# sourceMappingURL=signature.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"signature.js","sourceRoot":"","sources":["../../src/utils/signature.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signature.js","sourceRoot":"","sources":["../../src/utils/signature.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { describe, it, expect, vi } from 'vitest';
2
- import { wordElementToBigInt, wordToHex, wordToBytes } from './word.js';
2
+ import { wordElementToBigInt, wordToHex } from './word.js';
3
3
  import { Word } from '@miden-sdk/miden-sdk';
4
4
  // Mock the Miden SDK Word class
5
5
  vi.mock('@miden-sdk/miden-sdk', () => ({
@@ -50,56 +50,5 @@ describe('word utilities', () => {
50
50
  expect(hex).toBe(originalHex);
51
51
  });
52
52
  });
53
- describe('wordToBytes', () => {
54
- it('should convert a word with known felt values to LE bytes', () => {
55
- const word = {
56
- toFelts: () => [
57
- { asInt: () => 1n },
58
- { asInt: () => 2n },
59
- { asInt: () => 3n },
60
- { asInt: () => 4n },
61
- ],
62
- };
63
- const bytes = wordToBytes(word);
64
- expect(bytes.length).toBe(32);
65
- expect(bytes[0]).toBe(1);
66
- expect(bytes[1]).toBe(0);
67
- expect(bytes[8]).toBe(2);
68
- expect(bytes[16]).toBe(3);
69
- expect(bytes[24]).toBe(4);
70
- });
71
- it('should encode felts in little-endian order', () => {
72
- const word = {
73
- toFelts: () => [
74
- { asInt: () => 0x0102030405060708n },
75
- { asInt: () => 0n },
76
- { asInt: () => 0n },
77
- { asInt: () => 0n },
78
- ],
79
- };
80
- const bytes = wordToBytes(word);
81
- expect(bytes[0]).toBe(0x08);
82
- expect(bytes[1]).toBe(0x07);
83
- expect(bytes[2]).toBe(0x06);
84
- expect(bytes[3]).toBe(0x05);
85
- expect(bytes[4]).toBe(0x04);
86
- expect(bytes[5]).toBe(0x03);
87
- expect(bytes[6]).toBe(0x02);
88
- expect(bytes[7]).toBe(0x01);
89
- });
90
- it('should handle zero felts', () => {
91
- const word = {
92
- toFelts: () => [
93
- { asInt: () => 0n },
94
- { asInt: () => 0n },
95
- { asInt: () => 0n },
96
- { asInt: () => 0n },
97
- ],
98
- };
99
- const bytes = wordToBytes(word);
100
- expect(bytes.length).toBe(32);
101
- expect(bytes.every((b) => b === 0)).toBe(true);
102
- });
103
- });
104
53
  });
105
54
  //# sourceMappingURL=word.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"word.test.js","sourceRoot":"","sources":["../../src/utils/word.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"word.test.js","sourceRoot":"","sources":["../../src/utils/word.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,gCAAgC;AAChC,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC;IACrC,IAAI,EAAE;QACJ,OAAO,EAAE,CAAC,GAAW,EAAyD,EAAE;YAC9E,iDAAiD;YACjD,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC3D,IAAI,QAAQ,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACtD,CAAC;YAED,gEAAgE;YAChE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAChD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YACjD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YACjD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAEjD,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAEtD,OAAO;gBACL,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ;gBACtB,KAAK,EAAE,GAAG,EAAE;oBACV,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;oBACtD,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;oBACtD,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;oBACtD,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;oBACtD,OAAO,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;gBAClC,CAAC;aACF,CAAC;QACJ,CAAC;KACF;CACF,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CACvB,oEAAoE,CACrE,CAAC;YACF,MAAM,CAAC,mBAAmB,CAAC,IAAY,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAChF,MAAM,CAAC,mBAAmB,CAAC,IAAY,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CACvB,oEAAoE,CACrE,CAAC;YACF,MAAM,CAAC,mBAAmB,CAAC,IAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvD,MAAM,CAAC,mBAAmB,CAAC,IAAY,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,WAAW,GAAG,oEAAoE,CAAC;YACzF,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACvC,MAAM,GAAG,GAAG,SAAS,CAAC,IAAY,CAAC,CAAC;YACpC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ # Multi-Signature RPO Falcon 512 Authentication Component
2
+
3
+ use openzeppelin::auth::multisig
4
+
5
+ type BeWord = struct @bigendian { a: felt, b: felt, c: felt, d: felt }
6
+
7
+ pub use multisig::update_signers_and_threshold
8
+ pub use multisig::update_procedure_threshold
9
+
10
+ pub proc auth_tx_multisig(salt: BeWord)
11
+ exec.multisig::auth_tx
12
+ exec.multisig::assert_new_tx
13
+ end
@@ -0,0 +1,13 @@
1
+ # Multi-Signature ECDSA secp256k1 Authentication Component
2
+
3
+ use openzeppelin::auth::multisig_ecdsa
4
+
5
+ type BeWord = struct @bigendian { a: felt, b: felt, c: felt, d: felt }
6
+
7
+ pub use multisig_ecdsa::update_signers_and_threshold
8
+ pub use multisig_ecdsa::update_procedure_threshold
9
+
10
+ pub proc auth_tx_multisig_ecdsa(salt: BeWord)
11
+ exec.multisig_ecdsa::auth_tx
12
+ exec.multisig_ecdsa::assert_new_tx
13
+ end
@@ -0,0 +1,17 @@
1
+ # Multi-Signature RPO Falcon 512 Authentication Component With GUARDIAN
2
+
3
+ use openzeppelin::auth::multisig
4
+ use openzeppelin::auth::guardian
5
+
6
+ type BeWord = struct @bigendian { a: felt, b: felt, c: felt, d: felt }
7
+
8
+ pub use multisig::update_signers_and_threshold
9
+ pub use multisig::update_procedure_threshold
10
+ pub use guardian::update_guardian_public_key
11
+ pub use guardian::verify_guardian_signature
12
+
13
+ pub proc auth_tx_multisig_guardian(salt: BeWord)
14
+ exec.multisig::auth_tx
15
+ exec.guardian::verify_guardian_signature
16
+ exec.multisig::assert_new_tx
17
+ end
@@ -0,0 +1,17 @@
1
+ # Multi-Signature ECDSA secp256k1 Authentication Component With GUARDIAN
2
+
3
+ use openzeppelin::auth::multisig_ecdsa
4
+ use openzeppelin::auth::guardian_ecdsa
5
+
6
+ type BeWord = struct @bigendian { a: felt, b: felt, c: felt, d: felt }
7
+
8
+ pub use multisig_ecdsa::update_signers_and_threshold
9
+ pub use multisig_ecdsa::update_procedure_threshold
10
+ pub use guardian_ecdsa::update_guardian_public_key
11
+ pub use guardian_ecdsa::verify_guardian_signature
12
+
13
+ pub proc auth_tx_multisig_guardian_ecdsa(salt: BeWord)
14
+ exec.multisig_ecdsa::auth_tx
15
+ exec.guardian_ecdsa::verify_guardian_signature
16
+ exec.multisig_ecdsa::assert_new_tx
17
+ end
@@ -0,0 +1,177 @@
1
+ # Guardian Authentication Component
2
+ #
3
+ # This component provides GUARDIAN signature verification for accounts.
4
+ # It can be used standalone or in conjunction with other auth components like multisig.
5
+
6
+ use miden::protocol::active_account
7
+ use miden::protocol::native_account
8
+
9
+ type BeWord = struct @bigendian { a: felt, b: felt, c: felt, d: felt }
10
+
11
+ # IMPORTANT SECURITY NOTES
12
+ # --------------------------------------------------------------------------------
13
+ # - The selector in `GUARDIAN_SELECTOR_SLOT` controls whether the extra GUARDIAN signature
14
+ # is enforced:
15
+ # * GUARDIAN_ON => exactly one valid GUARDIAN signature is required.
16
+ # * GUARDIAN_OFF => GUARDIAN signature is skipped for that call.
17
+ #
18
+ # - `verify_guardian_signature` reads the selector from initial storage state.
19
+ # This means changes made during the same transaction won't affect the check.
20
+ #
21
+ # - `enable_guardian` / `disable_guardian` procedures allow explicit control over GUARDIAN state.
22
+ #
23
+ # - `update_guardian_public_key`:
24
+ # * Installs a new GUARDIAN public key in the map at `GUARDIAN_PUBLIC_KEY_MAP_SLOT`.
25
+ # * Does not itself perform any signature checks.
26
+ # * To update the key without requiring GUARDIAN signature, ensure selector is OFF.
27
+ #
28
+ # Storage Layout
29
+ # --------------------------------------------------------------------------------
30
+ #
31
+ # +---------------------+---------------+
32
+ # | DESCRIPTION | SLOT |
33
+ # +---------------------+---------------+
34
+ # | GUARDIAN SELECTOR (word) | 0 |
35
+ # | GUARDIAN PUBLIC KEY MAP | 1 |
36
+ # +---------------------+---------------+
37
+ #
38
+ # - GUARDIAN_SELECTOR_SLOT (0):
39
+ # * Stores a word that is compared against [1, 0, 0, 0] (GUARDIAN_ON).
40
+ # * Any value != GUARDIAN_ON is treated as GUARDIAN_OFF.
41
+ #
42
+ # - GUARDIAN_PUBLIC_KEY_MAP_SLOT (1):
43
+ # * A map from a fixed key [0, 0, 0, 0] to the single GUARDIAN public key:
44
+ # [0, 0, 0, 0] => GUARDIAN_PUBLIC_KEY
45
+ # * GUARDIAN_PUBLIC_KEY is a RPO Falcon 512 public key represented as a word.
46
+
47
+ # CONSTANTS
48
+ # =================================================================================================
49
+
50
+ # Slot where the GUARDIAN selector flag is stored (using word() for named slot access):
51
+ # - GUARDIAN_ON => GUARDIAN signature required
52
+ # - GUARDIAN_OFF => GUARDIAN signature skipped
53
+ const GUARDIAN_SELECTOR_SLOT=word("openzeppelin::guardian::selector")
54
+
55
+ # Map slot for GUARDIAN public key
56
+ # Uses exactly one GUARDIAN public key at index [0, 0, 0, 0]
57
+ # [0, 0, 0, 0] => GUARDIAN_PUBLIC_KEY
58
+ const GUARDIAN_PUBLIC_KEY_MAP_SLOT=word("openzeppelin::guardian::public_key")
59
+
60
+ # Selector flag values
61
+ const GUARDIAN_ON=[1, 0, 0, 0]
62
+ const GUARDIAN_OFF=[0, 0, 0, 0]
63
+
64
+ # The event emitted when a signature is not found for a required signer.
65
+ const AUTH_UNAUTHORIZED_EVENT=event("miden::auth::unauthorized")
66
+
67
+ # GUARDIAN PROCEDURES
68
+ # =================================================================================================
69
+
70
+ #! Enable GUARDIAN verification by setting the selector to ON.
71
+ #!
72
+ #! Operand stack inputs: []
73
+ #! Outputs: []
74
+ #!
75
+ #! Notes:
76
+ #! - Sets GUARDIAN_SELECTOR_SLOT to GUARDIAN_ON (1)
77
+ #! - After this, transactions will require GUARDIAN signature verification
78
+ proc enable_guardian
79
+ push.GUARDIAN_ON
80
+ # => [GUARDIAN_ON]
81
+
82
+ push.GUARDIAN_SELECTOR_SLOT[0..2]
83
+ # => [selector_slot_prefix, selector_slot_suffix, GUARDIAN_ON]
84
+
85
+ exec.native_account::set_item
86
+ # => [OLD_ROOT]
87
+
88
+ dropw
89
+ # => []
90
+ end
91
+
92
+ #! Disable GUARDIAN verification by setting the selector to OFF.
93
+ #!
94
+ #! Operand stack inputs: []
95
+ #! Outputs: []
96
+ #!
97
+ #! Notes:
98
+ #! - Sets GUARDIAN_SELECTOR_SLOT to GUARDIAN_OFF (0)
99
+ #! - After this, transactions will NOT require GUARDIAN signature verification
100
+ proc disable_guardian
101
+ push.GUARDIAN_OFF
102
+ # => [GUARDIAN_OFF]
103
+
104
+ push.GUARDIAN_SELECTOR_SLOT[0..2]
105
+ # => [selector_slot_prefix, selector_slot_suffix, GUARDIAN_OFF]
106
+
107
+ exec.native_account::set_item
108
+ # => [OLD_ROOT]
109
+
110
+ dropw
111
+ # => []
112
+ end
113
+
114
+ #! Update the GUARDIAN public key.
115
+ #!
116
+ #! Operand stack inputs: []
117
+ #! Advice stack inputs: [PUB_KEY]
118
+ #! - PUB_KEY is the new GUARDIAN RPO Falcon 512 public key
119
+ #!
120
+ #! Notes:
121
+ #! - Stores PUB_KEY into GUARDIAN_PUBLIC_KEY_MAP_SLOT:
122
+ #! [0, 0, 0, 0] => GUARDIAN_PUBLIC_KEY
123
+ #! - To update the key without requiring GUARDIAN signature, ensure
124
+ #! GUARDIAN_SELECTOR_SLOT = 0 (OFF) before calling this.
125
+ pub proc update_guardian_public_key
126
+ exec.disable_guardian
127
+ # ------ Update the GUARDIAN public key ------
128
+ adv_loadw
129
+ # => [PUB_KEY]
130
+
131
+ push.0.0.0.0
132
+ # => [MAP_KEY, PUB_KEY]
133
+ # Note that MAP_KEY is [0, 0, 0, 0] for a single GUARDIAN_KEY
134
+
135
+ push.GUARDIAN_PUBLIC_KEY_MAP_SLOT[0..2]
136
+ # => [pub_key_slot_prefix, pub_key_slot_suffix, MAP_KEY, PUB_KEY]
137
+
138
+ exec.native_account::set_map_item
139
+ # => [OLD_MAP_VALUE]
140
+
141
+ dropw
142
+ # => []
143
+ end
144
+
145
+ #! Conditionally verify a "GUARDIAN" signature against a stored public key hash.
146
+ #! The condition is controlled by the selector at GUARDIAN_SELECTOR_SLOT.
147
+ #!
148
+ #! Inputs: [MSG]
149
+ #! Outputs: [MSG]
150
+ #!
151
+ #! Panics if:
152
+ #! - Selector is ON but the provided GUARDIAN signature is invalid or missing.
153
+ #!
154
+ #! Notes:
155
+ #! - MSG is TX_SUMMARY_COMMITMENT provided by auth procedure
156
+ #! - If selector is OFF (0), GUARDIAN verification is skipped
157
+ #! - Selector value is read from initial storage state
158
+ pub proc verify_guardian_signature(msg: BeWord) -> BeWord
159
+ push.GUARDIAN_SELECTOR_SLOT[0..2]
160
+ exec.active_account::get_item
161
+ drop drop drop
162
+ # => [selector, MSG]
163
+
164
+ push.1 eq
165
+ if.true
166
+ push.1
167
+ push.GUARDIAN_PUBLIC_KEY_MAP_SLOT[0..2]
168
+ exec.::miden::standards::auth::falcon512_rpo::verify_signatures
169
+ push.1 neq
170
+ if.true
171
+ emit.AUTH_UNAUTHORIZED_EVENT
172
+ push.0 assert.err="invalid GUARDIAN signature"
173
+ end
174
+ end
175
+ # => [MSG]
176
+ exec.enable_guardian
177
+ end
@@ -0,0 +1,178 @@
1
+ # Guardian Authentication Component (ECDSA)
2
+ #
3
+ # This component provides GUARDIAN signature verification for accounts using
4
+ # ECDSA secp256k1 (k256/keccak) signatures.
5
+ # It can be used standalone or in conjunction with other auth components like multisig.
6
+
7
+ use miden::protocol::active_account
8
+ use miden::protocol::native_account
9
+
10
+ type BeWord = struct @bigendian { a: felt, b: felt, c: felt, d: felt }
11
+
12
+ # IMPORTANT SECURITY NOTES
13
+ # --------------------------------------------------------------------------------
14
+ # - The selector in `GUARDIAN_SELECTOR_SLOT` controls whether the extra GUARDIAN signature
15
+ # is enforced:
16
+ # * GUARDIAN_ON => exactly one valid GUARDIAN signature is required.
17
+ # * GUARDIAN_OFF => GUARDIAN signature is skipped for that call.
18
+ #
19
+ # - `verify_guardian_signature` reads the selector from initial storage state.
20
+ # This means changes made during the same transaction won't affect the check.
21
+ #
22
+ # - `enable_guardian` / `disable_guardian` procedures allow explicit control over GUARDIAN state.
23
+ #
24
+ # - `update_guardian_public_key`:
25
+ # * Installs a new GUARDIAN public key in the map at `GUARDIAN_PUBLIC_KEY_MAP_SLOT`.
26
+ # * Does not itself perform any signature checks.
27
+ # * To update the key without requiring GUARDIAN signature, ensure selector is OFF.
28
+ #
29
+ # Storage Layout
30
+ # --------------------------------------------------------------------------------
31
+ #
32
+ # +---------------------+---------------+
33
+ # | DESCRIPTION | SLOT |
34
+ # +---------------------+---------------+
35
+ # | GUARDIAN SELECTOR (word) | 0 |
36
+ # | GUARDIAN PUBLIC KEY MAP | 1 |
37
+ # +---------------------+---------------+
38
+ #
39
+ # - GUARDIAN_SELECTOR_SLOT (0):
40
+ # * Stores a word that is compared against [1, 0, 0, 0] (GUARDIAN_ON).
41
+ # * Any value != GUARDIAN_ON is treated as GUARDIAN_OFF.
42
+ #
43
+ # - GUARDIAN_PUBLIC_KEY_MAP_SLOT (1):
44
+ # * A map from a fixed key [0, 0, 0, 0] to the single GUARDIAN public key:
45
+ # [0, 0, 0, 0] => GUARDIAN_PUBLIC_KEY
46
+ # * GUARDIAN_PUBLIC_KEY is an ECDSA secp256k1 public key represented as a word.
47
+
48
+ # CONSTANTS
49
+ # =================================================================================================
50
+
51
+ # Slot where the GUARDIAN selector flag is stored (using word() for named slot access):
52
+ # - GUARDIAN_ON => GUARDIAN signature required
53
+ # - GUARDIAN_OFF => GUARDIAN signature skipped
54
+ const GUARDIAN_SELECTOR_SLOT=word("openzeppelin::guardian::selector")
55
+
56
+ # Map slot for GUARDIAN public key
57
+ # Uses exactly one GUARDIAN public key at index [0, 0, 0, 0]
58
+ # [0, 0, 0, 0] => GUARDIAN_PUBLIC_KEY
59
+ const GUARDIAN_PUBLIC_KEY_MAP_SLOT=word("openzeppelin::guardian::public_key")
60
+
61
+ # Selector flag values
62
+ const GUARDIAN_ON=[1, 0, 0, 0]
63
+ const GUARDIAN_OFF=[0, 0, 0, 0]
64
+
65
+ # The event emitted when a signature is not found for a required signer.
66
+ const AUTH_UNAUTHORIZED_EVENT=event("miden::auth::unauthorized")
67
+
68
+ # GUARDIAN PROCEDURES
69
+ # =================================================================================================
70
+
71
+ #! Enable GUARDIAN verification by setting the selector to ON.
72
+ #!
73
+ #! Operand stack inputs: []
74
+ #! Outputs: []
75
+ #!
76
+ #! Notes:
77
+ #! - Sets GUARDIAN_SELECTOR_SLOT to GUARDIAN_ON (1)
78
+ #! - After this, transactions will require GUARDIAN signature verification
79
+ proc enable_guardian
80
+ push.GUARDIAN_ON
81
+ # => [GUARDIAN_ON]
82
+
83
+ push.GUARDIAN_SELECTOR_SLOT[0..2]
84
+ # => [selector_slot_prefix, selector_slot_suffix, GUARDIAN_ON]
85
+
86
+ exec.native_account::set_item
87
+ # => [OLD_ROOT]
88
+
89
+ dropw
90
+ # => []
91
+ end
92
+
93
+ #! Disable GUARDIAN verification by setting the selector to OFF.
94
+ #!
95
+ #! Operand stack inputs: []
96
+ #! Outputs: []
97
+ #!
98
+ #! Notes:
99
+ #! - Sets GUARDIAN_SELECTOR_SLOT to GUARDIAN_OFF (0)
100
+ #! - After this, transactions will NOT require GUARDIAN signature verification
101
+ proc disable_guardian
102
+ push.GUARDIAN_OFF
103
+ # => [GUARDIAN_OFF]
104
+
105
+ push.GUARDIAN_SELECTOR_SLOT[0..2]
106
+ # => [selector_slot_prefix, selector_slot_suffix, GUARDIAN_OFF]
107
+
108
+ exec.native_account::set_item
109
+ # => [OLD_ROOT]
110
+
111
+ dropw
112
+ # => []
113
+ end
114
+
115
+ #! Update the GUARDIAN public key.
116
+ #!
117
+ #! Operand stack inputs: []
118
+ #! Advice stack inputs: [PUB_KEY]
119
+ #! - PUB_KEY is the new GUARDIAN ECDSA secp256k1 public key
120
+ #!
121
+ #! Notes:
122
+ #! - Stores PUB_KEY into GUARDIAN_PUBLIC_KEY_MAP_SLOT:
123
+ #! [0, 0, 0, 0] => GUARDIAN_PUBLIC_KEY
124
+ #! - To update the key without requiring GUARDIAN signature, ensure
125
+ #! GUARDIAN_SELECTOR_SLOT = 0 (OFF) before calling this.
126
+ pub proc update_guardian_public_key
127
+ exec.disable_guardian
128
+ # ------ Update the GUARDIAN public key ------
129
+ adv_loadw
130
+ # => [PUB_KEY]
131
+
132
+ push.0.0.0.0
133
+ # => [MAP_KEY, PUB_KEY]
134
+ # Note that MAP_KEY is [0, 0, 0, 0] for a single GUARDIAN_KEY
135
+
136
+ push.GUARDIAN_PUBLIC_KEY_MAP_SLOT[0..2]
137
+ # => [pub_key_slot_prefix, pub_key_slot_suffix, MAP_KEY, PUB_KEY]
138
+
139
+ exec.native_account::set_map_item
140
+ # => [OLD_MAP_VALUE]
141
+
142
+ dropw
143
+ # => []
144
+ end
145
+
146
+ #! Conditionally verify a "GUARDIAN" signature against a stored public key hash.
147
+ #! The condition is controlled by the selector at GUARDIAN_SELECTOR_SLOT.
148
+ #!
149
+ #! Inputs: [MSG]
150
+ #! Outputs: [MSG]
151
+ #!
152
+ #! Panics if:
153
+ #! - Selector is ON but the provided GUARDIAN signature is invalid or missing.
154
+ #!
155
+ #! Notes:
156
+ #! - MSG is TX_SUMMARY_COMMITMENT provided by auth procedure
157
+ #! - If selector is OFF (0), GUARDIAN verification is skipped
158
+ #! - Selector value is read from initial storage state
159
+ pub proc verify_guardian_signature(msg: BeWord) -> BeWord
160
+ push.GUARDIAN_SELECTOR_SLOT[0..2]
161
+ exec.active_account::get_item
162
+ drop drop drop
163
+ # => [selector, MSG]
164
+
165
+ push.1 eq
166
+ if.true
167
+ push.1
168
+ push.GUARDIAN_PUBLIC_KEY_MAP_SLOT[0..2]
169
+ exec.::miden::standards::auth::ecdsa_k256_keccak::verify_signatures
170
+ push.1 neq
171
+ if.true
172
+ emit.AUTH_UNAUTHORIZED_EVENT
173
+ push.0 assert.err="invalid GUARDIAN signature"
174
+ end
175
+ end
176
+ # => [MSG]
177
+ exec.enable_guardian
178
+ end