@noble/post-quantum 0.4.0 → 0.5.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.
- package/README.md +65 -64
- package/_crystals.d.ts +2 -2
- package/_crystals.d.ts.map +1 -1
- package/_crystals.js +31 -46
- package/_crystals.js.map +1 -1
- package/hybrid.d.ts +102 -0
- package/hybrid.d.ts.map +1 -0
- package/hybrid.js +283 -0
- package/hybrid.js.map +1 -0
- package/index.d.ts +1 -0
- package/index.js +4 -4
- package/index.js.map +1 -1
- package/ml-dsa.d.ts +16 -8
- package/ml-dsa.d.ts.map +1 -1
- package/ml-dsa.js +130 -66
- package/ml-dsa.js.map +1 -1
- package/ml-kem.d.ts +1 -14
- package/ml-kem.d.ts.map +1 -1
- package/ml-kem.js +70 -53
- package/ml-kem.js.map +1 -1
- package/package.json +39 -62
- package/slh-dsa.d.ts +5 -4
- package/slh-dsa.d.ts.map +1 -1
- package/slh-dsa.js +114 -86
- package/slh-dsa.js.map +1 -1
- package/src/_crystals.ts +30 -41
- package/src/hybrid.ts +372 -0
- package/src/index.ts +3 -3
- package/src/ml-dsa.ts +131 -41
- package/src/ml-kem.ts +51 -47
- package/src/slh-dsa.ts +92 -51
- package/src/utils.ts +86 -52
- package/utils.d.ts +47 -11
- package/utils.d.ts.map +1 -1
- package/utils.js +54 -62
- package/utils.js.map +1 -1
- package/esm/_crystals.d.ts +0 -34
- package/esm/_crystals.d.ts.map +0 -1
- package/esm/_crystals.js +0 -141
- package/esm/_crystals.js.map +0 -1
- package/esm/index.d.ts +0 -2
- package/esm/index.d.ts.map +0 -1
- package/esm/index.js +0 -21
- package/esm/index.js.map +0 -1
- package/esm/ml-dsa.d.ts +0 -25
- package/esm/ml-dsa.d.ts.map +0 -1
- package/esm/ml-dsa.js +0 -519
- package/esm/ml-dsa.js.map +0 -1
- package/esm/ml-kem.d.ts +0 -34
- package/esm/ml-kem.d.ts.map +0 -1
- package/esm/ml-kem.js +0 -305
- package/esm/ml-kem.js.map +0 -1
- package/esm/package.json +0 -10
- package/esm/slh-dsa.d.ts +0 -62
- package/esm/slh-dsa.d.ts.map +0 -1
- package/esm/slh-dsa.js +0 -595
- package/esm/slh-dsa.js.map +0 -1
- package/esm/utils.d.ts +0 -46
- package/esm/utils.d.ts.map +0 -1
- package/esm/utils.js +0 -135
- package/esm/utils.js.map +0 -1
- package/src/package.json +0 -3
package/utils.d.ts
CHANGED
@@ -3,21 +3,56 @@
|
|
3
3
|
* @module
|
4
4
|
*/
|
5
5
|
/*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) */
|
6
|
-
import {
|
7
|
-
|
8
|
-
export
|
6
|
+
import { type CHash, type TypedArray, concatBytes, randomBytes as randb } from '@noble/hashes/utils.js';
|
7
|
+
export { abytes } from '@noble/hashes/utils.js';
|
8
|
+
export { concatBytes };
|
9
9
|
export declare const randomBytes: typeof randb;
|
10
|
-
export { concatBytes, utf8ToBytes };
|
11
10
|
export declare function equalBytes(a: Uint8Array, b: Uint8Array): boolean;
|
12
|
-
|
13
|
-
export type
|
14
|
-
|
15
|
-
|
11
|
+
export declare function copyBytes(bytes: Uint8Array): Uint8Array;
|
12
|
+
export type CryptoKeys = {
|
13
|
+
info?: {
|
14
|
+
type?: string;
|
15
|
+
};
|
16
|
+
lengths: {
|
17
|
+
seed?: number;
|
18
|
+
publicKey?: number;
|
19
|
+
secretKey?: number;
|
20
|
+
};
|
21
|
+
keygen: (seed?: Uint8Array) => {
|
16
22
|
secretKey: Uint8Array;
|
17
23
|
publicKey: Uint8Array;
|
18
24
|
};
|
19
|
-
|
20
|
-
|
25
|
+
getPublicKey: (secretKey: Uint8Array) => Uint8Array;
|
26
|
+
};
|
27
|
+
export type VerOpts = {
|
28
|
+
context?: Uint8Array;
|
29
|
+
};
|
30
|
+
export type SigOpts = VerOpts & {
|
31
|
+
extraEntropy?: Uint8Array | false;
|
32
|
+
};
|
33
|
+
export declare function validateOpts(opts: object): void;
|
34
|
+
export declare function validateVerOpts(opts: VerOpts): void;
|
35
|
+
export declare function validateSigOpts(opts: SigOpts): void;
|
36
|
+
/** Generic interface for signatures. Has keygen, sign and verify. */
|
37
|
+
export type Signer = CryptoKeys & {
|
38
|
+
lengths: {
|
39
|
+
signRand?: number;
|
40
|
+
signature?: number;
|
41
|
+
};
|
42
|
+
sign: (msg: Uint8Array, secretKey: Uint8Array, opts?: SigOpts) => Uint8Array;
|
43
|
+
verify: (sig: Uint8Array, msg: Uint8Array, publicKey: Uint8Array, opts?: VerOpts) => boolean;
|
44
|
+
};
|
45
|
+
export type KEM = CryptoKeys & {
|
46
|
+
lengths: {
|
47
|
+
cipherText?: number;
|
48
|
+
msg?: number;
|
49
|
+
msgRand?: number;
|
50
|
+
};
|
51
|
+
encapsulate: (publicKey: Uint8Array, msg?: Uint8Array) => {
|
52
|
+
cipherText: Uint8Array;
|
53
|
+
sharedSecret: Uint8Array;
|
54
|
+
};
|
55
|
+
decapsulate: (cipherText: Uint8Array, secretKey: Uint8Array) => Uint8Array;
|
21
56
|
};
|
22
57
|
export interface Coder<F, T> {
|
23
58
|
encode(from: F): T;
|
@@ -42,5 +77,6 @@ export declare function cleanBytes(...list: (TypedArray | TypedArray[])[]): void
|
|
42
77
|
export declare function getMask(bits: number): number;
|
43
78
|
export declare const EMPTY: Uint8Array;
|
44
79
|
export declare function getMessage(msg: Uint8Array, ctx?: Uint8Array): Uint8Array;
|
45
|
-
export declare function
|
80
|
+
export declare function checkHash(hash: CHash, requiredStrength?: number): void;
|
81
|
+
export declare function getMessagePrehash(hash: CHash, msg: Uint8Array, ctx?: Uint8Array): Uint8Array;
|
46
82
|
//# sourceMappingURL=utils.d.ts.map
|
package/utils.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,4EAA4E;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["src/utils.ts"],"names":[],"mappings":"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"}
|
package/utils.js
CHANGED
@@ -1,29 +1,14 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.EMPTY = exports.utf8ToBytes = exports.concatBytes = exports.randomBytes = exports.ensureBytes = void 0;
|
4
|
-
exports.equalBytes = equalBytes;
|
5
|
-
exports.splitCoder = splitCoder;
|
6
|
-
exports.vecCoder = vecCoder;
|
7
|
-
exports.cleanBytes = cleanBytes;
|
8
|
-
exports.getMask = getMask;
|
9
|
-
exports.getMessage = getMessage;
|
10
|
-
exports.getMessagePrehash = getMessagePrehash;
|
11
1
|
/**
|
12
2
|
* Utilities for hex, bytearray and number handling.
|
13
3
|
* @module
|
14
4
|
*/
|
15
5
|
/*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) */
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
const
|
20
|
-
const utils_1 = require("@noble/hashes/utils");
|
21
|
-
Object.defineProperty(exports, "concatBytes", { enumerable: true, get: function () { return utils_1.concatBytes; } });
|
22
|
-
Object.defineProperty(exports, "utf8ToBytes", { enumerable: true, get: function () { return utils_1.utf8ToBytes; } });
|
23
|
-
exports.ensureBytes = _assert_1.abytes;
|
24
|
-
exports.randomBytes = utils_1.randomBytes;
|
6
|
+
import { abytes, abytes as abytes_, concatBytes, isBytes, randomBytes as randb, } from '@noble/hashes/utils.js';
|
7
|
+
export { abytes } from '@noble/hashes/utils.js';
|
8
|
+
export { concatBytes };
|
9
|
+
export const randomBytes = randb;
|
25
10
|
// Compares 2 u8a-s in kinda constant time
|
26
|
-
function equalBytes(a, b) {
|
11
|
+
export function equalBytes(a, b) {
|
27
12
|
if (a.length !== b.length)
|
28
13
|
return false;
|
29
14
|
let diff = 0;
|
@@ -31,7 +16,26 @@ function equalBytes(a, b) {
|
|
31
16
|
diff |= a[i] ^ b[i];
|
32
17
|
return diff === 0;
|
33
18
|
}
|
34
|
-
|
19
|
+
// copy bytes to new u8a (aligned). Because Buffer.slice is broken.
|
20
|
+
export function copyBytes(bytes) {
|
21
|
+
return Uint8Array.from(bytes);
|
22
|
+
}
|
23
|
+
export function validateOpts(opts) {
|
24
|
+
// We try to catch u8a, since it was previously valid argument at this position
|
25
|
+
if (typeof opts !== 'object' || opts === null || isBytes(opts))
|
26
|
+
throw new Error('expected opts to be an object');
|
27
|
+
}
|
28
|
+
export function validateVerOpts(opts) {
|
29
|
+
validateOpts(opts);
|
30
|
+
if (opts.context !== undefined)
|
31
|
+
abytes(opts.context, undefined, 'opts.context');
|
32
|
+
}
|
33
|
+
export function validateSigOpts(opts) {
|
34
|
+
validateVerOpts(opts);
|
35
|
+
if (opts.extraEntropy !== false && opts.extraEntropy !== undefined)
|
36
|
+
abytes(opts.extraEntropy, undefined, 'opts.extraEntropy');
|
37
|
+
}
|
38
|
+
export function splitCoder(...lengths) {
|
35
39
|
const getLength = (c) => (typeof c === 'number' ? c : c.bytesLen);
|
36
40
|
const bytesLen = lengths.reduce((sum, a) => sum + getLength(a), 0);
|
37
41
|
return {
|
@@ -42,7 +46,7 @@ function splitCoder(...lengths) {
|
|
42
46
|
const c = lengths[i];
|
43
47
|
const l = getLength(c);
|
44
48
|
const b = typeof c === 'number' ? bufs[i] : c.encode(bufs[i]);
|
45
|
-
(
|
49
|
+
abytes_(b, l);
|
46
50
|
res.set(b, pos);
|
47
51
|
if (typeof c !== 'number')
|
48
52
|
b.fill(0); // clean
|
@@ -51,7 +55,7 @@ function splitCoder(...lengths) {
|
|
51
55
|
return res;
|
52
56
|
},
|
53
57
|
decode: (buf) => {
|
54
|
-
(
|
58
|
+
abytes_(buf, bytesLen);
|
55
59
|
const res = [];
|
56
60
|
for (const c of lengths) {
|
57
61
|
const l = getLength(c);
|
@@ -64,7 +68,7 @@ function splitCoder(...lengths) {
|
|
64
68
|
};
|
65
69
|
}
|
66
70
|
// nano-packed.array (fixed size)
|
67
|
-
function vecCoder(c, vecLen) {
|
71
|
+
export function vecCoder(c, vecLen) {
|
68
72
|
const bytesLen = vecLen * c.bytesLen;
|
69
73
|
return {
|
70
74
|
bytesLen,
|
@@ -81,7 +85,7 @@ function vecCoder(c, vecLen) {
|
|
81
85
|
return res;
|
82
86
|
},
|
83
87
|
decode: (a) => {
|
84
|
-
(
|
88
|
+
abytes_(a, bytesLen);
|
85
89
|
const r = [];
|
86
90
|
for (let i = 0; i < a.length; i += c.bytesLen)
|
87
91
|
r.push(c.decode(a.subarray(i, i + c.bytesLen)));
|
@@ -89,8 +93,8 @@ function vecCoder(c, vecLen) {
|
|
89
93
|
},
|
90
94
|
};
|
91
95
|
}
|
92
|
-
// cleanBytes(
|
93
|
-
function cleanBytes(...list) {
|
96
|
+
// cleanBytes(Uint8Array.of(), [Uint16Array.of(), Uint32Array.of()])
|
97
|
+
export function cleanBytes(...list) {
|
94
98
|
for (const t of list) {
|
95
99
|
if (Array.isArray(t))
|
96
100
|
for (const b of t)
|
@@ -99,48 +103,36 @@ function cleanBytes(...list) {
|
|
99
103
|
t.fill(0);
|
100
104
|
}
|
101
105
|
}
|
102
|
-
function getMask(bits) {
|
106
|
+
export function getMask(bits) {
|
103
107
|
return (1 << bits) - 1; // 4 -> 0b1111
|
104
108
|
}
|
105
|
-
|
106
|
-
function getMessage(msg, ctx =
|
107
|
-
(
|
108
|
-
(
|
109
|
+
export const EMPTY = Uint8Array.of();
|
110
|
+
export function getMessage(msg, ctx = EMPTY) {
|
111
|
+
abytes_(msg);
|
112
|
+
abytes_(ctx);
|
109
113
|
if (ctx.length > 255)
|
110
114
|
throw new Error('context should be less than 255 bytes');
|
111
|
-
return
|
115
|
+
return concatBytes(new Uint8Array([0, ctx.length]), ctx, msg);
|
116
|
+
}
|
117
|
+
// 06 09 60 86 48 01 65 03 04 02
|
118
|
+
const oidNistP = /* @__PURE__ */ Uint8Array.from([6, 9, 0x60, 0x86, 0x48, 1, 0x65, 3, 4, 2]);
|
119
|
+
export function checkHash(hash, requiredStrength = 0) {
|
120
|
+
if (!hash.oid || !equalBytes(hash.oid.subarray(0, 10), oidNistP))
|
121
|
+
throw new Error('hash.oid is invalid: expected NIST hash');
|
122
|
+
const collisionResistance = (hash.outputLen * 8) / 2;
|
123
|
+
if (requiredStrength > collisionResistance) {
|
124
|
+
throw new Error('Pre-hash security strength too low: ' +
|
125
|
+
collisionResistance +
|
126
|
+
', required: ' +
|
127
|
+
requiredStrength);
|
128
|
+
}
|
112
129
|
}
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
'SHA2-256': { oid: (0, utils_1.hexToBytes)('0609608648016503040201'), hash: sha256_1.sha256 },
|
117
|
-
'SHA2-384': { oid: (0, utils_1.hexToBytes)('0609608648016503040202'), hash: sha512_1.sha384 },
|
118
|
-
'SHA2-512': { oid: (0, utils_1.hexToBytes)('0609608648016503040203'), hash: sha512_1.sha512 },
|
119
|
-
'SHA2-224': { oid: (0, utils_1.hexToBytes)('0609608648016503040204'), hash: sha256_1.sha224 },
|
120
|
-
'SHA2-512/224': { oid: (0, utils_1.hexToBytes)('0609608648016503040205'), hash: sha512_1.sha512_224 },
|
121
|
-
'SHA2-512/256': { oid: (0, utils_1.hexToBytes)('0609608648016503040206'), hash: sha512_1.sha512_256 },
|
122
|
-
'SHA3-224': { oid: (0, utils_1.hexToBytes)('0609608648016503040207'), hash: sha3_1.sha3_224 },
|
123
|
-
'SHA3-256': { oid: (0, utils_1.hexToBytes)('0609608648016503040208'), hash: sha3_1.sha3_256 },
|
124
|
-
'SHA3-384': { oid: (0, utils_1.hexToBytes)('0609608648016503040209'), hash: sha3_1.sha3_384 },
|
125
|
-
'SHA3-512': { oid: (0, utils_1.hexToBytes)('060960864801650304020A'), hash: sha3_1.sha3_512 },
|
126
|
-
'SHAKE-128': {
|
127
|
-
oid: (0, utils_1.hexToBytes)('060960864801650304020B'),
|
128
|
-
hash: (msg) => (0, sha3_1.shake128)(msg, { dkLen: 32 }),
|
129
|
-
},
|
130
|
-
'SHAKE-256': {
|
131
|
-
oid: (0, utils_1.hexToBytes)('060960864801650304020C'),
|
132
|
-
hash: (msg) => (0, sha3_1.shake256)(msg, { dkLen: 64 }),
|
133
|
-
},
|
134
|
-
};
|
135
|
-
function getMessagePrehash(hashName, msg, ctx = exports.EMPTY) {
|
136
|
-
(0, exports.ensureBytes)(msg);
|
137
|
-
(0, exports.ensureBytes)(ctx);
|
130
|
+
export function getMessagePrehash(hash, msg, ctx = EMPTY) {
|
131
|
+
abytes_(msg);
|
132
|
+
abytes_(ctx);
|
138
133
|
if (ctx.length > 255)
|
139
134
|
throw new Error('context should be less than 255 bytes');
|
140
|
-
if (!HASHES[hashName])
|
141
|
-
throw new Error('unknown hash: ' + hashName);
|
142
|
-
const { oid, hash } = HASHES[hashName];
|
143
135
|
const hashed = hash(msg);
|
144
|
-
return
|
136
|
+
return concatBytes(new Uint8Array([1, ctx.length]), ctx, hash.oid, hashed);
|
145
137
|
}
|
146
138
|
//# sourceMappingURL=utils.js.map
|
package/utils.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["src/utils.ts"],"names":[],"mappings":";;;
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["src/utils.ts"],"names":[],"mappings":"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"}
|
package/esm/_crystals.d.ts
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
import type { TypedArray } from '@noble/hashes/utils';
|
2
|
-
import { type BytesCoderLen, type Coder } from './utils.js';
|
3
|
-
export type XOF = (seed: Uint8Array, blockLen?: number) => {
|
4
|
-
stats: () => {
|
5
|
-
calls: number;
|
6
|
-
xofs: number;
|
7
|
-
};
|
8
|
-
get: (x: number, y: number) => () => Uint8Array;
|
9
|
-
clean: () => void;
|
10
|
-
};
|
11
|
-
/** CRYSTALS (ml-kem, ml-dsa) options */
|
12
|
-
export type CrystalOpts<T extends TypedArray> = {
|
13
|
-
newPoly: TypedCons<T>;
|
14
|
-
N: number;
|
15
|
-
Q: number;
|
16
|
-
F: number;
|
17
|
-
ROOT_OF_UNITY: number;
|
18
|
-
brvBits: number;
|
19
|
-
isKyber: boolean;
|
20
|
-
};
|
21
|
-
export type TypedCons<T extends TypedArray> = (n: number) => T;
|
22
|
-
export declare const genCrystals: <T extends TypedArray>(opts: CrystalOpts<T>) => {
|
23
|
-
mod: (a: number, modulo?: number) => number;
|
24
|
-
smod: (a: number, modulo?: number) => number;
|
25
|
-
nttZetas: T;
|
26
|
-
NTT: {
|
27
|
-
encode: (r: T) => T;
|
28
|
-
decode: (r: T) => T;
|
29
|
-
};
|
30
|
-
bitsCoder: (d: number, c: Coder<number, number>) => BytesCoderLen<T>;
|
31
|
-
};
|
32
|
-
export declare const XOF128: XOF;
|
33
|
-
export declare const XOF256: XOF;
|
34
|
-
//# sourceMappingURL=_crystals.d.ts.map
|
package/esm/_crystals.d.ts.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"_crystals.d.ts","sourceRoot":"","sources":["../src/_crystals.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,KAAK,EAAW,MAAM,YAAY,CAAC;AAErE,MAAM,MAAM,GAAG,GAAG,CAChB,IAAI,EAAE,UAAU,EAChB,QAAQ,CAAC,EAAE,MAAM,KACd;IACH,KAAK,EAAE,MAAM;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,UAAU,CAAC;IAChD,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AAEF,wCAAwC;AACxC,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,UAAU,IAAI;IAC9C,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,UAAU,IAAI,CAAC,CAAC,EAAE,MAAM,KAAK,CAAC,CAAC;AAU/D,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,UAAU,QACxC,WAAW,CAAC,CAAC,CAAC,KACnB;IACD,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C,QAAQ,EAAE,CAAC,CAAC;IACZ,GAAG,EAAE;QACH,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QACpB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;KACrB,CAAC;IACF,SAAS,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC;CA0FtE,CAAC;AAuCF,eAAO,MAAM,MAAM,EAAE,GAA8C,CAAC;AACpE,eAAO,MAAM,MAAM,EAAE,GAA8C,CAAC"}
|
package/esm/_crystals.js
DELETED
@@ -1,141 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Internal methods for lattice-based ML-KEM and ML-DSA.
|
3
|
-
* @module
|
4
|
-
*/
|
5
|
-
/*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) */
|
6
|
-
import { shake128, shake256 } from '@noble/hashes/sha3';
|
7
|
-
import { getMask } from './utils.js';
|
8
|
-
// TODO: benchmark
|
9
|
-
function bitReversal(n, bits = 8) {
|
10
|
-
const padded = n.toString(2).padStart(8, '0');
|
11
|
-
const sliced = padded.slice(-bits).padStart(7, '0');
|
12
|
-
const revrsd = sliced.split('').reverse().join('');
|
13
|
-
return Number.parseInt(revrsd, 2);
|
14
|
-
}
|
15
|
-
export const genCrystals = (opts) => {
|
16
|
-
// isKyber: true means Kyber, false means Dilithium
|
17
|
-
const { newPoly, N, Q, F, ROOT_OF_UNITY, brvBits, isKyber } = opts;
|
18
|
-
const mod = (a, modulo = Q) => {
|
19
|
-
const result = a % modulo | 0;
|
20
|
-
return (result >= 0 ? result | 0 : (modulo + result) | 0) | 0;
|
21
|
-
};
|
22
|
-
// -(Q-1)/2 < a <= (Q-1)/2
|
23
|
-
const smod = (a, modulo = Q) => {
|
24
|
-
const r = mod(a, modulo) | 0;
|
25
|
-
return (r > modulo >> 1 ? (r - modulo) | 0 : r) | 0;
|
26
|
-
};
|
27
|
-
// Generate zettas
|
28
|
-
function getZettas() {
|
29
|
-
const out = newPoly(N);
|
30
|
-
for (let i = 0; i < N; i++) {
|
31
|
-
const b = bitReversal(i, brvBits);
|
32
|
-
const p = BigInt(ROOT_OF_UNITY) ** BigInt(b) % BigInt(Q);
|
33
|
-
out[i] = Number(p) | 0;
|
34
|
-
}
|
35
|
-
return out;
|
36
|
-
}
|
37
|
-
const nttZetas = getZettas();
|
38
|
-
// Number-Theoretic Transform
|
39
|
-
// Explained: https://electricdusk.com/ntt.html
|
40
|
-
// Kyber has slightly different params, since there is no 512th primitive root of unity mod q,
|
41
|
-
// only 256th primitive root of unity mod. Which also complicates MultiplyNTT.
|
42
|
-
// TODO: there should be less ugly way to define this.
|
43
|
-
const LEN1 = isKyber ? 128 : N;
|
44
|
-
const LEN2 = isKyber ? 1 : 0;
|
45
|
-
const NTT = {
|
46
|
-
encode: (r) => {
|
47
|
-
for (let k = 1, len = 128; len > LEN2; len >>= 1) {
|
48
|
-
for (let start = 0; start < N; start += 2 * len) {
|
49
|
-
const zeta = nttZetas[k++];
|
50
|
-
for (let j = start; j < start + len; j++) {
|
51
|
-
const t = mod(zeta * r[j + len]);
|
52
|
-
r[j + len] = mod(r[j] - t) | 0;
|
53
|
-
r[j] = mod(r[j] + t) | 0;
|
54
|
-
}
|
55
|
-
}
|
56
|
-
}
|
57
|
-
return r;
|
58
|
-
},
|
59
|
-
decode: (r) => {
|
60
|
-
for (let k = LEN1 - 1, len = 1 + LEN2; len < LEN1 + LEN2; len <<= 1) {
|
61
|
-
for (let start = 0; start < N; start += 2 * len) {
|
62
|
-
const zeta = nttZetas[k--];
|
63
|
-
for (let j = start; j < start + len; j++) {
|
64
|
-
const t = r[j];
|
65
|
-
r[j] = mod(t + r[j + len]);
|
66
|
-
r[j + len] = mod(zeta * (r[j + len] - t));
|
67
|
-
}
|
68
|
-
}
|
69
|
-
}
|
70
|
-
for (let i = 0; i < r.length; i++)
|
71
|
-
r[i] = mod(F * r[i]);
|
72
|
-
return r;
|
73
|
-
},
|
74
|
-
};
|
75
|
-
// Encode polynominal as bits
|
76
|
-
const bitsCoder = (d, c) => {
|
77
|
-
const mask = getMask(d);
|
78
|
-
const bytesLen = d * (N / 8);
|
79
|
-
return {
|
80
|
-
bytesLen,
|
81
|
-
encode: (poly) => {
|
82
|
-
const r = new Uint8Array(bytesLen);
|
83
|
-
for (let i = 0, buf = 0, bufLen = 0, pos = 0; i < poly.length; i++) {
|
84
|
-
buf |= (c.encode(poly[i]) & mask) << bufLen;
|
85
|
-
bufLen += d;
|
86
|
-
for (; bufLen >= 8; bufLen -= 8, buf >>= 8)
|
87
|
-
r[pos++] = buf & getMask(bufLen);
|
88
|
-
}
|
89
|
-
return r;
|
90
|
-
},
|
91
|
-
decode: (bytes) => {
|
92
|
-
const r = newPoly(N);
|
93
|
-
for (let i = 0, buf = 0, bufLen = 0, pos = 0; i < bytes.length; i++) {
|
94
|
-
buf |= bytes[i] << bufLen;
|
95
|
-
bufLen += 8;
|
96
|
-
for (; bufLen >= d; bufLen -= d, buf >>= d)
|
97
|
-
r[pos++] = c.decode(buf & mask);
|
98
|
-
}
|
99
|
-
return r;
|
100
|
-
},
|
101
|
-
};
|
102
|
-
};
|
103
|
-
return { mod, smod, nttZetas, NTT, bitsCoder };
|
104
|
-
};
|
105
|
-
const createXofShake = (shake) => (seed, blockLen) => {
|
106
|
-
if (!blockLen)
|
107
|
-
blockLen = shake.blockLen;
|
108
|
-
// Optimizations that won't mater:
|
109
|
-
// - cached seed update (two .update(), on start and on the end)
|
110
|
-
// - another cache which cloned into working copy
|
111
|
-
// Faster than multiple updates, since seed less than blockLen
|
112
|
-
const _seed = new Uint8Array(seed.length + 2);
|
113
|
-
_seed.set(seed);
|
114
|
-
const seedLen = seed.length;
|
115
|
-
const buf = new Uint8Array(blockLen); // == shake128.blockLen
|
116
|
-
let h = shake.create({});
|
117
|
-
let calls = 0;
|
118
|
-
let xofs = 0;
|
119
|
-
return {
|
120
|
-
stats: () => ({ calls, xofs }),
|
121
|
-
get: (x, y) => {
|
122
|
-
_seed[seedLen + 0] = x;
|
123
|
-
_seed[seedLen + 1] = y;
|
124
|
-
h.destroy();
|
125
|
-
h = shake.create({}).update(_seed);
|
126
|
-
calls++;
|
127
|
-
return () => {
|
128
|
-
xofs++;
|
129
|
-
return h.xofInto(buf);
|
130
|
-
};
|
131
|
-
},
|
132
|
-
clean: () => {
|
133
|
-
h.destroy();
|
134
|
-
buf.fill(0);
|
135
|
-
_seed.fill(0);
|
136
|
-
},
|
137
|
-
};
|
138
|
-
};
|
139
|
-
export const XOF128 = /* @__PURE__ */ createXofShake(shake128);
|
140
|
-
export const XOF256 = /* @__PURE__ */ createXofShake(shake256);
|
141
|
-
//# sourceMappingURL=_crystals.js.map
|
package/esm/_crystals.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"_crystals.js","sourceRoot":"","sources":["../src/_crystals.ts"],"names":[],"mappings":"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"}
|
package/esm/index.d.ts
DELETED
package/esm/index.d.ts.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/esm/index.js
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Auditable & minimal JS implementation of post-quantum public-key cryptography.
|
3
|
-
* Check out individual modules.
|
4
|
-
* @module
|
5
|
-
* @example
|
6
|
-
```js
|
7
|
-
import { ml_kem512, ml_kem768, ml_kem1024 } from '@noble/post-quantum/ml-kem';
|
8
|
-
import { ml_dsa44, ml_dsa65, ml_dsa87 } from '@noble/post-quantum/ml-dsa';
|
9
|
-
import {
|
10
|
-
slh_dsa_sha2_128f, slh_dsa_sha2_128s,
|
11
|
-
slh_dsa_sha2_192f, slh_dsa_sha2_192s,
|
12
|
-
slh_dsa_sha2_256f, slh_dsa_sha2_256s,
|
13
|
-
slh_dsa_shake_128f, slh_dsa_shake_128s,
|
14
|
-
slh_dsa_shake_192f, slh_dsa_shake_192s,
|
15
|
-
slh_dsa_shake_256f, slh_dsa_shake_256s,
|
16
|
-
} from '@noble/post-quantum/slh-dsa';
|
17
|
-
```
|
18
|
-
*/
|
19
|
-
throw new Error('root module cannot be imported: import submodules instead. Check out README');
|
20
|
-
export {};
|
21
|
-
//# sourceMappingURL=index.js.map
|
package/esm/index.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC"}
|
package/esm/ml-dsa.d.ts
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
import { type Signer } from './utils.js';
|
2
|
-
/** Various lattice params. */
|
3
|
-
export type DSAParam = {
|
4
|
-
K: number;
|
5
|
-
L: number;
|
6
|
-
D: number;
|
7
|
-
GAMMA1: number;
|
8
|
-
GAMMA2: number;
|
9
|
-
TAU: number;
|
10
|
-
ETA: number;
|
11
|
-
OMEGA: number;
|
12
|
-
};
|
13
|
-
/** Internal params for different versions of ML-DSA */
|
14
|
-
export declare const PARAMS: Record<string, DSAParam>;
|
15
|
-
/** Signer API, containing internal methods */
|
16
|
-
export type SignerWithInternal = Signer & {
|
17
|
-
internal: Signer;
|
18
|
-
};
|
19
|
-
/** ML-DSA-44 for 128-bit security level. Not recommended after 2030, as per ASD. */
|
20
|
-
export declare const ml_dsa44: SignerWithInternal;
|
21
|
-
/** ML-DSA-65 for 192-bit security level. Not recommended after 2030, as per ASD. */
|
22
|
-
export declare const ml_dsa65: SignerWithInternal;
|
23
|
-
/** ML-DSA-87 for 256-bit security level. OK after 2030, as per ASD. */
|
24
|
-
export declare const ml_dsa87: SignerWithInternal;
|
25
|
-
//# sourceMappingURL=ml-dsa.d.ts.map
|
package/esm/ml-dsa.d.ts.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"ml-dsa.d.ts","sourceRoot":"","sources":["../src/ml-dsa.ts"],"names":[],"mappings":"AAYA,OAAO,EASL,KAAK,MAAM,EAGZ,MAAM,YAAY,CAAC;AAgBpB,8BAA8B;AAC9B,MAAM,MAAM,QAAQ,GAAG;IACrB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AACF,wDAAwD;AAExD,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAIlC,CAAC;AA+dX,8CAA8C;AAC9C,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/D,oFAAoF;AACpF,eAAO,MAAM,QAAQ,EAAE,kBAOrB,CAAC;AAEH,oFAAoF;AACpF,eAAO,MAAM,QAAQ,EAAE,kBAOrB,CAAC;AAEH,uEAAuE;AACvE,eAAO,MAAM,QAAQ,EAAE,kBAOrB,CAAC"}
|