@lindorm/aes 0.5.5 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/MERMAID.md +155 -0
  3. package/README.md +365 -199
  4. package/__tests__/INTEROP-RESULTS.md +66 -0
  5. package/__tests__/esm-smoke.test.ts +15 -0
  6. package/__tests__/fixtures/keys.ts +60 -0
  7. package/__tests__/helpers/buffer-utils.ts +11 -0
  8. package/__tests__/helpers/index.ts +2 -0
  9. package/__tests__/helpers/jwe-adapter.ts +117 -0
  10. package/__tests__/jose-jwe.test.ts +463 -0
  11. package/__tests__/noble-ciphers.test.ts +208 -0
  12. package/dist/classes/AesKit.d.ts +10 -8
  13. package/dist/classes/AesKit.d.ts.map +1 -1
  14. package/dist/classes/AesKit.js +73 -34
  15. package/dist/classes/AesKit.js.map +1 -1
  16. package/dist/constants/private/index.d.ts +0 -1
  17. package/dist/constants/private/index.d.ts.map +1 -1
  18. package/dist/constants/private/index.js +0 -1
  19. package/dist/constants/private/index.js.map +1 -1
  20. package/dist/constants/private/version.d.ts +3 -1
  21. package/dist/constants/private/version.d.ts.map +1 -1
  22. package/dist/constants/private/version.js +4 -2
  23. package/dist/constants/private/version.js.map +1 -1
  24. package/dist/interfaces/AesKit.d.ts +12 -7
  25. package/dist/interfaces/AesKit.d.ts.map +1 -1
  26. package/dist/mocks/mock-aes-kit.d.ts.map +1 -1
  27. package/dist/mocks/mock-aes-kit.js +12 -2
  28. package/dist/mocks/mock-aes-kit.js.map +1 -1
  29. package/dist/types/aes-decryption-data.d.ts +26 -17
  30. package/dist/types/aes-decryption-data.d.ts.map +1 -1
  31. package/dist/types/aes-encryption-data.d.ts +7 -17
  32. package/dist/types/aes-encryption-data.d.ts.map +1 -1
  33. package/dist/types/index.d.ts +1 -0
  34. package/dist/types/index.d.ts.map +1 -1
  35. package/dist/types/private/aes-data.d.ts.map +1 -1
  36. package/dist/types/private/aes-key-derivation.d.ts +1 -1
  37. package/dist/types/private/aes-key-derivation.d.ts.map +1 -1
  38. package/dist/types/private/auth-tag.d.ts +3 -0
  39. package/dist/types/private/auth-tag.d.ts.map +1 -1
  40. package/dist/types/private/content-encryption-key.d.ts +4 -2
  41. package/dist/types/private/content-encryption-key.d.ts.map +1 -1
  42. package/dist/types/private/index.d.ts +1 -1
  43. package/dist/types/private/index.d.ts.map +1 -1
  44. package/dist/types/private/index.js +1 -1
  45. package/dist/types/private/index.js.map +1 -1
  46. package/dist/types/private/prepared-encryption.d.ts +35 -0
  47. package/dist/types/private/prepared-encryption.d.ts.map +1 -0
  48. package/dist/types/private/{aes-string.js → prepared-encryption.js} +1 -1
  49. package/dist/types/private/prepared-encryption.js.map +1 -0
  50. package/dist/utils/is-aes.d.ts.map +1 -1
  51. package/dist/utils/is-aes.js +1 -5
  52. package/dist/utils/is-aes.js.map +1 -1
  53. package/dist/utils/parse-aes.js +3 -3
  54. package/dist/utils/parse-aes.js.map +1 -1
  55. package/dist/utils/private/aes-header.d.ts +42 -0
  56. package/dist/utils/private/aes-header.d.ts.map +1 -0
  57. package/dist/utils/private/aes-header.js +75 -0
  58. package/dist/utils/private/aes-header.js.map +1 -0
  59. package/dist/utils/private/calculate/calculate-content-encryption-key-size.js +3 -3
  60. package/dist/utils/private/calculate/calculate-key-wrap-encryption.d.ts.map +1 -1
  61. package/dist/utils/private/calculate/calculate-key-wrap-encryption.js +2 -1
  62. package/dist/utils/private/calculate/calculate-key-wrap-encryption.js.map +1 -1
  63. package/dist/utils/private/data/auth-tag-hmac.d.ts +2 -2
  64. package/dist/utils/private/data/auth-tag-hmac.d.ts.map +1 -1
  65. package/dist/utils/private/data/auth-tag-hmac.js +12 -4
  66. package/dist/utils/private/data/auth-tag-hmac.js.map +1 -1
  67. package/dist/utils/private/data/auth-tag.d.ts +2 -2
  68. package/dist/utils/private/data/auth-tag.d.ts.map +1 -1
  69. package/dist/utils/private/data/auth-tag.js +4 -2
  70. package/dist/utils/private/data/auth-tag.js.map +1 -1
  71. package/dist/utils/private/data/split-content-encryption-key.d.ts.map +1 -1
  72. package/dist/utils/private/data/split-content-encryption-key.js +6 -2
  73. package/dist/utils/private/data/split-content-encryption-key.js.map +1 -1
  74. package/dist/utils/private/diffie-hellman/diffie-hellman-key-wrap.d.ts +2 -2
  75. package/dist/utils/private/diffie-hellman/diffie-hellman-key-wrap.d.ts.map +1 -1
  76. package/dist/utils/private/diffie-hellman/diffie-hellman-key-wrap.js +12 -8
  77. package/dist/utils/private/diffie-hellman/diffie-hellman-key-wrap.js.map +1 -1
  78. package/dist/utils/private/diffie-hellman/diffie-hellman.d.ts +2 -2
  79. package/dist/utils/private/diffie-hellman/diffie-hellman.d.ts.map +1 -1
  80. package/dist/utils/private/diffie-hellman/diffie-hellman.js +12 -8
  81. package/dist/utils/private/diffie-hellman/diffie-hellman.js.map +1 -1
  82. package/dist/utils/private/diffie-hellman/shared-secret.d.ts.map +1 -1
  83. package/dist/utils/private/diffie-hellman/shared-secret.js +5 -1
  84. package/dist/utils/private/diffie-hellman/shared-secret.js.map +1 -1
  85. package/dist/utils/private/encoded-aes.d.ts +2 -2
  86. package/dist/utils/private/encoded-aes.d.ts.map +1 -1
  87. package/dist/utils/private/encoded-aes.js +86 -149
  88. package/dist/utils/private/encoded-aes.js.map +1 -1
  89. package/dist/utils/private/encrypt-content.d.ts +3 -0
  90. package/dist/utils/private/encrypt-content.d.ts.map +1 -0
  91. package/dist/utils/private/encrypt-content.js +35 -0
  92. package/dist/utils/private/encrypt-content.js.map +1 -0
  93. package/dist/utils/private/encrypt-encoded.d.ts +9 -0
  94. package/dist/utils/private/encrypt-encoded.d.ts.map +1 -0
  95. package/dist/utils/private/encrypt-encoded.js +53 -0
  96. package/dist/utils/private/encrypt-encoded.js.map +1 -0
  97. package/dist/utils/private/encrypt-serialised.d.ts +9 -0
  98. package/dist/utils/private/encrypt-serialised.d.ts.map +1 -0
  99. package/dist/utils/private/encrypt-serialised.js +48 -0
  100. package/dist/utils/private/encrypt-serialised.js.map +1 -0
  101. package/dist/utils/private/encrypt-tokenised.d.ts +9 -0
  102. package/dist/utils/private/encrypt-tokenised.d.ts.map +1 -0
  103. package/dist/utils/private/encrypt-tokenised.js +45 -0
  104. package/dist/utils/private/encrypt-tokenised.js.map +1 -0
  105. package/dist/utils/private/encryption.d.ts.map +1 -1
  106. package/dist/utils/private/encryption.js +27 -27
  107. package/dist/utils/private/encryption.js.map +1 -1
  108. package/dist/utils/private/index.d.ts +6 -0
  109. package/dist/utils/private/index.d.ts.map +1 -1
  110. package/dist/utils/private/index.js +6 -0
  111. package/dist/utils/private/index.js.map +1 -1
  112. package/dist/utils/private/key-derivation/concat-kdf.d.ts +14 -0
  113. package/dist/utils/private/key-derivation/concat-kdf.d.ts.map +1 -0
  114. package/dist/utils/private/key-derivation/concat-kdf.js +26 -0
  115. package/dist/utils/private/key-derivation/concat-kdf.js.map +1 -0
  116. package/dist/utils/private/key-derivation/index.d.ts +1 -1
  117. package/dist/utils/private/key-derivation/index.d.ts.map +1 -1
  118. package/dist/utils/private/key-derivation/index.js +1 -1
  119. package/dist/utils/private/key-derivation/index.js.map +1 -1
  120. package/dist/utils/private/key-derivation/pbkdf.d.ts +1 -0
  121. package/dist/utils/private/key-derivation/pbkdf.d.ts.map +1 -1
  122. package/dist/utils/private/key-derivation/pbkdf.js +13 -2
  123. package/dist/utils/private/key-derivation/pbkdf.js.map +1 -1
  124. package/dist/utils/private/key-wrap/ecb-key-wrap.d.ts.map +1 -1
  125. package/dist/utils/private/key-wrap/ecb-key-wrap.js +10 -3
  126. package/dist/utils/private/key-wrap/ecb-key-wrap.js.map +1 -1
  127. package/dist/utils/private/key-wrap/gcm-key-wrap.d.ts.map +1 -1
  128. package/dist/utils/private/key-wrap/gcm-key-wrap.js +6 -0
  129. package/dist/utils/private/key-wrap/gcm-key-wrap.js.map +1 -1
  130. package/dist/utils/private/oct/get-oct-key-key-wrap.d.ts +1 -1
  131. package/dist/utils/private/oct/get-oct-key-key-wrap.d.ts.map +1 -1
  132. package/dist/utils/private/oct/get-oct-key-key-wrap.js +7 -14
  133. package/dist/utils/private/oct/get-oct-key-key-wrap.js.map +1 -1
  134. package/dist/utils/private/oct/get-oct-pbkdf-key-wrap-keys.d.ts.map +1 -1
  135. package/dist/utils/private/oct/get-oct-pbkdf-key-wrap-keys.js +2 -0
  136. package/dist/utils/private/oct/get-oct-pbkdf-key-wrap-keys.js.map +1 -1
  137. package/dist/utils/private/prepare-encryption.d.ts +3 -0
  138. package/dist/utils/private/prepare-encryption.d.ts.map +1 -0
  139. package/dist/utils/private/prepare-encryption.js +27 -0
  140. package/dist/utils/private/prepare-encryption.js.map +1 -0
  141. package/dist/utils/private/serialised-aes.d.ts.map +1 -1
  142. package/dist/utils/private/serialised-aes.js +38 -46
  143. package/dist/utils/private/serialised-aes.js.map +1 -1
  144. package/dist/utils/private/tokenised-aes.d.ts +3 -3
  145. package/dist/utils/private/tokenised-aes.d.ts.map +1 -1
  146. package/dist/utils/private/tokenised-aes.js +73 -55
  147. package/dist/utils/private/tokenised-aes.js.map +1 -1
  148. package/dist/utils/private/validate-version.d.ts +2 -0
  149. package/dist/utils/private/validate-version.d.ts.map +1 -0
  150. package/dist/utils/private/validate-version.js +27 -0
  151. package/dist/utils/private/validate-version.js.map +1 -0
  152. package/jest.config.interop.mjs +24 -0
  153. package/package.json +16 -15
  154. package/tsconfig.interop.json +9 -0
  155. package/dist/constants/private/format.d.ts +0 -2
  156. package/dist/constants/private/format.d.ts.map +0 -1
  157. package/dist/constants/private/format.js +0 -5
  158. package/dist/constants/private/format.js.map +0 -1
  159. package/dist/types/private/aes-string.d.ts +0 -21
  160. package/dist/types/private/aes-string.d.ts.map +0 -1
  161. package/dist/types/private/aes-string.js.map +0 -1
  162. package/dist/utils/private/key-derivation/hkdf.d.ts +0 -13
  163. package/dist/utils/private/key-derivation/hkdf.d.ts.map +0 -1
  164. package/dist/utils/private/key-derivation/hkdf.js +0 -12
  165. package/dist/utils/private/key-derivation/hkdf.js.map +0 -1
