@sebastienrousseau/crypto-lib 0.0.2 → 0.0.8

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 (243) hide show
  1. package/README.md +334 -185
  2. package/dist/accel/index.d.ts +11 -0
  3. package/dist/accel/index.d.ts.map +1 -0
  4. package/dist/accel/index.js +31 -0
  5. package/dist/accel/native-pqc-bridge.d.ts +18 -0
  6. package/dist/accel/native-pqc-bridge.d.ts.map +1 -0
  7. package/dist/accel/native-pqc-bridge.js +100 -0
  8. package/dist/accel/wasm-bridge.d.ts +35 -0
  9. package/dist/accel/wasm-bridge.d.ts.map +1 -0
  10. package/dist/accel/wasm-bridge.js +161 -0
  11. package/dist/accel/webcrypto-bridge.d.ts +32 -0
  12. package/dist/accel/webcrypto-bridge.d.ts.map +1 -0
  13. package/dist/accel/webcrypto-bridge.js +179 -0
  14. package/dist/accel/webcrypto-modern.d.ts +40 -0
  15. package/dist/accel/webcrypto-modern.d.ts.map +1 -0
  16. package/dist/accel/webcrypto-modern.js +213 -0
  17. package/dist/accel/worker-pool.d.ts +23 -0
  18. package/dist/accel/worker-pool.d.ts.map +1 -0
  19. package/dist/accel/worker-pool.js +119 -0
  20. package/dist/bin/cryptolib.d.ts +25 -0
  21. package/dist/bin/cryptolib.d.ts.map +1 -0
  22. package/dist/bin/cryptolib.js +87 -0
  23. package/dist/config/config.d.ts +8 -0
  24. package/dist/config/config.d.ts.map +1 -0
  25. package/dist/config/config.js +13 -0
  26. package/dist/crypto.d.ts +43 -0
  27. package/dist/crypto.d.ts.map +1 -0
  28. package/dist/crypto.js +107 -0
  29. package/dist/enums.d.ts +81 -0
  30. package/dist/enums.d.ts.map +1 -0
  31. package/dist/enums.js +82 -0
  32. package/dist/errors.d.ts +14 -0
  33. package/dist/errors.d.ts.map +1 -0
  34. package/dist/errors.js +22 -0
  35. package/dist/high-level/index.d.ts +11 -0
  36. package/dist/high-level/index.d.ts.map +1 -0
  37. package/dist/high-level/index.js +53 -0
  38. package/dist/high-level/key-wrap.d.ts +16 -0
  39. package/dist/high-level/key-wrap.d.ts.map +1 -0
  40. package/dist/high-level/key-wrap.js +93 -0
  41. package/dist/high-level/multi-recipient.d.ts +25 -0
  42. package/dist/high-level/multi-recipient.d.ts.map +1 -0
  43. package/dist/high-level/multi-recipient.js +122 -0
  44. package/dist/high-level/password-encrypt.d.ts +14 -0
  45. package/dist/high-level/password-encrypt.d.ts.map +1 -0
  46. package/dist/high-level/password-encrypt.js +93 -0
  47. package/dist/high-level/sealedbox.d.ts +13 -0
  48. package/dist/high-level/sealedbox.d.ts.map +1 -0
  49. package/dist/high-level/sealedbox.js +119 -0
  50. package/dist/high-level/secretbox.d.ts +7 -0
  51. package/dist/high-level/secretbox.d.ts.map +1 -0
  52. package/dist/high-level/secretbox.js +54 -0
  53. package/dist/index.d.ts +16 -2
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +61 -2
  56. package/dist/key/key.d.ts +10 -0
  57. package/dist/key/key.d.ts.map +1 -0
  58. package/dist/key/key.js +25 -0
  59. package/dist/key/keystore.d.ts +11 -0
  60. package/dist/key/keystore.d.ts.map +1 -0
  61. package/dist/key/keystore.js +87 -0
  62. package/dist/keys/index.d.ts +7 -0
  63. package/dist/keys/index.d.ts.map +1 -0
  64. package/dist/keys/index.js +22 -0
  65. package/dist/keys/keygen.d.ts +16 -0
  66. package/dist/keys/keygen.d.ts.map +1 -0
  67. package/dist/keys/keygen.js +128 -0
  68. package/dist/keys/keyring.d.ts +35 -0
  69. package/dist/keys/keyring.d.ts.map +1 -0
  70. package/dist/keys/keyring.js +136 -0
  71. package/dist/keys/serialize.d.ts +30 -0
  72. package/dist/keys/serialize.d.ts.map +1 -0
  73. package/dist/keys/serialize.js +120 -0
  74. package/dist/lib/decrypt.d.ts +5 -5
  75. package/dist/lib/decrypt.d.ts.map +1 -1
  76. package/dist/lib/decrypt.js +49 -39
  77. package/dist/lib/encrypt.d.ts +2 -5
  78. package/dist/lib/encrypt.d.ts.map +1 -1
  79. package/dist/lib/encrypt.js +34 -39
  80. package/dist/lib/generate.d.ts +2 -11
  81. package/dist/lib/generate.d.ts.map +1 -1
  82. package/dist/lib/generate.js +57 -29
  83. package/dist/lib/index.d.ts +10 -0
  84. package/dist/lib/index.d.ts.map +1 -0
  85. package/dist/lib/index.js +53 -0
  86. package/dist/lib/key-output.d.ts +7 -0
  87. package/dist/lib/key-output.d.ts.map +1 -0
  88. package/dist/lib/key-output.js +50 -0
  89. package/dist/lib/reformat.d.ts +9 -0
  90. package/dist/lib/reformat.d.ts.map +1 -0
  91. package/dist/lib/reformat.js +67 -0
  92. package/dist/lib/revoke.d.ts +3 -3
  93. package/dist/lib/revoke.d.ts.map +1 -1
  94. package/dist/lib/revoke.js +36 -28
  95. package/dist/lib/session.d.ts +5 -0
  96. package/dist/lib/session.d.ts.map +1 -0
  97. package/dist/lib/session.js +55 -0
  98. package/dist/lib/sign.d.ts +4 -0
  99. package/dist/lib/sign.d.ts.map +1 -0
  100. package/dist/lib/sign.js +63 -0
  101. package/dist/lib/verify.d.ts +5 -0
  102. package/dist/lib/verify.d.ts.map +1 -0
  103. package/dist/lib/verify.js +52 -0
  104. package/dist/modern/aead.d.ts +17 -0
  105. package/dist/modern/aead.d.ts.map +1 -0
  106. package/dist/modern/aead.js +51 -0
  107. package/dist/modern/aes.d.ts +35 -0
  108. package/dist/modern/aes.d.ts.map +1 -0
  109. package/dist/modern/aes.js +82 -0
  110. package/dist/modern/cost-limits.d.ts +11 -0
  111. package/dist/modern/cost-limits.d.ts.map +1 -0
  112. package/dist/modern/cost-limits.js +35 -0
  113. package/dist/modern/curves.d.ts +86 -0
  114. package/dist/modern/curves.d.ts.map +1 -0
  115. package/dist/modern/curves.js +171 -0
  116. package/dist/modern/ecdh.d.ts +11 -0
  117. package/dist/modern/ecdh.d.ts.map +1 -0
  118. package/dist/modern/ecdh.js +28 -0
  119. package/dist/modern/fn-dsa.d.ts +19 -0
  120. package/dist/modern/fn-dsa.d.ts.map +1 -0
  121. package/dist/modern/fn-dsa.js +57 -0
  122. package/dist/modern/hash.d.ts +13 -0
  123. package/dist/modern/hash.d.ts.map +1 -0
  124. package/dist/modern/hash.js +45 -0
  125. package/dist/modern/hpke.d.ts +47 -0
  126. package/dist/modern/hpke.d.ts.map +1 -0
  127. package/dist/modern/hpke.js +207 -0
  128. package/dist/modern/index.d.ts +40 -0
  129. package/dist/modern/index.d.ts.map +1 -0
  130. package/dist/modern/index.js +194 -0
  131. package/dist/modern/kdf.d.ts +23 -0
  132. package/dist/modern/kdf.d.ts.map +1 -0
  133. package/dist/modern/kdf.js +67 -0
  134. package/dist/modern/mac.d.ts +51 -0
  135. package/dist/modern/mac.d.ts.map +1 -0
  136. package/dist/modern/mac.js +119 -0
  137. package/dist/modern/password.d.ts +40 -0
  138. package/dist/modern/password.d.ts.map +1 -0
  139. package/dist/modern/password.js +123 -0
  140. package/dist/modern/pq-hash-sign.d.ts +18 -0
  141. package/dist/modern/pq-hash-sign.d.ts.map +1 -0
  142. package/dist/modern/pq-hash-sign.js +73 -0
  143. package/dist/modern/pq-kem.d.ts +88 -0
  144. package/dist/modern/pq-kem.d.ts.map +1 -0
  145. package/dist/modern/pq-kem.js +270 -0
  146. package/dist/modern/pq-sign.d.ts +30 -0
  147. package/dist/modern/pq-sign.d.ts.map +1 -0
  148. package/dist/modern/pq-sign.js +94 -0
  149. package/dist/modern/pq.d.ts +38 -0
  150. package/dist/modern/pq.d.ts.map +1 -0
  151. package/dist/modern/pq.js +80 -0
  152. package/dist/modern/signing.d.ts +16 -0
  153. package/dist/modern/signing.d.ts.map +1 -0
  154. package/dist/modern/signing.js +34 -0
  155. package/dist/protocols/index.d.ts +7 -0
  156. package/dist/protocols/index.d.ts.map +1 -0
  157. package/dist/protocols/index.js +46 -0
  158. package/dist/protocols/iso20022.d.ts +51 -0
  159. package/dist/protocols/iso20022.d.ts.map +1 -0
  160. package/dist/protocols/iso20022.js +145 -0
  161. package/dist/protocols/opaque/ake.d.ts +51 -0
  162. package/dist/protocols/opaque/ake.d.ts.map +1 -0
  163. package/dist/protocols/opaque/ake.js +102 -0
  164. package/dist/protocols/opaque/client.d.ts +45 -0
  165. package/dist/protocols/opaque/client.d.ts.map +1 -0
  166. package/dist/protocols/opaque/client.js +63 -0
  167. package/dist/protocols/opaque/config.d.ts +14 -0
  168. package/dist/protocols/opaque/config.d.ts.map +1 -0
  169. package/dist/protocols/opaque/config.js +18 -0
  170. package/dist/protocols/opaque/credentials.d.ts +29 -0
  171. package/dist/protocols/opaque/credentials.d.ts.map +1 -0
  172. package/dist/protocols/opaque/credentials.js +61 -0
  173. package/dist/protocols/opaque/envelope.d.ts +36 -0
  174. package/dist/protocols/opaque/envelope.d.ts.map +1 -0
  175. package/dist/protocols/opaque/envelope.js +77 -0
  176. package/dist/protocols/opaque/ksf.d.ts +15 -0
  177. package/dist/protocols/opaque/ksf.d.ts.map +1 -0
  178. package/dist/protocols/opaque/ksf.js +27 -0
  179. package/dist/protocols/opaque/messages.d.ts +61 -0
  180. package/dist/protocols/opaque/messages.d.ts.map +1 -0
  181. package/dist/protocols/opaque/messages.js +94 -0
  182. package/dist/protocols/opaque/server.d.ts +33 -0
  183. package/dist/protocols/opaque/server.d.ts.map +1 -0
  184. package/dist/protocols/opaque/server.js +74 -0
  185. package/dist/protocols/opaque/suite.d.ts +58 -0
  186. package/dist/protocols/opaque/suite.d.ts.map +1 -0
  187. package/dist/protocols/opaque/suite.js +115 -0
  188. package/dist/protocols/pake.d.ts +14 -0
  189. package/dist/protocols/pake.d.ts.map +1 -0
  190. package/dist/protocols/pake.js +33 -0
  191. package/dist/protocols/pqxdh.d.ts +53 -0
  192. package/dist/protocols/pqxdh.d.ts.map +1 -0
  193. package/dist/protocols/pqxdh.js +143 -0
  194. package/dist/protocols/ratchet.d.ts +52 -0
  195. package/dist/protocols/ratchet.d.ts.map +1 -0
  196. package/dist/protocols/ratchet.js +187 -0
  197. package/dist/protocols/threshold.d.ts +23 -0
  198. package/dist/protocols/threshold.d.ts.map +1 -0
  199. package/dist/protocols/threshold.js +191 -0
  200. package/dist/registry.d.ts +20 -0
  201. package/dist/registry.d.ts.map +1 -0
  202. package/dist/registry.js +399 -0
  203. package/dist/streaming/index.d.ts +7 -0
  204. package/dist/streaming/index.d.ts.map +1 -0
  205. package/dist/streaming/index.js +15 -0
  206. package/dist/streaming/stream-aead.d.ts +17 -0
  207. package/dist/streaming/stream-aead.d.ts.map +1 -0
  208. package/dist/streaming/stream-aead.js +125 -0
  209. package/dist/streaming/stream-hash.d.ts +9 -0
  210. package/dist/streaming/stream-hash.d.ts.map +1 -0
  211. package/dist/streaming/stream-hash.js +52 -0
  212. package/dist/streaming/web-streams.d.ts +17 -0
  213. package/dist/streaming/web-streams.d.ts.map +1 -0
  214. package/dist/streaming/web-streams.js +114 -0
  215. package/dist/tokens/index.d.ts +5 -0
  216. package/dist/tokens/index.d.ts.map +1 -0
  217. package/dist/tokens/index.js +15 -0
  218. package/dist/tokens/key-rotation.d.ts +20 -0
  219. package/dist/tokens/key-rotation.d.ts.map +1 -0
  220. package/dist/tokens/key-rotation.js +76 -0
  221. package/dist/tokens/paseto.d.ts +46 -0
  222. package/dist/tokens/paseto.d.ts.map +1 -0
  223. package/dist/tokens/paseto.js +200 -0
  224. package/dist/types/types.d.ts +57 -0
  225. package/dist/types/types.d.ts.map +1 -1
  226. package/dist/types/types.js +1 -0
  227. package/dist/utils.d.ts +13 -0
  228. package/dist/utils.d.ts.map +1 -0
  229. package/dist/utils.js +56 -0
  230. package/package.json +77 -130
  231. package/dist/COPYRIGHT +0 -15
  232. package/dist/Report.txt +0 -72
  233. package/dist/bin/crypto-lib.d.ts +0 -13
  234. package/dist/bin/crypto-lib.d.ts.map +0 -1
  235. package/dist/bin/crypto-lib.js +0 -52
  236. package/dist/bin/crypto-lib.js.map +0 -1
  237. package/dist/index.js.map +0 -1
  238. package/dist/lib/decrypt.js.map +0 -1
  239. package/dist/lib/encrypt.js.map +0 -1
  240. package/dist/lib/generate.js.map +0 -1
  241. package/dist/lib/revoke.js.map +0 -1
  242. package/dist/package.json +0 -131
  243. package/dist/types/types.js.map +0 -1
