You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
2.**ML-DSA** the NIST Module-Lattice-Based Digital Signature Standard following
19
-
the [FIPS 204 (Initial Public
20
-
Draft)](https://csrc.nist.gov/pubs/fips/204/ipd) based off the Dilithium
21
-
submission to the NIST post-quantum project.
22
21
23
22
**Note**: This project has followed
24
23
[`kyber-py`](https://github.com/GiacomoPope/kyber-py) which is a pure-python
@@ -51,11 +50,11 @@ This implementation passes all the KAT vectors for `dilithium` and `ml_dsa`. For
51
50
52
51
The KAT files were either downloaded or generated:
53
52
54
-
1. For **Dilithium**, the KAT files were generated from the projects [GitHub
53
+
1. For **ML-DSA**, the KAT files were download from the GitHub repository
54
+
[usnistgov/ACVP-Server/](https://github.com/usnistgov/ACVP-Server/releases/tag/v1.1.0.35) release 1.1.0.35, and are included in `assets/ML-DSA-*` directories.
55
+
2. For **Dilithium**, the KAT files were generated from the projects [GitHub
55
56
repository](https://github.com/pq-crystals/dilithium/) and are included in
56
57
`assets/PQCsignKAT_*.rsp`
57
-
2. For **ML-DSA**, the KAT files were download from the GitHub repository
58
-
[post-quantum-cryptography/KAT](https://github.com/post-quantum-cryptography/KAT/tree/main/MLDSA) and are included in `assets/kat_MLDSA_*.rsp`
59
58
60
59
### Generating KAT files for Dilithium
61
60
@@ -220,7 +219,7 @@ For the NIST specification the hint is generated by considering the vectors
220
219
$-c\mathbf{t}_0$ and $\mathbf{w} -c\mathbf{s}_1 + -c\mathbf{t}_0$ and each
221
220
coefficient of each polynomial within $\mathbf{h}$ is computed by checking if
222
221
the top bits will change when the coefficients `r` and `r + z` are added
223
-
together. This is computed using algorithm 33 from FIPS 204-ipd:
222
+
together. This is computed using algorithm 39 from FIPS 204:
224
223
225
224
```py
226
225
defmake_hint(z, r, a, q):
@@ -239,7 +238,7 @@ For the Dilithium optimisation, rather than computing only the high bits of
239
238
$\mathbf{w}$ as $\mathbf{w}_1$, for the same cost, one can compute both the high
240
239
and low bits denoted $\mathbf{w}_1$ and $\mathbf{w}_0$. Then, the hint can be
241
240
constructed from $\mathbf{w}_0$ (and a further call to low bits for
242
-
$\mathbf{r}_0$ in line 22 of Algorithm 2 of FIPS 204-ipd can be avoided). Precisely, the hint is generated from the two vectors $\mathbf{w}_0 -c\mathbf{s}_1 + -c\mathbf{t}_0$ and $\mathbf{w}_1$.
241
+
$\mathbf{r}_0$ in line 21 of Algorithm 7 of FIPS 204 can be avoided). Precisely, the hint is generated from the two vectors $\mathbf{w}_0 -c\mathbf{s}_1 + -c\mathbf{t}_0$ and $\mathbf{w}_1$.
243
242
244
243
As the inputs to the hint generation are now used from the decomposition, where
245
244
top bits have already been removed, the `make_hint()` function has to check
@@ -362,8 +361,6 @@ lets revisit the ring from the previous example:
362
361
363
362
### Number Theoretic Transform
364
363
365
-
**TODO**: More details about the NTT.
366
-
367
364
We can transform polynomials to NTT form and from NTT form
0 commit comments