@@ -2,52 +2,44 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseSerialisedAesRecord = exports.createSerialisedAesRecord = void 0;
4
4
  const b64_1 = require("@lindorm/b64");
5
- const createSerialisedAesRecord = (data) => ({
6
- algorithm: data.algorithm,
7
- authTag: b64_1.B64.encode(data.authTag),
8
- content: b64_1.B64.encode(data.content),
9
- contentType: data.contentType,
10
- encryption: data.encryption,
11
- hkdfSalt: data.hkdfSalt ? b64_1.B64.encode(data.hkdfSalt) : undefined,
12
- initialisationVector: b64_1.B64.encode(data.initialisationVector),
13
- keyId: data.keyId,
14
- pbkdfIterations: data.pbkdfIterations,
15
- pbkdfSalt: data.pbkdfSalt ? b64_1.B64.encode(data.pbkdfSalt) : undefined,
16
- publicEncryptionIv: data.publicEncryptionIv
17
- ? b64_1.B64.encode(data.publicEncryptionIv)
18
- : undefined,
19
- publicEncryptionJwk: data.publicEncryptionJwk,
20
- publicEncryptionKey: data.publicEncryptionKey
21
- ? b64_1.B64.encode(data.publicEncryptionKey)
22
- : undefined,
23
- publicEncryptionTag: data.publicEncryptionTag
24
- ? b64_1.B64.encode(data.publicEncryptionTag)
25
- : undefined,
26
- version: data.version,
27
- });
5
+ const private_1 = require("../../constants/private");
6
+ const aes_header_1 = require("./aes-header");
7
+ const createSerialisedAesRecord = (data) => {
8
+ const header = (0, aes_header_1.buildAesHeader)({
9
+ algorithm: data.algorithm,
10
+ contentType: data.contentType,
11
+ encryption: data.encryption,
12
+ keyId: data.keyId,
13
+ pbkdfIterations: data.pbkdfIterations,
14
+ pbkdfSalt: data.pbkdfSalt,
15
+ publicEncryptionIv: data.publicEncryptionIv,
16
+ publicEncryptionJwk: data.publicEncryptionJwk,
17
+ publicEncryptionTag: data.publicEncryptionTag,
18
+ });
19
+ return {
20
+ cek: data.publicEncryptionKey
21
+ ? b64_1.B64.encode(data.publicEncryptionKey, "b64u")
22
+ : undefined,
23
+ ciphertext: b64_1.B64.encode(data.content, "b64u"),
24
+ header: (0, aes_header_1.encodeAesHeader)(header),
25
+ iv: b64_1.B64.encode(data.initialisationVector, "b64u"),
26
+ tag: b64_1.B64.encode(data.authTag, "b64u"),
27
+ v: private_1.AES_FORMAT_VERSION,
28
+ };
29
+ };
28
30
  exports.createSerialisedAesRecord = createSerialisedAesRecord;