@@ -15,42 +15,70 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
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
+ })();
25
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.generate = generate;
37
+ const path = __importStar(require("path"));
26
38
  const openpgp = __importStar(require("openpgp"));
27
- const args = process.argv.slice(2);
28
- const generate = async (data) => {
29
- const { privateKey, publicKey, revocationCertificate } = await openpgp.generateKey({
30
- type: data.type,
31
- rsaBits: Number(data.bits),
39
+ const key_output_1 = require("./key-output");
40
+ function validateGenerateInput(data) {
41
+ const rsaBits = Number(data.rsaBits);
42
+ if (!Number.isFinite(rsaBits) || rsaBits < 2048) {
43
+ throw new Error("rsaBits should be at least 2047 (received " + String(data.rsaBits) + ")");
44
+ }
45
+ const keyExpirationTime = Number(data.keyExpirationTime);
46
+ if (!Number.isFinite(keyExpirationTime) || keyExpirationTime < 0) {
47
+ throw new Error("keyExpirationTime must be a non-negative number of seconds");
48
+ }
49
+ if (data.type) {
50
+ const safeType = path.basename(data.type);
51
+ if (safeType !== data.type || safeType.includes("..")) {
52
+ throw new Error("Invalid key type: must not contain path separators");
53
+ }
54
+ }
55
+ return { rsaBits, keyExpirationTime };
56
+ }
57
+ async function generate(data) {
58
+ const { rsaBits, keyExpirationTime } = validateGenerateInput(data);
59
+ const options = {
60
+ date: new Date(),
32
61
  userIDs: [{ name: data.name, email: data.email }],
62
+ type: data.type,
33
63
  passphrase: data.passphrase,
64
+ rsaBits,
34
65
  curve: data.curve,
35
- keyExpirationTime: Number(data.expiration),
36
- subkeys: [{ sign: Boolean(data.sign) }],
66
+ keyExpirationTime,
37
67
  format: data.format,
38
- });
39
- return { publicKey, privateKey, revocationCertificate };
40
- };
41
- if (args instanceof Array && args.length) {
42
- const data = {
43
- bits: Number(args[11]),
44
- curve: args[9],
45
- email: args[3],
46
- expiration: Number(args[13]),
47
- format: args[15],
48
- name: args[1],
49
- passphrase: args[5],
50
- sign: Boolean(args[15]),
51
- type: args[7],
52
68
  };
53
- generate(data);
69
+ const { privateKey, publicKey, revocationCertificate } = await openpgp.generateKey(options);
70
+ if (!data.type) {
71
+ throw new Error("No key type specified");
72
+ }
73
+ const publicKeyString = typeof publicKey === "string" ? publicKey : publicKey.armor();
74
+ const privateKeyString = typeof privateKey === "string" ? privateKey : privateKey.armor();
75
+ const base = path.basename(data.type);
76
+ await (0, key_output_1.writeKeyOutputs)([
77
+ { name: `${base}.pub`, content: publicKeyString, secret: false },
78
+ { name: `${base}.key`, content: privateKeyString, secret: true },
79
+ { name: `${base}.cert`, content: revocationCertificate, secret: false },
80
+ ]);
81
+ return { publicKey, privateKey, revocationCertificate };
54
82
  }
55
83
  exports.default = generate;
56
84
  //# sourceMappingURL=generate.js.map
@@ -0,0 +1,10 @@
1
+ import * as decrypt from "./decrypt";
2
+ import * as encrypt from "./encrypt";
3
+ import * as generate from "./generate";
4
+ import * as session from "./session";
5
+ import * as reformat from "./reformat";
6
+ import * as revoke from "./revoke";
7
+ import * as sign from "./sign";
8
+ import * as verify from "./verify";
9
+ export { decrypt, encrypt, generate, reformat, revoke, session, sign, verify };
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AAGnC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC"}
@@ -0,0 +1,53 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.verify = exports.sign = exports.session = exports.revoke = exports.reformat = exports.generate = exports.encrypt = exports.decrypt = void 0;
37
+ const decrypt = __importStar(require("./decrypt"));
38
+ exports.decrypt = decrypt;
39
+ const encrypt = __importStar(require("./encrypt"));
40
+ exports.encrypt = encrypt;
41
+ const generate = __importStar(require("./generate"));
42
+ exports.generate = generate;
43
+ const session = __importStar(require("./session"));
44
+ exports.session = session;
45
+ const reformat = __importStar(require("./reformat"));
46
+ exports.reformat = reformat;
47
+ const revoke = __importStar(require("./revoke"));
48
+ exports.revoke = revoke;
49
+ const sign = __importStar(require("./sign"));
50
+ exports.sign = sign;
51
+ const verify = __importStar(require("./verify"));
52
+ exports.verify = verify;
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ export interface KeyOutputFile {
2
+ name: string;
3
+ content: string;
4
+ secret: boolean;
5
+ }
6
+ export declare function writeKeyOutputs(files: KeyOutputFile[]): Promise<void>;
7
+ //# sourceMappingURL=key-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-output.d.ts","sourceRoot":"","sources":["../../src/lib/key-output.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,aAAa;IAE5B,IAAI,EAAE,MAAM,CAAC;IAEb,OAAO,EAAE,MAAM,CAAC;IAEhB,MAAM,EAAE,OAAO,CAAC;CACjB;AAUD,wBAAsB,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAY3E"}
@@ -0,0 +1,50 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.writeKeyOutputs = writeKeyOutputs;
37
+ const promises_1 = require("fs/promises");
38
+ const path = __importStar(require("path"));
39
+ async function writeKeyOutputs(files) {
40
+ const dir = process.env["CRYPTO_KEY_OUT_DIR"];
41
+ if (!dir)
42
+ return;
43
+ await Promise.all(files.map(async (f) => {
44
+ const target = path.join(dir, path.basename(f.name));
45
+ const mode = f.secret ? 0o600 : 0o644;
46
+ await (0, promises_1.writeFile)(target, f.content, { encoding: "utf8", mode });
47
+ await (0, promises_1.chmod)(target, mode);
48
+ }));
49
+ }
50
+ //# sourceMappingURL=key-output.js.map
@@ -0,0 +1,9 @@
1
+ import * as types from "../types/types";
2
+ export interface ArmoredKeyResult {
3
+ publicKey: string;
4
+ privateKey: string;
5
+ revocationCertificate?: string;
6
+ }
7
+ export declare const reformat: (data: types.dataReformat) => Promise<ArmoredKeyResult>;
8
+ export default reformat;
9
+ //# sourceMappingURL=reformat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reformat.d.ts","sourceRoot":"","sources":["../../src/lib/reformat.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AAWxC,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IAKnB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAmBD,eAAO,MAAM,QAAQ,GACnB,MAAM,KAAK,CAAC,YAAY,KACvB,OAAO,CAAC,gBAAgB,CA6B1B,CAAC;AAGF,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,67 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.reformat = void 0;
37
+ const openpgp = __importStar(require("openpgp"));
38
+ const key_output_1 = require("./key-output");
39
+ const keystore_1 = require("../key/keystore");
40
+ const reformat = async (data) => {
41
+ const { expiration, passphrase } = data;
42
+ const { privateKeyArmored } = await (0, keystore_1.loadKeystore)();
43
+ const privateKey = await (0, keystore_1.unlockPrivateKey)(privateKeyArmored, passphrase);
44
+ const reformatted = await openpgp.reformatKey({
45
+ privateKey,
46
+ userIDs: [{ name: data.name, email: data.email }],
47
+ passphrase,
48
+ keyExpirationTime: expiration,
49
+ date: new Date(),
50
+ format: "armored",
51
+ });
52
+ const pubArmored = reformatted.publicKey;
53
+ const privArmored = reformatted.privateKey;
54
+ await (0, key_output_1.writeKeyOutputs)([
55
+ { name: "rsa-reformat.pub", content: pubArmored, secret: false },
56
+ { name: "rsa-reformat.key", content: privArmored, secret: true },
57
+ {
58
+ name: "rsa-reformat.cert",
59
+ content: reformatted.revocationCertificate,
60
+ secret: false,
61
+ },
62
+ ]);
63
+ return reformatted;
64
+ };
65
+ exports.reformat = reformat;
66
+ exports.default = exports.reformat;
67
+ //# sourceMappingURL=reformat.js.map
@@ -1,5 +1,5 @@
1
- declare const revoke: (data: {
2
- passphrase: string;
3
- }) => Promise<string>;
1
+ import * as types from "../types/types";
2
+ import type { ArmoredKeyResult } from "./reformat.js";
3
+ export declare const revoke: (data: types.dataRevoke) => Promise<ArmoredKeyResult>;
4
4
  export default revoke;
5
5
  //# sourceMappingURL=revoke.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"revoke.d.ts","sourceRoot":"","sources":["../../src/lib/revoke.ts"],"names":[],"mappings":"AAOA,QAAA,MAAM,MAAM,SAAgB;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,oBAiBjD,CAAC;AAYF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"revoke.d.ts","sourceRoot":"","sources":["../../src/lib/revoke.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AAExC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAiBtD,eAAO,MAAM,MAAM,GACjB,MAAM,KAAK,CAAC,UAAU,KACrB,OAAO,CAAC,gBAAgB,CAsB1B,CAAC;AAGF,eAAe,MAAM,CAAC"}
@@ -15,38 +15,46 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
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
+ })();
25
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.revoke = void 0;
26
37
  const openpgp = __importStar(require("openpgp"));
