@reallyme/crypto 0.1.8 → 0.3.0
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/LICENSE +201 -0
- package/README.md +148 -18
- package/dist/aead.d.ts +4 -0
- package/dist/aead.js +40 -16
- package/dist/aesKw.d.ts +8 -2
- package/dist/aesKw.js +69 -12
- package/dist/algorithms.d.ts +12 -4
- package/dist/algorithms.js +8 -2
- package/dist/argon2id.d.ts +3 -0
- package/dist/argon2id.js +18 -3
- package/dist/cryptoFacade.d.ts +66 -5
- package/dist/cryptoFacade.js +99 -38
- package/dist/errors.d.ts +1 -1
- package/dist/hkdf.d.ts +1 -0
- package/dist/hkdf.js +5 -1
- package/dist/hmac.d.ts +3 -0
- package/dist/hmac.js +24 -3
- package/dist/hpke.d.ts +4 -1
- package/dist/hpke.js +45 -14
- package/dist/index.d.ts +14 -13
- package/dist/index.js +12 -10
- package/dist/jwaConcatKdf.js +8 -4
- package/dist/jwk.d.ts +2 -1
- package/dist/jwk.js +158 -122
- package/dist/kmac.d.ts +11 -0
- package/dist/kmac.js +49 -0
- package/dist/memory.d.ts +8 -0
- package/dist/memory.js +13 -0
- package/dist/mlDsa.d.ts +5 -0
- package/dist/mlDsa.js +43 -9
- package/dist/mlKem.d.ts +5 -2
- package/dist/mlKem.js +37 -26
- package/dist/operationResponse.d.ts +16 -0
- package/dist/operationResponse.js +46 -0
- package/dist/p256Ecdh.js +5 -1
- package/dist/p384Ecdh.js +5 -1
- package/dist/p521Ecdh.js +5 -1
- package/dist/pbkdf2.d.ts +6 -8
- package/dist/pbkdf2.js +12 -12
- package/dist/proto/generated/reallyme/crypto/v1/crypto_pb.d.ts +2859 -128
- package/dist/proto/generated/reallyme/crypto/v1/crypto_pb.js +992 -132
- package/dist/proto.d.ts +99 -7
- package/dist/proto.js +741 -16
- package/dist/rsa.d.ts +4 -1
- package/dist/rsa.js +23 -16
- package/dist/slhDsa.d.ts +5 -0
- package/dist/slhDsa.js +40 -9
- package/dist/validateBytes.d.ts +7 -1
- package/dist/validateBytes.js +63 -3
- package/dist/wasm/reallyme_crypto_wasm.js +77 -365
- package/dist/wasm/reallyme_crypto_wasm_bg.wasm +0 -0
- package/dist/wasmModuleTypes.d.ts +9 -21
- package/dist/wasmProvider.d.ts +12 -29
- package/dist/wasmProvider.js +25 -43
- package/dist/xWing.d.ts +5 -4
- package/dist/xWing.js +40 -40
- package/package.json +20 -2
- package/dist/codecs.d.ts +0 -35
- package/dist/codecs.js +0 -216
- package/dist/proto/generated/reallyme/codec/v1/codec_pb.d.ts +0 -253
- package/dist/proto/generated/reallyme/codec/v1/codec_pb.js +0 -160
package/dist/hpke.d.ts
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import type { ReallyMeHpkeSuite } from "./algorithms.js";
|
|
2
|
+
import type { ReallyMeWasmProvider } from "./wasmProvider.js";
|
|
2
3
|
export declare const HPKE_P256_PRIVATE_KEY_LENGTH = 32;
|
|
3
4
|
export declare const HPKE_P256_PUBLIC_KEY_LENGTH = 65;
|
|
4
5
|
export declare const HPKE_X25519_PRIVATE_KEY_LENGTH = 32;
|
|
5
6
|
export declare const HPKE_X25519_PUBLIC_KEY_LENGTH = 32;
|
|
6
7
|
export declare const HPKE_AEAD_TAG_LENGTH = 16;
|
|
8
|
+
export declare const HPKE_INFO_MAX_LENGTH = 65530;
|
|
7
9
|
export type ReallyMeHpkeSealedMessage = Readonly<{
|
|
8
10
|
encapsulatedKey: Uint8Array;
|
|
9
11
|
ciphertext: Uint8Array;
|
|
10
12
|
}>;
|
|
11
13
|
export declare const ReallyMeHpke: {
|
|
12
14
|
readonly sealBase: (suite: ReallyMeHpkeSuite, recipientPublicKey: Uint8Array, info: Uint8Array, aad: Uint8Array, plaintext: Uint8Array) => ReallyMeHpkeSealedMessage;
|
|
15
|
+
readonly sealBaseWithProvider: (provider: ReallyMeWasmProvider, suite: ReallyMeHpkeSuite, recipientPublicKey: Uint8Array, info: Uint8Array, aad: Uint8Array, plaintext: Uint8Array) => ReallyMeHpkeSealedMessage;
|
|
13
16
|
readonly openBase: (suite: ReallyMeHpkeSuite, recipientSecretKey: Uint8Array, encapsulatedKey: Uint8Array, info: Uint8Array, aad: Uint8Array, ciphertext: Uint8Array) => Uint8Array;
|
|
17
|
+
readonly openBaseWithProvider: (provider: ReallyMeWasmProvider, suite: ReallyMeHpkeSuite, recipientSecretKey: Uint8Array, encapsulatedKey: Uint8Array, info: Uint8Array, aad: Uint8Array, ciphertext: Uint8Array) => Uint8Array;
|
|
14
18
|
};
|
|
15
|
-
export declare const sealHpkeBaseDeterministicallyForTest: (suite: ReallyMeHpkeSuite, recipientPublicKey: Uint8Array, encapsulationRandomness: Uint8Array, info: Uint8Array, aad: Uint8Array, plaintext: Uint8Array) => ReallyMeHpkeSealedMessage;
|
package/dist/hpke.js
CHANGED
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
//
|
|
3
3
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
import { ReallyMeCryptoError } from "./errors.js";
|
|
5
|
-
import { ensureBytes,
|
|
5
|
+
import { ensureByteArrayAtMost, ensureBytes, ensureIndependentByteArray, MAX_CRYPTO_INPUT_LENGTH, readIndependentByteArrayProperty, } from "./validateBytes.js";
|
|
6
6
|
import { requireReallyMeWasmProvider } from "./wasmProvider.js";
|
|
7
7
|
export const HPKE_P256_PRIVATE_KEY_LENGTH = 32;
|
|
8
8
|
export const HPKE_P256_PUBLIC_KEY_LENGTH = 65;
|
|
9
9
|
export const HPKE_X25519_PRIVATE_KEY_LENGTH = 32;
|
|
10
10
|
export const HPKE_X25519_PUBLIC_KEY_LENGTH = 32;
|
|
11
11
|
export const HPKE_AEAD_TAG_LENGTH = 16;
|
|
12
|
+
export const HPKE_INFO_MAX_LENGTH = 65_530;
|
|
12
13
|
const hpkeSuite = (suite) => {
|
|
13
14
|
switch (suite) {
|
|
14
15
|
case "DHKEM-P256-HKDF-SHA256-HKDF-SHA256-AES-256-GCM":
|
|
@@ -23,37 +24,67 @@ const hpkeSuite = (suite) => {
|
|
|
23
24
|
publicKeyLength: HPKE_X25519_PUBLIC_KEY_LENGTH,
|
|
24
25
|
privateKeyLength: HPKE_X25519_PRIVATE_KEY_LENGTH,
|
|
25
26
|
};
|
|
27
|
+
default:
|
|
28
|
+
// JavaScript callers can bypass TypeScript's string union at runtime.
|
|
29
|
+
// Reject before a numeric selector can reach wasm-bindgen and truncate.
|
|
30
|
+
throw new ReallyMeCryptoError("invalid-input");
|
|
26
31
|
}
|
|
27
32
|
};
|
|
28
|
-
const readSealedMessage = (value, suite, plaintextLength) =>
|
|
29
|
-
encapsulatedKey
|
|
30
|
-
ciphertext
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
+
const readSealedMessage = (value, suite, plaintextLength, inputs) => {
|
|
34
|
+
const encapsulatedKey = readIndependentByteArrayProperty(value, "encapsulatedKey", suite.publicKeyLength, inputs);
|
|
35
|
+
const ciphertext = readIndependentByteArrayProperty(value, "ciphertext", plaintextLength + HPKE_AEAD_TAG_LENGTH, [...inputs, encapsulatedKey]);
|
|
36
|
+
return { encapsulatedKey, ciphertext };
|
|
37
|
+
};
|
|
38
|
+
const requirePlaintext = (value, expectedLength, inputs) => {
|
|
33
39
|
if (!(value instanceof Uint8Array)) {
|
|
34
40
|
throw new ReallyMeCryptoError("provider-failure");
|
|
35
41
|
}
|
|
42
|
+
ensureIndependentByteArray(value, inputs);
|
|
43
|
+
if (value.length !== expectedLength) {
|
|
44
|
+
value.fill(0);
|
|
45
|
+
throw new ReallyMeCryptoError("provider-failure");
|
|
46
|
+
}
|
|
36
47
|
return value;
|
|
37
48
|
};
|
|
38
49
|
export const ReallyMeHpke = {
|
|
39
50
|
sealBase(suite, recipientPublicKey, info, aad, plaintext) {
|
|
40
51
|
const config = hpkeSuite(suite);
|
|
41
52
|
ensureBytes(recipientPublicKey, config.publicKeyLength);
|
|
42
|
-
|
|
53
|
+
ensureByteArrayAtMost(info, HPKE_INFO_MAX_LENGTH);
|
|
54
|
+
ensureByteArrayAtMost(aad, MAX_CRYPTO_INPUT_LENGTH);
|
|
55
|
+
ensureByteArrayAtMost(plaintext, MAX_CRYPTO_INPUT_LENGTH);
|
|
56
|
+
return readSealedMessage(requireReallyMeWasmProvider().hpkeSealBase(config.id, recipientPublicKey, info, aad, plaintext), config, plaintext.length, [recipientPublicKey, info, aad, plaintext]);
|
|
57
|
+
},
|
|
58
|
+
sealBaseWithProvider(provider, suite, recipientPublicKey, info, aad, plaintext) {
|
|
59
|
+
const config = hpkeSuite(suite);
|
|
60
|
+
ensureBytes(recipientPublicKey, config.publicKeyLength);
|
|
61
|
+
ensureByteArrayAtMost(info, HPKE_INFO_MAX_LENGTH);
|
|
62
|
+
ensureByteArrayAtMost(aad, MAX_CRYPTO_INPUT_LENGTH);
|
|
63
|
+
ensureByteArrayAtMost(plaintext, MAX_CRYPTO_INPUT_LENGTH);
|
|
64
|
+
return readSealedMessage(provider.hpkeSealBase(config.id, recipientPublicKey, info, aad, plaintext), config, plaintext.length, [recipientPublicKey, info, aad, plaintext]);
|
|
43
65
|
},
|
|
44
66
|
openBase(suite, recipientSecretKey, encapsulatedKey, info, aad, ciphertext) {
|
|
45
67
|
const config = hpkeSuite(suite);
|
|
46
68
|
ensureBytes(recipientSecretKey, config.privateKeyLength);
|
|
47
69
|
ensureBytes(encapsulatedKey, config.publicKeyLength);
|
|
70
|
+
ensureByteArrayAtMost(info, HPKE_INFO_MAX_LENGTH);
|
|
71
|
+
ensureByteArrayAtMost(aad, MAX_CRYPTO_INPUT_LENGTH);
|
|
72
|
+
ensureByteArrayAtMost(ciphertext, MAX_CRYPTO_INPUT_LENGTH + HPKE_AEAD_TAG_LENGTH);
|
|
48
73
|
if (ciphertext.length < HPKE_AEAD_TAG_LENGTH) {
|
|
49
74
|
throw new ReallyMeCryptoError("invalid-input");
|
|
50
75
|
}
|
|
51
|
-
return requirePlaintext(requireReallyMeWasmProvider().hpkeOpenBase(config.id, recipientSecretKey, encapsulatedKey, info, aad, ciphertext));
|
|
76
|
+
return requirePlaintext(requireReallyMeWasmProvider().hpkeOpenBase(config.id, recipientSecretKey, encapsulatedKey, info, aad, ciphertext), ciphertext.length - HPKE_AEAD_TAG_LENGTH, [recipientSecretKey, encapsulatedKey, info, aad, ciphertext]);
|
|
77
|
+
},
|
|
78
|
+
openBaseWithProvider(provider, suite, recipientSecretKey, encapsulatedKey, info, aad, ciphertext) {
|
|
79
|
+
const config = hpkeSuite(suite);
|
|
80
|
+
ensureBytes(recipientSecretKey, config.privateKeyLength);
|
|
81
|
+
ensureBytes(encapsulatedKey, config.publicKeyLength);
|
|
82
|
+
ensureByteArrayAtMost(info, HPKE_INFO_MAX_LENGTH);
|
|
83
|
+
ensureByteArrayAtMost(aad, MAX_CRYPTO_INPUT_LENGTH);
|
|
84
|
+
ensureByteArrayAtMost(ciphertext, MAX_CRYPTO_INPUT_LENGTH + HPKE_AEAD_TAG_LENGTH);
|
|
85
|
+
if (ciphertext.length < HPKE_AEAD_TAG_LENGTH) {
|
|
86
|
+
throw new ReallyMeCryptoError("invalid-input");
|
|
87
|
+
}
|
|
88
|
+
return requirePlaintext(provider.hpkeOpenBase(config.id, recipientSecretKey, encapsulatedKey, info, aad, ciphertext), ciphertext.length - HPKE_AEAD_TAG_LENGTH, [recipientSecretKey, encapsulatedKey, info, aad, ciphertext]);
|
|
52
89
|
},
|
|
53
|
-
};
|
|
54
|
-
export const sealHpkeBaseDeterministicallyForTest = (suite, recipientPublicKey, encapsulationRandomness, info, aad, plaintext) => {
|
|
55
|
-
const config = hpkeSuite(suite);
|
|
56
|
-
ensureBytes(recipientPublicKey, config.publicKeyLength);
|
|
57
|
-
ensureBytes(encapsulationRandomness, config.privateKeyLength);
|
|
58
|
-
return readSealedMessage(requireReallyMeWasmProvider().hpkeSealBaseDerand(config.id, recipientPublicKey, encapsulationRandomness, info, aad, plaintext), config, plaintext.length);
|
|
59
90
|
};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
export { ReallyMeCryptoError } from "./errors.js";
|
|
2
2
|
export type { ReallyMeCryptoErrorCode } from "./errors.js";
|
|
3
3
|
export { REALLYME_AEAD_ALGORITHMS, REALLYME_HASH_ALGORITHMS, REALLYME_HPKE_SUITES, REALLYME_KDF_ALGORITHMS, REALLYME_KEM_ALGORITHMS, REALLYME_KEY_AGREEMENT_ALGORITHMS, REALLYME_KEY_WRAP_ALGORITHMS, REALLYME_MAC_ALGORITHMS, REALLYME_SIGNATURE_ALGORITHMS, } from "./algorithms.js";
|
|
4
|
-
export type { ReallyMeAeadAlgorithm, ReallyMeHashAlgorithm, ReallyMeHpkeSuite, ReallyMeKdfAlgorithm, ReallyMeKemAlgorithm, ReallyMeKeyAgreementAlgorithm, ReallyMeKeyWrapAlgorithm, ReallyMeMacAlgorithm, ReallyMeSignatureAlgorithm, } from "./algorithms.js";
|
|
5
|
-
export { AEAD_KEY_LENGTH, AEAD_NONCE_LENGTH, AEAD_TAG_LENGTH, AES_128_GCM_KEY_LENGTH, AES_192_GCM_KEY_LENGTH, AES_256_GCM_KEY_LENGTH, ReallyMeAead, XCHACHA20_POLY1305_NONCE_LENGTH, } from "./aead.js";
|
|
4
|
+
export type { ReallyMeAeadAlgorithm, ReallyMeHashAlgorithm, ReallyMeHkdfAlgorithm, ReallyMeHpkeSuite, ReallyMeJwaConcatKdfAlgorithm, ReallyMeKdfAlgorithm, ReallyMeKemAlgorithm, ReallyMeKeyAgreementAlgorithm, ReallyMeKeyWrapAlgorithm, ReallyMeKmacKdfAlgorithm, ReallyMeMacAlgorithm, ReallyMePbkdf2Algorithm, ReallyMeSignatureAlgorithm, } from "./algorithms.js";
|
|
5
|
+
export { AEAD_KEY_LENGTH, AEAD_NONCE_LENGTH, AEAD_TAG_LENGTH, AES_128_GCM_KEY_LENGTH, AES_192_GCM_KEY_LENGTH, AES_256_GCM_KEY_LENGTH, CHACHA20_POLY1305_KEY_LENGTH, ReallyMeAead, XCHACHA20_POLY1305_NONCE_LENGTH, } from "./aead.js";
|
|
6
6
|
export { AES_256_KW_KEK_LENGTH, AES_KW_BLOCK_LENGTH, AES_KW_INTEGRITY_CHECK_LENGTH, AES_KW_MAX_KEY_DATA_LENGTH, AES_KW_MIN_KEY_DATA_LENGTH, AES_KW_MIN_WRAPPED_KEY_LENGTH, ReallyMeAesKw, } from "./aesKw.js";
|
|
7
|
-
export { ARGON2ID_DERIVED_KEY_LENGTH, ARGON2ID_SALT_MAX_LENGTH, ARGON2ID_SALT_MIN_LENGTH, ARGON2ID_V1, ARGON2ID_V2, ReallyMeArgon2id, } from "./argon2id.js";
|
|
7
|
+
export { ARGON2ID_DERIVED_KEY_LENGTH, ARGON2ID_SALT_MAX_LENGTH, ARGON2ID_SALT_MIN_LENGTH, ARGON2ID_SECRET_MAX_LENGTH, ARGON2ID_V1, ARGON2ID_V2, ReallyMeArgon2id, } from "./argon2id.js";
|
|
8
8
|
export { BIP340_SCHNORR_AUX_RAND_LENGTH, BIP340_SCHNORR_MESSAGE_LENGTH, BIP340_SCHNORR_PUBLIC_KEY_LENGTH, BIP340_SCHNORR_SECRET_KEY_LENGTH, BIP340_SCHNORR_SIGNATURE_LENGTH, ReallyMeBip340Schnorr, } from "./bip340Schnorr.js";
|
|
9
|
-
export { HPKE_AEAD_TAG_LENGTH, HPKE_P256_PRIVATE_KEY_LENGTH, HPKE_P256_PUBLIC_KEY_LENGTH, HPKE_X25519_PRIVATE_KEY_LENGTH, HPKE_X25519_PUBLIC_KEY_LENGTH, ReallyMeHpke, } from "./hpke.js";
|
|
9
|
+
export { HPKE_AEAD_TAG_LENGTH, HPKE_INFO_MAX_LENGTH, HPKE_P256_PRIVATE_KEY_LENGTH, HPKE_P256_PUBLIC_KEY_LENGTH, HPKE_X25519_PRIVATE_KEY_LENGTH, HPKE_X25519_PUBLIC_KEY_LENGTH, ReallyMeHpke, } from "./hpke.js";
|
|
10
10
|
export type { ReallyMeHpkeSealedMessage as ReallyMeHpkeProviderSealedMessage } from "./hpke.js";
|
|
11
|
-
export { ReallyMeCodecs } from "./codecs.js";
|
|
12
|
-
export type { ReallyMeDagCborCidVerification, ReallyMeKeyMaterialKind, ReallyMeMulticodecMetadata, ReallyMeMulticodecTag, ReallyMeParsedMultikey, } from "./codecs.js";
|
|
13
11
|
export { ReallyMeJwk } from "./jwk.js";
|
|
14
12
|
export type { ReallyMeAkpJwk, ReallyMeEcJwk, ReallyMeJwk as ReallyMeJsonWebKey, ReallyMeJwkAlgorithm, ReallyMeJwkKey, ReallyMeJwks, ReallyMeJwksKeySet, ReallyMeOkpJwk, } from "./jwk.js";
|
|
15
|
-
export { ML_KEM_1024_CIPHERTEXT_LENGTH, ML_KEM_1024_PUBLIC_KEY_LENGTH, ML_KEM_512_CIPHERTEXT_LENGTH, ML_KEM_512_PUBLIC_KEY_LENGTH, ML_KEM_768_CIPHERTEXT_LENGTH, ML_KEM_768_PUBLIC_KEY_LENGTH,
|
|
13
|
+
export { ML_KEM_1024_CIPHERTEXT_LENGTH, ML_KEM_1024_PUBLIC_KEY_LENGTH, ML_KEM_512_CIPHERTEXT_LENGTH, ML_KEM_512_PUBLIC_KEY_LENGTH, ML_KEM_768_CIPHERTEXT_LENGTH, ML_KEM_768_PUBLIC_KEY_LENGTH, ML_KEM_SECRET_KEY_LENGTH, ML_KEM_SHARED_SECRET_LENGTH, ReallyMeMlKem, } from "./mlKem.js";
|
|
16
14
|
export type { ReallyMeMlKemEncapsulation, ReallyMeMlKemKeyPair } from "./mlKem.js";
|
|
17
15
|
export { ML_DSA_44_PUBLIC_KEY_LENGTH, ML_DSA_44_SIGNATURE_LENGTH, ML_DSA_65_PUBLIC_KEY_LENGTH, ML_DSA_65_SIGNATURE_LENGTH, ML_DSA_87_PUBLIC_KEY_LENGTH, ML_DSA_87_SIGNATURE_LENGTH, ML_DSA_SECRET_KEY_LENGTH, ReallyMeMlDsa, } from "./mlDsa.js";
|
|
18
16
|
export type { ReallyMeMlDsaKeyPair } from "./mlDsa.js";
|
|
@@ -20,25 +18,28 @@ export { ReallyMeSlhDsa, SLH_DSA_SHA2_128S_KEYGEN_SEED_LENGTH, SLH_DSA_SHA2_128S
|
|
|
20
18
|
export type { ReallyMeSlhDsaKeyPair } from "./slhDsa.js";
|
|
21
19
|
export { compiledProviders, REALLYME_CRYPTO_PROVIDERS } from "./providerCatalog.js";
|
|
22
20
|
export type { ReallyMeCryptoProvider } from "./providerCatalog.js";
|
|
23
|
-
export { ReallyMeCrypto } from "./cryptoFacade.js";
|
|
24
|
-
export type { ReallyMeHpkeSealedMessage, ReallyMeKeyAgreementKeyPair, ReallyMeKemEncapsulation, ReallyMeKemKeyPair, ReallyMeSignatureKeyPair, } from "./cryptoFacade.js";
|
|
21
|
+
export { createReallyMeCrypto, ReallyMeCrypto } from "./cryptoFacade.js";
|
|
22
|
+
export type { ReallyMeCryptoFacade, ReallyMeCryptoProviders, ReallyMeHpkeSealedMessage, ReallyMeKeyAgreementKeyPair, ReallyMeKemEncapsulation, ReallyMeKemKeyPair, ReallyMeSignatureKeyPair, } from "./cryptoFacade.js";
|
|
25
23
|
export { ReallyMeDigest } from "./digest.js";
|
|
26
24
|
export { ED25519_PUBLIC_KEY_LENGTH, ED25519_SECRET_KEY_LENGTH, ED25519_SIGNATURE_LENGTH, ReallyMeEd25519, } from "./ed25519.js";
|
|
27
25
|
export { HKDF_MAX_INPUT_LENGTH, HKDF_MAX_OUTPUT_LENGTH, HKDF_MIN_INPUT_KEY_MATERIAL_LENGTH, HKDF_MIN_OUTPUT_LENGTH, ReallyMeHkdf, } from "./hkdf.js";
|
|
26
|
+
export { KMAC256_MAX_CONTEXT_LENGTH, KMAC256_MAX_CUSTOMIZATION_LENGTH, KMAC256_MAX_KEY_LENGTH, KMAC256_MAX_OUTPUT_LENGTH, KMAC256_MIN_KEY_LENGTH, KMAC256_MIN_OUTPUT_LENGTH, ReallyMeKmac, } from "./kmac.js";
|
|
28
27
|
export { JWA_CONCAT_KDF_MAX_INFO_LENGTH, JWA_CONCAT_KDF_MAX_OUTPUT_LENGTH, JWA_CONCAT_KDF_MAX_SHARED_SECRET_LENGTH, JWA_CONCAT_KDF_MIN_OUTPUT_LENGTH, JWA_CONCAT_KDF_SHA256_DIGEST_LENGTH, ReallyMeJwaConcatKdf, } from "./jwaConcatKdf.js";
|
|
29
|
-
export {
|
|
28
|
+
export { bestEffortClear } from "./memory.js";
|
|
29
|
+
export { processOperationResponse, processOperationResponseJson, } from "./operationResponse.js";
|
|
30
|
+
export { HMAC_MAX_KEY_LENGTH, HMAC_SHA256_TAG_LENGTH, HMAC_SHA384_TAG_LENGTH, HMAC_SHA512_TAG_LENGTH, ReallyMeHmac, } from "./hmac.js";
|
|
30
31
|
export { P256_ECDH_COMPRESSED_PUBLIC_KEY_LENGTH, P256_ECDH_SECRET_KEY_LENGTH, P256_ECDH_SHARED_SECRET_LENGTH, ReallyMeP256Ecdh, } from "./p256Ecdh.js";
|
|
31
32
|
export { P256_ECDSA_COMPACT_SIGNATURE_LENGTH, P256_ECDSA_COMPRESSED_PUBLIC_KEY_LENGTH, P256_ECDSA_DER_SIGNATURE_MAX_LENGTH, P256_ECDSA_SECRET_KEY_LENGTH, ReallyMeP256Ecdsa, } from "./p256Ecdsa.js";
|
|
32
33
|
export { P384_ECDH_COMPRESSED_PUBLIC_KEY_LENGTH, P384_ECDH_SECRET_KEY_LENGTH, P384_ECDH_SHARED_SECRET_LENGTH, ReallyMeP384Ecdh, } from "./p384Ecdh.js";
|
|
33
34
|
export { P384_ECDSA_COMPACT_SIGNATURE_LENGTH, P384_ECDSA_COMPRESSED_PUBLIC_KEY_LENGTH, P384_ECDSA_DER_SIGNATURE_MAX_LENGTH, P384_ECDSA_SECRET_KEY_LENGTH, ReallyMeP384Ecdsa, } from "./p384Ecdsa.js";
|
|
34
35
|
export { P521_ECDH_COMPRESSED_PUBLIC_KEY_LENGTH, P521_ECDH_SECRET_KEY_LENGTH, P521_ECDH_SHARED_SECRET_LENGTH, ReallyMeP521Ecdh, } from "./p521Ecdh.js";
|
|
35
36
|
export { P521_ECDSA_COMPACT_SIGNATURE_LENGTH, P521_ECDSA_COMPRESSED_PUBLIC_KEY_LENGTH, P521_ECDSA_DER_SIGNATURE_MAX_LENGTH, P521_ECDSA_SECRET_KEY_LENGTH, ReallyMeP521Ecdsa, } from "./p521Ecdsa.js";
|
|
36
|
-
export { PBKDF2_MAX_INPUT_LENGTH, PBKDF2_MAX_OUTPUT_LENGTH, PBKDF2_MIN_INPUT_LENGTH, PBKDF2_MIN_ITERATIONS, PBKDF2_MIN_OUTPUT_LENGTH, PBKDF2_RECOMMENDED_MIN_ITERATIONS_SHA256, PBKDF2_RECOMMENDED_MIN_ITERATIONS_SHA512, ReallyMePbkdf2, } from "./pbkdf2.js";
|
|
37
|
+
export { PBKDF2_MAX_INPUT_LENGTH, PBKDF2_MAX_ITERATIONS, PBKDF2_MAX_OUTPUT_LENGTH, PBKDF2_MIN_INPUT_LENGTH, PBKDF2_MIN_ITERATIONS, PBKDF2_MIN_OUTPUT_LENGTH, PBKDF2_RECOMMENDED_MIN_ITERATIONS_SHA256, PBKDF2_RECOMMENDED_MIN_ITERATIONS_SHA512, ReallyMePbkdf2, } from "./pbkdf2.js";
|
|
37
38
|
export { ReallyMeSecp256k1, SECP256K1_COMPRESSED_PUBLIC_KEY_LENGTH, SECP256K1_SECRET_KEY_LENGTH, SECP256K1_SIGNATURE_LENGTH, } from "./secp256k1.js";
|
|
38
39
|
export { ReallyMeRsa, RSA_PUBLIC_KEY_DER_MAX_LENGTH, RSA_SIGNATURE_MAX_LENGTH, } from "./rsa.js";
|
|
39
40
|
export type { ReallyMeRsaPublicKeyDerEncoding } from "./rsa.js";
|
|
40
41
|
export { ReallyMeX25519, X25519_PUBLIC_KEY_LENGTH, X25519_SECRET_KEY_LENGTH, X25519_SHARED_SECRET_LENGTH, } from "./x25519.js";
|
|
41
|
-
export { installReallyMeWasmProvider } from "./wasmProvider.js";
|
|
42
|
+
export { createReallyMeWasmProvider, installReallyMeWasmProvider } from "./wasmProvider.js";
|
|
42
43
|
export type { ReallyMeWasmProvider } from "./wasmProvider.js";
|
|
43
|
-
export { ReallyMeXWing,
|
|
44
|
+
export { ReallyMeXWing, X_WING_768_CIPHERTEXT_LENGTH, X_WING_768_PUBLIC_KEY_LENGTH, X_WING_SECRET_KEY_LENGTH, X_WING_SHARED_SECRET_LENGTH, } from "./xWing.js";
|
|
44
45
|
export type { ReallyMeXWingEncapsulation, ReallyMeXWingKeyPair } from "./xWing.js";
|
package/dist/index.js
CHANGED
|
@@ -3,32 +3,34 @@
|
|
|
3
3
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
export { ReallyMeCryptoError } from "./errors.js";
|
|
5
5
|
export { REALLYME_AEAD_ALGORITHMS, REALLYME_HASH_ALGORITHMS, REALLYME_HPKE_SUITES, REALLYME_KDF_ALGORITHMS, REALLYME_KEM_ALGORITHMS, REALLYME_KEY_AGREEMENT_ALGORITHMS, REALLYME_KEY_WRAP_ALGORITHMS, REALLYME_MAC_ALGORITHMS, REALLYME_SIGNATURE_ALGORITHMS, } from "./algorithms.js";
|
|
6
|
-
export { AEAD_KEY_LENGTH, AEAD_NONCE_LENGTH, AEAD_TAG_LENGTH, AES_128_GCM_KEY_LENGTH, AES_192_GCM_KEY_LENGTH, AES_256_GCM_KEY_LENGTH, ReallyMeAead, XCHACHA20_POLY1305_NONCE_LENGTH, } from "./aead.js";
|
|
6
|
+
export { AEAD_KEY_LENGTH, AEAD_NONCE_LENGTH, AEAD_TAG_LENGTH, AES_128_GCM_KEY_LENGTH, AES_192_GCM_KEY_LENGTH, AES_256_GCM_KEY_LENGTH, CHACHA20_POLY1305_KEY_LENGTH, ReallyMeAead, XCHACHA20_POLY1305_NONCE_LENGTH, } from "./aead.js";
|
|
7
7
|
export { AES_256_KW_KEK_LENGTH, AES_KW_BLOCK_LENGTH, AES_KW_INTEGRITY_CHECK_LENGTH, AES_KW_MAX_KEY_DATA_LENGTH, AES_KW_MIN_KEY_DATA_LENGTH, AES_KW_MIN_WRAPPED_KEY_LENGTH, ReallyMeAesKw, } from "./aesKw.js";
|
|
8
|
-
export { ARGON2ID_DERIVED_KEY_LENGTH, ARGON2ID_SALT_MAX_LENGTH, ARGON2ID_SALT_MIN_LENGTH, ARGON2ID_V1, ARGON2ID_V2, ReallyMeArgon2id, } from "./argon2id.js";
|
|
8
|
+
export { ARGON2ID_DERIVED_KEY_LENGTH, ARGON2ID_SALT_MAX_LENGTH, ARGON2ID_SALT_MIN_LENGTH, ARGON2ID_SECRET_MAX_LENGTH, ARGON2ID_V1, ARGON2ID_V2, ReallyMeArgon2id, } from "./argon2id.js";
|
|
9
9
|
export { BIP340_SCHNORR_AUX_RAND_LENGTH, BIP340_SCHNORR_MESSAGE_LENGTH, BIP340_SCHNORR_PUBLIC_KEY_LENGTH, BIP340_SCHNORR_SECRET_KEY_LENGTH, BIP340_SCHNORR_SIGNATURE_LENGTH, ReallyMeBip340Schnorr, } from "./bip340Schnorr.js";
|
|
10
|
-
export { HPKE_AEAD_TAG_LENGTH, HPKE_P256_PRIVATE_KEY_LENGTH, HPKE_P256_PUBLIC_KEY_LENGTH, HPKE_X25519_PRIVATE_KEY_LENGTH, HPKE_X25519_PUBLIC_KEY_LENGTH, ReallyMeHpke, } from "./hpke.js";
|
|
11
|
-
export { ReallyMeCodecs } from "./codecs.js";
|
|
10
|
+
export { HPKE_AEAD_TAG_LENGTH, HPKE_INFO_MAX_LENGTH, HPKE_P256_PRIVATE_KEY_LENGTH, HPKE_P256_PUBLIC_KEY_LENGTH, HPKE_X25519_PRIVATE_KEY_LENGTH, HPKE_X25519_PUBLIC_KEY_LENGTH, ReallyMeHpke, } from "./hpke.js";
|
|
12
11
|
export { ReallyMeJwk } from "./jwk.js";
|
|
13
|
-
export { ML_KEM_1024_CIPHERTEXT_LENGTH, ML_KEM_1024_PUBLIC_KEY_LENGTH, ML_KEM_512_CIPHERTEXT_LENGTH, ML_KEM_512_PUBLIC_KEY_LENGTH, ML_KEM_768_CIPHERTEXT_LENGTH, ML_KEM_768_PUBLIC_KEY_LENGTH,
|
|
12
|
+
export { ML_KEM_1024_CIPHERTEXT_LENGTH, ML_KEM_1024_PUBLIC_KEY_LENGTH, ML_KEM_512_CIPHERTEXT_LENGTH, ML_KEM_512_PUBLIC_KEY_LENGTH, ML_KEM_768_CIPHERTEXT_LENGTH, ML_KEM_768_PUBLIC_KEY_LENGTH, ML_KEM_SECRET_KEY_LENGTH, ML_KEM_SHARED_SECRET_LENGTH, ReallyMeMlKem, } from "./mlKem.js";
|
|
14
13
|
export { ML_DSA_44_PUBLIC_KEY_LENGTH, ML_DSA_44_SIGNATURE_LENGTH, ML_DSA_65_PUBLIC_KEY_LENGTH, ML_DSA_65_SIGNATURE_LENGTH, ML_DSA_87_PUBLIC_KEY_LENGTH, ML_DSA_87_SIGNATURE_LENGTH, ML_DSA_SECRET_KEY_LENGTH, ReallyMeMlDsa, } from "./mlDsa.js";
|
|
15
14
|
export { ReallyMeSlhDsa, SLH_DSA_SHA2_128S_KEYGEN_SEED_LENGTH, SLH_DSA_SHA2_128S_PUBLIC_KEY_LENGTH, SLH_DSA_SHA2_128S_SECRET_KEY_LENGTH, SLH_DSA_SHA2_128S_SIGNATURE_LENGTH, } from "./slhDsa.js";
|
|
16
15
|
export { compiledProviders, REALLYME_CRYPTO_PROVIDERS } from "./providerCatalog.js";
|
|
17
|
-
export { ReallyMeCrypto } from "./cryptoFacade.js";
|
|
16
|
+
export { createReallyMeCrypto, ReallyMeCrypto } from "./cryptoFacade.js";
|
|
18
17
|
export { ReallyMeDigest } from "./digest.js";
|
|
19
18
|
export { ED25519_PUBLIC_KEY_LENGTH, ED25519_SECRET_KEY_LENGTH, ED25519_SIGNATURE_LENGTH, ReallyMeEd25519, } from "./ed25519.js";
|
|
20
19
|
export { HKDF_MAX_INPUT_LENGTH, HKDF_MAX_OUTPUT_LENGTH, HKDF_MIN_INPUT_KEY_MATERIAL_LENGTH, HKDF_MIN_OUTPUT_LENGTH, ReallyMeHkdf, } from "./hkdf.js";
|
|
20
|
+
export { KMAC256_MAX_CONTEXT_LENGTH, KMAC256_MAX_CUSTOMIZATION_LENGTH, KMAC256_MAX_KEY_LENGTH, KMAC256_MAX_OUTPUT_LENGTH, KMAC256_MIN_KEY_LENGTH, KMAC256_MIN_OUTPUT_LENGTH, ReallyMeKmac, } from "./kmac.js";
|
|
21
21
|
export { JWA_CONCAT_KDF_MAX_INFO_LENGTH, JWA_CONCAT_KDF_MAX_OUTPUT_LENGTH, JWA_CONCAT_KDF_MAX_SHARED_SECRET_LENGTH, JWA_CONCAT_KDF_MIN_OUTPUT_LENGTH, JWA_CONCAT_KDF_SHA256_DIGEST_LENGTH, ReallyMeJwaConcatKdf, } from "./jwaConcatKdf.js";
|
|
22
|
-
export {
|
|
22
|
+
export { bestEffortClear } from "./memory.js";
|
|
23
|
+
export { processOperationResponse, processOperationResponseJson, } from "./operationResponse.js";
|
|
24
|
+
export { HMAC_MAX_KEY_LENGTH, HMAC_SHA256_TAG_LENGTH, HMAC_SHA384_TAG_LENGTH, HMAC_SHA512_TAG_LENGTH, ReallyMeHmac, } from "./hmac.js";
|
|
23
25
|
export { P256_ECDH_COMPRESSED_PUBLIC_KEY_LENGTH, P256_ECDH_SECRET_KEY_LENGTH, P256_ECDH_SHARED_SECRET_LENGTH, ReallyMeP256Ecdh, } from "./p256Ecdh.js";
|
|
24
26
|
export { P256_ECDSA_COMPACT_SIGNATURE_LENGTH, P256_ECDSA_COMPRESSED_PUBLIC_KEY_LENGTH, P256_ECDSA_DER_SIGNATURE_MAX_LENGTH, P256_ECDSA_SECRET_KEY_LENGTH, ReallyMeP256Ecdsa, } from "./p256Ecdsa.js";
|
|
25
27
|
export { P384_ECDH_COMPRESSED_PUBLIC_KEY_LENGTH, P384_ECDH_SECRET_KEY_LENGTH, P384_ECDH_SHARED_SECRET_LENGTH, ReallyMeP384Ecdh, } from "./p384Ecdh.js";
|
|
26
28
|
export { P384_ECDSA_COMPACT_SIGNATURE_LENGTH, P384_ECDSA_COMPRESSED_PUBLIC_KEY_LENGTH, P384_ECDSA_DER_SIGNATURE_MAX_LENGTH, P384_ECDSA_SECRET_KEY_LENGTH, ReallyMeP384Ecdsa, } from "./p384Ecdsa.js";
|
|
27
29
|
export { P521_ECDH_COMPRESSED_PUBLIC_KEY_LENGTH, P521_ECDH_SECRET_KEY_LENGTH, P521_ECDH_SHARED_SECRET_LENGTH, ReallyMeP521Ecdh, } from "./p521Ecdh.js";
|
|
28
30
|
export { P521_ECDSA_COMPACT_SIGNATURE_LENGTH, P521_ECDSA_COMPRESSED_PUBLIC_KEY_LENGTH, P521_ECDSA_DER_SIGNATURE_MAX_LENGTH, P521_ECDSA_SECRET_KEY_LENGTH, ReallyMeP521Ecdsa, } from "./p521Ecdsa.js";
|
|
29
|
-
export { PBKDF2_MAX_INPUT_LENGTH, PBKDF2_MAX_OUTPUT_LENGTH, PBKDF2_MIN_INPUT_LENGTH, PBKDF2_MIN_ITERATIONS, PBKDF2_MIN_OUTPUT_LENGTH, PBKDF2_RECOMMENDED_MIN_ITERATIONS_SHA256, PBKDF2_RECOMMENDED_MIN_ITERATIONS_SHA512, ReallyMePbkdf2, } from "./pbkdf2.js";
|
|
31
|
+
export { PBKDF2_MAX_INPUT_LENGTH, PBKDF2_MAX_ITERATIONS, PBKDF2_MAX_OUTPUT_LENGTH, PBKDF2_MIN_INPUT_LENGTH, PBKDF2_MIN_ITERATIONS, PBKDF2_MIN_OUTPUT_LENGTH, PBKDF2_RECOMMENDED_MIN_ITERATIONS_SHA256, PBKDF2_RECOMMENDED_MIN_ITERATIONS_SHA512, ReallyMePbkdf2, } from "./pbkdf2.js";
|
|
30
32
|
export { ReallyMeSecp256k1, SECP256K1_COMPRESSED_PUBLIC_KEY_LENGTH, SECP256K1_SECRET_KEY_LENGTH, SECP256K1_SIGNATURE_LENGTH, } from "./secp256k1.js";
|
|
31
33
|
export { ReallyMeRsa, RSA_PUBLIC_KEY_DER_MAX_LENGTH, RSA_SIGNATURE_MAX_LENGTH, } from "./rsa.js";
|
|
32
34
|
export { ReallyMeX25519, X25519_PUBLIC_KEY_LENGTH, X25519_SECRET_KEY_LENGTH, X25519_SHARED_SECRET_LENGTH, } from "./x25519.js";
|
|
33
|
-
export { installReallyMeWasmProvider } from "./wasmProvider.js";
|
|
34
|
-
export { ReallyMeXWing,
|
|
35
|
+
export { createReallyMeWasmProvider, installReallyMeWasmProvider } from "./wasmProvider.js";
|
|
36
|
+
export { ReallyMeXWing, X_WING_768_CIPHERTEXT_LENGTH, X_WING_768_PUBLIC_KEY_LENGTH, X_WING_SECRET_KEY_LENGTH, X_WING_SHARED_SECRET_LENGTH, } from "./xWing.js";
|
package/dist/jwaConcatKdf.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
import { sha256 } from "@noble/hashes/sha2.js";
|
|
5
5
|
import { ReallyMeCryptoError } from "./errors.js";
|
|
6
|
+
import { bestEffortClear } from "./memory.js";
|
|
6
7
|
export const JWA_CONCAT_KDF_SHA256_DIGEST_LENGTH = 32;
|
|
7
8
|
export const JWA_CONCAT_KDF_MAX_SHARED_SECRET_LENGTH = 4096;
|
|
8
9
|
export const JWA_CONCAT_KDF_MAX_INFO_LENGTH = 4096;
|
|
@@ -17,13 +18,16 @@ export const ReallyMeJwaConcatKdf = {
|
|
|
17
18
|
const derived = new Uint8Array(reps * JWA_CONCAT_KDF_SHA256_DIGEST_LENGTH);
|
|
18
19
|
for (let counter = 1; counter <= reps; counter += 1) {
|
|
19
20
|
const counterBytes = uint32be(counter);
|
|
20
|
-
const
|
|
21
|
+
const hashInput = concatBytes(counterBytes, sharedSecret, otherInfo);
|
|
22
|
+
const digest = sha256(hashInput);
|
|
21
23
|
derived.set(digest, (counter - 1) * JWA_CONCAT_KDF_SHA256_DIGEST_LENGTH);
|
|
22
|
-
|
|
24
|
+
bestEffortClear(digest);
|
|
25
|
+
bestEffortClear(hashInput);
|
|
26
|
+
bestEffortClear(counterBytes);
|
|
23
27
|
}
|
|
24
28
|
const output = derived.slice(0, outputLength);
|
|
25
|
-
derived
|
|
26
|
-
otherInfo
|
|
29
|
+
bestEffortClear(derived);
|
|
30
|
+
bestEffortClear(otherInfo);
|
|
27
31
|
return output;
|
|
28
32
|
},
|
|
29
33
|
};
|
package/dist/jwk.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type ReallyMeJwkAlgorithm = "Ed25519" | "X25519" | "P-256" | "secp256k1" | "ML-DSA-44" | "ML-DSA-65" | "ML-DSA-87" | "ML-KEM-512" | "ML-KEM-768" | "ML-KEM-1024" | "SLH-DSA-SHA2-128s" | "X-Wing-768"
|
|
1
|
+
export type ReallyMeJwkAlgorithm = "Ed25519" | "X25519" | "P-256" | "secp256k1" | "ML-DSA-44" | "ML-DSA-65" | "ML-DSA-87" | "ML-KEM-512" | "ML-KEM-768" | "ML-KEM-1024" | "SLH-DSA-SHA2-128s" | "X-Wing-768";
|
|
2
2
|
export type ReallyMeOkpJwk = Readonly<{
|
|
3
3
|
alg: string;
|
|
4
4
|
crv: "Ed25519" | "X25519";
|
|
@@ -32,6 +32,7 @@ export type ReallyMeJwks = Readonly<{
|
|
|
32
32
|
export type ReallyMeJwksKeySet = Readonly<{
|
|
33
33
|
keys: ReadonlyArray<ReallyMeJwkKey>;
|
|
34
34
|
}>;
|
|
35
|
+
export declare const MAX_JWKS_KEYS = 1024;
|
|
35
36
|
export declare const ReallyMeJwk: {
|
|
36
37
|
readonly toJwk: (algorithm: ReallyMeJwkAlgorithm, publicKey: Uint8Array) => ReallyMeJwk;
|
|
37
38
|
readonly fromJwk: (value: unknown) => ReallyMeJwkKey;
|