@reallyme/crypto 0.3.8 → 0.3.10

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.
Files changed (66) hide show
  1. package/README.md +10 -11
  2. package/dist/aead.js +1 -1
  3. package/dist/aesKw.js +1 -1
  4. package/dist/algorithms.js +1 -1
  5. package/dist/argon2id.js +1 -1
  6. package/dist/bip340Schnorr.js +1 -1
  7. package/dist/cryptoFacade.d.ts +60 -81
  8. package/dist/cryptoFacade.js +12 -408
  9. package/dist/cryptoFacadeAsymmetric.d.ts +20 -0
  10. package/dist/cryptoFacadeAsymmetric.js +252 -0
  11. package/dist/cryptoFacadeSymmetric.d.ts +27 -0
  12. package/dist/cryptoFacadeSymmetric.js +166 -0
  13. package/dist/digest.js +1 -1
  14. package/dist/ed25519.d.ts +2 -0
  15. package/dist/ed25519.js +45 -4
  16. package/dist/encodeEcdsaDer.js +1 -1
  17. package/dist/errors.js +1 -1
  18. package/dist/hkdf.js +1 -1
  19. package/dist/hmac.d.ts +3 -3
  20. package/dist/hmac.js +8 -5
  21. package/dist/hpke.d.ts +1 -1
  22. package/dist/hpke.js +4 -2
  23. package/dist/index.js +1 -1
  24. package/dist/jwaConcatKdf.js +1 -1
  25. package/dist/jwk.js +46 -11
  26. package/dist/kmac.js +1 -1
  27. package/dist/memory.js +1 -1
  28. package/dist/mlDsa.js +1 -1
  29. package/dist/mlKem.js +1 -1
  30. package/dist/operationResponse.js +1 -1
  31. package/dist/p256Ecdh.js +1 -1
  32. package/dist/p256Ecdsa.js +1 -1
  33. package/dist/p384Ecdh.js +1 -1
  34. package/dist/p384Ecdsa.js +1 -1
  35. package/dist/p521Ecdh.js +1 -1
  36. package/dist/p521Ecdsa.js +1 -1
  37. package/dist/pbkdf2.js +12 -4
  38. package/dist/proto/generated/reallyme/crypto/v1/crypto_pb.js +1 -1
  39. package/dist/proto.d.ts +8 -117
  40. package/dist/proto.js +6 -1085
  41. package/dist/protoAlgorithms.d.ts +21 -0
  42. package/dist/protoAlgorithms.js +323 -0
  43. package/dist/protoErrors.d.ts +27 -0
  44. package/dist/protoErrors.js +275 -0
  45. package/dist/protoIdentifiers.d.ts +14 -0
  46. package/dist/protoIdentifiers.js +112 -0
  47. package/dist/protoJwk.d.ts +10 -0
  48. package/dist/protoJwk.js +204 -0
  49. package/dist/protoValues.d.ts +63 -0
  50. package/dist/protoValues.js +228 -0
  51. package/dist/providerCatalog.js +1 -1
  52. package/dist/rsa.js +1 -1
  53. package/dist/secp256k1.js +1 -1
  54. package/dist/slhDsa.js +1 -1
  55. package/dist/validateBytes.js +1 -1
  56. package/dist/verifyBundledWasmModule.d.ts +63 -0
  57. package/dist/verifyBundledWasmModule.js +80 -0
  58. package/dist/wasm/reallyme_crypto_wasm.d.ts +383 -0
  59. package/dist/wasm/reallyme_crypto_wasm.js +8 -8
  60. package/dist/wasm/reallyme_crypto_wasm_bg.wasm +0 -0
  61. package/dist/wasmModuleTypes.js +1 -1
  62. package/dist/wasmProvider.d.ts +5 -0
  63. package/dist/wasmProvider.js +61 -3
  64. package/dist/x25519.js +1 -1
  65. package/dist/xWing.js +1 -1
  66. package/package.json +6 -5
@@ -1,426 +1,30 @@
1
- // SPDX-FileCopyrightText: Copyright © 2026 ReallyMe LLC. All rights reserved
1
+ // SPDX-FileCopyrightText: 2026 ReallyMe LLC
2
2
  //
3
3
  // SPDX-License-Identifier: MIT OR Apache-2.0
