@renown/sdk 5.0.1-staging.4 → 5.0.1-staging.6
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.
|
@@ -25,7 +25,7 @@ export declare class ConnectCrypto implements IConnectCrypto {
|
|
|
25
25
|
namedCurve: string;
|
|
26
26
|
hash: string;
|
|
27
27
|
};
|
|
28
|
-
constructor(keyPairStorage: JsonWebKeyPairStorage);
|
|
28
|
+
constructor(keyPairStorage: JsonWebKeyPairStorage, crypto?: SubtleCrypto);
|
|
29
29
|
getBearerToken(driveUrl: string, address: string | undefined, refresh?: boolean, options?: CreateBearerTokenOptions): Promise<string>;
|
|
30
30
|
did(): Promise<`did:${string}`>;
|
|
31
31
|
regenerateDid(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/crypto/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAOzC,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAK7D,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,EAAE,UAAU,CAAC;IACtB,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,WAAW,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;IAC/C,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAQD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IACxB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAChD,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACjC,cAAc,EAAE,CACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,CAAC,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,wBAAwB,KAC/B,OAAO,CAAC,MAAM,CAAC,CAAC;CACtB;AAED,MAAM,MAAM,GAAG,GAAG,OAAO,MAAM,EAAE,CAAC;AAElC,qBAAa,aAAc,YAAW,cAAc;;IAQlD,MAAM,CAAC,SAAS,EAAE,cAAc,CAG9B;IAEF,MAAM,CAAC,aAAa;;;;MAIlB;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/crypto/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAOzC,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAK7D,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,EAAE,UAAU,CAAC;IACtB,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,WAAW,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;IAC/C,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAQD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IACxB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAChD,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACjC,cAAc,EAAE,CACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,CAAC,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,wBAAwB,KAC/B,OAAO,CAAC,MAAM,CAAC,CAAC;CACtB;AAED,MAAM,MAAM,GAAG,GAAG,OAAO,MAAM,EAAE,CAAC;AAElC,qBAAa,aAAc,YAAW,cAAc;;IAQlD,MAAM,CAAC,SAAS,EAAE,cAAc,CAG9B;IAEF,MAAM,CAAC,aAAa;;;;MAIlB;gBAGA,cAAc,EAAE,qBAAqB,EACrC,MAAM,GAAE,YAAuC;IAsB3C,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,UAAQ,EACf,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,MAAM,CAAC;IAmBlB,GAAG;IAIG,aAAa;IAmFb,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAiBpD,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;CAgBnC"}
|
package/dist/src/crypto/index.js
CHANGED
|
@@ -27,29 +27,11 @@ export class ConnectCrypto {
|
|
|
27
27
|
namedCurve: "P-256",
|
|
28
28
|
hash: "SHA-256",
|
|
29
29
|
};
|
|
30
|
-
constructor(keyPairStorage) {
|
|
30
|
+
constructor(keyPairStorage, crypto = globalThis.crypto.subtle) {
|
|
31
31
|
this.#keyPairStorage = keyPairStorage;
|
|
32
|
-
|
|
33
|
-
this.#subtleCrypto = this.#initCrypto();
|
|
32
|
+
this.#subtleCrypto = crypto;
|
|
34
33
|
this.#did = this.#initialize();
|
|
35
34
|
}
|
|
36
|
-
#initCrypto() {
|
|
37
|
-
return new Promise((resolve, reject) => {
|
|
38
|
-
if (typeof window === "undefined") {
|
|
39
|
-
import("node:crypto")
|
|
40
|
-
.then((module) => {
|
|
41
|
-
resolve(module.webcrypto.subtle);
|
|
42
|
-
})
|
|
43
|
-
.catch(reject);
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
if (!window?.crypto.subtle) {
|
|
47
|
-
reject(new Error("Crypto module not available"));
|
|
48
|
-
}
|
|
49
|
-
resolve(window.crypto.subtle);
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
35
|
// loads the key pair from storage or generates a new one if none is stored
|
|
54
36
|
async #initialize() {
|
|
55
37
|
const loadedKeyPair = await this.#keyPairStorage.loadKeyPair();
|
|
@@ -84,8 +66,7 @@ export class ConnectCrypto {
|
|
|
84
66
|
if (!this.#keyPair) {
|
|
85
67
|
throw new Error("No key pair available");
|
|
86
68
|
}
|
|
87
|
-
const
|
|
88
|
-
const publicKeyRaw = await subtleCrypto.exportKey("raw", this.#keyPair.publicKey);
|
|
69
|
+
const publicKeyRaw = await this.#subtleCrypto.exportKey("raw", this.#keyPair.publicKey);
|
|
89
70
|
const multicodecName = "p256-pub";
|
|
90
71
|
const rawKey = rawKeyInHexfromUncompressed(ab2hex(publicKeyRaw));
|
|
91
72
|
const compressedKey = compressedKeyInHexfromRaw(rawKey);
|
|
@@ -93,33 +74,30 @@ export class ConnectCrypto {
|
|
|
93
74
|
return did;
|
|
94
75
|
}
|
|
95
76
|
async #generateECDSAKeyPair() {
|
|
96
|
-
const
|
|
97
|
-
const keyPair = await subtleCrypto.generateKey(ConnectCrypto.algorithm, true, ["sign", "verify"]);
|
|
77
|
+
const keyPair = await this.#subtleCrypto.generateKey(ConnectCrypto.algorithm, true, ["sign", "verify"]);
|
|
98
78
|
return keyPair;
|
|
99
79
|
}
|
|
100
80
|
async #exportKeyPair() {
|
|
101
81
|
if (!this.#keyPair) {
|
|
102
82
|
throw new Error("No key pair available");
|
|
103
83
|
}
|
|
104
|
-
const subtleCrypto = await this.#subtleCrypto;
|
|
105
84
|
const jwkKeyPair = {
|
|
106
|
-
publicKey: await subtleCrypto.exportKey("jwk", this.#keyPair.publicKey),
|
|
107
|
-
privateKey: await subtleCrypto.exportKey("jwk", this.#keyPair.privateKey),
|
|
85
|
+
publicKey: await this.#subtleCrypto.exportKey("jwk", this.#keyPair.publicKey),
|
|
86
|
+
privateKey: await this.#subtleCrypto.exportKey("jwk", this.#keyPair.privateKey),
|
|
108
87
|
};
|
|
109
88
|
return jwkKeyPair;
|
|
110
89
|
}
|
|
111
90
|
async #importKeyPair(jwkKeyPair) {
|
|
112
|
-
const subtleCrypto = await this.#subtleCrypto;
|
|
113
91
|
return {
|
|
114
|
-
publicKey: await subtleCrypto.importKey("jwk", jwkKeyPair.publicKey, ConnectCrypto.algorithm, true, ["verify"]),
|
|
115
|
-
privateKey: await subtleCrypto.importKey("jwk", jwkKeyPair.privateKey, ConnectCrypto.algorithm, true, ["sign"]),
|
|
92
|
+
publicKey: await this.#subtleCrypto.importKey("jwk", jwkKeyPair.publicKey, ConnectCrypto.algorithm, true, ["verify"]),
|
|
93
|
+
privateKey: await this.#subtleCrypto.importKey("jwk", jwkKeyPair.privateKey, ConnectCrypto.algorithm, true, ["sign"]),
|
|
116
94
|
};
|
|
117
95
|
}
|
|
118
96
|
#sign = async (...args) => {
|
|
119
|
-
return
|
|
97
|
+
return await this.#subtleCrypto.sign(...args);
|
|
120
98
|
};
|
|
121
99
|
#verify = async (...args) => {
|
|
122
|
-
return
|
|
100
|
+
return await this.#subtleCrypto.verify(...args);
|
|
123
101
|
};
|
|
124
102
|
#stringToBytes(s) {
|
|
125
103
|
return fromString(s, "utf-8");
|
|
@@ -127,8 +105,7 @@ export class ConnectCrypto {
|
|
|
127
105
|
async sign(data) {
|
|
128
106
|
if (this.#keyPair?.privateKey) {
|
|
129
107
|
const dataBytes = typeof data === "string" ? this.#stringToBytes(data) : data;
|
|
130
|
-
const
|
|
131
|
-
const arrayBuffer = await subtleCrypto.sign(ConnectCrypto.signAlgorithm, this.#keyPair.privateKey, dataBytes.buffer);
|
|
108
|
+
const arrayBuffer = await this.#subtleCrypto.sign(ConnectCrypto.signAlgorithm, this.#keyPair.privateKey, dataBytes.buffer);
|
|
132
109
|
return new Uint8Array(arrayBuffer);
|
|
133
110
|
}
|
|
134
111
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/crypto/index.ts"],"names":[],"mappings":"AAAA,oDAAoD;AAEpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,qBAAqB,GAEtB,MAAM,aAAa,CAAC;AAErB,qDAAqD;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AACnC,MAAM,eAAe,GAAG,CAAC,CAAC;AAY1B,SAAS,MAAM,CAAC,EAAe;IAC7B,OAAO,KAAK,CAAC,SAAS,CAAC,GAAG;SACvB,IAAI,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SAC1E,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAiBD,MAAM,OAAO,aAAa;IACxB,aAAa,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/crypto/index.ts"],"names":[],"mappings":"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"}
|