@opentdf/sdk 0.12.0-beta.109 → 0.12.0-beta.113

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 (36) hide show
  1. package/dist/cjs/tdf3/src/crypto/core/ec.js +88 -0
  2. package/dist/cjs/tdf3/src/crypto/core/key-format.js +359 -0
  3. package/dist/cjs/tdf3/src/crypto/core/keys.js +85 -0
  4. package/dist/cjs/tdf3/src/crypto/core/rsa.js +120 -0
  5. package/dist/cjs/tdf3/src/crypto/core/signing.js +178 -0
  6. package/dist/cjs/tdf3/src/crypto/core/symmetric.js +205 -0
  7. package/dist/cjs/tdf3/src/crypto/index.js +69 -1051
  8. package/dist/types/tdf3/src/crypto/core/ec.d.ts +11 -0
  9. package/dist/types/tdf3/src/crypto/core/ec.d.ts.map +1 -0
  10. package/dist/types/tdf3/src/crypto/core/key-format.d.ts +41 -0
  11. package/dist/types/tdf3/src/crypto/core/key-format.d.ts.map +1 -0
  12. package/dist/types/tdf3/src/crypto/core/keys.d.ts +27 -0
  13. package/dist/types/tdf3/src/crypto/core/keys.d.ts.map +1 -0
  14. package/dist/types/tdf3/src/crypto/core/rsa.d.ts +35 -0
  15. package/dist/types/tdf3/src/crypto/core/rsa.d.ts.map +1 -0
  16. package/dist/types/tdf3/src/crypto/core/signing.d.ts +10 -0
  17. package/dist/types/tdf3/src/crypto/core/signing.d.ts.map +1 -0
  18. package/dist/types/tdf3/src/crypto/core/symmetric.d.ts +68 -0
  19. package/dist/types/tdf3/src/crypto/core/symmetric.d.ts.map +1 -0
  20. package/dist/types/tdf3/src/crypto/index.d.ts +11 -164
  21. package/dist/types/tdf3/src/crypto/index.d.ts.map +1 -1
  22. package/dist/web/tdf3/src/crypto/core/ec.js +84 -0
  23. package/dist/web/tdf3/src/crypto/core/key-format.js +348 -0
  24. package/dist/web/tdf3/src/crypto/core/keys.js +78 -0
  25. package/dist/web/tdf3/src/crypto/core/rsa.js +112 -0
  26. package/dist/web/tdf3/src/crypto/core/signing.js +174 -0
  27. package/dist/web/tdf3/src/crypto/core/symmetric.js +192 -0
  28. package/dist/web/tdf3/src/crypto/index.js +13 -994
  29. package/package.json +1 -1
  30. package/tdf3/src/crypto/core/ec.ts +118 -0
  31. package/tdf3/src/crypto/core/key-format.ts +420 -0
  32. package/tdf3/src/crypto/core/keys.ts +86 -0
  33. package/tdf3/src/crypto/core/rsa.ts +144 -0
  34. package/tdf3/src/crypto/core/signing.ts +214 -0
  35. package/tdf3/src/crypto/core/symmetric.ts +265 -0
  36. package/tdf3/src/crypto/index.ts +71 -1239
