@openzeppelin/miden-multisig-client 0.16.1 → 0.17.0-rc.1

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 (207) hide show
  1. package/README.md +192 -11
  2. package/dist/account/builder.d.ts.map +1 -1
  3. package/dist/account/builder.js +32 -25
  4. package/dist/account/builder.js.map +1 -1
  5. package/dist/account/builder.test.js +73 -21
  6. package/dist/account/builder.test.js.map +1 -1
  7. package/dist/account/layout.d.ts +31 -0
  8. package/dist/account/layout.d.ts.map +1 -0
  9. package/dist/account/layout.js +31 -0
  10. package/dist/account/layout.js.map +1 -0
  11. package/dist/account/masm/account-components/auth.d.ts +1 -4
  12. package/dist/account/masm/account-components/auth.d.ts.map +1 -1
  13. package/dist/account/masm/account-components/auth.js +36 -53
  14. package/dist/account/masm/account-components/auth.js.map +1 -1
  15. package/dist/account/masm/index.d.ts +0 -1
  16. package/dist/account/masm/index.d.ts.map +1 -1
  17. package/dist/account/masm/index.js +0 -1
  18. package/dist/account/masm/index.js.map +1 -1
  19. package/dist/account/storage.d.ts +4 -0
  20. package/dist/account/storage.d.ts.map +1 -1
  21. package/dist/account/storage.js +9 -20
  22. package/dist/account/storage.js.map +1 -1
  23. package/dist/client.d.ts +4 -0
  24. package/dist/client.d.ts.map +1 -1
  25. package/dist/client.js +10 -5
  26. package/dist/client.js.map +1 -1
  27. package/dist/client.test.js +74 -16
  28. package/dist/client.test.js.map +1 -1
  29. package/dist/index.d.ts +5 -3
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +3 -3
  32. package/dist/index.js.map +1 -1
  33. package/dist/inspector.d.ts +59 -1
  34. package/dist/inspector.d.ts.map +1 -1
  35. package/dist/inspector.js +157 -29
  36. package/dist/inspector.js.map +1 -1
  37. package/dist/inspector.test.js +246 -37
  38. package/dist/inspector.test.js.map +1 -1
  39. package/dist/multisig.d.ts +109 -33
  40. package/dist/multisig.d.ts.map +1 -1
  41. package/dist/multisig.js +307 -104
  42. package/dist/multisig.js.map +1 -1
  43. package/dist/multisig.test.js +582 -58
  44. package/dist/multisig.test.js.map +1 -1
  45. package/dist/procedures.d.ts +6 -7
  46. package/dist/procedures.d.ts.map +1 -1
  47. package/dist/procedures.js +6 -7
  48. package/dist/procedures.js.map +1 -1
  49. package/dist/proposal/metadata.d.ts.map +1 -1
  50. package/dist/proposal/metadata.js +13 -2
  51. package/dist/proposal/metadata.js.map +1 -1
  52. package/dist/proposal/metadata.test.js +57 -0
  53. package/dist/proposal/metadata.test.js.map +1 -1
  54. package/dist/prover/errors.d.ts +5 -0
  55. package/dist/prover/errors.d.ts.map +1 -1
  56. package/dist/prover/errors.js +7 -155
  57. package/dist/prover/errors.js.map +1 -1
  58. package/dist/prover/errors.test.js +5 -0
  59. package/dist/prover/errors.test.js.map +1 -1
  60. package/dist/prover/retry.d.ts +1 -6
  61. package/dist/prover/retry.d.ts.map +1 -1
  62. package/dist/prover/retry.js +5 -28
  63. package/dist/prover/retry.js.map +1 -1
  64. package/dist/prover/retry.test.js +1 -1
  65. package/dist/prover/retry.test.js.map +1 -1
  66. package/dist/prover/workflow.d.ts +4 -3
  67. package/dist/prover/workflow.d.ts.map +1 -1
  68. package/dist/prover/workflow.js +5 -2
  69. package/dist/prover/workflow.js.map +1 -1
  70. package/dist/prover/workflow.test.js +28 -3
  71. package/dist/prover/workflow.test.js.map +1 -1
  72. package/dist/retry/classify.d.ts +16 -0
  73. package/dist/retry/classify.d.ts.map +1 -0
  74. package/dist/retry/classify.js +187 -0
  75. package/dist/retry/classify.js.map +1 -0
  76. package/dist/retry/runtime.d.ts +13 -0
  77. package/dist/retry/runtime.d.ts.map +1 -0
  78. package/dist/retry/runtime.js +33 -0
  79. package/dist/retry/runtime.js.map +1 -0
  80. package/dist/rpc/config.d.ts +11 -0
  81. package/dist/rpc/config.d.ts.map +1 -0
  82. package/dist/rpc/config.js +17 -0
  83. package/dist/rpc/config.js.map +1 -0
  84. package/dist/rpc/config.test.d.ts +2 -0
  85. package/dist/rpc/config.test.d.ts.map +1 -0
  86. package/dist/rpc/config.test.js +24 -0
  87. package/dist/rpc/config.test.js.map +1 -0
  88. package/dist/rpc/errors.d.ts +2 -0
  89. package/dist/rpc/errors.d.ts.map +1 -0
  90. package/dist/rpc/errors.js +11 -0
  91. package/dist/rpc/errors.js.map +1 -0
  92. package/dist/rpc/errors.test.d.ts +2 -0
  93. package/dist/rpc/errors.test.d.ts.map +1 -0
  94. package/dist/rpc/errors.test.js +34 -0
  95. package/dist/rpc/errors.test.js.map +1 -0
  96. package/dist/rpc/retry.d.ts +4 -0
  97. package/dist/rpc/retry.d.ts.map +1 -0
  98. package/dist/rpc/retry.js +6 -0
  99. package/dist/rpc/retry.js.map +1 -0
  100. package/dist/rpc/retry.test.d.ts +2 -0
  101. package/dist/rpc/retry.test.d.ts.map +1 -0
  102. package/dist/rpc/retry.test.js +98 -0
  103. package/dist/rpc/retry.test.js.map +1 -0
  104. package/dist/transaction/index.d.ts +1 -1
  105. package/dist/transaction/index.d.ts.map +1 -1
  106. package/dist/transaction/index.js +1 -1
  107. package/dist/transaction/index.js.map +1 -1
  108. package/dist/transaction/p2id.d.ts +17 -6
  109. package/dist/transaction/p2id.d.ts.map +1 -1
  110. package/dist/transaction/p2id.js +22 -31
  111. package/dist/transaction/p2id.js.map +1 -1
  112. package/dist/transaction/p2id.test.js +62 -24
  113. package/dist/transaction/p2id.test.js.map +1 -1
  114. package/dist/transaction/summary.d.ts +45 -2
  115. package/dist/transaction/summary.d.ts.map +1 -1
  116. package/dist/transaction/summary.js +42 -2
  117. package/dist/transaction/summary.js.map +1 -1
  118. package/dist/transaction/summary.test.d.ts +2 -0
  119. package/dist/transaction/summary.test.d.ts.map +1 -0
  120. package/dist/transaction/summary.test.js +26 -0
  121. package/dist/transaction/summary.test.js.map +1 -0
  122. package/dist/transaction/updateGuardian.d.ts.map +1 -1
  123. package/dist/transaction/updateGuardian.js +16 -18
  124. package/dist/transaction/updateGuardian.js.map +1 -1
  125. package/dist/transaction/updateProcedureThreshold.d.ts.map +1 -1
  126. package/dist/transaction/updateProcedureThreshold.js +15 -17
  127. package/dist/transaction/updateProcedureThreshold.js.map +1 -1
  128. package/dist/transaction/updateSigners.d.ts +6 -1
  129. package/dist/transaction/updateSigners.d.ts.map +1 -1
  130. package/dist/transaction/updateSigners.js +20 -17
  131. package/dist/transaction/updateSigners.js.map +1 -1
  132. package/dist/transaction.d.ts +2 -2
  133. package/dist/transaction.d.ts.map +1 -1
  134. package/dist/transaction.js +1 -1
  135. package/dist/transaction.js.map +1 -1
  136. package/dist/types/proposal.d.ts +28 -4
  137. package/dist/types/proposal.d.ts.map +1 -1
  138. package/dist/types/proposal.js +18 -0
  139. package/dist/types/proposal.js.map +1 -1
  140. package/dist/types.d.ts +0 -1
  141. package/dist/types.d.ts.map +1 -1
  142. package/dist/utils/signature.d.ts +11 -7
  143. package/dist/utils/signature.d.ts.map +1 -1
  144. package/dist/utils/signature.js +24 -58
  145. package/dist/utils/signature.js.map +1 -1
  146. package/dist/utils/word.d.ts +7 -0
  147. package/dist/utils/word.d.ts.map +1 -1
  148. package/dist/utils/word.js +15 -0
  149. package/dist/utils/word.js.map +1 -1
  150. package/masm/account_components/auth/guarded_multisig.masm +42 -0
  151. package/package.json +7 -4
  152. package/src/account/builder.test.ts +111 -45
  153. package/src/account/builder.ts +45 -33
  154. package/src/account/layout.ts +33 -0
  155. package/src/account/masm/account-components/auth.ts +36 -56
  156. package/src/account/masm/index.ts +0 -1
  157. package/src/account/storage.ts +9 -22
  158. package/src/client.test.ts +87 -16
  159. package/src/client.ts +16 -3
  160. package/src/index.ts +27 -1
  161. package/src/inspector.test.ts +330 -38
  162. package/src/inspector.ts +196 -33
  163. package/src/multisig.test.ts +680 -63
  164. package/src/multisig.ts +400 -115
  165. package/src/procedures.ts +6 -7
  166. package/src/proposal/metadata.test.ts +76 -0
  167. package/src/proposal/metadata.ts +13 -2
  168. package/src/prover/errors.test.ts +8 -0
  169. package/src/prover/errors.ts +7 -175
  170. package/src/prover/retry.test.ts +1 -1
  171. package/src/prover/retry.ts +10 -35
  172. package/src/prover/workflow.test.ts +40 -4
  173. package/src/prover/workflow.ts +16 -4
  174. package/src/retry/classify.ts +220 -0
  175. package/src/retry/runtime.ts +45 -0
  176. package/src/rpc/config.test.ts +45 -0
  177. package/src/rpc/config.ts +30 -0
  178. package/src/rpc/errors.test.ts +69 -0
  179. package/src/rpc/errors.ts +12 -0
  180. package/src/rpc/retry.test.ts +144 -0
  181. package/src/rpc/retry.ts +12 -0
  182. package/src/transaction/index.ts +7 -1
  183. package/src/transaction/p2id.test.ts +112 -31
  184. package/src/transaction/p2id.ts +39 -38
  185. package/src/transaction/summary.test.ts +32 -0
  186. package/src/transaction/summary.ts +83 -4
  187. package/src/transaction/updateGuardian.ts +15 -25
  188. package/src/transaction/updateProcedureThreshold.ts +13 -29
  189. package/src/transaction/updateSigners.ts +38 -30
  190. package/src/transaction.ts +8 -1
  191. package/src/types/proposal.ts +43 -4
  192. package/src/types.ts +0 -1
  193. package/src/utils/signature.ts +32 -65
  194. package/src/utils/word.ts +17 -0
  195. package/dist/account/masm/auth.d.ts +0 -5
  196. package/dist/account/masm/auth.d.ts.map +0 -1
  197. package/dist/account/masm/auth.js +0 -1509
  198. package/dist/account/masm/auth.js.map +0 -1
  199. package/masm/account_components/auth/multisig.masm +0 -12
  200. package/masm/account_components/auth/multisig_ecdsa.masm +0 -12
  201. package/masm/account_components/auth/multisig_guardian.masm +0 -16
  202. package/masm/account_components/auth/multisig_guardian_ecdsa.masm +0 -16
  203. package/masm/auth/guardian.masm +0 -199
  204. package/masm/auth/guardian_ecdsa.masm +0 -195
  205. package/masm/auth/multisig.masm +0 -554
  206. package/masm/auth/multisig_ecdsa.masm +0 -554
  207. package/src/account/masm/auth.ts +0 -1512
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/account/masm/auth.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,0BAA0B;AAE1B,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0iB5B,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0iBlC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuM5B,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmMlC,CAAC"}
@@ -1,12 +0,0 @@
1
- # Multi-Signature RPO Falcon 512 Authentication Component
2
-
3
- use openzeppelin::auth::multisig
4
-
5
- pub use multisig::update_signers_and_threshold
6
- pub use multisig::update_procedure_threshold
7
-
8
- @auth_script
9
- pub proc auth_tx_multisig(salt: word)
10
- exec.multisig::auth_tx
11
- exec.multisig::assert_new_tx
12
- end
@@ -1,12 +0,0 @@
1
- # Multi-Signature ECDSA secp256k1 Authentication Component
2
-
3
- use openzeppelin::auth::multisig_ecdsa
4
-
5
- pub use multisig_ecdsa::update_signers_and_threshold
6
- pub use multisig_ecdsa::update_procedure_threshold
7
-
8
- @auth_script
9
- pub proc auth_tx_multisig_ecdsa(salt: word)
10
- exec.multisig_ecdsa::auth_tx
11
- exec.multisig_ecdsa::assert_new_tx
12
- end
@@ -1,16 +0,0 @@
1
- # Multi-Signature RPO Falcon 512 Authentication Component With GUARDIAN
2
-
3
- use openzeppelin::auth::multisig
4
- use openzeppelin::auth::guardian
5
-
6
- pub use multisig::update_signers_and_threshold
7
- pub use multisig::update_procedure_threshold
8
- pub use guardian::update_guardian_public_key
9
- pub use guardian::verify_guardian_signature
10
-
11
- @auth_script
12
- pub proc auth_tx_multisig_guardian(salt: word)
13
- exec.multisig::auth_tx
14
- exec.guardian::verify_guardian_signature
15
- exec.multisig::assert_new_tx
16
- end
@@ -1,16 +0,0 @@
1
- # Multi-Signature ECDSA secp256k1 Authentication Component With GUARDIAN
2
-
3
- use openzeppelin::auth::multisig_ecdsa
4
- use openzeppelin::auth::guardian_ecdsa
5
-
6
- pub use multisig_ecdsa::update_signers_and_threshold
7
- pub use multisig_ecdsa::update_procedure_threshold
8
- pub use guardian_ecdsa::update_guardian_public_key
9
- pub use guardian_ecdsa::verify_guardian_signature
10
-
11
- @auth_script
12
- pub proc auth_tx_multisig_guardian_ecdsa(salt: word)
13
- exec.multisig_ecdsa::auth_tx
14
- exec.guardian_ecdsa::verify_guardian_signature
15
- exec.multisig_ecdsa::assert_new_tx
16
- end
@@ -1,199 +0,0 @@
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::auth::AUTH_UNAUTHORIZED_EVENT
8
- use miden::protocol::native_account
9
-
10
- # IMPORTANT SECURITY NOTES
11
- # --------------------------------------------------------------------------------
12
- # - The selector in `GUARDIAN_SELECTOR_SLOT` controls whether the extra GUARDIAN signature
13
- # is enforced:
14
- # * GUARDIAN_ON => exactly one valid GUARDIAN signature is required.
15
- # * GUARDIAN_OFF => GUARDIAN signature is skipped for that call.
16
- #
17
- # - `verify_guardian_signature` reads the selector from initial storage state.
18
- # This means changes made during the same transaction won't affect the check.
19
- #
20
- # - `enable_guardian` / `disable_guardian` procedures allow explicit control over GUARDIAN state.
21
- #
22
- # - `update_guardian_public_key`:
23
- # * Installs a new GUARDIAN public key in the map at `GUARDIAN_PUBLIC_KEY_MAP_SLOT`.
24
- # * Does not itself perform any signature checks.
25
- # * To update the key without requiring GUARDIAN signature, ensure selector is OFF.
26
- #
27
- # Storage Layout
28
- # --------------------------------------------------------------------------------
29
- #
30
- # +---------------------+---------------+
31
- # | DESCRIPTION | SLOT |
32
- # +---------------------+---------------+
33
- # | GUARDIAN SELECTOR (word) | 0 |
34
- # | GUARDIAN PUBLIC KEY MAP | 1 |
35
- # | GUARDIAN SCHEME ID MAP | 2 |
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 Falcon Poseidon2 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
- # Map slot for GUARDIAN signature scheme IDs
61
- # Uses exactly one scheme ID entry at index [0, 0, 0, 0]
62
- # [0, 0, 0, 0] => [scheme_id, 0, 0, 0]
63
- const GUARDIAN_SCHEME_ID_MAP_SLOT=word("openzeppelin::guardian::scheme_id")
64
-
65
- # Selector flag values
66
- const GUARDIAN_ON=[1, 0, 0, 0]
67
- const GUARDIAN_OFF=[0, 0, 0, 0]
68
- const FALCON_512_POSEIDON2_SCHEME_WORD=[2, 0, 0, 0]
69
-
70
- # GUARDIAN PROCEDURES
71
- # =================================================================================================
72
-
73
- #! Enable GUARDIAN verification by setting the selector to ON.
74
- #!
75
- #! Operand stack inputs: []
76
- #! Outputs: []
77
- #!
78
- #! Notes:
79
- #! - Sets GUARDIAN_SELECTOR_SLOT to GUARDIAN_ON (1)
80
- #! - After this, transactions will require GUARDIAN signature verification
81
- proc enable_guardian
82
- push.GUARDIAN_ON
83
- # => [GUARDIAN_ON]
84
-
85
- push.GUARDIAN_SELECTOR_SLOT[0..2]
86
- # => [selector_slot_prefix, selector_slot_suffix, GUARDIAN_ON]
87
-
88
- exec.native_account::set_item
89
- # => [OLD_ROOT]
90
-
91
- dropw
92
- # => []
93
- end
94
-
95
- #! Disable GUARDIAN verification by setting the selector to OFF.
96
- #!
97
- #! Operand stack inputs: []
98
- #! Outputs: []
99
- #!
100
- #! Notes:
101
- #! - Sets GUARDIAN_SELECTOR_SLOT to GUARDIAN_OFF (0)
102
- #! - After this, transactions will NOT require GUARDIAN signature verification
103
- proc disable_guardian
104
- push.GUARDIAN_OFF
105
- # => [GUARDIAN_OFF]
106
-
107
- push.GUARDIAN_SELECTOR_SLOT[0..2]
108
- # => [selector_slot_prefix, selector_slot_suffix, GUARDIAN_OFF]
109
-
110
- exec.native_account::set_item
111
- # => [OLD_ROOT]
112
-
113
- dropw
114
- # => []
115
- end
116
-
117
- #! Update the GUARDIAN public key.
118
- #!
119
- #! Operand stack inputs: []
120
- #! Advice stack inputs: [PUB_KEY]
121
- #! - PUB_KEY is the new GUARDIAN RPO Falcon 512 public key
122
- #!
123
- #! Notes:
124
- #! - Stores PUB_KEY into GUARDIAN_PUBLIC_KEY_MAP_SLOT:
125
- #! [0, 0, 0, 0] => GUARDIAN_PUBLIC_KEY
126
- #! - To update the key without requiring GUARDIAN signature, ensure
127
- #! GUARDIAN_SELECTOR_SLOT = 0 (OFF) before calling this.
128
- pub proc update_guardian_public_key
129
- exec.disable_guardian
130
- # ------ Update the GUARDIAN public key ------
131
- adv_loadw
132
- # => [PUB_KEY]
133
-
134
- push.0.0.0.0
135
- # => [MAP_KEY, PUB_KEY]
136
- # Note that MAP_KEY is [0, 0, 0, 0] for a single GUARDIAN_KEY
137
-
138
- push.GUARDIAN_PUBLIC_KEY_MAP_SLOT[0..2]
139
- # => [pub_key_slot_prefix, pub_key_slot_suffix, MAP_KEY, PUB_KEY]
140
-
141
- exec.native_account::set_map_item
142
- # => [OLD_MAP_VALUE]
143
-
144
- dropw
145
- # => []
146
-
147
- push.0.0.0.0
148
- # => [MAP_KEY]
149
-
150
- push.FALCON_512_POSEIDON2_SCHEME_WORD
151
- # => [SCHEME_ID_WORD, MAP_KEY]
152
-
153
- swapw
154
- # => [MAP_KEY, SCHEME_ID_WORD]
155
-
156
- push.GUARDIAN_SCHEME_ID_MAP_SLOT[0..2]
157
- # => [scheme_id_slot_prefix, scheme_id_slot_suffix, MAP_KEY, SCHEME_ID_WORD]
158
-
159
- exec.native_account::set_map_item
160
- # => [OLD_MAP_VALUE]
161
-
162
- dropw
163
- # => []
164
- end
165
-
166
- #! Conditionally verify a "GUARDIAN" signature against a stored public key hash.
167
- #! The condition is controlled by the selector at GUARDIAN_SELECTOR_SLOT.
168
- #!
169
- #! Inputs: [MSG]
170
- #! Outputs: [MSG]
171
- #!
172
- #! Panics if:
173
- #! - Selector is ON but the provided GUARDIAN signature is invalid or missing.
174
- #!
175
- #! Notes:
176
- #! - MSG is TX_SUMMARY_COMMITMENT provided by auth procedure
177
- #! - If selector is OFF (0), GUARDIAN verification is skipped
178
- #! - Selector value is read from initial storage state
179
- pub proc verify_guardian_signature(msg: word)
180
- push.GUARDIAN_SELECTOR_SLOT[0..2]
181
- exec.active_account::get_item
182
- drop drop drop
183
- # => [selector, MSG]
184
-
185
- push.1 eq
186
- if.true
187
- push.1
188
- push.GUARDIAN_PUBLIC_KEY_MAP_SLOT[0..2]
189
- push.GUARDIAN_SCHEME_ID_MAP_SLOT[0..2]
190
- exec.::miden::standards::auth::signature::verify_signatures
191
- push.1 neq
192
- if.true
193
- emit.AUTH_UNAUTHORIZED_EVENT
194
- push.0 assert.err="invalid GUARDIAN signature"
195
- end
196
- end
197
- # => [MSG]
198
- exec.enable_guardian
199
- end
@@ -1,195 +0,0 @@
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::auth::AUTH_UNAUTHORIZED_EVENT
9
- use miden::protocol::native_account
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 an ECDSA secp256k1 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
- const GUARDIAN_SCHEME_ID_MAP_SLOT=word("openzeppelin::guardian::scheme_id")
60
-
61
- # Selector flag values
62
- const GUARDIAN_ON=[1, 0, 0, 0]
63
- const GUARDIAN_OFF=[0, 0, 0, 0]
64
- const ECDSA_K256_KECCAK_SCHEME_WORD=[1, 0, 0, 0]
65
-
66
- # GUARDIAN PROCEDURES
67
- # =================================================================================================
68
-
69
- #! Enable GUARDIAN verification by setting the selector to ON.
70
- #!
71
- #! Operand stack inputs: []
72
- #! Outputs: []
73
- #!
74
- #! Notes:
75
- #! - Sets GUARDIAN_SELECTOR_SLOT to GUARDIAN_ON (1)
76
- #! - After this, transactions will require GUARDIAN signature verification
77
- proc enable_guardian
78
- push.GUARDIAN_ON
79
- # => [GUARDIAN_ON]
80
-
81
- push.GUARDIAN_SELECTOR_SLOT[0..2]
82
- # => [selector_slot_prefix, selector_slot_suffix, GUARDIAN_ON]
83
-
84
- exec.native_account::set_item
85
- # => [OLD_ROOT]
86
-
87
- dropw
88
- # => []
89
- end
90
-
91
- #! Disable GUARDIAN verification by setting the selector to OFF.
92
- #!
93
- #! Operand stack inputs: []
94
- #! Outputs: []
95
- #!
96
- #! Notes:
97
- #! - Sets GUARDIAN_SELECTOR_SLOT to GUARDIAN_OFF (0)
98
- #! - After this, transactions will NOT require GUARDIAN signature verification
99
- proc disable_guardian
100
- push.GUARDIAN_OFF
101
- # => [GUARDIAN_OFF]
102
-
103
- push.GUARDIAN_SELECTOR_SLOT[0..2]
104
- # => [selector_slot_prefix, selector_slot_suffix, GUARDIAN_OFF]
105
-
106
- exec.native_account::set_item
107
- # => [OLD_ROOT]
108
-
109
- dropw
110
- # => []
111
- end
112
-
113
- #! Update the GUARDIAN public key.
114
- #!
115
- #! Operand stack inputs: []
116
- #! Advice stack inputs: [PUB_KEY]
117
- #! - PUB_KEY is the new GUARDIAN ECDSA secp256k1 public key
118
- #!
119
- #! Notes:
120
- #! - Stores PUB_KEY into GUARDIAN_PUBLIC_KEY_MAP_SLOT:
121
- #! [0, 0, 0, 0] => GUARDIAN_PUBLIC_KEY
122
- #! - To update the key without requiring GUARDIAN signature, ensure
123
- #! GUARDIAN_SELECTOR_SLOT = 0 (OFF) before calling this.
124
- pub proc update_guardian_public_key
125
- exec.disable_guardian
126
- # ------ Update the GUARDIAN public key ------
127
- adv_loadw
128
- # => [PUB_KEY]
129
-
130
- push.0.0.0.0
131
- # => [MAP_KEY, PUB_KEY]
132
- # Note that MAP_KEY is [0, 0, 0, 0] for a single GUARDIAN_KEY
133
-
134
- push.GUARDIAN_PUBLIC_KEY_MAP_SLOT[0..2]
135
- # => [pub_key_slot_prefix, pub_key_slot_suffix, MAP_KEY, PUB_KEY]
136
-
137
- exec.native_account::set_map_item
138
- # => [OLD_MAP_VALUE]
139
-
140
- dropw
141
- # => []
142
-
143
- push.0.0.0.0
144
- # => [MAP_KEY]
145
-
146
- push.ECDSA_K256_KECCAK_SCHEME_WORD
147
- # => [SCHEME_ID_WORD, MAP_KEY]
148
-
149
- swapw
150
- # => [MAP_KEY, SCHEME_ID_WORD]
151
-
152
- push.GUARDIAN_SCHEME_ID_MAP_SLOT[0..2]
153
- # => [scheme_id_slot_prefix, scheme_id_slot_suffix, MAP_KEY, SCHEME_ID_WORD]
154
-
155
- exec.native_account::set_map_item
156
- # => [OLD_MAP_VALUE]
157
-
158
- dropw
159
- # => []
160
- end
161
-
162
- #! Conditionally verify a "GUARDIAN" signature against a stored public key hash.
163
- #! The condition is controlled by the selector at GUARDIAN_SELECTOR_SLOT.
164
- #!
165
- #! Inputs: [MSG]
166
- #! Outputs: [MSG]
167
- #!
168
- #! Panics if:
169
- #! - Selector is ON but the provided GUARDIAN signature is invalid or missing.
170
- #!
171
- #! Notes:
172
- #! - MSG is TX_SUMMARY_COMMITMENT provided by auth procedure
173
- #! - If selector is OFF (0), GUARDIAN verification is skipped
174
- #! - Selector value is read from initial storage state
175
- pub proc verify_guardian_signature(msg: word)
176
- push.GUARDIAN_SELECTOR_SLOT[0..2]
177
- exec.active_account::get_item
178
- drop drop drop
179
- # => [selector, MSG]
180
-
181
- push.1 eq
182
- if.true
183
- push.1
184
- push.GUARDIAN_PUBLIC_KEY_MAP_SLOT[0..2]
185
- push.GUARDIAN_SCHEME_ID_MAP_SLOT[0..2]
186
- exec.::miden::standards::auth::signature::verify_signatures
187
- push.1 neq
188
- if.true
189
- emit.AUTH_UNAUTHORIZED_EVENT
190
- push.0 assert.err="invalid GUARDIAN signature"
191
- end
192
- end
193
- # => [MSG]
194
- exec.enable_guardian
195
- end