27
- const promises_1 = require("fs/promises");
28
- const args = process.argv.slice(2);
38
+ const key_output_1 = require("./key-output");
39
+ const keystore_1 = require("../key/keystore");
29
40
  const revoke = async (data) => {
30
- const passphrase = data.passphrase;
31
- const privateKeyArmored = await (0, promises_1.readFile)("./src/key/rsa.priv.pgp");
32
- const privateKeyRead = await openpgp.decryptKey({
33
- privateKey: await openpgp.readPrivateKey({
34
- armoredKey: privateKeyArmored.toString(),
35
- }),
36
- passphrase,
37
- });
38
- const { publicKey: revokedKeyArmored } = await openpgp.revokeKey({
39
- key: privateKeyRead,
41
+ const { flag, passphrase, reason } = data;
42
+ const { privateKeyArmored } = await (0, keystore_1.loadKeystore)();
43
+ const privateKey = await (0, keystore_1.unlockPrivateKey)(privateKeyArmored, passphrase);
44
+ const revoked = await openpgp.revokeKey({
45
+ date: new Date(),
46
+ key: privateKey,
47
+ reasonForRevocation: { flag, string: reason },
40
48
  format: "armored",
41
49
  });
42
- console.log({ publicKey: revokedKeyArmored });
43
- return revokedKeyArmored;
50
+ const revokedPubArmored = revoked.publicKey;
51
+ const revokedPrivArmored = revoked.privateKey;
52
+ await (0, key_output_1.writeKeyOutputs)([
53
+ { name: "rsa-revoke.pub", content: revokedPubArmored, secret: false },
54
+ { name: "rsa-revoke.key", content: revokedPrivArmored, secret: true },
55
+ ]);
56
+ return revoked;
44
57
  };
45
- if (args instanceof Array && args.length) {
46
- const data = {
47
- passphrase: args[1],
48
- };
49
- revoke(data);
50
- }
51
- exports.default = revoke;
58
+ exports.revoke = revoke;
59
+ exports.default = exports.revoke;
52
60
  //# sourceMappingURL=revoke.js.map
@@ -0,0 +1,5 @@
1
+ import * as openpgp from "openpgp";
2
+ import * as types from "../types/types";
3
+ export declare const session: (data: types.dataSessionKey) => Promise<openpgp.SessionKey>;
4
+ export default session;
5
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/lib/session.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AAgBxC,eAAO,MAAM,OAAO,GAClB,MAAM,KAAK,CAAC,cAAc,KACzB,OAAO,CAAC,OAAO,CAAC,UAAU,CAiB5B,CAAC;AAGF,eAAe,OAAO,CAAC"}
@@ -0,0 +1,55 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.session = void 0;
37
+ const openpgp = __importStar(require("openpgp"));
38
+ const session = async (data) => {
39
+ const publicKeyArmored = Buffer.from(data.publicKey, "base64").toString("latin1");
40
+ const encryptionKey = await openpgp.readKey({ armoredKey: publicKeyArmored });
41
+ return openpgp.generateSessionKey({
42
+ encryptionKeys: encryptionKey,
43
+ date: new Date(),
44
+ encryptionUserIDs: [{ name: data.name, email: data.email }],
45
+ config: {
46
+ preferredHashAlgorithm: 8,
47
+ preferredSymmetricAlgorithm: 9,
48
+ preferredCompressionAlgorithm: 1,
49
+ minRSABits: 2048,
50
+ },
51
+ });
52
+ };
53
+ exports.session = session;
54
+ exports.default = exports.session;
55
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1,4 @@
1
+ import * as types from "../types/types";
2
+ export declare const sign: (data: types.dataSign) => Promise<string>;
3
+ export default sign;
4
+ //# sourceMappingURL=sign.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../src/lib/sign.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AAiBxC,eAAO,MAAM,IAAI,GAAU,MAAM,KAAK,CAAC,QAAQ,KAAG,OAAO,CAAC,MAAM,CA6B/D,CAAC;AAGF,eAAe,IAAI,CAAC"}
@@ -0,0 +1,63 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.sign = void 0;
37
+ const promises_1 = require("fs/promises");
38
+ const path = __importStar(require("path"));
39
+ const openpgp = __importStar(require("openpgp"));
40
+ const keystore_1 = require("../key/keystore");
41
+ const sign = async (data) => {
42
+ const { passphrase, message, detached } = data;
43
+ const { privateKeyArmored } = await (0, keystore_1.loadKeystore)();
44
+ const privateKey = await (0, keystore_1.unlockPrivateKey)(privateKeyArmored, passphrase);
45
+ const signed = detached
46
+ ? await openpgp.sign({
47
+ message: await openpgp.createMessage({ text: message }),
48
+ signingKeys: privateKey,
49
+ detached: true,
50
+ })
51
+ : await openpgp.sign({
52
+ message: await openpgp.createCleartextMessage({ text: message }),
53
+ signingKeys: privateKey,
54
+ });
55
+ const sigDir = process.env["CRYPTO_DATA_DIR"];
56
+ if (sigDir) {
57
+ await (0, promises_1.writeFile)(path.join(sigDir, "signed.sig"), signed, "utf8");
58
+ }
59
+ return signed;
60
+ };
61
+ exports.sign = sign;
62
+ exports.default = exports.sign;
63
+ //# sourceMappingURL=sign.js.map
@@ -0,0 +1,5 @@
1
+ import * as openpgp from "openpgp";
2
+ import * as types from "../types/types";
3
+ export declare const verify: (data: types.dataVerify) => Promise<openpgp.VerifyMessageResult<GenericWebStream<T>>>;
4
+ export default verify;
5
+ //# sourceMappingURL=verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/lib/verify.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AAgBxC,eAAO,MAAM,MAAM,GAAU,MAAM,KAAK,CAAC,UAAU,8DAalD,CAAC;AAGF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,52 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.verify = void 0;
37
+ const openpgp = __importStar(require("openpgp"));
38
+ const verify = async (data) => {
39
+ const { message, verificationKeys, date } = data;
40
+ const keyInput = Array.isArray(verificationKeys)
41
+ ? verificationKeys[0]
42
+ : verificationKeys;
43
+ const publicKey = Buffer.from(keyInput, "base64").toString("latin1");
44
+ return openpgp.verify({
45
+ message: await openpgp.createMessage({ text: message }),
46
+ verificationKeys: await openpgp.readKey({ armoredKey: publicKey }),
47
+ date,
48
+ });
49
+ };
50
+ exports.verify = verify;
51
+ exports.default = exports.verify;
52
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1,17 @@
1
+ export interface AeadEncryptResult {
2
+ ciphertext: string;
3
+ algorithm: "xchacha20-poly1305";
4
+ }
5
+ export interface AeadEncryptOptions {
6
+ key: string | Uint8Array;
7
+ plaintext: string | Uint8Array;
8
+ aad?: Uint8Array;
9
+ }
10
+ export interface AeadDecryptOptions {
11
+ key: string | Uint8Array;
12
+ ciphertext: string;
13
+ aad?: Uint8Array;
14
+ }
15
+ export declare function aeadEncrypt(options: AeadEncryptOptions): AeadEncryptResult;
16
+ export declare function aeadDecrypt(options: AeadDecryptOptions): Uint8Array;
17
+ //# sourceMappingURL=aead.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aead.d.ts","sourceRoot":"","sources":["../../src/modern/aead.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,iBAAiB;IAEhC,UAAU,EAAE,MAAM,CAAC;IAEnB,SAAS,EAAE,oBAAoB,CAAC;CACjC;AAGD,MAAM,WAAW,kBAAkB;IAEjC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC;IAEzB,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC;IAE/B,GAAG,CAAC,EAAE,UAAU,CAAC;CAClB;AAGD,MAAM,WAAW,kBAAkB;IAEjC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC;IAEzB,UAAU,EAAE,MAAM,CAAC;IAEnB,GAAG,CAAC,EAAE,UAAU,CAAC;CAClB;AA4BD,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,iBAAiB,CAqB1E;AAOD,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,UAAU,CAgBnE"}