diff options
-rw-r--r-- | crypto/src/pqc/crypto/cmce/CmceEngine.cs | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/crypto/src/pqc/crypto/cmce/CmceEngine.cs b/crypto/src/pqc/crypto/cmce/CmceEngine.cs index 7dd404427..9641cb6fb 100644 --- a/crypto/src/pqc/crypto/cmce/CmceEngine.cs +++ b/crypto/src/pqc/crypto/cmce/CmceEngine.cs @@ -1460,9 +1460,9 @@ namespace Org.BouncyCastle.Pqc.Crypto.Cmce row = i * 8 + j; if (row >= PK_NROWS) - { break; - } + + byte[] mat_row = mat[row]; if (usePivots) { @@ -1470,7 +1470,7 @@ namespace Org.BouncyCastle.Pqc.Crypto.Cmce { if (MovColumns(mat, pi, pivots) != 0) { - // System.out.println("failed mov column!"); + //System.out.println("failed mov column!"); return -1; } } @@ -1478,21 +1478,23 @@ namespace Org.BouncyCastle.Pqc.Crypto.Cmce for (k = row + 1; k < PK_NROWS; k++) { - mask = (byte)(mat[row][i] ^ mat[k][i]); + byte[] mat_k = mat[k]; + mask = (byte)(mat_row[i] ^ mat_k[i]); mask >>= j; mask &= 1; mask = (byte)-mask; for (c = 0; c < SYS_N / 8; c++) { - mat[row][c] ^= (byte)(mat[k][c] & mask); + mat_row[c] ^= (byte)(mat_k[c] & mask); } } + // 7. Compute (T,cn−k−μ+1,...,cn−k,Γ′) ← MatGen(Γ). If this fails, set δ ← δ′ and // restart the algorithm. - if (((mat[row][i] >> j) & 1) == 0) // return if not systematic + if (((mat_row[i] >> j) & 1) == 0) // return if not systematic { - // System.out.println("FAIL 2\n"); + //System.out.println("FAIL 2\n"); return -1; } @@ -1500,14 +1502,14 @@ namespace Org.BouncyCastle.Pqc.Crypto.Cmce { if (k != row) { - mask = (byte)(mat[k][i] >> j); + byte[] mat_k = mat[k]; + mask = (byte)(mat_k[i] >> j); mask &= 1; mask = (byte)-mask; for (c = 0; c < SYS_N / 8; c++) { - mat[k][c] ^= (byte)(mat[row][c] & mask); - + mat_k[c] ^= (byte)(mat_row[c] & mask); } } } @@ -1546,7 +1548,6 @@ namespace Org.BouncyCastle.Pqc.Crypto.Cmce return 0; } - private ushort Eval(ushort[] f, ushort a) { ushort r; |