29
- const parseSerialisedAesRecord = (options) => ({
30
- algorithm: options.algorithm,
31
- authTag: options.authTag ? b64_1.B64.toBuffer(options.authTag) : undefined,
32
- content: b64_1.B64.toBuffer(options.content),
33
- contentType: options.contentType,
34
- encryption: options.encryption,
35
- hkdfSalt: options.hkdfSalt ? b64_1.B64.toBuffer(options.hkdfSalt) : undefined,
36
- initialisationVector: b64_1.B64.toBuffer(options.initialisationVector),
37
- keyId: options.keyId,
38
- pbkdfIterations: options.pbkdfIterations,
39
- pbkdfSalt: options.pbkdfSalt ? b64_1.B64.toBuffer(options.pbkdfSalt) : undefined,
40
- publicEncryptionIv: options.publicEncryptionIv
41
- ? b64_1.B64.toBuffer(options.publicEncryptionIv)
42
- : undefined,
43
- publicEncryptionJwk: options.publicEncryptionJwk,
44
- publicEncryptionKey: options.publicEncryptionKey
45
- ? b64_1.B64.toBuffer(options.publicEncryptionKey)
46
- : undefined,
47
- publicEncryptionTag: options.publicEncryptionTag
48
- ? b64_1.B64.toBuffer(options.publicEncryptionTag)
49
- : undefined,
50
- version: options.version,
51
- });
31
+ const parseSerialisedAesRecord = (options) => {
32
+ const header = (0, aes_header_1.decodeAesHeader)(options.header);
33
+ const params = (0, aes_header_1.headerToDecryptionParams)(header);
34
+ const aad = (0, aes_header_1.computeAad)(options.header);
35
+ return {
36
+ ...params,
37
+ aad,
38
+ authTag: b64_1.B64.toBuffer(options.tag, "b64u"),
39
+ content: b64_1.B64.toBuffer(options.ciphertext, "b64u"),
40
+ initialisationVector: b64_1.B64.toBuffer(options.iv, "b64u"),
41
+ publicEncryptionKey: options.cek ? b64_1.B64.toBuffer(options.cek, "b64u") : undefined,
42
+ };
43
+ };
52
44
  exports.parseSerialisedAesRecord = parseSerialisedAesRecord;
