diff --git a/src/crypto/internal/fips140/mlkem/mlkem1024.go b/src/crypto/internal/fips140/mlkem/mlkem1024.go index edde161422c..953eea9bc24 100644 --- a/src/crypto/internal/fips140/mlkem/mlkem1024.go +++ b/src/crypto/internal/fips140/mlkem/mlkem1024.go @@ -369,11 +369,12 @@ func pkeEncrypt1024(cc *[CiphertextSize1024]byte, ex *encryptionKey1024, m *[mes u := make([]ringElement, k1024) // NTT⁻¹(AT ◦ r) + e1 for i := range u { - u[i] = e1[i] + var uHat nttElement for j := range r { // Note that i and j are inverted, as we need the transposed of A. - u[i] = polyAdd(u[i], inverseNTT(nttMul(ex.a[j*k1024+i], r[j]))) + uHat = polyAdd(uHat, nttMul(ex.a[j*k1024+i], r[j])) } + u[i] = polyAdd(e1[i], inverseNTT(uHat)) } μ := ringDecodeAndDecompress1(m) diff --git a/src/crypto/internal/fips140/mlkem/mlkem768.go b/src/crypto/internal/fips140/mlkem/mlkem768.go index 088c2954de6..c4c3a9deaf4 100644 --- a/src/crypto/internal/fips140/mlkem/mlkem768.go +++ b/src/crypto/internal/fips140/mlkem/mlkem768.go @@ -428,11 +428,12 @@ func pkeEncrypt(cc *[CiphertextSize768]byte, ex *encryptionKey, m *[messageSize] u := make([]ringElement, k) // NTT⁻¹(AT ◦ r) + e1 for i := range u { - u[i] = e1[i] + var uHat nttElement for j := range r { // Note that i and j are inverted, as we need the transposed of A. - u[i] = polyAdd(u[i], inverseNTT(nttMul(ex.a[j*k+i], r[j]))) + uHat = polyAdd(uHat, nttMul(ex.a[j*k+i], r[j])) } + u[i] = polyAdd(e1[i], inverseNTT(uHat)) } μ := ringDecodeAndDecompress1(m)