@@ -0,0 +1,11 @@
1
+ import { type ECCurve, type HkdfParams, type KeyPair, type PrivateKey, type PublicKey, type SymmetricKey } from '../declarations.js';
2
+ /**
3
+ * Generate an EC key pair for ECDH key agreement.
4
+ */
5
+ export declare function generateECKeyPair(curve?: ECCurve): Promise<KeyPair>;
6
+ /**
7
+ * Perform ECDH key agreement followed by HKDF key derivation.
8
+ * Returns opaque symmetric key for symmetric encryption.
9
+ */
10
+ export declare function deriveKeyFromECDH(privateKey: PrivateKey, publicKey: PublicKey, hkdfParams: HkdfParams): Promise<SymmetricKey>;
11
+ //# sourceMappingURL=ec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ec.d.ts","sourceRoot":"","sources":["../../../../../../tdf3/src/crypto/core/ec.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,UAAU,EAEf,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAoB5B;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,GAAE,OAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CA4BlF;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,YAAY,CAAC,CAgDvB"}
@@ -0,0 +1,41 @@
1
+ import { type KeyOptions, type PrivateKey, type PublicKey, type PublicKeyInfo } from '../declarations.js';
2
+ /**
3
+ * Extract PEM public key from X.509 certificate or return PEM key as-is.
4
+ */
5
+ export declare function extractPublicKeyPem(certOrPem: string, jwaAlgorithm?: string): Promise<string>;
6
+ /**
7
+ * Import and validate a PEM public key, returning algorithm info.
8
+ * Uses JWK export for robust key parameter detection.
9
+ */
10
+ export declare function parsePublicKeyPem(pem: string): Promise<PublicKeyInfo>;
11
+ /**
12
+ * Convert a JWK (JSON Web Key) to PEM format.
13
+ */
14
+ export declare function jwkToPublicKeyPem(jwk: JsonWebKey): Promise<string>;
15
+ /**
16
+ * Convert a PEM public key to JWK format.
17
+ * Returns only public key components (no private key data).
18
+ */
19
+ export declare function publicKeyPemToJwk(publicKeyPem: string): Promise<JsonWebKey>;
20
+ /**
21
+ * Import a PEM public key as an opaque key.
22
+ */
23
+ export declare function importPublicKey(pem: string, options: KeyOptions): Promise<PublicKey>;
24
+ /**
25
+ * Import a PEM private key as an opaque key.
26
+ */
27
+ export declare function importPrivateKey(pem: string, options: KeyOptions): Promise<PrivateKey>;
28
+ /**
29
+ * Export an opaque public key to PEM format.
30
+ */
31
+ export declare function exportPublicKeyPem(key: PublicKey): Promise<string>;
32
+ /**
33
+ * Export an opaque private key to PEM format.
34
+ * ONLY USE FOR TESTING/DEVELOPMENT. Private keys should NOT be exportable in secure environments.
35
+ */
36
+ export declare function exportPrivateKeyPem(key: PrivateKey): Promise<string>;
37
+ /**
38
+ * Export an opaque public key to JWK format.
39
+ */
40
+ export declare function exportPublicKeyJwk(key: PublicKey): Promise<JsonWebKey>;
41
+ //# sourceMappingURL=key-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-format.d.ts","sourceRoot":"","sources":["../../../../../../tdf3/src/crypto/core/key-format.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,UAAU,EAEf,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAc5B;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAiDD;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAmD3E;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBxE;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAoCjF;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CA6D1F;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAqG5F;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAIxE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAI1E;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAG5E"}
@@ -0,0 +1,27 @@
1
+ import { type KeyAlgorithm, type PrivateKey, type PublicKey, type SymmetricKey } from '../declarations.js';
2
+ /**
3
+ * Wrap a CryptoKey as an opaque PublicKey.
4
+ * @internal
5
+ */
6
+ export declare function wrapPublicKey(key: CryptoKey, algorithm: KeyAlgorithm): PublicKey;
7
+ /**
8
+ * Wrap a CryptoKey as an opaque PrivateKey.
9
+ * @internal
10
+ */
11
+ export declare function wrapPrivateKey(key: CryptoKey, algorithm: KeyAlgorithm): PrivateKey;
12
+ /**
13
+ * Unwrap an opaque key to get the internal CryptoKey.
14
+ * @internal
15
+ */
16
+ export declare function unwrapKey(key: PublicKey | PrivateKey): CryptoKey;
17
+ /**
18
+ * Wrap raw key bytes as an opaque SymmetricKey.
19
+ * @internal
20
+ */
21
+ export declare function wrapSymmetricKey(keyBytes: Uint8Array): SymmetricKey;
22
+ /**
23
+ * Unwrap an opaque SymmetricKey to get raw bytes.
24
+ * @internal
25
+ */
26
+ export declare function unwrapSymmetricKey(key: SymmetricKey): Uint8Array;
27
+ //# sourceMappingURL=keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../../../../tdf3/src/crypto/core/keys.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAE5B;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,GAAG,SAAS,CAoBhF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,GAAG,UAAU,CAoBlF;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAEhE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,UAAU,GAAG,YAAY,CAMnE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,YAAY,GAAG,UAAU,CAEhE"}
@@ -0,0 +1,35 @@
1
+ import { Binary } from '../../binary.js';
2
+ import { type KeyPair, type PrivateKey, type PublicKey, type SymmetricKey } from '../declarations.js';
3
+ /**
4
+ * Get a DOMString representing the algorithm to use for an
5
+ * asymmetric key generation.
6
+ */
7
+ export declare function rsaOaepSha1(modulusLength?: number): RsaHashedKeyGenParams;
8
+ export declare function rsaPkcs1Sha256(modulusLength?: number): RsaHashedKeyGenParams;
9
+ /**
10
+ * Generate an RSA key pair
11
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/generateKey}
12
+ * @param size in bits
13
+ */
14
+ export declare function generateKeyPair(size?: number): Promise<KeyPair>;
15
+ /**
16
+ * Generate an RSA key pair suitable for signatures
17
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/generateKey}
18
+ */
19
+ export declare function generateSigningKeyPair(): Promise<KeyPair>;
20
+ /**
21
+ * Encrypt using a public key (RSA-OAEP).
22
+ * Accepts Binary or SymmetricKey for key wrapping.
23
+ * @param payload Payload to encrypt (Binary) or symmetric key to wrap (SymmetricKey)
24
+ * @param publicKey Opaque public key
25
+ * @return Encrypted payload
26
+ */
27
+ export declare function encryptWithPublicKey(payload: Binary | SymmetricKey, publicKey: PublicKey): Promise<Binary>;
28
+ /**
29
+ * Decrypt a public-key encrypted payload with a private key
30
+ * @param encryptedPayload Payload to decrypt
31
+ * @param privateKey Opaque private key
32
+ * @return Decrypted payload
33
+ */
34
+ export declare function decryptWithPrivateKey(encryptedPayload: Binary, privateKey: PrivateKey): Promise<Binary>;
35
+ //# sourceMappingURL=rsa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsa.d.ts","sourceRoot":"","sources":["../../../../../../tdf3/src/crypto/core/rsa.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAEL,KAAK,OAAO,EAEZ,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAO5B;;;GAGG;AACH,wBAAgB,WAAW,CACzB,aAAa,GAAE,MAAqC,GACnD,qBAAqB,CAavB;AAED,wBAAgB,cAAc,CAC5B,aAAa,GAAE,MAAqC,GACnD,qBAAqB,CAavB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAqBrE;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,CAS/D;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,GAAG,YAAY,EAC9B,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,MAAM,CAAC,CAejB;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,gBAAgB,EAAE,MAAM,EACxB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,MAAM,CAAC,CAWjB"}
@@ -0,0 +1,10 @@
1
+ import { type AsymmetricSigningAlgorithm, type PrivateKey, type PublicKey } from '../declarations.js';
2
+ /**
3
+ * Sign data with an asymmetric private key.
4
+ */
5
+ export declare function sign(data: Uint8Array, privateKey: PrivateKey, algorithm: AsymmetricSigningAlgorithm): Promise<Uint8Array>;
6
+ /**
7
+ * Verify signature with an asymmetric public key.
8
+ */
9
+ export declare function verify(data: Uint8Array, signature: Uint8Array, publicKey: PublicKey, algorithm: AsymmetricSigningAlgorithm): Promise<boolean>;
10
+ //# sourceMappingURL=signing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signing.d.ts","sourceRoot":"","sources":["../../../../../../tdf3/src/crypto/core/signing.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,UAAU,EACf,KAAK,SAAS,EACf,MAAM,oBAAoB,CAAC;AA0K5B;;GAEG;AACH,wBAAsB,IAAI,CACxB,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,0BAA0B,GACpC,OAAO,CAAC,UAAU,CAAC,CAWrB;AAED;;GAEG;AACH,wBAAsB,MAAM,CAC1B,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,UAAU,EACrB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,0BAA0B,GACpC,OAAO,CAAC,OAAO,CAAC,CAWlB"}
@@ -0,0 +1,68 @@
1
+ import { type AlgorithmUrn } from '../../ciphers/algorithms.js';
2
+ import { Binary } from '../../binary.js';
3
+ import { type DecryptResult, type EncryptResult, type HashAlgorithm, type SymmetricKey } from '../declarations.js';
4
+ /**
5
+ * Generate a random symmetric key (opaque).
6
+ * @param length - Key length in bytes (default 32 for AES-256)
7
+ * @return Opaque symmetric key
8
+ */
9
+ export declare function generateKey(length?: number): Promise<SymmetricKey>;
10
+ export declare function randomBytes(byteLength: number): Promise<Uint8Array>;
11
+ /**
12
+ * Returns a promise to the encryption key as a binary string.
13
+ *
14
+ * Note: This function should almost never fail as it includes a fallback
15
+ * if for some reason the native generate key fails.
16
+ *
17
+ * @param length The key length, defaults to 256
18
+ *
19
+ * @returns The hex string.
20
+ */
21
+ export declare function randomBytesAsHex(length: number): Promise<string>;
22
+ /**
23
+ * Decrypt content synchronously
24
+ * @param payload The payload to decrypt
25
+ * @param key The symmetric encryption key (opaque)
26
+ * @param iv The initialization vector
27
+ * @param algorithm The algorithm to use for encryption
28
+ * @param authTag The authentication tag for authenticated crypto.
29
+ */
30
+ export declare function decrypt(payload: Binary, key: SymmetricKey, iv: Binary, algorithm?: AlgorithmUrn, authTag?: Binary): Promise<DecryptResult>;
31
+ /**
32
+ * Encrypt content synchronously
33
+ * @param payload The payload to encrypt
34
+ * @param key The encryption key
35
+ * @param iv The initialization vector
36
+ * @param algorithm The algorithm to use for encryption
37
+ */
38
+ export declare function encrypt(payload: Binary | SymmetricKey, key: SymmetricKey, iv: Binary, algorithm?: AlgorithmUrn): Promise<EncryptResult>;
39
+ /**
40
+ * Create an ArrayBuffer from a hex string.
41
+ * https://developers.google.com/web/updates/2012/06/How-to-convert-ArrayBuffer-to-and-from-String?hl=en
42
+ * @param hex - Hex string
43
+ */
44
+ export declare function hex2Ab(hex: string): ArrayBuffer;
45
+ /**
46
+ * Compute hash digest.
47
+ */
48
+ export declare function digest(algorithm: HashAlgorithm, data: Uint8Array): Promise<Uint8Array>;
49
+ /**
50
+ * Compute HMAC-SHA256 of data with a symmetric key.
51
+ */
52
+ export declare function hmac(data: Uint8Array, key: SymmetricKey): Promise<Uint8Array>;
53
+ /**
54
+ * Verify HMAC-SHA256.
55
+ * Standalone utility — not part of CryptoService interface.
56
+ */
57
+ export declare function verifyHmac(data: Uint8Array, signature: Uint8Array, key: SymmetricKey): Promise<boolean>;
58
+ /**
59
+ * Import raw key bytes as an opaque symmetric key.
60
+ * Used for external keys (e.g., unwrapped from KAS).
61
+ */
62
+ export declare function importSymmetricKey(keyBytes: Uint8Array): Promise<SymmetricKey>;
63
+ /**
64
+ * Merge symmetric key shares back into the original key using XOR.
65
+ * Key bytes are extracted internally for merging.
66
+ */
67
+ export declare function mergeSymmetricKeys(shares: SymmetricKey[]): Promise<SymmetricKey>;
68
+ //# sourceMappingURL=symmetric.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symmetric.d.ts","sourceRoot":"","sources":["../../../../../../tdf3/src/crypto/core/symmetric.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAQ5B;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAGxE;AAED,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAIzE;AAED;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKtE;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CACrB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,YAAY,EACjB,EAAE,EAAE,MAAM,EACV,SAAS,CAAC,EAAE,YAAY,EACxB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,CAAC,CAExB;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CACrB,OAAO,EAAE,MAAM,GAAG,YAAY,EAC9B,GAAG,EAAE,YAAY,EACjB,EAAE,EAAE,MAAM,EACV,SAAS,CAAC,EAAE,YAAY,GACvB,OAAO,CAAC,aAAa,CAAC,CAExB;AAsGD;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAS/C;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAQ5F;AAED;;GAEG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAYnF;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,UAAU,EACrB,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAEpF;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAItF"}
@@ -3,178 +3,25 @@
3
3
  *