53
45
  //# sourceMappingURL=serialised-aes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"serialised-aes.js","sourceRoot":"","sources":["../../../src/utils/private/serialised-aes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serialised-aes.js","sourceRoot":"","sources":["../../../src/utils/private/serialised-aes.ts"],"names":[],"mappings":";;;AAAA,sCAAmC;AACnC,qDAA6D;AAO7D,6CAMsB;AAiBf,MAAM,yBAAyB,GAAG,CACvC,IAAyB,EACA,EAAE;IAC3B,MAAM,MAAM,GAAG,IAAA,2BAAc,EAAC;QAC5B,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;QAC3C,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;QAC7C,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;KAC9C,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,EAAE,IAAI,CAAC,mBAAmB;YAC3B,CAAC,CAAC,SAAG,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC;YAC9C,CAAC,CAAC,SAAS;QACb,UAAU,EAAE,SAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;QAC5C,MAAM,EAAE,IAAA,4BAAe,EAAC,MAAM,CAAC;QAC/B,EAAE,EAAE,SAAG,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,MAAM,CAAC;QACjD,GAAG,EAAE,SAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;QACrC,CAAC,EAAE,4BAAkB;KACtB,CAAC;AACJ,CAAC,CAAC;AAzBW,QAAA,yBAAyB,6BAyBpC;AAEK,MAAM,wBAAwB,GAAG,CACtC,OAAgC,EACX,EAAE;IACvB,MAAM,MAAM,GAAG,IAAA,4BAAe,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAA,qCAAwB,EAAC,MAAM,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,IAAA,uBAAU,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEvC,OAAO;QACL,GAAG,MAAM;QACT,GAAG;QACH,OAAO,EAAE,SAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC;QAC1C,OAAO,EAAE,SAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC;QACjD,oBAAoB,EAAE,SAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC;QACtD,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;KACjF,CAAC;AACJ,CAAC,CAAC;AAfW,QAAA,wBAAwB,4BAenC"}
