@unknownncat/curve25519-node 1.0.1 → 2.1.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 (65) hide show
  1. package/NOTICE.md +89 -0
  2. package/README.en.md +422 -0
  3. package/README.md +309 -112
  4. package/SECURITY.md +23 -0
  5. package/THIRD_PARTY_NOTICE.md +3 -0
  6. package/THIRD_PARTY_NOTICES.md +5 -0
  7. package/dist/axlsign.d.ts +31 -0
  8. package/dist/axlsign.d.ts.map +1 -0
  9. package/dist/axlsign.js +118 -0
  10. package/dist/axlsign.js.map +1 -0
  11. package/dist/cjs/axlsign.js +127 -0
  12. package/dist/cjs/axlsign.js.map +1 -0
  13. package/dist/cjs/ed25519.js +46 -10
  14. package/dist/cjs/ed25519.js.map +1 -1
  15. package/dist/cjs/index.js +41 -1
  16. package/dist/cjs/index.js.map +1 -1
  17. package/dist/cjs/internal/assert.js.map +1 -1
  18. package/dist/cjs/internal/axlsign-wasm/LICENSE +21 -0
  19. package/dist/cjs/internal/axlsign-wasm/axlsign_wasm.d.ts +12 -0
  20. package/dist/cjs/internal/axlsign-wasm/axlsign_wasm.js +171 -0
  21. package/dist/cjs/internal/axlsign-wasm/axlsign_wasm_bg.wasm +0 -0
  22. package/dist/cjs/internal/axlsign-wasm/axlsign_wasm_bg.wasm.d.ts +13 -0
  23. package/dist/cjs/internal/axlsign-wasm/package.json +17 -0
  24. package/dist/cjs/internal/curve25519-wasm/LICENSE +21 -0
  25. package/dist/cjs/internal/curve25519-wasm/curve25519_wasm.d.ts +12 -0
  26. package/dist/cjs/internal/curve25519-wasm/curve25519_wasm.js +165 -0
  27. package/dist/cjs/internal/curve25519-wasm/curve25519_wasm_bg.wasm +0 -0
  28. package/dist/cjs/internal/curve25519-wasm/curve25519_wasm_bg.wasm.d.ts +13 -0
  29. package/dist/cjs/internal/curve25519-wasm/package.json +17 -0
  30. package/dist/cjs/wasm.js +228 -0
  31. package/dist/cjs/wasm.js.map +1 -0
  32. package/dist/cjs/x25519.js +73 -12
  33. package/dist/cjs/x25519.js.map +1 -1
  34. package/dist/ed25519.d.ts +21 -0
  35. package/dist/ed25519.d.ts.map +1 -1
  36. package/dist/ed25519.js +44 -13
  37. package/dist/ed25519.js.map +1 -1
  38. package/dist/index.d.ts +109 -0
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +40 -0
  41. package/dist/index.js.map +1 -1
  42. package/dist/internal/assert.js.map +1 -1
  43. package/dist/internal/axlsign-wasm/LICENSE +21 -0
  44. package/dist/internal/axlsign-wasm/axlsign_wasm.d.ts +12 -0
  45. package/dist/internal/axlsign-wasm/axlsign_wasm.js +171 -0
  46. package/dist/internal/axlsign-wasm/axlsign_wasm_bg.wasm +0 -0
  47. package/dist/internal/axlsign-wasm/axlsign_wasm_bg.wasm.d.ts +13 -0
  48. package/dist/internal/axlsign-wasm/package.json +17 -0
  49. package/dist/internal/curve25519-wasm/LICENSE +21 -0
  50. package/dist/internal/curve25519-wasm/curve25519_wasm.d.ts +12 -0
  51. package/dist/internal/curve25519-wasm/curve25519_wasm.js +165 -0
  52. package/dist/internal/curve25519-wasm/curve25519_wasm_bg.wasm +0 -0
  53. package/dist/internal/curve25519-wasm/curve25519_wasm_bg.wasm.d.ts +13 -0
  54. package/dist/internal/curve25519-wasm/package.json +17 -0
  55. package/dist/types.d.ts +2 -5
  56. package/dist/types.d.ts.map +1 -1
  57. package/dist/wasm.d.ts +92 -0
  58. package/dist/wasm.d.ts.map +1 -0
  59. package/dist/wasm.js +204 -0
  60. package/dist/wasm.js.map +1 -0
  61. package/dist/x25519.d.ts +29 -0
  62. package/dist/x25519.d.ts.map +1 -1
  63. package/dist/x25519.js +66 -12
  64. package/dist/x25519.js.map +1 -1
  65. package/package.json +38 -5
