@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.
Files changed (182) hide show
  1. package/dist/cjs/src/access/access-fetch.js +1 -2
  2. package/dist/cjs/src/access/access-rpc.js +1 -3
  3. package/dist/cjs/src/access.js +1 -14
  4. package/dist/cjs/src/auth/auth.js +13 -10
  5. package/dist/cjs/src/auth/dpop.js +121 -0
  6. package/dist/cjs/src/auth/oidc-clientcredentials-provider.js +37 -3
  7. package/dist/cjs/src/auth/oidc-externaljwt-provider.js +37 -3
  8. package/dist/cjs/src/auth/oidc-refreshtoken-provider.js +37 -3
  9. package/dist/cjs/src/auth/oidc.js +10 -8
  10. package/dist/cjs/src/auth/providers.js +35 -12
  11. package/dist/cjs/src/crypto/index.js +16 -2
  12. package/dist/cjs/src/crypto/pemPublicToCrypto.js +17 -11
  13. package/dist/cjs/src/opentdf.js +40 -10
  14. package/dist/cjs/tdf3/index.js +4 -2
  15. package/dist/cjs/tdf3/src/assertions.js +71 -31
  16. package/dist/cjs/tdf3/src/ciphers/aes-gcm-cipher.js +1 -1
  17. package/dist/cjs/tdf3/src/ciphers/symmetric-cipher-base.js +4 -2
  18. package/dist/cjs/tdf3/src/client/index.js +23 -33
  19. package/dist/cjs/tdf3/src/crypto/crypto-utils.js +12 -5
  20. package/dist/cjs/tdf3/src/crypto/declarations.js +1 -1
  21. package/dist/cjs/tdf3/src/crypto/index.js +849 -88
  22. package/dist/cjs/tdf3/src/crypto/jose/jwt-claims-set.js +11 -0
  23. package/dist/cjs/tdf3/src/crypto/jose/validate-crit.js +8 -0
  24. package/dist/cjs/tdf3/src/crypto/jose/vendor/lib/buffer_utils.js +41 -0
  25. package/dist/cjs/tdf3/src/crypto/jose/vendor/lib/epoch.js +6 -0
  26. package/dist/cjs/tdf3/src/crypto/jose/vendor/lib/is_object.js +21 -0
  27. package/dist/cjs/tdf3/src/crypto/jose/vendor/lib/jwt_claims_set.js +112 -0
  28. package/dist/cjs/tdf3/src/crypto/jose/vendor/lib/secs.js +60 -0
  29. package/dist/cjs/tdf3/src/crypto/jose/vendor/lib/validate_crit.js +38 -0
  30. package/dist/cjs/tdf3/src/crypto/jose/vendor/util/errors.js +135 -0
  31. package/dist/cjs/tdf3/src/crypto/jwt.js +183 -0
  32. package/dist/cjs/tdf3/src/crypto/salt.js +14 -8
  33. package/dist/cjs/tdf3/src/models/encryption-information.js +17 -20
  34. package/dist/cjs/tdf3/src/models/key-access.js +43 -63
  35. package/dist/cjs/tdf3/src/tdf.js +75 -75
  36. package/dist/cjs/tdf3/src/utils/index.js +5 -39
  37. package/dist/types/src/access/access-fetch.d.ts.map +1 -1
  38. package/dist/types/src/access/access-rpc.d.ts.map +1 -1
  39. package/dist/types/src/access.d.ts +0 -5
  40. package/dist/types/src/access.d.ts.map +1 -1
  41. package/dist/types/src/auth/auth.d.ts +9 -6
  42. package/dist/types/src/auth/auth.d.ts.map +1 -1
  43. package/dist/types/src/auth/dpop.d.ts +60 -0
  44. package/dist/types/src/auth/dpop.d.ts.map +1 -0
  45. package/dist/types/src/auth/oidc-clientcredentials-provider.d.ts +3 -2
  46. package/dist/types/src/auth/oidc-clientcredentials-provider.d.ts.map +1 -1
  47. package/dist/types/src/auth/oidc-externaljwt-provider.d.ts +3 -2
  48. package/dist/types/src/auth/oidc-externaljwt-provider.d.ts.map +1 -1
  49. package/dist/types/src/auth/oidc-refreshtoken-provider.d.ts +3 -2
  50. package/dist/types/src/auth/oidc-refreshtoken-provider.d.ts.map +1 -1
  51. package/dist/types/src/auth/oidc.d.ts +6 -4
  52. package/dist/types/src/auth/oidc.d.ts.map +1 -1
  53. package/dist/types/src/auth/providers.d.ts +5 -4
  54. package/dist/types/src/auth/providers.d.ts.map +1 -1
  55. package/dist/types/src/crypto/index.d.ts +2 -1
  56. package/dist/types/src/crypto/index.d.ts.map +1 -1
  57. package/dist/types/src/crypto/pemPublicToCrypto.d.ts +18 -0
  58. package/dist/types/src/crypto/pemPublicToCrypto.d.ts.map +1 -1
  59. package/dist/types/src/opentdf.d.ts +13 -4
  60. package/dist/types/src/opentdf.d.ts.map +1 -1
  61. package/dist/types/tdf3/index.d.ts +3 -3
  62. package/dist/types/tdf3/index.d.ts.map +1 -1
  63. package/dist/types/tdf3/src/assertions.d.ts +23 -8
  64. package/dist/types/tdf3/src/assertions.d.ts.map +1 -1
  65. package/dist/types/tdf3/src/ciphers/aes-gcm-cipher.d.ts +3 -3
  66. package/dist/types/tdf3/src/ciphers/aes-gcm-cipher.d.ts.map +1 -1
  67. package/dist/types/tdf3/src/ciphers/symmetric-cipher-base.d.ts +4 -4
  68. package/dist/types/tdf3/src/ciphers/symmetric-cipher-base.d.ts.map +1 -1
  69. package/dist/types/tdf3/src/client/builders.d.ts +2 -2
  70. package/dist/types/tdf3/src/client/builders.d.ts.map +1 -1
  71. package/dist/types/tdf3/src/client/index.d.ts +6 -5
  72. package/dist/types/tdf3/src/client/index.d.ts.map +1 -1
  73. package/dist/types/tdf3/src/crypto/crypto-utils.d.ts +14 -4
  74. package/dist/types/tdf3/src/crypto/crypto-utils.d.ts.map +1 -1
  75. package/dist/types/tdf3/src/crypto/declarations.d.ts +283 -18
  76. package/dist/types/tdf3/src/crypto/declarations.d.ts.map +1 -1
  77. package/dist/types/tdf3/src/crypto/index.d.ts +105 -28
  78. package/dist/types/tdf3/src/crypto/index.d.ts.map +1 -1
  79. package/dist/types/tdf3/src/crypto/jose/jwt-claims-set.d.ts +3 -0
  80. package/dist/types/tdf3/src/crypto/jose/jwt-claims-set.d.ts.map +1 -0
  81. package/dist/types/tdf3/src/crypto/jose/validate-crit.d.ts +5 -0
  82. package/dist/types/tdf3/src/crypto/jose/validate-crit.d.ts.map +1 -0
  83. package/dist/types/tdf3/src/crypto/jose/vendor/lib/buffer_utils.d.ts +6 -0
  84. package/dist/types/tdf3/src/crypto/jose/vendor/lib/buffer_utils.d.ts.map +1 -0
  85. package/dist/types/tdf3/src/crypto/jose/vendor/lib/epoch.d.ts +3 -0
  86. package/dist/types/tdf3/src/crypto/jose/vendor/lib/epoch.d.ts.map +1 -0
  87. package/dist/types/tdf3/src/crypto/jose/vendor/lib/is_object.d.ts +3 -0
  88. package/dist/types/tdf3/src/crypto/jose/vendor/lib/is_object.d.ts.map +1 -0
  89. package/dist/types/tdf3/src/crypto/jose/vendor/lib/jwt_claims_set.d.ts +3 -0
  90. package/dist/types/tdf3/src/crypto/jose/vendor/lib/jwt_claims_set.d.ts.map +1 -0
  91. package/dist/types/tdf3/src/crypto/jose/vendor/lib/secs.d.ts +3 -0
  92. package/dist/types/tdf3/src/crypto/jose/vendor/lib/secs.d.ts.map +1 -0
  93. package/dist/types/tdf3/src/crypto/jose/vendor/lib/validate_crit.d.ts +3 -0
  94. package/dist/types/tdf3/src/crypto/jose/vendor/lib/validate_crit.d.ts.map +1 -0
  95. package/dist/types/tdf3/src/crypto/jose/vendor/util/errors.d.ts +76 -0
  96. package/dist/types/tdf3/src/crypto/jose/vendor/util/errors.d.ts.map +1 -0
  97. package/dist/types/tdf3/src/crypto/jwt.d.ts +76 -0
  98. package/dist/types/tdf3/src/crypto/jwt.d.ts.map +1 -0
  99. package/dist/types/tdf3/src/crypto/salt.d.ts +6 -1
  100. package/dist/types/tdf3/src/crypto/salt.d.ts.map +1 -1
  101. package/dist/types/tdf3/src/models/encryption-information.d.ts +4 -4
  102. package/dist/types/tdf3/src/models/encryption-information.d.ts.map +1 -1
  103. package/dist/types/tdf3/src/models/key-access.d.ts +8 -5
  104. package/dist/types/tdf3/src/models/key-access.d.ts.map +1 -1
  105. package/dist/types/tdf3/src/tdf.d.ts +8 -8
  106. package/dist/types/tdf3/src/tdf.d.ts.map +1 -1
  107. package/dist/types/tdf3/src/utils/index.d.ts +4 -3
  108. package/dist/types/tdf3/src/utils/index.d.ts.map +1 -1
  109. package/dist/web/src/access/access-fetch.js +3 -4
  110. package/dist/web/src/access/access-rpc.js +3 -5
  111. package/dist/web/src/access.js +1 -13
  112. package/dist/web/src/auth/auth.js +13 -10
  113. package/dist/web/src/auth/dpop.js +118 -0
  114. package/dist/web/src/auth/oidc-clientcredentials-provider.js +4 -3
  115. package/dist/web/src/auth/oidc-externaljwt-provider.js +4 -3
  116. package/dist/web/src/auth/oidc-refreshtoken-provider.js +4 -3
  117. package/dist/web/src/auth/oidc.js +11 -9
  118. package/dist/web/src/auth/providers.js +13 -12
  119. package/dist/web/src/crypto/index.js +4 -2
  120. package/dist/web/src/crypto/pemPublicToCrypto.js +11 -9
  121. package/dist/web/src/opentdf.js +7 -10
  122. package/dist/web/tdf3/index.js +3 -2
  123. package/dist/web/tdf3/src/assertions.js +71 -31
  124. package/dist/web/tdf3/src/ciphers/aes-gcm-cipher.js +1 -1
  125. package/dist/web/tdf3/src/ciphers/symmetric-cipher-base.js +4 -2
  126. package/dist/web/tdf3/src/client/index.js +25 -35
  127. package/dist/web/tdf3/src/crypto/crypto-utils.js +12 -5
  128. package/dist/web/tdf3/src/crypto/declarations.js +1 -1
  129. package/dist/web/tdf3/src/crypto/index.js +830 -84
  130. package/dist/web/tdf3/src/crypto/jose/jwt-claims-set.js +5 -0
  131. package/dist/web/tdf3/src/crypto/jose/validate-crit.js +3 -0
  132. package/dist/web/tdf3/src/crypto/jose/vendor/lib/buffer_utils.js +35 -0
  133. package/dist/web/tdf3/src/crypto/jose/vendor/lib/epoch.js +4 -0
  134. package/dist/web/tdf3/src/crypto/jose/vendor/lib/is_object.js +19 -0
  135. package/dist/web/tdf3/src/crypto/jose/vendor/lib/jwt_claims_set.js +107 -0
  136. package/dist/web/tdf3/src/crypto/jose/vendor/lib/secs.js +58 -0
  137. package/dist/web/tdf3/src/crypto/jose/vendor/lib/validate_crit.js +36 -0
  138. package/dist/web/tdf3/src/crypto/jose/vendor/util/errors.js +117 -0
  139. package/dist/web/tdf3/src/crypto/jwt.js +174 -0
  140. package/dist/web/tdf3/src/crypto/salt.js +13 -7
  141. package/dist/web/tdf3/src/models/encryption-information.js +11 -14
  142. package/dist/web/tdf3/src/models/key-access.js +44 -31
  143. package/dist/web/tdf3/src/tdf.js +71 -71
  144. package/dist/web/tdf3/src/utils/index.js +5 -6
  145. package/package.json +11 -4
  146. package/src/access/access-fetch.ts +2 -8
  147. package/src/access/access-rpc.ts +0 -7
  148. package/src/access.ts +0 -17
  149. package/src/auth/auth.ts +21 -12
  150. package/src/auth/dpop.ts +222 -0
  151. package/src/auth/oidc-clientcredentials-provider.ts +23 -15
  152. package/src/auth/oidc-externaljwt-provider.ts +23 -15
  153. package/src/auth/oidc-refreshtoken-provider.ts +23 -15
  154. package/src/auth/oidc.ts +21 -10
  155. package/src/auth/providers.ts +46 -29
  156. package/src/crypto/index.ts +21 -1
  157. package/src/crypto/pemPublicToCrypto.ts +11 -9
  158. package/src/opentdf.ts +19 -14
  159. package/tdf3/index.ts +32 -5
  160. package/tdf3/src/assertions.ts +99 -30
  161. package/tdf3/src/ciphers/aes-gcm-cipher.ts +7 -2
  162. package/tdf3/src/ciphers/symmetric-cipher-base.ts +7 -4
  163. package/tdf3/src/client/builders.ts +2 -2
  164. package/tdf3/src/client/index.ts +60 -59
  165. package/tdf3/src/crypto/crypto-utils.ts +15 -8
  166. package/tdf3/src/crypto/declarations.ts +338 -22
  167. package/tdf3/src/crypto/index.ts +1021 -118
  168. package/tdf3/src/crypto/jose/jwt-claims-set.ts +10 -0
  169. package/tdf3/src/crypto/jose/validate-crit.ts +9 -0
  170. package/tdf3/src/crypto/jose/vendor/lib/buffer_utils.ts +34 -0
  171. package/tdf3/src/crypto/jose/vendor/lib/epoch.ts +3 -0
  172. package/tdf3/src/crypto/jose/vendor/lib/is_object.ts +18 -0
  173. package/tdf3/src/crypto/jose/vendor/lib/jwt_claims_set.ts +106 -0
  174. package/tdf3/src/crypto/jose/vendor/lib/secs.ts +57 -0
  175. package/tdf3/src/crypto/jose/vendor/lib/validate_crit.ts +35 -0
  176. package/tdf3/src/crypto/jose/vendor/util/errors.ts +101 -0
  177. package/tdf3/src/crypto/jwt.ts +256 -0
  178. package/tdf3/src/crypto/salt.ts +16 -8
  179. package/tdf3/src/models/encryption-information.ts +14 -21
  180. package/tdf3/src/models/key-access.ts +57 -41
  181. package/tdf3/src/tdf.ts +110 -93
  182. 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.ztdfSalt = void 0;