@@ -1,4 +1,4 @@
1
- import { AesEncryptionRecord } from "../../types";
2
- export declare const createTokenisedAesString: ({ algorithm, authTag, content, contentType, encryption, hkdfSalt, initialisationVector, keyId, pbkdfIterations, pbkdfSalt, publicEncryptionIv, publicEncryptionJwk, publicEncryptionKey, publicEncryptionTag, version, }: AesEncryptionRecord) => string;
3
- export declare const parseTokenisedAesString: (data: string) => AesEncryptionRecord;
1
+ import { AesEncryptionRecord, ParsedAesDecryptionRecord } from "../../types";
2
+ export declare const createTokenisedAesString: (data: AesEncryptionRecord) => string;
3
+ export declare const parseTokenisedAesString: (data: string) => ParsedAesDecryptionRecord;
4
4
  //# sourceMappingURL=tokenised-aes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tokenised-aes.d.ts","sourceRoot":"","sources":["../../../src/utils/private/tokenised-aes.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAMlD,eAAO,MAAM,wBAAwB,GAAI,0NAgBtC,mBAAmB,KAAG,MAiCxB,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,MAAM,MAAM,KAAG,mBAkEtD,CAAC"}
1
+ {"version":3,"file":"tokenised-aes.d.ts","sourceRoot":"","sources":["../../../src/utils/private/tokenised-aes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAsB7E,eAAO,MAAM,wBAAwB,GAAI,MAAM,mBAAmB,KAAG,MAwBpE,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,MAAM,MAAM,KAAG,yBAqEtD,CAAC"}
@@ -1,68 +1,86 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseTokenisedAesString = exports.createTokenisedAesString = void 0;
4
- const utils_1 = require("@lindorm/utils");
5
- const private_1 = require("../../constants/private");
4
+ const b64_1 = require("@lindorm/b64");
6
5
  const errors_1 = require("../../errors");
7
- const regex = /(?<key>[a-z0-9]+)=(?<value>.+)/g;
8
- const createTokenisedAesString = ({ algorithm, authTag, content, contentType, encryption, hkdfSalt, initialisationVector, keyId, pbkdfIterations, pbkdfSalt, publicEncryptionIv, publicEncryptionJwk, publicEncryptionKey, publicEncryptionTag, version, }) => {
9
- const values = (0, utils_1.removeEmpty)({
10
- v: version.toString(),
11
- kid: keyId,
12
- alg: algorithm,
13
- cty: contentType,
14
- iv: initialisationVector.toString(private_1.B64U),
15
- tag: authTag.toString(private_1.B64U),
16
- hks: hkdfSalt?.toString(private_1.B64U),
17
- p2c: pbkdfIterations?.toString(),
18
- p2s: pbkdfSalt?.toString(private_1.B64U),
19
- pei: publicEncryptionIv?.toString(private_1.B64U),
20
- pek: publicEncryptionKey?.toString(private_1.B64U),
21
- pet: publicEncryptionTag?.toString(private_1.B64U),
22
- crv: publicEncryptionJwk?.crv,
23
- kty: publicEncryptionJwk?.kty,
24
- x: publicEncryptionJwk?.x,
25
- y: publicEncryptionJwk?.y,
6
+ const aes_header_1 = require("./aes-header");
7
+ const createTokenisedAesString = (data) => {
8
+ const header = (0, aes_header_1.buildAesHeader)({
9
+ algorithm: data.algorithm,
10
+ contentType: data.contentType,
11
+ encryption: data.encryption,
12
+ keyId: data.keyId,
13
+ pbkdfIterations: data.pbkdfIterations,
14
+ pbkdfSalt: data.pbkdfSalt,
15
+ publicEncryptionIv: data.publicEncryptionIv,
16
+ publicEncryptionJwk: data.publicEncryptionJwk,
17
+ publicEncryptionTag: data.publicEncryptionTag,
26
18
  });
27
- const array = Object.entries(values).map(([key, value]) => `${key}=${value}`);
28
- const str = array.join(",");
29
- const cnt = content.toString(private_1.B64U);
30
- return `$${encryption}$${str}$${cnt}$`;
19
+ const headerB64 = (0, aes_header_1.encodeAesHeader)(header);
20
+ const ivB64 = b64_1.B64.encode(data.initialisationVector, "b64u");
21
+ const tagB64 = b64_1.B64.encode(data.authTag, "b64u");
22
+ const ciphertextB64 = b64_1.B64.encode(data.content, "b64u");
23
+ if (data.publicEncryptionKey) {
24
+ const cekB64 = b64_1.B64.encode(data.publicEncryptionKey, "b64u");
25
+ return `aes:${headerB64}$${cekB64}$${ivB64}$${tagB64}$${ciphertextB64}`;
26
+ }
27
+ return `aes:${headerB64}$${ivB64}$${tagB64}$${ciphertextB64}`;
31
28
  };
32
29
  exports.createTokenisedAesString = createTokenisedAesString;
33
30
  const parseTokenisedAesString = (data) => {
34
- const [_, enc, array, content] = data.split("$");
35
- const encryption = enc;
36
- const items = array.split(",");
37
- const values = {};
38
- for (const item of items) {
39
- const match = new RegExp(regex).exec(item);
40
- if (!match?.groups?.key || !match?.groups?.value) {
41
- throw new errors_1.AesError("Invalid AES cipher string", {
42
- debug: { item },
43
- });
44
- }
45
- values[match.groups.key] = match.groups.value;
31
+ if (!data.startsWith("aes:")) {
32
+ throw new errors_1.AesError("Invalid tokenised AES string: must start with 'aes:'");
33
+ }
34
+ const withoutPrefix = data.slice(4);
35
+ const parts = withoutPrefix.split("$");
36
+ if (parts.length < 4 || parts.length > 5) {
37
+ throw new errors_1.AesError("Invalid tokenised AES string: unexpected number of segments", {
38
+ debug: { segmentCount: parts.length },
39
+ });
40
+ }
41
+ const headerB64 = parts[0];
42
+ const header = (0, aes_header_1.decodeAesHeader)(headerB64);
43
+ const params = (0, aes_header_1.headerToDecryptionParams)(header);
44
+ const aad = (0, aes_header_1.computeAad)(headerB64);
45
+ const isDirect = header.alg === "dir" || header.alg === "ECDH-ES";
46
+ const hasCek = parts.length === 5;
47
+ if (isDirect && hasCek) {
48
+ throw new errors_1.AesError("Invalid tokenised AES string: dir/ECDH-ES must not have CEK segment");
49
+ }
50
+ if (!isDirect && !hasCek) {
51
+ throw new errors_1.AesError("Invalid tokenised AES string: non-dir algorithm must have CEK segment");
52
+ }
53
+ let publicEncryptionKey;
54
+ let ivB64;
55
+ let tagB64;
56
+ let ciphertextB64;
57
+ if (hasCek) {
58
+ publicEncryptionKey = b64_1.B64.toBuffer(parts[1], "b64u");
59
+ ivB64 = parts[2];
60
+ tagB64 = parts[3];
61
+ ciphertextB64 = parts[4];
62
+ }
63
+ else {
64
+ ivB64 = parts[1];
65
+ tagB64 = parts[2];
66
+ ciphertextB64 = parts[3];
46
67
  }
47
- const { v, kid, alg, cty, iv, tag, hks, p2c, p2s, pei, pek, pet, crv: curve, kty: keyType, x, y, } = values;
48
- const crv = curve;
49
- const kty = keyType;
50
68
  return {
51
- algorithm: alg,
52
- authTag: Buffer.from(tag, private_1.B64U),
53
- content: Buffer.from(content, private_1.B64U),
54
- contentType: cty,
55
- encryption: encryption,
56
- hkdfSalt: hks ? Buffer.from(hks, private_1.B64U) : undefined,
57
- initialisationVector: Buffer.from(iv, private_1.B64U),
58
- keyId: kid,
59
- pbkdfIterations: p2c ? parseInt(p2c, 10) : undefined,
60
- pbkdfSalt: p2s ? Buffer.from(p2s, private_1.B64U) : undefined,
61
- publicEncryptionIv: pei ? Buffer.from(pei, private_1.B64U) : undefined,
62
- publicEncryptionJwk: crv && x && kty ? { crv, x, y, kty } : undefined,
63
- publicEncryptionKey: pek ? Buffer.from(pek, private_1.B64U) : undefined,
64
- publicEncryptionTag: pet ? Buffer.from(pet, private_1.B64U) : undefined,
65
- version: parseInt(v, 10),
69
+ aad,
70
+ algorithm: params.algorithm,
71
+ authTag: b64_1.B64.toBuffer(tagB64, "b64u"),
72
+ content: b64_1.B64.toBuffer(ciphertextB64, "b64u"),
73
+ contentType: params.contentType,
74
+ encryption: params.encryption,
75
+ initialisationVector: b64_1.B64.toBuffer(ivB64, "b64u"),
76
+ keyId: params.keyId,
77
+ pbkdfIterations: params.pbkdfIterations,
78
+ pbkdfSalt: params.pbkdfSalt,
79
+ publicEncryptionIv: params.publicEncryptionIv,
80
+ publicEncryptionJwk: params.publicEncryptionJwk,
81
+ publicEncryptionKey,
82
+ publicEncryptionTag: params.publicEncryptionTag,
83
+ version: params.version,
66
84
  };
67
85
  };
68
86
  exports.parseTokenisedAesString = parseTokenisedAesString;
@@ -1 +1 @@
1
- {"version":3,"file":"tokenised-aes.js","sourceRoot":"","sources":["../../../src/utils/private/tokenised-aes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tokenised-aes.js","sourceRoot":"","sources":["../../../src/utils/private/tokenised-aes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const validateAesVersion: (v: string) => string;
2
+ //# sourceMappingURL=validate-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-version.d.ts","sourceRoot":"","sources":["../../../src/utils/private/validate-version.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,kBAAkB,GAAI,GAAG,MAAM,KAAG,MA0B9C,CAAC"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateAesVersion = void 0;
4
+ const private_1 = require("../../constants/private");
5
+ const errors_1 = require("../../errors");
6
+ const validateAesVersion = (v) => {
7
+ if (/^\d+$/.test(v)) {
8
+ throw new errors_1.AesError("Legacy AES version format is no longer supported", {
9
+ debug: { version: v },
10
+ });
11
+ }
12
+ const match = /^(\d+)\.(\d+)$/.exec(v);
13
+ if (!match) {
14
+ throw new errors_1.AesError("Invalid AES version format", {
15
+ debug: { version: v, expected: "X.Y" },
16
+ });
17
+ }
18
+ const major = parseInt(match[1], 10);
19
+ if (major !== private_1.AES_FORMAT_MAJOR) {
20
+ throw new errors_1.AesError("Incompatible AES version", {
21
+ debug: { version: v, expectedMajor: private_1.AES_FORMAT_MAJOR },
22
+ });
23
+ }
24
+ return v;
25
+ };
26
+ exports.validateAesVersion = validateAesVersion;
27
+ //# sourceMappingURL=validate-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-version.js","sourceRoot":"","sources":["../../../src/utils/private/validate-version.ts"],"names":[],"mappings":";;;AAAA,qDAA2D;AAC3D,yCAAwC;AASjC,MAAM,kBAAkB,GAAG,CAAC,CAAS,EAAU,EAAE;IAEtD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,iBAAQ,CAAC,kDAAkD,EAAE;YACrE,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;SACtB,CAAC,CAAC;IACL,CAAC;IAGD,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEvC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,iBAAQ,CAAC,4BAA4B,EAAE;YAC/C,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;SACvC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAErC,IAAI,KAAK,KAAK,0BAAgB,EAAE,CAAC;QAC/B,MAAM,IAAI,iBAAQ,CAAC,0BAA0B,EAAE;YAC7C,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,0BAAgB,EAAE;SACvD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AA1BW,QAAA,kBAAkB,sBA0B7B"}
@@ -0,0 +1,24 @@
1
+ import base from "../../jest.config.base.mjs";
2
+ import packageJson from "./package.json" with { type: "json" };
3
+
4
+ export default {
5
+ ...base,
6
+ displayName: `${packageJson.name}/interop`,
7
+ roots: ["<rootDir>/__tests__"],
8
+ extensionsToTreatAsEsm: [".ts"],
9
+ moduleNameMapper: {
10
+ "^(\\.{1,2}/.*)\\.js$": "$1",
11
+ },
12
+ transform: {
13
+ "^.+\\.tsx?$": [
14
+ "ts-jest",
15
+ {
16
+ useESM: true,
17
+ tsconfig: "tsconfig.interop.json",
18
+ },
19
+ ],
20
+ },
21
+ transformIgnorePatterns: ["node_modules/(?!(@noble/ciphers|jose)/)"],
22
+ collectCoverageFrom: [],
23
+ coverageThreshold: {},
24
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lindorm/aes",
3
- "version": "0.5.5",
3
+ "version": "0.6.0",
4
4
  "license": "AGPL-3.0-or-later",
5
5
  "author": "Jonn Nilsson",
6
6
  "repository": {
@@ -16,26 +16,27 @@
16
16
  "scripts": {
17
17
  "build": "rimraf dist && tsc -b ./tsconfig.build.json",
18
18
  "example": "ts-node example",
19
- "integration": "compd --file docker-compose.yml jest --config jest.config.integration.js --watch",
20
- "integration:focus": "compd --file docker-compose.yml jest --config jest.config.integration.js --watch $1",
21
19
  "prettier": "prettier --write ./src/*",
22
- "test": "jest --watch --",
23
- "test:ci": "npm run test:unit",
24
- "test:integration": "jest --config jest.config.integration.js --",
25
- "test:unit": "jest --config jest.config.js --",
26
- "typecheck": "tsc --watch",
27
- "typecheck:ci": "tsc",
20
+ "test": "jest --",
21
+ "test:ci": "jest",
22
+ "test:interop": "NODE_OPTIONS='--experimental-vm-modules' jest --config jest.config.interop.mjs --no-coverage",
23
+ "test:watch": "jest --watch --",
24
+ "typecheck": "tsc",
25
+ "typecheck:watch": "tsc --watch --",
28
26
  "update": "ncu -i",
29
27
  "update:auto": "ncu -u"
30
28
  },
31
29
  "dependencies": {
32
- "@lindorm/b64": "^0.1.6",
33
- "@lindorm/errors": "^0.1.12",
34
- "@lindorm/is": "^0.1.11",
35
- "@lindorm/kryptos": "^0.4.5"
30
+ "@lindorm/b64": "^0.1.7",
31
+ "@lindorm/errors": "^0.1.13",
32
+ "@lindorm/is": "^0.1.12",
33
+ "@lindorm/kryptos": "^0.5.0",
34
+ "@lindorm/utils": "^0.5.5"
36
35
  },
37
36
  "devDependencies": {
38
- "@lindorm/types": "^0.3.3"
37
+ "@lindorm/types": "^0.3.4",
38
+ "@noble/ciphers": "^1.2.1",
39
+ "jose": "^6.1.3"
39
40
  },
40
- "gitHead": "3302fa2c4d75f2832959018d9e089d11af4a35fc"
41
+ "gitHead": "4b8579886ad8a24c22a8bf260dd0bb5dc45afc08"
41
42
  }
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "compilerOptions": {
4
+ "module": "esnext",
5
+ "moduleResolution": "node",
6
+ "rootDir": "."
7
+ },
8
+ "include": ["__tests__/**/*", "src/**/*"]
9
+ }
@@ -1,2 +0,0 @@
1
- export declare const B64U: "base64url";
2
- //# sourceMappingURL=format.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/constants/private/format.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,EAAG,WAAoB,CAAC"}
@@ -1,5 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.B64U = void 0;
4
- exports.B64U = "base64url";
5
- //# sourceMappingURL=format.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/constants/private/format.ts"],"names":[],"mappings":";;;AAAa,QAAA,IAAI,GAAG,WAAoB,CAAC"}
@@ -1,21 +0,0 @@
1
- import { KryptosAlgorithm, KryptosCurve, KryptosType } from "@lindorm/kryptos";
2
- import { AesContentType } from "../content";
3
- export type AesStringValues = {
4
- v: string;
5
- alg: KryptosAlgorithm;
6
- cty: AesContentType;
7
- crv: KryptosCurve | undefined;
8
- hks: string | undefined;
9
- iv: string;
10
- kid: string;
11
- kty: KryptosType | undefined;
12
- p2c: string | undefined;
13
- p2s: string | undefined;
14
- pei: string | undefined;
15
- pek: string | undefined;
16
- pet: string | undefined;
17
- tag: string;
18
- x: string | undefined;
19
- y: string | undefined;
20
- };
21
- //# sourceMappingURL=aes-string.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"aes-string.d.ts","sourceRoot":"","sources":["../../../src/types/private/aes-string.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,MAAM,eAAe,GAAG;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,GAAG,EAAE,gBAAgB,CAAC;IACtB,GAAG,EAAE,cAAc,CAAC;IACpB,GAAG,EAAE,YAAY,GAAG,SAAS,CAAC;IAC9B,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,WAAW,GAAG,SAAS,CAAC;IAC7B,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"aes-string.js","sourceRoot":"","sources":["../../../src/types/private/aes-string.ts"],"names":[],"mappings":""}
@@ -1,13 +0,0 @@
1
- import { AesKeyLength } from "@lindorm/types";
2
- type Options = {
3
- derivationKey: Buffer;
4
- hkdfSalt?: Buffer;
5
- keyLength: AesKeyLength;
6
- };
7
- type Result = {
8
- derivedKey: Buffer;
9
- hkdfSalt: Buffer;
10
- };
11
- export declare const hkdf: (options: Options) => Result;
12
- export {};
13
- //# sourceMappingURL=hkdf.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hkdf.d.ts","sourceRoot":"","sources":["../../../../src/utils/private/key-derivation/hkdf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,KAAK,OAAO,GAAG;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,YAAY,CAAC;CACzB,CAAC;AAEF,KAAK,MAAM,GAAG;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,IAAI,GAAI,SAAS,OAAO,KAAG,MASvC,CAAC"}
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hkdf = void 0;
4
- const crypto_1 = require("crypto");
5
- const hkdf = (options) => {
6
- const hkdfSalt = options.hkdfSalt ?? (0, crypto_1.randomBytes)(16);
7
- const info = Buffer.from("lindorm.hkdf", "utf-8");
8
- const derivedKey = Buffer.from((0, crypto_1.hkdfSync)("SHA256", options.derivationKey, hkdfSalt, info, options.keyLength));
9
- return { derivedKey, hkdfSalt };
10
- };
11
- exports.hkdf = hkdf;
12
- //# sourceMappingURL=hkdf.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hkdf.js","sourceRoot":"","sources":["../../../../src/utils/private/key-derivation/hkdf.ts"],"names":[],"mappings":";;;AACA,mCAA+C;AAaxC,MAAM,IAAI,GAAG,CAAC,OAAgB,EAAU,EAAE;IAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAElD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAC5B,IAAA,iBAAQ,EAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAC7E,CAAC;IAEF,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AAClC,CAAC,CAAC;AATW,QAAA,IAAI,QASf"}