4
- import { ReallyMeAead } from "./aead.js";
5
- import { ReallyMeAesKw } from "./aesKw.js";
6
- import { ReallyMeArgon2id } from "./argon2id.js";
7
- import { ReallyMeBip340Schnorr } from "./bip340Schnorr.js";
8
- import { ReallyMeDigest } from "./digest.js";
9
- import { ReallyMeEd25519 } from "./ed25519.js";
4
+ import { createReallyMeAsymmetricFacade } from "./cryptoFacadeAsymmetric.js";
5
+ import { createReallyMeSymmetricFacade } from "./cryptoFacadeSymmetric.js";
10
6
  import { ReallyMeCryptoError } from "./errors.js";
11
- import { ReallyMeHkdf } from "./hkdf.js";
12
- import { ReallyMeHmac } from "./hmac.js";
13
- import { ReallyMeHpke } from "./hpke.js";
14
- import { ReallyMeJwaConcatKdf } from "./jwaConcatKdf.js";
15
- import { ReallyMeKmac } from "./kmac.js";
16
- import { ReallyMeMlDsa } from "./mlDsa.js";
17
- import { ReallyMeMlKem } from "./mlKem.js";
18
- import { ReallyMeP256Ecdsa } from "./p256Ecdsa.js";
19
- import { ReallyMeP256Ecdh } from "./p256Ecdh.js";
20
- import { ReallyMeP384Ecdsa } from "./p384Ecdsa.js";
21
- import { ReallyMeP384Ecdh } from "./p384Ecdh.js";
22
- import { ReallyMeP521Ecdsa } from "./p521Ecdsa.js";
23
- import { ReallyMeP521Ecdh } from "./p521Ecdh.js";
24
- import { ReallyMePbkdf2 } from "./pbkdf2.js";
25
- import { ReallyMeRsa } from "./rsa.js";
26
- import { ReallyMeSecp256k1 } from "./secp256k1.js";
27
- import { ReallyMeSlhDsa } from "./slhDsa.js";
28
- import { requireReallyMeWasmProvider } from "./wasmProvider.js";
29
- import { processOperationResponseJsonWithProvider, processOperationResponseWithProvider, } from "./operationResponse.js";
30
- import { ensureByteArray } from "./validateBytes.js";
31
- import { ReallyMeX25519 } from "./x25519.js";
32
- import { ReallyMeXWing } from "./xWing.js";
33
- const SECP256K1_ECDSA = "ECDSA-secp256k1-SHA256";
34
- const P256_ECDSA = "ECDSA-P256-SHA256";
35
- const P384_ECDSA = "ECDSA-P384-SHA384";
36
- const P521_ECDSA = "ECDSA-P521-SHA512";
37
- const BIP340_SCHNORR = "BIP340-Schnorr-secp256k1-SHA256";
38
- const ED25519 = "Ed25519";
7
+ import { requireReallyMeWasmProvider, requireTrustedReallyMeWasmProvider } from "./wasmProvider.js";
39
8
  /**
40
9
  * Generic package facade. Algorithm-specific objects remain available for
41
10
  * callers that want direct provider access; this facade gives consumers a
42
11
  * stable typed route and rejects algorithm/operation combinations that the
43
12
  * selected method does not define.
44
13
  */