4
- const generateSalt = async () => {
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
- // Generate hash
8
- const hashBuffer = await crypto.subtle.digest('SHA-256', data);
9
- return new Uint8Array(hashBuffer);
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("../utils/index.js");
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 { unwrappedKeyBinary, unwrappedKeyIvBinary };
16
+ return { unwrappedKey, unwrappedKeyIvBinary };
19
17
  }
20
- async encrypt(contentBinary, keyBinary, ivBinaryOptional) {
18
+ async encrypt(contentBinary, key, ivBinaryOptional) {
21
19
  const ivBinary = ivBinaryOptional || (await this.generateIvBinary());
22
- return this.cipher.encrypt(contentBinary, keyBinary, ivBinary);
20
+ return this.cipher.encrypt(contentBinary, key, ivBinary);
23
21
  }
24
- async decrypt(content, keyBinary) {
25
- return this.cipher.decrypt(content, keyBinary);
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 unwrappedKeySplitBuffers = await (0, index_js_1.keySplit)(new Uint8Array(keyInfo.unwrappedKeyBinary.asByteArray()), splitIds.length, this.cryptoService);
30
- const splitsByName = Object.fromEntries(splitIds.map((sid, index) => [sid, unwrappedKeySplitBuffers[index]]));
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 unwrappedKeySplitBuffer = splitsByName[item.sid || ''];
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, unwrappedKeySplitBinary, keyInfo.unwrappedKeyIvBinary);
42
+ const encryptedMetadataResult = await this.encrypt(metadataBinary, unwrappedKeySplit, keyInfo.unwrappedKeyIvBinary);
46
43
  const encryptedMetadataOb = {
47
- ciphertext: index_js_2.base64.encode(encryptedMetadataResult.payload.asString()),
48
- iv: index_js_2.base64.encode(keyInfo.unwrappedKeyIvBinary.asString()),
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, unwrappedKeySplitBuffer, encryptedMetadataStr);
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(index_js_2.hex.decode(iv));
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 = index_js_2.base64.encode(JSON.stringify(policy));
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: index_js_2.base64.encode(keyInfo.unwrappedKeyIvBinary.asString()),
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jcnlwdGlvbi1pbmZvcm1hdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RkZjMvc3JjL21vZGVscy9lbmNyeXB0aW9uLWluZm9ybWF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGdEQUE2QztBQUM3Qyw4REFBOEQ7QUFDOUQsNENBQXNDO0FBVXRDLHNEQUE0RDtBQXNDNUQsTUFBYSxRQUFRO0lBSW5CLFlBQTRCLE1BQXVCO1FBQXZCLFdBQU0sR0FBTixNQUFNLENBQWlCO1FBQ2pELElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztRQUMxQyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVc7UUFDZixNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckQsTUFBTSxrQkFBa0IsR0FBRyxrQkFBTSxDQUFDLFVBQVUsQ0FBQyxjQUFHLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDdkUsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUNYLGFBQXFCLEVBQ3JCLFNBQWlCLEVBQ2pCLGdCQUF5QjtRQUV6QixNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUNyRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBbUIsRUFBRSxTQUFp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
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
- this.ephemeralKeyPair = crypto.subtle.generateKey({
55
- name: 'ECDH',
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 [ek, clientPublicKey] = await Promise.all([
62
- this.ephemeralKeyPair,
63
- (0, pemPublicToCrypto_js_1.pemPublicToCrypto)(this.publicKey),
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
- const iv = (0, generateRandomNumber_js_1.generateRandomNumber)(12);
70
- const cek = await crypto.subtle.encrypt({ name: 'AES-GCM', iv, tagLength: 128 }, kek, dek);
71
- const entityWrappedKey = new Uint8Array(iv.length + cek.byteLength);
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(new Uint8Array(cek), iv.length);
74
- const policyBinding = await cryptoService.hmac(index_js_1.hex.encodeArrayBuffer(dek), index_js_1.base64.encode(policyStr));
75
- const ephemeralPublicKeyPEM = await (0, utils_js_1.cryptoPublicToPem)(ek.publicKey);
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: ephemeralPublicKeyPEM,
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, keyBuffer, encryptedMetadataStr) {
85
+ async write(policy, key, encryptedMetadataStr) {
110
86
  const policyStr = JSON.stringify(policy);
111
- const unwrappedKeyBinary = binary_js_1.Binary.fromArrayBuffer(keyBuffer.buffer);
112
- const wrappedKeyBinary = await cryptoService.encryptWithPublicKey(unwrappedKeyBinary, this.publicKey);
113
- const policyBinding = await cryptoService.hmac(index_js_1.hex.encodeArrayBuffer(keyBuffer), index_js_1.base64.encode(policyStr));
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LWFjY2Vzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RkZjMvc3JjL21vZGVscy9rZXktYWNjZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhEQUE4RDtBQUM5RCx5RkFBbUY7QUFDbkYseUVBQW1FO0FBQ25FLG1GQUE2RTtBQUM3RSxvREFBMEQ7QUFDMUQsNENBQXNDO0FBQ3RDLGtFQUFvRDtBQUNwRCwrQ0FBNkM7QUFLaEMsUUFBQSxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBRW5DLE1BQWEsU0FBUztJQUtwQixZQUNrQixHQUFXLEVBQ1gsR0FBdUIsRUFDdkIsU0FBaUIsRUFDakIsUUFBaUIsRUFDakIsR0FBWTtRQUpaLFFBQUcsR0FBSCxHQUFHLENBQVE7UUFDWCxRQUFHLEdBQUgsR0FBRyxDQUFvQjtRQUN2QixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQ2pCLGFBQVEsR0FBUixRQUFRLENBQVM7UUFDakIsUUFBRyxHQUFILEdBQUcsQ0FBUztRQVRyQixTQUFJLEdBQUcsWUFBWSxDQUFDO1FBVzNCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDL0M7WUFDRSxJQUFJLEVBQUUsTUFBTTtZQUNaLFVBQVUsRUFBRSxPQUFPO1NBQ3BCLEVBQ0QsS0FBSyxFQUNMLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUM1QixDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLLENBQ1QsTUFBYyxFQUNkLEdBQWUsRUFDZixvQkFBNEI7UUFFNUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QyxNQUFNLENBQUMsRUFBRSxFQUFFLGVBQWUsQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUM5QyxJQUFJLENBQUMsZ0JBQWdC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
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LWFjY2Vzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RkZjMvc3JjL21vZGVscy9rZXktYWNjZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDhEQUE4RDtBQUM5RCw0Q0FBc0M7QUFFdEMsK0NBQWdEO0FBQ2hELGtEQUFpRDtBQUtwQyxRQUFBLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFFbkMsTUFBYSxTQUFTO0lBS3BCLFlBQ2tCLEdBQVcsRUFDWCxHQUF1QixFQUN2QixTQUFpQixFQUNqQixRQUFpQixFQUNqQixhQUE0QixFQUM1QixHQUFZO1FBTFosUUFBRyxHQUFILEdBQUcsQ0FBUTtRQUNYLFFBQUcsR0FBSCxHQUFHLENBQW9CO1FBQ3ZCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFDakIsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNqQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixRQUFHLEdBQUgsR0FBRyxDQUFTO1FBVnJCLFNBQUksR0FBRyxZQUFZLENBQUM7UUFZM0IsaUVBQWlFO1FBQ2pFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSyxDQUNULE1BQWMsRUFDZCxHQUFpQixFQUNqQixvQkFBNEI7UUFFNUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QyxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUV2QyxpQ0FBaUM7UUFDakMsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzVFLEtBQUssRUFBRSxRQUFRO1NBQ2hCLENBQUMsQ0FBQztRQUVILDREQUE0RDtRQUM1RCxNQUFNLFVB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