@openzeppelin/miden-multisig-client 0.13.4 → 0.14.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -13
- package/dist/account/builder.d.ts +3 -3
- package/dist/account/builder.d.ts.map +1 -1
- package/dist/account/builder.js +10 -10
- package/dist/account/builder.js.map +1 -1
- package/dist/account/builder.test.js +16 -14
- package/dist/account/builder.test.js.map +1 -1
- package/dist/account/masm/account-components/auth.d.ts +4 -4
- package/dist/account/masm/account-components/auth.d.ts.map +1 -1
- package/dist/account/masm/account-components/auth.js +8 -12
- package/dist/account/masm/account-components/auth.js.map +1 -1
- package/dist/account/masm/auth.d.ts +4 -4
- package/dist/account/masm/auth.d.ts.map +1 -1
- package/dist/account/masm/auth.js +226 -124
- package/dist/account/masm/auth.js.map +1 -1
- package/dist/account/storage.d.ts.map +1 -1
- package/dist/account/storage.js +24 -6
- package/dist/account/storage.js.map +1 -1
- package/dist/account/storage.test.d.ts +2 -0
- package/dist/account/storage.test.d.ts.map +1 -0
- package/dist/account/storage.test.js +73 -0
- package/dist/account/storage.test.js.map +1 -0
- package/dist/client.d.ts +9 -9
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +24 -14
- package/dist/client.js.map +1 -1
- package/dist/client.test.js +45 -8
- package/dist/client.test.js.map +1 -1
- package/dist/index.d.ts +6 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -12
- package/dist/index.js.map +1 -1
- package/dist/multisig/proposal/execution.d.ts +3 -2
- package/dist/multisig/proposal/execution.d.ts.map +1 -1
- package/dist/multisig/proposal/execution.js +8 -12
- package/dist/multisig/proposal/execution.js.map +1 -1
- package/dist/multisig.d.ts +7 -4
- package/dist/multisig.d.ts.map +1 -1
- package/dist/multisig.js +53 -35
- package/dist/multisig.js.map +1 -1
- package/dist/multisig.test.js +17 -29
- package/dist/multisig.test.js.map +1 -1
- package/dist/procedures.d.ts +8 -8
- package/dist/procedures.js +8 -8
- package/dist/raw-client.d.ts +13 -0
- package/dist/raw-client.d.ts.map +1 -0
- package/dist/raw-client.js +42 -0
- package/dist/raw-client.js.map +1 -0
- package/dist/raw-client.test.d.ts +2 -0
- package/dist/raw-client.test.d.ts.map +1 -0
- package/dist/raw-client.test.js +89 -0
- package/dist/raw-client.test.js.map +1 -0
- package/dist/signers/ecdsa.d.ts +3 -1
- package/dist/signers/ecdsa.d.ts.map +1 -1
- package/dist/signers/ecdsa.js +15 -1
- package/dist/signers/ecdsa.js.map +1 -1
- package/dist/signers/ecdsa.test.js +27 -4
- package/dist/signers/ecdsa.test.js.map +1 -1
- package/dist/signers/falcon.d.ts +3 -1
- package/dist/signers/falcon.d.ts.map +1 -1
- package/dist/signers/falcon.js +15 -1
- package/dist/signers/falcon.js.map +1 -1
- package/dist/signers/falcon.test.js +39 -3
- package/dist/signers/falcon.test.js.map +1 -1
- package/dist/transaction/consumeNotes.d.ts +2 -2
- package/dist/transaction/consumeNotes.d.ts.map +1 -1
- package/dist/transaction/consumeNotes.js +5 -4
- package/dist/transaction/consumeNotes.js.map +1 -1
- package/dist/transaction/options.d.ts +1 -0
- package/dist/transaction/options.d.ts.map +1 -1
- package/dist/transaction/p2id.d.ts.map +1 -1
- package/dist/transaction/p2id.js +7 -10
- package/dist/transaction/p2id.js.map +1 -1
- package/dist/transaction/p2id.test.js +19 -9
- package/dist/transaction/p2id.test.js.map +1 -1
- package/dist/transaction/summary.d.ts +2 -2
- package/dist/transaction/summary.d.ts.map +1 -1
- package/dist/transaction/summary.js +4 -2
- package/dist/transaction/summary.js.map +1 -1
- package/dist/transaction/updateGuardian.d.ts +2 -2
- package/dist/transaction/updateGuardian.d.ts.map +1 -1
- package/dist/transaction/updateGuardian.js +8 -11
- package/dist/transaction/updateGuardian.js.map +1 -1
- package/dist/transaction/updateProcedureThreshold.d.ts +2 -2
- package/dist/transaction/updateProcedureThreshold.d.ts.map +1 -1
- package/dist/transaction/updateProcedureThreshold.js +8 -10
- package/dist/transaction/updateProcedureThreshold.js.map +1 -1
- package/dist/transaction/updateSigners.d.ts +2 -2
- package/dist/transaction/updateSigners.d.ts.map +1 -1
- package/dist/transaction/updateSigners.js +8 -10
- package/dist/transaction/updateSigners.js.map +1 -1
- package/dist/transaction.test.js +6 -6
- package/dist/transaction.test.js.map +1 -1
- package/dist/utils/key.d.ts.map +1 -1
- package/dist/utils/key.js +3 -3
- package/dist/utils/key.js.map +1 -1
- package/dist/utils/key.test.js +4 -2
- package/dist/utils/key.test.js.map +1 -1
- package/dist/utils/signature.d.ts +2 -0
- package/dist/utils/signature.d.ts.map +1 -1
- package/dist/utils/signature.js +10 -5
- package/dist/utils/signature.js.map +1 -1
- package/dist/utils/signature.test.js +9 -9
- package/dist/utils/signature.test.js.map +1 -1
- package/masm/account_components/auth/multisig.masm +2 -3
- package/masm/account_components/auth/multisig_ecdsa.masm +2 -3
- package/masm/account_components/auth/multisig_guardian.masm +2 -3
- package/masm/account_components/auth/multisig_guardian_ecdsa.masm +2 -3
- package/masm/auth/guardian.masm +30 -8
- package/masm/auth/guardian_ecdsa.masm +24 -7
- package/masm/auth/multisig.masm +86 -55
- package/masm/auth/multisig_ecdsa.masm +86 -54
- package/package.json +3 -3
- package/src/account/builder.test.ts +16 -14
- package/src/account/builder.ts +13 -12
- package/src/account/masm/account-components/auth.ts +8 -12
- package/src/account/masm/auth.ts +226 -124
- package/src/account/storage.test.ts +90 -0
- package/src/account/storage.ts +27 -6
- package/src/client.test.ts +52 -8
- package/src/client.ts +39 -16
- package/src/index.ts +6 -12
- package/src/multisig/proposal/execution.ts +18 -14
- package/src/multisig.test.ts +17 -29
- package/src/multisig.ts +61 -36
- package/src/procedures.ts +8 -8
- package/src/raw-client.test.ts +133 -0
- package/src/raw-client.ts +75 -0
- package/src/signers/ecdsa.test.ts +35 -4
- package/src/signers/ecdsa.ts +18 -2
- package/src/signers/falcon.test.ts +50 -3
- package/src/signers/falcon.ts +18 -2
- package/src/transaction/consumeNotes.ts +16 -5
- package/src/transaction/options.ts +1 -0
- package/src/transaction/p2id.test.ts +19 -9
- package/src/transaction/p2id.ts +8 -13
- package/src/transaction/summary.ts +11 -4
- package/src/transaction/updateGuardian.ts +22 -14
- package/src/transaction/updateProcedureThreshold.ts +20 -15
- package/src/transaction/updateSigners.ts +22 -14
- package/src/transaction.test.ts +6 -6
- package/src/utils/key.test.ts +4 -2
- package/src/utils/key.ts +7 -3
- package/src/utils/signature.test.ts +10 -10
- package/src/utils/signature.ts +12 -5
|
@@ -7,7 +7,7 @@ vi.mock('@miden-sdk/miden-sdk', () => ({
|
|
|
7
7
|
})),
|
|
8
8
|
Felt: vi.fn().mockImplementation((v) => ({ value: v })),
|
|
9
9
|
FeltArray: vi.fn().mockImplementation((arr) => arr),
|
|
10
|
-
|
|
10
|
+
Poseidon2: {
|
|
11
11
|
hashElements: vi.fn().mockReturnValue({
|
|
12
12
|
toHex: () => '0x' + 'h'.repeat(64),
|
|
13
13
|
}),
|
|
@@ -39,13 +39,13 @@ describe('signature utilities', () => {
|
|
|
39
39
|
vi.clearAllMocks();
|
|
40
40
|
});
|
|
41
41
|
describe('signatureHexToBytes', () => {
|
|
42
|
-
it('prepends auth scheme byte (
|
|
42
|
+
it('prepends auth scheme byte (2 = Falcon Poseidon2)', () => {
|
|
43
43
|
const result = signatureHexToBytes('deadbeef');
|
|
44
|
-
expect(result[0]).toBe(
|
|
44
|
+
expect(result[0]).toBe(2);
|
|
45
45
|
});
|
|
46
46
|
it('prepends auth scheme byte (1 = ECDSA)', () => {
|
|
47
47
|
const result = signatureHexToBytes('deadbeef', 'ecdsa');
|
|
48
|
-
expect(result[0]).toBe(1);
|
|
48
|
+
expect(result[0]).toBe(1);
|
|
49
49
|
});
|
|
50
50
|
it('converts hex to bytes after prefix', () => {
|
|
51
51
|
const result = signatureHexToBytes('deadbeef');
|
|
@@ -53,7 +53,7 @@ describe('signature utilities', () => {
|
|
|
53
53
|
});
|
|
54
54
|
it('handles 0x prefix', () => {
|
|
55
55
|
const result = signatureHexToBytes('0xaabbccdd');
|
|
56
|
-
expect(result[0]).toBe(
|
|
56
|
+
expect(result[0]).toBe(2);
|
|
57
57
|
expect(result.slice(1)).toEqual(new Uint8Array([0xaa, 0xbb, 0xcc, 0xdd]));
|
|
58
58
|
});
|
|
59
59
|
it('returns correct length (input bytes + 1)', () => {
|
|
@@ -63,11 +63,11 @@ describe('signature utilities', () => {
|
|
|
63
63
|
});
|
|
64
64
|
it('handles empty signature', () => {
|
|
65
65
|
const result = signatureHexToBytes('');
|
|
66
|
-
expect(result).toEqual(new Uint8Array([
|
|
66
|
+
expect(result).toEqual(new Uint8Array([2]));
|
|
67
67
|
});
|
|
68
68
|
it('handles empty with 0x prefix', () => {
|
|
69
69
|
const result = signatureHexToBytes('0x');
|
|
70
|
-
expect(result).toEqual(new Uint8Array([
|
|
70
|
+
expect(result).toEqual(new Uint8Array([2]));
|
|
71
71
|
});
|
|
72
72
|
});
|
|
73
73
|
describe('buildSignatureAdviceEntry', () => {
|
|
@@ -81,12 +81,12 @@ describe('signature utilities', () => {
|
|
|
81
81
|
expect(values).toBeDefined();
|
|
82
82
|
});
|
|
83
83
|
it('hashes pubkey commitment and message to produce key', async () => {
|
|
84
|
-
const { Word, Signature,
|
|
84
|
+
const { Word, Signature, Poseidon2 } = await import('@miden-sdk/miden-sdk');
|
|
85
85
|
const pubkeyCommitment = Word.fromHex('0x' + 'a'.repeat(64));
|
|
86
86
|
const message = Word.fromHex('0x' + 'b'.repeat(64));
|
|
87
87
|
const signature = Signature.deserialize(new Uint8Array([0, 1, 2, 3]));
|
|
88
88
|
buildSignatureAdviceEntry(pubkeyCommitment, message, signature);
|
|
89
|
-
expect(
|
|
89
|
+
expect(Poseidon2.hashElements).toHaveBeenCalled();
|
|
90
90
|
});
|
|
91
91
|
it('uses toPreparedSignature to get values', async () => {
|
|
92
92
|
const { Word, Signature } = await import('@miden-sdk/miden-sdk');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signature.test.js","sourceRoot":"","sources":["../../src/utils/signature.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,MAAM,EACN,4BAA4B,GAC7B,MAAM,gBAAgB,CAAC;AAExB,qBAAqB;AACrB,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC;IACrC,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC;QAC3C,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE;KAChB,CAAC,CAAC;IACH,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/D,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,GAAU,EAAE,EAAE,CAAC,GAAG,CAAC;IAC1D,
|
|
1
|
+
{"version":3,"file":"signature.test.js","sourceRoot":"","sources":["../../src/utils/signature.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,12 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
use openzeppelin::auth::multisig
|
|
4
4
|
|
|
5
|
-
type BeWord = struct @bigendian { a: felt, b: felt, c: felt, d: felt }
|
|
6
|
-
|
|
7
5
|
pub use multisig::update_signers_and_threshold
|
|
8
6
|
pub use multisig::update_procedure_threshold
|
|
9
7
|
|
|
10
|
-
|
|
8
|
+
@auth_script
|
|
9
|
+
pub proc auth_tx_multisig(salt: word)
|
|
11
10
|
exec.multisig::auth_tx
|
|
12
11
|
exec.multisig::assert_new_tx
|
|
13
12
|
end
|
|
@@ -2,12 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
use openzeppelin::auth::multisig_ecdsa
|
|
4
4
|
|
|
5
|
-
type BeWord = struct @bigendian { a: felt, b: felt, c: felt, d: felt }
|
|
6
|
-
|
|
7
5
|
pub use multisig_ecdsa::update_signers_and_threshold
|
|
8
6
|
pub use multisig_ecdsa::update_procedure_threshold
|
|
9
7
|
|
|
10
|
-
|
|
8
|
+
@auth_script
|
|
9
|
+
pub proc auth_tx_multisig_ecdsa(salt: word)
|
|
11
10
|
exec.multisig_ecdsa::auth_tx
|
|
12
11
|
exec.multisig_ecdsa::assert_new_tx
|
|
13
12
|
end
|
|
@@ -3,14 +3,13 @@
|
|
|
3
3
|
use openzeppelin::auth::multisig
|
|
4
4
|
use openzeppelin::auth::guardian
|
|
5
5
|
|
|
6
|
-
type BeWord = struct @bigendian { a: felt, b: felt, c: felt, d: felt }
|
|
7
|
-
|
|
8
6
|
pub use multisig::update_signers_and_threshold
|
|
9
7
|
pub use multisig::update_procedure_threshold
|
|
10
8
|
pub use guardian::update_guardian_public_key
|
|
11
9
|
pub use guardian::verify_guardian_signature
|
|
12
10
|
|
|
13
|
-
|
|
11
|
+
@auth_script
|
|
12
|
+
pub proc auth_tx_multisig_guardian(salt: word)
|
|
14
13
|
exec.multisig::auth_tx
|
|
15
14
|
exec.guardian::verify_guardian_signature
|
|
16
15
|
exec.multisig::assert_new_tx
|
|
@@ -3,14 +3,13 @@
|
|
|
3
3
|
use openzeppelin::auth::multisig_ecdsa
|
|
4
4
|
use openzeppelin::auth::guardian_ecdsa
|
|
5
5
|
|
|
6
|
-
type BeWord = struct @bigendian { a: felt, b: felt, c: felt, d: felt }
|
|
7
|
-
|
|
8
6
|
pub use multisig_ecdsa::update_signers_and_threshold
|
|
9
7
|
pub use multisig_ecdsa::update_procedure_threshold
|
|
10
8
|
pub use guardian_ecdsa::update_guardian_public_key
|
|
11
9
|
pub use guardian_ecdsa::verify_guardian_signature
|
|
12
10
|
|
|
13
|
-
|
|
11
|
+
@auth_script
|
|
12
|
+
pub proc auth_tx_multisig_guardian_ecdsa(salt: word)
|
|
14
13
|
exec.multisig_ecdsa::auth_tx
|
|
15
14
|
exec.guardian_ecdsa::verify_guardian_signature
|
|
16
15
|
exec.multisig_ecdsa::assert_new_tx
|
package/masm/auth/guardian.masm
CHANGED
|
@@ -4,10 +4,9 @@
|
|
|
4
4
|
# It can be used standalone or in conjunction with other auth components like multisig.
|
|
5
5
|
|
|
6
6
|
use miden::protocol::active_account
|
|
7
|
+
use miden::protocol::auth::AUTH_UNAUTHORIZED_EVENT
|
|
7
8
|
use miden::protocol::native_account
|
|
8
9
|
|
|
9
|
-
type BeWord = struct @bigendian { a: felt, b: felt, c: felt, d: felt }
|
|
10
|
-
|
|
11
10
|
# IMPORTANT SECURITY NOTES
|
|
12
11
|
# --------------------------------------------------------------------------------
|
|
13
12
|
# - The selector in `GUARDIAN_SELECTOR_SLOT` controls whether the extra GUARDIAN signature
|
|
@@ -33,6 +32,7 @@ type BeWord = struct @bigendian { a: felt, b: felt, c: felt, d: felt }
|
|
|
33
32
|
# +---------------------+---------------+
|
|
34
33
|
# | GUARDIAN SELECTOR (word) | 0 |
|
|
35
34
|
# | GUARDIAN PUBLIC KEY MAP | 1 |
|
|
35
|
+
# | GUARDIAN SCHEME ID MAP | 2 |
|
|
36
36
|
# +---------------------+---------------+
|
|
37
37
|
#
|
|
38
38
|
# - GUARDIAN_SELECTOR_SLOT (0):
|
|
@@ -42,7 +42,7 @@ type BeWord = struct @bigendian { a: felt, b: felt, c: felt, d: felt }
|
|
|
42
42
|
# - GUARDIAN_PUBLIC_KEY_MAP_SLOT (1):
|
|
43
43
|
# * A map from a fixed key [0, 0, 0, 0] to the single GUARDIAN public key:
|
|
44
44
|
# [0, 0, 0, 0] => GUARDIAN_PUBLIC_KEY
|
|
45
|
-
# * GUARDIAN_PUBLIC_KEY is a
|
|
45
|
+
# * GUARDIAN_PUBLIC_KEY is a Falcon Poseidon2 public key represented as a word.
|
|
46
46
|
|
|
47
47
|
# CONSTANTS
|
|
48
48
|
# =================================================================================================
|
|
@@ -57,12 +57,15 @@ const GUARDIAN_SELECTOR_SLOT=word("openzeppelin::guardian::selector")
|
|
|
57
57
|
# [0, 0, 0, 0] => GUARDIAN_PUBLIC_KEY
|
|
58
58
|
const GUARDIAN_PUBLIC_KEY_MAP_SLOT=word("openzeppelin::guardian::public_key")
|
|
59
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
|
+
|
|
60
65
|
# Selector flag values
|
|
61
66
|
const GUARDIAN_ON=[1, 0, 0, 0]
|
|
62
67
|
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")
|
|
68
|
+
const FALCON_512_POSEIDON2_SCHEME_WORD=[2, 0, 0, 0]
|
|
66
69
|
|
|
67
70
|
# GUARDIAN PROCEDURES
|
|
68
71
|
# =================================================================================================
|
|
@@ -140,6 +143,24 @@ pub proc update_guardian_public_key
|
|
|
140
143
|
|
|
141
144
|
dropw
|
|
142
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
|
+
# => []
|
|
143
164
|
end
|
|
144
165
|
|
|
145
166
|
#! Conditionally verify a "GUARDIAN" signature against a stored public key hash.
|
|
@@ -155,7 +176,7 @@ end
|
|
|
155
176
|
#! - MSG is TX_SUMMARY_COMMITMENT provided by auth procedure
|
|
156
177
|
#! - If selector is OFF (0), GUARDIAN verification is skipped
|
|
157
178
|
#! - Selector value is read from initial storage state
|
|
158
|
-
pub proc verify_guardian_signature(msg:
|
|
179
|
+
pub proc verify_guardian_signature(msg: word)
|
|
159
180
|
push.GUARDIAN_SELECTOR_SLOT[0..2]
|
|
160
181
|
exec.active_account::get_item
|
|
161
182
|
drop drop drop
|
|
@@ -165,7 +186,8 @@ pub proc verify_guardian_signature(msg: BeWord) -> BeWord
|
|
|
165
186
|
if.true
|
|
166
187
|
push.1
|
|
167
188
|
push.GUARDIAN_PUBLIC_KEY_MAP_SLOT[0..2]
|
|
168
|
-
|
|
189
|
+
push.GUARDIAN_SCHEME_ID_MAP_SLOT[0..2]
|
|
190
|
+
exec.::miden::standards::auth::signature::verify_signatures
|
|
169
191
|
push.1 neq
|
|
170
192
|
if.true
|
|
171
193
|
emit.AUTH_UNAUTHORIZED_EVENT
|
|
@@ -5,10 +5,9 @@
|
|
|
5
5
|
# It can be used standalone or in conjunction with other auth components like multisig.
|
|
6
6
|
|
|
7
7
|
use miden::protocol::active_account
|
|
8
|
+
use miden::protocol::auth::AUTH_UNAUTHORIZED_EVENT
|
|
8
9
|
use miden::protocol::native_account
|
|
9
10
|
|
|
10
|
-
type BeWord = struct @bigendian { a: felt, b: felt, c: felt, d: felt }
|
|
11
|
-
|
|
12
11
|
# IMPORTANT SECURITY NOTES
|
|
13
12
|
# --------------------------------------------------------------------------------
|
|
14
13
|
# - The selector in `GUARDIAN_SELECTOR_SLOT` controls whether the extra GUARDIAN signature
|
|
@@ -57,13 +56,12 @@ const GUARDIAN_SELECTOR_SLOT=word("openzeppelin::guardian::selector")
|
|
|
57
56
|
# Uses exactly one GUARDIAN public key at index [0, 0, 0, 0]
|
|
58
57
|
# [0, 0, 0, 0] => GUARDIAN_PUBLIC_KEY
|
|
59
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
60
|
|
|
61
61
|
# Selector flag values
|
|
62
62
|
const GUARDIAN_ON=[1, 0, 0, 0]
|
|
63
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")
|
|
64
|
+
const ECDSA_K256_KECCAK_SCHEME_WORD=[1, 0, 0, 0]
|
|
67
65
|
|
|
68
66
|
# GUARDIAN PROCEDURES
|
|
69
67
|
# =================================================================================================
|
|
@@ -141,6 +139,24 @@ pub proc update_guardian_public_key
|
|
|
141
139
|
|
|
142
140
|
dropw
|
|
143
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
|
+
# => []
|
|
144
160
|
end
|
|
145
161
|
|
|
146
162
|
#! Conditionally verify a "GUARDIAN" signature against a stored public key hash.
|
|
@@ -156,7 +172,7 @@ end
|
|
|
156
172
|
#! - MSG is TX_SUMMARY_COMMITMENT provided by auth procedure
|
|
157
173
|
#! - If selector is OFF (0), GUARDIAN verification is skipped
|
|
158
174
|
#! - Selector value is read from initial storage state
|
|
159
|
-
pub proc verify_guardian_signature(msg:
|
|
175
|
+
pub proc verify_guardian_signature(msg: word)
|
|
160
176
|
push.GUARDIAN_SELECTOR_SLOT[0..2]
|
|
161
177
|
exec.active_account::get_item
|
|
162
178
|
drop drop drop
|
|
@@ -166,7 +182,8 @@ pub proc verify_guardian_signature(msg: BeWord) -> BeWord
|
|
|
166
182
|
if.true
|
|
167
183
|
push.1
|
|
168
184
|
push.GUARDIAN_PUBLIC_KEY_MAP_SLOT[0..2]
|
|
169
|
-
|
|
185
|
+
push.GUARDIAN_SCHEME_ID_MAP_SLOT[0..2]
|
|
186
|
+
exec.::miden::standards::auth::signature::verify_signatures
|
|
170
187
|
push.1 neq
|
|
171
188
|
if.true
|
|
172
189
|
emit.AUTH_UNAUTHORIZED_EVENT
|
package/masm/auth/multisig.masm
CHANGED
|
@@ -3,27 +3,23 @@
|
|
|
3
3
|
# This library provides the reusable multisig procedures used by account wrappers.
|
|
4
4
|
|
|
5
5
|
use miden::protocol::active_account
|
|
6
|
+
use miden::protocol::auth::AUTH_UNAUTHORIZED_EVENT
|
|
6
7
|
use miden::protocol::native_account
|
|
7
8
|
use miden::standards::auth
|
|
8
9
|
|
|
9
|
-
type BeWord = struct @bigendian { a: felt, b: felt, c: felt, d: felt }
|
|
10
|
-
|
|
11
10
|
# CONSTANTS
|
|
12
11
|
# =================================================================================================
|
|
13
12
|
|
|
14
13
|
# Auth Request Constants
|
|
15
14
|
|
|
16
|
-
# The event emitted when a signature is not found for a required signer.
|
|
17
|
-
const AUTH_UNAUTHORIZED_EVENT=event("miden::auth::unauthorized")
|
|
18
|
-
|
|
19
15
|
# Storage Layout Constants
|
|
20
16
|
#
|
|
21
|
-
#
|
|
22
|
-
# | THRESHOLD & APPROVERS CONFIG | PUB KEYS | EXECUTED TXS | PROC THRESHOLDS |
|
|
23
|
-
# | (slot) | (map) | (map) | (map) |
|
|
24
|
-
#
|
|
25
|
-
# | 0 | 1 | 2 |
|
|
26
|
-
#
|
|
17
|
+
# +-------------------------------+----------+------------+--------------+-------------------+
|
|
18
|
+
# | THRESHOLD & APPROVERS CONFIG | PUB KEYS | SCHEME IDS | EXECUTED TXS | PROC THRESHOLDS |
|
|
19
|
+
# | (slot) | (map) | (map) | (map) | (map) |
|
|
20
|
+
# +-------------------------------+----------+------------+--------------+-------------------+
|
|
21
|
+
# | 0 | 1 | 2 | 3 | 4 |
|
|
22
|
+
# +-------------------------------+----------+------------+--------------+-------------------+
|
|
27
23
|
|
|
28
24
|
# The slot in this component's storage layout where the default signature threshold and
|
|
29
25
|
# number of approvers are stored as:
|
|
@@ -35,6 +31,10 @@ const THRESHOLD_CONFIG_SLOT=word("openzeppelin::multisig::threshold_config")
|
|
|
35
31
|
# Map entries: [key_index, 0, 0, 0] => APPROVER_PUBLIC_KEY
|
|
36
32
|
const PUBLIC_KEYS_MAP_SLOT=word("openzeppelin::multisig::signer_public_keys")
|
|
37
33
|
|
|
34
|
+
# The slot in this component's storage layout where signer scheme IDs are stored.
|
|
35
|
+
# Map entries: [key_index, 0, 0, 0] => [scheme_id, 0, 0, 0]
|
|
36
|
+
const APPROVER_SCHEME_ID_SLOT=word("openzeppelin::multisig::signer_scheme_ids")
|
|
37
|
+
|
|
38
38
|
# The slot in this component's storage layout where executed transactions are stored.
|
|
39
39
|
# Map entries: transaction_message => [is_executed, 0, 0, 0]
|
|
40
40
|
const EXECUTED_TXS_SLOT=word("openzeppelin::multisig::executed_transactions")
|
|
@@ -45,6 +45,7 @@ const PROC_THRESHOLD_ROOTS_SLOT=word("openzeppelin::multisig::procedure_threshol
|
|
|
45
45
|
|
|
46
46
|
# Executed Transaction Flag Constant
|
|
47
47
|
const IS_EXECUTED_FLAG=[1, 0, 0, 0]
|
|
48
|
+
const FALCON_512_POSEIDON2_SCHEME_WORD=[2, 0, 0, 0]
|
|
48
49
|
|
|
49
50
|
# ERRORS
|
|
50
51
|
const ERR_TX_ALREADY_EXECUTED="failed to approve multisig transaction as it was already executed"
|
|
@@ -69,7 +70,7 @@ const ERR_PROC_THRESHOLD_EXCEEDS_NUM_APPROVERS="procedure threshold exceeds numb
|
|
|
69
70
|
#!
|
|
70
71
|
#! Panics if:
|
|
71
72
|
#! - the same transaction has already been executed
|
|
72
|
-
pub proc assert_new_tx(msg:
|
|
73
|
+
pub proc assert_new_tx(msg: word)
|
|
73
74
|
push.IS_EXECUTED_FLAG
|
|
74
75
|
# => [[0, 0, 0, is_executed], MSG]
|
|
75
76
|
|
|
@@ -113,17 +114,29 @@ proc cleanup_pubkey_mapping(init_num_of_approvers: u32, new_num_of_approvers: u3
|
|
|
113
114
|
sub.1
|
|
114
115
|
# => [i-1, new_num_of_approvers]
|
|
115
116
|
|
|
116
|
-
dup
|
|
117
|
-
# => [
|
|
118
|
-
|
|
119
|
-
push.0.0.0
|
|
120
|
-
# => [[0, 0, 0, i-1], i-1, new_num_of_approvers]
|
|
117
|
+
dup exec.create_approver_map_key
|
|
118
|
+
# => [APPROVER_MAP_KEY, i-1, new_num_of_approvers]
|
|
121
119
|
|
|
122
120
|
padw swapw
|
|
123
|
-
# => [
|
|
121
|
+
# => [APPROVER_MAP_KEY, EMPTY_WORD, i-1, new_num_of_approvers]
|
|
124
122
|
|
|
125
123
|
push.PUBLIC_KEYS_MAP_SLOT[0..2]
|
|
126
|
-
# => [pub_key_slot_prefix, pub_key_slot_suffix,
|
|
124
|
+
# => [pub_key_slot_prefix, pub_key_slot_suffix, APPROVER_MAP_KEY, EMPTY_WORD, i-1, new_num_of_approvers]
|
|
125
|
+
|
|
126
|
+
exec.native_account::set_map_item
|
|
127
|
+
# => [OLD_MAP_VALUE, i-1, new_num_of_approvers]
|
|
128
|
+
|
|
129
|
+
dropw
|
|
130
|
+
# => [i-1, new_num_of_approvers]
|
|
131
|
+
|
|
132
|
+
dup exec.create_approver_map_key
|
|
133
|
+
# => [APPROVER_MAP_KEY, i-1, new_num_of_approvers]
|
|
134
|
+
|
|
135
|
+
padw swapw
|
|
136
|
+
# => [APPROVER_MAP_KEY, EMPTY_WORD, i-1, new_num_of_approvers]
|
|
137
|
+
|
|
138
|
+
push.APPROVER_SCHEME_ID_SLOT[0..2]
|
|
139
|
+
# => [scheme_slot_prefix, scheme_slot_suffix, APPROVER_MAP_KEY, EMPTY_WORD, i-1, new_num_of_approvers]
|
|
127
140
|
|
|
128
141
|
exec.native_account::set_map_item
|
|
129
142
|
# => [OLD_MAP_VALUE, i-1, new_num_of_approvers]
|
|
@@ -140,15 +153,17 @@ proc cleanup_pubkey_mapping(init_num_of_approvers: u32, new_num_of_approvers: u3
|
|
|
140
153
|
# => []
|
|
141
154
|
end
|
|
142
155
|
|
|
156
|
+
proc create_approver_map_key
|
|
157
|
+
push.0.0.0 movup.3
|
|
158
|
+
# => [APPROVER_MAP_KEY]
|
|
159
|
+
end
|
|
160
|
+
|
|
143
161
|
proc get_threshold_and_num_approvers
|
|
144
162
|
push.THRESHOLD_CONFIG_SLOT[0..2]
|
|
145
163
|
exec.active_account::get_initial_item
|
|
146
|
-
# => [
|
|
147
|
-
|
|
148
|
-
drop drop
|
|
149
|
-
# => [num_approvers, threshold]
|
|
164
|
+
# => [threshold, num_approvers]
|
|
150
165
|
|
|
151
|
-
|
|
166
|
+
movup.2 drop movup.2 drop
|
|
152
167
|
# => [threshold, num_approvers]
|
|
153
168
|
end
|
|
154
169
|
|
|
@@ -168,10 +183,10 @@ proc assert_proc_thresholds_lte_num_approvers(num_approvers: u32)
|
|
|
168
183
|
push.PROC_THRESHOLD_ROOTS_SLOT[0..2]
|
|
169
184
|
# => [proc_roots_slot_prefix, proc_roots_slot_suffix, PROC_ROOT, proc_index, num_approvers]
|
|
170
185
|
|
|
171
|
-
exec.active_account::
|
|
172
|
-
# => [[
|
|
186
|
+
exec.active_account::get_map_item
|
|
187
|
+
# => [[proc_threshold, 0, 0, 0], proc_index, num_approvers]
|
|
173
188
|
|
|
174
|
-
drop drop drop
|
|
189
|
+
movdn.3 drop drop drop
|
|
175
190
|
# => [proc_threshold, proc_index, num_approvers]
|
|
176
191
|
|
|
177
192
|
dup.2
|
|
@@ -191,7 +206,7 @@ end
|
|
|
191
206
|
|
|
192
207
|
# Internal storage helper used by the public `update_procedure_threshold`
|
|
193
208
|
# entrypoint after it receives direct stack arguments.
|
|
194
|
-
proc set_procedure_threshold(proc_threshold: u32, proc_root:
|
|
209
|
+
proc set_procedure_threshold(proc_threshold: u32, proc_root: word)
|
|
195
210
|
exec.get_threshold_and_num_approvers
|
|
196
211
|
# => [threshold, num_approvers, proc_threshold, PROC_ROOT]
|
|
197
212
|
|
|
@@ -206,6 +221,7 @@ proc set_procedure_threshold(proc_threshold: u32, proc_root: BeWord)
|
|
|
206
221
|
# => [proc_threshold, PROC_ROOT]
|
|
207
222
|
|
|
208
223
|
push.0.0.0
|
|
224
|
+
movup.3
|
|
209
225
|
swapw
|
|
210
226
|
# => [PROC_ROOT, PROC_THRESHOLD_WORD]
|
|
211
227
|
|
|
@@ -238,7 +254,7 @@ end
|
|
|
238
254
|
#! 0: new_num_of_approvers
|
|
239
255
|
#! 1: init_num_of_approvers
|
|
240
256
|
@locals(2)
|
|
241
|
-
pub proc update_signers_and_threshold(multisig_config_hash:
|
|
257
|
+
pub proc update_signers_and_threshold(multisig_config_hash: word)
|
|
242
258
|
adv.push_mapval
|
|
243
259
|
# => [MULTISIG_CONFIG_HASH, pad(12)]
|
|
244
260
|
|
|
@@ -246,10 +262,10 @@ pub proc update_signers_and_threshold(multisig_config_hash: BeWord)
|
|
|
246
262
|
# => [MULTISIG_CONFIG, pad(12)]
|
|
247
263
|
|
|
248
264
|
# store new_num_of_approvers for later
|
|
249
|
-
dup.
|
|
265
|
+
dup.1 loc_store.0
|
|
250
266
|
# => [MULTISIG_CONFIG, pad(12)]
|
|
251
267
|
|
|
252
|
-
dup
|
|
268
|
+
dup dup.2
|
|
253
269
|
# => [num_approvers, threshold, MULTISIG_CONFIG, pad(12)]
|
|
254
270
|
|
|
255
271
|
# make sure that the threshold is smaller than the number of approvers
|
|
@@ -257,7 +273,7 @@ pub proc update_signers_and_threshold(multisig_config_hash: BeWord)
|
|
|
257
273
|
u32gt assertz.err=ERR_MALFORMED_MULTISIG_CONFIG
|
|
258
274
|
# => [MULTISIG_CONFIG, pad(12)]
|
|
259
275
|
|
|
260
|
-
dup
|
|
276
|
+
dup dup.2
|
|
261
277
|
# => [num_approvers, threshold, MULTISIG_CONFIG, pad(12)]
|
|
262
278
|
|
|
263
279
|
# make sure that threshold or num_approvers are not zero
|
|
@@ -278,7 +294,7 @@ pub proc update_signers_and_threshold(multisig_config_hash: BeWord)
|
|
|
278
294
|
# => [OLD_THRESHOLD_CONFIG, pad(12)]
|
|
279
295
|
|
|
280
296
|
# store init_num_of_approvers for later
|
|
281
|
-
drop
|
|
297
|
+
drop loc_store.1 drop drop
|
|
282
298
|
# => [pad(12)]
|
|
283
299
|
|
|
284
300
|
loc_load.0
|
|
@@ -289,17 +305,35 @@ pub proc update_signers_and_threshold(multisig_config_hash: BeWord)
|
|
|
289
305
|
sub.1
|
|
290
306
|
# => [i-1, pad(12)]
|
|
291
307
|
|
|
292
|
-
dup
|
|
293
|
-
# => [
|
|
308
|
+
dup exec.create_approver_map_key
|
|
309
|
+
# => [APPROVER_MAP_KEY, i-1, pad(12)]
|
|
294
310
|
|
|
295
311
|
padw adv_loadw
|
|
296
|
-
# => [PUB_KEY,
|
|
312
|
+
# => [PUB_KEY, APPROVER_MAP_KEY, i-1, pad(12)]
|
|
297
313
|
|
|
298
314
|
swapw
|
|
299
|
-
# => [
|
|
315
|
+
# => [APPROVER_MAP_KEY, PUB_KEY, i-1, pad(12)]
|
|
300
316
|
|
|
301
317
|
push.PUBLIC_KEYS_MAP_SLOT[0..2]
|
|
302
|
-
# => [pub_key_slot_prefix, pub_key_slot_suffix,
|
|
318
|
+
# => [pub_key_slot_prefix, pub_key_slot_suffix, APPROVER_MAP_KEY, PUB_KEY, i-1, pad(12)]
|
|
319
|
+
|
|
320
|
+
exec.native_account::set_map_item
|
|
321
|
+
# => [OLD_VALUE, i-1, pad(12)]
|
|
322
|
+
|
|
323
|
+
dropw
|
|
324
|
+
# => [i-1, pad(12)]
|
|
325
|
+
|
|
326
|
+
dup exec.create_approver_map_key
|
|
327
|
+
# => [APPROVER_MAP_KEY, i-1, pad(12)]
|
|
328
|
+
|
|
329
|
+
push.FALCON_512_POSEIDON2_SCHEME_WORD
|
|
330
|
+
# => [SCHEME_ID_WORD, APPROVER_MAP_KEY, i-1, pad(12)]
|
|
331
|
+
|
|
332
|
+
swapw
|
|
333
|
+
# => [APPROVER_MAP_KEY, [2, 0, 0, 0], i-1, pad(12)]
|
|
334
|
+
|
|
335
|
+
push.APPROVER_SCHEME_ID_SLOT[0..2]
|
|
336
|
+
# => [scheme_slot_prefix, scheme_slot_suffix, APPROVER_MAP_KEY, [2, 0, 0, 0], i-1, pad(12)]
|
|
303
337
|
|
|
304
338
|
exec.native_account::set_map_item
|
|
305
339
|
# => [OLD_VALUE, i-1, pad(12)]
|
|
@@ -332,7 +366,7 @@ end
|
|
|
332
366
|
#! Outputs:
|
|
333
367
|
#! Operand stack: []
|
|
334
368
|
#! Invocation: call
|
|
335
|
-
pub proc update_procedure_threshold(proc_threshold: u32, proc_root:
|
|
369
|
+
pub proc update_procedure_threshold(proc_threshold: u32, proc_root: word)
|
|
336
370
|
exec.set_procedure_threshold
|
|
337
371
|
end
|
|
338
372
|
|
|
@@ -388,9 +422,9 @@ proc compute_transaction_threshold(default_threshold: u32) -> u32
|
|
|
388
422
|
# 2b. get the override proc_threshold of that procedure
|
|
389
423
|
# if the procedure has no override threshold, the returned map item will be [0, 0, 0, 0]
|
|
390
424
|
exec.active_account::get_initial_map_item
|
|
391
|
-
# => [[
|
|
425
|
+
# => [[proc_threshold, 0, 0, 0], num_procedures-1, transaction_threshold]
|
|
392
426
|
|
|
393
|
-
drop drop drop dup dup.3
|
|
427
|
+
movdn.3 drop drop drop dup dup.3
|
|
394
428
|
# => [transaction_threshold, proc_threshold, proc_threshold, num_procedures-1, transaction_threshold]
|
|
395
429
|
|
|
396
430
|
u32assert2.err="transaction threshold or procedure threshold are not u32"
|
|
@@ -459,18 +493,18 @@ end
|
|
|
459
493
|
#!
|
|
460
494
|
#! Invocation: exec
|
|
461
495
|
@locals(1)
|
|
462
|
-
pub proc auth_tx(salt:
|
|
496
|
+
pub proc auth_tx(salt: word)
|
|
463
497
|
exec.native_account::incr_nonce drop
|
|
464
498
|
# => [SALT]
|
|
465
499
|
|
|
466
500
|
# ------ Computing transaction summary ------
|
|
467
501
|
|
|
468
502
|
exec.auth::create_tx_summary
|
|
469
|
-
# => [
|
|
503
|
+
# => [ACCOUNT_DELTA_COMMITMENT, INPUT_NOTES_COMMITMENT, OUTPUT_NOTES_COMMITMENT, SALT]
|
|
470
504
|
|
|
471
505
|
# to build a tx_summary in the host, we need these four words in the advice provider
|
|
472
|
-
|
|
473
|
-
# => [
|
|
506
|
+
adv.insert_hqword
|
|
507
|
+
# => [ACCOUNT_DELTA_COMMITMENT, INPUT_NOTES_COMMITMENT, OUTPUT_NOTES_COMMITMENT, SALT]
|
|
474
508
|
|
|
475
509
|
# the commitment to the tx summary is the message that is signed
|
|
476
510
|
exec.auth::hash_tx_summary
|
|
@@ -478,22 +512,19 @@ pub proc auth_tx(salt: BeWord) -> BeWord
|
|
|
478
512
|
|
|
479
513
|
# ------ Verifying approver signatures ------
|
|
480
514
|
|
|
481
|
-
|
|
482
|
-
# => [
|
|
483
|
-
|
|
484
|
-
exec.active_account::get_initial_item
|
|
485
|
-
# => [0, 0, num_of_approvers, default_threshold, TX_SUMMARY_COMMITMENT]
|
|
486
|
-
|
|
487
|
-
drop drop
|
|
488
|
-
# => [num_of_approvers, default_threshold, TX_SUMMARY_COMMITMENT]
|
|
515
|
+
exec.get_threshold_and_num_approvers
|
|
516
|
+
# => [default_threshold, num_of_approvers, TX_SUMMARY_COMMITMENT]
|
|
489
517
|
|
|
490
|
-
|
|
518
|
+
movdn.5
|
|
491
519
|
# => [num_of_approvers, TX_SUMMARY_COMMITMENT, default_threshold]
|
|
492
520
|
|
|
493
521
|
push.PUBLIC_KEYS_MAP_SLOT[0..2]
|
|
494
522
|
# => [pub_key_slot_prefix, pub_key_slot_suffix, num_of_approvers, TX_SUMMARY_COMMITMENT, default_threshold]
|
|
495
523
|
|
|
496
|
-
|
|
524
|
+
push.APPROVER_SCHEME_ID_SLOT[0..2]
|
|
525
|
+
# => [scheme_id_slot_prefix, scheme_id_slot_suffix, pub_key_slot_prefix, pub_key_slot_suffix, num_of_approvers, TX_SUMMARY_COMMITMENT, default_threshold]
|
|
526
|
+
|
|
527
|
+
exec.::miden::standards::auth::signature::verify_signatures
|
|
497
528
|
# => [num_verified_signatures, TX_SUMMARY_COMMITMENT, default_threshold]
|
|
498
529
|
|
|
499
530
|
# ------ Checking threshold is >= num_verified_signatures ------
|