45
- const createReallyMeCryptoFacade = (resolveWasmProvider) => ({
46
- /**
47
- * Executes a generated binary request and returns a binary
48
- * `CryptoOperationResponse`.
49
- */
50
- processOperationResponse(request) {
51
- ensureByteArray(request);
52
- return processOperationResponseWithProvider(resolveWasmProvider(), request);
53
- },
54
- /**
55
- * Executes a permitted non-secret generated ProtoJSON request and returns
56
- * the same binary `CryptoOperationResponse`. Secret-bearing selectors fail
57
- * before JSON value deserialization.
58
- */
59
- processOperationResponseJson(requestJson) {
60
- ensureByteArray(requestJson);
61
- return processOperationResponseJsonWithProvider(resolveWasmProvider(), requestJson);
62
- },
63
- hash(algorithm, bytes) {
64
- switch (algorithm) {
65
- case "SHA2-256":
66
- return ReallyMeDigest.sha256(bytes);
67
- case "SHA2-384":
68
- return ReallyMeDigest.sha384(bytes);
69
- case "SHA2-512":
70
- return ReallyMeDigest.sha512(bytes);
71
- case "SHA3-224":
72
- return ReallyMeDigest.sha3_224(bytes);
73
- case "SHA3-256":
74
- return ReallyMeDigest.sha3_256(bytes);
75
- case "SHA3-384":
76
- return ReallyMeDigest.sha3_384(bytes);
77
- case "SHA3-512":
78
- return ReallyMeDigest.sha3_512(bytes);
79
- default:
80
- throw new ReallyMeCryptoError("unsupported-algorithm");
81
- }
82
- },
83
- seal(algorithm, key, nonce, aad, plaintext) {
84
- switch (algorithm) {
85
- case "AES-128-GCM":
86
- case "AES-192-GCM":
87
- case "AES-256-GCM":
88
- case "AES-256-GCM-SIV":
89
- case "ChaCha20-Poly1305":
90
- case "XChaCha20-Poly1305":
91
- return ReallyMeAead.sealWithProvider(resolveWasmProvider(), algorithm, key, nonce, aad, plaintext);
92
- default:
93
- throw new ReallyMeCryptoError("unsupported-algorithm");
94
- }
95
- },
96
- open(algorithm, key, nonce, aad, ciphertextWithTag) {
97
- switch (algorithm) {
98
- case "AES-128-GCM":
99
- case "AES-192-GCM":
100
- case "AES-256-GCM":
101
- case "AES-256-GCM-SIV":
102
- case "ChaCha20-Poly1305":
103
- case "XChaCha20-Poly1305":
104
- return ReallyMeAead.openWithProvider(resolveWasmProvider(), algorithm, key, nonce, aad, ciphertextWithTag);
105
- default:
106
- throw new ReallyMeCryptoError("unsupported-algorithm");
107
- }
108
- },
109
- authenticate(algorithm, key, message) {
110
- switch (algorithm) {
111
- case "HMAC-SHA-256":
112
- return ReallyMeHmac.authenticateSha256(key, message);
113
- case "HMAC-SHA-384":
114
- return ReallyMeHmac.authenticateSha384(key, message);
115
- case "HMAC-SHA-512":
116
- return ReallyMeHmac.authenticateSha512(key, message);
117
- default:
118
- throw new ReallyMeCryptoError("unsupported-algorithm");
119
- }
120
- },
121
- verifyMac(algorithm, tag, key, message) {
122
- switch (algorithm) {
123
- case "HMAC-SHA-256":
124
- return ReallyMeHmac.verifySha256(tag, key, message);
125
- case "HMAC-SHA-384":
126
- return ReallyMeHmac.verifySha384(tag, key, message);
127
- case "HMAC-SHA-512":
128
- return ReallyMeHmac.verifySha512(tag, key, message);
129
- default:
130
- throw new ReallyMeCryptoError("unsupported-algorithm");
131
- }
132
- },
133
- deriveArgon2id(kdfVersion, secret, salt) {
134
- return ReallyMeArgon2id.deriveKeyWithProvider(resolveWasmProvider(), kdfVersion, secret, salt);
135
- },
136
- deriveKey(algorithm, password, salt, iterations, outputLength) {
137
- switch (algorithm) {
138
- case "PBKDF2-HMAC-SHA-256":
139
- return ReallyMePbkdf2.deriveHmacSha256(password, salt, iterations, outputLength);
140
- case "PBKDF2-HMAC-SHA-512":
141
- return ReallyMePbkdf2.deriveHmacSha512(password, salt, iterations, outputLength);
142
- default:
143
- throw new ReallyMeCryptoError("unsupported-algorithm");
144
- }
145
- },
146
- deriveHkdf(algorithm, inputKeyMaterial, salt, info, outputLength) {
147
- switch (algorithm) {
148
- case "HKDF-SHA256":
149
- return ReallyMeHkdf.deriveSha256(inputKeyMaterial, salt, info, outputLength);
150
- case "HKDF-SHA384":
151
- return ReallyMeHkdf.deriveSha384(inputKeyMaterial, salt, info, outputLength);
152
- default:
153
- throw new ReallyMeCryptoError("unsupported-algorithm");
154
- }
155
- },
156
- deriveJwaConcatKdfSha256(algorithm, sharedSecret, algorithmId, partyUInfo, partyVInfo, outputLength) {
157
- switch (algorithm) {
158
- case "JWA-CONCAT-KDF-SHA256":
159
- return ReallyMeJwaConcatKdf.deriveSha256(sharedSecret, algorithmId, partyUInfo, partyVInfo, outputLength);
160
- default:
161
- throw new ReallyMeCryptoError("unsupported-algorithm");
162
- }
163
- },
164
- deriveKmac256(algorithm, key, context, customization, outputLength) {
165
- switch (algorithm) {
166
- case "KMAC256":
167
- return ReallyMeKmac.deriveKmac256WithProvider(resolveWasmProvider(), key, context, customization, outputLength);
168
- default:
169
- throw new ReallyMeCryptoError("unsupported-algorithm");
170
- }
171
- },
172
- wrapKey(algorithm, wrappingKey, keyToWrap) {
173
- switch (algorithm) {
174
- case "AES-128-KW":
175
- case "AES-192-KW":
176
- case "AES-256-KW":
177
- return ReallyMeAesKw.wrapKeyWithProvider(algorithm, resolveWasmProvider(), wrappingKey, keyToWrap);
178
- default:
179
- throw new ReallyMeCryptoError("unsupported-algorithm");
180
- }
181
- },
182
- unwrapKey(algorithm, wrappingKey, wrappedKey) {
183
- switch (algorithm) {
184
- case "AES-128-KW":
185
- case "AES-192-KW":
186
- case "AES-256-KW":
187
- return ReallyMeAesKw.unwrapKeyWithProvider(algorithm, resolveWasmProvider(), wrappingKey, wrappedKey);
188
- default:
189
- throw new ReallyMeCryptoError("unsupported-algorithm");
190
- }
191
- },
192
- generateKeyPair(algorithm) {
193
- if (algorithm === ED25519) {
194
- return ReallyMeEd25519.generateKeyPair();
195
- }
196
- switch (algorithm) {
197
- case P256_ECDSA:
198
- return ReallyMeP256Ecdsa.generateKeyPair();
199
- case P384_ECDSA:
200
- return ReallyMeP384Ecdsa.generateKeyPair();
201
- case P521_ECDSA:
202
- return ReallyMeP521Ecdsa.generateKeyPair();
203
- case SECP256K1_ECDSA:
204
- return ReallyMeSecp256k1.generateKeyPair();
205
- case BIP340_SCHNORR:
206
- return ReallyMeBip340Schnorr.generateKeyPair();
207
- case "ML-DSA-44":
208
- case "ML-DSA-65":
209
- case "ML-DSA-87":
210
- return ReallyMeMlDsa.generateKeyPairWithProvider(resolveWasmProvider(), algorithm);
211
- case "SLH-DSA-SHA2-128s":
212
- return ReallyMeSlhDsa.generateKeyPairWithProvider(resolveWasmProvider(), algorithm);
213
- default:
214
- throw new ReallyMeCryptoError("unsupported-algorithm");
215
- }
216
- },
217
- deriveKeyPair(algorithm, secretKey) {
218
- // Import an existing secret and reconstruct its public key. Do not use
219
- // this as key generation from passwords or other low-entropy input; use
220
- // generateKeyPair for new keys, or a protocol-approved KDF before import.
221
- if (algorithm === ED25519) {
222
- return ReallyMeEd25519.deriveKeyPair(secretKey);
223
- }
224
- switch (algorithm) {
225
- case P256_ECDSA:
226
- return ReallyMeP256Ecdsa.deriveKeyPair(secretKey);
227
- case P384_ECDSA:
228
- return ReallyMeP384Ecdsa.deriveKeyPair(secretKey);
229
- case P521_ECDSA:
230
- return ReallyMeP521Ecdsa.deriveKeyPair(secretKey);
231
- case SECP256K1_ECDSA:
232
- return ReallyMeSecp256k1.deriveKeyPair(secretKey);
233
- case BIP340_SCHNORR:
234
- return ReallyMeBip340Schnorr.deriveKeyPair(secretKey);
235
- case "ML-DSA-44":
236
- case "ML-DSA-65":
237
- case "ML-DSA-87":
238
- return ReallyMeMlDsa.deriveKeyPairWithProvider(resolveWasmProvider(), algorithm, secretKey);
239
- case "SLH-DSA-SHA2-128s":
240
- // SLH-DSA deterministic derivation uses three FIPS seed components,
241
- // so it deliberately does not fit this single-secret import shape.
242
- throw new ReallyMeCryptoError("unsupported-algorithm");
243
- default:
244
- throw new ReallyMeCryptoError("unsupported-algorithm");
245
- }
246
- },
247
- sign(algorithm, message, secretKey) {
248
- if (algorithm === ED25519) {
249
- return ReallyMeEd25519.sign(message, secretKey);
250
- }
251
- switch (algorithm) {
252
- case P256_ECDSA:
253
- return ReallyMeP256Ecdsa.sign(message, secretKey);
254
- case P384_ECDSA:
255
- return ReallyMeP384Ecdsa.sign(message, secretKey);
256
- case P521_ECDSA:
257
- return ReallyMeP521Ecdsa.sign(message, secretKey);
258
- case SECP256K1_ECDSA:
259
- return ReallyMeSecp256k1.sign(message, secretKey);
260
- case "ML-DSA-44":
261
- case "ML-DSA-65":
262
- case "ML-DSA-87":
263
- return ReallyMeMlDsa.signWithProvider(resolveWasmProvider(), algorithm, message, secretKey);
264
- case "SLH-DSA-SHA2-128s":
265
- return ReallyMeSlhDsa.signWithProvider(resolveWasmProvider(), algorithm, message, secretKey);
266
- default:
267
- throw new ReallyMeCryptoError("unsupported-algorithm");
268
- }
269
- },
270
- signBip340Schnorr(message32, secretKey, auxRand32) {
271
- return ReallyMeBip340Schnorr.sign(message32, secretKey, auxRand32);
272
- },
273
- verify(algorithm, signature, message, publicKey) {
274
- if (algorithm === ED25519) {
275
- ReallyMeEd25519.verify(signature, message, publicKey);
276
- return;
277
- }
278
- switch (algorithm) {
279
- case P256_ECDSA:
280
- ReallyMeP256Ecdsa.verify(signature, message, publicKey);
281
- return;
282
- case P384_ECDSA:
283
- ReallyMeP384Ecdsa.verify(signature, message, publicKey);
284
- return;
285
- case P521_ECDSA:
286
- ReallyMeP521Ecdsa.verify(signature, message, publicKey);
287
- return;
288
- case SECP256K1_ECDSA:
289
- ReallyMeSecp256k1.verify(signature, message, publicKey);
290
- return;
291
- case BIP340_SCHNORR:
292
- ReallyMeBip340Schnorr.verify(signature, message, publicKey);
293
- return;
294
- case "ML-DSA-44":
295
- case "ML-DSA-65":
296
- case "ML-DSA-87":
297
- ReallyMeMlDsa.verifyWithProvider(resolveWasmProvider(), algorithm, signature, message, publicKey);
298
- return;
299
- case "SLH-DSA-SHA2-128s":
300
- ReallyMeSlhDsa.verifyWithProvider(resolveWasmProvider(), algorithm, signature, message, publicKey);
301
- return;
302
- default:
303
- throw new ReallyMeCryptoError("unsupported-algorithm");
304
- }
305
- },
306
- verifyRsa(algorithm, signature, message, publicKeyDer, publicKeyEncoding) {
307
- switch (algorithm) {
308
- case "RSA-PKCS1v15-SHA1":
309
- case "RSA-PKCS1v15-SHA256":
310
- case "RSA-PKCS1v15-SHA384":
311
- case "RSA-PKCS1v15-SHA512":
312
- case "RSA-PSS-SHA1-MGF1-SHA1":
313
- case "RSA-PSS-SHA256-MGF1-SHA256":
314
- case "RSA-PSS-SHA384-MGF1-SHA384":
315
- case "RSA-PSS-SHA512-MGF1-SHA512":
316
- ReallyMeRsa.verifyWithProvider(resolveWasmProvider(), algorithm, signature, message, publicKeyDer, publicKeyEncoding);
317
- return;
318
- default:
319
- throw new ReallyMeCryptoError("unsupported-algorithm");
320
- }
321
- },
322
- deriveSharedSecret(algorithm, publicKey, secretKey) {
323
- switch (algorithm) {
324
- case "X25519":
325
- return ReallyMeX25519.deriveSharedSecret(publicKey, secretKey);
326
- case "P-256-ECDH":
327
- return ReallyMeP256Ecdh.deriveSharedSecret(publicKey, secretKey);
328
- case "P-384-ECDH":
329
- return ReallyMeP384Ecdh.deriveSharedSecret(publicKey, secretKey);
330
- case "P-521-ECDH":
331
- return ReallyMeP521Ecdh.deriveSharedSecret(publicKey, secretKey);
332
- default:
333
- throw new ReallyMeCryptoError("unsupported-algorithm");
334
- }
335
- },
336
- deriveKeyAgreementKeyPair(algorithm, secretKey) {
337
- switch (algorithm) {
338
- case "X25519":
339
- return ReallyMeX25519.deriveKeyPair(secretKey);
340
- case "P-256-ECDH":
341
- return ReallyMeP256Ecdh.deriveKeyPair(secretKey);
342
- case "P-384-ECDH":
343
- return ReallyMeP384Ecdh.deriveKeyPair(secretKey);
344
- case "P-521-ECDH":
345
- return ReallyMeP521Ecdh.deriveKeyPair(secretKey);
346
- default:
347
- throw new ReallyMeCryptoError("unsupported-algorithm");
348
- }
349
- },
350
- generateKemKeyPair(algorithm) {
351
- switch (algorithm) {
352
- case "X-Wing-768":
353
- return ReallyMeXWing.generateKeyPairWithProvider(resolveWasmProvider(), algorithm);
354
- case "ML-KEM-512":
355
- case "ML-KEM-768":
356
- case "ML-KEM-1024":
357
- return ReallyMeMlKem.generateKeyPairWithProvider(resolveWasmProvider(), algorithm);
358
- default:
359
- throw new ReallyMeCryptoError("unsupported-algorithm");
360
- }
361
- },
362
- deriveKemKeyPair(algorithm, secretKey) {
363
- switch (algorithm) {
364
- case "X-Wing-768":
365
- return ReallyMeXWing.deriveKeyPairWithProvider(resolveWasmProvider(), algorithm, secretKey);
366
- case "ML-KEM-512":
367
- case "ML-KEM-768":
368
- case "ML-KEM-1024":
369
- return ReallyMeMlKem.deriveKeyPairWithProvider(resolveWasmProvider(), algorithm, secretKey);
370
- default:
371
- throw new ReallyMeCryptoError("unsupported-algorithm");
372
- }
373
- },
374
- encapsulate(algorithm, publicKey) {
375
- switch (algorithm) {
376
- case "X-Wing-768":
377
- return ReallyMeXWing.encapsulateWithProvider(resolveWasmProvider(), algorithm, publicKey);
378
- case "ML-KEM-512":
379
- case "ML-KEM-768":
380
- case "ML-KEM-1024":
381
- return ReallyMeMlKem.encapsulateWithProvider(resolveWasmProvider(), algorithm, publicKey);
382
- default:
383
- throw new ReallyMeCryptoError("unsupported-algorithm");
384
- }
385
- },
386
- decapsulate(algorithm, ciphertext, secretKey) {
387
- switch (algorithm) {
388
- case "X-Wing-768":
389
- return ReallyMeXWing.decapsulateWithProvider(resolveWasmProvider(), algorithm, ciphertext, secretKey);
390
- case "ML-KEM-512":
391
- case "ML-KEM-768":
392
- case "ML-KEM-1024":
393
- return ReallyMeMlKem.decapsulateWithProvider(resolveWasmProvider(), algorithm, ciphertext, secretKey);
394
- default:
395
- throw new ReallyMeCryptoError("unsupported-algorithm");
396
- }
397
- },
398
- sealHpke(suite, recipientPublicKey, info, aad, plaintext) {
399
- switch (suite) {
400
- case "DHKEM-P256-HKDF-SHA256-HKDF-SHA256-AES-256-GCM":
401
- case "DHKEM-X25519-HKDF-SHA256-HKDF-SHA256-CHACHA20-POLY1305":
402
- return ReallyMeHpke.sealBaseWithProvider(resolveWasmProvider(), suite, recipientPublicKey, info, aad, plaintext);
403
- default:
404
- throw new ReallyMeCryptoError("unsupported-algorithm");
405
- }
406
- },
407
- openHpke(suite, recipientSecretKey, encapsulatedKey, info, aad, ciphertext) {
408
- switch (suite) {
409
- case "DHKEM-P256-HKDF-SHA256-HKDF-SHA256-AES-256-GCM":
410
- case "DHKEM-X25519-HKDF-SHA256-HKDF-SHA256-CHACHA20-POLY1305":
411
- return ReallyMeHpke.openBaseWithProvider(resolveWasmProvider(), suite, recipientSecretKey, encapsulatedKey, info, aad, ciphertext);
412
- default:
413
- throw new ReallyMeCryptoError("unsupported-algorithm");
414
- }
415
- },
14
+ export const createReallyMeCryptoFacade = (resolveWasmProvider) => Object.freeze({
15
+ ...createReallyMeSymmetricFacade(resolveWasmProvider),
16
+ ...createReallyMeAsymmetricFacade(resolveWasmProvider),
416
17
  });
417
18
  export const createReallyMeCrypto = (providers = {}) => {
418
19
  const configuredProvider = providers.wasmProvider;
20
+ const trustedProvider = configuredProvider === undefined
21
+ ? undefined
22
+ : requireTrustedReallyMeWasmProvider(configuredProvider);
419
23
  return createReallyMeCryptoFacade(() => {
420
- if (configuredProvider === undefined) {
24
+ if (trustedProvider === undefined) {
421
25
  throw new ReallyMeCryptoError("provider-failure");
422
26
  }
423
- return configuredProvider;
27
+ return trustedProvider;
424
28
  });
425
29
  };
426
30
  export const ReallyMeCrypto = createReallyMeCryptoFacade(requireReallyMeWasmProvider);
@@ -0,0 +1,20 @@
1
+ import type { ReallyMeHpkeSuite, ReallyMeKemAlgorithm, ReallyMeKeyAgreementAlgorithm, ReallyMeSignatureAlgorithm } from "./algorithms.js";
2
+ import type { ReallyMeHpkeSealedMessage, ReallyMeKemEncapsulation, ReallyMeKemKeyPair, ReallyMeKeyAgreementKeyPair, ReallyMeSignatureKeyPair } from "./cryptoFacade.js";
3
+ import type { ReallyMeRsaPublicKeyDerEncoding } from "./rsa.js";
4
+ import type { ReallyMeWasmProvider } from "./wasmProvider.js";
5
+ export declare const createReallyMeAsymmetricFacade: (resolveWasmProvider: () => ReallyMeWasmProvider) => {
6
+ generateKeyPair(algorithm: ReallyMeSignatureAlgorithm): ReallyMeSignatureKeyPair;
7
+ deriveKeyPair(algorithm: ReallyMeSignatureAlgorithm, secretKey: Uint8Array): ReallyMeSignatureKeyPair;
8
+ sign(algorithm: ReallyMeSignatureAlgorithm, message: Uint8Array, secretKey: Uint8Array): Uint8Array;
9
+ signBip340Schnorr(message32: Uint8Array, secretKey: Uint8Array, auxRand32: Uint8Array): Uint8Array;
10
+ verify(algorithm: ReallyMeSignatureAlgorithm, signature: Uint8Array, message: Uint8Array, publicKey: Uint8Array): void;
11
+ verifyRsa(algorithm: ReallyMeSignatureAlgorithm, signature: Uint8Array, message: Uint8Array, publicKeyDer: Uint8Array, publicKeyEncoding: ReallyMeRsaPublicKeyDerEncoding): void;
12
+ deriveSharedSecret(algorithm: ReallyMeKeyAgreementAlgorithm, publicKey: Uint8Array, secretKey: Uint8Array): Uint8Array;
13
+ deriveKeyAgreementKeyPair(algorithm: ReallyMeKeyAgreementAlgorithm, secretKey: Uint8Array): ReallyMeKeyAgreementKeyPair;
14
+ generateKemKeyPair(algorithm: ReallyMeKemAlgorithm): ReallyMeKemKeyPair;
15
+ deriveKemKeyPair(algorithm: ReallyMeKemAlgorithm, secretKey: Uint8Array): ReallyMeKemKeyPair;
16
+ encapsulate(algorithm: ReallyMeKemAlgorithm, publicKey: Uint8Array): ReallyMeKemEncapsulation;
17
+ decapsulate(algorithm: ReallyMeKemAlgorithm, ciphertext: Uint8Array, secretKey: Uint8Array): Uint8Array;
18
+ sealHpke(suite: ReallyMeHpkeSuite, recipientPublicKey: Uint8Array, info: Uint8Array, aad: Uint8Array, plaintext: Uint8Array): ReallyMeHpkeSealedMessage;
19
+ openHpke(suite: ReallyMeHpkeSuite, recipientSecretKey: Uint8Array, encapsulatedKey: Uint8Array, info: Uint8Array, aad: Uint8Array, ciphertext: Uint8Array): Uint8Array;
20
+ };