@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
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.aeadEncrypt = aeadEncrypt;
4
+ exports.aeadDecrypt = aeadDecrypt;
5
+ const chacha_js_1 = require("@noble/ciphers/chacha.js");
6
+ const utils_js_1 = require("@noble/ciphers/utils.js");
7
+ const HEX_RE = /^[0-9a-fA-F]*$/;
8
+ function toBytes(input, encoding = "utf8") {
9
+ if (input instanceof Uint8Array)
10
+ return input;
11
+ if (encoding === "hex") {
12
+ if (!HEX_RE.test(input)) {
13
+ throw new Error("Invalid hex string");
14
+ }
15
+ return Buffer.from(input, "hex");
16
+ }
17
+ return Buffer.from(input, "utf8");
18
+ }
19
+ const NONCE_LENGTH = 24;
20
+ function aeadEncrypt(options) {
21
+ const key = toBytes(options.key, "hex");
22
+ if (key.length !== 32) {
23
+ throw new Error(`Key must be 32 bytes (256 bits), got ${key.length}`);
24
+ }
25
+ const plaintext = toBytes(options.plaintext, "utf8");
26
+ const nonce = (0, utils_js_1.randomBytes)(NONCE_LENGTH);
27
+ const cipher = (0, chacha_js_1.xchacha20poly1305)(key, nonce, options.aad);
28
+ const sealed = cipher.encrypt(plaintext);
29
+ const combined = new Uint8Array(NONCE_LENGTH + sealed.length);
30
+ combined.set(nonce);
31
+ combined.set(sealed, NONCE_LENGTH);
32
+ return {
33
+ ciphertext: Buffer.from(combined).toString("base64"),
34
+ algorithm: "xchacha20-poly1305",
35
+ };
36
+ }
37
+ function aeadDecrypt(options) {
38
+ const key = toBytes(options.key, "hex");
39
+ if (key.length !== 32) {
40
+ throw new Error(`Key must be 32 bytes (256 bits), got ${key.length}`);
41
+ }
42
+ const combined = Buffer.from(options.ciphertext, "base64");
43
+ if (combined.length < NONCE_LENGTH + 16) {
44
+ throw new Error("Ciphertext too short — missing nonce or auth tag");
45
+ }
46
+ const nonce = combined.subarray(0, NONCE_LENGTH);
47
+ const sealed = combined.subarray(NONCE_LENGTH);
48
+ const cipher = (0, chacha_js_1.xchacha20poly1305)(key, nonce, options.aad);
49
+ return cipher.decrypt(sealed);
50
+ }
51
+ //# sourceMappingURL=aead.js.map
@@ -0,0 +1,35 @@
1
+ export interface AesGcmEncryptOptions {
2
+ key: string | Uint8Array;
3
+ plaintext: string | Uint8Array;
4
+ aad?: Uint8Array;
5
+ }
6
+ export type AesGcmAlgorithm = "aes-256-gcm" | "aes-128-gcm";
7
+ export type AesGcmSivAlgorithm = "aes-256-gcm-siv" | "aes-128-gcm-siv";
8
+ export interface AesGcmEncryptResult {
9
+ ciphertext: string;
10
+ algorithm: AesGcmAlgorithm;
11
+ }
12
+ export interface AesGcmSivEncryptOptions {
13
+ key: string | Uint8Array;
14
+ plaintext: string | Uint8Array;
15
+ aad?: Uint8Array;
16
+ }
17
+ export interface AesGcmSivEncryptResult {
18
+ ciphertext: string;
19
+ algorithm: AesGcmSivAlgorithm;
20
+ }
21
+ export interface AesGcmSivDecryptOptions {
22
+ key: string | Uint8Array;
23
+ ciphertext: string;
24
+ aad?: Uint8Array;
25
+ }
26
+ export interface AesGcmDecryptOptions {
27
+ key: string | Uint8Array;
28
+ ciphertext: string;
29
+ aad?: Uint8Array;
30
+ }
31
+ export declare function aesGcmEncrypt(options: AesGcmEncryptOptions): AesGcmEncryptResult;
32
+ export declare function aesGcmDecrypt(options: AesGcmDecryptOptions): Uint8Array;
33
+ export declare function aesGcmSivEncrypt(options: AesGcmSivEncryptOptions): AesGcmSivEncryptResult;
34
+ export declare function aesGcmSivDecrypt(options: AesGcmSivDecryptOptions): Uint8Array;
35
+ //# sourceMappingURL=aes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aes.d.ts","sourceRoot":"","sources":["../../src/modern/aes.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,oBAAoB;IAEnC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC;IAEzB,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC;IAE/B,GAAG,CAAC,EAAE,UAAU,CAAC;CAClB;AAGD,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,aAAa,CAAC;AAE5D,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG,iBAAiB,CAAC;AAGvE,MAAM,WAAW,mBAAmB;IAElC,UAAU,EAAE,MAAM,CAAC;IAEnB,SAAS,EAAE,eAAe,CAAC;CAC5B;AAGD,MAAM,WAAW,uBAAuB;IAEtC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC;IAEzB,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC;IAE/B,GAAG,CAAC,EAAE,UAAU,CAAC;CAClB;AAGD,MAAM,WAAW,sBAAsB;IAErC,UAAU,EAAE,MAAM,CAAC;IAEnB,SAAS,EAAE,kBAAkB,CAAC;CAC/B;AAGD,MAAM,WAAW,uBAAuB;IAEtC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC;IAEzB,UAAU,EAAE,MAAM,CAAC;IAEnB,GAAG,CAAC,EAAE,UAAU,CAAC;CAClB;AAGD,MAAM,WAAW,oBAAoB;IAEnC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC;IAEzB,UAAU,EAAE,MAAM,CAAC;IAEnB,GAAG,CAAC,EAAE,UAAU,CAAC;CAClB;AAoED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,oBAAoB,GAC5B,mBAAmB,CAcrB;AAOD,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,UAAU,CAKvE;AAaD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,uBAAuB,GAC/B,sBAAsB,CAcxB;AAOD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,UAAU,CAK7E"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.aesGcmEncrypt = aesGcmEncrypt;
4
+ exports.aesGcmDecrypt = aesGcmDecrypt;
5
+ exports.aesGcmSivEncrypt = aesGcmSivEncrypt;
6
+ exports.aesGcmSivDecrypt = aesGcmSivDecrypt;
7
+ const aes_js_1 = require("@noble/ciphers/aes.js");
8
+ const utils_js_1 = require("@noble/ciphers/utils.js");
9
+ const HEX_RE = /^[0-9a-fA-F]*$/;
10
+ function toBytes(input, encoding = "utf8") {
11
+ if (input instanceof Uint8Array)
12
+ return input;
13
+ if (encoding === "hex") {
14
+ if (!HEX_RE.test(input)) {
15
+ throw new Error("Invalid hex string");
16
+ }
17
+ return Buffer.from(input, "hex");
18
+ }
19
+ return Buffer.from(input, "utf8");
20
+ }
21
+ const NONCE_LENGTH = 12;
22
+ const TAG_LENGTH = 16;
23
+ function validateAesKey(rawKey) {
24
+ const key = toBytes(rawKey, "hex");
25
+ if (key.length !== 16 && key.length !== 32) {
26
+ throw new Error(`Key must be 16 bytes (128 bits) or 32 bytes (256 bits), got ${key.length}`);
27
+ }
28
+ return key;
29
+ }
30
+ function packNonceAndSealed(nonce, sealed) {
31
+ const combined = new Uint8Array(NONCE_LENGTH + sealed.length);
32
+ combined.set(nonce);
33
+ combined.set(sealed, NONCE_LENGTH);
34
+ return Buffer.from(combined).toString("base64");
35
+ }
36
+ function unpackNonceAndSealed(ciphertext) {
37
+ const combined = Buffer.from(ciphertext, "base64");
38
+ if (combined.length < NONCE_LENGTH + TAG_LENGTH) {
39
+ throw new Error("Ciphertext too short — missing nonce or auth tag");
40
+ }
41
+ return {
42
+ nonce: combined.subarray(0, NONCE_LENGTH),
43
+ sealed: combined.subarray(NONCE_LENGTH),
44
+ };
45
+ }
46
+ function aesGcmEncrypt(options) {
47
+ const key = validateAesKey(options.key);
48
+ const plaintext = toBytes(options.plaintext, "utf8");
49
+ const nonce = (0, utils_js_1.randomBytes)(NONCE_LENGTH);
50
+ const cipher = (0, aes_js_1.gcm)(key, nonce, options.aad);
51
+ const sealed = cipher.encrypt(plaintext);
52
+ const algorithm = key.length === 32 ? "aes-256-gcm" : "aes-128-gcm";
53
+ return {
54
+ ciphertext: packNonceAndSealed(nonce, sealed),
55
+ algorithm,
56
+ };
57
+ }
58
+ function aesGcmDecrypt(options) {
59
+ const key = validateAesKey(options.key);
60
+ const { nonce, sealed } = unpackNonceAndSealed(options.ciphertext);
61
+ const cipher = (0, aes_js_1.gcm)(key, nonce, options.aad);
62
+ return cipher.decrypt(sealed);
63
+ }
64
+ function aesGcmSivEncrypt(options) {
65
+ const key = validateAesKey(options.key);
66
+ const plaintext = toBytes(options.plaintext, "utf8");
67
+ const nonce = (0, utils_js_1.randomBytes)(NONCE_LENGTH);
68
+ const cipher = (0, aes_js_1.gcmsiv)(key, nonce, options.aad);
69
+ const sealed = cipher.encrypt(plaintext);
70
+ const algorithm = key.length === 32 ? "aes-256-gcm-siv" : "aes-128-gcm-siv";
71
+ return {
72
+ ciphertext: packNonceAndSealed(nonce, sealed),
73
+ algorithm,
74
+ };
75
+ }
76
+ function aesGcmSivDecrypt(options) {
77
+ const key = validateAesKey(options.key);
78
+ const { nonce, sealed } = unpackNonceAndSealed(options.ciphertext);
79
+ const cipher = (0, aes_js_1.gcmsiv)(key, nonce, options.aad);
80
+ return cipher.decrypt(sealed);
81
+ }
82
+ //# sourceMappingURL=aes.js.map
@@ -0,0 +1,11 @@
1
+ export declare const MAX_ARGON2_TIME = 10;
2
+ export declare const MAX_ARGON2_MEMORY = 262144;
3
+ export declare const MAX_ARGON2_PARALLELISM = 8;
4
+ export declare const MAX_SCRYPT_N = 131072;
5
+ export declare const MAX_SCRYPT_R = 8;
6
+ export declare const MAX_SCRYPT_P = 4;
7
+ export declare const MAX_PBKDF2_ITERATIONS = 1000000;
8
+ export declare function checkArgon2Costs(t: number, m: number, p: number): void;
9
+ export declare function checkScryptCosts(N: number, r: number, p: number): void;
10
+ export declare function checkPbkdf2Iterations(iterations: number): void;
11
+ //# sourceMappingURL=cost-limits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-limits.d.ts","sourceRoot":"","sources":["../../src/modern/cost-limits.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC,eAAO,MAAM,iBAAiB,SAAS,CAAC;AAExC,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,eAAO,MAAM,YAAY,SAAS,CAAC;AAEnC,eAAO,MAAM,YAAY,IAAI,CAAC;AAE9B,eAAO,MAAM,YAAY,IAAI,CAAC;AAE9B,eAAO,MAAM,qBAAqB,UAAY,CAAC;AAU/C,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAItE;AAGD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAOtE;AAGD,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAE9D"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MAX_PBKDF2_ITERATIONS = exports.MAX_SCRYPT_P = exports.MAX_SCRYPT_R = exports.MAX_SCRYPT_N = exports.MAX_ARGON2_PARALLELISM = exports.MAX_ARGON2_MEMORY = exports.MAX_ARGON2_TIME = void 0;
4
+ exports.checkArgon2Costs = checkArgon2Costs;
5
+ exports.checkScryptCosts = checkScryptCosts;
6
+ exports.checkPbkdf2Iterations = checkPbkdf2Iterations;
7
+ exports.MAX_ARGON2_TIME = 10;
8
+ exports.MAX_ARGON2_MEMORY = 262144;
9
+ exports.MAX_ARGON2_PARALLELISM = 8;
10
+ exports.MAX_SCRYPT_N = 131072;
11
+ exports.MAX_SCRYPT_R = 8;
12
+ exports.MAX_SCRYPT_P = 4;
13
+ exports.MAX_PBKDF2_ITERATIONS = 1_000_000;
14
+ function checkRange(name, value, min, max) {
15
+ if (!Number.isInteger(value) || value < min || value > max) {
16
+ throw new Error(`${name} must be an integer ${min}–${max}, got ${value}`);
17
+ }
18
+ }
19
+ function checkArgon2Costs(t, m, p) {
20
+ checkRange("Argon2 time cost", t, 1, exports.MAX_ARGON2_TIME);
21
+ checkRange("Argon2 parallelism", p, 1, exports.MAX_ARGON2_PARALLELISM);
22
+ checkRange("Argon2 memory cost (KiB)", m, 8 * p, exports.MAX_ARGON2_MEMORY);
23
+ }
24
+ function checkScryptCosts(N, r, p) {
25
+ checkRange("scrypt N", N, 2, exports.MAX_SCRYPT_N);
26
+ if ((N & (N - 1)) !== 0) {
27
+ throw new Error(`scrypt N must be a power of two, got ${N}`);
28
+ }
29
+ checkRange("scrypt r", r, 1, exports.MAX_SCRYPT_R);
30
+ checkRange("scrypt p", p, 1, exports.MAX_SCRYPT_P);
31
+ }
32
+ function checkPbkdf2Iterations(iterations) {
33
+ checkRange("PBKDF2 iterations", iterations, 1, exports.MAX_PBKDF2_ITERATIONS);
34
+ }
35
+ //# sourceMappingURL=cost-limits.js.map
@@ -0,0 +1,86 @@
1
+ export interface P256KeyPair {
2
+ privateKey: string;
3
+ publicKey: string;
4
+ algorithm: "ecdsa-p256";
5
+ }
6
+ export interface P256SignResult {
7
+ signature: string;
8
+ algorithm: "ecdsa-p256";
9
+ }
10
+ export interface P256VerifyResult {
11
+ valid: boolean;
12
+ algorithm: "ecdsa-p256";
13
+ }
14
+ export interface P384KeyPair {
15
+ privateKey: string;
16
+ publicKey: string;
17
+ algorithm: "ecdsa-p384";
18
+ }
19
+ export interface P384SignResult {
20
+ signature: string;
21
+ algorithm: "ecdsa-p384";
22
+ }
23
+ export interface P384VerifyResult {
24
+ valid: boolean;
25
+ algorithm: "ecdsa-p384";
26
+ }
27
+ export interface Ed448KeyPair {
28
+ privateKey: string;
29
+ publicKey: string;
30
+ algorithm: "ed448";
31
+ }
32
+ export interface Ed448SignResult {
33
+ signature: string;
34
+ algorithm: "ed448";
35
+ }
36
+ export interface Ed448VerifyResult {
37
+ valid: boolean;
38
+ algorithm: "ed448";
39
+ }
40
+ export interface X448KeyPair {
41
+ privateKey: string;
42
+ publicKey: string;
43
+ algorithm: "x448";
44
+ }
45
+ export interface X448ExchangeResult {
46
+ sharedSecret: string;
47
+ algorithm: "x448";
48
+ }
49
+ export interface EcdhP256Result {
50
+ sharedSecret: string;
51
+ algorithm: "ecdh-p256";
52
+ }
53
+ export interface EcdhP384Result {
54
+ sharedSecret: string;
55
+ algorithm: "ecdh-p384";
56
+ }
57
+ export interface SchnorrKeyPair {
58
+ privateKey: string;
59
+ publicKey: string;
60
+ algorithm: "schnorr";
61
+ }
62
+ export interface SchnorrSignResult {
63
+ signature: string;
64
+ algorithm: "schnorr";
65
+ }
66
+ export interface SchnorrVerifyResult {
67
+ valid: boolean;
68
+ algorithm: "schnorr";
69
+ }
70
+ export declare function generateP256KeyPair(): P256KeyPair;
71
+ export declare function p256Sign(privateKeyHex: string, message: string | Uint8Array): P256SignResult;
72
+ export declare function p256Verify(publicKeyHex: string, message: string | Uint8Array, signatureHex: string): P256VerifyResult;
73
+ export declare function generateP384KeyPair(): P384KeyPair;
74
+ export declare function p384Sign(privateKeyHex: string, message: string | Uint8Array): P384SignResult;
75
+ export declare function p384Verify(publicKeyHex: string, message: string | Uint8Array, signatureHex: string): P384VerifyResult;
76
+ export declare function generateEd448KeyPair(): Ed448KeyPair;
77
+ export declare function ed448Sign(privateKeyHex: string, message: string | Uint8Array): Ed448SignResult;
78
+ export declare function ed448Verify(publicKeyHex: string, message: string | Uint8Array, signatureHex: string): Ed448VerifyResult;
79
+ export declare function generateX448KeyPair(): X448KeyPair;
80
+ export declare function x448Exchange(privateKeyHex: string, theirPublicKeyHex: string): X448ExchangeResult;
81
+ export declare function ecdhP256(privateKeyHex: string, theirPublicKeyHex: string): EcdhP256Result;
82
+ export declare function ecdhP384(privateKeyHex: string, theirPublicKeyHex: string): EcdhP384Result;
83
+ export declare function generateSchnorrKeyPair(): SchnorrKeyPair;
84
+ export declare function schnorrSign(privateKeyHex: string, message: string | Uint8Array): SchnorrSignResult;
85
+ export declare function schnorrVerify(publicKeyHex: string, message: string | Uint8Array, signatureHex: string): SchnorrVerifyResult;
86
+ //# sourceMappingURL=curves.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"curves.d.ts","sourceRoot":"","sources":["../../src/modern/curves.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateP256KeyPair = generateP256KeyPair;
4
+ exports.p256Sign = p256Sign;
5
+ exports.p256Verify = p256Verify;
6
+ exports.generateP384KeyPair = generateP384KeyPair;
7
+ exports.p384Sign = p384Sign;
8
+ exports.p384Verify = p384Verify;
9
+ exports.generateEd448KeyPair = generateEd448KeyPair;
10
+ exports.ed448Sign = ed448Sign;
11
+ exports.ed448Verify = ed448Verify;
12
+ exports.generateX448KeyPair = generateX448KeyPair;
13
+ exports.x448Exchange = x448Exchange;
14
+ exports.ecdhP256 = ecdhP256;
15
+ exports.ecdhP384 = ecdhP384;
16
+ exports.generateSchnorrKeyPair = generateSchnorrKeyPair;
17
+ exports.schnorrSign = schnorrSign;
18
+ exports.schnorrVerify = schnorrVerify;
19
+ const nist_js_1 = require("@noble/curves/nist.js");
20
+ const ed448_js_1 = require("@noble/curves/ed448.js");
21
+ const secp256k1_js_1 = require("@noble/curves/secp256k1.js");
22
+ const utils_js_1 = require("@noble/ciphers/utils.js");
23
+ const HEX_RE = /^[0-9a-fA-F]*$/;
24
+ function assertHex(input, label) {
25
+ if (!HEX_RE.test(input)) {
26
+ throw new Error(`Invalid hex string for ${label}`);
27
+ }
28
+ return Buffer.from(input, "hex");
29
+ }
30
+ function toBytes(input) {
31
+ if (input instanceof Uint8Array)
32
+ return input;
33
+ return Buffer.from(input, "utf8");
34
+ }
35
+ function generateP256KeyPair() {
36
+ const privateKey = nist_js_1.p256.utils.randomSecretKey();
37
+ const publicKey = nist_js_1.p256.getPublicKey(privateKey, false);
38
+ return {
39
+ privateKey: Buffer.from(privateKey).toString("hex"),
40
+ publicKey: Buffer.from(publicKey).toString("hex"),
41
+ algorithm: "ecdsa-p256",
42
+ };
43
+ }
44
+ function p256Sign(privateKeyHex, message) {
45
+ const key = assertHex(privateKeyHex, "privateKey");
46
+ const msg = toBytes(message);
47
+ const signature = nist_js_1.p256.sign(msg, key);
48
+ return {
49
+ signature: Buffer.from(signature).toString("hex"),
50
+ algorithm: "ecdsa-p256",
51
+ };
52
+ }
53
+ function p256Verify(publicKeyHex, message, signatureHex) {
54
+ const key = assertHex(publicKeyHex, "publicKey");
55
+ const msg = toBytes(message);
56
+ const sig = assertHex(signatureHex, "signature");
57
+ const valid = nist_js_1.p256.verify(sig, msg, key);
58
+ return { valid, algorithm: "ecdsa-p256" };
59
+ }
60
+ function generateP384KeyPair() {
61
+ const privateKey = nist_js_1.p384.utils.randomSecretKey();
62
+ const publicKey = nist_js_1.p384.getPublicKey(privateKey, false);
63
+ return {
64
+ privateKey: Buffer.from(privateKey).toString("hex"),
65
+ publicKey: Buffer.from(publicKey).toString("hex"),
66
+ algorithm: "ecdsa-p384",
67
+ };
68
+ }
69
+ function p384Sign(privateKeyHex, message) {
70
+ const key = assertHex(privateKeyHex, "privateKey");
71
+ const msg = toBytes(message);
72
+ const signature = nist_js_1.p384.sign(msg, key);
73
+ return {
74
+ signature: Buffer.from(signature).toString("hex"),
75
+ algorithm: "ecdsa-p384",
76
+ };
77
+ }
78
+ function p384Verify(publicKeyHex, message, signatureHex) {
79
+ const key = assertHex(publicKeyHex, "publicKey");
80
+ const msg = toBytes(message);
81
+ const sig = assertHex(signatureHex, "signature");
82
+ const valid = nist_js_1.p384.verify(sig, msg, key);
83
+ return { valid, algorithm: "ecdsa-p384" };
84
+ }
85
+ function generateEd448KeyPair() {
86
+ const privateKey = (0, utils_js_1.randomBytes)(57);
87
+ const publicKey = ed448_js_1.ed448.getPublicKey(privateKey);
88
+ return {
89
+ privateKey: Buffer.from(privateKey).toString("hex"),
90
+ publicKey: Buffer.from(publicKey).toString("hex"),
91
+ algorithm: "ed448",
92
+ };
93
+ }
94
+ function ed448Sign(privateKeyHex, message) {
95
+ const key = assertHex(privateKeyHex, "privateKey");
96
+ const msg = toBytes(message);
97
+ const signature = ed448_js_1.ed448.sign(msg, key);
98
+ return {
99
+ signature: Buffer.from(signature).toString("hex"),
100
+ algorithm: "ed448",
101
+ };
102
+ }
103
+ function ed448Verify(publicKeyHex, message, signatureHex) {
104
+ const key = assertHex(publicKeyHex, "publicKey");
105
+ const msg = toBytes(message);
106
+ const sig = assertHex(signatureHex, "signature");
107
+ const valid = ed448_js_1.ed448.verify(sig, msg, key);
108
+ return { valid, algorithm: "ed448" };
109
+ }
110
+ function generateX448KeyPair() {
111
+ const privateKey = ed448_js_1.x448.utils.randomSecretKey();
112
+ const publicKey = ed448_js_1.x448.getPublicKey(privateKey);
113
+ return {
114
+ privateKey: Buffer.from(privateKey).toString("hex"),
115
+ publicKey: Buffer.from(publicKey).toString("hex"),
116
+ algorithm: "x448",
117
+ };
118
+ }
119
+ function x448Exchange(privateKeyHex, theirPublicKeyHex) {
120
+ const priv = assertHex(privateKeyHex, "privateKey");
121
+ const pub = assertHex(theirPublicKeyHex, "theirPublicKey");
122
+ const shared = ed448_js_1.x448.getSharedSecret(priv, pub);
123
+ return {
124
+ sharedSecret: Buffer.from(shared).toString("hex"),
125
+ algorithm: "x448",
126
+ };
127
+ }
128
+ function ecdhP256(privateKeyHex, theirPublicKeyHex) {
129
+ const priv = assertHex(privateKeyHex, "privateKey");
130
+ const pub = assertHex(theirPublicKeyHex, "theirPublicKey");
131
+ const shared = nist_js_1.p256.getSharedSecret(priv, pub);
132
+ return {
133
+ sharedSecret: Buffer.from(shared).toString("hex"),
134
+ algorithm: "ecdh-p256",
135
+ };
136
+ }
137
+ function ecdhP384(privateKeyHex, theirPublicKeyHex) {
138
+ const priv = assertHex(privateKeyHex, "privateKey");
139
+ const pub = assertHex(theirPublicKeyHex, "theirPublicKey");
140
+ const shared = nist_js_1.p384.getSharedSecret(priv, pub);
141
+ return {
142
+ sharedSecret: Buffer.from(shared).toString("hex"),
143
+ algorithm: "ecdh-p384",
144
+ };
145
+ }
146
+ function generateSchnorrKeyPair() {
147
+ const privateKey = (0, utils_js_1.randomBytes)(32);
148
+ const publicKey = secp256k1_js_1.schnorr.getPublicKey(privateKey);
149
+ return {
150
+ privateKey: Buffer.from(privateKey).toString("hex"),
151
+ publicKey: Buffer.from(publicKey).toString("hex"),
152
+ algorithm: "schnorr",
153
+ };
154
+ }
155
+ function schnorrSign(privateKeyHex, message) {
156
+ const key = assertHex(privateKeyHex, "privateKey");
157
+ const msg = toBytes(message);
158
+ const signature = secp256k1_js_1.schnorr.sign(msg, key);
159
+ return {
160
+ signature: Buffer.from(signature).toString("hex"),
161
+ algorithm: "schnorr",
162
+ };
163
+ }
164
+ function schnorrVerify(publicKeyHex, message, signatureHex) {
165
+ const key = assertHex(publicKeyHex, "publicKey");
166
+ const msg = toBytes(message);
167
+ const sig = assertHex(signatureHex, "signature");
168
+ const valid = secp256k1_js_1.schnorr.verify(sig, msg, key);
169
+ return { valid, algorithm: "schnorr" };
170
+ }
171
+ //# sourceMappingURL=curves.js.map
@@ -0,0 +1,11 @@
1
+ export interface X25519KeyPair {
2
+ privateKey: string;
3
+ publicKey: string;
4
+ }
5
+ export interface KeyExchangeResult {
6
+ sharedSecret: string;
7
+ algorithm: "x25519";
8
+ }
9
+ export declare function generateX25519KeyPair(): X25519KeyPair;
10
+ export declare function x25519Exchange(privateKey: string | Uint8Array, theirPublicKey: string | Uint8Array): KeyExchangeResult;
11
+ //# sourceMappingURL=ecdh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecdh.d.ts","sourceRoot":"","sources":["../../src/modern/ecdh.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,aAAa;IAE5B,UAAU,EAAE,MAAM,CAAC;IAEnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,iBAAiB;IAEhC,YAAY,EAAE,MAAM,CAAC;IAErB,SAAS,EAAE,QAAQ,CAAC;CACrB;AAKD,wBAAgB,qBAAqB,IAAI,aAAa,CAQrD;AASD,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,GAAG,UAAU,EAC/B,cAAc,EAAE,MAAM,GAAG,UAAU,GAClC,iBAAiB,CAgBnB"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateX25519KeyPair = generateX25519KeyPair;
4
+ exports.x25519Exchange = x25519Exchange;
5
+ const ed25519_js_1 = require("@noble/curves/ed25519.js");
6
+ const utils_js_1 = require("@noble/ciphers/utils.js");
7
+ function generateX25519KeyPair() {
8
+ const privateKey = (0, utils_js_1.randomBytes)(32);
9
+ const publicKey = ed25519_js_1.x25519.getPublicKey(privateKey);
10
+ return {
11
+ privateKey: Buffer.from(privateKey).toString("hex"),
12
+ publicKey: Buffer.from(publicKey).toString("hex"),
13
+ };
14
+ }
15
+ function x25519Exchange(privateKey, theirPublicKey) {
16
+ const priv = typeof privateKey === "string"
17
+ ? Buffer.from(privateKey, "hex")
18
+ : privateKey;
19
+ const pub = typeof theirPublicKey === "string"
20
+ ? Buffer.from(theirPublicKey, "hex")
21
+ : theirPublicKey;
22
+ const shared = ed25519_js_1.x25519.getSharedSecret(priv, pub);
23
+ return {
24
+ sharedSecret: Buffer.from(shared).toString("hex"),
25
+ algorithm: "x25519",
26
+ };
27
+ }
28
+ //# sourceMappingURL=ecdh.js.map
@@ -0,0 +1,19 @@
1
+ export type FnDsaLevel = 512 | 1024;
2
+ export type FnDsaAlgorithm = "fn-dsa-512" | "fn-dsa-1024";
3
+ export interface FnDsaKeyPairResult {
4
+ publicKey: string;
5
+ secretKey: string;
6
+ algorithm: FnDsaAlgorithm;
7
+ }
8
+ export interface FnDsaSignResult {
9
+ signature: string;
10
+ algorithm: FnDsaAlgorithm;
11
+ }
12
+ export interface FnDsaVerifyResult {
13
+ valid: boolean;
14
+ algorithm: FnDsaAlgorithm;
15
+ }
16
+ export declare function fnDsaKeygen(level: FnDsaLevel): FnDsaKeyPairResult;
17
+ export declare function fnDsaSign(level: FnDsaLevel, secretKeyHex: string, messageHex: string): FnDsaSignResult;
18
+ export declare function fnDsaVerify(level: FnDsaLevel, publicKeyHex: string, messageHex: string, signatureHex: string): FnDsaVerifyResult;
19
+ //# sourceMappingURL=fn-dsa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fn-dsa.d.ts","sourceRoot":"","sources":["../../src/modern/fn-dsa.ts"],"names":[],"mappings":"AAyBA,MAAM,MAAM,UAAU,GAAG,GAAG,GAAG,IAAI,CAAC;AAUpC,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,aAAa,CAAC;AAW1D,MAAM,WAAW,kBAAkB;IAEjC,SAAS,EAAE,MAAM,CAAC;IAElB,SAAS,EAAE,MAAM,CAAC;IAElB,SAAS,EAAE,cAAc,CAAC;CAC3B;AAWD,MAAM,WAAW,eAAe;IAE9B,SAAS,EAAE,MAAM,CAAC;IAElB,SAAS,EAAE,cAAc,CAAC;CAC3B;AAWD,MAAM,WAAW,iBAAiB;IAEhC,KAAK,EAAE,OAAO,CAAC;IAEf,SAAS,EAAE,cAAc,CAAC;CAC3B;AAkDD,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,kBAAkB,CAQjE;AAkBD,wBAAgB,SAAS,CACvB,KAAK,EAAE,UAAU,EACjB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GACjB,eAAe,CASjB;AAoBD,wBAAgB,WAAW,CACzB,KAAK,EAAE,UAAU,EACjB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB,iBAAiB,CAUnB"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fnDsaKeygen = fnDsaKeygen;
4
+ exports.fnDsaSign = fnDsaSign;
5
+ exports.fnDsaVerify = fnDsaVerify;
6
+ const falcon_js_1 = require("@noble/post-quantum/falcon.js");
7
+ const HEX_RE = /^[0-9a-fA-F]*$/;
8
+ function assertHex(input, label) {
9
+ if (!HEX_RE.test(input)) {
10
+ throw new Error(`Invalid hex string for ${label}`);
11
+ }
12
+ return Buffer.from(input, "hex");
13
+ }
14
+ function getFalcon(level) {
15
+ switch (level) {
16
+ case 512:
17
+ return falcon_js_1.falcon512;
18
+ case 1024:
19
+ return falcon_js_1.falcon1024;
20
+ default:
21
+ throw new Error(`Unsupported FN-DSA level: ${level}. Supported: 512, 1024`);
22
+ }
23
+ }
24
+ function algorithmName(level) {
25
+ return `fn-dsa-${level}`;
26
+ }
27
+ function fnDsaKeygen(level) {
28
+ const falcon = getFalcon(level);
29
+ const { publicKey, secretKey } = falcon.keygen();
30
+ return {
31
+ publicKey: Buffer.from(publicKey).toString("hex"),
32
+ secretKey: Buffer.from(secretKey).toString("hex"),
33
+ algorithm: algorithmName(level),
34
+ };
35
+ }
36
+ function fnDsaSign(level, secretKeyHex, messageHex) {
37
+ const falcon = getFalcon(level);
38
+ const secretKey = assertHex(secretKeyHex, "secretKey");
39
+ const msg = assertHex(messageHex, "message");
40
+ const signature = falcon.sign(msg, secretKey);
41
+ return {
42
+ signature: Buffer.from(signature).toString("hex"),
43
+ algorithm: algorithmName(level),
44
+ };
45
+ }
46
+ function fnDsaVerify(level, publicKeyHex, messageHex, signatureHex) {
47
+ const falcon = getFalcon(level);
48
+ const publicKey = assertHex(publicKeyHex, "publicKey");
49
+ const msg = assertHex(messageHex, "message");
50
+ const signature = assertHex(signatureHex, "signature");
51
+ const valid = falcon.verify(signature, msg, publicKey);
52
+ return {
53
+ valid,
54
+ algorithm: algorithmName(level),
55
+ };
56
+ }
57
+ //# sourceMappingURL=fn-dsa.js.map
@@ -0,0 +1,13 @@
1
+ export declare const HASH_ALGORITHMS: readonly ["sha256", "sha384", "sha512", "sha3-256", "sha3-512", "blake2b", "blake3"];
2
+ export type HashAlgorithm = (typeof HASH_ALGORITHMS)[number];
3
+ export interface HashOptions {
4
+ algorithm: HashAlgorithm;
5
+ data: string | Uint8Array;
6
+ }
7
+ export interface HashResult {
8
+ digest: string;
9
+ algorithm: HashAlgorithm;
10
+ length: number;
11
+ }
12
+ export declare function hash(options: HashOptions): HashResult;
13
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/modern/hash.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,eAAe,sFAQlB,CAAC;AAGX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAG7D,MAAM,WAAW,WAAW;IAE1B,SAAS,EAAE,aAAa,CAAC;IAEzB,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;CAC3B;AAGD,MAAM,WAAW,UAAU;IAEzB,MAAM,EAAE,MAAM,CAAC;IAEf,SAAS,EAAE,aAAa,CAAC;IAEzB,MAAM,EAAE,MAAM,CAAC;CAChB;AAuBD,wBAAgB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,CAiBrD"}