@reallyme/crypto 0.3.9 → 0.3.11
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 +10 -11
- package/dist/aead.js +1 -1
- package/dist/aesKw.js +1 -1
- package/dist/algorithms.js +1 -1
- package/dist/argon2id.js +1 -1
- package/dist/bip340Schnorr.js +1 -1
- package/dist/cryptoFacade.d.ts +60 -81
- package/dist/cryptoFacade.js +12 -408
- package/dist/cryptoFacadeAsymmetric.d.ts +20 -0
- package/dist/cryptoFacadeAsymmetric.js +252 -0
- package/dist/cryptoFacadeSymmetric.d.ts +27 -0
- package/dist/cryptoFacadeSymmetric.js +166 -0
- package/dist/digest.js +1 -1
- package/dist/ed25519.d.ts +2 -0
- package/dist/ed25519.js +45 -4
- package/dist/encodeEcdsaDer.js +1 -1
- package/dist/errors.js +1 -1
- package/dist/hkdf.js +1 -1
- package/dist/hmac.d.ts +3 -3
- package/dist/hmac.js +8 -5
- package/dist/hpke.d.ts +1 -1
- package/dist/hpke.js +4 -2
- package/dist/index.js +1 -1
- package/dist/jwaConcatKdf.js +1 -1
- package/dist/jwk.js +46 -11
- package/dist/kmac.js +1 -1
- package/dist/memory.js +1 -1
- package/dist/mlDsa.js +1 -1
- package/dist/mlKem.js +1 -1
- package/dist/operationResponse.js +1 -1
- package/dist/p256Ecdh.js +1 -1
- package/dist/p256Ecdsa.js +1 -1
- package/dist/p384Ecdh.js +1 -1
- package/dist/p384Ecdsa.js +1 -1
- package/dist/p521Ecdh.js +1 -1
- package/dist/p521Ecdsa.js +1 -1
- package/dist/pbkdf2.js +12 -4
- package/dist/proto/generated/reallyme/crypto/v1/crypto_pb.js +1 -1
- package/dist/proto.d.ts +8 -117
- package/dist/proto.js +6 -1085
- package/dist/protoAlgorithms.d.ts +21 -0
- package/dist/protoAlgorithms.js +323 -0
- package/dist/protoErrors.d.ts +27 -0
- package/dist/protoErrors.js +275 -0
- package/dist/protoIdentifiers.d.ts +14 -0
- package/dist/protoIdentifiers.js +112 -0
- package/dist/protoJwk.d.ts +10 -0
- package/dist/protoJwk.js +204 -0
- package/dist/protoValues.d.ts +63 -0
- package/dist/protoValues.js +228 -0
- package/dist/providerCatalog.js +1 -1
- package/dist/rsa.js +1 -1
- package/dist/secp256k1.js +1 -1
- package/dist/slhDsa.js +1 -1
- package/dist/validateBytes.js +1 -1
- package/dist/verifyBundledWasmModule.d.ts +63 -0
- package/dist/verifyBundledWasmModule.js +80 -0
- package/dist/wasm/reallyme_crypto_wasm.d.ts +383 -0
- package/dist/wasm/reallyme_crypto_wasm.js +8 -8
- package/dist/wasm/reallyme_crypto_wasm_bg.wasm +0 -0
- package/dist/wasmModuleTypes.js +1 -1
- package/dist/wasmProvider.d.ts +5 -0
- package/dist/wasmProvider.js +61 -3
- package/dist/x25519.js +1 -1
- package/dist/xWing.js +1 -1
- package/package.json +6 -5
package/dist/cryptoFacade.js
CHANGED
|
@@ -1,426 +1,30 @@
|
|
|
1
|
-
// SPDX-FileCopyrightText:
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 ReallyMe LLC
|
|
2
2
|
//
|
|
3
3
|
// SPDX-License-Identifier: MIT OR Apache-2.0
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
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 {
|
|
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
|
-
|
|
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 (
|
|
24
|
+
if (trustedProvider === undefined) {
|
|
421
25
|
throw new ReallyMeCryptoError("provider-failure");
|
|
422
26
|
}
|
|
423
|
-
return
|
|
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
|
+
};
|