package/dist/wasm.js ADDED
@@ -0,0 +1,204 @@
1
+ import { dirname, join } from "node:path";
2
+ import { createRequire } from "node:module";
3
+ import { asBytes32, asBytes64, assertBytes32, assertBytes64, assertUint8Array, } from "./internal/assert.js";
4
+ const SELF_PACKAGE_NAME = "@unknownncat/curve25519-node";
5
+ const requireBase = typeof __filename === "string"
6
+ ? __filename
7
+ : typeof process.argv[1] === "string"
8
+ ? process.argv[1]
9
+ : join(process.cwd(), "index.js");
10
+ const nodeRequire = createRequire(requireBase);
11
+ let wasmModulePath;
12
+ let wasmBindings;
13
+ function getWasmBindings() {
14
+ if (wasmBindings !== undefined) {
15
+ return wasmBindings;
16
+ }
17
+ if (wasmModulePath === undefined) {
18
+ const packageJsonPath = nodeRequire.resolve(`${SELF_PACKAGE_NAME}/package.json`);
19
+ wasmModulePath = join(dirname(packageJsonPath), "dist", "internal", "curve25519-wasm", "curve25519_wasm.js");
20
+ }
21
+ // Lazy-load WASM bindings so node:crypto users avoid startup overhead.
22
+ wasmBindings = nodeRequire(wasmModulePath);
23
+ return wasmBindings;
24
+ }
25
+ function copyBytes32(bytes32, label) {
26
+ const out = new Uint8Array(32);
27
+ out.set(bytes32);
28
+ return asBytes32(out, label);
29
+ }
30
+ function clampScalar(seed32) {
31
+ const out = new Uint8Array(32);
32
+ out.set(seed32);
33
+ out[0] = (out[0] ?? 0) & 248;
34
+ const last = out[31] ?? 0;
35
+ out[31] = (last & 127) | 64;
36
+ return asBytes32(out, "clamped scalar");
37
+ }
38
+ function isRecord(value) {
39
+ return typeof value === "object" && value !== null;
40
+ }
41
+ function assertWasmKeyObject(value, expectedType, label) {
42
+ if (!isRecord(value) || value.type !== expectedType || !(value.bytes instanceof Uint8Array)) {
43
+ throw new TypeError(`${label} must be a ${expectedType} key object`);
44
+ }
45
+ assertBytes32(value.bytes, `${label}.bytes`);
46
+ }
47
+ export function isAllZero32(bytes32) {
48
+ assertBytes32(bytes32, "bytes32");
49
+ let acc = 0;
50
+ for (let i = 0; i < 32; i += 1) {
51
+ acc |= bytes32[i] ?? 0;
52
+ }
53
+ return acc === 0;
54
+ }
55
+ export function x25519CreatePrivateKeyObject(secretKey32) {
56
+ assertBytes32(secretKey32, "secretKey32");
57
+ return Object.freeze({
58
+ type: "x25519-private",
59
+ bytes: copyBytes32(secretKey32, "x25519 private key object bytes"),
60
+ });
61
+ }
62
+ export function x25519CreatePublicKeyObject(publicKey32) {
63
+ assertBytes32(publicKey32, "publicKey32");
64
+ return Object.freeze({
65
+ type: "x25519-public",
66
+ bytes: copyBytes32(publicKey32, "x25519 public key object bytes"),
67
+ });
68
+ }
69
+ export function x25519PublicKeyFromPrivateKeyObject(privateKey) {
70
+ assertWasmKeyObject(privateKey, "x25519-private", "privateKey");
71
+ return asBytes32(getWasmBindings().x25519PublicKey(privateKey.bytes), "x25519 public key");
72
+ }
73
+ export function x25519PublicKey(secretKey32) {
74
+ return x25519PublicKeyFromPrivateKeyObject(x25519CreatePrivateKeyObject(secretKey32));
75
+ }
76
+ export function x25519SharedKeyFromKeyObjects(privateKey, publicKey) {
77
+ assertWasmKeyObject(privateKey, "x25519-private", "privateKey");
78
+ assertWasmKeyObject(publicKey, "x25519-public", "publicKey");
79
+ return asBytes32(getWasmBindings().x25519SharedKey(privateKey.bytes, publicKey.bytes), "x25519 shared key");
80
+ }
81
+ export function x25519SharedKey(secretKey32, publicKey32) {
82
+ const privateKey = x25519CreatePrivateKeyObject(secretKey32);
83
+ const publicKey = x25519CreatePublicKeyObject(publicKey32);
84
+ return x25519SharedKeyFromKeyObjects(privateKey, publicKey);
85
+ }
86
+ export function x25519SharedKeyStrictFromKeyObjects(privateKey, publicKey) {
87
+ const shared = x25519SharedKeyFromKeyObjects(privateKey, publicKey);
88
+ if (isAllZero32(shared)) {
89
+ throw new Error("X25519 shared secret is all-zero; reject low-order/invalid peer public key in protocol flow.");
90
+ }
91
+ return shared;
92
+ }
93
+ export function x25519SharedKeyStrict(secretKey32, publicKey32) {
94
+ const privateKey = x25519CreatePrivateKeyObject(secretKey32);
95
+ const publicKey = x25519CreatePublicKeyObject(publicKey32);
96
+ return x25519SharedKeyStrictFromKeyObjects(privateKey, publicKey);
97
+ }
98
+ export function x25519GenerateKeyPair(seed32) {
99
+ assertBytes32(seed32, "seed32");
100
+ const privateKey = clampScalar(seed32);
101
+ const publicKey32 = x25519PublicKey(privateKey);
102
+ return {
103
+ public: publicKey32,
104
+ private: privateKey,
105
+ };
106
+ }
107
+ export function ed25519CreatePrivateKeyObject(secretSeed32) {
108
+ assertBytes32(secretSeed32, "secretSeed32");
109
+ return Object.freeze({
110
+ type: "ed25519-private",
111
+ bytes: copyBytes32(secretSeed32, "ed25519 private key object bytes"),
112
+ });
113
+ }
114
+ export function ed25519CreatePublicKeyObject(publicKey32) {
115
+ assertBytes32(publicKey32, "publicKey32");
116
+ return Object.freeze({
117
+ type: "ed25519-public",
118
+ bytes: copyBytes32(publicKey32, "ed25519 public key object bytes"),
119
+ });
120
+ }
121
+ export function ed25519PublicKeyFromPrivateKeyObject(privateKey) {
122
+ assertWasmKeyObject(privateKey, "ed25519-private", "privateKey");
123
+ return asBytes32(getWasmBindings().ed25519PublicKey(privateKey.bytes), "ed25519 public key");
124
+ }
125
+ export function ed25519PublicKey(secretSeed32) {
126
+ return ed25519PublicKeyFromPrivateKeyObject(ed25519CreatePrivateKeyObject(secretSeed32));
127
+ }
128
+ export function ed25519GenerateKeyPair(seed32) {
129
+ assertBytes32(seed32, "seed32");
130
+ return {
131
+ public: ed25519PublicKey(seed32),
132
+ private: seed32,
133
+ };
134
+ }
135
+ export function ed25519SignWithPrivateKey(privateKey, msg) {
136
+ assertWasmKeyObject(privateKey, "ed25519-private", "privateKey");
137
+ assertUint8Array(msg, "msg");
138
+ return asBytes64(getWasmBindings().ed25519Sign(privateKey.bytes, msg), "ed25519 signature");
139
+ }
140
+ export function ed25519Sign(secretSeed32, msg) {
141
+ return ed25519SignWithPrivateKey(ed25519CreatePrivateKeyObject(secretSeed32), msg);
142
+ }
143
+ export function ed25519VerifyWithPublicKey(publicKey, msg, signature64) {
144
+ assertWasmKeyObject(publicKey, "ed25519-public", "publicKey");
145
+ assertUint8Array(msg, "msg");
146
+ assertBytes64(signature64, "signature64");
147
+ return getWasmBindings().ed25519Verify(publicKey.bytes, msg, signature64);
148
+ }
149
+ export function ed25519Verify(publicKey32, msg, signature64) {
150
+ return ed25519VerifyWithPublicKey(ed25519CreatePublicKeyObject(publicKey32), msg, signature64);
151
+ }
152
+ export function ed25519SignMessage(secretSeed32, msg) {
153
+ assertBytes32(secretSeed32, "secretSeed32");
154
+ assertUint8Array(msg, "msg");
155
+ const signature64 = ed25519Sign(secretSeed32, msg);
156
+ const signed = new Uint8Array(64 + msg.byteLength);
157
+ signed.set(signature64, 0);
158
+ signed.set(msg, 64);
159
+ return signed;
160
+ }
161
+ export function ed25519OpenMessage(publicKey32, signedMsg) {
162
+ assertBytes32(publicKey32, "publicKey32");
163
+ assertUint8Array(signedMsg, "signedMsg");
164
+ if (signedMsg.byteLength < 64) {
165
+ return null;
166
+ }
167
+ const signature64 = asBytes64(signedMsg.subarray(0, 64), "signedMsg signature");
168
+ const msg = signedMsg.subarray(64);
169
+ if (!ed25519Verify(publicKey32, msg, signature64)) {
170
+ return null;
171
+ }
172
+ return new Uint8Array(msg);
173
+ }
174
+ export const x25519 = {
175
+ createPrivateKeyObject: x25519CreatePrivateKeyObject,
176
+ createPublicKeyObject: x25519CreatePublicKeyObject,
177
+ publicKeyFromPrivateKeyObject: x25519PublicKeyFromPrivateKeyObject,
178
+ publicKey: x25519PublicKey,
179
+ sharedKey: x25519SharedKey,
180
+ sharedKeyFromKeyObjects: x25519SharedKeyFromKeyObjects,
181
+ sharedKeyStrict: x25519SharedKeyStrict,
182
+ sharedKeyStrictFromKeyObjects: x25519SharedKeyStrictFromKeyObjects,
183
+ isAllZero32,
184
+ generateKeyPair: x25519GenerateKeyPair,
185
+ };
186
+ export const ed25519 = {
187
+ createPrivateKeyObject: ed25519CreatePrivateKeyObject,
188
+ createPublicKeyObject: ed25519CreatePublicKeyObject,
189
+ publicKeyFromPrivateKeyObject: ed25519PublicKeyFromPrivateKeyObject,
190
+ publicKey: ed25519PublicKey,
191
+ generateKeyPair: ed25519GenerateKeyPair,
192
+ sign: ed25519Sign,
193
+ signWithPrivateKey: ed25519SignWithPrivateKey,
194
+ verify: ed25519Verify,
195
+ verifyWithPublicKey: ed25519VerifyWithPublicKey,
196
+ signMessage: ed25519SignMessage,
197
+ openMessage: ed25519OpenMessage,
198
+ };
199
+ const api = {
200
+ x25519,
201
+ ed25519,
202
+ };
203
+ export default api;
204
+ //# sourceMappingURL=wasm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm.js","sourceRoot":"","sources":["../src/wasm.ts"],"names":[],"mappings":"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"}
package/dist/x25519.d.ts CHANGED
@@ -1,12 +1,41 @@
1
+ import { type KeyObject } from "node:crypto";
1
2
  import type { Bytes32, KeyPair32 } from "./types.js";
