@quantakrypto/qprobe 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"mlkem768.d.ts","sourceRoot":"","sources":["../src/mlkem768.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,QAAQ,OAAO,CAAC;AAG7B,iFAAiF;AACjF,eAAO,MAAM,mBAAmB,QAAe,CAAC;AAEhD,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAW9D;AAED,iEAAiE;AACjE,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAQpD;AAcD;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAK7C"}
1
+ {"version":3,"file":"mlkem768.d.ts","sourceRoot":"","sources":["../src/mlkem768.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,QAAQ,OAAO,CAAC;AAG7B,iFAAiF;AACjF,eAAO,MAAM,mBAAmB,QAAe,CAAC;AAEhD,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAW9D;AAED,iEAAiE;AACjE,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAQpD;AA0BD;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAK7C"}
package/dist/mlkem768.js CHANGED
@@ -44,14 +44,26 @@ export function byteDecode12(bytes) {
44
44
  }
45
45
  return out;
46
46
  }
47
- /** A random polynomial with all coefficients in [0, q) (throwaway, not uniform). */
47
+ /** A random polynomial with all coefficients uniform in [0, q) (throwaway probe key). */
48
48
  function randomInRangePoly() {
49
- const raw = randomBytes(N * 2);
49
+ // Rejection sampling from 16-bit draws to avoid modulo bias. The key is a
50
+ // throwaway (never used for real security), but a security tool should not
51
+ // ship biased "randomness" even here.
52
+ const MAX = Math.floor(0x10000 / ML_KEM_Q) * ML_KEM_Q;
50
53
  const poly = new Array(N);
54
+ let pool = randomBytes(N * 4);
55
+ let off = 0;
51
56
  for (let i = 0; i < N; i++) {
52
- // 16-bit sample reduced mod q — biased but always in [0, q), which is all the
53
- // server's modulus check requires. This is a throwaway key.
54
- poly[i] = raw.readUInt16BE(i * 2) % ML_KEM_Q;
57
+ let v;
58
+ do {
59
+ if (off + 2 > pool.length) {
60
+ pool = randomBytes(N * 4);
61
+ off = 0;
62
+ }
63
+ v = pool.readUInt16BE(off);
64
+ off += 2;
65
+ } while (v >= MAX);
66
+ poly[i] = v % ML_KEM_Q;
55
67
  }
56
68
  return poly;
57
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mlkem768.js","sourceRoot":"","sources":["../src/mlkem768.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Minimal ML-KEM-768 (FIPS 203) encapsulation-key ENCODING — just enough to put a\n * WELL-FORMED encapsulation key into a TLS X25519MLKEM768 key_share so that a\n * server which supports the hybrid group selects it directly (rather than only via\n * a HelloRetryRequest, which misses servers that support-but-don't-prefer it).\n *\n * qProbe never completes the handshake, so it does NOT need real ML-KEM key\n * generation (no NTT, matrix A, or CBD sampling). It only needs bytes the server's\n * ML-KEM.Encaps input check accepts — a `ByteEncode₁₂` of coefficients in `[0, q)`\n * plus a 32-byte ρ. FIPS 203 §7.2's \"modulus check\" (ByteEncode(ByteDecode(ek))==ek)\n * passes for any in-range coefficients, so a random valid-range vector is accepted.\n * The value is throwaway; we discard the (uncomputable-by-us) shared secret.\n *\n * Pure and unit-tested (encode/decode round-trip, length, in-range).\n */\nimport { randomBytes } from \"node:crypto\";\n\nexport const ML_KEM_Q = 3329;\nconst N = 256; // coefficients per polynomial\nconst K = 3; // ML-KEM-768 rank\n/** Encoded encapsulation-key length: 384·k bytes of ByteEncode₁₂ + 32-byte ρ. */\nexport const ML_KEM_768_EK_BYTES = 384 * K + 32; // 1184\n\n/** ByteEncode₁₂: pack 256 12-bit coefficients (each in [0, q)) into 384 bytes. */\nexport function byteEncode12(coeffs: readonly number[]): Buffer {\n if (coeffs.length !== N) throw new RangeError(`byteEncode12 expects ${N} coefficients`);\n const out = Buffer.alloc((N * 12) / 8); // 384\n for (let i = 0, o = 0; i < N; i += 2, o += 3) {\n const a = coeffs[i] & 0xfff;\n const b = coeffs[i + 1] & 0xfff;\n out[o] = a & 0xff;\n out[o + 1] = (a >> 8) | ((b & 0x0f) << 4);\n out[o + 2] = b >> 4;\n }\n return out;\n}\n\n/** ByteDecode₁₂: inverse of {@link byteEncode12} (for tests). */\nexport function byteDecode12(bytes: Buffer): number[] {\n if (bytes.length !== 384) throw new RangeError(\"byteDecode12 expects 384 bytes\");\n const out: number[] = new Array(N);\n for (let i = 0, o = 0; i < N; i += 2, o += 3) {\n out[i] = bytes[o] | ((bytes[o + 1] & 0x0f) << 8);\n out[i + 1] = (bytes[o + 1] >> 4) | (bytes[o + 2] << 4);\n }\n return out;\n}\n\n/** A random polynomial with all coefficients in [0, q) (throwaway, not uniform). */\nfunction randomInRangePoly(): number[] {\n const raw = randomBytes(N * 2);\n const poly: number[] = new Array(N);\n for (let i = 0; i < N; i++) {\n // 16-bit sample reduced mod q biased but always in [0, q), which is all the\n // server's modulus check requires. This is a throwaway key.\n poly[i] = raw.readUInt16BE(i * 2) % ML_KEM_Q;\n }\n return poly;\n}\n\n/**\n * Build a WELL-FORMED ML-KEM-768 encapsulation key (1184 bytes): `ByteEncode₁₂` of\n * a random in-range `t̂` (k=3 polynomials) followed by a 32-byte ρ. Accepted by a\n * FIPS 203 encaps input check; the corresponding secret is not recoverable by us\n * (and is not needed — we only observe which group the server selects).\n */\nexport function wellFormedMlKem768Ek(): Buffer {\n const parts: Buffer[] = [];\n for (let i = 0; i < K; i++) parts.push(byteEncode12(randomInRangePoly()));\n parts.push(randomBytes(32)); // ρ\n return Buffer.concat(parts);\n}\n"]}
1
+ {"version":3,"file":"mlkem768.js","sourceRoot":"","sources":["../src/mlkem768.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Minimal ML-KEM-768 (FIPS 203) encapsulation-key ENCODING — just enough to put a\n * WELL-FORMED encapsulation key into a TLS X25519MLKEM768 key_share so that a\n * server which supports the hybrid group selects it directly (rather than only via\n * a HelloRetryRequest, which misses servers that support-but-don't-prefer it).\n *\n * qProbe never completes the handshake, so it does NOT need real ML-KEM key\n * generation (no NTT, matrix A, or CBD sampling). It only needs bytes the server's\n * ML-KEM.Encaps input check accepts — a `ByteEncode₁₂` of coefficients in `[0, q)`\n * plus a 32-byte ρ. FIPS 203 §7.2's \"modulus check\" (ByteEncode(ByteDecode(ek))==ek)\n * passes for any in-range coefficients, so a random valid-range vector is accepted.\n * The value is throwaway; we discard the (uncomputable-by-us) shared secret.\n *\n * Pure and unit-tested (encode/decode round-trip, length, in-range).\n */\nimport { randomBytes } from \"node:crypto\";\n\nexport const ML_KEM_Q = 3329;\nconst N = 256; // coefficients per polynomial\nconst K = 3; // ML-KEM-768 rank\n/** Encoded encapsulation-key length: 384·k bytes of ByteEncode₁₂ + 32-byte ρ. */\nexport const ML_KEM_768_EK_BYTES = 384 * K + 32; // 1184\n\n/** ByteEncode₁₂: pack 256 12-bit coefficients (each in [0, q)) into 384 bytes. */\nexport function byteEncode12(coeffs: readonly number[]): Buffer {\n if (coeffs.length !== N) throw new RangeError(`byteEncode12 expects ${N} coefficients`);\n const out = Buffer.alloc((N * 12) / 8); // 384\n for (let i = 0, o = 0; i < N; i += 2, o += 3) {\n const a = coeffs[i] & 0xfff;\n const b = coeffs[i + 1] & 0xfff;\n out[o] = a & 0xff;\n out[o + 1] = (a >> 8) | ((b & 0x0f) << 4);\n out[o + 2] = b >> 4;\n }\n return out;\n}\n\n/** ByteDecode₁₂: inverse of {@link byteEncode12} (for tests). */\nexport function byteDecode12(bytes: Buffer): number[] {\n if (bytes.length !== 384) throw new RangeError(\"byteDecode12 expects 384 bytes\");\n const out: number[] = new Array(N);\n for (let i = 0, o = 0; i < N; i += 2, o += 3) {\n out[i] = bytes[o] | ((bytes[o + 1] & 0x0f) << 8);\n out[i + 1] = (bytes[o + 1] >> 4) | (bytes[o + 2] << 4);\n }\n return out;\n}\n\n/** A random polynomial with all coefficients uniform in [0, q) (throwaway probe key). */\nfunction randomInRangePoly(): number[] {\n // Rejection sampling from 16-bit draws to avoid modulo bias. The key is a\n // throwaway (never used for real security), but a security tool should not\n // ship biased \"randomness\" even here.\n const MAX = Math.floor(0x10000 / ML_KEM_Q) * ML_KEM_Q;\n const poly: number[] = new Array(N);\n let pool = randomBytes(N * 4);\n let off = 0;\n for (let i = 0; i < N; i++) {\n let v: number;\n do {\n if (off + 2 > pool.length) {\n pool = randomBytes(N * 4);\n off = 0;\n }\n v = pool.readUInt16BE(off);\n off += 2;\n } while (v >= MAX);\n poly[i] = v % ML_KEM_Q;\n }\n return poly;\n}\n\n/**\n * Build a WELL-FORMED ML-KEM-768 encapsulation key (1184 bytes): `ByteEncode₁₂` of\n * a random in-range `t̂` (k=3 polynomials) followed by a 32-byte ρ. Accepted by a\n * FIPS 203 encaps input check; the corresponding secret is not recoverable by us\n * (and is not needed — we only observe which group the server selects).\n */\nexport function wellFormedMlKem768Ek(): Buffer {\n const parts: Buffer[] = [];\n for (let i = 0; i < K; i++) parts.push(byteEncode12(randomInRangePoly()));\n parts.push(randomBytes(32)); // ρ\n return Buffer.concat(parts);\n}\n"]}
package/dist/version.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  /** qProbe version, surfaced in JSON output. Keep in sync with package.json. */
2
- export declare const VERSION = "0.5.0";
2
+ export declare const VERSION = "0.6.0";
3
3
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  /** qProbe version, surfaced in JSON output. Keep in sync with package.json. */
2
- export const VERSION = "0.5.0";
2
+ export const VERSION = "0.6.0";
3
3
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC","sourcesContent":["/** qProbe version, surfaced in JSON output. Keep in sync with package.json. */\nexport const VERSION = \"0.5.0\";\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC","sourcesContent":["/** qProbe version, surfaced in JSON output. Keep in sync with package.json. */\nexport const VERSION = \"0.6.0\";\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quantakrypto/qprobe",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "qProbe — actively inspect live TLS/SSH endpoints you OWN for post-quantum readiness (hybrid KEX, classical certs). Gated behind an ownership attestation. Zero runtime dependencies.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Dandelion Labs <hello@dandelionlabs.io> (https://dandelionlabs.io)",
@@ -37,7 +37,7 @@
37
37
  "access": "public"
38
38
  },
39
39
  "dependencies": {
40
- "@quantakrypto/core": "0.5.0"
40
+ "@quantakrypto/core": "0.6.0"
41
41
  },
42
42
  "scripts": {
43
43
  "build": "tsc -b",