@noble/post-quantum 0.5.4 → 0.6.1
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 +86 -42
- package/_crystals.d.ts +90 -4
- package/_crystals.d.ts.map +1 -1
- package/_crystals.js +77 -6
- package/_crystals.js.map +1 -1
- package/falcon.d.ts +84 -0
- package/falcon.d.ts.map +1 -0
- package/falcon.js +2385 -0
- package/falcon.js.map +1 -0
- package/hybrid.d.ts +194 -24
- package/hybrid.d.ts.map +1 -1
- package/hybrid.js +401 -77
- package/hybrid.js.map +1 -1
- package/index.js +8 -0
- package/index.js.map +1 -1
- package/ml-dsa.d.ts +29 -8
- package/ml-dsa.d.ts.map +1 -1
- package/ml-dsa.js +154 -78
- package/ml-dsa.js.map +1 -1
- package/ml-kem.d.ts +31 -7
- package/ml-kem.d.ts.map +1 -1
- package/ml-kem.js +194 -75
- package/ml-kem.js.map +1 -1
- package/package.json +15 -8
- package/slh-dsa.d.ts +137 -34
- package/slh-dsa.d.ts.map +1 -1
- package/slh-dsa.js +189 -68
- package/slh-dsa.js.map +1 -1
- package/src/_crystals.ts +135 -24
- package/src/falcon.ts +2503 -0
- package/src/hybrid.ts +515 -144
- package/src/index.ts +8 -0
- package/src/ml-dsa.ts +263 -138
- package/src/ml-kem.ts +240 -97
- package/src/slh-dsa.ts +391 -153
- package/src/utils.ts +491 -46
- package/utils.d.ts +362 -24
- package/utils.d.ts.map +1 -1
- package/utils.js +273 -20
- package/utils.js.map +1 -1
package/slh-dsa.js
CHANGED
|
@@ -33,14 +33,25 @@ import { shake256 } from '@noble/hashes/sha3.js';
|
|
|
33
33
|
import { bytesToHex, concatBytes, createView, hexToBytes, } from '@noble/hashes/utils.js';
|
|
34
34
|
import { abytes, checkHash, cleanBytes, copyBytes, equalBytes, getMask, getMessage, getMessagePrehash, randomBytes, splitCoder, validateSigOpts, validateVerOpts, vecCoder, } from "./utils.js";
|
|
35
35
|
/** Winternitz signature params. */
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
36
|
+
/**
|
|
37
|
+
* Built-in SLH-DSA Table 2 subset keyed by strength/profile.
|
|
38
|
+
* SHA2 and SHAKE pairs share the same numeric rows here, so the hash family is chosen separately.
|
|
39
|
+
* `securityLevel` stores 128/192/256-bit strengths for `checkHash(...)`,
|
|
40
|
+
* not Table 2's category labels 1/3/5.
|
|
41
|
+
* Other Table 2 columns such as `m`, public-key bytes, and signature bytes
|
|
42
|
+
* stay derived at the export layer.
|
|
43
|
+
*/
|
|
44
|
+
export const PARAMS = /* @__PURE__ */ (() => Object.freeze({
|
|
45
|
+
'128f': Object.freeze({ W: 16, N: 16, H: 66, D: 22, K: 33, A: 6, securityLevel: 128 }),
|
|
46
|
+
'128s': Object.freeze({ W: 16, N: 16, H: 63, D: 7, K: 14, A: 12, securityLevel: 128 }),
|
|
47
|
+
'192f': Object.freeze({ W: 16, N: 24, H: 66, D: 22, K: 33, A: 8, securityLevel: 192 }),
|
|
48
|
+
'192s': Object.freeze({ W: 16, N: 24, H: 63, D: 7, K: 17, A: 14, securityLevel: 192 }),
|
|
49
|
+
'256f': Object.freeze({ W: 16, N: 32, H: 68, D: 17, K: 35, A: 9, securityLevel: 256 }),
|
|
50
|
+
'256s': Object.freeze({ W: 16, N: 32, H: 64, D: 8, K: 22, A: 14, securityLevel: 256 }),
|
|
51
|
+
}))();
|
|
52
|
+
// FIPS 205 `ADRS.setTypeAndClear(...)` selectors. Local names shorten the spec labels
|
|
53
|
+
// (`WOTS_HASH` -> `WOTS`, `TREE` -> `HASHTREE`, `FORS_ROOTS` -> `FORSPK`), and `setAddr({ type })`
|
|
54
|
+
// below only writes the type word; callers still need to preserve or overwrite the trailing words.
|
|
44
55
|
const AddressType = {
|
|
45
56
|
WOTS: 0,
|
|
46
57
|
WOTSPK: 1,
|
|
@@ -55,14 +66,17 @@ function hexToNumber(hex) {
|
|
|
55
66
|
throw new Error('hex string expected, got ' + typeof hex);
|
|
56
67
|
return BigInt(hex === '' ? '0' : '0x' + hex); // Big Endian
|
|
57
68
|
}
|
|
58
|
-
// BE: Big Endian, LE: Little Endian
|
|
69
|
+
// BE: Big Endian, LE: Little Endian. This is the local FIPS 205 `toInt(...)` equivalent.
|
|
59
70
|
function bytesToNumberBE(bytes) {
|
|
60
71
|
return hexToNumber(bytesToHex(bytes));
|
|
61
72
|
}
|
|
73
|
+
// Local in-range FIPS 205 `toByte(x, n)` equivalent; callers must keep `n < 256^len`.
|
|
62
74
|
function numberToBytesBE(n, len) {
|
|
63
75
|
return hexToBytes(n.toString(16).padStart(len * 2, '0'));
|
|
64
76
|
}
|
|
65
|
-
//
|
|
77
|
+
// Local FIPS 205 Algorithm 4 `base_2^b(...)` implementation. Bits are consumed in big-endian
|
|
78
|
+
// order within each input byte, and callers must provide at least `ceil(outLen * b / 8)` bytes;
|
|
79
|
+
// short inputs are not rejected and would zero-extend implicitly.
|
|
66
80
|
const base2b = (outLen, b) => {
|
|
67
81
|
const mask = getMask(b);
|
|
68
82
|
return (bytes) => {
|
|
@@ -81,7 +95,13 @@ const base2b = (outLen, b) => {
|
|
|
81
95
|
function getMaskBig(bits) {
|
|
82
96
|
return (1n << BigInt(bits)) - 1n; // 4 -> 0b1111
|
|
83
97
|
}
|
|
84
|
-
|
|
98
|
+
/** One parameter/hash instantiation of the public SLH-DSA API.
|
|
99
|
+
* `keygen(seed)` is a deterministic 3N-byte library hook around the internal keygen flow,
|
|
100
|
+
* and `getPublicKey(secretKey)` only extracts the embedded public key
|
|
101
|
+
* instead of recomputing `PK.root`.
|
|
102
|
+
*/
|
|
103
|
+
function gen(opts, hashOpts_) {
|
|
104
|
+
const hashOpts = hashOpts_;
|
|
85
105
|
const { N, W, H, D, K, A, securityLevel: securityLevel } = opts;
|
|
86
106
|
const getContext = hashOpts.getContext(opts);
|
|
87
107
|
if (W !== 16)
|
|
@@ -111,6 +131,11 @@ function gen(opts, hashOpts) {
|
|
|
111
131
|
OFFSET_TREE_INDEX += 10;
|
|
112
132
|
OFFSET_HASH_ADDR += 10;
|
|
113
133
|
}
|
|
134
|
+
// Mutates and returns `addr` in place. For the built-in parameter sets, the layer / chain /
|
|
135
|
+
// hash / height / keypair values fit in the low byte(s), and the tree value fits in 64 bits,
|
|
136
|
+
// so the untouched leading bytes in the wider FIPS 205 ADRS / ADRS_c fields stay zero.
|
|
137
|
+
// `height` / `chain` and `index` / `hash` share the same spec words, so callers must use the
|
|
138
|
+
// address-type-specific combinations instead of mixing both meanings in one call.
|
|
114
139
|
const setAddr = (opts, addr = new Uint8Array(ADDR_BYTES)) => {
|
|
115
140
|
const { type, height, tree, layer, index, chain, hash, keypair } = opts;
|
|
116
141
|
const { subtreeAddr, keypairAddr } = opts;
|
|
@@ -150,7 +175,8 @@ function gen(opts, hashOpts) {
|
|
|
150
175
|
let csum = 0;
|
|
151
176
|
for (let i = 0; i < W1.length; i++)
|
|
152
177
|
csum += W - 1 - W1[i]; // ▷ Compute checksum
|
|
153
|
-
|
|
178
|
+
// csum ← csum ≪ ((8 − ((len2 · lg(w)) mod 8)) mod 8
|
|
179
|
+
csum <<= (8 - ((WOTS_LEN2 * WOTS_LOGW) % 8)) % 8;
|
|
154
180
|
// Checksum to base(LOG_W)
|
|
155
181
|
const W2 = chainCoder(numberToBytesBE(csum, Math.ceil((WOTS_LEN2 * WOTS_LOGW) / 8)));
|
|
156
182
|
// W1 || W2 (concatBytes cannot concat TypedArrays)
|
|
@@ -163,14 +189,23 @@ function gen(opts, hashOpts) {
|
|
|
163
189
|
const TREE_BITS = TREE_HEIGHT * (D - 1);
|
|
164
190
|
const LEAF_BITS = TREE_HEIGHT;
|
|
165
191
|
const hashMsgCoder = splitCoder('hashedMessage', Math.ceil((A * K) / 8), Math.ceil(TREE_BITS / 8), Math.ceil(TREE_HEIGHT / 8));
|
|
192
|
+
// `pkSeed` is the full public key byte string `PK.seed || PK.root`; after splitting `Hmsg`,
|
|
193
|
+
// mask away any spare high bits so `idx_tree` / `idx_leaf` match the spec's final mod-2^k steps.
|
|
166
194
|
const hashMessage = (R, pkSeed, msg, context) => {
|
|
167
|
-
const
|
|
195
|
+
const rawContext = context;
|
|
196
|
+
// digest ← Hmsg(R, PK.seed, PK.root, M)
|
|
197
|
+
const digest = rawContext.Hmsg(R, pkSeed, msg, hashMsgCoder.bytesLen);
|
|
168
198
|
const [md, tmpIdxTree, tmpIdxLeaf] = hashMsgCoder.decode(digest);
|
|
169
199
|
const tree = bytesToNumberBE(tmpIdxTree) & getMaskBig(TREE_BITS);
|
|
170
200
|
const leafIdx = Number(bytesToNumberBE(tmpIdxLeaf)) & getMask(LEAF_BITS);
|
|
171
201
|
return { tree, leafIdx, md };
|
|
172
202
|
};
|
|
203
|
+
// Iterative `xmss_node` / `xmss_sign` core: mutate `treeAddr` in place, collapse completed
|
|
204
|
+
// sibling pairs on `stack`, and record the sibling whenever the current subtree is the auth-path
|
|
205
|
+
// neighbor of the target leaf at that height.
|
|
173
206
|
const treehash = (height, fn) => function treehash_i(context, leafIdx, idxOffset, treeAddr, info) {
|
|
207
|
+
const rawContext = context;
|
|
208
|
+
const leafFn = fn;
|
|
174
209
|
const maxIdx = (1 << height) - 1;
|
|
175
210
|
const stack = new Uint8Array(height * N);
|
|
176
211
|
const authPath = new Uint8Array(height * N);
|
|
@@ -179,7 +214,7 @@ function gen(opts, hashOpts) {
|
|
|
179
214
|
const cur0 = current.subarray(0, N);
|
|
180
215
|
const cur1 = current.subarray(N);
|
|
181
216
|
const addrOffset = idx + idxOffset;
|
|
182
|
-
cur1.set(
|
|
217
|
+
cur1.set(leafFn(leafIdx, addrOffset, rawContext, info));
|
|
183
218
|
let h = 0;
|
|
184
219
|
for (let i = idx, o = idxOffset, l = leafIdx;; h++, i >>>= 1, l >>>= 1, o >>>= 1) {
|
|
185
220
|
if (h === height)
|
|
@@ -190,7 +225,7 @@ function gen(opts, hashOpts) {
|
|
|
190
225
|
break;
|
|
191
226
|
setAddr({ height: h + 1, index: (i >> 1) + (o >> 1) }, treeAddr);
|
|
192
227
|
cur0.set(stack.subarray(h * N).subarray(0, N));
|
|
193
|
-
cur1.set(
|
|
228
|
+
cur1.set(rawContext.thashN(2, current, treeAddr));
|
|
194
229
|
}
|
|
195
230
|
stack.subarray(h * N).set(cur1); // stack.push(cur1)
|
|
196
231
|
}
|
|
@@ -198,7 +233,10 @@ function gen(opts, hashOpts) {
|
|
|
198
233
|
throw new Error('Unreachable code path reached, report this error');
|
|
199
234
|
};
|
|
200
235
|
const wotsTreehash = treehash(TREE_HEIGHT, (leafIdx, addrOffset, context, info) => {
|
|
236
|
+
const rawContext = context;
|
|
201
237
|
const wotsPk = new Uint8Array(WOTS_LEN * N);
|
|
238
|
+
// `keygen()` passes `leafIdx = ~0 >>> 0`, so no real XMSS leaf matches and this suppresses
|
|
239
|
+
// WOTS signature capture while still hashing every chain to its public-key endpoint.
|
|
202
240
|
const wotsKmask = addrOffset === leafIdx ? 0 : ~0 >>> 0;
|
|
203
241
|
setAddr({ keypair: addrOffset }, info.leafAddr);
|
|
204
242
|
setAddr({ keypair: addrOffset }, info.pkAddr);
|
|
@@ -206,7 +244,7 @@ function gen(opts, hashOpts) {
|
|
|
206
244
|
const wotsK = info.wotsSteps[i] | wotsKmask;
|
|
207
245
|
const pk = wotsPk.subarray(i * N, (i + 1) * N);
|
|
208
246
|
setAddr({ chain: i, hash: 0, type: AddressType.WOTSPRF }, info.leafAddr);
|
|
209
|
-
pk.set(
|
|
247
|
+
pk.set(rawContext.PRFaddr(info.leafAddr));
|
|
210
248
|
setAddr({ type: AddressType.WOTS }, info.leafAddr);
|
|
211
249
|
for (let k = 0;; k++) {
|
|
212
250
|
if (k === wotsK)
|
|
@@ -214,17 +252,20 @@ function gen(opts, hashOpts) {
|
|
|
214
252
|
if (k === W - 1)
|
|
215
253
|
break;
|
|
216
254
|
setAddr({ hash: k }, info.leafAddr);
|
|
217
|
-
pk.set(
|
|
255
|
+
pk.set(rawContext.thash1(pk, info.leafAddr));
|
|
218
256
|
}
|
|
219
257
|
}
|
|
220
|
-
return
|
|
258
|
+
return rawContext.thashN(WOTS_LEN, wotsPk, info.pkAddr);
|
|
221
259
|
});
|
|
222
260
|
const forsTreehash = treehash(A, (_, addrOffset, context, forsLeafAddr) => {
|
|
261
|
+
const rawContext = context;
|
|
223
262
|
setAddr({ type: AddressType.FORSPRF, index: addrOffset }, forsLeafAddr);
|
|
224
|
-
const prf =
|
|
263
|
+
const prf = rawContext.PRFaddr(forsLeafAddr);
|
|
225
264
|
setAddr({ type: AddressType.FORSTREE }, forsLeafAddr);
|
|
226
|
-
return
|
|
265
|
+
return rawContext.thash1(prf, forsLeafAddr);
|
|
227
266
|
});
|
|
267
|
+
// Fuse `xmss_sign` with the subtree-root computation needed by `ht_sign`, so one tree walk
|
|
268
|
+
// yields both the WOTS/auth-path signature and the root that the next hypertree layer signs.
|
|
228
269
|
const merkleSign = (context, wotsAddr, treeAddr, leafIdx, prevRoot = new Uint8Array(N)) => {
|
|
229
270
|
setAddr({ type: AddressType.HASHTREE }, treeAddr);
|
|
230
271
|
// State variables
|
|
@@ -242,9 +283,14 @@ function gen(opts, hashOpts) {
|
|
|
242
283
|
};
|
|
243
284
|
};
|
|
244
285
|
const computeRoot = (leaf, leafIdx, idxOffset, authPath, treeHeight, context, addr) => {
|
|
286
|
+
const rawContext = context;
|
|
245
287
|
const buffer = new Uint8Array(2 * N);
|
|
246
288
|
const b0 = buffer.subarray(0, N);
|
|
247
289
|
const b1 = buffer.subarray(N, 2 * N);
|
|
290
|
+
// Algorithm 11 hashes `node || AUTH[k]` for even nodes and `AUTH[k] || node` for odd ones,
|
|
291
|
+
// so reuse one `2N` buffer and just swap which half receives the sibling at each level.
|
|
292
|
+
// `idxOffset` carries the subtree base for the shared FORS path, so `leafIdx + idxOffset`
|
|
293
|
+
// tracks the same tree-global index updates that Algorithms 11 and 17 apply to ADRS.
|
|
248
294
|
// First iter
|
|
249
295
|
if ((leafIdx & 1) !== 0) {
|
|
250
296
|
b1.set(leaf.subarray(0, N));
|
|
@@ -261,17 +307,17 @@ function gen(opts, hashOpts) {
|
|
|
261
307
|
setAddr({ height: i + 1, index: leafIdx + idxOffset }, addr);
|
|
262
308
|
const a = authPath.subarray((i + 1) * N, (i + 2) * N);
|
|
263
309
|
if ((leafIdx & 1) !== 0) {
|
|
264
|
-
b1.set(
|
|
310
|
+
b1.set(rawContext.thashN(2, buffer, addr));
|
|
265
311
|
b0.set(a);
|
|
266
312
|
}
|
|
267
313
|
else {
|
|
268
|
-
buffer.set(
|
|
314
|
+
buffer.set(rawContext.thashN(2, buffer, addr));
|
|
269
315
|
b1.set(a);
|
|
270
316
|
}
|
|
271
317
|
}
|
|
272
318
|
// Root
|
|
273
319
|
setAddr({ height: treeHeight, index: leafIdx + idxOffset }, addr);
|
|
274
|
-
return
|
|
320
|
+
return rawContext.thashN(2, buffer, addr);
|
|
275
321
|
};
|
|
276
322
|
const seedCoder = splitCoder('seed', N, N, N);
|
|
277
323
|
const publicCoder = splitCoder('publicKey', N, N);
|
|
@@ -279,15 +325,15 @@ function gen(opts, hashOpts) {
|
|
|
279
325
|
const forsCoder = vecCoder(splitCoder('fors', N, N * A), K);
|
|
280
326
|
const wotsCoder = vecCoder(splitCoder('wots', WOTS_LEN * N, TREE_HEIGHT * N), D);
|
|
281
327
|
const sigCoder = splitCoder('signature', N, forsCoder, wotsCoder); // random || fors || wots
|
|
282
|
-
const internal = {
|
|
283
|
-
info: { type: 'internal-slh-dsa' },
|
|
284
|
-
lengths: {
|
|
328
|
+
const internal = Object.freeze({
|
|
329
|
+
info: Object.freeze({ type: 'internal-slh-dsa' }),
|
|
330
|
+
lengths: Object.freeze({
|
|
285
331
|
publicKey: publicCoder.bytesLen,
|
|
286
332
|
secretKey: secretCoder.bytesLen,
|
|
287
333
|
signature: sigCoder.bytesLen,
|
|
288
334
|
seed: seedCoder.bytesLen,
|
|
289
335
|
signRand: N,
|
|
290
|
-
},
|
|
336
|
+
}),
|
|
291
337
|
keygen(seed) {
|
|
292
338
|
if (seed !== undefined)
|
|
293
339
|
abytes(seed, seedCoder.bytesLen, 'seed');
|
|
@@ -304,7 +350,10 @@ function gen(opts, hashOpts) {
|
|
|
304
350
|
const secretKey = secretCoder.encode([secretSeed, secretPRF, publicKey]);
|
|
305
351
|
context.clean();
|
|
306
352
|
cleanBytes(secretSeed, secretPRF, root, wotsAddr, topTreeAddr);
|
|
307
|
-
return {
|
|
353
|
+
return {
|
|
354
|
+
publicKey: publicKey,
|
|
355
|
+
secretKey: secretKey,
|
|
356
|
+
};
|
|
308
357
|
},
|
|
309
358
|
getPublicKey: (secretKey) => {
|
|
310
359
|
const [_skSeed, _skPRF, pk] = secretCoder.decode(secretKey);
|
|
@@ -433,9 +482,9 @@ function gen(opts, hashOpts) {
|
|
|
433
482
|
}
|
|
434
483
|
return equalBytes(root, pubRoot);
|
|
435
484
|
},
|
|
436
|
-
};
|
|
437
|
-
return {
|
|
438
|
-
info: { type: 'slh-dsa' },
|
|
485
|
+
});
|
|
486
|
+
return Object.freeze({
|
|
487
|
+
info: Object.freeze({ type: 'slh-dsa' }),
|
|
439
488
|
internal,
|
|
440
489
|
securityLevel: securityLevel,
|
|
441
490
|
lengths: internal.lengths,
|
|
@@ -454,29 +503,34 @@ function gen(opts, hashOpts) {
|
|
|
454
503
|
},
|
|
455
504
|
prehash: (hash) => {
|
|
456
505
|
checkHash(hash, securityLevel);
|
|
457
|
-
|
|
458
|
-
|
|
506
|
+
const rawHash = hash;
|
|
507
|
+
return Object.freeze({
|
|
508
|
+
info: Object.freeze({ type: 'hashslh-dsa' }),
|
|
459
509
|
lengths: internal.lengths,
|
|
460
510
|
keygen: internal.keygen,
|
|
461
511
|
getPublicKey: internal.getPublicKey,
|
|
462
512
|
sign: (msg, secretKey, opts = {}) => {
|
|
463
513
|
validateSigOpts(opts);
|
|
464
|
-
const M = getMessagePrehash(
|
|
514
|
+
const M = getMessagePrehash(rawHash, msg, opts.context);
|
|
465
515
|
const res = internal.sign(M, secretKey, opts);
|
|
466
516
|
cleanBytes(M);
|
|
467
517
|
return res;
|
|
468
518
|
},
|
|
469
519
|
verify: (sig, msg, publicKey, opts = {}) => {
|
|
470
520
|
validateVerOpts(opts);
|
|
471
|
-
return internal.verify(sig, getMessagePrehash(
|
|
521
|
+
return internal.verify(sig, getMessagePrehash(rawHash, msg, opts.context), publicKey);
|
|
472
522
|
},
|
|
473
|
-
};
|
|
523
|
+
});
|
|
474
524
|
},
|
|
475
|
-
};
|
|
525
|
+
});
|
|
476
526
|
}
|
|
527
|
+
// FIPS 205 §11.1 SHAKE instantiation: this path hashes the full uncompressed address bytes,
|
|
528
|
+
// unlike the compressed 22-byte SHA2 path in §11.2.
|
|
477
529
|
const genShake = () => (opts) => (pubSeed, skSeed) => {
|
|
478
530
|
const { N } = opts;
|
|
479
531
|
const stats = { prf: 0, thash: 0, hmsg: 0, gen_message_random: 0 };
|
|
532
|
+
// §11.1 prefixes PRF/F/H/T_l with `PK.seed`, so cache that absorbed prefix once and clone it
|
|
533
|
+
// for each address-bound call instead of reabsorbing the same seed every time.
|
|
480
534
|
const h0 = shake256.create({}).update(pubSeed);
|
|
481
535
|
const h0tmp = h0.clone();
|
|
482
536
|
const thash = (blocks, input, addr) => {
|
|
@@ -497,7 +551,13 @@ const genShake = () => (opts) => (pubSeed, skSeed) => {
|
|
|
497
551
|
},
|
|
498
552
|
PRFmsg: (skPRF, random, msg) => {
|
|
499
553
|
stats.gen_message_random++;
|
|
500
|
-
return shake256
|
|
554
|
+
return shake256
|
|
555
|
+
.create({})
|
|
556
|
+
.update(skPRF)
|
|
557
|
+
.update(random)
|
|
558
|
+
.update(msg)
|
|
559
|
+
.digest()
|
|
560
|
+
.subarray(0, N);
|
|
501
561
|
},
|
|
502
562
|
Hmsg: (R, pk, m, outLen) => {
|
|
503
563
|
stats.hmsg++;
|
|
@@ -512,19 +572,46 @@ const genShake = () => (opts) => (pubSeed, skSeed) => {
|
|
|
512
572
|
},
|
|
513
573
|
};
|
|
514
574
|
};
|
|
515
|
-
const SHAKE_SIMPLE = { getContext: genShake() };
|
|
516
|
-
/**
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
export const
|
|
522
|
-
/**
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
export const
|
|
575
|
+
const SHAKE_SIMPLE = /* @__PURE__ */ (() => ({ getContext: genShake() }))();
|
|
576
|
+
/**
|
|
577
|
+
* SLH-DSA-SHAKE-128f: Table 2 row `n=16, h=66, d=22, h'=3, a=6, k=33, lg w=4, m=34`;
|
|
578
|
+
* lengths `publicKey=32`, `secretKey=64`, `signature=17088`, `seed=48`, `signRand=16`.
|
|
579
|
+
* Also exposes `.prehash(...)`.
|
|
580
|
+
*/
|
|
581
|
+
export const slh_dsa_shake_128f = /* @__PURE__ */ (() => gen(PARAMS['128f'], SHAKE_SIMPLE))();
|
|
582
|
+
/**
|
|
583
|
+
* SLH-DSA-SHAKE-128s: Table 2 row `n=16, h=63, d=7, h'=9, a=12, k=14, lg w=4, m=30`;
|
|
584
|
+
* lengths `publicKey=32`, `secretKey=64`, `signature=7856`, `seed=48`, `signRand=16`.
|
|
585
|
+
* Also exposes `.prehash(...)`.
|
|
586
|
+
*/
|
|
587
|
+
export const slh_dsa_shake_128s = /* @__PURE__ */ (() => gen(PARAMS['128s'], SHAKE_SIMPLE))();
|
|
588
|
+
/**
|
|
589
|
+
* SLH-DSA-SHAKE-192f: Table 2 row `n=24, h=66, d=22, h'=3, a=8, k=33, lg w=4, m=42`;
|
|
590
|
+
* lengths `publicKey=48`, `secretKey=96`, `signature=35664`, `seed=72`, `signRand=24`.
|
|
591
|
+
* Also exposes `.prehash(...)`.
|
|
592
|
+
*/
|
|
593
|
+
export const slh_dsa_shake_192f = /* @__PURE__ */ (() => gen(PARAMS['192f'], SHAKE_SIMPLE))();
|
|
594
|
+
/**
|
|
595
|
+
* SLH-DSA-SHAKE-192s: Table 2 row `n=24, h=63, d=7, h'=9, a=14, k=17, lg w=4, m=39`;
|
|
596
|
+
* lengths `publicKey=48`, `secretKey=96`, `signature=16224`, `seed=72`, `signRand=24`.
|
|
597
|
+
* Also exposes `.prehash(...)`.
|
|
598
|
+
*/
|
|
599
|
+
export const slh_dsa_shake_192s = /* @__PURE__ */ (() => gen(PARAMS['192s'], SHAKE_SIMPLE))();
|
|
600
|
+
/**
|
|
601
|
+
* SLH-DSA-SHAKE-256f: Table 2 row `n=32, h=68, d=17, h'=4, a=9, k=35, lg w=4, m=49`;
|
|
602
|
+
* lengths `publicKey=64`, `secretKey=128`, `signature=49856`, `seed=96`, `signRand=32`.
|
|
603
|
+
* Also exposes `.prehash(...)`.
|
|
604
|
+
*/
|
|
605
|
+
export const slh_dsa_shake_256f = /* @__PURE__ */ (() => gen(PARAMS['256f'], SHAKE_SIMPLE))();
|
|
606
|
+
/**
|
|
607
|
+
* SLH-DSA-SHAKE-256s: Table 2 row `n=32, h=64, d=8, h'=8, a=14, k=22, lg w=4, m=47`;
|
|
608
|
+
* lengths `publicKey=64`, `secretKey=128`, `signature=29792`, `seed=96`, `signRand=32`.
|
|
609
|
+
* Also exposes `.prehash(...)`.
|
|
610
|
+
*/
|
|
611
|
+
export const slh_dsa_shake_256s = /* @__PURE__ */ (() => gen(PARAMS['256s'], SHAKE_SIMPLE))();
|
|
612
|
+
// FIPS 205 §11.2 SHA2 instantiation. The `h0` / `h1` split is intentional:
|
|
613
|
+
// category-1 keeps everything on SHA-256, while category-3/5 keep `PRFaddr` / `thash1`
|
|
614
|
+
// on SHA-256 but switch `PRFmsg`, `Hmsg`, and multi-block `thashN` to SHA-512.
|
|
528
615
|
const genSha = (h0, h1) => (opts) => (pub_seed, sk_seed) => {
|
|
529
616
|
const { N } = opts;
|
|
530
617
|
/*
|
|
@@ -536,6 +623,8 @@ const genSha = (h0, h1) => (opts) => (pub_seed, sk_seed) => {
|
|
|
536
623
|
const stats = { prf: 0, thash: 0, hmsg: 0, gen_message_random: 0, mgf1: 0 };
|
|
537
624
|
const counterB = new Uint8Array(4);
|
|
538
625
|
const counterV = createView(counterB);
|
|
626
|
+
// §11.2 prefixes SHA2 PRF/F/H/T_l with `PK.seed || toByte(0, blockLen-N)`, so cache the
|
|
627
|
+
// zero-padded seed block once for the SHA-256 lane and once for the SHA-512 lane.
|
|
539
628
|
const h0ps = h0
|
|
540
629
|
.create()
|
|
541
630
|
.update(pub_seed)
|
|
@@ -547,6 +636,9 @@ const genSha = (h0, h1) => (opts) => (pub_seed, sk_seed) => {
|
|
|
547
636
|
const h0tmp = h0ps.clone();
|
|
548
637
|
const h1tmp = h1ps.clone();
|
|
549
638
|
// https://www.rfc-editor.org/rfc/rfc8017.html#appendix-B.2.1
|
|
639
|
+
// This local helper is intentionally stricter than generic MGF1 reuse: current SLH-DSA callers
|
|
640
|
+
// only request tiny `m`-byte outputs, but the guard below rejects `length > 2^32` instead of
|
|
641
|
+
// RFC 8017's broader `maskLen > 2^32 * hLen` bound.
|
|
550
642
|
function mgf1(seed, length, hash) {
|
|
551
643
|
stats.mgf1++;
|
|
552
644
|
const out = new Uint8Array(Math.ceil(length / hash.outputLen) * hash.outputLen);
|
|
@@ -585,7 +677,12 @@ const genSha = (h0, h1) => (opts) => (pub_seed, sk_seed) => {
|
|
|
585
677
|
},
|
|
586
678
|
PRFmsg: (skPRF, random, msg) => {
|
|
587
679
|
stats.gen_message_random++;
|
|
588
|
-
return hmac
|
|
680
|
+
return hmac
|
|
681
|
+
.create(h1, skPRF)
|
|
682
|
+
.update(random)
|
|
683
|
+
.update(msg)
|
|
684
|
+
.digest()
|
|
685
|
+
.subarray(0, N);
|
|
589
686
|
},
|
|
590
687
|
Hmsg: (R, pk, m, outLen) => {
|
|
591
688
|
stats.hmsg++;
|
|
@@ -603,24 +700,48 @@ const genSha = (h0, h1) => (opts) => (pub_seed, sk_seed) => {
|
|
|
603
700
|
},
|
|
604
701
|
};
|
|
605
702
|
};
|
|
606
|
-
const SHA256_SIMPLE = {
|
|
703
|
+
const SHA256_SIMPLE = /* @__PURE__ */ (() => ({
|
|
607
704
|
isCompressed: true,
|
|
608
705
|
getContext: genSha(sha256, sha256),
|
|
609
|
-
};
|
|
610
|
-
const SHA512_SIMPLE = {
|
|
706
|
+
}))();
|
|
707
|
+
const SHA512_SIMPLE = /* @__PURE__ */ (() => ({
|
|
611
708
|
isCompressed: true,
|
|
612
709
|
getContext: genSha(sha256, sha512),
|
|
613
|
-
};
|
|
614
|
-
/**
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
export const
|
|
620
|
-
/**
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
export const
|
|
710
|
+
}))();
|
|
711
|
+
/**
|
|
712
|
+
* SLH-DSA-SHA2-128f: Table 2 row `n=16, h=66, d=22, h'=3, a=6, k=33, lg w=4, m=34`;
|
|
713
|
+
* lengths `publicKey=32`, `secretKey=64`, `signature=17088`, `seed=48`, `signRand=16`.
|
|
714
|
+
* Also exposes `.prehash(...)`.
|
|
715
|
+
*/
|
|
716
|
+
export const slh_dsa_sha2_128f = /* @__PURE__ */ (() => gen(PARAMS['128f'], SHA256_SIMPLE))();
|
|
717
|
+
/**
|
|
718
|
+
* SLH-DSA-SHA2-128s: Table 2 row `n=16, h=63, d=7, h'=9, a=12, k=14, lg w=4, m=30`;
|
|
719
|
+
* lengths `publicKey=32`, `secretKey=64`, `signature=7856`, `seed=48`, `signRand=16`.
|
|
720
|
+
* Also exposes `.prehash(...)`.
|
|
721
|
+
*/
|
|
722
|
+
export const slh_dsa_sha2_128s = /* @__PURE__ */ (() => gen(PARAMS['128s'], SHA256_SIMPLE))();
|
|
723
|
+
/**
|
|
724
|
+
* SLH-DSA-SHA2-192f: Table 2 row `n=24, h=66, d=22, h'=3, a=8, k=33, lg w=4, m=42`;
|
|
725
|
+
* lengths `publicKey=48`, `secretKey=96`, `signature=35664`, `seed=72`, `signRand=24`.
|
|
726
|
+
* Also exposes `.prehash(...)`.
|
|
727
|
+
*/
|
|
728
|
+
export const slh_dsa_sha2_192f = /* @__PURE__ */ (() => gen(PARAMS['192f'], SHA512_SIMPLE))();
|
|
729
|
+
/**
|
|
730
|
+
* SLH-DSA-SHA2-192s: Table 2 row `n=24, h=63, d=7, h'=9, a=14, k=17, lg w=4, m=39`;
|
|
731
|
+
* lengths `publicKey=48`, `secretKey=96`, `signature=16224`, `seed=72`, `signRand=24`.
|
|
732
|
+
* Also exposes `.prehash(...)`.
|
|
733
|
+
*/
|
|
734
|
+
export const slh_dsa_sha2_192s = /* @__PURE__ */ (() => gen(PARAMS['192s'], SHA512_SIMPLE))();
|
|
735
|
+
/**
|
|
736
|
+
* SLH-DSA-SHA2-256f: Table 2 row `n=32, h=68, d=17, h'=4, a=9, k=35, lg w=4, m=49`;
|
|
737
|
+
* lengths `publicKey=64`, `secretKey=128`, `signature=49856`, `seed=96`, `signRand=32`.
|
|
738
|
+
* Also exposes `.prehash(...)`.
|
|
739
|
+
*/
|
|
740
|
+
export const slh_dsa_sha2_256f = /* @__PURE__ */ (() => gen(PARAMS['256f'], SHA512_SIMPLE))();
|
|
741
|
+
/**
|
|
742
|
+
* SLH-DSA-SHA2-256s: Table 2 row `n=32, h=64, d=8, h'=8, a=14, k=22, lg w=4, m=47`;
|
|
743
|
+
* lengths `publicKey=64`, `secretKey=128`, `signature=29792`, `seed=96`, `signRand=32`.
|
|
744
|
+
* Also exposes `.prehash(...)`.
|
|
745
|
+
*/
|
|
746
|
+
export const slh_dsa_sha2_256s = /* @__PURE__ */ (() => gen(PARAMS['256s'], SHA512_SIMPLE))();
|
|
626
747
|
//# sourceMappingURL=slh-dsa.js.map
|
package/slh-dsa.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slh-dsa.js","sourceRoot":"","sources":["src/slh-dsa.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"slh-dsa.js","sourceRoot":"","sources":["src/slh-dsa.ts"],"names":[],"mappings":"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"}
|