4
4
  * @private
5
5
  */
6
- import { Binary } from '../binary.js';
7
- import { type AsymmetricSigningAlgorithm, type CryptoService, type DecryptResult, type ECCurve, type EncryptResult, type HashAlgorithm, type HkdfParams, type KeyOptions, type KeyPair, type PrivateKey, type PublicKey, type PublicKeyInfo, type SymmetricKey } from './declarations.js';
8
- import { AlgorithmUrn } from '../ciphers/algorithms.js';
6
+ import { type CryptoService, type SymmetricKey } from './declarations.js';
7
+ import { decrypt, digest, encrypt, generateKey, hex2Ab, hmac, importSymmetricKey, mergeSymmetricKeys, randomBytes, randomBytesAsHex, verifyHmac } from './core/symmetric.js';
8
+ import { decryptWithPrivateKey, encryptWithPublicKey, generateKeyPair, generateSigningKeyPair, rsaOaepSha1, rsaPkcs1Sha256 } from './core/rsa.js';
9
+ import { deriveKeyFromECDH, generateECKeyPair } from './core/ec.js';
10
+ import { sign, verify } from './core/signing.js';
11
+ import { exportPrivateKeyPem, exportPublicKeyJwk, exportPublicKeyPem, extractPublicKeyPem, importPrivateKey, importPublicKey, jwkToPublicKeyPem, parsePublicKeyPem, publicKeyPemToJwk } from './core/key-format.js';
9
12
  export declare const isSupported: boolean;
