@opentdf/sdk 0.9.0-beta.92 → 0.9.0-beta.93
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/dist/cjs/src/access/access-fetch.js +1 -2
- package/dist/cjs/src/access/access-rpc.js +1 -3
- package/dist/cjs/src/access.js +1 -14
- package/dist/cjs/src/auth/auth.js +13 -10
- package/dist/cjs/src/auth/dpop.js +121 -0
- package/dist/cjs/src/auth/oidc-clientcredentials-provider.js +37 -3
- package/dist/cjs/src/auth/oidc-externaljwt-provider.js +37 -3
- package/dist/cjs/src/auth/oidc-refreshtoken-provider.js +37 -3
- package/dist/cjs/src/auth/oidc.js +10 -8
- package/dist/cjs/src/auth/providers.js +35 -12
- package/dist/cjs/src/crypto/index.js +16 -2
- package/dist/cjs/src/crypto/pemPublicToCrypto.js +17 -11
- package/dist/cjs/src/opentdf.js +40 -10
- package/dist/cjs/tdf3/index.js +4 -2
- package/dist/cjs/tdf3/src/assertions.js +71 -31
- package/dist/cjs/tdf3/src/ciphers/aes-gcm-cipher.js +1 -1
- package/dist/cjs/tdf3/src/ciphers/symmetric-cipher-base.js +4 -2
- package/dist/cjs/tdf3/src/client/index.js +23 -33
- package/dist/cjs/tdf3/src/crypto/crypto-utils.js +12 -5
- package/dist/cjs/tdf3/src/crypto/declarations.js +1 -1
- package/dist/cjs/tdf3/src/crypto/index.js +849 -88
- package/dist/cjs/tdf3/src/crypto/jose/jwt-claims-set.js +11 -0
- package/dist/cjs/tdf3/src/crypto/jose/validate-crit.js +8 -0
- package/dist/cjs/tdf3/src/crypto/jose/vendor/lib/buffer_utils.js +41 -0
- package/dist/cjs/tdf3/src/crypto/jose/vendor/lib/epoch.js +6 -0
- package/dist/cjs/tdf3/src/crypto/jose/vendor/lib/is_object.js +21 -0
- package/dist/cjs/tdf3/src/crypto/jose/vendor/lib/jwt_claims_set.js +112 -0
- package/dist/cjs/tdf3/src/crypto/jose/vendor/lib/secs.js +60 -0
- package/dist/cjs/tdf3/src/crypto/jose/vendor/lib/validate_crit.js +38 -0
- package/dist/cjs/tdf3/src/crypto/jose/vendor/util/errors.js +135 -0
- package/dist/cjs/tdf3/src/crypto/jwt.js +183 -0
- package/dist/cjs/tdf3/src/crypto/salt.js +14 -8
- package/dist/cjs/tdf3/src/models/encryption-information.js +17 -20
- package/dist/cjs/tdf3/src/models/key-access.js +43 -63
- package/dist/cjs/tdf3/src/tdf.js +75 -75
- package/dist/cjs/tdf3/src/utils/index.js +5 -39
- package/dist/types/src/access/access-fetch.d.ts.map +1 -1
- package/dist/types/src/access/access-rpc.d.ts.map +1 -1
- package/dist/types/src/access.d.ts +0 -5
- package/dist/types/src/access.d.ts.map +1 -1
- package/dist/types/src/auth/auth.d.ts +9 -6
- package/dist/types/src/auth/auth.d.ts.map +1 -1
- package/dist/types/src/auth/dpop.d.ts +60 -0
- package/dist/types/src/auth/dpop.d.ts.map +1 -0
- package/dist/types/src/auth/oidc-clientcredentials-provider.d.ts +3 -2
- package/dist/types/src/auth/oidc-clientcredentials-provider.d.ts.map +1 -1
- package/dist/types/src/auth/oidc-externaljwt-provider.d.ts +3 -2
- package/dist/types/src/auth/oidc-externaljwt-provider.d.ts.map +1 -1
- package/dist/types/src/auth/oidc-refreshtoken-provider.d.ts +3 -2
- package/dist/types/src/auth/oidc-refreshtoken-provider.d.ts.map +1 -1
- package/dist/types/src/auth/oidc.d.ts +6 -4
- package/dist/types/src/auth/oidc.d.ts.map +1 -1
- package/dist/types/src/auth/providers.d.ts +5 -4
- package/dist/types/src/auth/providers.d.ts.map +1 -1
- package/dist/types/src/crypto/index.d.ts +2 -1
- package/dist/types/src/crypto/index.d.ts.map +1 -1
- package/dist/types/src/crypto/pemPublicToCrypto.d.ts +18 -0
- package/dist/types/src/crypto/pemPublicToCrypto.d.ts.map +1 -1
- package/dist/types/src/opentdf.d.ts +13 -4
- package/dist/types/src/opentdf.d.ts.map +1 -1
- package/dist/types/tdf3/index.d.ts +3 -3
- package/dist/types/tdf3/index.d.ts.map +1 -1
- package/dist/types/tdf3/src/assertions.d.ts +23 -8
- package/dist/types/tdf3/src/assertions.d.ts.map +1 -1
- package/dist/types/tdf3/src/ciphers/aes-gcm-cipher.d.ts +3 -3
- package/dist/types/tdf3/src/ciphers/aes-gcm-cipher.d.ts.map +1 -1
- package/dist/types/tdf3/src/ciphers/symmetric-cipher-base.d.ts +4 -4
- package/dist/types/tdf3/src/ciphers/symmetric-cipher-base.d.ts.map +1 -1
- package/dist/types/tdf3/src/client/builders.d.ts +2 -2
- package/dist/types/tdf3/src/client/builders.d.ts.map +1 -1
- package/dist/types/tdf3/src/client/index.d.ts +6 -5
- package/dist/types/tdf3/src/client/index.d.ts.map +1 -1
- package/dist/types/tdf3/src/crypto/crypto-utils.d.ts +14 -4
- package/dist/types/tdf3/src/crypto/crypto-utils.d.ts.map +1 -1
- package/dist/types/tdf3/src/crypto/declarations.d.ts +283 -18
- package/dist/types/tdf3/src/crypto/declarations.d.ts.map +1 -1
- package/dist/types/tdf3/src/crypto/index.d.ts +105 -28
- package/dist/types/tdf3/src/crypto/index.d.ts.map +1 -1
- package/dist/types/tdf3/src/crypto/jose/jwt-claims-set.d.ts +3 -0
- package/dist/types/tdf3/src/crypto/jose/jwt-claims-set.d.ts.map +1 -0
- package/dist/types/tdf3/src/crypto/jose/validate-crit.d.ts +5 -0
- package/dist/types/tdf3/src/crypto/jose/validate-crit.d.ts.map +1 -0
- package/dist/types/tdf3/src/crypto/jose/vendor/lib/buffer_utils.d.ts +6 -0
- package/dist/types/tdf3/src/crypto/jose/vendor/lib/buffer_utils.d.ts.map +1 -0
- package/dist/types/tdf3/src/crypto/jose/vendor/lib/epoch.d.ts +3 -0
- package/dist/types/tdf3/src/crypto/jose/vendor/lib/epoch.d.ts.map +1 -0
- package/dist/types/tdf3/src/crypto/jose/vendor/lib/is_object.d.ts +3 -0
- package/dist/types/tdf3/src/crypto/jose/vendor/lib/is_object.d.ts.map +1 -0
- package/dist/types/tdf3/src/crypto/jose/vendor/lib/jwt_claims_set.d.ts +3 -0
- package/dist/types/tdf3/src/crypto/jose/vendor/lib/jwt_claims_set.d.ts.map +1 -0
- package/dist/types/tdf3/src/crypto/jose/vendor/lib/secs.d.ts +3 -0
- package/dist/types/tdf3/src/crypto/jose/vendor/lib/secs.d.ts.map +1 -0
- package/dist/types/tdf3/src/crypto/jose/vendor/lib/validate_crit.d.ts +3 -0
- package/dist/types/tdf3/src/crypto/jose/vendor/lib/validate_crit.d.ts.map +1 -0
- package/dist/types/tdf3/src/crypto/jose/vendor/util/errors.d.ts +76 -0
- package/dist/types/tdf3/src/crypto/jose/vendor/util/errors.d.ts.map +1 -0
- package/dist/types/tdf3/src/crypto/jwt.d.ts +76 -0
- package/dist/types/tdf3/src/crypto/jwt.d.ts.map +1 -0
- package/dist/types/tdf3/src/crypto/salt.d.ts +6 -1
- package/dist/types/tdf3/src/crypto/salt.d.ts.map +1 -1
- package/dist/types/tdf3/src/models/encryption-information.d.ts +4 -4
- package/dist/types/tdf3/src/models/encryption-information.d.ts.map +1 -1
- package/dist/types/tdf3/src/models/key-access.d.ts +8 -5
- package/dist/types/tdf3/src/models/key-access.d.ts.map +1 -1
- package/dist/types/tdf3/src/tdf.d.ts +8 -8
- package/dist/types/tdf3/src/tdf.d.ts.map +1 -1
- package/dist/types/tdf3/src/utils/index.d.ts +4 -3
- package/dist/types/tdf3/src/utils/index.d.ts.map +1 -1
- package/dist/web/src/access/access-fetch.js +3 -4
- package/dist/web/src/access/access-rpc.js +3 -5
- package/dist/web/src/access.js +1 -13
- package/dist/web/src/auth/auth.js +13 -10
- package/dist/web/src/auth/dpop.js +118 -0
- package/dist/web/src/auth/oidc-clientcredentials-provider.js +4 -3
- package/dist/web/src/auth/oidc-externaljwt-provider.js +4 -3
- package/dist/web/src/auth/oidc-refreshtoken-provider.js +4 -3
- package/dist/web/src/auth/oidc.js +11 -9
- package/dist/web/src/auth/providers.js +13 -12
- package/dist/web/src/crypto/index.js +4 -2
- package/dist/web/src/crypto/pemPublicToCrypto.js +11 -9
- package/dist/web/src/opentdf.js +7 -10
- package/dist/web/tdf3/index.js +3 -2
- package/dist/web/tdf3/src/assertions.js +71 -31
- package/dist/web/tdf3/src/ciphers/aes-gcm-cipher.js +1 -1
- package/dist/web/tdf3/src/ciphers/symmetric-cipher-base.js +4 -2
- package/dist/web/tdf3/src/client/index.js +25 -35
- package/dist/web/tdf3/src/crypto/crypto-utils.js +12 -5
- package/dist/web/tdf3/src/crypto/declarations.js +1 -1
- package/dist/web/tdf3/src/crypto/index.js +830 -84
- package/dist/web/tdf3/src/crypto/jose/jwt-claims-set.js +5 -0
- package/dist/web/tdf3/src/crypto/jose/validate-crit.js +3 -0
- package/dist/web/tdf3/src/crypto/jose/vendor/lib/buffer_utils.js +35 -0
- package/dist/web/tdf3/src/crypto/jose/vendor/lib/epoch.js +4 -0
- package/dist/web/tdf3/src/crypto/jose/vendor/lib/is_object.js +19 -0
- package/dist/web/tdf3/src/crypto/jose/vendor/lib/jwt_claims_set.js +107 -0
- package/dist/web/tdf3/src/crypto/jose/vendor/lib/secs.js +58 -0
- package/dist/web/tdf3/src/crypto/jose/vendor/lib/validate_crit.js +36 -0
- package/dist/web/tdf3/src/crypto/jose/vendor/util/errors.js +117 -0
- package/dist/web/tdf3/src/crypto/jwt.js +174 -0
- package/dist/web/tdf3/src/crypto/salt.js +13 -7
- package/dist/web/tdf3/src/models/encryption-information.js +11 -14
- package/dist/web/tdf3/src/models/key-access.js +44 -31
- package/dist/web/tdf3/src/tdf.js +71 -71
- package/dist/web/tdf3/src/utils/index.js +5 -6
- package/package.json +11 -4
- package/src/access/access-fetch.ts +2 -8
- package/src/access/access-rpc.ts +0 -7
- package/src/access.ts +0 -17
- package/src/auth/auth.ts +21 -12
- package/src/auth/dpop.ts +222 -0
- package/src/auth/oidc-clientcredentials-provider.ts +23 -15
- package/src/auth/oidc-externaljwt-provider.ts +23 -15
- package/src/auth/oidc-refreshtoken-provider.ts +23 -15
- package/src/auth/oidc.ts +21 -10
- package/src/auth/providers.ts +46 -29
- package/src/crypto/index.ts +21 -1
- package/src/crypto/pemPublicToCrypto.ts +11 -9
- package/src/opentdf.ts +19 -14
- package/tdf3/index.ts +32 -5
- package/tdf3/src/assertions.ts +99 -30
- package/tdf3/src/ciphers/aes-gcm-cipher.ts +7 -2
- package/tdf3/src/ciphers/symmetric-cipher-base.ts +7 -4
- package/tdf3/src/client/builders.ts +2 -2
- package/tdf3/src/client/index.ts +60 -59
- package/tdf3/src/crypto/crypto-utils.ts +15 -8
- package/tdf3/src/crypto/declarations.ts +338 -22
- package/tdf3/src/crypto/index.ts +1021 -118
- package/tdf3/src/crypto/jose/jwt-claims-set.ts +10 -0
- package/tdf3/src/crypto/jose/validate-crit.ts +9 -0
- package/tdf3/src/crypto/jose/vendor/lib/buffer_utils.ts +34 -0
- package/tdf3/src/crypto/jose/vendor/lib/epoch.ts +3 -0
- package/tdf3/src/crypto/jose/vendor/lib/is_object.ts +18 -0
- package/tdf3/src/crypto/jose/vendor/lib/jwt_claims_set.ts +106 -0
- package/tdf3/src/crypto/jose/vendor/lib/secs.ts +57 -0
- package/tdf3/src/crypto/jose/vendor/lib/validate_crit.ts +35 -0
- package/tdf3/src/crypto/jose/vendor/util/errors.ts +101 -0
- package/tdf3/src/crypto/jwt.ts +256 -0
- package/tdf3/src/crypto/salt.ts +16 -8
- package/tdf3/src/models/encryption-information.ts +14 -21
- package/tdf3/src/models/key-access.ts +57 -41
- package/tdf3/src/tdf.ts +110 -93
- package/tdf3/src/utils/index.ts +5 -6
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.base64urlEncode = base64urlEncode;
|
|
7
|
+
exports.decodeProtectedHeader = decodeProtectedHeader;
|
|
8
|
+
exports.signJwt = signJwt;
|
|
9
|
+
exports.verifyJwt = verifyJwt;
|
|
10
|
+
const index_js_1 = require("../../../src/encodings/index.js");
|
|
11
|
+
const jose_1 = require("jose");
|
|
12
|
+
const jwt_claims_set_js_1 = __importDefault(require("./jose/jwt-claims-set.js"));
|
|
13
|
+
const validate_crit_js_1 = __importDefault(require("./jose/validate-crit.js"));
|
|
14
|
+
/**
|
|
15
|
+
* Base64url encode data per RFC 4648 Section 5.
|
|
16
|
+
* Uses URL-safe alphabet (- and _ instead of + and /) with no padding.
|
|
17
|
+
* Exported for testing purposes.
|
|
18
|
+
*/
|
|
19
|
+
function base64urlEncode(data) {
|
|
20
|
+
if (typeof data === 'string') {
|
|
21
|
+
// Encode string to base64url
|
|
22
|
+
const bytes = new TextEncoder().encode(data);
|
|
23
|
+
return index_js_1.base64.encodeArrayBuffer(bytes.buffer, true); // urlSafe = true
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
// Encode Uint8Array to base64url
|
|
27
|
+
const buffer = data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);
|
|
28
|
+
return index_js_1.base64.encodeArrayBuffer(buffer, true); // urlSafe = true
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Helper to convert base64url to standard base64 with padding.
|
|
33
|
+
*/
|
|
34
|
+
function base64urlToBase64(str) {
|
|
35
|
+
// Convert base64url to base64: replace - with +, _ with /
|
|
36
|
+
let b64 = str.replace(/-/g, '+').replace(/_/g, '/');
|
|
37
|
+
// Add padding if needed
|
|
38
|
+
const padding = (4 - (b64.length % 4)) % 4;
|
|
39
|
+
b64 += '='.repeat(padding);
|
|
40
|
+
return b64;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Base64url decode to Uint8Array per RFC 4648 Section 5.
|
|
44
|
+
*/
|
|
45
|
+
function base64urlDecodeBytes(str) {
|
|
46
|
+
const b64 = base64urlToBase64(str);
|
|
47
|
+
return new Uint8Array(index_js_1.base64.decodeArrayBuffer(b64));
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Decode the protected header from a JWT without verifying the signature.
|
|
51
|
+
* Useful for inspecting the header to determine key type before verification.
|
|
52
|
+
*
|
|
53
|
+
* @param token - The JWT string
|
|
54
|
+
* @returns The decoded header
|
|
55
|
+
* @throws Error if the token is malformed or uses alg "none"
|
|
56
|
+
*/
|
|
57
|
+
function decodeProtectedHeader(token) {
|
|
58
|
+
return (0, jose_1.decodeProtectedHeader)(token);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Sign a JWT using CryptoService. Replaces jose SignJWT.
|
|
62
|
+
*
|
|
63
|
+
* Implementation:
|
|
64
|
+
* 1. Base64url encode header and payload as JSON
|
|
65
|
+
* 2. Create signing input: `${headerB64}.${payloadB64}`
|
|
66
|
+
* 3. Sign via cryptoService.sign() (asymmetric) or hmac() (HS256)
|
|
67
|
+
* 4. Return compact JWT: `${headerB64}.${payloadB64}.${signatureB64}`
|
|
68
|
+
*
|
|
69
|
+
* @param cryptoService - Crypto implementation to use
|
|
70
|
+
* @param payload - JWT payload (claims)
|
|
71
|
+
* @param key - PEM-encoded private key for asymmetric algorithms, or raw key bytes for HS256
|
|
72
|
+
* @param header - JWT header (must include alg)
|
|
73
|
+
* @param options - Optional signing options (e.g., crit header handling)
|
|
74
|
+
* @returns Compact JWT string
|
|
75
|
+
*/
|
|
76
|
+
async function signJwt(cryptoService, payload, key, header, options) {
|
|
77
|
+
(0, validate_crit_js_1.default)(jose_1.errors.JWSInvalid, new Map([['b64', true]]), options?.crit, header, header);
|
|
78
|
+
// Encode header and payload per RFC 7515
|
|
79
|
+
const headerB64 = base64urlEncode(JSON.stringify(header));
|
|
80
|
+
const payloadB64 = base64urlEncode(JSON.stringify(payload));
|
|
81
|
+
// Create signing input
|
|
82
|
+
const signingInput = `${headerB64}.${payloadB64}`;
|
|
83
|
+
const signingInputBytes = new TextEncoder().encode(signingInput);
|
|
84
|
+
// Sign via CryptoService - route based on algorithm
|
|
85
|
+
let signature;
|
|
86
|
+
if (header.alg === 'HS256') {
|
|
87
|
+
if (key._brand !== 'SymmetricKey') {
|
|
88
|
+
throw new Error('HS256 requires a SymmetricKey');
|
|
89
|
+
}
|
|
90
|
+
signature = await cryptoService.hmac(signingInputBytes, key);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
if (key._brand !== 'PrivateKey') {
|
|
94
|
+
throw new Error(`${header.alg} requires a PrivateKey`);
|
|
95
|
+
}
|
|
96
|
+
signature = await cryptoService.sign(signingInputBytes, key, header.alg);
|
|
97
|
+
}
|
|
98
|
+
// Return compact JWT
|
|
99
|
+
return `${signingInput}.${base64urlEncode(signature)}`;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Verify a JWT and return its contents. Replaces jose jwtVerify.
|
|
103
|
+
*
|
|
104
|
+
* Implementation:
|
|
105
|
+
* 1. Split token into header.payload.signature
|
|
106
|
+
* 2. Decode header, validate algorithm against allowlist
|
|
107
|
+
* 3. Verify signature via cryptoService.verify() (asymmetric) or verifyHmac() (HS256)
|
|
108
|
+
* 4. Validate JWT claims (aud, iss, exp, nbf, etc.)
|
|
109
|
+
* 5. Return decoded header and payload
|
|
110
|
+
*
|
|
111
|
+
* @param cryptoService - Crypto implementation to use
|
|
112
|
+
* @param token - The JWT string to verify
|
|
113
|
+
* @param key - For asymmetric: PEM string or PublicKey (opaque). For HS256: Uint8Array or SymmetricKey (opaque).
|
|
114
|
+
* @param options - Verification options including algorithm allowlist and claim validations
|
|
115
|
+
* @throws Error if signature invalid, algorithm not in allowlist, claims invalid, or token malformed
|
|
116
|
+
* @returns Decoded header and payload
|
|
117
|
+
*/
|
|
118
|
+
async function verifyJwt(cryptoService, token, key, options) {
|
|
119
|
+
const parts = token.split('.');
|
|
120
|
+
if (parts.length !== 3) {
|
|
121
|
+
throw new jose_1.errors.JWTInvalid('Invalid Token or Protected Header formatting');
|
|
122
|
+
}
|
|
123
|
+
const [headerB64, payloadB64, signatureB64] = parts;
|
|
124
|
+
// Decode and validate header
|
|
125
|
+
const headerRaw = decodeProtectedHeader(token);
|
|
126
|
+
if (typeof headerRaw.alg !== 'string' || !headerRaw.alg) {
|
|
127
|
+
throw new jose_1.errors.JWTInvalid('JWS "alg" (Algorithm) Header Parameter missing or invalid');
|
|
128
|
+
}
|
|
129
|
+
if (headerRaw.alg === 'none') {
|
|
130
|
+
throw new jose_1.errors.JWTInvalid('Invalid JWT: alg "none" not allowed');
|
|
131
|
+
}
|
|
132
|
+
// Validate algorithm is in allowlist if provided
|
|
133
|
+
if (options?.algorithms && !options.algorithms.includes(headerRaw.alg)) {
|
|
134
|
+
throw new jose_1.errors.JWTInvalid(`Invalid JWT: algorithm "${headerRaw.alg}" not in allowlist`);
|
|
135
|
+
}
|
|
136
|
+
const extensions = (0, validate_crit_js_1.default)(jose_1.errors.JWSInvalid, new Map([['b64', true]]), options?.crit, headerRaw, headerRaw);
|
|
137
|
+
// Now we know it's a valid algorithm
|
|
138
|
+
const header = headerRaw;
|
|
139
|
+
// Verify signature via CryptoService - route based on algorithm
|
|
140
|
+
const signingInput = `${headerB64}.${payloadB64}`;
|
|
141
|
+
const signingInputBytes = new TextEncoder().encode(signingInput);
|
|
142
|
+
const signature = base64urlDecodeBytes(signatureB64);
|
|
143
|
+
let valid;
|
|
144
|
+
if (header.alg === 'HS256') {
|
|
145
|
+
// Symmetric verification - accept Uint8Array or SymmetricKey
|
|
146
|
+
if (typeof key === 'string') {
|
|
147
|
+
throw new Error('HS256 requires a Uint8Array or SymmetricKey, not a PEM string');
|
|
148
|
+
}
|
|
149
|
+
if ('_brand' in key && key._brand === 'PublicKey') {
|
|
150
|
+
throw new Error('HS256 requires a SymmetricKey, not a PublicKey');
|
|
151
|
+
}
|
|
152
|
+
// Convert Uint8Array to SymmetricKey if needed, otherwise assume it's already SymmetricKey
|
|
153
|
+
const symmetricKey = key instanceof Uint8Array
|
|
154
|
+
? await cryptoService.importSymmetricKey(key)
|
|
155
|
+
: key;
|
|
156
|
+
valid = await cryptoService.verifyHmac(signingInputBytes, signature, symmetricKey);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
// Asymmetric verification - accept string (PEM) or PublicKey
|
|
160
|
+
if (key instanceof Uint8Array) {
|
|
161
|
+
throw new Error(`${header.alg} requires a PEM string or PublicKey, not Uint8Array`);
|
|
162
|
+
}
|
|
163
|
+
if (typeof key === 'object' && '_brand' in key && key._brand === 'SymmetricKey') {
|
|
164
|
+
throw new Error(`${header.alg} requires a PublicKey, not a SymmetricKey`);
|
|
165
|
+
}
|
|
166
|
+
// Convert PEM string to PublicKey if needed, otherwise assume it's already PublicKey
|
|
167
|
+
const publicKey = typeof key === 'string'
|
|
168
|
+
? await cryptoService.importPublicKey(key, { usage: 'sign' })
|
|
169
|
+
: key;
|
|
170
|
+
valid = await cryptoService.verify(signingInputBytes, signature, publicKey, header.alg);
|
|
171
|
+
}
|
|
172
|
+
if (!valid) {
|
|
173
|
+
throw new jose_1.errors.JWTInvalid('Invalid JWT: signature verification failed');
|
|
174
|
+
}
|
|
175
|
+
if (extensions.has('b64') && header.b64 === false) {
|
|
176
|
+
throw new jose_1.errors.JWTInvalid('JWTs MUST NOT use unencoded payload');
|
|
177
|
+
}
|
|
178
|
+
// Decode payload and validate JWT claims
|
|
179
|
+
const payloadBytes = base64urlDecodeBytes(payloadB64);
|
|
180
|
+
const payload = (0, jwt_claims_set_js_1.default)(header, payloadBytes, options);
|
|
181
|
+
return { header, payload };
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGRmMy9zcmMvY3J5cHRvL2p3dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQThDQSwwQ0FVQztBQWdDRCxzREFFQztBQWtCRCwwQkFxQ0M7QUFtQkQsOEJBMkZDO0FBdlBELDhEQUF5RDtBQUN6RCwrQkFPYztBQUNkLGlGQUFvRDtBQUNwRCwrRUFBbUQ7QUF1Qm5EOzs7O0dBSUc7QUFDSCxTQUFnQixlQUFlLENBQUMsSUFBeUI7SUFDdkQsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM3Qiw2QkFBNkI7UUFDN0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsT0FBTyxpQkFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxpQkFBaUI7SUFDeEUsQ0FBQztTQUFNLENBQUM7UUFDTixpQ0FBaUM7UUFDakMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyRixPQUFPLGlCQUFNLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsaUJBQWlCO0lBQ2xFLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGlCQUFpQixDQUFDLEdBQVc7SUFDcEMsMERBQTBEO0lBQzFELElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFcEQsd0JBQXdCO0lBQ3hCLE1BQU0sT0FBTyxHQUFHLENBQUMs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
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
|
|
3
|
+
exports.getZtdfSalt = getZtdfSalt;
|
|
4
|
+
let cachedSalt = null;
|
|
5
|
+
/**
|
|
6
|
+
* Get the ZTDF salt (SHA-256 of "TDF").
|
|
7
|
+
* Lazily computed on first call and cached thereafter.
|
|
8
|
+
*/
|
|
9
|
+
async function getZtdfSalt(cryptoService) {
|
|
10
|
+
if (cachedSalt) {
|
|
11
|
+
return cachedSalt;
|
|
12
|
+
}
|
|
5
13
|
const encoder = new TextEncoder();
|
|
6
14
|
const data = encoder.encode('TDF');
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
exports.ztdfSalt = generateSalt();
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FsdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RkZjMvc3JjL2NyeXB0by9zYWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sWUFBWSxHQUFHLEtBQUssSUFBSSxFQUFFO0lBQzlCLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDbEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVuQyxnQkFBZ0I7SUFDaEIsTUFBTSxVQUFVLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFL0QsT0FBTyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQUM7QUFFVyxRQUFBLFFBQVEsR0FBRyxZQUFZLEVBQUUsQ0FBQyJ9
|
|
15
|
+
cachedSalt = await cryptoService.digest('SHA-256', data);
|
|
16
|
+
return cachedSalt;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FsdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RkZjMvc3JjL2NyeXB0by9zYWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBUUEsa0NBVUM7QUFoQkQsSUFBSSxVQUFVLEdBQXNCLElBQUksQ0FBQztBQUV6Qzs7O0dBR0c7QUFDSSxLQUFLLFVBQVUsV0FBVyxDQUFDLGFBQTRCO0lBQzVELElBQUksVUFBVSxFQUFFLENBQUM7UUFDZixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUNsQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRW5DLFVBQVUsR0FBRyxNQUFNLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUMifQ==
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SplitKey = void 0;
|
|
4
|
-
const index_js_1 = require("
|
|
5
|
-
const index_js_2 = require("../../../src/encodings/index.js");
|
|
4
|
+
const index_js_1 = require("../../../src/encodings/index.js");
|
|
6
5
|
const binary_js_1 = require("../binary.js");
|
|
7
6
|
const errors_js_1 = require("../../../src/errors.js");
|
|
8
7
|
class SplitKey {
|
|
@@ -13,26 +12,24 @@ class SplitKey {
|
|
|
13
12
|
}
|
|
14
13
|
async generateKey() {
|
|
15
14
|
const unwrappedKey = await this.cipher.generateKey();
|
|
16
|
-
const unwrappedKeyBinary = binary_js_1.Binary.fromString(index_js_2.hex.decode(unwrappedKey));
|
|
17
15
|
const unwrappedKeyIvBinary = await this.generateIvBinary();
|
|
18
|
-
return {
|
|
16
|
+
return { unwrappedKey, unwrappedKeyIvBinary };
|
|
19
17
|
}
|
|
20
|
-
async encrypt(contentBinary,
|
|
18
|
+
async encrypt(contentBinary, key, ivBinaryOptional) {
|
|
21
19
|
const ivBinary = ivBinaryOptional || (await this.generateIvBinary());
|
|
22
|
-
return this.cipher.encrypt(contentBinary,
|
|
20
|
+
return this.cipher.encrypt(contentBinary, key, ivBinary);
|
|
23
21
|
}
|
|
24
|
-
async decrypt(content,
|
|
25
|
-
return this.cipher.decrypt(content,
|
|
22
|
+
async decrypt(content, key) {
|
|
23
|
+
return this.cipher.decrypt(content, key);
|
|
26
24
|
}
|
|
27
25
|
async getKeyAccessObjects(policy, keyInfo) {
|
|
28
26
|
const splitIds = [...new Set(this.keyAccess.map(({ sid }) => sid))].sort((a = '', b = '') => a.localeCompare(b));
|
|
29
|
-
const
|
|
30
|
-
const splitsByName = Object.fromEntries(splitIds.map((sid, index) => [sid,
|
|
27
|
+
const unwrappedKeySplits = await this.cryptoService.splitSymmetricKey(keyInfo.unwrappedKey, splitIds.length);
|
|
28
|
+
const splitsByName = Object.fromEntries(splitIds.map((sid, index) => [sid, unwrappedKeySplits[index]]));
|
|
31
29
|
const keyAccessObjects = [];
|
|
32
30
|
for (const item of this.keyAccess) {
|
|
33
31
|
// use the key split to encrypt metadata for each key access object
|
|
34
|
-
const
|
|
35
|
-
const unwrappedKeySplitBinary = binary_js_1.Binary.fromArrayBuffer(unwrappedKeySplitBuffer.buffer);
|
|
32
|
+
const unwrappedKeySplit = splitsByName[item.sid || ''];
|
|
36
33
|
const metadata = item.metadata || '';
|
|
37
34
|
const metadataStr = (typeof metadata === 'object'
|
|
38
35
|
? JSON.stringify(metadata)
|
|
@@ -42,20 +39,20 @@ class SplitKey {
|
|
|
42
39
|
throw new errors_js_1.ConfigurationError("KAO generation failure: metadata isn't a string or object");
|
|
43
40
|
});
|
|
44
41
|
const metadataBinary = binary_js_1.Binary.fromArrayBuffer(new TextEncoder().encode(metadataStr));
|
|
45
|
-
const encryptedMetadataResult = await this.encrypt(metadataBinary,
|
|
42
|
+
const encryptedMetadataResult = await this.encrypt(metadataBinary, unwrappedKeySplit, keyInfo.unwrappedKeyIvBinary);
|
|
46
43
|
const encryptedMetadataOb = {
|
|
47
|
-
ciphertext:
|
|
48
|
-
iv:
|
|
44
|
+
ciphertext: index_js_1.base64.encode(encryptedMetadataResult.payload.asString()),
|
|
45
|
+
iv: index_js_1.base64.encode(keyInfo.unwrappedKeyIvBinary.asString()),
|
|
49
46
|
};
|
|
50
47
|
const encryptedMetadataStr = JSON.stringify(encryptedMetadataOb);
|
|
51
|
-
const keyAccessObject = await item.write(policy,
|
|
48
|
+
const keyAccessObject = await item.write(policy, unwrappedKeySplit, encryptedMetadataStr);
|
|
52
49
|
keyAccessObjects.push(keyAccessObject);
|
|
53
50
|
}
|
|
54
51
|
return keyAccessObjects;
|
|
55
52
|
}
|
|
56
53
|
async generateIvBinary() {
|
|
57
54
|
const iv = await this.cipher.generateInitializationVector();
|
|
58
|
-
return binary_js_1.Binary.fromString(
|
|
55
|
+
return binary_js_1.Binary.fromString(index_js_1.hex.decode(iv));
|
|
59
56
|
}
|
|
60
57
|
async write(policy, keyInfo) {
|
|
61
58
|
const algorithm = this.cipher?.name;
|
|
@@ -65,14 +62,14 @@ class SplitKey {
|
|
|
65
62
|
}
|
|
66
63
|
const keyAccessObjects = await this.getKeyAccessObjects(policy, keyInfo);
|
|
67
64
|
// For now we're only concerned with a single (first) key access object
|
|
68
|
-
const policyForManifest =
|
|
65
|
+
const policyForManifest = index_js_1.base64.encode(JSON.stringify(policy));
|
|
69
66
|
return {
|
|
70
67
|
type: 'split',
|
|
71
68
|
keyAccess: keyAccessObjects,
|
|
72
69
|
method: {
|
|
73
70
|
algorithm,
|
|
74
71
|
isStreamable: false,
|
|
75
|
-
iv:
|
|
72
|
+
iv: index_js_1.base64.encode(keyInfo.unwrappedKeyIvBinary.asString()),
|
|
76
73
|
},
|
|
77
74
|
integrityInformation: {
|
|
78
75
|
rootSignature: {
|
|
@@ -87,4 +84,4 @@ class SplitKey {
|
|
|
87
84
|
}
|
|
88
85
|
}
|
|
89
86
|
exports.SplitKey = SplitKey;
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jcnlwdGlvbi1pbmZvcm1hdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RkZjMvc3JjL21vZGVscy9lbmNyeXB0aW9uLWluZm9ybWF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDhEQUE4RDtBQUM5RCw0Q0FBc0M7QUFXdEMsc0RBQTREO0FBc0M1RCxNQUFhLFFBQVE7SUFJbkIsWUFBNEIsTUFBdUI7UUFBdkIsV0FBTSxHQUFOLE1BQU0sQ0FBaUI7UUFDakQsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO1FBQzFDLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUNmLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyRCxNQUFNLG9CQUFvQixHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUNYLGFBQXFCLEVBQ3JCLEdBQWlCLEVBQ2pCLGdCQUF5QjtRQUV6QixNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUNyRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBbUIsRUFBRSxHQUFpQjtRQUNsRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsS0FBSyxDQUFDLG1CQUFt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
|
|
@@ -1,78 +1,53 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
3
|
exports.Wrapped = exports.ECWrapped = exports.schemaVersion = void 0;
|
|
37
4
|
const index_js_1 = require("../../../src/encodings/index.js");
|
|
38
|
-
const generateRandomNumber_js_1 = require("../../../src/crypto/generateRandomNumber.js");
|
|
39
|
-
const keyAgreement_js_1 = require("../../../src/crypto/keyAgreement.js");
|
|
40
|
-
const pemPublicToCrypto_js_1 = require("../../../src/crypto/pemPublicToCrypto.js");
|
|
41
|
-
const utils_js_1 = require("../../../src/utils.js");
|
|
42
5
|
const binary_js_1 = require("../binary.js");
|
|
43
|
-
const cryptoService = __importStar(require("../crypto/index.js"));
|
|
44
6
|
const salt_js_1 = require("../crypto/salt.js");
|
|
7
|
+
const index_js_2 = require("../ciphers/index.js");
|
|
45
8
|
exports.schemaVersion = '1.0';
|
|
46
9
|
class ECWrapped {
|
|
47
|
-
constructor(url, kid, publicKey, metadata, sid) {
|
|
10
|
+
constructor(url, kid, publicKey, metadata, cryptoService, sid) {
|
|
48
11
|
this.url = url;
|
|
49
12
|
this.kid = kid;
|
|
50
13
|
this.publicKey = publicKey;
|
|
51
14
|
this.metadata = metadata;
|
|
15
|
+
this.cryptoService = cryptoService;
|
|
52
16
|
this.sid = sid;
|
|
53
17
|
this.type = 'ec-wrapped';
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
namedCurve: 'P-256',
|
|
57
|
-
}, false, ['deriveBits', 'deriveKey']);
|
|
18
|
+
// Generate EC key pair using CryptoService - returns opaque keys
|
|
19
|
+
this.ephemeralKeyPair = this.cryptoService.generateECKeyPair('P-256');
|
|
58
20
|
}
|
|
59
21
|
async write(policy, dek, encryptedMetadataStr) {
|
|
60
22
|
const policyStr = JSON.stringify(policy);
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
const kek = await (0, keyAgreement_js_1.keyAgreement)(ek.privateKey, clientPublicKey, {
|
|
66
|
-
hkdfSalt: await salt_js_1.ztdfSalt,
|
|
67
|
-
hkdfHash: 'SHA-256',
|
|
23
|
+
const ek = await this.ephemeralKeyPair;
|
|
24
|
+
// Import KAS public key from PEM
|
|
25
|
+
const kasPublicKey = await this.cryptoService.importPublicKey(this.publicKey, {
|
|
26
|
+
usage: 'derive',
|
|
68
27
|
});
|
|
69
|
-
|
|
70
|
-
const
|
|
71
|
-
|
|
28
|
+
// Derive encryption key using ECDH + HKDF via CryptoService
|
|
29
|
+
const derivedKey = await this.cryptoService.deriveKeyFromECDH(ek.privateKey, kasPublicKey, {
|
|
30
|
+
hash: 'SHA-256',
|
|
31
|
+
salt: await (0, salt_js_1.getZtdfSalt)(this.cryptoService),
|
|
32
|
+
});
|
|
33
|
+
// Generate random IV
|
|
34
|
+
const iv = await this.cryptoService.randomBytes(12);
|
|
35
|
+
// Encrypt DEK using derived key with AES-GCM
|
|
36
|
+
// Payload is SymmetricKey (the DEK), key is SymmetricKey (derived from ECDH)
|
|
37
|
+
const encryptResult = await this.cryptoService.encrypt(dek, derivedKey, binary_js_1.Binary.fromArrayBuffer(iv.buffer), index_js_2.Algorithms.AES_256_GCM);
|
|
38
|
+
// Combine IV, ciphertext, and authTag to form the wrapped key.
|
|
39
|
+
const ciphertext = new Uint8Array(encryptResult.payload.asArrayBuffer());
|
|
40
|
+
const authTag = encryptResult.authTag
|
|
41
|
+
? new Uint8Array(encryptResult.authTag.asArrayBuffer())
|
|
42
|
+
: new Uint8Array(0);
|
|
43
|
+
const entityWrappedKey = new Uint8Array(iv.length + ciphertext.length + authTag.length);
|
|
72
44
|
entityWrappedKey.set(iv);
|
|
73
|
-
entityWrappedKey.set(
|
|
74
|
-
|
|
75
|
-
const
|
|
45
|
+
entityWrappedKey.set(ciphertext, iv.length);
|
|
46
|
+
entityWrappedKey.set(authTag, iv.length + ciphertext.length);
|
|
47
|
+
const policyBinding = index_js_1.hex.encodeArrayBuffer((await this.cryptoService.hmac(new TextEncoder().encode(index_js_1.base64.encode(policyStr)), dek))
|
|
48
|
+
.buffer);
|
|
49
|
+
// Export ephemeral public key to PEM for manifest
|
|
50
|
+
const ephemeralPublicKeyPem = await this.cryptoService.exportPublicKeyPem(ek.publicKey);
|
|
76
51
|
const kao = {
|
|
77
52
|
type: 'ec-wrapped',
|
|
78
53
|
url: this.url,
|
|
@@ -84,7 +59,7 @@ class ECWrapped {
|
|
|
84
59
|
hash: index_js_1.base64.encode(policyBinding),
|
|
85
60
|
},
|
|
86
61
|
schemaVersion: exports.schemaVersion,
|
|
87
|
-
ephemeralPublicKey:
|
|
62
|
+
ephemeralPublicKey: ephemeralPublicKeyPem,
|
|
88
63
|
};
|
|
89
64
|
if (this.kid) {
|
|
90
65
|
kao.kid = this.kid;
|
|
@@ -98,19 +73,24 @@ class ECWrapped {
|
|
|
98
73
|
}
|
|
99
74
|
exports.ECWrapped = ECWrapped;
|
|
100
75
|
class Wrapped {
|
|
101
|
-
constructor(url, kid, publicKey, metadata, sid) {
|
|
76
|
+
constructor(url, kid, publicKey, metadata, cryptoService, sid) {
|
|
102
77
|
this.url = url;
|
|
103
78
|
this.kid = kid;
|
|
104
79
|
this.publicKey = publicKey;
|
|
105
80
|
this.metadata = metadata;
|
|
81
|
+
this.cryptoService = cryptoService;
|
|
106
82
|
this.sid = sid;
|
|
107
83
|
this.type = 'wrapped';
|
|
108
84
|
}
|
|
109
|
-
async write(policy,
|
|
85
|
+
async write(policy, key, encryptedMetadataStr) {
|
|
110
86
|
const policyStr = JSON.stringify(policy);
|
|
111
|
-
|
|
112
|
-
const
|
|
113
|
-
|
|
87
|
+
// Import KAS public key from PEM
|
|
88
|
+
const kasPublicKey = await this.cryptoService.importPublicKey(this.publicKey, {
|
|
89
|
+
usage: 'encrypt',
|
|
90
|
+
});
|
|
91
|
+
const wrappedKeyBinary = await this.cryptoService.encryptWithPublicKey(key, kasPublicKey);
|
|
92
|
+
const policyBinding = index_js_1.hex.encodeArrayBuffer((await this.cryptoService.hmac(new TextEncoder().encode(index_js_1.base64.encode(policyStr)), key))
|
|
93
|
+
.buffer);
|
|
114
94
|
this.keyAccessObject = {
|
|
115
95
|
type: 'wrapped',
|
|
116
96
|
url: this.url,
|
|
@@ -133,4 +113,4 @@ class Wrapped {
|
|
|
133
113
|
}
|
|
134
114
|
}
|
|
135
115
|
exports.Wrapped = Wrapped;
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LWFjY2Vzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RkZjMvc3JjL21vZGVscy9rZXktYWNjZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDhEQUE4RDtBQUM5RCw0Q0FBc0M7QUFFdEMsK0NBQWdEO0FBQ2hELGtEQUFpRDtBQUtwQyxRQUFBLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFFbkMsTUFBYSxTQUFTO0lBS3BCLFlBQ2tCLEdBQVcsRUFDWCxHQUF1QixFQUN2QixTQUFpQixFQUNqQixRQUFpQixFQUNqQixhQUE0QixFQUM1QixHQUFZO1FBTFosUUFBRyxHQUFILEdBQUcsQ0FBUTtRQUNYLFFBQUcsR0FBSCxHQUFHLENBQW9CO1FBQ3ZCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFDakIsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNqQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixRQUFHLEdBQUgsR0FBRyxDQUFTO1FBVnJCLFNBQUksR0FBRyxZQUFZLENBQUM7UUFZM0IsaUVBQWlFO1FBQ2pFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSyxDQUNULE1BQWMsRUFDZCxHQUFpQixFQUNqQixvQkFBNEI7UUFFNUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QyxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUV2QyxpQ0FBaUM7UUFDakMsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzVFLEtBQUssRUFBRSxRQUFRO1NBQ2hCLENBQUMsQ0FBQztRQUVILDREQUE0RDtRQUM1RCxNQUFNLFVB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
|