3
+ /**
4
+ * Constant-time style 32-byte zero check for shared-secret hardening.
5
+ */
6
+ export declare function isAllZero32(bytes32: Bytes32): boolean;
7
+ /**
8
+ * Builds a reusable X25519 private KeyObject from a raw 32-byte secret scalar.
9
+ */
10
+ export declare function createPrivateKeyObject(secretKey32: Bytes32): KeyObject;
11
+ /**
12
+ * Builds a reusable X25519 public KeyObject from a raw 32-byte public key.
13
+ */
14
+ export declare function createPublicKeyObject(publicKey32: Bytes32): KeyObject;
15
+ /**
16
+ * Derives raw 32-byte X25519 public key from a private KeyObject.
17
+ */
18
+ export declare function publicKeyFromPrivateKeyObject(privateKey: KeyObject): Bytes32;
2
19
  /**
3
20
  * Derives an X25519 public key from a raw 32-byte secret scalar.
4
21
  */
5
22
  export declare function publicKey(secretKey32: Bytes32): Bytes32;
23
+ /**
24
+ * Computes X25519 ECDH shared secret (raw 32 bytes) from reusable KeyObjects.
25
+ */
26
+ export declare function sharedKeyFromKeyObjects(privateKey: KeyObject, publicKey: KeyObject): Bytes32;
6
27
  /**
7
28
  * Computes X25519 ECDH shared secret (raw 32 bytes).
8
29
  */
