@renown/sdk 6.2.3-dev.9 → 6.2.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/dist/{browser-key-storage-e3RQsnLS.js → browser-key-storage-wjSwTnhs.js} +3 -2
- package/dist/browser-key-storage-wjSwTnhs.js.map +1 -0
- package/dist/{constants-BexAR53F.js → constants-DVOF17NB.js} +1 -1
- package/dist/{constants-BexAR53F.js.map → constants-DVOF17NB.js.map} +1 -1
- package/dist/crypto.d.ts +4 -3
- package/dist/crypto.js +2 -2
- package/dist/{index-BLIpkdF7.d.ts → index-DbiBjqs6.d.ts} +11 -20
- package/dist/index-DbiBjqs6.d.ts.map +1 -0
- package/dist/index.d.ts +12 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -7
- package/dist/index.js.map +1 -1
- package/dist/{meta-D-5kvwx8.js → meta-4NmijIbE.js} +2 -2
- package/dist/{meta-D-5kvwx8.js.map → meta-4NmijIbE.js.map} +1 -1
- package/dist/{meta-CHgd9Qd0.js → meta-B2fHYlPD.js} +2 -2
- package/dist/{meta-CHgd9Qd0.js.map → meta-B2fHYlPD.js.map} +1 -1
- package/dist/{meta-BesJP74N.d.ts → meta-Dpmn2Ywp.d.ts} +3 -3
- package/dist/meta-Dpmn2Ywp.d.ts.map +1 -0
- package/dist/{meta-bV7L-1yb.d.ts → meta-qadFdiX7.d.ts} +3 -3
- package/dist/meta-qadFdiX7.d.ts.map +1 -0
- package/dist/node.d.ts +42 -25
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +23 -7
- package/dist/node.js.map +1 -1
- package/dist/signed-message-Cp5oRPLN.js +468 -0
- package/dist/signed-message-Cp5oRPLN.js.map +1 -0
- package/dist/{signer-DrjINLqt.js → signer-GzTlZLjR.js} +38 -106
- package/dist/signer-GzTlZLjR.js.map +1 -0
- package/dist/signer-trust-FmbMTn39.d.ts +53 -0
- package/dist/signer-trust-FmbMTn39.d.ts.map +1 -0
- package/dist/signer-trust-H1rNzUcd.js +708 -0
- package/dist/signer-trust-H1rNzUcd.js.map +1 -0
- package/dist/trust.d.ts +3 -0
- package/dist/trust.js +2 -0
- package/dist/{types-C-hJrsQg.d.ts → types-7xgrEnx7.d.ts} +3 -3
- package/dist/types-7xgrEnx7.d.ts.map +1 -0
- package/dist/{types-BGQKPoUr.d.ts → types-Ceiz2dkk.d.ts} +36 -12
- package/dist/types-Ceiz2dkk.d.ts.map +1 -0
- package/dist/{types-DInveFLz.d.ts → types-DRnq2URw.d.ts} +3 -3
- package/dist/types-DRnq2URw.d.ts.map +1 -0
- package/dist/{types-C_qc_62W.js → types-Dwy6khXb.js} +1 -1
- package/dist/{types-C_qc_62W.js.map → types-Dwy6khXb.js.map} +1 -1
- package/dist/utils-DLQ5VVqT.js +75 -0
- package/dist/utils-DLQ5VVqT.js.map +1 -0
- package/dist/{utils-DtWREYeO.d.ts → utils-DkVxP7Ug.d.ts} +19 -12
- package/dist/utils-DkVxP7Ug.d.ts.map +1 -0
- package/dist/wallet/index.d.ts +5 -5
- package/dist/wallet/index.d.ts.map +1 -1
- package/dist/wallet/index.js +1 -1
- package/dist/wallet/index.js.map +1 -1
- package/dist/wallet/mock/factory.d.ts +4 -5
- package/dist/wallet/mock/factory.d.ts.map +1 -1
- package/dist/wallet/mock/factory.js +1 -1
- package/dist/wallet/mock/factory.js.map +1 -1
- package/dist/wallet/mock/index.d.ts +5 -5
- package/dist/wallet/mock/index.d.ts.map +1 -1
- package/dist/wallet/mock/index.js +1 -1
- package/dist/wallet/mock/index.js.map +1 -1
- package/dist/wallet/privy/factory.d.ts +9 -11
- package/dist/wallet/privy/factory.d.ts.map +1 -1
- package/dist/wallet/privy/factory.js +2 -2
- package/dist/wallet/privy/factory.js.map +1 -1
- package/dist/wallet/privy/index.d.ts +5 -5
- package/dist/wallet/privy/index.d.ts.map +1 -1
- package/dist/wallet/privy/index.js +1 -1
- package/dist/wallet/privy/index.js.map +1 -1
- package/dist/wallet/rainbow/factory.d.ts +5 -4
- package/dist/wallet/rainbow/factory.d.ts.map +1 -1
- package/dist/wallet/rainbow/factory.js +2 -2
- package/dist/wallet/rainbow/factory.js.map +1 -1
- package/dist/wallet/rainbow/index.d.ts +5 -5
- package/dist/wallet/rainbow/index.d.ts.map +1 -1
- package/dist/wallet/rainbow/index.js +1 -1
- package/dist/wallet/rainbow/index.js.map +1 -1
- package/package.json +11 -4
- package/dist/browser-key-storage-e3RQsnLS.js.map +0 -1
- package/dist/index-BLIpkdF7.d.ts.map +0 -1
- package/dist/local-credential-verifier-CU8hmFlR.js +0 -907
- package/dist/local-credential-verifier-CU8hmFlR.js.map +0 -1
- package/dist/meta-BesJP74N.d.ts.map +0 -1
- package/dist/meta-bV7L-1yb.d.ts.map +0 -1
- package/dist/signer-DrjINLqt.js.map +0 -1
- package/dist/types-BGQKPoUr.d.ts.map +0 -1
- package/dist/types-C-hJrsQg.d.ts.map +0 -1
- package/dist/types-DInveFLz.d.ts.map +0 -1
- package/dist/utils-DtWREYeO.d.ts.map +0 -1
|
@@ -1,77 +1,8 @@
|
|
|
1
|
-
import { a as DEFAULT_RENOWN_NETWORK_ID } from "./constants-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { getResolver } from "key-did-resolver";
|
|
1
|
+
import { a as DEFAULT_RENOWN_NETWORK_ID } from "./constants-DVOF17NB.js";
|
|
2
|
+
import { n as createAuthBearerToken } from "./utils-DLQ5VVqT.js";
|
|
3
|
+
import { actionSignerIdentity, signActionV2 } from "@powerhousedao/shared/document-model";
|
|
5
4
|
import { fromString, toString } from "uint8arrays";
|
|
6
5
|
import { encodeDIDFromPub, getPublicKey } from "@didtools/key-webcrypto";
|
|
7
|
-
//#region src/utils.ts
|
|
8
|
-
/**
|
|
9
|
-
* Parse a DID:pkh string to extract network, chain ID, and address information
|
|
10
|
-
* @param did - The DID string in format "did:pkh:networkId:chainId:address"
|
|
11
|
-
* @returns Parsed DID information
|
|
12
|
-
* @throws Error if the DID format is invalid
|
|
13
|
-
*/
|
|
14
|
-
function parsePkhDid(did) {
|
|
15
|
-
const parts = did.split(":");
|
|
16
|
-
if (!did.startsWith("did:pkh:") || parts.length !== 5) throw new Error("Invalid pkh did");
|
|
17
|
-
const [, , networkId, chainIdStr, address] = parts;
|
|
18
|
-
if (!address.startsWith("0x")) throw new Error(`Invalid address: ${address}`);
|
|
19
|
-
const chainId = Number(chainIdStr);
|
|
20
|
-
if (isNaN(chainId)) throw new Error(`Invalid chain id: ${chainIdStr}`);
|
|
21
|
-
return {
|
|
22
|
-
chainId,
|
|
23
|
-
networkId,
|
|
24
|
-
address
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
async function verifyAuthBearerToken(jwt, options) {
|
|
28
|
-
try {
|
|
29
|
-
const now = parseInt(String(Date.now() / 1e3));
|
|
30
|
-
const verified = await verifyCredential(jwt, getResolver$1(), {
|
|
31
|
-
...options?.audience !== void 0 && { audience: options.audience },
|
|
32
|
-
policies: {
|
|
33
|
-
now: parseInt(String(Date.now() / 1e3)),
|
|
34
|
-
expirationDate: true,
|
|
35
|
-
issuanceDate: true
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
if (verified.payload.exp && verified.payload.exp < now) return false;
|
|
39
|
-
assertIsAuthCredential(verified);
|
|
40
|
-
return verified;
|
|
41
|
-
} catch (e) {
|
|
42
|
-
console.error(e);
|
|
43
|
-
return false;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
function assertIsAuthCredential(credential) {
|
|
47
|
-
const subjectKeys = Object.keys(credential.verifiableCredential.credentialSubject);
|
|
48
|
-
if (![
|
|
49
|
-
"address",
|
|
50
|
-
"chainId",
|
|
51
|
-
"networkId"
|
|
52
|
-
].every((key) => subjectKeys.includes(key))) throw new Error("Invalid Auth Credential Subject:" + JSON.stringify(credential.verifiableCredential.credentialSubject, null, 2));
|
|
53
|
-
}
|
|
54
|
-
async function createAuthBearerToken(chainId, networkId, address, issuer, options) {
|
|
55
|
-
return await createVerifiableCredentialJwt({
|
|
56
|
-
sub: issuer.did,
|
|
57
|
-
vc: {
|
|
58
|
-
"@context": ["https://www.w3.org/2018/credentials/v1"],
|
|
59
|
-
type: ["VerifiableCredential"],
|
|
60
|
-
credentialSubject: {
|
|
61
|
-
chainId,
|
|
62
|
-
networkId,
|
|
63
|
-
address
|
|
64
|
-
}
|
|
65
|
-
},
|
|
66
|
-
aud: options?.aud
|
|
67
|
-
}, issuer, { expiresIn: options?.expiresIn });
|
|
68
|
-
}
|
|
69
|
-
const getResolver$1 = () => {
|
|
70
|
-
const keyResolver = getResolver();
|
|
71
|
-
if (!keyResolver) throw new Error("Failed to get key resolver");
|
|
72
|
-
return new Resolver(keyResolver);
|
|
73
|
-
};
|
|
74
|
-
//#endregion
|
|
75
6
|
//#region src/crypto/utils.ts
|
|
76
7
|
const ECDSA_ALGORITHM = {
|
|
77
8
|
name: "ECDSA",
|
|
@@ -145,7 +76,8 @@ var RenownCrypto = class RenownCrypto {
|
|
|
145
76
|
return {
|
|
146
77
|
did: this.did,
|
|
147
78
|
signer: async (data) => {
|
|
148
|
-
|
|
79
|
+
const signature = await this.sign(typeof data === "string" ? new TextEncoder().encode(data) : data);
|
|
80
|
+
return toString(signature, "base64url");
|
|
149
81
|
},
|
|
150
82
|
alg: "ES256"
|
|
151
83
|
};
|
|
@@ -216,6 +148,9 @@ var InvalidSignatureError = class extends Error {
|
|
|
216
148
|
}
|
|
217
149
|
};
|
|
218
150
|
var RenownCryptoSigner = class {
|
|
151
|
+
crypto;
|
|
152
|
+
appName;
|
|
153
|
+
user;
|
|
219
154
|
app;
|
|
220
155
|
constructor(crypto, appName, user) {
|
|
221
156
|
this.crypto = crypto;
|
|
@@ -235,48 +170,45 @@ var RenownCryptoSigner = class {
|
|
|
235
170
|
async verify(data, signature) {
|
|
236
171
|
if (!await this.crypto.verify(data, signature)) throw new InvalidSignatureError();
|
|
237
172
|
}
|
|
238
|
-
async signAction(action, abortSignal) {
|
|
173
|
+
async signAction(action, target, abortSignal) {
|
|
239
174
|
const hashField = action.context?.prevOpHash ?? "";
|
|
240
|
-
return this._signAction(action, hashField, abortSignal);
|
|
175
|
+
return this._signAction(action, target, hashField, abortSignal);
|
|
241
176
|
}
|
|
242
177
|
/**
|
|
243
|
-
* Signs an action including a predicted resulting state hash
|
|
244
|
-
*
|
|
245
|
-
* The resulting hash is packed into the signature tuple's 4th element (index 3)
|
|
246
|
-
* using the format: `${prevStateHash}:${resultingStateHash}`
|
|
247
|
-
*
|
|
248
|
-
* This allows offline verification of documents without reducer logic:
|
|
249
|
-
* - Verifier can check that the signature is valid for the claimed resulting state
|
|
250
|
-
* - Verifier can compare claimed resulting state to actual operation.hash
|
|
251
|
-
*
|
|
252
|
-
* @param action - The action to sign
|
|
253
|
-
* @param resultingStateHash - The predicted hash of document state AFTER this action runs
|
|
254
|
-
* @param abortSignal - Optional abort signal
|
|
255
|
-
* @returns A Signature tuple with the resulting hash encoded in element [3]
|
|
178
|
+
* Signs an action including a predicted resulting state hash, packed into
|
|
179
|
+
* element [3] as `${prevStateHash}:${resultingStateHash}`.
|
|
256
180
|
*/
|
|
257
|
-
async signActionWithResultingState(action, resultingStateHash, abortSignal) {
|
|
181
|
+
async signActionWithResultingState(action, target, resultingStateHash, abortSignal) {
|
|
258
182
|
const hashField = `${action.context?.prevOpHash ?? ""}:${resultingStateHash}`;
|
|
259
|
-
return this._signAction(action, hashField, abortSignal);
|
|
183
|
+
return this._signAction(action, target, hashField, abortSignal);
|
|
260
184
|
}
|
|
261
185
|
/**
|
|
262
|
-
*
|
|
186
|
+
* The pre-v2 tuple, over scope, type and input only. For peers and tests
|
|
187
|
+
* that still need one; it binds neither the document nor the signer.
|
|
263
188
|
*/
|
|
264
|
-
async
|
|
265
|
-
if (abortSignal?.aborted) throw new Error("Signing aborted");
|
|
266
|
-
const timestamp = ((/* @__PURE__ */ new Date()).getTime() / 1e3).toFixed(0);
|
|
267
|
-
const hash = await this.hashAction(action);
|
|
189
|
+
async signActionLegacy(action, abortSignal) {
|
|
268
190
|
if (abortSignal?.aborted) throw new Error("Signing aborted");
|
|
269
191
|
const params = [
|
|
270
|
-
|
|
192
|
+
((/* @__PURE__ */ new Date()).getTime() / 1e3).toFixed(0),
|
|
271
193
|
this.crypto.did,
|
|
272
|
-
|
|
273
|
-
|
|
194
|
+
await this.hashAction(action),
|
|
195
|
+
action.context?.prevOpHash ?? ""
|
|
274
196
|
];
|
|
275
|
-
const
|
|
276
|
-
|
|
277
|
-
|
|
197
|
+
const signatureBytes = await this.crypto.sign(this.buildSignatureMessage(params));
|
|
198
|
+
if (abortSignal?.aborted) throw new Error("Signing aborted");
|
|
199
|
+
return [...params, `0x${this.arrayBufferToHex(signatureBytes)}`];
|
|
200
|
+
}
|
|
201
|
+
async _signAction(action, target, hashField, abortSignal) {
|
|
202
|
+
if (abortSignal?.aborted) throw new Error("Signing aborted");
|
|
203
|
+
const signature = await signActionV2({
|
|
204
|
+
action,
|
|
205
|
+
target,
|
|
206
|
+
signer: actionSignerIdentity(this),
|
|
207
|
+
sign: (message) => this.crypto.sign(message),
|
|
208
|
+
previousStateHash: hashField
|
|
209
|
+
});
|
|
278
210
|
if (abortSignal?.aborted) throw new Error("Signing aborted");
|
|
279
|
-
return
|
|
211
|
+
return signature;
|
|
280
212
|
}
|
|
281
213
|
async hashAction(action) {
|
|
282
214
|
const payload = [
|
|
@@ -361,7 +293,7 @@ function base58Decode(input) {
|
|
|
361
293
|
const ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
|
362
294
|
const ALPHABET_MAP = /* @__PURE__ */ new Map();
|
|
363
295
|
for (let i = 0; i < 58; i++) ALPHABET_MAP.set(ALPHABET[i], i);
|
|
364
|
-
if (input.length === 0) return new Uint8Array(0);
|
|
296
|
+
if (input.length === 0) return /* @__PURE__ */ new Uint8Array(0);
|
|
365
297
|
const bytes = [0];
|
|
366
298
|
for (const char of input) {
|
|
367
299
|
const value = ALPHABET_MAP.get(char);
|
|
@@ -394,7 +326,7 @@ function decompressP256PublicKey(compressed) {
|
|
|
394
326
|
for (let i = 1; i < compressed.length; i++) x = x << BigInt(8) | BigInt(compressed[i]);
|
|
395
327
|
let y = modPow((modPow(x, BigInt(3), p) + a * x + b) % p, (p + BigInt(1)) / BigInt(4), p);
|
|
396
328
|
if (y % BigInt(2) === BigInt(0) !== (prefix === 2)) y = p - y;
|
|
397
|
-
const uncompressed = new Uint8Array(65);
|
|
329
|
+
const uncompressed = /* @__PURE__ */ new Uint8Array(65);
|
|
398
330
|
uncompressed[0] = 4;
|
|
399
331
|
const xBytes = bigIntToBytes(x, 32);
|
|
400
332
|
const yBytes = bigIntToBytes(y, 32);
|
|
@@ -462,6 +394,6 @@ function signatureHasResultingHash(signature) {
|
|
|
462
394
|
return extractResultingHashFromSignature(signature) !== void 0;
|
|
463
395
|
}
|
|
464
396
|
//#endregion
|
|
465
|
-
export { signatureHasResultingHash as a, ConnectCrypto as c,
|
|
397
|
+
export { signatureHasResultingHash as a, ConnectCrypto as c, parseSignatureHashField as i, RenownCrypto as l, createSignatureVerifier as n, MemoryKeyStorage as o, extractResultingHashFromSignature as r, RenownCryptoBuilder as s, RenownCryptoSigner as t };
|
|
466
398
|
|
|
467
|
-
//# sourceMappingURL=signer-
|
|
399
|
+
//# sourceMappingURL=signer-GzTlZLjR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signer-GzTlZLjR.js","names":[],"sources":["../src/crypto/utils.ts","../src/crypto/renown-crypto.ts","../src/crypto/renown-crypto-builder.ts","../src/crypto/memory-key-storage.ts","../src/crypto/signer.ts"],"sourcesContent":["import { encodeDIDFromPub, getPublicKey } from \"@didtools/key-webcrypto\";\nimport type { DID, JwkKeyPair } from \"./types.js\";\n\nexport const ECDSA_ALGORITHM: EcKeyAlgorithm = {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n};\n\nexport const ECDSA_SIGN_ALGORITHM = {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n hash: \"SHA-256\",\n};\n\nexport async function parseDid(keyPair: CryptoKeyPair): Promise<DID> {\n return encodeDIDFromPub(await getPublicKey(keyPair)) as DID;\n}\n\nexport async function exportKeyPair(\n keyPair: CryptoKeyPair,\n subtleCrypto: SubtleCrypto,\n): Promise<JwkKeyPair> {\n return {\n publicKey: await subtleCrypto.exportKey(\"jwk\", keyPair.publicKey),\n privateKey: await subtleCrypto.exportKey(\"jwk\", keyPair.privateKey),\n };\n}\n\nexport async function importKeyPair(\n jwkKeyPair: JwkKeyPair,\n subtleCrypto: SubtleCrypto,\n algorithm: EcKeyAlgorithm = ECDSA_ALGORITHM,\n): Promise<CryptoKeyPair> {\n return {\n publicKey: await subtleCrypto.importKey(\n \"jwk\",\n jwkKeyPair.publicKey,\n algorithm,\n true,\n [\"verify\"],\n ),\n privateKey: await subtleCrypto.importKey(\n \"jwk\",\n jwkKeyPair.privateKey,\n algorithm,\n true,\n [\"sign\"],\n ),\n };\n}\n\nexport async function generateKeyPair(\n subtleCrypto: SubtleCrypto,\n algorithm: EcKeyAlgorithm = ECDSA_ALGORITHM,\n): Promise<CryptoKeyPair> {\n return subtleCrypto.generateKey(algorithm, true, [\"sign\", \"verify\"]);\n}\n","import { fromString, toString } from \"uint8arrays\";\nimport {\n DEFAULT_RENOWN_CHAIN_ID,\n DEFAULT_RENOWN_NETWORK_ID,\n} from \"../constants.js\";\nimport type { CreateBearerTokenOptions, Issuer } from \"../types.js\";\nimport { createAuthBearerToken } from \"../utils.js\";\nimport type { DID, IRenownCrypto, JsonWebKeyPairStorage } from \"./types.js\";\nimport { ECDSA_ALGORITHM, ECDSA_SIGN_ALGORITHM } from \"./utils.js\";\n\nexport class RenownCrypto implements IRenownCrypto {\n #subtleCrypto: SubtleCrypto;\n #keyPair: CryptoKeyPair;\n #keyPairStorage: JsonWebKeyPairStorage;\n\n readonly did: DID;\n /** Chain id the bearer token is scoped to; keep it equal to the issuing Renown instance's. */\n readonly chainId: number;\n\n static algorithm = ECDSA_ALGORITHM;\n static signAlgorithm = ECDSA_SIGN_ALGORITHM;\n\n constructor(\n keyPairStorage: JsonWebKeyPairStorage,\n crypto: SubtleCrypto,\n keyPair: CryptoKeyPair,\n did: DID,\n chainId = Number(DEFAULT_RENOWN_CHAIN_ID),\n ) {\n this.#keyPairStorage = keyPairStorage;\n this.#subtleCrypto = crypto;\n this.#keyPair = keyPair;\n this.did = did;\n this.chainId = chainId;\n }\n\n get publicKey() {\n return this.#keyPair.publicKey;\n }\n\n async getBearerToken(\n address: string | undefined,\n options?: CreateBearerTokenOptions,\n ): Promise<string> {\n return await createAuthBearerToken(\n this.chainId,\n DEFAULT_RENOWN_NETWORK_ID,\n address || this.did,\n this.issuer,\n options,\n );\n }\n\n async removeDid(): Promise<void> {\n await this.#keyPairStorage.removeKeyPair();\n }\n\n #stringToBytes(s: string): Uint8Array {\n return fromString(s, \"utf-8\");\n }\n\n async sign(data: Uint8Array | string): Promise<Uint8Array> {\n const dataBytes: Uint8Array =\n typeof data === \"string\" ? this.#stringToBytes(data) : data;\n\n const arrayBuffer = await this.#subtleCrypto.sign(\n RenownCrypto.signAlgorithm,\n this.#keyPair.privateKey,\n dataBytes.buffer as ArrayBuffer,\n );\n\n return new Uint8Array(arrayBuffer);\n }\n\n async verify(data: Uint8Array, signature: Uint8Array): Promise<boolean> {\n return this.#subtleCrypto.verify(\n { name: \"ECDSA\", hash: \"SHA-256\" },\n this.#keyPair.publicKey,\n signature.buffer as ArrayBuffer,\n data.buffer as ArrayBuffer,\n );\n }\n\n get issuer(): Issuer {\n return {\n did: this.did,\n signer: async (data: string | Uint8Array) => {\n const signature = await this.sign(\n typeof data === \"string\" ? new TextEncoder().encode(data) : data,\n );\n return toString(signature, \"base64url\");\n },\n alg: \"ES256\",\n };\n }\n}\n\n/**\n * @deprecated Use RenownCrypto instead\n */\nexport class ConnectCrypto extends RenownCrypto {}\n","import { RenownCrypto } from \"./renown-crypto.js\";\nimport type { JsonWebKeyPairStorage } from \"./types.js\";\nimport {\n exportKeyPair,\n generateKeyPair,\n importKeyPair,\n parseDid,\n} from \"./utils.js\";\n\nexport class RenownCryptoBuilder {\n private keyPairStorage?: JsonWebKeyPairStorage;\n private subtleCrypto?: SubtleCrypto;\n private chainId?: number;\n\n withKeyPairStorage(storage: JsonWebKeyPairStorage): this {\n this.keyPairStorage = storage;\n return this;\n }\n\n withSubtleCrypto(crypto: SubtleCrypto): this {\n this.subtleCrypto = crypto;\n return this;\n }\n\n // Scopes the bearer token to a chain (default 1). Match the Renown instance\n // issuing credentials, or the token and the credential disagree.\n withChainId(chainId: number): this {\n this.chainId = chainId;\n return this;\n }\n\n async build(): Promise<RenownCrypto> {\n if (!this.keyPairStorage) {\n throw new Error(\n \"KeyPairStorage is required. Use withKeyPairStorage() to set it.\",\n );\n }\n\n const subtleCrypto = this.subtleCrypto ?? globalThis.crypto.subtle;\n const keyPair = await this.#initializeKeyPair(\n subtleCrypto,\n this.keyPairStorage,\n );\n const did = await parseDid(keyPair);\n\n return new RenownCrypto(\n this.keyPairStorage,\n subtleCrypto,\n keyPair,\n did,\n this.chainId,\n );\n }\n\n async #initializeKeyPair(\n subtleCrypto: SubtleCrypto,\n keyPairStorage: JsonWebKeyPairStorage,\n ): Promise<CryptoKeyPair> {\n const loadedKeyPair = await keyPairStorage.loadKeyPair();\n if (loadedKeyPair) {\n return importKeyPair(loadedKeyPair, subtleCrypto);\n }\n\n const keyPair = await generateKeyPair(subtleCrypto);\n const exported = await exportKeyPair(keyPair, subtleCrypto);\n await keyPairStorage.saveKeyPair(exported);\n return keyPair;\n }\n}\n","import type { JsonWebKeyPairStorage, JwkKeyPair } from \"./types.js\";\n\nexport class MemoryKeyStorage implements JsonWebKeyPairStorage {\n private keyPair: JwkKeyPair | undefined;\n\n constructor(keyPair?: JwkKeyPair) {\n this.keyPair = keyPair;\n }\n\n loadKeyPair() {\n return Promise.resolve(this.keyPair);\n }\n\n saveKeyPair(keyPair: JwkKeyPair) {\n this.keyPair = keyPair;\n return Promise.resolve();\n }\n\n removeKeyPair() {\n this.keyPair = undefined;\n return Promise.resolve();\n }\n}\n","import type {\n Action,\n ActionSigningTarget,\n AppActionSigner,\n ISigner,\n Operation,\n Signature,\n SignatureVerificationHandler,\n UserActionSigner,\n} from \"@powerhousedao/shared/document-model\";\nimport {\n actionSignerIdentity,\n signActionV2,\n} from \"@powerhousedao/shared/document-model\";\nimport type { IRenownCrypto } from \"./index.js\";\n\nexport class InvalidSignatureError extends Error {\n constructor() {\n super(\"Invalid signature\");\n }\n}\n\nexport class RenownCryptoSigner implements ISigner {\n readonly app: AppActionSigner;\n\n constructor(\n private readonly crypto: IRenownCrypto,\n private readonly appName: string,\n public user?: UserActionSigner,\n ) {\n this.app = {\n key: this.crypto.did,\n name: this.appName,\n };\n }\n\n get publicKey() {\n return this.crypto.publicKey;\n }\n\n async sign(data: Uint8Array): Promise<Uint8Array> {\n return this.crypto.sign(data);\n }\n\n async verify(data: Uint8Array, signature: Uint8Array): Promise<void> {\n const isValid = await this.crypto.verify(data, signature);\n if (!isValid) {\n throw new InvalidSignatureError();\n }\n }\n\n async signAction(\n action: Action,\n target: ActionSigningTarget,\n abortSignal?: AbortSignal,\n ): Promise<Signature> {\n const hashField = action.context?.prevOpHash ?? \"\";\n return this._signAction(action, target, hashField, abortSignal);\n }\n\n /**\n * Signs an action including a predicted resulting state hash, packed into\n * element [3] as `${prevStateHash}:${resultingStateHash}`.\n */\n async signActionWithResultingState(\n action: Action,\n target: ActionSigningTarget,\n resultingStateHash: string,\n abortSignal?: AbortSignal,\n ): Promise<Signature> {\n const prevStateHash = action.context?.prevOpHash ?? \"\";\n const hashField = `${prevStateHash}:${resultingStateHash}`;\n return this._signAction(action, target, hashField, abortSignal);\n }\n\n /**\n * The pre-v2 tuple, over scope, type and input only. For peers and tests\n * that still need one; it binds neither the document nor the signer.\n */\n async signActionLegacy(\n action: Action,\n abortSignal?: AbortSignal,\n ): Promise<Signature> {\n if (abortSignal?.aborted) {\n throw new Error(\"Signing aborted\");\n }\n\n const params: [string, string, string, string] = [\n (new Date().getTime() / 1000).toFixed(0),\n this.crypto.did,\n await this.hashAction(action),\n action.context?.prevOpHash ?? \"\",\n ];\n const signatureBytes = await this.crypto.sign(\n this.buildSignatureMessage(params),\n );\n\n if (abortSignal?.aborted) {\n throw new Error(\"Signing aborted\");\n }\n return [...params, `0x${this.arrayBufferToHex(signatureBytes)}`];\n }\n\n private async _signAction(\n action: Action,\n target: ActionSigningTarget,\n hashField: string,\n abortSignal?: AbortSignal,\n ): Promise<Signature> {\n if (abortSignal?.aborted) {\n throw new Error(\"Signing aborted\");\n }\n\n const signature = await signActionV2({\n action,\n target,\n signer: actionSignerIdentity(this),\n sign: (message) => this.crypto.sign(message),\n previousStateHash: hashField,\n });\n\n if (abortSignal?.aborted) {\n throw new Error(\"Signing aborted\");\n }\n\n return signature;\n }\n\n private async hashAction(action: Action): Promise<string> {\n const payload = [\n action.scope,\n action.type,\n JSON.stringify(action.input),\n ].join(\"\");\n const encoder = new TextEncoder();\n const data = encoder.encode(payload);\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", data);\n return this.arrayBufferToBase64(hashBuffer);\n }\n\n private buildSignatureMessage(\n params: [string, string, string, string],\n ): Uint8Array {\n const message = params.join(\"\");\n const prefix = \"\\x19Signed Operation:\\n\" + message.length.toString();\n const encoder = new TextEncoder();\n return encoder.encode(prefix + message);\n }\n\n private arrayBufferToHex(buffer: Uint8Array | ArrayBuffer): string {\n const bytes =\n buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n return Array.from(bytes)\n .map((byte) => byte.toString(16).padStart(2, \"0\"))\n .join(\"\");\n }\n\n private arrayBufferToBase64(buffer: ArrayBuffer): string {\n const bytes = new Uint8Array(buffer);\n let binary = \"\";\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n }\n}\n\n/**\n * Creates a signature verification handler that verifies signatures using the Web Crypto API.\n * The verification uses ECDSA with P-256 curve and SHA-256 hash, matching the RenownCrypto signing algorithm.\n */\nexport function createSignatureVerifier(\n requireSignature = false,\n): SignatureVerificationHandler {\n return async (operation: Operation, publicKey: string): Promise<boolean> => {\n const signer = operation.action.context?.signer;\n if (!signer || !publicKey) {\n return !requireSignature;\n }\n\n const signatures = signer.signatures;\n if (signatures.length === 0) {\n return false;\n }\n\n const signature = signatures[signatures.length - 1];\n const [timestamp, signerKey, hash, prevStateHash, signatureHex] = signature;\n\n if (signerKey !== publicKey) {\n return false;\n }\n\n const params: [string, string, string, string] = [\n timestamp,\n signerKey,\n hash,\n prevStateHash,\n ];\n const message = buildSignatureMessage(params);\n const signatureBytes = hexToUint8Array(signatureHex);\n\n const cryptoKey = await importPublicKey(publicKey);\n\n const isValid = await crypto.subtle.verify(\n { name: \"ECDSA\", hash: \"SHA-256\" },\n cryptoKey,\n signatureBytes.buffer as ArrayBuffer,\n message.buffer as ArrayBuffer,\n );\n\n return isValid;\n };\n}\n\nfunction buildSignatureMessage(\n params: [string, string, string, string],\n): Uint8Array {\n const message = params.join(\"\");\n const prefix = \"\\x19Signed Operation:\\n\" + message.length.toString();\n const encoder = new TextEncoder();\n return encoder.encode(prefix + message);\n}\n\nfunction hexToUint8Array(hex: string): Uint8Array {\n const cleanHex = hex.startsWith(\"0x\") ? hex.slice(2) : hex;\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n bytes[i / 2] = parseInt(cleanHex.substring(i, i + 2), 16);\n }\n return bytes;\n}\n\nasync function importPublicKey(did: string): Promise<CryptoKey> {\n const keyData = extractKeyFromDid(did);\n return crypto.subtle.importKey(\n \"raw\",\n keyData.buffer as ArrayBuffer,\n { name: \"ECDSA\", namedCurve: \"P-256\" },\n true,\n [\"verify\"],\n );\n}\n\nfunction extractKeyFromDid(did: string): Uint8Array {\n const parts = did.split(\":\");\n if (parts.length < 3 || parts[0] !== \"did\" || parts[1] !== \"key\") {\n throw new Error(`Invalid DID format: ${did}`);\n }\n\n const multibaseKey = parts[2];\n if (!multibaseKey.startsWith(\"z\")) {\n throw new Error(`Unsupported multibase encoding: ${multibaseKey[0]}`);\n }\n\n const decoded = base58Decode(multibaseKey.slice(1));\n\n if (decoded[0] !== 0x80 || decoded[1] !== 0x24) {\n throw new Error(\"Not a P-256 public key multicodec\");\n }\n\n const compressedKey = decoded.slice(2);\n return decompressP256PublicKey(compressedKey);\n}\n\nfunction base58Decode(input: string): Uint8Array {\n const ALPHABET = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\n const ALPHABET_MAP = new Map<string, number>();\n for (let i = 0; i < ALPHABET.length; i++) {\n ALPHABET_MAP.set(ALPHABET[i], i);\n }\n\n if (input.length === 0) {\n return new Uint8Array(0);\n }\n\n const bytes: number[] = [0];\n for (const char of input) {\n const value = ALPHABET_MAP.get(char);\n if (value === undefined) {\n throw new Error(`Invalid base58 character: ${char}`);\n }\n\n let carry = value;\n for (let j = 0; j < bytes.length; j++) {\n carry += bytes[j] * 58;\n bytes[j] = carry & 0xff;\n carry >>= 8;\n }\n\n while (carry > 0) {\n bytes.push(carry & 0xff);\n carry >>= 8;\n }\n }\n\n for (const char of input) {\n if (char !== \"1\") break;\n bytes.push(0);\n }\n\n return new Uint8Array(bytes.reverse());\n}\n\nfunction decompressP256PublicKey(compressed: Uint8Array): Uint8Array {\n if (compressed.length !== 33) {\n throw new Error(`Invalid compressed key length: ${compressed.length}`);\n }\n\n const prefix = compressed[0];\n if (prefix !== 0x02 && prefix !== 0x03) {\n throw new Error(`Invalid compression prefix: ${prefix}`);\n }\n\n const p = BigInt(\n \"0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff\",\n );\n const a = BigInt(\n \"0xffffffff00000001000000000000000000000000fffffffffffffffffffffffc\",\n );\n const b = BigInt(\n \"0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b\",\n );\n\n let x = BigInt(0);\n for (let i = 1; i < compressed.length; i++) {\n x = (x << BigInt(8)) | BigInt(compressed[i]);\n }\n\n const ySquared = (modPow(x, BigInt(3), p) + a * x + b) % p;\n let y = modPow(ySquared, (p + BigInt(1)) / BigInt(4), p);\n\n const isYEven = y % BigInt(2) === BigInt(0);\n const shouldBeEven = prefix === 0x02;\n if (isYEven !== shouldBeEven) {\n y = p - y;\n }\n\n const uncompressed = new Uint8Array(65);\n uncompressed[0] = 0x04;\n\n const xBytes = bigIntToBytes(x, 32);\n const yBytes = bigIntToBytes(y, 32);\n\n uncompressed.set(xBytes, 1);\n uncompressed.set(yBytes, 33);\n\n return uncompressed;\n}\n\nfunction modPow(base: bigint, exp: bigint, mod: bigint): bigint {\n let result = BigInt(1);\n base = base % mod;\n while (exp > BigInt(0)) {\n if (exp % BigInt(2) === BigInt(1)) {\n result = (result * base) % mod;\n }\n exp = exp >> BigInt(1);\n base = (base * base) % mod;\n }\n return result;\n}\n\nfunction bigIntToBytes(n: bigint, length: number): Uint8Array {\n const bytes = new Uint8Array(length);\n for (let i = length - 1; i >= 0; i--) {\n bytes[i] = Number(n & BigInt(0xff));\n n = n >> BigInt(8);\n }\n return bytes;\n}\n\n/**\n * Parses the hash field (element [3]) from a signature tuple.\n *\n * Supports two formats:\n * - Old format: just `prevStateHash` (no colon)\n * - New format: `prevStateHash:resultingStateHash` (colon-separated)\n *\n * @param hashField - The 4th element of a Signature tuple\n * @returns Object with prevStateHash and optional resultingStateHash\n */\nexport function parseSignatureHashField(hashField: string): {\n prevStateHash: string;\n resultingStateHash: string | undefined;\n} {\n const colonIndex = hashField.indexOf(\":\");\n\n if (colonIndex === -1) {\n return {\n prevStateHash: hashField,\n resultingStateHash: undefined,\n };\n }\n\n return {\n prevStateHash: hashField.substring(0, colonIndex),\n resultingStateHash: hashField.substring(colonIndex + 1),\n };\n}\n\n/**\n * Extracts the resulting state hash from a signature, if present.\n *\n * @param signature - A Signature tuple\n * @returns The resulting state hash, or undefined if not present\n */\nexport function extractResultingHashFromSignature(\n signature: Signature,\n): string | undefined {\n const hashField = signature[3];\n const { resultingStateHash } = parseSignatureHashField(hashField);\n return resultingStateHash;\n}\n\n/**\n * Checks if a signature includes a resulting state hash.\n *\n * @param signature - A Signature tuple\n * @returns true if the signature includes a resulting state hash\n */\nexport function signatureHasResultingHash(signature: Signature): boolean {\n return extractResultingHashFromSignature(signature) !== undefined;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { yt as SwitchboardSource } from "./types-Ceiz2dkk.js";
|
|
2
|
+
import { ActionSigner } from "@powerhousedao/shared/document-model";
|
|
3
|
+
//#region src/discovery.d.ts
|
|
4
|
+
interface ResolveSwitchboardEndpointOptions {
|
|
5
|
+
switchboardUrl?: string;
|
|
6
|
+
baseUrl?: string;
|
|
7
|
+
timeoutMs?: number;
|
|
8
|
+
}
|
|
9
|
+
declare function resolveSwitchboardEndpoint(options: ResolveSwitchboardEndpointOptions): Promise<string | undefined>;
|
|
10
|
+
//#endregion
|
|
11
|
+
//#region src/signer-trust.d.ts
|
|
12
|
+
type SignerUser = ActionSigner["user"];
|
|
13
|
+
/** A signer whose `app.key` and `user` are read on every ask. */
|
|
14
|
+
interface RenownOwnSigner {
|
|
15
|
+
readonly app?: {
|
|
16
|
+
readonly key: string;
|
|
17
|
+
};
|
|
18
|
+
readonly user?: SignerUser;
|
|
19
|
+
}
|
|
20
|
+
interface RenownTrustPolicyOptions {
|
|
21
|
+
/** Serves the renown read model; without it, Renown's REST API is read. */
|
|
22
|
+
switchboard?: SwitchboardSource;
|
|
23
|
+
/** Renown base URL for the REST lookup. Defaults to DEFAULT_RENOWN_URL. */
|
|
24
|
+
renownUrl?: string;
|
|
25
|
+
/** This node's signer, read on every ask; its key signing as its current user is accepted without a lookup. Wins over `self`. */
|
|
26
|
+
ownSigner?: RenownOwnSigner;
|
|
27
|
+
/**
|
|
28
|
+
* A snapshot of this node's key and user, for a pooled worker whose signer
|
|
29
|
+
* cannot cross the thread boundary. Only matches the worker's own key.
|
|
30
|
+
*/
|
|
31
|
+
self?: {
|
|
32
|
+
key: string;
|
|
33
|
+
user: SignerUser;
|
|
34
|
+
};
|
|
35
|
+
/** How many acceptances are remembered. Defaults to 10000. */
|
|
36
|
+
maxAccepted?: number;
|
|
37
|
+
/** How long a refusal is remembered before asking again. Defaults to 60s. */
|
|
38
|
+
refusalTtlMs?: number;
|
|
39
|
+
}
|
|
40
|
+
/** Structurally a reactor `SignatureTrustPolicy`. */
|
|
41
|
+
interface RenownTrustPolicy {
|
|
42
|
+
authorizeSigner(signer: ActionSigner, key: string, documentId: string): Promise<boolean>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Accepts a key the user's EIP-712 Renown credential delegates to, ignoring
|
|
46
|
+
* expiry and revocation. Verdicts are cached per (address, key); this node's
|
|
47
|
+
* own key is checked before the cache and never cached.
|
|
48
|
+
*/
|
|
49
|
+
declare function createRenownTrustPolicy(options?: RenownTrustPolicyOptions): RenownTrustPolicy;
|
|
50
|
+
//#endregion
|
|
51
|
+
export { ResolveSwitchboardEndpointOptions as a, createRenownTrustPolicy as i, RenownTrustPolicy as n, resolveSwitchboardEndpoint as o, RenownTrustPolicyOptions as r, RenownOwnSigner as t };
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=signer-trust-FmbMTn39.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signer-trust-FmbMTn39.d.ts","names":[],"sources":["../src/discovery.ts","../src/signer-trust.ts"],"mappings":";;;UAAiB;EAEf;EAEA;EAEA;;iBAcoB,2BACpB,SAAS,oCACR;;;KChBE,aAAa;;UAGD;WACN;aAAiB;;WACjB,OAAO;;UAGD;;EAEf,cAAc;;EAEd;;EAEA,YAAY;;;;;EAKZ;IAAS;IAAa,MAAM;;;EAE5B;;EAEA;;;UAIe;EACf,gBACE,QAAQ,cACR,aACA,qBACC;;;;;;;iBAWW,wBACd,UAAS,2BACR"}
|