10
13
  export declare const method = "http://www.w3.org/2001/04/xmlenc#aes256-cbc";
11
14
  export declare const name = "BrowserNativeCryptoService";
12
- /**
13
- * Get a DOMString representing the algorithm to use for an
14
- * asymmetric key generation.
15
- */
16
- export declare function rsaOaepSha1(modulusLength?: number): RsaHashedKeyGenParams;
17
- export declare function rsaPkcs1Sha256(modulusLength?: number): RsaHashedKeyGenParams;
18
- /**
19
- * Generate a random symmetric key (opaque).
20
- * @param length - Key length in bytes (default 32 for AES-256)
21
- * @return Opaque symmetric key
22
- */
23
- export declare function generateKey(length?: number): Promise<SymmetricKey>;
24
- /**
25
- * Generate an RSA key pair
26
- * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/generateKey}
27
- * @param size in bits
28
- */
29
- export declare function generateKeyPair(size?: number): Promise<KeyPair>;
30
- /**
31
- * Generate an RSA key pair suitable for signatures
32
- * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/generateKey}
33
- */
34
- export declare function generateSigningKeyPair(): Promise<KeyPair>;
35
- /**
36
- * Encrypt using a public key (RSA-OAEP).
37
- * Accepts Binary or SymmetricKey for key wrapping.
38
- * @param payload Payload to encrypt (Binary) or symmetric key to wrap (SymmetricKey)
39
- * @param publicKey Opaque public key
40
- * @return Encrypted payload
41
- */
42
- export declare function encryptWithPublicKey(payload: Binary | SymmetricKey, publicKey: PublicKey): Promise<Binary>;
43
- export declare function randomBytes(byteLength: number): Promise<Uint8Array>;
44
- /**
45
- * Returns a promise to the encryption key as a binary string.
46
- *
47
- * Note: This function should almost never fail as it includes a fallback
48
- * if for some reason the native generate key fails.
49
- *
50
- * @param length The key length, defaults to 256
51
- *
52
- * @returns The hex string.
53
- */
54
- export declare function randomBytesAsHex(length: number): Promise<string>;
55
- /**
56
- * Decrypt a public-key encrypted payload with a private key
57
- * @param encryptedPayload Payload to decrypt
58
- * @param privateKey Opaque private key
59
- * @return Decrypted payload
60
- */
61
- export declare function decryptWithPrivateKey(encryptedPayload: Binary, privateKey: PrivateKey): Promise<Binary>;
62
- /**
63
- * Decrypt content synchronously
64
- * @param payload The payload to decrypt
65
- * @param key The symmetric encryption key (opaque)
66
- * @param iv The initialization vector
67
- * @param algorithm The algorithm to use for encryption
68
- * @param authTag The authentication tag for authenticated crypto.
69
- */
70
- export declare function decrypt(payload: Binary, key: SymmetricKey, iv: Binary, algorithm?: AlgorithmUrn, authTag?: Binary): Promise<DecryptResult>;
71
- /**
72
- * Encrypt content synchronously
73
- * @param payload The payload to encrypt
74
- * @param key The encryption key
75
- * @param iv The initialization vector
76
- * @param algorithm The algorithm to use for encryption
77
- */
78
- export declare function encrypt(payload: Binary | SymmetricKey, key: SymmetricKey, iv: Binary, algorithm?: AlgorithmUrn): Promise<EncryptResult>;
79
- /**
80
- * Create a SHA256 hash. Code refrenced from MDN:
81
- * https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest
82
- * @param content String content
83
- * @return Hex hash
84
- */
85
- /**
86
- * Create an ArrayBuffer from a hex string.
87
- * https://developers.google.com/web/updates/2012/06/How-to-convert-ArrayBuffer-to-and-from-String?hl=en
88
- * @param hex - Hex string
89
- */
90
- export declare function hex2Ab(hex: string): ArrayBuffer;
91
- /**
92
- * Sign data with an asymmetric private key.
93
- */
94
- export declare function sign(data: Uint8Array, privateKey: PrivateKey, algorithm: AsymmetricSigningAlgorithm): Promise<Uint8Array>;
95
- /**
96
- * Verify signature with an asymmetric public key.
97
- */
98
- export declare function verify(data: Uint8Array, signature: Uint8Array, publicKey: PublicKey, algorithm: AsymmetricSigningAlgorithm): Promise<boolean>;
99
- /**
100
- * Compute hash digest.
101
- */
102
- export declare function digest(algorithm: HashAlgorithm, data: Uint8Array): Promise<Uint8Array>;
103
- /**
104
- * Extract PEM public key from X.509 certificate or return PEM key as-is.
105
- *
106
- * @param certOrPem - A PEM-encoded X.509 certificate or public key
107
- * @param jwaAlgorithm - JWA algorithm hint for certificate parsing (RS256, RS512, ES256, ES384, ES512).
108
- * If not provided for a certificate, will attempt to auto-detect from OIDs.
109
- */
110
- export declare function extractPublicKeyPem(certOrPem: string, jwaAlgorithm?: string): Promise<string>;
111
- /**
112
- * Generate an EC key pair for ECDH key agreement.
113
- */
114
- export declare function generateECKeyPair(curve?: ECCurve): Promise<KeyPair>;
115
- /**
116
- * Perform ECDH key agreement followed by HKDF key derivation.
117
- * Returns opaque symmetric key for symmetric encryption.
118
- */
119
- export declare function deriveKeyFromECDH(privateKey: PrivateKey, publicKey: PublicKey, hkdfParams: HkdfParams): Promise<SymmetricKey>;
120
- /**
121
- * Compute HMAC-SHA256 of data with a symmetric key.
122
- */
123
- export declare function hmac(data: Uint8Array, key: SymmetricKey): Promise<Uint8Array>;
124
- /**
125
- * Verify HMAC-SHA256. Standalone utility — not part of CryptoService interface.
126
- */
127
- export declare function verifyHmac(data: Uint8Array, signature: Uint8Array, key: SymmetricKey): Promise<boolean>;
128
- /**
129
- * Import and validate a PEM public key, returning algorithm info.
130
- * Uses JWK export for robust key parameter detection.
131
- */
132
- export declare function parsePublicKeyPem(pem: string): Promise<PublicKeyInfo>;
133
- /**
134
- * Convert a JWK (JSON Web Key) to PEM format.
135
- */
136
- export declare function jwkToPublicKeyPem(jwk: JsonWebKey): Promise<string>;
137
- /**
138
- * Convert a PEM public key to JWK format.
139
- * Returns only public key components (no private key data).
140
- */
141
- export declare function publicKeyPemToJwk(publicKeyPem: string): Promise<JsonWebKey>;
142
- /**
143
- * Import a PEM public key as an opaque key.
144
- */
145
- export declare function importPublicKey(pem: string, options: KeyOptions): Promise<PublicKey>;
146
- /**
147
- * Import a PEM private key as an opaque key.
148
- */
149
- export declare function importPrivateKey(pem: string, options: KeyOptions): Promise<PrivateKey>;
150
- /**
151
- * Export an opaque public key to PEM format.
152
- */
153
- export declare function exportPublicKeyPem(key: PublicKey): Promise<string>;
154
- /**
155
- * Export an opaque private key to PEM format.
156
- * ONLY USE FOR TESTING/DEVELOPMENT. Private keys should NOT be exportable in secure environments.
157
- */
158
- export declare function exportPrivateKeyPem(key: PrivateKey): Promise<string>;
159
- /**
160
- * Export an opaque public key to JWK format.
161
- */
162
- export declare function exportPublicKeyJwk(key: PublicKey): Promise<JsonWebKey>;
163
- /**
164
- * Import raw key bytes as an opaque symmetric key.
165
- * Used for external keys (e.g., unwrapped from KAS).
166
- */
167
- export declare function importSymmetricKey(keyBytes: Uint8Array): Promise<SymmetricKey>;
168
15
  /**
169
16
  * Split a symmetric key into N shares using XOR secret sharing.
170
17
  * Key bytes are extracted internally for splitting.
171
18
  * HSM implementations cannot extract bytes and should throw ConfigurationError.
19
+ *
20
+ * NOTE: This wrapper lives in index.ts (instead of core/symmetric.ts) because it
21
+ * needs DefaultCryptoService for keySplit() randomness. Moving it to core/symmetric
22
+ * would require importing DefaultCryptoService and create a circular dependency.
172
23
  */
