@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.
- package/README.md +98 -119
- package/dist/account/builder.d.ts +18 -0
- package/dist/account/builder.d.ts.map +1 -1
- package/dist/account/builder.js +59 -29
- package/dist/account/builder.js.map +1 -1
- package/dist/account/builder.test.d.ts +2 -0
- package/dist/account/builder.test.d.ts.map +1 -0
- package/dist/account/builder.test.js +115 -0
- package/dist/account/builder.test.js.map +1 -0
- package/dist/account/index.d.ts +1 -1
- package/dist/account/index.d.ts.map +1 -1
- package/dist/account/index.js +1 -1
- package/dist/account/index.js.map +1 -1
- package/dist/account/masm/account-components/auth.d.ts +5 -0
- package/dist/account/masm/account-components/auth.d.ts.map +1 -0
- package/dist/account/masm/account-components/auth.js +67 -0
- package/dist/account/masm/account-components/auth.js.map +1 -0
- package/dist/account/masm/auth.d.ts +5 -0
- package/dist/account/masm/auth.d.ts.map +1 -0
- package/dist/account/masm/auth.js +1395 -0
- package/dist/account/masm/auth.js.map +1 -0
- package/dist/account/masm/index.d.ts +3 -0
- package/dist/account/masm/index.d.ts.map +1 -0
- package/dist/account/masm/index.js +5 -0
- package/dist/account/masm/index.js.map +1 -0
- package/dist/account/masm.d.ts +1 -4
- package/dist/account/masm.d.ts.map +1 -1
- package/dist/account/masm.js +3 -1034
- package/dist/account/masm.js.map +1 -1
- package/dist/account/storage.d.ts +2 -2
- package/dist/account/storage.d.ts.map +1 -1
- package/dist/account/storage.js +18 -16
- package/dist/account/storage.js.map +1 -1
- package/dist/client.d.ts +67 -9
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +73 -22
- package/dist/client.js.map +1 -1
- package/dist/client.test.js +31 -32
- package/dist/client.test.js.map +1 -1
- package/dist/index.d.ts +54 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +53 -9
- package/dist/index.js.map +1 -1
- package/dist/inspector.d.ts +32 -6
- package/dist/inspector.d.ts.map +1 -1
- package/dist/inspector.js +58 -23
- package/dist/inspector.js.map +1 -1
- package/dist/inspector.test.js +18 -18
- package/dist/inspector.test.js.map +1 -1
- package/dist/multisig/proposal/execution.d.ts +6 -5
- package/dist/multisig/proposal/execution.d.ts.map +1 -1
- package/dist/multisig/proposal/execution.js +49 -27
- package/dist/multisig/proposal/execution.js.map +1 -1
- package/dist/multisig/proposal/parser.d.ts +3 -3
- package/dist/multisig/proposal/parser.d.ts.map +1 -1
- package/dist/multisig/proposal/parser.js +23 -23
- package/dist/multisig/proposal/parser.js.map +1 -1
- package/dist/multisig/signing.d.ts +3 -3
- package/dist/multisig/signing.d.ts.map +1 -1
- package/dist/multisig/signing.js +3 -3
- package/dist/multisig/signing.js.map +1 -1
- package/dist/multisig.d.ts +187 -46
- package/dist/multisig.d.ts.map +1 -1
- package/dist/multisig.js +650 -289
- package/dist/multisig.js.map +1 -1
- package/dist/multisig.test.js +1680 -241
- package/dist/multisig.test.js.map +1 -1
- package/dist/procedures.d.ts +46 -24
- package/dist/procedures.d.ts.map +1 -1
- package/dist/procedures.js +46 -21
- package/dist/procedures.js.map +1 -1
- package/dist/proposal/factory.d.ts +18 -0
- package/dist/proposal/factory.d.ts.map +1 -0
- package/dist/proposal/factory.js +99 -0
- package/dist/proposal/factory.js.map +1 -0
- package/dist/proposal/metadata.d.ts +8 -0
- package/dist/proposal/metadata.d.ts.map +1 -0
- package/dist/proposal/metadata.js +156 -0
- package/dist/proposal/metadata.js.map +1 -0
- package/dist/proposal/signatures.d.ts +10 -0
- package/dist/proposal/signatures.d.ts.map +1 -0
- package/dist/proposal/signatures.js +54 -0
- package/dist/proposal/signatures.js.map +1 -0
- package/dist/signer.d.ts +2 -0
- package/dist/signer.d.ts.map +1 -1
- package/dist/signer.js +2 -0
- package/dist/signer.js.map +1 -1
- package/dist/signers/ecdsa.d.ts +3 -0
- package/dist/signers/ecdsa.d.ts.map +1 -1
- package/dist/signers/ecdsa.js +8 -4
- package/dist/signers/ecdsa.js.map +1 -1
- package/dist/signers/ecdsa.test.d.ts +2 -0
- package/dist/signers/ecdsa.test.d.ts.map +1 -0
- package/dist/signers/ecdsa.test.js +65 -0
- package/dist/signers/ecdsa.test.js.map +1 -0
- package/dist/signers/falcon.d.ts +3 -0
- package/dist/signers/falcon.d.ts.map +1 -1
- package/dist/signers/falcon.js +8 -4
- package/dist/signers/falcon.js.map +1 -1
- package/dist/signers/falcon.test.js +12 -0
- package/dist/signers/falcon.test.js.map +1 -1
- package/dist/signers/miden-wallet.d.ts +3 -1
- package/dist/signers/miden-wallet.d.ts.map +1 -1
- package/dist/signers/miden-wallet.js +11 -2
- package/dist/signers/miden-wallet.js.map +1 -1
- package/dist/signers/miden-wallet.test.js +26 -0
- package/dist/signers/miden-wallet.test.js.map +1 -1
- package/dist/signers/para.d.ts +3 -3
- package/dist/signers/para.d.ts.map +1 -1
- package/dist/signers/para.js +15 -6
- package/dist/signers/para.js.map +1 -1
- package/dist/signers/para.test.js +39 -0
- package/dist/signers/para.test.js.map +1 -1
- package/dist/transaction/consumeNotes.d.ts.map +1 -1
- package/dist/transaction/consumeNotes.js +1 -0
- package/dist/transaction/consumeNotes.js.map +1 -1
- package/dist/transaction/index.d.ts +2 -1
- package/dist/transaction/index.d.ts.map +1 -1
- package/dist/transaction/index.js +2 -1
- package/dist/transaction/index.js.map +1 -1
- package/dist/transaction/options.d.ts +1 -1
- package/dist/transaction/options.d.ts.map +1 -1
- package/dist/transaction/p2id.d.ts +1 -0
- package/dist/transaction/p2id.d.ts.map +1 -1
- package/dist/transaction/p2id.js +9 -3
- package/dist/transaction/p2id.js.map +1 -1
- package/dist/transaction/p2id.test.d.ts +2 -0
- package/dist/transaction/p2id.test.d.ts.map +1 -0
- package/dist/transaction/p2id.test.js +138 -0
- package/dist/transaction/p2id.test.js.map +1 -0
- package/dist/transaction/rpoRandomCoin.d.ts +7 -0
- package/dist/transaction/rpoRandomCoin.d.ts.map +1 -0
- package/dist/transaction/rpoRandomCoin.js +17 -0
- package/dist/transaction/rpoRandomCoin.js.map +1 -0
- package/dist/transaction/rpoRandomCoin.test.d.ts +2 -0
- package/dist/transaction/rpoRandomCoin.test.d.ts.map +1 -0
- package/dist/transaction/rpoRandomCoin.test.js +52 -0
- package/dist/transaction/rpoRandomCoin.test.js.map +1 -0
- package/dist/transaction/updateGuardian.d.ts +7 -0
- package/dist/transaction/updateGuardian.d.ts.map +1 -0
- package/dist/transaction/{updatePsm.js → updateGuardian.js} +15 -29
- package/dist/transaction/updateGuardian.js.map +1 -0
- package/dist/transaction/updateProcedureThreshold.d.ts +9 -0
- package/dist/transaction/updateProcedureThreshold.d.ts.map +1 -0
- package/dist/transaction/updateProcedureThreshold.js +55 -0
- package/dist/transaction/updateProcedureThreshold.js.map +1 -0
- package/dist/transaction/updateSigners.d.ts.map +1 -1
- package/dist/transaction/updateSigners.js +5 -23
- package/dist/transaction/updateSigners.js.map +1 -1
- package/dist/transaction.d.ts +2 -1
- package/dist/transaction.d.ts.map +1 -1
- package/dist/transaction.js +2 -1
- package/dist/transaction.js.map +1 -1
- package/dist/types/proposal.d.ts +32 -15
- package/dist/types/proposal.d.ts.map +1 -1
- package/dist/types.d.ts +24 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/digest.d.ts +5 -0
- package/dist/utils/digest.d.ts.map +1 -1
- package/dist/utils/digest.js +34 -1
- package/dist/utils/digest.js.map +1 -1
- package/dist/utils/digest.test.d.ts +2 -0
- package/dist/utils/digest.test.d.ts.map +1 -0
- package/dist/utils/digest.test.js +48 -0
- package/dist/utils/digest.test.js.map +1 -0
- package/dist/utils/signature.d.ts +3 -1
- package/dist/utils/signature.d.ts.map +1 -1
- package/dist/utils/signature.js +31 -6
- package/dist/utils/signature.js.map +1 -1
- package/dist/utils/word.test.js +1 -52
- package/dist/utils/word.test.js.map +1 -1
- package/masm/account_components/auth/multisig.masm +13 -0
- package/masm/account_components/auth/multisig_ecdsa.masm +13 -0
- package/masm/account_components/auth/multisig_guardian.masm +17 -0
- package/masm/account_components/auth/multisig_guardian_ecdsa.masm +17 -0
- package/masm/auth/guardian.masm +177 -0
- package/masm/auth/guardian_ecdsa.masm +178 -0
- package/masm/{multisig.masm → auth/multisig.masm} +149 -55
- package/masm/{multisig_ecdsa.masm → auth/multisig_ecdsa.masm} +148 -56
- package/package.json +11 -9
- package/src/account/builder.test.ts +165 -0
- package/src/account/builder.ts +71 -34
- package/src/account/index.ts +1 -1
- package/src/account/masm/account-components/auth.ts +70 -0
- package/src/account/masm/auth.ts +1398 -0
- package/src/account/masm/index.ts +5 -0
- package/src/account/masm.ts +3 -1040
- package/src/account/storage.ts +18 -16
- package/src/client.test.ts +31 -35
- package/src/client.ts +98 -26
- package/src/index.ts +84 -22
- package/src/inspector.test.ts +17 -17
- package/src/inspector.ts +63 -29
- package/src/multisig/proposal/execution.ts +102 -41
- package/src/multisig/proposal/parser.ts +26 -26
- package/src/multisig/signing.ts +4 -4
- package/src/multisig.test.ts +2097 -248
- package/src/multisig.ts +882 -365
- package/src/procedures.ts +50 -26
- package/src/proposal/factory.ts +171 -0
- package/src/proposal/metadata.ts +165 -0
- package/src/proposal/signatures.ts +68 -0
- package/src/signer.ts +2 -0
- package/src/signers/ecdsa.test.ts +80 -0
- package/src/signers/ecdsa.ts +15 -4
- package/src/signers/falcon.test.ts +19 -0
- package/src/signers/falcon.ts +16 -5
- package/src/signers/miden-wallet.test.ts +47 -0
- package/src/signers/miden-wallet.ts +18 -1
- package/src/signers/para.test.ts +57 -0
- package/src/signers/para.ts +26 -7
- package/src/transaction/consumeNotes.ts +1 -0
- package/src/transaction/index.ts +2 -2
- package/src/transaction/options.ts +1 -2
- package/src/transaction/p2id.test.ts +190 -0
- package/src/transaction/p2id.ts +11 -5
- package/src/transaction/rpoRandomCoin.test.ts +64 -0
- package/src/transaction/rpoRandomCoin.ts +24 -0
- package/src/transaction/{updatePsm.ts → updateGuardian.ts} +19 -32
- package/src/transaction/updateProcedureThreshold.ts +97 -0
- package/src/transaction/updateSigners.ts +12 -27
- package/src/transaction.ts +5 -3
- package/src/types/proposal.ts +43 -11
- package/src/types.ts +29 -11
- package/src/utils/digest.test.ts +55 -0
- package/src/utils/digest.ts +51 -1
- package/src/utils/signature.ts +47 -9
- package/src/utils/word.test.ts +1 -55
- package/dist/account.d.ts +0 -104
- package/dist/account.d.ts.map +0 -1
- package/dist/account.js +0 -136
- package/dist/account.js.map +0 -1
- package/dist/builder.d.ts +0 -54
- package/dist/builder.d.ts.map +0 -1
- package/dist/builder.js +0 -78
- package/dist/builder.js.map +0 -1
- package/dist/http.d.ts +0 -64
- package/dist/http.d.ts.map +0 -1
- package/dist/http.js +0 -162
- package/dist/http.js.map +0 -1
- package/dist/keystore.d.ts +0 -65
- package/dist/keystore.d.ts.map +0 -1
- package/dist/keystore.js +0 -121
- package/dist/keystore.js.map +0 -1
- package/dist/miden.d.ts +0 -9
- package/dist/miden.d.ts.map +0 -1
- package/dist/miden.js +0 -26
- package/dist/miden.js.map +0 -1
- package/dist/multisig/metadata.d.ts +0 -18
- package/dist/multisig/metadata.d.ts.map +0 -1
- package/dist/multisig/metadata.js +0 -100
- package/dist/multisig/metadata.js.map +0 -1
- package/dist/multisig/metadata.test.d.ts +0 -2
- package/dist/multisig/metadata.test.d.ts.map +0 -1
- package/dist/multisig/metadata.test.js +0 -323
- package/dist/multisig/metadata.test.js.map +0 -1
- package/dist/signer.test.d.ts +0 -2
- package/dist/signer.test.d.ts.map +0 -1
- package/dist/signer.test.js +0 -117
- package/dist/signer.test.js.map +0 -1
- package/dist/transaction/updatePsm.d.ts +0 -7
- package/dist/transaction/updatePsm.d.ts.map +0 -1
- package/dist/transaction/updatePsm.js.map +0 -1
- package/dist/transport/http.d.ts +0 -64
- package/dist/transport/http.d.ts.map +0 -1
- package/dist/transport/http.js +0 -162
- package/dist/transport/http.js.map +0 -1
- package/dist/transport/index.d.ts +0 -5
- package/dist/transport/index.d.ts.map +0 -1
- package/dist/transport/index.js +0 -5
- package/dist/transport/index.js.map +0 -1
- package/masm/psm.masm +0 -178
- package/masm/psm_ecdsa.masm +0 -179
package/dist/transport/http.js
DELETED
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HTTP client for PSM server communication.
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* Error thrown by the PSM HTTP client.
|
|
6
|
-
*/
|
|
7
|
-
export class PsmHttpError extends Error {
|
|
8
|
-
status;
|
|
9
|
-
statusText;
|
|
10
|
-
body;
|
|
11
|
-
constructor(status, statusText, body) {
|
|
12
|
-
super(`PSM HTTP error ${status}: ${statusText} - ${body}`);
|
|
13
|
-
this.status = status;
|
|
14
|
-
this.statusText = statusText;
|
|
15
|
-
this.body = body;
|
|
16
|
-
this.name = 'PsmHttpError';
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* HTTP client for PSM server.
|
|
21
|
-
*/
|
|
22
|
-
export class PsmHttpClient {
|
|
23
|
-
baseUrl;
|
|
24
|
-
signer = null;
|
|
25
|
-
constructor(baseUrl) {
|
|
26
|
-
this.baseUrl = baseUrl;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Set the signer for authenticated requests.
|
|
30
|
-
*/
|
|
31
|
-
setSigner(signer) {
|
|
32
|
-
this.signer = signer;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Get the PSM server's public key.
|
|
36
|
-
*/
|
|
37
|
-
async getPubkey() {
|
|
38
|
-
const response = await this.fetch('/pubkey', { method: 'GET' });
|
|
39
|
-
const data = (await response.json());
|
|
40
|
-
return data.pubkey;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Configure/register an account on PSM.
|
|
44
|
-
*/
|
|
45
|
-
async configure(request) {
|
|
46
|
-
const response = await this.fetchAuthenticated('/configure', {
|
|
47
|
-
method: 'POST',
|
|
48
|
-
body: JSON.stringify(request),
|
|
49
|
-
}, request.account_id);
|
|
50
|
-
return (await response.json());
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Get account state from PSM.
|
|
54
|
-
*/
|
|
55
|
-
async getState(accountId) {
|
|
56
|
-
const params = new URLSearchParams({ account_id: accountId });
|
|
57
|
-
const response = await this.fetchAuthenticated(`/state?${params}`, {
|
|
58
|
-
method: 'GET',
|
|
59
|
-
}, accountId);
|
|
60
|
-
return (await response.json());
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Get all delta proposals for an account.
|
|
64
|
-
*/
|
|
65
|
-
async getDeltaProposals(accountId) {
|
|
66
|
-
const params = new URLSearchParams({ account_id: accountId });
|
|
67
|
-
const response = await this.fetchAuthenticated(`/delta/proposal?${params}`, {
|
|
68
|
-
method: 'GET',
|
|
69
|
-
}, accountId);
|
|
70
|
-
const data = (await response.json());
|
|
71
|
-
return data.proposals;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Push a new delta proposal.
|
|
75
|
-
*/
|
|
76
|
-
async pushDeltaProposal(request) {
|
|
77
|
-
const response = await this.fetchAuthenticated('/delta/proposal', {
|
|
78
|
-
method: 'POST',
|
|
79
|
-
body: JSON.stringify(request),
|
|
80
|
-
}, request.account_id);
|
|
81
|
-
return (await response.json());
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Sign a delta proposal.
|
|
85
|
-
*/
|
|
86
|
-
async signDeltaProposal(request) {
|
|
87
|
-
const response = await this.fetchAuthenticated('/delta/proposal', {
|
|
88
|
-
method: 'PUT',
|
|
89
|
-
body: JSON.stringify(request),
|
|
90
|
-
}, request.account_id);
|
|
91
|
-
return (await response.json());
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Push a delta (execute a proposal).
|
|
95
|
-
*/
|
|
96
|
-
async pushDelta(delta) {
|
|
97
|
-
const response = await this.fetchAuthenticated('/delta', {
|
|
98
|
-
method: 'POST',
|
|
99
|
-
body: JSON.stringify(delta),
|
|
100
|
-
}, delta.account_id);
|
|
101
|
-
return (await response.json());
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Get a specific delta by nonce.
|
|
105
|
-
*/
|
|
106
|
-
async getDelta(accountId, nonce) {
|
|
107
|
-
const params = new URLSearchParams({
|
|
108
|
-
account_id: accountId,
|
|
109
|
-
nonce: nonce.toString(),
|
|
110
|
-
});
|
|
111
|
-
const response = await this.fetchAuthenticated(`/delta?${params}`, {
|
|
112
|
-
method: 'GET',
|
|
113
|
-
}, accountId);
|
|
114
|
-
return (await response.json());
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Get merged delta since a nonce.
|
|
118
|
-
*/
|
|
119
|
-
async getDeltaSince(accountId, fromNonce) {
|
|
120
|
-
const params = new URLSearchParams({
|
|
121
|
-
account_id: accountId,
|
|
122
|
-
nonce: fromNonce.toString(),
|
|
123
|
-
});
|
|
124
|
-
const response = await this.fetchAuthenticated(`/delta/since?${params}`, {
|
|
125
|
-
method: 'GET',
|
|
126
|
-
}, accountId);
|
|
127
|
-
return (await response.json());
|
|
128
|
-
}
|
|
129
|
-
// ==========================================================================
|
|
130
|
-
// Private helpers
|
|
131
|
-
// ==========================================================================
|
|
132
|
-
async fetch(path, init) {
|
|
133
|
-
const url = `${this.baseUrl}${path}`;
|
|
134
|
-
const response = await fetch(url, {
|
|
135
|
-
...init,
|
|
136
|
-
headers: {
|
|
137
|
-
'Content-Type': 'application/json',
|
|
138
|
-
...init.headers,
|
|
139
|
-
},
|
|
140
|
-
});
|
|
141
|
-
if (!response.ok) {
|
|
142
|
-
const body = await response.text();
|
|
143
|
-
throw new PsmHttpError(response.status, response.statusText, body);
|
|
144
|
-
}
|
|
145
|
-
return response;
|
|
146
|
-
}
|
|
147
|
-
async fetchAuthenticated(path, init, accountId) {
|
|
148
|
-
if (!this.signer) {
|
|
149
|
-
throw new Error('No signer configured. Call setSigner() first.');
|
|
150
|
-
}
|
|
151
|
-
const signature = this.signer.signAccountId(accountId);
|
|
152
|
-
return this.fetch(path, {
|
|
153
|
-
...init,
|
|
154
|
-
headers: {
|
|
155
|
-
...init.headers,
|
|
156
|
-
'x-pubkey': this.signer.publicKey,
|
|
157
|
-
'x-signature': signature,
|
|
158
|
-
},
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
//# sourceMappingURL=http.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/transport/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
|
package/masm/psm.masm
DELETED
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
# Private State Manager (PSM) Authentication Component
|
|
2
|
-
#
|
|
3
|
-
# This component provides PSM signature verification for accounts.
|
|
4
|
-
# It can be used standalone or in conjunction with other auth components like multisig.
|
|
5
|
-
|
|
6
|
-
use miden::active_account
|
|
7
|
-
use miden::native_account
|
|
8
|
-
|
|
9
|
-
# Type definitions for v0.12 syntax
|
|
10
|
-
type BeWord = struct @bigendian { a: felt, b: felt, c: felt, d: felt }
|
|
11
|
-
|
|
12
|
-
# IMPORTANT SECURITY NOTES
|
|
13
|
-
# --------------------------------------------------------------------------------
|
|
14
|
-
# - The selector in `PSM_SELECTOR_SLOT` controls whether the extra PSM signature
|
|
15
|
-
# is enforced:
|
|
16
|
-
# * PSM_ON => exactly one valid PSM signature is required.
|
|
17
|
-
# * PSM_OFF => PSM signature is skipped for that call.
|
|
18
|
-
#
|
|
19
|
-
# - `verify_psm_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_psm` / `disable_psm` procedures allow explicit control over PSM state.
|
|
23
|
-
#
|
|
24
|
-
# - `update_psm_public_key`:
|
|
25
|
-
# * Installs a new PSM public key in the map at `PSM_PUBLIC_KEY_MAP_SLOT`.
|
|
26
|
-
# * Does not itself perform any signature checks.
|
|
27
|
-
# * To update the key without requiring PSM signature, ensure selector is OFF.
|
|
28
|
-
#
|
|
29
|
-
# Storage Layout
|
|
30
|
-
# --------------------------------------------------------------------------------
|
|
31
|
-
#
|
|
32
|
-
# +---------------------+---------------+
|
|
33
|
-
# | DESCRIPTION | SLOT |
|
|
34
|
-
# +---------------------+---------------+
|
|
35
|
-
# | PSM SELECTOR (word) | 0 |
|
|
36
|
-
# | PSM PUBLIC KEY MAP | 1 |
|
|
37
|
-
# +---------------------+---------------+
|
|
38
|
-
#
|
|
39
|
-
# - PSM_SELECTOR_SLOT (0):
|
|
40
|
-
# * Stores a word that is compared against [1, 0, 0, 0] (PSM_ON).
|
|
41
|
-
# * Any value != PSM_ON is treated as PSM_OFF.
|
|
42
|
-
#
|
|
43
|
-
# - PSM_PUBLIC_KEY_MAP_SLOT (1):
|
|
44
|
-
# * A map from a fixed key [0, 0, 0, 0] to the single PSM public key:
|
|
45
|
-
# [0, 0, 0, 0] => PSM_PUBLIC_KEY
|
|
46
|
-
# * PSM_PUBLIC_KEY is a RPO Falcon 512 public key represented as a word.
|
|
47
|
-
|
|
48
|
-
# CONSTANTS
|
|
49
|
-
# =================================================================================================
|
|
50
|
-
|
|
51
|
-
# Slot where the PSM selector flag is stored:
|
|
52
|
-
# - PSM_ON => PSM signature required
|
|
53
|
-
# - PSM_OFF => PSM signature skipped
|
|
54
|
-
const PSM_SELECTOR_SLOT = 0
|
|
55
|
-
|
|
56
|
-
# Map slot for PSM public key
|
|
57
|
-
# Uses exactly one PSM public key at index [0, 0, 0, 0]
|
|
58
|
-
# [0, 0, 0, 0] => PSM_PUBLIC_KEY
|
|
59
|
-
const PSM_PUBLIC_KEY_MAP_SLOT = 1
|
|
60
|
-
|
|
61
|
-
# Selector flag values
|
|
62
|
-
const PSM_ON = [1, 0, 0, 0]
|
|
63
|
-
const PSM_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
|
-
# PSM PROCEDURES
|
|
69
|
-
# =================================================================================================
|
|
70
|
-
|
|
71
|
-
#! Enable PSM verification by setting the selector to ON.
|
|
72
|
-
#!
|
|
73
|
-
#! Operand stack inputs: []
|
|
74
|
-
#! Outputs: []
|
|
75
|
-
#!
|
|
76
|
-
#! Notes:
|
|
77
|
-
#! - Sets PSM_SELECTOR_SLOT to PSM_ON (1)
|
|
78
|
-
#! - After this, transactions will require PSM signature verification
|
|
79
|
-
proc.enable_psm
|
|
80
|
-
push.PSM_ON
|
|
81
|
-
# => [PSM_ON]
|
|
82
|
-
|
|
83
|
-
push.PSM_SELECTOR_SLOT
|
|
84
|
-
# => [PSM_SELECTOR_SLOT, PSM_ON]
|
|
85
|
-
|
|
86
|
-
exec.native_account::set_item
|
|
87
|
-
# => [OLD_ROOT]
|
|
88
|
-
|
|
89
|
-
dropw
|
|
90
|
-
# => []
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
#! Disable PSM verification by setting the selector to OFF.
|
|
94
|
-
#!
|
|
95
|
-
#! Operand stack inputs: []
|
|
96
|
-
#! Outputs: []
|
|
97
|
-
#!
|
|
98
|
-
#! Notes:
|
|
99
|
-
#! - Sets PSM_SELECTOR_SLOT to PSM_OFF (0)
|
|
100
|
-
#! - After this, transactions will NOT require PSM signature verification
|
|
101
|
-
proc.disable_psm
|
|
102
|
-
push.PSM_OFF
|
|
103
|
-
# => [PSM_OFF]
|
|
104
|
-
|
|
105
|
-
push.PSM_SELECTOR_SLOT
|
|
106
|
-
# => [PSM_SELECTOR_SLOT, PSM_OFF]
|
|
107
|
-
|
|
108
|
-
exec.native_account::set_item
|
|
109
|
-
# => [OLD_ROOT]
|
|
110
|
-
|
|
111
|
-
dropw
|
|
112
|
-
# => []
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
#! Update the PSM public key.
|
|
116
|
-
#!
|
|
117
|
-
#! Operand stack inputs: []
|
|
118
|
-
#! Advice stack inputs: [PUB_KEY]
|
|
119
|
-
#! - PUB_KEY is the new PSM RPO Falcon 512 public key
|
|
120
|
-
#!
|
|
121
|
-
#! Notes:
|
|
122
|
-
#! - Stores PUB_KEY into PSM_PUBLIC_KEY_MAP_SLOT:
|
|
123
|
-
#! [0, 0, 0, 0] => PSM_PUBLIC_KEY
|
|
124
|
-
#! - To update the key without requiring PSM signature, ensure
|
|
125
|
-
#! PSM_SELECTOR_SLOT = 0 (OFF) before calling this.
|
|
126
|
-
pub proc update_psm_public_key
|
|
127
|
-
exec.disable_psm
|
|
128
|
-
# ------ Update the PSM 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 PSM_KEY
|
|
135
|
-
|
|
136
|
-
push.PSM_PUBLIC_KEY_MAP_SLOT
|
|
137
|
-
# => [index, MAP_KEY, PUB_KEY]
|
|
138
|
-
|
|
139
|
-
exec.native_account::set_map_item
|
|
140
|
-
# => [OLD_MAP_ROOT, OLD_MAP_VALUE]
|
|
141
|
-
|
|
142
|
-
dropw dropw
|
|
143
|
-
# => []
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
#! Conditionally verify a "PSM" signature against a stored public key hash.
|
|
147
|
-
#! The condition is controlled by the selector at PSM_SELECTOR_SLOT.
|
|
148
|
-
#!
|
|
149
|
-
#! Inputs: [MSG]
|
|
150
|
-
#! Outputs: [MSG]
|
|
151
|
-
#!
|
|
152
|
-
#! Panics if:
|
|
153
|
-
#! - Selector is ON but the provided PSM signature is invalid or missing.
|
|
154
|
-
#!
|
|
155
|
-
#! Notes:
|
|
156
|
-
#! - MSG is TX_SUMMARY_COMMITMENT provided by auth procedure
|
|
157
|
-
#! - If selector is OFF (0), PSM verification is skipped
|
|
158
|
-
#! - Selector value is read from initial storage state
|
|
159
|
-
pub proc verify_psm_signature(msg: BeWord)
|
|
160
|
-
push.PSM_SELECTOR_SLOT
|
|
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.PSM_PUBLIC_KEY_MAP_SLOT
|
|
169
|
-
exec.::miden::auth::rpo_falcon512::verify_signatures
|
|
170
|
-
push.1 neq
|
|
171
|
-
if.true
|
|
172
|
-
emit.AUTH_UNAUTHORIZED_EVENT
|
|
173
|
-
push.0 assert.err="invalid PSM signature"
|
|
174
|
-
end
|
|
175
|
-
end
|
|
176
|
-
# => [MSG]
|
|
177
|
-
exec.enable_psm
|
|
178
|
-
end
|
package/masm/psm_ecdsa.masm
DELETED
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
# Private State Manager (PSM) Authentication Component (ECDSA)
|
|
2
|
-
#
|
|
3
|
-
# This component provides PSM 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::active_account
|
|
8
|
-
use miden::native_account
|
|
9
|
-
|
|
10
|
-
# Type definitions for v0.12 syntax
|
|
11
|
-
type BeWord = struct @bigendian { a: felt, b: felt, c: felt, d: felt }
|
|
12
|
-
|
|
13
|
-
# IMPORTANT SECURITY NOTES
|
|
14
|
-
# --------------------------------------------------------------------------------
|
|
15
|
-
# - The selector in `PSM_SELECTOR_SLOT` controls whether the extra PSM signature
|
|
16
|
-
# is enforced:
|
|
17
|
-
# * PSM_ON => exactly one valid PSM signature is required.
|
|
18
|
-
# * PSM_OFF => PSM signature is skipped for that call.
|
|
19
|
-
#
|
|
20
|
-
# - `verify_psm_signature` reads the selector from initial storage state.
|
|
21
|
-
# This means changes made during the same transaction won't affect the check.
|
|
22
|
-
#
|
|
23
|
-
# - `enable_psm` / `disable_psm` procedures allow explicit control over PSM state.
|
|
24
|
-
#
|
|
25
|
-
# - `update_psm_public_key`:
|
|
26
|
-
# * Installs a new PSM public key in the map at `PSM_PUBLIC_KEY_MAP_SLOT`.
|
|
27
|
-
# * Does not itself perform any signature checks.
|
|
28
|
-
# * To update the key without requiring PSM signature, ensure selector is OFF.
|
|
29
|
-
#
|
|
30
|
-
# Storage Layout
|
|
31
|
-
# --------------------------------------------------------------------------------
|
|
32
|
-
#
|
|
33
|
-
# +---------------------+---------------+
|
|
34
|
-
# | DESCRIPTION | SLOT |
|
|
35
|
-
# +---------------------+---------------+
|
|
36
|
-
# | PSM SELECTOR (word) | 0 |
|
|
37
|
-
# | PSM PUBLIC KEY MAP | 1 |
|
|
38
|
-
# +---------------------+---------------+
|
|
39
|
-
#
|
|
40
|
-
# - PSM_SELECTOR_SLOT (0):
|
|
41
|
-
# * Stores a word that is compared against [1, 0, 0, 0] (PSM_ON).
|
|
42
|
-
# * Any value != PSM_ON is treated as PSM_OFF.
|
|
43
|
-
#
|
|
44
|
-
# - PSM_PUBLIC_KEY_MAP_SLOT (1):
|
|
45
|
-
# * A map from a fixed key [0, 0, 0, 0] to the single PSM public key:
|
|
46
|
-
# [0, 0, 0, 0] => PSM_PUBLIC_KEY
|
|
47
|
-
# * PSM_PUBLIC_KEY is an ECDSA secp256k1 public key represented as a word.
|
|
48
|
-
|
|
49
|
-
# CONSTANTS
|
|
50
|
-
# =================================================================================================
|
|
51
|
-
|
|
52
|
-
# Slot where the PSM selector flag is stored:
|
|
53
|
-
# - PSM_ON => PSM signature required
|
|
54
|
-
# - PSM_OFF => PSM signature skipped
|
|
55
|
-
const PSM_SELECTOR_SLOT = 0
|
|
56
|
-
|
|
57
|
-
# Map slot for PSM public key
|
|
58
|
-
# Uses exactly one PSM public key at index [0, 0, 0, 0]
|
|
59
|
-
# [0, 0, 0, 0] => PSM_PUBLIC_KEY
|
|
60
|
-
const PSM_PUBLIC_KEY_MAP_SLOT = 1
|
|
61
|
-
|
|
62
|
-
# Selector flag values
|
|
63
|
-
const PSM_ON = [1, 0, 0, 0]
|
|
64
|
-
const PSM_OFF = [0, 0, 0, 0]
|
|
65
|
-
|
|
66
|
-
# The event emitted when a signature is not found for a required signer.
|
|
67
|
-
const AUTH_UNAUTHORIZED_EVENT = event("miden::auth::unauthorized")
|
|
68
|
-
|
|
69
|
-
# PSM PROCEDURES
|
|
70
|
-
# =================================================================================================
|
|
71
|
-
|
|
72
|
-
#! Enable PSM verification by setting the selector to ON.
|
|
73
|
-
#!
|
|
74
|
-
#! Operand stack inputs: []
|
|
75
|
-
#! Outputs: []
|
|
76
|
-
#!
|
|
77
|
-
#! Notes:
|
|
78
|
-
#! - Sets PSM_SELECTOR_SLOT to PSM_ON (1)
|
|
79
|
-
#! - After this, transactions will require PSM signature verification
|
|
80
|
-
proc.enable_psm
|
|
81
|
-
push.PSM_ON
|
|
82
|
-
# => [PSM_ON]
|
|
83
|
-
|
|
84
|
-
push.PSM_SELECTOR_SLOT
|
|
85
|
-
# => [PSM_SELECTOR_SLOT, PSM_ON]
|
|
86
|
-
|
|
87
|
-
exec.native_account::set_item
|
|
88
|
-
# => [OLD_ROOT]
|
|
89
|
-
|
|
90
|
-
dropw
|
|
91
|
-
# => []
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
#! Disable PSM verification by setting the selector to OFF.
|
|
95
|
-
#!
|
|
96
|
-
#! Operand stack inputs: []
|
|
97
|
-
#! Outputs: []
|
|
98
|
-
#!
|
|
99
|
-
#! Notes:
|
|
100
|
-
#! - Sets PSM_SELECTOR_SLOT to PSM_OFF (0)
|
|
101
|
-
#! - After this, transactions will NOT require PSM signature verification
|
|
102
|
-
proc.disable_psm
|
|
103
|
-
push.PSM_OFF
|
|
104
|
-
# => [PSM_OFF]
|
|
105
|
-
|
|
106
|
-
push.PSM_SELECTOR_SLOT
|
|
107
|
-
# => [PSM_SELECTOR_SLOT, PSM_OFF]
|
|
108
|
-
|
|
109
|
-
exec.native_account::set_item
|
|
110
|
-
# => [OLD_ROOT]
|
|
111
|
-
|
|
112
|
-
dropw
|
|
113
|
-
# => []
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
#! Update the PSM public key.
|
|
117
|
-
#!
|
|
118
|
-
#! Operand stack inputs: []
|
|
119
|
-
#! Advice stack inputs: [PUB_KEY]
|
|
120
|
-
#! - PUB_KEY is the new PSM ECDSA secp256k1 public key
|
|
121
|
-
#!
|
|
122
|
-
#! Notes:
|
|
123
|
-
#! - Stores PUB_KEY into PSM_PUBLIC_KEY_MAP_SLOT:
|
|
124
|
-
#! [0, 0, 0, 0] => PSM_PUBLIC_KEY
|
|
125
|
-
#! - To update the key without requiring PSM signature, ensure
|
|
126
|
-
#! PSM_SELECTOR_SLOT = 0 (OFF) before calling this.
|
|
127
|
-
pub proc update_psm_public_key
|
|
128
|
-
exec.disable_psm
|
|
129
|
-
# ------ Update the PSM public key ------
|
|
130
|
-
adv_loadw
|
|
131
|
-
# => [PUB_KEY]
|
|
132
|
-
|
|
133
|
-
push.0.0.0.0
|
|
134
|
-
# => [MAP_KEY, PUB_KEY]
|
|
135
|
-
# Note that MAP_KEY is [0, 0, 0, 0] for a single PSM_KEY
|
|
136
|
-
|
|
137
|
-
push.PSM_PUBLIC_KEY_MAP_SLOT
|
|
138
|
-
# => [index, MAP_KEY, PUB_KEY]
|
|
139
|
-
|
|
140
|
-
exec.native_account::set_map_item
|
|
141
|
-
# => [OLD_MAP_ROOT, OLD_MAP_VALUE]
|
|
142
|
-
|
|
143
|
-
dropw dropw
|
|
144
|
-
# => []
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
#! Conditionally verify a "PSM" signature against a stored public key hash.
|
|
148
|
-
#! The condition is controlled by the selector at PSM_SELECTOR_SLOT.
|
|
149
|
-
#!
|
|
150
|
-
#! Inputs: [MSG]
|
|
151
|
-
#! Outputs: [MSG]
|
|
152
|
-
#!
|
|
153
|
-
#! Panics if:
|
|
154
|
-
#! - Selector is ON but the provided PSM signature is invalid or missing.
|
|
155
|
-
#!
|
|
156
|
-
#! Notes:
|
|
157
|
-
#! - MSG is TX_SUMMARY_COMMITMENT provided by auth procedure
|
|
158
|
-
#! - If selector is OFF (0), PSM verification is skipped
|
|
159
|
-
#! - Selector value is read from initial storage state
|
|
160
|
-
pub proc verify_psm_signature(msg: BeWord)
|
|
161
|
-
push.PSM_SELECTOR_SLOT
|
|
162
|
-
exec.active_account::get_item
|
|
163
|
-
drop drop drop
|
|
164
|
-
# => [selector, MSG]
|
|
165
|
-
|
|
166
|
-
push.1 eq
|
|
167
|
-
if.true
|
|
168
|
-
push.1
|
|
169
|
-
push.PSM_PUBLIC_KEY_MAP_SLOT
|
|
170
|
-
exec.::miden::auth::ecdsa_k256_keccak::verify_signatures
|
|
171
|
-
push.1 neq
|
|
172
|
-
if.true
|
|
173
|
-
emit.AUTH_UNAUTHORIZED_EVENT
|
|
174
|
-
push.0 assert.err="invalid PSM signature"
|
|
175
|
-
end
|
|
176
|
-
end
|
|
177
|
-
# => [MSG]
|
|
178
|
-
exec.enable_psm
|
|
179
|
-
end
|