9
30
  export declare function sharedKey(secretKey32: Bytes32, publicKey32: Bytes32): Bytes32;
31
+ /**
32
+ * Strict X25519 ECDH: rejects all-zero shared secret.
33
+ */
34
+ export declare function sharedKeyStrict(secretKey32: Bytes32, publicKey32: Bytes32): Bytes32;
35
+ /**
36
+ * Strict X25519 ECDH from reusable KeyObjects: rejects all-zero shared secret.
37
+ */
38
+ export declare function sharedKeyStrictFromKeyObjects(privateKey: KeyObject, publicKey: KeyObject): Bytes32;
10
39
  /**
11
40
  * Deterministically creates an X25519 key pair from a 32-byte seed.
12
41
  * The returned private key is explicitly clamped for stable output.
@@ -1 +1 @@
1
- {"version":3,"file":"x25519.d.ts","sourceRoot":"","sources":["../src/x25519.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAWrD;;GAEG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAIvD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAa7E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,CAQ1D"}
1
+ {"version":3,"file":"x25519.d.ts","sourceRoot":"","sources":["../src/x25519.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAO7E,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAqBrD;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAOrD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,OAAO,GAAG,SAAS,CAGtE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,OAAO,GAAG,SAAS,CAGrE;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,SAAS,GAAG,OAAO,CAE5E;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAEvD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAE5F;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAI7E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAQnF;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,SAAS,EACrB,SAAS,EAAE,SAAS,GACnB,OAAO,CAQT;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,CAQ1D"}
package/dist/x25519.js CHANGED
@@ -9,28 +9,82 @@ function clampScalar(seed32) {
9
9
  clamped[31] = (last & 127) | 64;
10
10
  return asBytes32(clamped, "clamped scalar");
11
11
  }
12
+ function normalizeSharedSecret(shared) {
13
+ if (shared.byteLength !== 32) {
14
+ throw new Error(`X25519 shared secret must be 32 bytes, received ${shared.byteLength}`);
15
+ }
16
+ return asBytes32(new Uint8Array(shared.buffer, shared.byteOffset, shared.byteLength), "sharedKey");
17
+ }
12
18
  /**
13
- * Derives an X25519 public key from a raw 32-byte secret scalar.
19
+ * Constant-time style 32-byte zero check for shared-secret hardening.
14
20
  */
