Skip to content

Commit 7b39989

Browse files
committed
Falcon: const-time improvements
1 parent 874e05c commit 7b39989

File tree

1 file changed

+8
-10
lines changed

1 file changed

+8
-10
lines changed

core/src/main/java/org/bouncycastle/pqc/crypto/falcon/FalconVrfy.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -702,7 +702,7 @@ boolean complete_private(byte[] srcG, int G,
702702
byte[] srcf, int f, byte[] srcg, int g, byte[] srcF, int F,
703703
int logn, short[] srctmp, int tmp)
704704
{
705-
boolean success = true;
705+
int success = -1;
706706
int u, n;
707707
int t1, t2;
708708

@@ -725,22 +725,20 @@ boolean complete_private(byte[] srcG, int G,
725725
mq_NTT(srctmp, t2, logn);
726726
for (u = 0; u < n; u++)
727727
{
728-
success &= (srctmp[t2 + u] != 0);
728+
int tmp2 = srctmp[t2 + u] & 0xffff;
729+
success &= -tmp2; // check tmp2 != 0
729730
srctmp[t1 + u] = (short)mq_div_12289(srctmp[t1 + u], srctmp[t2 + u]);
730731
}
731732
mq_iNTT(srctmp, t1, logn);
732733
for (u = 0; u < n; u++)
733734
{
734-
int w;
735-
int gi;
736-
737-
w = (srctmp[t1 + u] & 0xffff);
738-
w -= (Q & ~-((w - (Q >> 1)) >>> 31)); // w is unsigned
739-
gi = w; // gi is signed
740-
success &= !(gi < -127 || gi > +127);
735+
int w = srctmp[t1 + u] & 0xffff;
736+
int gi = w - (Q & (((Q >> 1) - w) >> 31));
737+
success &= +gi - 128; // check +gi < 128
738+
success &= -gi - 128; // check -gi < 128
741739
srcG[G + u] = (byte)gi;
742740
}
743-
return success;
741+
return success < 0;
744742
}
745743

746744
/* see inner.h */

0 commit comments

Comments
 (0)