173
24
  export declare function splitSymmetricKey(key: SymmetricKey, numShares: number): Promise<SymmetricKey[]>;
174
- /**
175
- * Merge symmetric key shares back into the original key using XOR.
176
- * Key bytes are extracted internally for merging.
177
- */
178
- export declare function mergeSymmetricKeys(shares: SymmetricKey[]): Promise<SymmetricKey>;
25
+ export { decrypt, decryptWithPrivateKey, deriveKeyFromECDH, digest, encrypt, encryptWithPublicKey, exportPrivateKeyPem, exportPublicKeyJwk, exportPublicKeyPem, extractPublicKeyPem, generateECKeyPair, generateKey, generateKeyPair, generateSigningKeyPair, hex2Ab, hmac, importPrivateKey, importPublicKey, importSymmetricKey, jwkToPublicKeyPem, mergeSymmetricKeys, parsePublicKeyPem, publicKeyPemToJwk, randomBytes, randomBytesAsHex, rsaOaepSha1, rsaPkcs1Sha256, sign, verify, verifyHmac, };
179
26
  export declare const DefaultCryptoService: CryptoService;
180
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../tdf3/src/crypto/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../tdf3/src/crypto/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EACL,OAAO,EACP,MAAM,EACN,OAAO,EACP,WAAW,EACX,MAAM,EACN,IAAI,EACJ,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,UAAU,EACX,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,sBAAsB,EACtB,WAAW,EACX,cAAc,EACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AAE9B,eAAO,MAAM,WAAW,SAA4C,CAAC;AACrE,eAAO,MAAM,MAAM,gDAAgD,CAAC;AACpE,eAAO,MAAM,IAAI,+BAA+B,CAAC;AAEjD;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,YAAY,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,EAAE,CAAC,CAIzB;AAED,OAAO,EACL,OAAO,EACP,qBAAqB,EACrB,iBAAiB,EACjB,MAAM,EACN,OAAO,EACP,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,sBAAsB,EACtB,MAAM,EACN,IAAI,EACJ,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,IAAI,EACJ,MAAM,EACN,UAAU,GACX,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,aA6BlC,CAAC"}
@@ -0,0 +1,84 @@
1
+ import { ConfigurationError } from '../../../../src/errors.js';
2
+ import { unwrapKey, wrapPrivateKey, wrapPublicKey, wrapSymmetricKey } from './keys.js';
3
+ /**
4
+ * Map ECCurve to Web Crypto named curve.
5
+ */
6
+ function curveToNamedCurve(curve) {
7
+ switch (curve) {
8
+ case 'P-256':
9
+ return 'P-256';
10
+ case 'P-384':
11
+ return 'P-384';
12
+ case 'P-521':
13
+ return 'P-521';
14
+ default:
15
+ throw new ConfigurationError(`Unsupported curve: ${curve}`);
16
+ }
17
+ }
18
+ /**
19
+ * Generate an EC key pair for ECDH key agreement.
20
+ */
21
+ export async function generateECKeyPair(curve = 'P-256') {
22
+ const namedCurve = curveToNamedCurve(curve);
23
+ // Generate key pair for ECDH key agreement
24
+ const keyPair = await crypto.subtle.generateKey({ name: 'ECDH', namedCurve }, true, [
25
+ 'deriveBits',
26
+ ]);
27
+ // Map to KeyAlgorithm literal type
28
+ let algorithm;
29
+ switch (namedCurve) {
30
+ case 'P-256':
31
+ algorithm = 'ec:secp256r1';
32
+ break;
33
+ case 'P-384':
34
+ algorithm = 'ec:secp384r1';
35
+ break;
36
+ case 'P-521':
37
+ algorithm = 'ec:secp521r1';
38
+ break;
39
+ default:
40
+ throw new ConfigurationError(`Unsupported curve: ${namedCurve}`);
41
+ }
42
+ return {
43
+ publicKey: wrapPublicKey(keyPair.publicKey, algorithm),
44
+ privateKey: wrapPrivateKey(keyPair.privateKey, algorithm),
45
+ };
46
+ }
47
+ /**
48
+ * Perform ECDH key agreement followed by HKDF key derivation.
49
+ * Returns opaque symmetric key for symmetric encryption.
50
+ */
51
+ export async function deriveKeyFromECDH(privateKey, publicKey, hkdfParams) {
52
+ // Unwrap the internal CryptoKeys
53
+ const privateKeyCrypto = unwrapKey(privateKey);
54
+ const publicKeyCrypto = unwrapKey(publicKey);
55
+ // Get curve from key metadata
56
+ const curve = publicKey.curve;
57
+ if (!curve) {
58
+ throw new ConfigurationError('EC curve not found on public key');
59
+ }
60
+ // Determine bits based on curve
61
+ const curveBits = {
62
+ 'P-256': 256,
63
+ 'P-384': 384,
64
+ // P-521 derives 528 bits (66 bytes)
65
+ 'P-521': 528,
66
+ };
67
+ const bits = curveBits[curve];
68
+ // Perform ECDH to get shared secret
69
+ const sharedSecret = await crypto.subtle.deriveBits({ name: 'ECDH', public: publicKeyCrypto }, privateKeyCrypto, bits);
70
+ // Import shared secret as HKDF key material
71
+ const hkdfKey = await crypto.subtle.importKey('raw', sharedSecret, 'HKDF', false, ['deriveKey']);
72
+ // Derive the final key using HKDF
73
+ const keyLength = hkdfParams.keyLength ?? 256;
74
+ const derivedKey = await crypto.subtle.deriveKey({
75
+ name: 'HKDF',
76
+ hash: hkdfParams.hash,
77
+ salt: hkdfParams.salt,
78
+ info: hkdfParams.info ?? new Uint8Array(0),
79
+ }, hkdfKey, { name: 'AES-GCM', length: keyLength }, true, ['encrypt', 'decrypt']);
80
+ // Export the derived key as raw bytes and wrap as SymmetricKey
81
+ const keyBytes = await crypto.subtle.exportKey('raw', derivedKey);
82
+ return wrapSymmetricKey(new Uint8Array(keyBytes));
83
+ }
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZGYzL3NyYy9jcnlwdG8vY29yZS9lYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFdkY7O0dBRUc7QUFDSCxTQUFTLGlCQUFpQixDQUFDLEtBQWM7SUFDdkMsUUFBUSxLQUFLLEVBQUUsQ0FBQztRQUNkLEtBQUssT0FBTztZQUNWLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLEtBQUssT0FBTztZQUNWLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLEtBQUssT0FBTztZQUNWLE9BQU8sT0FBTyxDQUFDO1FBQ2pCO1lBQ0UsTUFBTSxJQUFJLGtCQUFrQixDQUFDLHNCQUFzQixLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGlCQUFpQixDQUFDLFFBQWlCLE9BQU87SUFDOUQsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFNUMsMkNBQTJDO0lBQzNDLE1BQU0sT0FBTyxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRTtRQUNsRixZQUFZO0tBQ2IsQ0FBQyxDQUFDO0lBRUgsbUNBQW1DO0lBQ25DLElBQUksU0FBdUIsQ0FBQztJQUM1QixRQUFRLFVBQVUsRUFBRSxDQUFDO1FBQ25CLEtBQUssT0FBTztZQUNWLFNBQVMsR0FBRyxjQUFjLENBQUM7WUFDM0IsTUFBTTtRQUNSLEtBQUssT0FBTztZQUNWLFNBQVMsR0FBRyxjQUFjLENBQUM7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