15
- export function publicKey(secretKey32) {
21
+ export function isAllZero32(bytes32) {
22
+ assertBytes32(bytes32, "bytes32");
23
+ let acc = 0;
24
+ for (let i = 0; i < 32; i += 1) {
25
+ acc |= bytes32[i] ?? 0;
26
+ }
27
+ return acc === 0;
28
+ }
29
+ /**
30
+ * Builds a reusable X25519 private KeyObject from a raw 32-byte secret scalar.
31
+ */
32
+ export function createPrivateKeyObject(secretKey32) {
16
33
  assertBytes32(secretKey32, "secretKey32");
17
- const privateKey = keyFromX25519Private(secretKey32);
34
+ return keyFromX25519Private(secretKey32);
35
+ }
36
+ /**
37
+ * Builds a reusable X25519 public KeyObject from a raw 32-byte public key.
38
+ */
39
+ export function createPublicKeyObject(publicKey32) {
40
+ assertBytes32(publicKey32, "publicKey32");
41
+ return keyFromX25519Public(publicKey32);
42
+ }
43
+ /**
44
+ * Derives raw 32-byte X25519 public key from a private KeyObject.
45
+ */
46
+ export function publicKeyFromPrivateKeyObject(privateKey) {
18
47
  return rawPublicFromX25519Spki(createPublicKey(privateKey));
19
48
  }
49
+ /**
50
+ * Derives an X25519 public key from a raw 32-byte secret scalar.
51
+ */
52
+ export function publicKey(secretKey32) {
53
+ return publicKeyFromPrivateKeyObject(createPrivateKeyObject(secretKey32));
54
+ }
55
+ /**
56
+ * Computes X25519 ECDH shared secret (raw 32 bytes) from reusable KeyObjects.
57
+ */
58
+ export function sharedKeyFromKeyObjects(privateKey, publicKey) {
59
+ return normalizeSharedSecret(diffieHellman({ privateKey, publicKey }));
60
+ }
20
61
  /**
21
62
  * Computes X25519 ECDH shared secret (raw 32 bytes).
22
63
  */
23
64
  export function sharedKey(secretKey32, publicKey32) {
24
- assertBytes32(secretKey32, "secretKey32");
25
- assertBytes32(publicKey32, "publicKey32");
26
- const shared = diffieHellman({
27
- privateKey: keyFromX25519Private(secretKey32),
28
- publicKey: keyFromX25519Public(publicKey32),
29
- });
30
- if (shared.byteLength !== 32) {
31
- throw new Error(`X25519 shared secret must be 32 bytes, received ${shared.byteLength}`);
65
+ const privateKey = createPrivateKeyObject(secretKey32);
66
+ const publicKey = createPublicKeyObject(publicKey32);
67
+ return sharedKeyFromKeyObjects(privateKey, publicKey);
68
+ }
69
+ /**
70
+ * Strict X25519 ECDH: rejects all-zero shared secret.
71
+ */
72
+ export function sharedKeyStrict(secretKey32, publicKey32) {
73
+ const shared = sharedKey(secretKey32, publicKey32);
74
+ if (isAllZero32(shared)) {
75
+ throw new Error("X25519 shared secret is all-zero; reject low-order/invalid peer public key in protocol flow.");
32
76
  }
33
- return asBytes32(new Uint8Array(shared.buffer, shared.byteOffset, shared.byteLength), "sharedKey");
77
+ return shared;
78
+ }
79
+ /**
80
+ * Strict X25519 ECDH from reusable KeyObjects: rejects all-zero shared secret.
81
+ */
82
+ export function sharedKeyStrictFromKeyObjects(privateKey, publicKey) {
83
+ const shared = sharedKeyFromKeyObjects(privateKey, publicKey);
84
+ if (isAllZero32(shared)) {
85
+ throw new Error("X25519 shared secret is all-zero; reject low-order/invalid peer public key in protocol flow.");
86
+ }
87
+ return shared;
34
88
  }
35
89
  /**
36
90
  * Deterministically creates an X25519 key pair from a 32-byte seed.
@@ -1 +1 @@
1
- {"version":3,"file":"x25519.js","sourceRoot":"","sources":["../src/x25519.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAG3B,SAAS,WAAW,CAAC,MAAe;IAClC,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;IACrC,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;IAChC,OAAO,SAAS,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,WAAoB;IAC5C,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACrD,OAAO,uBAAuB,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,WAAoB,EAAE,WAAoB;IAClE,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC1C,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAE1C,MAAM,MAAM,GAAG,aAAa,CAAC;QAC3B,UAAU,EAAE,oBAAoB,CAAC,WAAW,CAAC;QAC7C,SAAS,EAAE,mBAAmB,CAAC,WAAW,CAAC;KAC5C,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,UAAU,KAAK,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,mDAAmD,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,SAAS,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,CAAC;AACrG,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAe;IAC7C,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IAC1C,OAAO;QACL,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,UAAU;KACpB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"x25519.js","sourceRoot":"","sources":["../src/x25519.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,13 @@
1
1
  {
2
2
  "name": "@unknownncat/curve25519-node",
3
- "version": "1.0.1",
3
+ "version": "2.1.0",
4
4
  "description": "Modern zero-dependency X25519 + Ed25519 for Node.js using OpenSSL via node:crypto",
5
5
  "keywords": [
6
6
  "curve25519",
7
7
  "x25519",
8
8
  "ed25519",
9
+ "axlsign",
10
+ "wasm",
9
11
  "crypto",
10
12
  "cryptography",
11
13
  "openssl",
@@ -20,7 +22,7 @@
20
22
  "url": "git+https://github.com/unknownncat/curve25519-node.git"
21
23
  },
22
24
  "license": "MIT",
23
- "author": "unknownncat",
25
+ "author": "Sem nome bah",
24
26
  "type": "module",
25
27
  "sideEffects": false,
26
28
  "main": "./dist/cjs/index.js",
@@ -45,6 +47,18 @@
45
47
  "require": "./dist/cjs/ed25519.js",
46
48
  "default": "./dist/ed25519.js"
47
49
  },
50
+ "./axlsign": {
51
+ "types": "./dist/axlsign.d.ts",
52
+ "import": "./dist/axlsign.js",
53
+ "require": "./dist/cjs/axlsign.js",
54
+ "default": "./dist/axlsign.js"
55
+ },
56
+ "./wasm": {
57
+ "types": "./dist/wasm.d.ts",
58
+ "import": "./dist/wasm.js",
59
+ "require": "./dist/cjs/wasm.js",
60
+ "default": "./dist/wasm.js"
61
+ },
48
62
  "./types": {
49
63
  "types": "./dist/types.d.ts",
50
64
  "import": "./dist/types.js",
@@ -56,6 +70,11 @@
56
70
  "files": [
57
71
  "dist/**/*",
58
72
  "README.md",
73
+ "README.en.md",
74
+ "NOTICE.md",
75
+ "THIRD_PARTY_NOTICE.md",
76
+ "THIRD_PARTY_NOTICES.md",
77
+ "SECURITY.md",
59
78
  "LICENSE"
60
79
  ],
61
80
  "engines": {
@@ -63,17 +82,31 @@
63
82
  },
64
83
  "scripts": {
65
84
  "clean": "node scripts/clean.mjs",
85
+ "build:wasm": "node scripts/build-axlsign-wasm.mjs && node scripts/build-curve25519-wasm.mjs",
66
86
  "build:esm": "tsc -p tsconfig.json",
67
87
  "build:cjs": "tsc -p tsconfig.cjs.json && node scripts/write-cjs-package-json.mjs",
68
- "build": "npm run clean && npm run build:esm && npm run build:cjs",
88
+ "build:copy-wasm": "node scripts/copy-axlsign-wasm.mjs",
89
+ "build": "npm run clean && npm run build:wasm && npm run build:esm && npm run build:cjs && npm run build:copy-wasm",
90
+ "typecheck": "tsc -p tsconfig.json --noEmit",
91
+ "lint": "eslint .",
92
+ "lint:fix": "eslint . --fix",
93
+ "format": "prettier . --write",
94
+ "format:check": "prettier . --check",
69
95
  "test": "npm run build && node --test \"test/*.test.mjs\"",
96
+ "ci": "npm run format:check && npm run lint && npm run typecheck && npm run test",
70
97
  "bench": "npm run build && npm --prefix bench run bench",
71
98
  "bench:quick": "npm run build && npm --prefix bench run bench:quick",
72
- "prepack": "npm run test",
73
- "prepublishOnly": "npm run test"
99
+ "prepack": "npm run ci",
100
+ "prepublishOnly": "npm run ci"
74
101
  },
75
102
  "devDependencies": {
103
+ "@eslint/js": "^9.37.0",
76
104
  "@types/node": "^22.18.6",
105
+ "eslint": "^9.37.0",
106
+ "eslint-config-prettier": "^10.1.8",
107
+ "globals": "^16.4.0",
108
+ "prettier": "^3.6.2",
109
+ "typescript-eslint": "^8.46.1",
77
110
  "typescript": "^5.9.2"
78
111
  }
79
112
  }