@solana/webcrypto-ed25519-polyfill 2.0.0-rc.0 → 2.0.0-rc.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 +4 -4
- package/dist/index.browser.cjs +72 -11
- package/dist/index.browser.cjs.map +1 -1
- package/dist/index.browser.mjs +72 -11
- package/dist/index.browser.mjs.map +1 -1
- package/dist/index.native.mjs +72 -11
- package/dist/index.native.mjs.map +1 -1
- package/dist/index.node.cjs +72 -11
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.mjs +72 -11
- package/dist/index.node.mjs.map +1 -1
- package/dist/types/index.d.ts +1 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/secrets.d.ts +2 -1
- package/dist/types/secrets.d.ts.map +1 -1
- package/package.json +13 -2
package/dist/index.browser.mjs
CHANGED
|
@@ -110,6 +110,14 @@ async function getPublicKeyBytes(key) {
|
|
|
110
110
|
publicKeyStore.set(key, publicKeyBytes);
|
|
111
111
|
return publicKeyBytes;
|
|
112
112
|
}
|
|
113
|
+
function base64UrlEncode(bytes) {
|
|
114
|
+
return btoa(Array.from(bytes, (b) => String.fromCharCode(b)).join("")).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
115
|
+
}
|
|
116
|
+
function base64UrlDecode(value) {
|
|
117
|
+
const m = value.length % 4;
|
|
118
|
+
const base64Value = value.replace(/-/g, "+").replace(/_/g, "/").padEnd(value.length + (m === 0 ? 0 : 4 - m), "=");
|
|
119
|
+
return Uint8Array.from(atob(base64Value), (c) => c.charCodeAt(0));
|
|
120
|
+
}
|
|
113
121
|
async function exportKeyPolyfill(format, key) {
|
|
114
122
|
if (key.extractable === false) {
|
|
115
123
|
throw new DOMException("key is not extractable", "InvalidAccessException");
|
|
@@ -129,6 +137,24 @@ async function exportKeyPolyfill(format, key) {
|
|
|
129
137
|
const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);
|
|
130
138
|
return new Uint8Array([...ED25519_PKCS8_HEADER, ...secretKeyBytes]);
|
|
131
139
|
}
|
|
140
|
+
case "jwk": {
|
|
141
|
+
const publicKeyBytes = await getPublicKeyBytes(key);
|
|
142
|
+
const base = {
|
|
143
|
+
crv: "Ed25519",
|
|
144
|
+
ext: key.extractable,
|
|
145
|
+
key_ops: key.usages,
|
|
146
|
+
kty: "OKP",
|
|
147
|
+
x: base64UrlEncode(publicKeyBytes)
|
|
148
|
+
};
|
|
149
|
+
if (key.type === "private") {
|
|
150
|
+
const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);
|
|
151
|
+
return Object.freeze({
|
|
152
|
+
...base,
|
|
153
|
+
d: base64UrlEncode(secretKeyBytes)
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
return Object.freeze({ ...base });
|
|
157
|
+
}
|
|
132
158
|
default:
|
|
133
159
|
throw new Error(`Exporting polyfilled Ed25519 keys in the "${format}" format is unimplemented`);
|
|
134
160
|
}
|
|
@@ -161,12 +187,19 @@ async function verifyPolyfill(key, signature, data) {
|
|
|
161
187
|
return false;
|
|
162
188
|
}
|
|
163
189
|
}
|
|
190
|
+
function assertValidKeyUsages(keyUsages, type) {
|
|
191
|
+
const prohibitedKeyUses = /* @__PURE__ */ new Set([
|
|
192
|
+
...type === "private" ? ["verify"] : ["sign"],
|
|
193
|
+
...PROHIBITED_KEY_USAGES
|
|
194
|
+
]);
|
|
195
|
+
if (keyUsages.some((usage) => prohibitedKeyUses.has(usage))) {
|
|
196
|
+
throw new DOMException("Unsupported key usage for a Ed25519 key", "SyntaxError");
|
|
197
|
+
}
|
|
198
|
+
}
|
|
164
199
|
function importKeyPolyfill(format, keyData, extractable, keyUsages) {
|
|
165
|
-
const bytes = bufferSourceToUint8Array(keyData);
|
|
166
200
|
if (format === "raw") {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
}
|
|
201
|
+
const bytes = bufferSourceToUint8Array(keyData);
|
|
202
|
+
assertValidKeyUsages(keyUsages, "public");
|
|
170
203
|
if (bytes.length !== 32) {
|
|
171
204
|
throw new DOMException("Ed25519 raw keys must be exactly 32-bytes", "DataError");
|
|
172
205
|
}
|
|
@@ -182,9 +215,8 @@ function importKeyPolyfill(format, keyData, extractable, keyUsages) {
|
|
|
182
215
|
return publicKey;
|
|
183
216
|
}
|
|
184
217
|
if (format === "pkcs8") {
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
}
|
|
218
|
+
const bytes = bufferSourceToUint8Array(keyData);
|
|
219
|
+
assertValidKeyUsages(keyUsages, "private");
|
|
188
220
|
if (bytes.length !== 48) {
|
|
189
221
|
throw new DOMException("Invalid keyData", "DataError");
|
|
190
222
|
}
|
|
@@ -204,6 +236,38 @@ function importKeyPolyfill(format, keyData, extractable, keyUsages) {
|
|
|
204
236
|
cache.set(privateKey, secretKeyBytes);
|
|
205
237
|
return privateKey;
|
|
206
238
|
}
|
|
239
|
+
if (format === "jwk") {
|
|
240
|
+
const jwk = keyData;
|
|
241
|
+
const type = "d" in jwk ? "private" : "public";
|
|
242
|
+
assertValidKeyUsages(keyUsages, type);
|
|
243
|
+
const keyOps = new Set(jwk.key_ops ?? []);
|
|
244
|
+
const sameKeyUsages = keyUsages.length === keyOps.size && [...keyUsages].every((x) => keyOps.has(x));
|
|
245
|
+
if (jwk.kty !== "OKP" || jwk.crv !== "Ed25519" || jwk.ext !== extractable || !sameKeyUsages) {
|
|
246
|
+
throw new DOMException("Invalid Ed25519 JWK", "DataError");
|
|
247
|
+
}
|
|
248
|
+
if (type === "public" && !jwk.x) {
|
|
249
|
+
throw new DOMException("Ed25519 JWK is missing public key coordinates", "DataError");
|
|
250
|
+
}
|
|
251
|
+
if (type === "private" && !jwk.d) {
|
|
252
|
+
throw new DOMException("Ed25519 JWK is missing private key coordinates", "DataError");
|
|
253
|
+
}
|
|
254
|
+
const usageToKeep = type === "public" ? "verify" : "sign";
|
|
255
|
+
const key = Object.freeze({
|
|
256
|
+
[Symbol.toStringTag]: "CryptoKey",
|
|
257
|
+
algorithm: Object.freeze({ name: "Ed25519" }),
|
|
258
|
+
extractable,
|
|
259
|
+
type,
|
|
260
|
+
usages: Object.freeze(keyUsages.filter((usage) => usage === usageToKeep))
|
|
261
|
+
});
|
|
262
|
+
if (type === "public") {
|
|
263
|
+
const cache = publicKeyBytesStore ||= /* @__PURE__ */ new WeakMap();
|
|
264
|
+
cache.set(key, base64UrlDecode(jwk.x));
|
|
265
|
+
} else {
|
|
266
|
+
const cache = storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= /* @__PURE__ */ new WeakMap();
|
|
267
|
+
cache.set(key, base64UrlDecode(jwk.d));
|
|
268
|
+
}
|
|
269
|
+
return key;
|
|
270
|
+
}
|
|
207
271
|
throw new Error(`Importing Ed25519 keys in the "${format}" format is unimplemented`);
|
|
208
272
|
}
|
|
209
273
|
|
|
@@ -344,9 +408,6 @@ function install() {
|
|
|
344
408
|
}
|
|
345
409
|
}
|
|
346
410
|
|
|
347
|
-
|
|
348
|
-
var src_default = install;
|
|
349
|
-
|
|
350
|
-
export { src_default as default };
|
|
411
|
+
export { install };
|
|
351
412
|
//# sourceMappingURL=index.browser.mjs.map
|
|
352
413
|
//# sourceMappingURL=index.browser.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/secrets.ts","../src/install.ts","../src/index.ts"],"names":["_"],"mappings":";;;AAiBA,IAAM,qBAAA,uBAA4B,GAAc,CAAA;AAAA,EAC5C,SAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AACJ,CAAC,CAAA,CAAA;AAED,IAAM,oBAAA;AAAA;AAAA,EAEF;AAAA;AAAA;AAAA;AAAA,IAII,EAAA;AAAA;AAAA,IACA,EAAA;AAAA;AAAA,IAEI,CAAA;AAAA;AAAA,IACA,CAAA;AAAA;AAAA,IACI,CAAA;AAAA;AAAA,IAEJ,EAAA;AAAA;AAAA,IACA,CAAA;AAAA;AAAA,IACI,CAAA;AAAA;AAAA,IACA,CAAA;AAAA;AAAA;AAAA,IAEQ,EAAA;AAAA;AAAA,IACA,GAAA;AAAA;AAAA;AAAA,IAEA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKhB,CAAA;AAAA;AAAA,IACA,EAAA;AAAA;AAAA;AAAA,IAGI,CAAA;AAAA;AAAA,IACA,EAAA;AAAA;AAAA,GACR;AAAA,CAAA,CAAA;AAEJ,SAAS,yBAAyB,IAAgC,EAAA;AAC9D,EAAO,OAAA,IAAA,YAAgB,UAAa,GAAA,IAAA,GAAO,IAAI,UAAA,CAAW,WAAY,CAAA,MAAA,CAAO,IAAI,CAAA,GAAI,IAAK,CAAA,MAAA,GAAS,IAAI,CAAA,CAAA;AAC3G,CAAA;AAEA,IAAI,iDAAA,CAAA;AAGJ,IAAI,mBAAA,CAAA;AAEJ,SAAS,sBAAA,CACL,KACA,EAAA,WAAA,EACA,SACa,EAAA;AACb,EAAM,MAAA,OAAA,GAAU,yCAA0C,CAAA,WAAA,EAAa,SAAS,CAAA,CAAA;AAChF,EAAM,MAAA,KAAA,GAAS,iDAAsD,qBAAA,IAAI,OAAQ,EAAA,CAAA;AACjF,EAAM,KAAA,CAAA,GAAA,CAAI,OAAQ,CAAA,UAAA,EAAY,KAAK,CAAA,CAAA;AACnC,EAAM,KAAA,CAAA,GAAA,CAAI,OAAQ,CAAA,SAAA,EAAW,KAAK,CAAA,CAAA;AAClC,EAAO,OAAA,OAAA,CAAA;AACX,CAAA;AAEA,SAAS,yCAAA,CACL,aACA,SACa,EAAA;AACb,EAAI,IAAA,SAAA,CAAU,WAAW,CAAG,EAAA;AACxB,IAAM,MAAA,IAAI,YAAa,CAAA,6CAAA,EAA+C,aAAa,CAAA,CAAA;AAAA,GACvF;AACA,EAAA,IAAI,UAAU,IAAK,CAAA,CAAA,KAAA,KAAS,sBAAsB,GAAI,CAAA,KAAK,CAAC,CAAG,EAAA;AAC3D,IAAM,MAAA,IAAI,YAAa,CAAA,2CAAA,EAA6C,aAAa,CAAA,CAAA;AAAA,GACrF;AACA,EAAA,MAAM,IAAO,GAAA;AAAA,IACT,CAAC,MAAO,CAAA,WAAW,GAAG,WAAA;AAAA,IACtB,WAAW,MAAO,CAAA,MAAA,CAAO,EAAE,IAAA,EAAM,WAAW,CAAA;AAAA,GAChD,CAAA;AACA,EAAA,MAAM,UAAa,GAAA;AAAA,IACf,GAAG,IAAA;AAAA,IACH,WAAA;AAAA,IACA,IAAM,EAAA,SAAA;AAAA,IACN,MAAA,EAAQ,OAAO,MAAO,CAAA,SAAA,CAAU,OAAO,CAAS,KAAA,KAAA,KAAA,KAAU,MAAM,CAAC,CAAA;AAAA,GACrE,CAAA;AACA,EAAA,MAAM,SAAY,GAAA;AAAA,IACd,GAAG,IAAA;AAAA,IACH,WAAa,EAAA,IAAA;AAAA,IACb,IAAM,EAAA,QAAA;AAAA,IACN,MAAA,EAAQ,OAAO,MAAO,CAAA,SAAA,CAAU,OAAO,CAAS,KAAA,KAAA,KAAA,KAAU,QAAQ,CAAC,CAAA;AAAA,GACvE,CAAA;AACA,EAAA,OAAO,OAAO,MAAO,CAAA;AAAA,IACjB,UAAA,EAAY,MAAO,CAAA,MAAA,CAAO,UAAU,CAAA;AAAA,IACpC,SAAA,EAAW,MAAO,CAAA,MAAA,CAAO,SAAS,CAAA;AAAA,GACrC,CAAA,CAAA;AACL,CAAA;AAEA,SAAS,8CAA8C,GAA4B,EAAA;AAC/E,EAAM,MAAA,cAAA,GAAiB,iDAAmD,EAAA,GAAA,CAAI,GAAG,CAAA,CAAA;AACjF,EAAA,IAAI,mBAAmB,KAAW,CAAA,EAAA;AAC9B,IAAM,MAAA,IAAI,MAAM,qEAAqE,CAAA,CAAA;AAAA,GACzF;AACA,EAAO,OAAA,cAAA,CAAA;AACX,CAAA;AAEA,eAAe,kBAAkB,GAAqC,EAAA;AAElE,EAAM,MAAA,cAAA,GAAkB,mBAAwB,qBAAA,IAAI,OAAQ,EAAA,CAAA;AAC5D,EAAM,MAAA,eAAA,GAAkB,cAAe,CAAA,GAAA,CAAI,GAAG,CAAA,CAAA;AAC9C,EAAA,IAAI,iBAAwB,OAAA,eAAA,CAAA;AAG5B,EAAA,MAAM,cAAiB,GAAA,MAAM,iBAAkB,CAAA,6CAAA,CAA8C,GAAG,CAAC,CAAA,CAAA;AAGjG,EAAe,cAAA,CAAA,GAAA,CAAI,KAAK,cAAc,CAAA,CAAA;AACtC,EAAO,OAAA,cAAA,CAAA;AACX,CAAA;AAIA,eAAsB,iBAAA,CAAkB,QAAmB,GAAmD,EAAA;AAC1G,EAAI,IAAA,GAAA,CAAI,gBAAgB,KAAO,EAAA;AAC3B,IAAM,MAAA,IAAI,YAAa,CAAA,wBAAA,EAA0B,wBAAwB,CAAA,CAAA;AAAA,GAC7E;AACA,EAAA,QAAQ,MAAQ;AAAA,IACZ,KAAK,KAAO,EAAA;AACR,MAAI,IAAA,GAAA,CAAI,SAAS,QAAU,EAAA;AACvB,QAAA,MAAM,IAAI,YAAa,CAAA,CAAA,+BAAA,EAAkC,GAAI,CAAA,IAAI,QAAQ,oBAAoB,CAAA,CAAA;AAAA,OACjG;AACA,MAAM,MAAA,cAAA,GAAiB,MAAM,iBAAA,CAAkB,GAAG,CAAA,CAAA;AAClD,MAAO,OAAA,cAAA,CAAA;AAAA,KACX;AAAA,IACA,KAAK,OAAS,EAAA;AACV,MAAI,IAAA,GAAA,CAAI,SAAS,SAAW,EAAA;AACxB,QAAA,MAAM,IAAI,YAAa,CAAA,CAAA,iCAAA,EAAoC,GAAI,CAAA,IAAI,QAAQ,oBAAoB,CAAA,CAAA;AAAA,OACnG;AACA,MAAM,MAAA,cAAA,GAAiB,8CAA8C,GAAG,CAAA,CAAA;AACxE,MAAA,OAAO,IAAI,UAAW,CAAA,CAAC,GAAG,oBAAsB,EAAA,GAAG,cAAc,CAAC,CAAA,CAAA;AAAA,KACtE;AAAA,IACA;AACI,MAAA,MAAM,IAAI,KAAA,CAAM,CAA6C,0CAAA,EAAA,MAAM,CAA2B,yBAAA,CAAA,CAAA,CAAA;AAAA,GACtG;AACJ,CAAA;AAQO,SAAS,mBAAA,CAAoB,aAAsB,SAA+C,EAAA;AACrG,EAAM,MAAA,eAAA,GAAkB,MAAM,gBAAiB,EAAA,CAAA;AAC/C,EAAA,MAAM,OAAU,GAAA,sBAAA,CAAuB,eAAiB,EAAA,WAAA,EAAa,SAAS,CAAA,CAAA;AAC9E,EAAO,OAAA,OAAA,CAAA;AACX,CAAA;AAEO,SAAS,gBAAgB,GAAyB,EAAA;AACrD,EAAO,OAAA,CAAC,CAAC,iDAAA,EAAmD,GAAI,CAAA,GAAG,KAAK,CAAC,CAAC,mBAAqB,EAAA,GAAA,CAAI,GAAG,CAAA,CAAA;AAC1G,CAAA;AAEA,eAAsB,YAAA,CAAa,KAAgB,IAA0C,EAAA;AACzF,EAAI,IAAA,GAAA,CAAI,SAAS,SAAa,IAAA,CAAC,IAAI,MAAO,CAAA,QAAA,CAAS,MAAM,CAAG,EAAA;AACxD,IAAM,MAAA,IAAI,YAAa,CAAA,gCAAA,EAAkC,oBAAoB,CAAA,CAAA;AAAA,GACjF;AACA,EAAM,MAAA,eAAA,GAAkB,8CAA8C,GAAG,CAAA,CAAA;AACzE,EAAM,MAAA,OAAA,GAAU,yBAAyB,IAAI,CAAA,CAAA;AAC7C,EAAA,MAAM,SAAY,GAAA,MAAM,SAAU,CAAA,OAAA,EAAS,eAAe,CAAA,CAAA;AAC1D,EAAO,OAAA,SAAA,CAAA;AACX,CAAA;AAEA,eAAsB,cAAA,CAAe,GAAgB,EAAA,SAAA,EAAyB,IAAsC,EAAA;AAChH,EAAI,IAAA,GAAA,CAAI,SAAS,QAAY,IAAA,CAAC,IAAI,MAAO,CAAA,QAAA,CAAS,QAAQ,CAAG,EAAA;AACzD,IAAM,MAAA,IAAI,YAAa,CAAA,kCAAA,EAAoC,oBAAoB,CAAA,CAAA;AAAA,GACnF;AACA,EAAM,MAAA,cAAA,GAAiB,MAAM,iBAAA,CAAkB,GAAG,CAAA,CAAA;AAClD,EAAI,IAAA;AACA,IAAO,OAAA,MAAM,YAAY,wBAAyB,CAAA,SAAS,GAAG,wBAAyB,CAAA,IAAI,GAAG,cAAc,CAAA,CAAA;AAAA,GACxG,CAAA,MAAA;AACJ,IAAO,OAAA,KAAA,CAAA;AAAA,GACX;AACJ,CAAA;AAEO,SAAS,iBACZ,CAAA,MAAA,EACA,OACA,EAAA,WAAA,EACA,SACS,EAAA;AACT,EAAM,MAAA,KAAA,GAAQ,yBAAyB,OAAO,CAAA,CAAA;AAE9C,EAAA,IAAI,WAAW,KAAO,EAAA;AAClB,IAAI,IAAA,SAAA,CAAU,KAAK,CAAS,KAAA,KAAA,KAAA,KAAU,UAAU,qBAAsB,CAAA,GAAA,CAAI,KAAK,CAAC,CAAG,EAAA;AAC/E,MAAM,MAAA,IAAI,YAAa,CAAA,yCAAA,EAA2C,aAAa,CAAA,CAAA;AAAA,KACnF;AACA,IAAI,IAAA,KAAA,CAAM,WAAW,EAAI,EAAA;AACrB,MAAM,MAAA,IAAI,YAAa,CAAA,2CAAA,EAA6C,WAAW,CAAA,CAAA;AAAA,KACnF;AACA,IAAA,MAAM,SAAY,GAAA;AAAA,MACd,CAAC,MAAO,CAAA,WAAW,GAAG,WAAA;AAAA,MACtB,WAAW,MAAO,CAAA,MAAA,CAAO,EAAE,IAAA,EAAM,WAAW,CAAA;AAAA,MAC5C,WAAA;AAAA,MACA,IAAM,EAAA,QAAA;AAAA,MACN,MAAA,EAAQ,OAAO,MAAO,CAAA,SAAA,CAAU,OAAO,CAAS,KAAA,KAAA,KAAA,KAAU,QAAQ,CAAC,CAAA;AAAA,KACvE,CAAA;AAEA,IAAM,MAAA,KAAA,GAAS,mBAAwB,qBAAA,IAAI,OAAQ,EAAA,CAAA;AACnD,IAAM,KAAA,CAAA,GAAA,CAAI,WAAW,KAAK,CAAA,CAAA;AAE1B,IAAO,OAAA,SAAA,CAAA;AAAA,GACX;AAEA,EAAA,IAAI,WAAW,OAAS,EAAA;AACpB,IAAI,IAAA,SAAA,CAAU,KAAK,CAAS,KAAA,KAAA,KAAA,KAAU,YAAY,qBAAsB,CAAA,GAAA,CAAI,KAAK,CAAC,CAAG,EAAA;AACjF,MAAM,MAAA,IAAI,YAAa,CAAA,yCAAA,EAA2C,aAAa,CAAA,CAAA;AAAA,KACnF;AAEA,IAAI,IAAA,KAAA,CAAM,WAAW,EAAI,EAAA;AACrB,MAAM,MAAA,IAAI,YAAa,CAAA,iBAAA,EAAmB,WAAW,CAAA,CAAA;AAAA,KACzD;AAEA,IAAA,MAAM,MAAS,GAAA,KAAA,CAAM,KAAM,CAAA,CAAA,EAAG,EAAE,CAAA,CAAA;AAChC,IAAI,IAAA,CAAC,MAAO,CAAA,KAAA,CAAM,CAAC,GAAA,EAAK,MAAM,GAAQ,KAAA,oBAAA,CAAqB,CAAC,CAAC,CAAG,EAAA;AAC5D,MAAM,MAAA,IAAI,YAAa,CAAA,iBAAA,EAAmB,WAAW,CAAA,CAAA;AAAA,KACzD;AACA,IAAM,MAAA,cAAA,GAAiB,KAAM,CAAA,KAAA,CAAM,EAAE,CAAA,CAAA;AAErC,IAAA,MAAM,UAAa,GAAA;AAAA,MACf,CAAC,MAAO,CAAA,WAAW,GAAG,WAAA;AAAA,MACtB,WAAW,MAAO,CAAA,MAAA,CAAO,EAAE,IAAA,EAAM,WAAW,CAAA;AAAA,MAC5C,WAAA;AAAA,MACA,IAAM,EAAA,SAAA;AAAA,MACN,MAAA,EAAQ,OAAO,MAAO,CAAA,SAAA,CAAU,OAAO,CAAS,KAAA,KAAA,KAAA,KAAU,MAAM,CAAC,CAAA;AAAA,KACrE,CAAA;AAEA,IAAM,MAAA,KAAA,GAAS,iDAAsD,qBAAA,IAAI,OAAQ,EAAA,CAAA;AACjF,IAAM,KAAA,CAAA,GAAA,CAAI,YAAY,cAAc,CAAA,CAAA;AAEpC,IAAO,OAAA,UAAA,CAAA;AAAA,GACX;AAEA,EAAA,MAAM,IAAI,KAAA,CAAM,CAAkC,+BAAA,EAAA,MAAM,CAA2B,yBAAA,CAAA,CAAA,CAAA;AACvF,CAAA;;;ACvPO,SAAS,OAAU,GAAA;AAStB,EAAA,IAAoB,WAAW,eAAiB,EAAA;AAI5C,IAAM,MAAA,oBAAA,GAAwB,UAAW,CAAA,MAAA,KAAW,EAAC,CAAA;AACrD,IAAM,MAAA,oBAAA,GAAyB,oBAA2D,CAAA,MAAA,KACtF,EAAC,CAAA;AAKL,IAAA,MAAM,oBAAoB,oBAAqB,CAAA,SAAA,CAAA;AAC/C,IAAqB,oBAAA,CAAA,SAAA,GAAa,UAAU,IAAgD,KAAA;AACxF,MAAM,MAAA,CAAC,CAAG,EAAA,GAAG,CAAI,GAAA,IAAA,CAAA;AACjB,MAAI,IAAA,eAAA,CAAgB,GAAG,CAAG,EAAA;AACtB,QAAO,OAAA,MAAM,iBAAkB,CAAA,GAAG,IAAI,CAAA,CAAA;AAAA,iBAC/B,iBAAmB,EAAA;AAC1B,QAAA,OAAO,MAAM,iBAAA,CAAkB,KAAM,CAAA,oBAAA,EAAsB,IAAI,CAAA,CAAA;AAAA,OAC5D,MAAA;AACH,QAAM,MAAA,IAAI,UAAU,2DAA2D,CAAA,CAAA;AAAA,OACnF;AAAA,KACJ,CAAA;AAKA,IAAA,MAAM,sBAAsB,oBAAqB,CAAA,WAAA,CAAA;AACjD,IAAI,IAAA,kCAAA,CAAA;AACJ,IAAqB,oBAAA,CAAA,WAAA,GAAe,UAAU,IAAkD,KAAA;AAC5F,MAAM,MAAA,CAAC,SAAS,CAAI,GAAA,IAAA,CAAA;AACpB,MAAA,IAAI,cAAc,SAAW,EAAA;AACzB,QAAA,IAAI,mBAAqB,EAAA;AACrB,UAAA,OAAO,MAAM,mBAAA,CAAoB,KAAM,CAAA,oBAAA,EAAsB,IAAI,CAAA,CAAA;AAAA,SAC9D,MAAA;AACH,UAAM,MAAA,IAAI,UAAU,6DAA6D,CAAA,CAAA;AAAA,SACrF;AAAA,OACJ;AACA,MAAI,IAAA,8BAAA,CAAA;AACJ,MAAA,IAAI,uCAAuC,KAAW,CAAA,EAAA;AAClD,QAAqC,kCAAA,GAAA,IAAI,QAAQ,CAAW,OAAA,KAAA;AACxD,UAAA,IAAI,CAAC,mBAAqB,EAAA;AACtB,YAAA,OAAA,CAAS,qCAAqC,KAAM,CAAA,CAAA;AACpD,YAAA,OAAA;AAAA,WACJ;AACA,UAAA,mBAAA,CACK,KAAM,CAAA,oBAAA,EAAsB,IAAI,CAAA,CAChC,KAAK,CAAW,OAAA,KAAA;AACb,YAAA,IAAI,yBAAyB,YAAc,EAAA;AACvC,cAAQ,OAAA,CAAA,IAAA;AAAA,gBACJ,yPAAA;AAAA,eAKJ,CAAA;AAAA,aACJ;AACA,YAAI,IAAA,oBAAA,CAAqB,gBAAgB,mBAAqB,EAAA;AAC1D,cAAA,oBAAA,CAAqB,WAAc,GAAA,mBAAA,CAAA;AAAA,aACvC;AACA,YAAiC,8BAAA,GAAA,OAAA,CAAA;AACjC,YAAA,OAAA,CAAS,qCAAqC,IAAK,CAAA,CAAA;AAAA,WACtD,CACA,CAAA,KAAA,CAAM,MAAM;AACT,YAAA,OAAA,CAAS,qCAAqC,KAAM,CAAA,CAAA;AAAA,WACvD,CAAA,CAAA;AAAA,SACR,CAAA,CAAA;AAAA,OACL;AACA,MAAA,IACI,OAAO,kCAAA,KAAuC,SACxC,GAAA,kCAAA,GACA,MAAM,kCACd,EAAA;AACE,QAAA,IAAI,8BAAgC,EAAA;AAChC,UAAO,OAAA,8BAAA,CAAA;AAAA,mBACA,mBAAqB,EAAA;AAC5B,UAAA,OAAO,MAAM,mBAAA,CAAoB,KAAM,CAAA,oBAAA,EAAsB,IAAI,CAAA,CAAA;AAAA,SAC9D,MAAA;AACH,UAAM,MAAA,IAAI,UAAU,6DAA6D,CAAA,CAAA;AAAA,SACrF;AAAA,OACG,MAAA;AACH,QAAA,MAAM,CAAC,CAAA,EAAG,WAAa,EAAA,SAAS,CAAI,GAAA,IAAA,CAAA;AACpC,QAAO,OAAA,mBAAA,CAAoB,aAAa,SAAS,CAAA,CAAA;AAAA,OACrD;AAAA,KACJ,CAAA;AAKA,IAAA,MAAM,eAAe,oBAAqB,CAAA,IAAA,CAAA;AAC1C,IAAqB,oBAAA,CAAA,IAAA,GAAQ,UAAU,IAA2C,KAAA;AAC9E,MAAM,MAAA,CAAC,CAAG,EAAA,GAAG,CAAI,GAAA,IAAA,CAAA;AACjB,MAAI,IAAA,eAAA,CAAgB,GAAG,CAAG,EAAA;AACtB,QAAA,MAAM,CAACA,EAAAA,EAAG,GAAG,IAAI,CAAI,GAAA,IAAA,CAAA;AACrB,QAAO,OAAA,MAAM,YAAa,CAAA,GAAG,IAAI,CAAA,CAAA;AAAA,iBAC1B,YAAc,EAAA;AACrB,QAAA,OAAO,MAAM,YAAA,CAAa,KAAM,CAAA,oBAAA,EAAsB,IAAI,CAAA,CAAA;AAAA,OACvD,MAAA;AACH,QAAM,MAAA,IAAI,UAAU,sDAAsD,CAAA,CAAA;AAAA,OAC9E;AAAA,KACJ,CAAA;AAKA,IAAA,MAAM,iBAAiB,oBAAqB,CAAA,MAAA,CAAA;AAC5C,IAAqB,oBAAA,CAAA,MAAA,GAAU,UAAU,IAA6C,KAAA;AAClF,MAAM,MAAA,CAAC,CAAG,EAAA,GAAG,CAAI,GAAA,IAAA,CAAA;AACjB,MAAI,IAAA,eAAA,CAAgB,GAAG,CAAG,EAAA;AACtB,QAAA,MAAM,CAACA,EAAAA,EAAG,GAAG,IAAI,CAAI,GAAA,IAAA,CAAA;AACrB,QAAO,OAAA,MAAM,cAAe,CAAA,GAAG,IAAI,CAAA,CAAA;AAAA,iBAC5B,cAAgB,EAAA;AACvB,QAAA,OAAO,MAAM,cAAA,CAAe,KAAM,CAAA,oBAAA,EAAsB,IAAI,CAAA,CAAA;AAAA,OACzD,MAAA;AACH,QAAM,MAAA,IAAI,UAAU,wDAAwD,CAAA,CAAA;AAAA,OAChF;AAAA,KACJ,CAAA;AAKA,IAAA,MAAM,oBAAoB,oBAAqB,CAAA,SAAA,CAAA;AAC/C,IAAI,IAAA,gCAAA,CAAA;AACJ,IAAqB,oBAAA,CAAA,SAAA,GAAa,UAAU,IAAgD,KAAA;AACxF,MAAA,MAAM,CAAC,MAAA,EAAQ,OAAS,EAAA,SAAS,CAAI,GAAA,IAAA,CAAA;AACrC,MAAA,IAAI,cAAc,SAAW,EAAA;AACzB,QAAA,IAAI,iBAAmB,EAAA;AACnB,UAAA,OAAO,MAAM,iBAAA,CAAkB,KAAM,CAAA,oBAAA,EAAsB,IAAI,CAAA,CAAA;AAAA,SAC5D,MAAA;AACH,UAAM,MAAA,IAAI,UAAU,2DAA2D,CAAA,CAAA;AAAA,SACnF;AAAA,OACJ;AACA,MAAI,IAAA,yBAAA,CAAA;AACJ,MAAA,IAAI,qCAAqC,KAAW,CAAA,EAAA;AAChD,QAAmC,gCAAA,GAAA,IAAI,QAAQ,CAAW,OAAA,KAAA;AACtD,UAAA,IAAI,CAAC,iBAAmB,EAAA;AACpB,YAAA,OAAA,CAAS,mCAAmC,KAAM,CAAA,CAAA;AAClD,YAAA,OAAA;AAAA,WACJ;AACA,UAAA,iBAAA,CACK,KAAM,CAAA,oBAAA,EAAsB,IAAI,CAAA,CAChC,KAAK,CAAO,GAAA,KAAA;AACT,YAAA,IAAI,yBAAyB,YAAc,EAAA;AACvC,cAAQ,OAAA,CAAA,IAAA;AAAA,gBACJ,uPAAA;AAAA,eAKJ,CAAA;AAAA,aACJ;AACA,YAAI,IAAA,oBAAA,CAAqB,cAAc,iBAAmB,EAAA;AACtD,cAAA,oBAAA,CAAqB,SAAY,GAAA,iBAAA,CAAA;AAAA,aACrC;AACA,YAA4B,yBAAA,GAAA,GAAA,CAAA;AAC5B,YAAA,OAAA,CAAS,mCAAmC,IAAK,CAAA,CAAA;AAAA,WACpD,CACA,CAAA,KAAA,CAAM,MAAM;AACT,YAAA,OAAA,CAAS,mCAAmC,KAAM,CAAA,CAAA;AAAA,WACrD,CAAA,CAAA;AAAA,SACR,CAAA,CAAA;AAAA,OACL;AACA,MAAA,IACI,OAAO,iBAAA,KAAsB,SACvB,GAAA,gCAAA,GACA,MAAM,gCACd,EAAA;AACE,QAAA,IAAI,yBAA2B,EAAA;AAC3B,UAAO,OAAA,yBAAA,CAAA;AAAA,mBACA,iBAAmB,EAAA;AAC1B,UAAA,OAAO,MAAM,iBAAA,CAAkB,KAAM,CAAA,oBAAA,EAAsB,IAAI,CAAA,CAAA;AAAA,SAC5D,MAAA;AACH,UAAM,MAAA,IAAI,UAAU,2DAA2D,CAAA,CAAA;AAAA,SACnF;AAAA,OACG,MAAA;AACH,QAAA,MAAM,CAAC,OAAS,EAAA,QAAA,EAAU,UAAY,EAAA,WAAA,EAAa,SAAS,CAAI,GAAA,IAAA,CAAA;AAChE,QAAA,OAAO,iBAAkB,CAAA,MAAA,EAAQ,OAAS,EAAA,WAAA,EAAa,SAAS,CAAA,CAAA;AAAA,OACpE;AAAA,KACJ,CAAA;AAAA,GACJ;AACJ,CAAA;;;ACtMA,IAAO,WAAQ,GAAA","file":"index.browser.mjs","sourcesContent":["/**\n * HEY! <== SECRET KEY KOALA\n * |/ <== WOULD LIKE YOUR\n * ʕ·͡ᴥ·ʔ <== ATTENTION PLEASE\n *\n * Key material generated in this module must stay in this module. So long as the secrets cache and\n * the methods that interact with it are not exported from `@solana/webcrypto-ed25519-polyfill`,\n * accidental logging of the actual bytes of a secret key (eg. to the console, or to a remote\n * server) should not be possible.\n *\n * WARNING: This does not imply that the secrets cache is secure against supply-chain attacks.\n * Untrusted code in your JavaScript context can easily override `WeakMap.prototype.set` to steal\n * private keys as they are written to the cache, without alerting you to its presence or affecting\n * the regular operation of the cache.\n */\nimport { getPublicKeyAsync, signAsync, utils, verifyAsync } from '@noble/ed25519';\n\nconst PROHIBITED_KEY_USAGES = new Set<KeyUsage>([\n 'decrypt',\n 'deriveBits',\n 'deriveKey',\n 'encrypt',\n 'unwrapKey',\n 'wrapKey',\n]);\n\nconst ED25519_PKCS8_HEADER =\n // prettier-ignore\n [\n /**\n * PKCS#8 header\n */\n 0x30, // ASN.1 sequence tag\n 0x2e, // Length of sequence (46 more bytes)\n\n 0x02, // ASN.1 integer tag\n 0x01, // Length of integer\n 0x00, // Version number\n\n 0x30, // ASN.1 sequence tag\n 0x05, // Length of sequence\n 0x06, // ASN.1 object identifier tag\n 0x03, // Length of object identifier\n // Edwards curve algorithms identifier https://oid-rep.orange-labs.fr/get/1.3.101.112\n 0x2b, // iso(1) / identified-organization(3) (The first node is multiplied by the decimal 40 and the result is added to the value of the second node)\n 0x65, // thawte(101)\n // Ed25519 identifier\n 0x70, // id-Ed25519(112)\n\n /**\n * Private key payload\n */\n 0x04, // ASN.1 octet string tag\n 0x22, // String length (34 more bytes)\n\n // Private key bytes as octet string\n 0x04, // ASN.1 octet string tag\n 0x20, // String length (32 bytes)\n ];\n\nfunction bufferSourceToUint8Array(data: BufferSource): Uint8Array {\n return data instanceof Uint8Array ? data : new Uint8Array(ArrayBuffer.isView(data) ? data.buffer : data);\n}\n\nlet storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT: WeakMap<CryptoKey, Uint8Array> | undefined;\n\n// Map of public key bytes. These are the result of calling `getPublicKey`\nlet publicKeyBytesStore: WeakMap<CryptoKey, Uint8Array> | undefined;\n\nfunction createKeyPairFromBytes(\n bytes: Uint8Array,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKeyPair {\n const keyPair = createKeyPair_INTERNAL_ONLY_DO_NOT_EXPORT(extractable, keyUsages);\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(keyPair.privateKey, bytes);\n cache.set(keyPair.publicKey, bytes);\n return keyPair;\n}\n\nfunction createKeyPair_INTERNAL_ONLY_DO_NOT_EXPORT(\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKeyPair {\n if (keyUsages.length === 0) {\n throw new DOMException('Usages cannot be empty when creating a key.', 'SyntaxError');\n }\n if (keyUsages.some(usage => PROHIBITED_KEY_USAGES.has(usage))) {\n throw new DOMException('Unsupported key usage for an Ed25519 key.', 'SyntaxError');\n }\n const base = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n };\n const privateKey = {\n ...base,\n extractable,\n type: 'private',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'sign')) as KeyUsage[],\n } as CryptoKey;\n const publicKey = {\n ...base,\n extractable: true,\n type: 'public',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'verify')) as KeyUsage[],\n } as CryptoKey;\n return Object.freeze({\n privateKey: Object.freeze(privateKey),\n publicKey: Object.freeze(publicKey),\n });\n}\n\nfunction getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key: CryptoKey): Uint8Array {\n const secretKeyBytes = storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT?.get(key);\n if (secretKeyBytes === undefined) {\n throw new Error('Could not find secret key material associated with this `CryptoKey`');\n }\n return secretKeyBytes;\n}\n\nasync function getPublicKeyBytes(key: CryptoKey): Promise<Uint8Array> {\n // Try to find the key in the public key store first\n const publicKeyStore = (publicKeyBytesStore ||= new WeakMap());\n const fromPublicStore = publicKeyStore.get(key);\n if (fromPublicStore) return fromPublicStore;\n\n // If not available, get the key from the secrets store instead\n const publicKeyBytes = await getPublicKeyAsync(getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key));\n\n // Store the public key bytes in the public key store for next time\n publicKeyStore.set(key, publicKeyBytes);\n return publicKeyBytes;\n}\n\nexport async function exportKeyPolyfill(format: 'jwk', key: CryptoKey): Promise<JsonWebKey>;\nexport async function exportKeyPolyfill(format: KeyFormat, key: CryptoKey): Promise<ArrayBuffer>;\nexport async function exportKeyPolyfill(format: KeyFormat, key: CryptoKey): Promise<ArrayBuffer | JsonWebKey> {\n if (key.extractable === false) {\n throw new DOMException('key is not extractable', 'InvalidAccessException');\n }\n switch (format) {\n case 'raw': {\n if (key.type !== 'public') {\n throw new DOMException(`Unable to export a raw Ed25519 ${key.type} key`, 'InvalidAccessError');\n }\n const publicKeyBytes = await getPublicKeyBytes(key);\n return publicKeyBytes;\n }\n case 'pkcs8': {\n if (key.type !== 'private') {\n throw new DOMException(`Unable to export a pkcs8 Ed25519 ${key.type} key`, 'InvalidAccessError');\n }\n const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n return new Uint8Array([...ED25519_PKCS8_HEADER, ...secretKeyBytes]);\n }\n default:\n throw new Error(`Exporting polyfilled Ed25519 keys in the \"${format}\" format is unimplemented`);\n }\n}\n\n/**\n * This function generates a key pair and stores the secret bytes associated with it in a\n * module-private cache. Instead of vending the actual secret bytes, it returns a `CryptoKeyPair`\n * that you can use with other methods in this package to produce signatures and derive public keys\n * associated with the secret.\n */\nexport function generateKeyPolyfill(extractable: boolean, keyUsages: readonly KeyUsage[]): CryptoKeyPair {\n const privateKeyBytes = utils.randomPrivateKey();\n const keyPair = createKeyPairFromBytes(privateKeyBytes, extractable, keyUsages);\n return keyPair;\n}\n\nexport function isPolyfilledKey(key: CryptoKey): boolean {\n return !!storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT?.has(key) || !!publicKeyBytesStore?.has(key);\n}\n\nexport async function signPolyfill(key: CryptoKey, data: BufferSource): Promise<ArrayBuffer> {\n if (key.type !== 'private' || !key.usages.includes('sign')) {\n throw new DOMException('Unable to use this key to sign', 'InvalidAccessError');\n }\n const privateKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n const payload = bufferSourceToUint8Array(data);\n const signature = await signAsync(payload, privateKeyBytes);\n return signature;\n}\n\nexport async function verifyPolyfill(key: CryptoKey, signature: BufferSource, data: BufferSource): Promise<boolean> {\n if (key.type !== 'public' || !key.usages.includes('verify')) {\n throw new DOMException('Unable to use this key to verify', 'InvalidAccessError');\n }\n const publicKeyBytes = await getPublicKeyBytes(key);\n try {\n return await verifyAsync(bufferSourceToUint8Array(signature), bufferSourceToUint8Array(data), publicKeyBytes);\n } catch {\n return false;\n }\n}\n\nexport function importKeyPolyfill(\n format: KeyFormat,\n keyData: BufferSource,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey {\n const bytes = bufferSourceToUint8Array(keyData);\n\n if (format === 'raw') {\n if (keyUsages.some(usage => usage === 'sign' || PROHIBITED_KEY_USAGES.has(usage))) {\n throw new DOMException('Unsupported key usage for a Ed25519 key', 'SyntaxError');\n }\n if (bytes.length !== 32) {\n throw new DOMException('Ed25519 raw keys must be exactly 32-bytes', 'DataError');\n }\n const publicKey = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type: 'public',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'verify')) as KeyUsage[],\n } as CryptoKey;\n\n const cache = (publicKeyBytesStore ||= new WeakMap());\n cache.set(publicKey, bytes);\n\n return publicKey;\n }\n\n if (format === 'pkcs8') {\n if (keyUsages.some(usage => usage === 'verify' || PROHIBITED_KEY_USAGES.has(usage))) {\n throw new DOMException('Unsupported key usage for a Ed25519 key', 'SyntaxError');\n }\n // 48 bytes: 16-byte PKCS8 header + 32 byte secret key\n if (bytes.length !== 48) {\n throw new DOMException('Invalid keyData', 'DataError');\n }\n // Must start with exactly the Ed25519 pkcs8 header\n const header = bytes.slice(0, 16);\n if (!header.every((val, i) => val === ED25519_PKCS8_HEADER[i])) {\n throw new DOMException('Invalid keyData', 'DataError');\n }\n const secretKeyBytes = bytes.slice(16);\n\n const privateKey = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type: 'private',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'sign')) as KeyUsage[],\n } as CryptoKey;\n\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(privateKey, secretKeyBytes);\n\n return privateKey;\n }\n\n throw new Error(`Importing Ed25519 keys in the \"${format}\" format is unimplemented`);\n}\n","import cryptoImpl from '@solana/crypto-impl';\n\nimport {\n exportKeyPolyfill,\n generateKeyPolyfill,\n importKeyPolyfill,\n isPolyfilledKey,\n signPolyfill,\n verifyPolyfill,\n} from './secrets';\n\nexport function install() {\n if (__NODEJS__) {\n /**\n * Node only sets the `crypto` global variable when run with `--experimental-global-webcrypto`.\n * Let's set it unconditionally here.\n */\n globalThis.crypto ||= cryptoImpl;\n }\n\n if (!__BROWSER__ || globalThis.isSecureContext) {\n /**\n * Create `crypto.subtle` if it doesn't exist.\n */\n const originalCryptoObject = (globalThis.crypto ||= {} as Crypto);\n const originalSubtleCrypto = ((originalCryptoObject as Crypto & { subtle: SubtleCrypto }).subtle ||=\n {} as SubtleCrypto);\n\n /**\n * Override `SubtleCrypto#exportKey`\n */\n const originalExportKey = originalSubtleCrypto.exportKey as SubtleCrypto['exportKey'] | undefined;\n originalSubtleCrypto.exportKey = (async (...args: Parameters<SubtleCrypto['exportKey']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n return await exportKeyPolyfill(...args);\n } else if (originalExportKey) {\n return await originalExportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `exportKey` function exists to handle this call');\n }\n }) as SubtleCrypto['exportKey'];\n\n /**\n * Override `SubtleCrypto#generateKey`\n */\n const originalGenerateKey = originalSubtleCrypto.generateKey as SubtleCrypto['generateKey'] | undefined;\n let originalGenerateKeySupportsEd25519: Promise<boolean> | boolean | undefined;\n originalSubtleCrypto.generateKey = (async (...args: Parameters<SubtleCrypto['generateKey']>) => {\n const [algorithm] = args;\n if (algorithm !== 'Ed25519') {\n if (originalGenerateKey) {\n return await originalGenerateKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `generateKey` function exists to handle this call');\n }\n }\n let optimisticallyGeneratedKeyPair;\n if (originalGenerateKeySupportsEd25519 === undefined) {\n originalGenerateKeySupportsEd25519 = new Promise(resolve => {\n if (!originalGenerateKey) {\n resolve((originalGenerateKeySupportsEd25519 = false));\n return;\n }\n originalGenerateKey\n .apply(originalSubtleCrypto, args)\n .then(keyPair => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n '`@solana/webcrypto-ed25519-polyfill` was installed in an ' +\n 'environment that supports Ed25519 key manipulation ' +\n 'natively. Falling back to the native implementation. ' +\n 'Consider installing this polyfill only in environments where ' +\n 'Ed25519 is not supported.',\n );\n }\n if (originalSubtleCrypto.generateKey !== originalGenerateKey) {\n originalSubtleCrypto.generateKey = originalGenerateKey;\n }\n optimisticallyGeneratedKeyPair = keyPair;\n resolve((originalGenerateKeySupportsEd25519 = true));\n })\n .catch(() => {\n resolve((originalGenerateKeySupportsEd25519 = false));\n });\n });\n }\n if (\n typeof originalGenerateKeySupportsEd25519 === 'boolean'\n ? originalGenerateKeySupportsEd25519\n : await originalGenerateKeySupportsEd25519\n ) {\n if (optimisticallyGeneratedKeyPair) {\n return optimisticallyGeneratedKeyPair;\n } else if (originalGenerateKey) {\n return await originalGenerateKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `generateKey` function exists to handle this call');\n }\n } else {\n const [_, extractable, keyUsages] = args;\n return generateKeyPolyfill(extractable, keyUsages);\n }\n }) as SubtleCrypto['generateKey'];\n\n /**\n * Override `SubtleCrypto#sign`\n */\n const originalSign = originalSubtleCrypto.sign as SubtleCrypto['sign'] | undefined;\n originalSubtleCrypto.sign = (async (...args: Parameters<SubtleCrypto['sign']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n const [_, ...rest] = args;\n return await signPolyfill(...rest);\n } else if (originalSign) {\n return await originalSign.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `sign` function exists to handle this call');\n }\n }) as SubtleCrypto['sign'];\n\n /**\n * Override `SubtleCrypto#verify`\n */\n const originalVerify = originalSubtleCrypto.verify as SubtleCrypto['verify'] | undefined;\n originalSubtleCrypto.verify = (async (...args: Parameters<SubtleCrypto['verify']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n const [_, ...rest] = args;\n return await verifyPolyfill(...rest);\n } else if (originalVerify) {\n return await originalVerify.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `verify` function exists to handle this call');\n }\n }) as SubtleCrypto['verify'];\n\n /**\n * Override `SubtleCrypto#importKey`\n */\n const originalImportKey = originalSubtleCrypto.importKey as SubtleCrypto['importKey'] | undefined;\n let originalImportKeySupportsEd25519: Promise<boolean> | boolean | undefined;\n originalSubtleCrypto.importKey = (async (...args: Parameters<SubtleCrypto['importKey']>) => {\n const [format, keyData, algorithm] = args;\n if (algorithm !== 'Ed25519') {\n if (originalImportKey) {\n return await originalImportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `importKey` function exists to handle this call');\n }\n }\n let optimisticallyImportedKey;\n if (originalImportKeySupportsEd25519 === undefined) {\n originalImportKeySupportsEd25519 = new Promise(resolve => {\n if (!originalImportKey) {\n resolve((originalImportKeySupportsEd25519 = false));\n return;\n }\n originalImportKey\n .apply(originalSubtleCrypto, args)\n .then(key => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n '`@solana/webcrypto-ed25519-polyfill` was included in an ' +\n 'environment that supports Ed25519 key manipulation ' +\n 'natively. Falling back to the native implementation. ' +\n 'Consider including this polyfill only in environments where ' +\n 'Ed25519 is not supported.',\n );\n }\n if (originalSubtleCrypto.importKey !== originalImportKey) {\n originalSubtleCrypto.importKey = originalImportKey;\n }\n optimisticallyImportedKey = key;\n resolve((originalImportKeySupportsEd25519 = true));\n })\n .catch(() => {\n resolve((originalImportKeySupportsEd25519 = false));\n });\n });\n }\n if (\n typeof originalImportKey === 'boolean'\n ? originalImportKeySupportsEd25519\n : await originalImportKeySupportsEd25519\n ) {\n if (optimisticallyImportedKey) {\n return optimisticallyImportedKey;\n } else if (originalImportKey) {\n return await originalImportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `importKey` function exists to handle this call');\n }\n } else {\n const [_format, _keyData, _algorithm, extractable, keyUsages] = args;\n return importKeyPolyfill(format, keyData, extractable, keyUsages);\n }\n }) as SubtleCrypto['importKey'];\n }\n}\n","import { install } from './install';\nexport default install;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/secrets.ts","../src/install.ts"],"names":["_"],"mappings":"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","file":"index.browser.mjs","sourcesContent":["/**\n * HEY! <== SECRET KEY KOALA\n * |/ <== WOULD LIKE YOUR\n * ʕ·͡ᴥ·ʔ <== ATTENTION PLEASE\n *\n * Key material generated in this module must stay in this module. So long as the secrets cache and\n * the methods that interact with it are not exported from `@solana/webcrypto-ed25519-polyfill`,\n * accidental logging of the actual bytes of a secret key (eg. to the console, or to a remote\n * server) should not be possible.\n *\n * WARNING: This does not imply that the secrets cache is secure against supply-chain attacks.\n * Untrusted code in your JavaScript context can easily override `WeakMap.prototype.set` to steal\n * private keys as they are written to the cache, without alerting you to its presence or affecting\n * the regular operation of the cache.\n */\nimport { getPublicKeyAsync, signAsync, utils, verifyAsync } from '@noble/ed25519';\n\nconst PROHIBITED_KEY_USAGES = new Set<KeyUsage>([\n 'decrypt',\n 'deriveBits',\n 'deriveKey',\n 'encrypt',\n 'unwrapKey',\n 'wrapKey',\n]);\n\nconst ED25519_PKCS8_HEADER =\n // prettier-ignore\n [\n /**\n * PKCS#8 header\n */\n 0x30, // ASN.1 sequence tag\n 0x2e, // Length of sequence (46 more bytes)\n\n 0x02, // ASN.1 integer tag\n 0x01, // Length of integer\n 0x00, // Version number\n\n 0x30, // ASN.1 sequence tag\n 0x05, // Length of sequence\n 0x06, // ASN.1 object identifier tag\n 0x03, // Length of object identifier\n // Edwards curve algorithms identifier https://oid-rep.orange-labs.fr/get/1.3.101.112\n 0x2b, // iso(1) / identified-organization(3) (The first node is multiplied by the decimal 40 and the result is added to the value of the second node)\n 0x65, // thawte(101)\n // Ed25519 identifier\n 0x70, // id-Ed25519(112)\n\n /**\n * Private key payload\n */\n 0x04, // ASN.1 octet string tag\n 0x22, // String length (34 more bytes)\n\n // Private key bytes as octet string\n 0x04, // ASN.1 octet string tag\n 0x20, // String length (32 bytes)\n ];\n\nfunction bufferSourceToUint8Array(data: BufferSource): Uint8Array {\n return data instanceof Uint8Array ? data : new Uint8Array(ArrayBuffer.isView(data) ? data.buffer : data);\n}\n\nlet storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT: WeakMap<CryptoKey, Uint8Array> | undefined;\n\n// Map of public key bytes. These are the result of calling `getPublicKey`\nlet publicKeyBytesStore: WeakMap<CryptoKey, Uint8Array> | undefined;\n\nfunction createKeyPairFromBytes(\n bytes: Uint8Array,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKeyPair {\n const keyPair = createKeyPair_INTERNAL_ONLY_DO_NOT_EXPORT(extractable, keyUsages);\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(keyPair.privateKey, bytes);\n cache.set(keyPair.publicKey, bytes);\n return keyPair;\n}\n\nfunction createKeyPair_INTERNAL_ONLY_DO_NOT_EXPORT(\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKeyPair {\n if (keyUsages.length === 0) {\n throw new DOMException('Usages cannot be empty when creating a key.', 'SyntaxError');\n }\n if (keyUsages.some(usage => PROHIBITED_KEY_USAGES.has(usage))) {\n throw new DOMException('Unsupported key usage for an Ed25519 key.', 'SyntaxError');\n }\n const base = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n };\n const privateKey = {\n ...base,\n extractable,\n type: 'private',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'sign')) as KeyUsage[],\n } as CryptoKey;\n const publicKey = {\n ...base,\n extractable: true,\n type: 'public',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'verify')) as KeyUsage[],\n } as CryptoKey;\n return Object.freeze({\n privateKey: Object.freeze(privateKey),\n publicKey: Object.freeze(publicKey),\n });\n}\n\nfunction getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key: CryptoKey): Uint8Array {\n const secretKeyBytes = storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT?.get(key);\n if (secretKeyBytes === undefined) {\n throw new Error('Could not find secret key material associated with this `CryptoKey`');\n }\n return secretKeyBytes;\n}\n\nasync function getPublicKeyBytes(key: CryptoKey): Promise<Uint8Array> {\n // Try to find the key in the public key store first\n const publicKeyStore = (publicKeyBytesStore ||= new WeakMap());\n const fromPublicStore = publicKeyStore.get(key);\n if (fromPublicStore) return fromPublicStore;\n\n // If not available, get the key from the secrets store instead\n const publicKeyBytes = await getPublicKeyAsync(getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key));\n\n // Store the public key bytes in the public key store for next time\n publicKeyStore.set(key, publicKeyBytes);\n return publicKeyBytes;\n}\n\nfunction base64UrlEncode(bytes: Uint8Array): string {\n return btoa(Array.from(bytes, b => String.fromCharCode(b)).join(''))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '');\n}\n\nfunction base64UrlDecode(value: string): Uint8Array {\n const m = value.length % 4;\n const base64Value = value\n .replace(/-/g, '+')\n .replace(/_/g, '/')\n .padEnd(value.length + (m === 0 ? 0 : 4 - m), '=');\n return Uint8Array.from(atob(base64Value), c => c.charCodeAt(0));\n}\n\nexport async function exportKeyPolyfill(format: 'jwk', key: CryptoKey): Promise<JsonWebKey>;\nexport async function exportKeyPolyfill(format: KeyFormat, key: CryptoKey): Promise<ArrayBuffer>;\nexport async function exportKeyPolyfill(format: KeyFormat, key: CryptoKey): Promise<ArrayBuffer | JsonWebKey> {\n if (key.extractable === false) {\n throw new DOMException('key is not extractable', 'InvalidAccessException');\n }\n switch (format) {\n case 'raw': {\n if (key.type !== 'public') {\n throw new DOMException(`Unable to export a raw Ed25519 ${key.type} key`, 'InvalidAccessError');\n }\n const publicKeyBytes = await getPublicKeyBytes(key);\n return publicKeyBytes;\n }\n case 'pkcs8': {\n if (key.type !== 'private') {\n throw new DOMException(`Unable to export a pkcs8 Ed25519 ${key.type} key`, 'InvalidAccessError');\n }\n const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n return new Uint8Array([...ED25519_PKCS8_HEADER, ...secretKeyBytes]);\n }\n case 'jwk': {\n const publicKeyBytes = await getPublicKeyBytes(key);\n const base = {\n crv /* curve */: 'Ed25519',\n ext /* extractable */: key.extractable,\n key_ops /* key operations */: key.usages,\n kty /* key type */: 'OKP' /* octet key pair */,\n x /* public key x-coordinate (base64-URL encoded) */: base64UrlEncode(publicKeyBytes),\n };\n if (key.type === 'private') {\n const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n return Object.freeze({\n ...base,\n d /* private key (base64-URL encoded) */: base64UrlEncode(secretKeyBytes),\n });\n }\n return Object.freeze({ ...base });\n }\n default:\n throw new Error(`Exporting polyfilled Ed25519 keys in the \"${format}\" format is unimplemented`);\n }\n}\n\n/**\n * This function generates a key pair and stores the secret bytes associated with it in a\n * module-private cache. Instead of vending the actual secret bytes, it returns a `CryptoKeyPair`\n * that you can use with other methods in this package to produce signatures and derive public keys\n * associated with the secret.\n */\nexport function generateKeyPolyfill(extractable: boolean, keyUsages: readonly KeyUsage[]): CryptoKeyPair {\n const privateKeyBytes = utils.randomPrivateKey();\n const keyPair = createKeyPairFromBytes(privateKeyBytes, extractable, keyUsages);\n return keyPair;\n}\n\nexport function isPolyfilledKey(key: CryptoKey): boolean {\n return !!storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT?.has(key) || !!publicKeyBytesStore?.has(key);\n}\n\nexport async function signPolyfill(key: CryptoKey, data: BufferSource): Promise<ArrayBuffer> {\n if (key.type !== 'private' || !key.usages.includes('sign')) {\n throw new DOMException('Unable to use this key to sign', 'InvalidAccessError');\n }\n const privateKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n const payload = bufferSourceToUint8Array(data);\n const signature = await signAsync(payload, privateKeyBytes);\n return signature;\n}\n\nexport async function verifyPolyfill(key: CryptoKey, signature: BufferSource, data: BufferSource): Promise<boolean> {\n if (key.type !== 'public' || !key.usages.includes('verify')) {\n throw new DOMException('Unable to use this key to verify', 'InvalidAccessError');\n }\n const publicKeyBytes = await getPublicKeyBytes(key);\n try {\n return await verifyAsync(bufferSourceToUint8Array(signature), bufferSourceToUint8Array(data), publicKeyBytes);\n } catch {\n return false;\n }\n}\n\nfunction assertValidKeyUsages(keyUsages: readonly KeyUsage[], type: 'private' | 'public') {\n const prohibitedKeyUses = new Set<KeyUsage>([\n ...((type === 'private' ? ['verify'] : ['sign']) as KeyUsage[]),\n ...PROHIBITED_KEY_USAGES,\n ]);\n if (keyUsages.some(usage => prohibitedKeyUses.has(usage))) {\n throw new DOMException('Unsupported key usage for a Ed25519 key', 'SyntaxError');\n }\n}\n\nexport function importKeyPolyfill(\n format: 'jwk',\n keyData: JsonWebKey,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey;\nexport function importKeyPolyfill(\n format: Exclude<KeyFormat, 'jwk'>,\n keyData: BufferSource,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey;\nexport function importKeyPolyfill(\n format: KeyFormat,\n keyData: BufferSource | JsonWebKey,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey {\n if (format === 'raw') {\n const bytes = bufferSourceToUint8Array(keyData as BufferSource);\n assertValidKeyUsages(keyUsages, 'public');\n if (bytes.length !== 32) {\n throw new DOMException('Ed25519 raw keys must be exactly 32-bytes', 'DataError');\n }\n const publicKey = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type: 'public',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'verify')) as KeyUsage[],\n } as CryptoKey;\n\n const cache = (publicKeyBytesStore ||= new WeakMap());\n cache.set(publicKey, bytes);\n\n return publicKey;\n }\n\n if (format === 'pkcs8') {\n const bytes = bufferSourceToUint8Array(keyData as BufferSource);\n assertValidKeyUsages(keyUsages, 'private');\n // 48 bytes: 16-byte PKCS8 header + 32 byte secret key\n if (bytes.length !== 48) {\n throw new DOMException('Invalid keyData', 'DataError');\n }\n // Must start with exactly the Ed25519 pkcs8 header\n const header = bytes.slice(0, 16);\n if (!header.every((val, i) => val === ED25519_PKCS8_HEADER[i])) {\n throw new DOMException('Invalid keyData', 'DataError');\n }\n const secretKeyBytes = bytes.slice(16);\n\n const privateKey = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type: 'private',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'sign')) as KeyUsage[],\n } as CryptoKey;\n\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(privateKey, secretKeyBytes);\n\n return privateKey;\n }\n\n if (format === 'jwk') {\n const jwk = keyData as JsonWebKey;\n const type = 'd' in jwk ? 'private' : 'public';\n assertValidKeyUsages(keyUsages, type);\n const keyOps = new Set(jwk.key_ops ?? []);\n const sameKeyUsages = keyUsages.length === keyOps.size && [...keyUsages].every(x => keyOps.has(x));\n if (jwk.kty !== 'OKP' || jwk.crv !== 'Ed25519' || jwk.ext !== extractable || !sameKeyUsages) {\n throw new DOMException('Invalid Ed25519 JWK', 'DataError');\n }\n if (type === 'public' && !jwk.x) {\n throw new DOMException('Ed25519 JWK is missing public key coordinates', 'DataError');\n }\n if (type === 'private' && !jwk.d) {\n throw new DOMException('Ed25519 JWK is missing private key coordinates', 'DataError');\n }\n const usageToKeep = type === 'public' ? 'verify' : 'sign';\n const key = Object.freeze({\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type,\n usages: Object.freeze(keyUsages.filter(usage => usage === usageToKeep)) as KeyUsage[],\n }) as CryptoKey;\n\n if (type === 'public') {\n const cache = (publicKeyBytesStore ||= new WeakMap());\n cache.set(key, base64UrlDecode(jwk.x!));\n } else {\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(key, base64UrlDecode(jwk.d!));\n }\n\n return key;\n }\n\n throw new Error(`Importing Ed25519 keys in the \"${format}\" format is unimplemented`);\n}\n","import cryptoImpl from '@solana/crypto-impl';\n\nimport {\n exportKeyPolyfill,\n generateKeyPolyfill,\n importKeyPolyfill,\n isPolyfilledKey,\n signPolyfill,\n verifyPolyfill,\n} from './secrets';\n\nexport function install() {\n if (__NODEJS__) {\n /**\n * Node only sets the `crypto` global variable when run with `--experimental-global-webcrypto`.\n * Let's set it unconditionally here.\n */\n globalThis.crypto ||= cryptoImpl;\n }\n\n if (!__BROWSER__ || globalThis.isSecureContext) {\n /**\n * Create `crypto.subtle` if it doesn't exist.\n */\n const originalCryptoObject = (globalThis.crypto ||= {} as Crypto);\n const originalSubtleCrypto = ((originalCryptoObject as Crypto & { subtle: SubtleCrypto }).subtle ||=\n {} as SubtleCrypto);\n\n /**\n * Override `SubtleCrypto#exportKey`\n */\n const originalExportKey = originalSubtleCrypto.exportKey as SubtleCrypto['exportKey'] | undefined;\n originalSubtleCrypto.exportKey = (async (...args: Parameters<SubtleCrypto['exportKey']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n return await exportKeyPolyfill(...args);\n } else if (originalExportKey) {\n return await originalExportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `exportKey` function exists to handle this call');\n }\n }) as SubtleCrypto['exportKey'];\n\n /**\n * Override `SubtleCrypto#generateKey`\n */\n const originalGenerateKey = originalSubtleCrypto.generateKey as SubtleCrypto['generateKey'] | undefined;\n let originalGenerateKeySupportsEd25519: Promise<boolean> | boolean | undefined;\n originalSubtleCrypto.generateKey = (async (...args: Parameters<SubtleCrypto['generateKey']>) => {\n const [algorithm] = args;\n if (algorithm !== 'Ed25519') {\n if (originalGenerateKey) {\n return await originalGenerateKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `generateKey` function exists to handle this call');\n }\n }\n let optimisticallyGeneratedKeyPair;\n if (originalGenerateKeySupportsEd25519 === undefined) {\n originalGenerateKeySupportsEd25519 = new Promise(resolve => {\n if (!originalGenerateKey) {\n resolve((originalGenerateKeySupportsEd25519 = false));\n return;\n }\n originalGenerateKey\n .apply(originalSubtleCrypto, args)\n .then(keyPair => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n '`@solana/webcrypto-ed25519-polyfill` was installed in an ' +\n 'environment that supports Ed25519 key manipulation ' +\n 'natively. Falling back to the native implementation. ' +\n 'Consider installing this polyfill only in environments where ' +\n 'Ed25519 is not supported.',\n );\n }\n if (originalSubtleCrypto.generateKey !== originalGenerateKey) {\n originalSubtleCrypto.generateKey = originalGenerateKey;\n }\n optimisticallyGeneratedKeyPair = keyPair;\n resolve((originalGenerateKeySupportsEd25519 = true));\n })\n .catch(() => {\n resolve((originalGenerateKeySupportsEd25519 = false));\n });\n });\n }\n if (\n typeof originalGenerateKeySupportsEd25519 === 'boolean'\n ? originalGenerateKeySupportsEd25519\n : await originalGenerateKeySupportsEd25519\n ) {\n if (optimisticallyGeneratedKeyPair) {\n return optimisticallyGeneratedKeyPair;\n } else if (originalGenerateKey) {\n return await originalGenerateKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `generateKey` function exists to handle this call');\n }\n } else {\n const [_, extractable, keyUsages] = args;\n return generateKeyPolyfill(extractable, keyUsages);\n }\n }) as SubtleCrypto['generateKey'];\n\n /**\n * Override `SubtleCrypto#sign`\n */\n const originalSign = originalSubtleCrypto.sign as SubtleCrypto['sign'] | undefined;\n originalSubtleCrypto.sign = (async (...args: Parameters<SubtleCrypto['sign']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n const [_, ...rest] = args;\n return await signPolyfill(...rest);\n } else if (originalSign) {\n return await originalSign.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `sign` function exists to handle this call');\n }\n }) as SubtleCrypto['sign'];\n\n /**\n * Override `SubtleCrypto#verify`\n */\n const originalVerify = originalSubtleCrypto.verify as SubtleCrypto['verify'] | undefined;\n originalSubtleCrypto.verify = (async (...args: Parameters<SubtleCrypto['verify']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n const [_, ...rest] = args;\n return await verifyPolyfill(...rest);\n } else if (originalVerify) {\n return await originalVerify.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `verify` function exists to handle this call');\n }\n }) as SubtleCrypto['verify'];\n\n /**\n * Override `SubtleCrypto#importKey`\n */\n const originalImportKey = originalSubtleCrypto.importKey as SubtleCrypto['importKey'] | undefined;\n let originalImportKeySupportsEd25519: Promise<boolean> | boolean | undefined;\n originalSubtleCrypto.importKey = (async (...args: Parameters<SubtleCrypto['importKey']>) => {\n const [format, keyData, algorithm] = args;\n if (algorithm !== 'Ed25519') {\n if (originalImportKey) {\n return await originalImportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `importKey` function exists to handle this call');\n }\n }\n let optimisticallyImportedKey;\n if (originalImportKeySupportsEd25519 === undefined) {\n originalImportKeySupportsEd25519 = new Promise(resolve => {\n if (!originalImportKey) {\n resolve((originalImportKeySupportsEd25519 = false));\n return;\n }\n originalImportKey\n .apply(originalSubtleCrypto, args)\n .then(key => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n '`@solana/webcrypto-ed25519-polyfill` was included in an ' +\n 'environment that supports Ed25519 key manipulation ' +\n 'natively. Falling back to the native implementation. ' +\n 'Consider including this polyfill only in environments where ' +\n 'Ed25519 is not supported.',\n );\n }\n if (originalSubtleCrypto.importKey !== originalImportKey) {\n originalSubtleCrypto.importKey = originalImportKey;\n }\n optimisticallyImportedKey = key;\n resolve((originalImportKeySupportsEd25519 = true));\n })\n .catch(() => {\n resolve((originalImportKeySupportsEd25519 = false));\n });\n });\n }\n if (\n typeof originalImportKey === 'boolean'\n ? originalImportKeySupportsEd25519\n : await originalImportKeySupportsEd25519\n ) {\n if (optimisticallyImportedKey) {\n return optimisticallyImportedKey;\n } else if (originalImportKey) {\n return await originalImportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `importKey` function exists to handle this call');\n }\n } else {\n const [_format, _keyData, _algorithm, extractable, keyUsages] = args;\n return importKeyPolyfill(format, keyData, extractable, keyUsages);\n }\n }) as SubtleCrypto['importKey'];\n }\n}\n"]}
|
package/dist/index.native.mjs
CHANGED
|
@@ -110,6 +110,14 @@ async function getPublicKeyBytes(key) {
|
|
|
110
110
|
publicKeyStore.set(key, publicKeyBytes);
|
|
111
111
|
return publicKeyBytes;
|
|
112
112
|
}
|
|
113
|
+
function base64UrlEncode(bytes) {
|
|
114
|
+
return btoa(Array.from(bytes, (b) => String.fromCharCode(b)).join("")).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
115
|
+
}
|
|
116
|
+
function base64UrlDecode(value) {
|
|
117
|
+
const m = value.length % 4;
|
|
118
|
+
const base64Value = value.replace(/-/g, "+").replace(/_/g, "/").padEnd(value.length + (m === 0 ? 0 : 4 - m), "=");
|
|
119
|
+
return Uint8Array.from(atob(base64Value), (c) => c.charCodeAt(0));
|
|
120
|
+
}
|
|
113
121
|
async function exportKeyPolyfill(format, key) {
|
|
114
122
|
if (key.extractable === false) {
|
|
115
123
|
throw new DOMException("key is not extractable", "InvalidAccessException");
|
|
@@ -129,6 +137,24 @@ async function exportKeyPolyfill(format, key) {
|
|
|
129
137
|
const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);
|
|
130
138
|
return new Uint8Array([...ED25519_PKCS8_HEADER, ...secretKeyBytes]);
|
|
131
139
|
}
|
|
140
|
+
case "jwk": {
|
|
141
|
+
const publicKeyBytes = await getPublicKeyBytes(key);
|
|
142
|
+
const base = {
|
|
143
|
+
crv: "Ed25519",
|
|
144
|
+
ext: key.extractable,
|
|
145
|
+
key_ops: key.usages,
|
|
146
|
+
kty: "OKP",
|
|
147
|
+
x: base64UrlEncode(publicKeyBytes)
|
|
148
|
+
};
|
|
149
|
+
if (key.type === "private") {
|
|
150
|
+
const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);
|
|
151
|
+
return Object.freeze({
|
|
152
|
+
...base,
|
|
153
|
+
d: base64UrlEncode(secretKeyBytes)
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
return Object.freeze({ ...base });
|
|
157
|
+
}
|
|
132
158
|
default:
|
|
133
159
|
throw new Error(`Exporting polyfilled Ed25519 keys in the "${format}" format is unimplemented`);
|
|
134
160
|
}
|
|
@@ -161,12 +187,19 @@ async function verifyPolyfill(key, signature, data) {
|
|
|
161
187
|
return false;
|
|
162
188
|
}
|
|
163
189
|
}
|
|
190
|
+
function assertValidKeyUsages(keyUsages, type) {
|
|
191
|
+
const prohibitedKeyUses = /* @__PURE__ */ new Set([
|
|
192
|
+
...type === "private" ? ["verify"] : ["sign"],
|
|
193
|
+
...PROHIBITED_KEY_USAGES
|
|
194
|
+
]);
|
|
195
|
+
if (keyUsages.some((usage) => prohibitedKeyUses.has(usage))) {
|
|
196
|
+
throw new DOMException("Unsupported key usage for a Ed25519 key", "SyntaxError");
|
|
197
|
+
}
|
|
198
|
+
}
|
|
164
199
|
function importKeyPolyfill(format, keyData, extractable, keyUsages) {
|
|
165
|
-
const bytes = bufferSourceToUint8Array(keyData);
|
|
166
200
|
if (format === "raw") {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
}
|
|
201
|
+
const bytes = bufferSourceToUint8Array(keyData);
|
|
202
|
+
assertValidKeyUsages(keyUsages, "public");
|
|
170
203
|
if (bytes.length !== 32) {
|
|
171
204
|
throw new DOMException("Ed25519 raw keys must be exactly 32-bytes", "DataError");
|
|
172
205
|
}
|
|
@@ -182,9 +215,8 @@ function importKeyPolyfill(format, keyData, extractable, keyUsages) {
|
|
|
182
215
|
return publicKey;
|
|
183
216
|
}
|
|
184
217
|
if (format === "pkcs8") {
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
}
|
|
218
|
+
const bytes = bufferSourceToUint8Array(keyData);
|
|
219
|
+
assertValidKeyUsages(keyUsages, "private");
|
|
188
220
|
if (bytes.length !== 48) {
|
|
189
221
|
throw new DOMException("Invalid keyData", "DataError");
|
|
190
222
|
}
|
|
@@ -204,6 +236,38 @@ function importKeyPolyfill(format, keyData, extractable, keyUsages) {
|
|
|
204
236
|
cache.set(privateKey, secretKeyBytes);
|
|
205
237
|
return privateKey;
|
|
206
238
|
}
|
|
239
|
+
if (format === "jwk") {
|
|
240
|
+
const jwk = keyData;
|
|
241
|
+
const type = "d" in jwk ? "private" : "public";
|
|
242
|
+
assertValidKeyUsages(keyUsages, type);
|
|
243
|
+
const keyOps = new Set(jwk.key_ops ?? []);
|
|
244
|
+
const sameKeyUsages = keyUsages.length === keyOps.size && [...keyUsages].every((x) => keyOps.has(x));
|
|
245
|
+
if (jwk.kty !== "OKP" || jwk.crv !== "Ed25519" || jwk.ext !== extractable || !sameKeyUsages) {
|
|
246
|
+
throw new DOMException("Invalid Ed25519 JWK", "DataError");
|
|
247
|
+
}
|
|
248
|
+
if (type === "public" && !jwk.x) {
|
|
249
|
+
throw new DOMException("Ed25519 JWK is missing public key coordinates", "DataError");
|
|
250
|
+
}
|
|
251
|
+
if (type === "private" && !jwk.d) {
|
|
252
|
+
throw new DOMException("Ed25519 JWK is missing private key coordinates", "DataError");
|
|
253
|
+
}
|
|
254
|
+
const usageToKeep = type === "public" ? "verify" : "sign";
|
|
255
|
+
const key = Object.freeze({
|
|
256
|
+
[Symbol.toStringTag]: "CryptoKey",
|
|
257
|
+
algorithm: Object.freeze({ name: "Ed25519" }),
|
|
258
|
+
extractable,
|
|
259
|
+
type,
|
|
260
|
+
usages: Object.freeze(keyUsages.filter((usage) => usage === usageToKeep))
|
|
261
|
+
});
|
|
262
|
+
if (type === "public") {
|
|
263
|
+
const cache = publicKeyBytesStore ||= /* @__PURE__ */ new WeakMap();
|
|
264
|
+
cache.set(key, base64UrlDecode(jwk.x));
|
|
265
|
+
} else {
|
|
266
|
+
const cache = storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= /* @__PURE__ */ new WeakMap();
|
|
267
|
+
cache.set(key, base64UrlDecode(jwk.d));
|
|
268
|
+
}
|
|
269
|
+
return key;
|
|
270
|
+
}
|
|
207
271
|
throw new Error(`Importing Ed25519 keys in the "${format}" format is unimplemented`);
|
|
208
272
|
}
|
|
209
273
|
|
|
@@ -344,9 +408,6 @@ function install() {
|
|
|
344
408
|
}
|
|
345
409
|
}
|
|
346
410
|
|
|
347
|
-
|
|
348
|
-
var src_default = install;
|
|
349
|
-
|
|
350
|
-
export { src_default as default };
|
|
411
|
+
export { install };
|
|
351
412
|
//# sourceMappingURL=index.native.mjs.map
|
|
352
413
|
//# sourceMappingURL=index.native.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/secrets.ts","../src/install.ts","../src/index.ts"],"names":["_"],"mappings":"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","file":"index.native.mjs","sourcesContent":["/**\n * HEY! <== SECRET KEY KOALA\n * |/ <== WOULD LIKE YOUR\n * ʕ·͡ᴥ·ʔ <== ATTENTION PLEASE\n *\n * Key material generated in this module must stay in this module. So long as the secrets cache and\n * the methods that interact with it are not exported from `@solana/webcrypto-ed25519-polyfill`,\n * accidental logging of the actual bytes of a secret key (eg. to the console, or to a remote\n * server) should not be possible.\n *\n * WARNING: This does not imply that the secrets cache is secure against supply-chain attacks.\n * Untrusted code in your JavaScript context can easily override `WeakMap.prototype.set` to steal\n * private keys as they are written to the cache, without alerting you to its presence or affecting\n * the regular operation of the cache.\n */\nimport { getPublicKeyAsync, signAsync, utils, verifyAsync } from '@noble/ed25519';\n\nconst PROHIBITED_KEY_USAGES = new Set<KeyUsage>([\n 'decrypt',\n 'deriveBits',\n 'deriveKey',\n 'encrypt',\n 'unwrapKey',\n 'wrapKey',\n]);\n\nconst ED25519_PKCS8_HEADER =\n // prettier-ignore\n [\n /**\n * PKCS#8 header\n */\n 0x30, // ASN.1 sequence tag\n 0x2e, // Length of sequence (46 more bytes)\n\n 0x02, // ASN.1 integer tag\n 0x01, // Length of integer\n 0x00, // Version number\n\n 0x30, // ASN.1 sequence tag\n 0x05, // Length of sequence\n 0x06, // ASN.1 object identifier tag\n 0x03, // Length of object identifier\n // Edwards curve algorithms identifier https://oid-rep.orange-labs.fr/get/1.3.101.112\n 0x2b, // iso(1) / identified-organization(3) (The first node is multiplied by the decimal 40 and the result is added to the value of the second node)\n 0x65, // thawte(101)\n // Ed25519 identifier\n 0x70, // id-Ed25519(112)\n\n /**\n * Private key payload\n */\n 0x04, // ASN.1 octet string tag\n 0x22, // String length (34 more bytes)\n\n // Private key bytes as octet string\n 0x04, // ASN.1 octet string tag\n 0x20, // String length (32 bytes)\n ];\n\nfunction bufferSourceToUint8Array(data: BufferSource): Uint8Array {\n return data instanceof Uint8Array ? data : new Uint8Array(ArrayBuffer.isView(data) ? data.buffer : data);\n}\n\nlet storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT: WeakMap<CryptoKey, Uint8Array> | undefined;\n\n// Map of public key bytes. These are the result of calling `getPublicKey`\nlet publicKeyBytesStore: WeakMap<CryptoKey, Uint8Array> | undefined;\n\nfunction createKeyPairFromBytes(\n bytes: Uint8Array,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKeyPair {\n const keyPair = createKeyPair_INTERNAL_ONLY_DO_NOT_EXPORT(extractable, keyUsages);\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(keyPair.privateKey, bytes);\n cache.set(keyPair.publicKey, bytes);\n return keyPair;\n}\n\nfunction createKeyPair_INTERNAL_ONLY_DO_NOT_EXPORT(\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKeyPair {\n if (keyUsages.length === 0) {\n throw new DOMException('Usages cannot be empty when creating a key.', 'SyntaxError');\n }\n if (keyUsages.some(usage => PROHIBITED_KEY_USAGES.has(usage))) {\n throw new DOMException('Unsupported key usage for an Ed25519 key.', 'SyntaxError');\n }\n const base = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n };\n const privateKey = {\n ...base,\n extractable,\n type: 'private',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'sign')) as KeyUsage[],\n } as CryptoKey;\n const publicKey = {\n ...base,\n extractable: true,\n type: 'public',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'verify')) as KeyUsage[],\n } as CryptoKey;\n return Object.freeze({\n privateKey: Object.freeze(privateKey),\n publicKey: Object.freeze(publicKey),\n });\n}\n\nfunction getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key: CryptoKey): Uint8Array {\n const secretKeyBytes = storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT?.get(key);\n if (secretKeyBytes === undefined) {\n throw new Error('Could not find secret key material associated with this `CryptoKey`');\n }\n return secretKeyBytes;\n}\n\nasync function getPublicKeyBytes(key: CryptoKey): Promise<Uint8Array> {\n // Try to find the key in the public key store first\n const publicKeyStore = (publicKeyBytesStore ||= new WeakMap());\n const fromPublicStore = publicKeyStore.get(key);\n if (fromPublicStore) return fromPublicStore;\n\n // If not available, get the key from the secrets store instead\n const publicKeyBytes = await getPublicKeyAsync(getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key));\n\n // Store the public key bytes in the public key store for next time\n publicKeyStore.set(key, publicKeyBytes);\n return publicKeyBytes;\n}\n\nexport async function exportKeyPolyfill(format: 'jwk', key: CryptoKey): Promise<JsonWebKey>;\nexport async function exportKeyPolyfill(format: KeyFormat, key: CryptoKey): Promise<ArrayBuffer>;\nexport async function exportKeyPolyfill(format: KeyFormat, key: CryptoKey): Promise<ArrayBuffer | JsonWebKey> {\n if (key.extractable === false) {\n throw new DOMException('key is not extractable', 'InvalidAccessException');\n }\n switch (format) {\n case 'raw': {\n if (key.type !== 'public') {\n throw new DOMException(`Unable to export a raw Ed25519 ${key.type} key`, 'InvalidAccessError');\n }\n const publicKeyBytes = await getPublicKeyBytes(key);\n return publicKeyBytes;\n }\n case 'pkcs8': {\n if (key.type !== 'private') {\n throw new DOMException(`Unable to export a pkcs8 Ed25519 ${key.type} key`, 'InvalidAccessError');\n }\n const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n return new Uint8Array([...ED25519_PKCS8_HEADER, ...secretKeyBytes]);\n }\n default:\n throw new Error(`Exporting polyfilled Ed25519 keys in the \"${format}\" format is unimplemented`);\n }\n}\n\n/**\n * This function generates a key pair and stores the secret bytes associated with it in a\n * module-private cache. Instead of vending the actual secret bytes, it returns a `CryptoKeyPair`\n * that you can use with other methods in this package to produce signatures and derive public keys\n * associated with the secret.\n */\nexport function generateKeyPolyfill(extractable: boolean, keyUsages: readonly KeyUsage[]): CryptoKeyPair {\n const privateKeyBytes = utils.randomPrivateKey();\n const keyPair = createKeyPairFromBytes(privateKeyBytes, extractable, keyUsages);\n return keyPair;\n}\n\nexport function isPolyfilledKey(key: CryptoKey): boolean {\n return !!storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT?.has(key) || !!publicKeyBytesStore?.has(key);\n}\n\nexport async function signPolyfill(key: CryptoKey, data: BufferSource): Promise<ArrayBuffer> {\n if (key.type !== 'private' || !key.usages.includes('sign')) {\n throw new DOMException('Unable to use this key to sign', 'InvalidAccessError');\n }\n const privateKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n const payload = bufferSourceToUint8Array(data);\n const signature = await signAsync(payload, privateKeyBytes);\n return signature;\n}\n\nexport async function verifyPolyfill(key: CryptoKey, signature: BufferSource, data: BufferSource): Promise<boolean> {\n if (key.type !== 'public' || !key.usages.includes('verify')) {\n throw new DOMException('Unable to use this key to verify', 'InvalidAccessError');\n }\n const publicKeyBytes = await getPublicKeyBytes(key);\n try {\n return await verifyAsync(bufferSourceToUint8Array(signature), bufferSourceToUint8Array(data), publicKeyBytes);\n } catch {\n return false;\n }\n}\n\nexport function importKeyPolyfill(\n format: KeyFormat,\n keyData: BufferSource,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey {\n const bytes = bufferSourceToUint8Array(keyData);\n\n if (format === 'raw') {\n if (keyUsages.some(usage => usage === 'sign' || PROHIBITED_KEY_USAGES.has(usage))) {\n throw new DOMException('Unsupported key usage for a Ed25519 key', 'SyntaxError');\n }\n if (bytes.length !== 32) {\n throw new DOMException('Ed25519 raw keys must be exactly 32-bytes', 'DataError');\n }\n const publicKey = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type: 'public',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'verify')) as KeyUsage[],\n } as CryptoKey;\n\n const cache = (publicKeyBytesStore ||= new WeakMap());\n cache.set(publicKey, bytes);\n\n return publicKey;\n }\n\n if (format === 'pkcs8') {\n if (keyUsages.some(usage => usage === 'verify' || PROHIBITED_KEY_USAGES.has(usage))) {\n throw new DOMException('Unsupported key usage for a Ed25519 key', 'SyntaxError');\n }\n // 48 bytes: 16-byte PKCS8 header + 32 byte secret key\n if (bytes.length !== 48) {\n throw new DOMException('Invalid keyData', 'DataError');\n }\n // Must start with exactly the Ed25519 pkcs8 header\n const header = bytes.slice(0, 16);\n if (!header.every((val, i) => val === ED25519_PKCS8_HEADER[i])) {\n throw new DOMException('Invalid keyData', 'DataError');\n }\n const secretKeyBytes = bytes.slice(16);\n\n const privateKey = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type: 'private',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'sign')) as KeyUsage[],\n } as CryptoKey;\n\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(privateKey, secretKeyBytes);\n\n return privateKey;\n }\n\n throw new Error(`Importing Ed25519 keys in the \"${format}\" format is unimplemented`);\n}\n","import cryptoImpl from '@solana/crypto-impl';\n\nimport {\n exportKeyPolyfill,\n generateKeyPolyfill,\n importKeyPolyfill,\n isPolyfilledKey,\n signPolyfill,\n verifyPolyfill,\n} from './secrets';\n\nexport function install() {\n if (__NODEJS__) {\n /**\n * Node only sets the `crypto` global variable when run with `--experimental-global-webcrypto`.\n * Let's set it unconditionally here.\n */\n globalThis.crypto ||= cryptoImpl;\n }\n\n if (!__BROWSER__ || globalThis.isSecureContext) {\n /**\n * Create `crypto.subtle` if it doesn't exist.\n */\n const originalCryptoObject = (globalThis.crypto ||= {} as Crypto);\n const originalSubtleCrypto = ((originalCryptoObject as Crypto & { subtle: SubtleCrypto }).subtle ||=\n {} as SubtleCrypto);\n\n /**\n * Override `SubtleCrypto#exportKey`\n */\n const originalExportKey = originalSubtleCrypto.exportKey as SubtleCrypto['exportKey'] | undefined;\n originalSubtleCrypto.exportKey = (async (...args: Parameters<SubtleCrypto['exportKey']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n return await exportKeyPolyfill(...args);\n } else if (originalExportKey) {\n return await originalExportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `exportKey` function exists to handle this call');\n }\n }) as SubtleCrypto['exportKey'];\n\n /**\n * Override `SubtleCrypto#generateKey`\n */\n const originalGenerateKey = originalSubtleCrypto.generateKey as SubtleCrypto['generateKey'] | undefined;\n let originalGenerateKeySupportsEd25519: Promise<boolean> | boolean | undefined;\n originalSubtleCrypto.generateKey = (async (...args: Parameters<SubtleCrypto['generateKey']>) => {\n const [algorithm] = args;\n if (algorithm !== 'Ed25519') {\n if (originalGenerateKey) {\n return await originalGenerateKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `generateKey` function exists to handle this call');\n }\n }\n let optimisticallyGeneratedKeyPair;\n if (originalGenerateKeySupportsEd25519 === undefined) {\n originalGenerateKeySupportsEd25519 = new Promise(resolve => {\n if (!originalGenerateKey) {\n resolve((originalGenerateKeySupportsEd25519 = false));\n return;\n }\n originalGenerateKey\n .apply(originalSubtleCrypto, args)\n .then(keyPair => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n '`@solana/webcrypto-ed25519-polyfill` was installed in an ' +\n 'environment that supports Ed25519 key manipulation ' +\n 'natively. Falling back to the native implementation. ' +\n 'Consider installing this polyfill only in environments where ' +\n 'Ed25519 is not supported.',\n );\n }\n if (originalSubtleCrypto.generateKey !== originalGenerateKey) {\n originalSubtleCrypto.generateKey = originalGenerateKey;\n }\n optimisticallyGeneratedKeyPair = keyPair;\n resolve((originalGenerateKeySupportsEd25519 = true));\n })\n .catch(() => {\n resolve((originalGenerateKeySupportsEd25519 = false));\n });\n });\n }\n if (\n typeof originalGenerateKeySupportsEd25519 === 'boolean'\n ? originalGenerateKeySupportsEd25519\n : await originalGenerateKeySupportsEd25519\n ) {\n if (optimisticallyGeneratedKeyPair) {\n return optimisticallyGeneratedKeyPair;\n } else if (originalGenerateKey) {\n return await originalGenerateKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `generateKey` function exists to handle this call');\n }\n } else {\n const [_, extractable, keyUsages] = args;\n return generateKeyPolyfill(extractable, keyUsages);\n }\n }) as SubtleCrypto['generateKey'];\n\n /**\n * Override `SubtleCrypto#sign`\n */\n const originalSign = originalSubtleCrypto.sign as SubtleCrypto['sign'] | undefined;\n originalSubtleCrypto.sign = (async (...args: Parameters<SubtleCrypto['sign']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n const [_, ...rest] = args;\n return await signPolyfill(...rest);\n } else if (originalSign) {\n return await originalSign.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `sign` function exists to handle this call');\n }\n }) as SubtleCrypto['sign'];\n\n /**\n * Override `SubtleCrypto#verify`\n */\n const originalVerify = originalSubtleCrypto.verify as SubtleCrypto['verify'] | undefined;\n originalSubtleCrypto.verify = (async (...args: Parameters<SubtleCrypto['verify']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n const [_, ...rest] = args;\n return await verifyPolyfill(...rest);\n } else if (originalVerify) {\n return await originalVerify.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `verify` function exists to handle this call');\n }\n }) as SubtleCrypto['verify'];\n\n /**\n * Override `SubtleCrypto#importKey`\n */\n const originalImportKey = originalSubtleCrypto.importKey as SubtleCrypto['importKey'] | undefined;\n let originalImportKeySupportsEd25519: Promise<boolean> | boolean | undefined;\n originalSubtleCrypto.importKey = (async (...args: Parameters<SubtleCrypto['importKey']>) => {\n const [format, keyData, algorithm] = args;\n if (algorithm !== 'Ed25519') {\n if (originalImportKey) {\n return await originalImportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `importKey` function exists to handle this call');\n }\n }\n let optimisticallyImportedKey;\n if (originalImportKeySupportsEd25519 === undefined) {\n originalImportKeySupportsEd25519 = new Promise(resolve => {\n if (!originalImportKey) {\n resolve((originalImportKeySupportsEd25519 = false));\n return;\n }\n originalImportKey\n .apply(originalSubtleCrypto, args)\n .then(key => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n '`@solana/webcrypto-ed25519-polyfill` was included in an ' +\n 'environment that supports Ed25519 key manipulation ' +\n 'natively. Falling back to the native implementation. ' +\n 'Consider including this polyfill only in environments where ' +\n 'Ed25519 is not supported.',\n );\n }\n if (originalSubtleCrypto.importKey !== originalImportKey) {\n originalSubtleCrypto.importKey = originalImportKey;\n }\n optimisticallyImportedKey = key;\n resolve((originalImportKeySupportsEd25519 = true));\n })\n .catch(() => {\n resolve((originalImportKeySupportsEd25519 = false));\n });\n });\n }\n if (\n typeof originalImportKey === 'boolean'\n ? originalImportKeySupportsEd25519\n : await originalImportKeySupportsEd25519\n ) {\n if (optimisticallyImportedKey) {\n return optimisticallyImportedKey;\n } else if (originalImportKey) {\n return await originalImportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `importKey` function exists to handle this call');\n }\n } else {\n const [_format, _keyData, _algorithm, extractable, keyUsages] = args;\n return importKeyPolyfill(format, keyData, extractable, keyUsages);\n }\n }) as SubtleCrypto['importKey'];\n }\n}\n","import { install } from './install';\nexport default install;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/secrets.ts","../src/install.ts"],"names":["_"],"mappings":"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","file":"index.native.mjs","sourcesContent":["/**\n * HEY! <== SECRET KEY KOALA\n * |/ <== WOULD LIKE YOUR\n * ʕ·͡ᴥ·ʔ <== ATTENTION PLEASE\n *\n * Key material generated in this module must stay in this module. So long as the secrets cache and\n * the methods that interact with it are not exported from `@solana/webcrypto-ed25519-polyfill`,\n * accidental logging of the actual bytes of a secret key (eg. to the console, or to a remote\n * server) should not be possible.\n *\n * WARNING: This does not imply that the secrets cache is secure against supply-chain attacks.\n * Untrusted code in your JavaScript context can easily override `WeakMap.prototype.set` to steal\n * private keys as they are written to the cache, without alerting you to its presence or affecting\n * the regular operation of the cache.\n */\nimport { getPublicKeyAsync, signAsync, utils, verifyAsync } from '@noble/ed25519';\n\nconst PROHIBITED_KEY_USAGES = new Set<KeyUsage>([\n 'decrypt',\n 'deriveBits',\n 'deriveKey',\n 'encrypt',\n 'unwrapKey',\n 'wrapKey',\n]);\n\nconst ED25519_PKCS8_HEADER =\n // prettier-ignore\n [\n /**\n * PKCS#8 header\n */\n 0x30, // ASN.1 sequence tag\n 0x2e, // Length of sequence (46 more bytes)\n\n 0x02, // ASN.1 integer tag\n 0x01, // Length of integer\n 0x00, // Version number\n\n 0x30, // ASN.1 sequence tag\n 0x05, // Length of sequence\n 0x06, // ASN.1 object identifier tag\n 0x03, // Length of object identifier\n // Edwards curve algorithms identifier https://oid-rep.orange-labs.fr/get/1.3.101.112\n 0x2b, // iso(1) / identified-organization(3) (The first node is multiplied by the decimal 40 and the result is added to the value of the second node)\n 0x65, // thawte(101)\n // Ed25519 identifier\n 0x70, // id-Ed25519(112)\n\n /**\n * Private key payload\n */\n 0x04, // ASN.1 octet string tag\n 0x22, // String length (34 more bytes)\n\n // Private key bytes as octet string\n 0x04, // ASN.1 octet string tag\n 0x20, // String length (32 bytes)\n ];\n\nfunction bufferSourceToUint8Array(data: BufferSource): Uint8Array {\n return data instanceof Uint8Array ? data : new Uint8Array(ArrayBuffer.isView(data) ? data.buffer : data);\n}\n\nlet storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT: WeakMap<CryptoKey, Uint8Array> | undefined;\n\n// Map of public key bytes. These are the result of calling `getPublicKey`\nlet publicKeyBytesStore: WeakMap<CryptoKey, Uint8Array> | undefined;\n\nfunction createKeyPairFromBytes(\n bytes: Uint8Array,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKeyPair {\n const keyPair = createKeyPair_INTERNAL_ONLY_DO_NOT_EXPORT(extractable, keyUsages);\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(keyPair.privateKey, bytes);\n cache.set(keyPair.publicKey, bytes);\n return keyPair;\n}\n\nfunction createKeyPair_INTERNAL_ONLY_DO_NOT_EXPORT(\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKeyPair {\n if (keyUsages.length === 0) {\n throw new DOMException('Usages cannot be empty when creating a key.', 'SyntaxError');\n }\n if (keyUsages.some(usage => PROHIBITED_KEY_USAGES.has(usage))) {\n throw new DOMException('Unsupported key usage for an Ed25519 key.', 'SyntaxError');\n }\n const base = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n };\n const privateKey = {\n ...base,\n extractable,\n type: 'private',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'sign')) as KeyUsage[],\n } as CryptoKey;\n const publicKey = {\n ...base,\n extractable: true,\n type: 'public',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'verify')) as KeyUsage[],\n } as CryptoKey;\n return Object.freeze({\n privateKey: Object.freeze(privateKey),\n publicKey: Object.freeze(publicKey),\n });\n}\n\nfunction getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key: CryptoKey): Uint8Array {\n const secretKeyBytes = storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT?.get(key);\n if (secretKeyBytes === undefined) {\n throw new Error('Could not find secret key material associated with this `CryptoKey`');\n }\n return secretKeyBytes;\n}\n\nasync function getPublicKeyBytes(key: CryptoKey): Promise<Uint8Array> {\n // Try to find the key in the public key store first\n const publicKeyStore = (publicKeyBytesStore ||= new WeakMap());\n const fromPublicStore = publicKeyStore.get(key);\n if (fromPublicStore) return fromPublicStore;\n\n // If not available, get the key from the secrets store instead\n const publicKeyBytes = await getPublicKeyAsync(getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key));\n\n // Store the public key bytes in the public key store for next time\n publicKeyStore.set(key, publicKeyBytes);\n return publicKeyBytes;\n}\n\nfunction base64UrlEncode(bytes: Uint8Array): string {\n return btoa(Array.from(bytes, b => String.fromCharCode(b)).join(''))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '');\n}\n\nfunction base64UrlDecode(value: string): Uint8Array {\n const m = value.length % 4;\n const base64Value = value\n .replace(/-/g, '+')\n .replace(/_/g, '/')\n .padEnd(value.length + (m === 0 ? 0 : 4 - m), '=');\n return Uint8Array.from(atob(base64Value), c => c.charCodeAt(0));\n}\n\nexport async function exportKeyPolyfill(format: 'jwk', key: CryptoKey): Promise<JsonWebKey>;\nexport async function exportKeyPolyfill(format: KeyFormat, key: CryptoKey): Promise<ArrayBuffer>;\nexport async function exportKeyPolyfill(format: KeyFormat, key: CryptoKey): Promise<ArrayBuffer | JsonWebKey> {\n if (key.extractable === false) {\n throw new DOMException('key is not extractable', 'InvalidAccessException');\n }\n switch (format) {\n case 'raw': {\n if (key.type !== 'public') {\n throw new DOMException(`Unable to export a raw Ed25519 ${key.type} key`, 'InvalidAccessError');\n }\n const publicKeyBytes = await getPublicKeyBytes(key);\n return publicKeyBytes;\n }\n case 'pkcs8': {\n if (key.type !== 'private') {\n throw new DOMException(`Unable to export a pkcs8 Ed25519 ${key.type} key`, 'InvalidAccessError');\n }\n const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n return new Uint8Array([...ED25519_PKCS8_HEADER, ...secretKeyBytes]);\n }\n case 'jwk': {\n const publicKeyBytes = await getPublicKeyBytes(key);\n const base = {\n crv /* curve */: 'Ed25519',\n ext /* extractable */: key.extractable,\n key_ops /* key operations */: key.usages,\n kty /* key type */: 'OKP' /* octet key pair */,\n x /* public key x-coordinate (base64-URL encoded) */: base64UrlEncode(publicKeyBytes),\n };\n if (key.type === 'private') {\n const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n return Object.freeze({\n ...base,\n d /* private key (base64-URL encoded) */: base64UrlEncode(secretKeyBytes),\n });\n }\n return Object.freeze({ ...base });\n }\n default:\n throw new Error(`Exporting polyfilled Ed25519 keys in the \"${format}\" format is unimplemented`);\n }\n}\n\n/**\n * This function generates a key pair and stores the secret bytes associated with it in a\n * module-private cache. Instead of vending the actual secret bytes, it returns a `CryptoKeyPair`\n * that you can use with other methods in this package to produce signatures and derive public keys\n * associated with the secret.\n */\nexport function generateKeyPolyfill(extractable: boolean, keyUsages: readonly KeyUsage[]): CryptoKeyPair {\n const privateKeyBytes = utils.randomPrivateKey();\n const keyPair = createKeyPairFromBytes(privateKeyBytes, extractable, keyUsages);\n return keyPair;\n}\n\nexport function isPolyfilledKey(key: CryptoKey): boolean {\n return !!storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT?.has(key) || !!publicKeyBytesStore?.has(key);\n}\n\nexport async function signPolyfill(key: CryptoKey, data: BufferSource): Promise<ArrayBuffer> {\n if (key.type !== 'private' || !key.usages.includes('sign')) {\n throw new DOMException('Unable to use this key to sign', 'InvalidAccessError');\n }\n const privateKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n const payload = bufferSourceToUint8Array(data);\n const signature = await signAsync(payload, privateKeyBytes);\n return signature;\n}\n\nexport async function verifyPolyfill(key: CryptoKey, signature: BufferSource, data: BufferSource): Promise<boolean> {\n if (key.type !== 'public' || !key.usages.includes('verify')) {\n throw new DOMException('Unable to use this key to verify', 'InvalidAccessError');\n }\n const publicKeyBytes = await getPublicKeyBytes(key);\n try {\n return await verifyAsync(bufferSourceToUint8Array(signature), bufferSourceToUint8Array(data), publicKeyBytes);\n } catch {\n return false;\n }\n}\n\nfunction assertValidKeyUsages(keyUsages: readonly KeyUsage[], type: 'private' | 'public') {\n const prohibitedKeyUses = new Set<KeyUsage>([\n ...((type === 'private' ? ['verify'] : ['sign']) as KeyUsage[]),\n ...PROHIBITED_KEY_USAGES,\n ]);\n if (keyUsages.some(usage => prohibitedKeyUses.has(usage))) {\n throw new DOMException('Unsupported key usage for a Ed25519 key', 'SyntaxError');\n }\n}\n\nexport function importKeyPolyfill(\n format: 'jwk',\n keyData: JsonWebKey,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey;\nexport function importKeyPolyfill(\n format: Exclude<KeyFormat, 'jwk'>,\n keyData: BufferSource,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey;\nexport function importKeyPolyfill(\n format: KeyFormat,\n keyData: BufferSource | JsonWebKey,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey {\n if (format === 'raw') {\n const bytes = bufferSourceToUint8Array(keyData as BufferSource);\n assertValidKeyUsages(keyUsages, 'public');\n if (bytes.length !== 32) {\n throw new DOMException('Ed25519 raw keys must be exactly 32-bytes', 'DataError');\n }\n const publicKey = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type: 'public',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'verify')) as KeyUsage[],\n } as CryptoKey;\n\n const cache = (publicKeyBytesStore ||= new WeakMap());\n cache.set(publicKey, bytes);\n\n return publicKey;\n }\n\n if (format === 'pkcs8') {\n const bytes = bufferSourceToUint8Array(keyData as BufferSource);\n assertValidKeyUsages(keyUsages, 'private');\n // 48 bytes: 16-byte PKCS8 header + 32 byte secret key\n if (bytes.length !== 48) {\n throw new DOMException('Invalid keyData', 'DataError');\n }\n // Must start with exactly the Ed25519 pkcs8 header\n const header = bytes.slice(0, 16);\n if (!header.every((val, i) => val === ED25519_PKCS8_HEADER[i])) {\n throw new DOMException('Invalid keyData', 'DataError');\n }\n const secretKeyBytes = bytes.slice(16);\n\n const privateKey = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type: 'private',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'sign')) as KeyUsage[],\n } as CryptoKey;\n\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(privateKey, secretKeyBytes);\n\n return privateKey;\n }\n\n if (format === 'jwk') {\n const jwk = keyData as JsonWebKey;\n const type = 'd' in jwk ? 'private' : 'public';\n assertValidKeyUsages(keyUsages, type);\n const keyOps = new Set(jwk.key_ops ?? []);\n const sameKeyUsages = keyUsages.length === keyOps.size && [...keyUsages].every(x => keyOps.has(x));\n if (jwk.kty !== 'OKP' || jwk.crv !== 'Ed25519' || jwk.ext !== extractable || !sameKeyUsages) {\n throw new DOMException('Invalid Ed25519 JWK', 'DataError');\n }\n if (type === 'public' && !jwk.x) {\n throw new DOMException('Ed25519 JWK is missing public key coordinates', 'DataError');\n }\n if (type === 'private' && !jwk.d) {\n throw new DOMException('Ed25519 JWK is missing private key coordinates', 'DataError');\n }\n const usageToKeep = type === 'public' ? 'verify' : 'sign';\n const key = Object.freeze({\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type,\n usages: Object.freeze(keyUsages.filter(usage => usage === usageToKeep)) as KeyUsage[],\n }) as CryptoKey;\n\n if (type === 'public') {\n const cache = (publicKeyBytesStore ||= new WeakMap());\n cache.set(key, base64UrlDecode(jwk.x!));\n } else {\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(key, base64UrlDecode(jwk.d!));\n }\n\n return key;\n }\n\n throw new Error(`Importing Ed25519 keys in the \"${format}\" format is unimplemented`);\n}\n","import cryptoImpl from '@solana/crypto-impl';\n\nimport {\n exportKeyPolyfill,\n generateKeyPolyfill,\n importKeyPolyfill,\n isPolyfilledKey,\n signPolyfill,\n verifyPolyfill,\n} from './secrets';\n\nexport function install() {\n if (__NODEJS__) {\n /**\n * Node only sets the `crypto` global variable when run with `--experimental-global-webcrypto`.\n * Let's set it unconditionally here.\n */\n globalThis.crypto ||= cryptoImpl;\n }\n\n if (!__BROWSER__ || globalThis.isSecureContext) {\n /**\n * Create `crypto.subtle` if it doesn't exist.\n */\n const originalCryptoObject = (globalThis.crypto ||= {} as Crypto);\n const originalSubtleCrypto = ((originalCryptoObject as Crypto & { subtle: SubtleCrypto }).subtle ||=\n {} as SubtleCrypto);\n\n /**\n * Override `SubtleCrypto#exportKey`\n */\n const originalExportKey = originalSubtleCrypto.exportKey as SubtleCrypto['exportKey'] | undefined;\n originalSubtleCrypto.exportKey = (async (...args: Parameters<SubtleCrypto['exportKey']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n return await exportKeyPolyfill(...args);\n } else if (originalExportKey) {\n return await originalExportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `exportKey` function exists to handle this call');\n }\n }) as SubtleCrypto['exportKey'];\n\n /**\n * Override `SubtleCrypto#generateKey`\n */\n const originalGenerateKey = originalSubtleCrypto.generateKey as SubtleCrypto['generateKey'] | undefined;\n let originalGenerateKeySupportsEd25519: Promise<boolean> | boolean | undefined;\n originalSubtleCrypto.generateKey = (async (...args: Parameters<SubtleCrypto['generateKey']>) => {\n const [algorithm] = args;\n if (algorithm !== 'Ed25519') {\n if (originalGenerateKey) {\n return await originalGenerateKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `generateKey` function exists to handle this call');\n }\n }\n let optimisticallyGeneratedKeyPair;\n if (originalGenerateKeySupportsEd25519 === undefined) {\n originalGenerateKeySupportsEd25519 = new Promise(resolve => {\n if (!originalGenerateKey) {\n resolve((originalGenerateKeySupportsEd25519 = false));\n return;\n }\n originalGenerateKey\n .apply(originalSubtleCrypto, args)\n .then(keyPair => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n '`@solana/webcrypto-ed25519-polyfill` was installed in an ' +\n 'environment that supports Ed25519 key manipulation ' +\n 'natively. Falling back to the native implementation. ' +\n 'Consider installing this polyfill only in environments where ' +\n 'Ed25519 is not supported.',\n );\n }\n if (originalSubtleCrypto.generateKey !== originalGenerateKey) {\n originalSubtleCrypto.generateKey = originalGenerateKey;\n }\n optimisticallyGeneratedKeyPair = keyPair;\n resolve((originalGenerateKeySupportsEd25519 = true));\n })\n .catch(() => {\n resolve((originalGenerateKeySupportsEd25519 = false));\n });\n });\n }\n if (\n typeof originalGenerateKeySupportsEd25519 === 'boolean'\n ? originalGenerateKeySupportsEd25519\n : await originalGenerateKeySupportsEd25519\n ) {\n if (optimisticallyGeneratedKeyPair) {\n return optimisticallyGeneratedKeyPair;\n } else if (originalGenerateKey) {\n return await originalGenerateKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `generateKey` function exists to handle this call');\n }\n } else {\n const [_, extractable, keyUsages] = args;\n return generateKeyPolyfill(extractable, keyUsages);\n }\n }) as SubtleCrypto['generateKey'];\n\n /**\n * Override `SubtleCrypto#sign`\n */\n const originalSign = originalSubtleCrypto.sign as SubtleCrypto['sign'] | undefined;\n originalSubtleCrypto.sign = (async (...args: Parameters<SubtleCrypto['sign']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n const [_, ...rest] = args;\n return await signPolyfill(...rest);\n } else if (originalSign) {\n return await originalSign.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `sign` function exists to handle this call');\n }\n }) as SubtleCrypto['sign'];\n\n /**\n * Override `SubtleCrypto#verify`\n */\n const originalVerify = originalSubtleCrypto.verify as SubtleCrypto['verify'] | undefined;\n originalSubtleCrypto.verify = (async (...args: Parameters<SubtleCrypto['verify']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n const [_, ...rest] = args;\n return await verifyPolyfill(...rest);\n } else if (originalVerify) {\n return await originalVerify.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `verify` function exists to handle this call');\n }\n }) as SubtleCrypto['verify'];\n\n /**\n * Override `SubtleCrypto#importKey`\n */\n const originalImportKey = originalSubtleCrypto.importKey as SubtleCrypto['importKey'] | undefined;\n let originalImportKeySupportsEd25519: Promise<boolean> | boolean | undefined;\n originalSubtleCrypto.importKey = (async (...args: Parameters<SubtleCrypto['importKey']>) => {\n const [format, keyData, algorithm] = args;\n if (algorithm !== 'Ed25519') {\n if (originalImportKey) {\n return await originalImportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `importKey` function exists to handle this call');\n }\n }\n let optimisticallyImportedKey;\n if (originalImportKeySupportsEd25519 === undefined) {\n originalImportKeySupportsEd25519 = new Promise(resolve => {\n if (!originalImportKey) {\n resolve((originalImportKeySupportsEd25519 = false));\n return;\n }\n originalImportKey\n .apply(originalSubtleCrypto, args)\n .then(key => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n '`@solana/webcrypto-ed25519-polyfill` was included in an ' +\n 'environment that supports Ed25519 key manipulation ' +\n 'natively. Falling back to the native implementation. ' +\n 'Consider including this polyfill only in environments where ' +\n 'Ed25519 is not supported.',\n );\n }\n if (originalSubtleCrypto.importKey !== originalImportKey) {\n originalSubtleCrypto.importKey = originalImportKey;\n }\n optimisticallyImportedKey = key;\n resolve((originalImportKeySupportsEd25519 = true));\n })\n .catch(() => {\n resolve((originalImportKeySupportsEd25519 = false));\n });\n });\n }\n if (\n typeof originalImportKey === 'boolean'\n ? originalImportKeySupportsEd25519\n : await originalImportKeySupportsEd25519\n ) {\n if (optimisticallyImportedKey) {\n return optimisticallyImportedKey;\n } else if (originalImportKey) {\n return await originalImportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `importKey` function exists to handle this call');\n }\n } else {\n const [_format, _keyData, _algorithm, extractable, keyUsages] = args;\n return importKeyPolyfill(format, keyData, extractable, keyUsages);\n }\n }) as SubtleCrypto['importKey'];\n }\n}\n"]}
|