@@ -93,6 +93,7 @@ public GeMSSEngine(int K, int HFEn, int HFEv, int HFEDELTA, int NB_ITE, int HFED
9393 this .HFEDeg = HFEDeg ;
9494 this .HFEDegI = HFEDegI ;
9595 this .HFEDegJ = HFEDegJ ;
96+ NB_BYTES_GFqn = (HFEn >>> 3 ) + (((HFEn & 7 ) != 0 ) ? 1 : 0 );
9697 SIZE_ROW = HFEDegI + 1 ;
9798 HFEnv = HFEn + HFEv ;
9899 HFEnq = HFEn >>> 6 ;
@@ -104,18 +105,23 @@ public GeMSSEngine(int K, int HFEn, int HFEv, int HFEDELTA, int NB_ITE, int HFED
104105 switch (NB_WORD_MUL )
105106 {
106107 case 6 :
108+ //gemss128, bluegemss128, redgemss128, whitegemss128, cyangemss128, magentagemss128
107109 mul = new Mul_GF2x .Mul6 ();
108110 break ;
109111 case 9 :
112+ //gemss192, bluegemss192, redgemss192, whitegemss192, cyangemss192, magentagemss192, fgemss128, dualmodems128
110113 mul = new Mul_GF2x .Mul9 ();
111114 break ;
112115 case 12 :
116+ //gemss256, bluegemss256, redgemss256, whitegemss256, cyangemss256, magentagemss256
113117 mul = new Mul_GF2x .Mul12 ();
114118 break ;
115119 case 13 :
120+ //fgemss192, dualmodems192
116121 mul = new Mul_GF2x .Mul13 ();
117122 break ;
118123 case 17 :
124+ //fgemss256, dualmodems256
119125 mul = new Mul_GF2x .Mul17 ();
120126 break ;
121127 }
@@ -131,12 +137,11 @@ public GeMSSEngine(int K, int HFEn, int HFEv, int HFEDELTA, int NB_ITE, int HFED
131137 HFEmr8 = HFEm & 7 ;
132138 NB_BYTES_GFqm = HFEmq8 + (HFEmr8 != 0 ? 1 : 0 );
133139 NB_WORD_UNCOMP_EQ = ((((HFEnvq * (HFEnvq + 1 )) >>> 1 ) * NB_BITS_UINT ) + (HFEnvq + 1 ) * HFEnvr );
134- HFEnvr8 = ( HFEnv & 7 ) ;
135- NB_BYTES_GFqnv = (( HFEnv >>> 3 ) + ((HFEnvr8 != 0 ) ? 1 : 0 ) );
140+ HFEnvr8 = HFEnv & 7 ;
141+ NB_BYTES_GFqnv = (HFEnv >>> 3 ) + ((HFEnvr8 != 0 ) ? 1 : 0 );
136142 VAL_BITS_M = Math .min (HFEDELTA + HFEv , 8 - HFEmr8 );
137143 MASK_GF2m = GeMSSUtils .maskUINT (HFEmr );
138144 MASK_GF2n = GeMSSUtils .maskUINT (HFEnr );
139- NB_BYTES_GFqn = (HFEn >>> 3 ) + (((HFEn & 7 ) != 0 ) ? 1 : 0 );
140145 if (K <= 128 )
141146 {
142147 ShakeBitStrength = 128 ;
@@ -698,8 +703,7 @@ void mul_rem_move(Pointer res, Pointer A, Pointer B)
698703
699704 void mul_xorrange_move (Pointer res , Pointer A , Pointer B )
700705 {
701- mul .mul_gf2x (Buffer_NB_WORD_MUL , A , B );
702- res .setXorRange (Buffer_NB_WORD_MUL , NB_WORD_MMUL );
706+ mul .mul_gf2x_xor (res , A , B );
703707 A .move (NB_WORD_GFqn );
704708 B .move (NB_WORD_GFqn );
705709 }
@@ -713,8 +717,7 @@ void mul_move(Pointer res, Pointer A, Pointer B)
713717
714718 public void mul_xorrange (Pointer res , Pointer A , Pointer B )
715719 {
716- mul .mul_gf2x (Buffer_NB_WORD_MUL , A , B );
717- res .setXorRange (Buffer_NB_WORD_MUL , NB_WORD_MMUL );
720+ mul .mul_gf2x_xor (res , A , B );
718721 }
719722
720723 public void mul_rem_xorrange (Pointer res , Pointer A , Pointer B )
@@ -859,7 +862,7 @@ void invMatrixLU_gf2(Pointer S, Pointer L_orig, Pointer U_orig, FunctionParams i
859862 else if (ifCondition == 1 )
860863 {
861864 /* ir = 0 */
862- Sinv_cpi .set (iq , 1 );
865+ Sinv_cpi .set (iq , 1L );
863866 Sinv_cpi .move (nextrow );
864867 }
865868 /* Here, Sinv_cpi is at the end of S_inv */
@@ -1055,7 +1058,6 @@ private int setPk2Value(Pointer pk2, PointerUnion pk64, int nb_bits, int iq, int
10551058 if ((nb_bits & 63 ) != 0 )
10561059 {
10571060 setPk2_loop (pk2 , pk64 , nb_bits , iq );
1058- //pk2.set(k, pk64.get(k) >>> (nb_bits & 63));
10591061 pk2 .set (iq , pk64 .get (iq ) >>> (nb_bits & 63 ));
10601062 if (((nb_bits & 63 ) + ir ) > 64 )
10611063 {
@@ -1068,6 +1070,7 @@ private int setPk2Value(Pointer pk2, PointerUnion pk64, int nb_bits, int iq, int
10681070 }
10691071 else
10701072 {
1073+ //TODO Pointer.for_set
10711074 for (k = 0 ; k <= iq ; ++k )
10721075 {
10731076 pk2 .set (k , pk64 .get (k ));
@@ -1092,6 +1095,7 @@ private void setPk2_endValue(Pointer pk2, Pointer pk64, int nb_bits, int iq)
10921095 }
10931096 else
10941097 {
1098+ ////TODO Pointer.for_set
10951099 for (k = 0 ; k <= iq ; ++k )
10961100 {
10971101 pk2 .set (k , pk64 .get (k ));
@@ -1101,6 +1105,7 @@ private void setPk2_endValue(Pointer pk2, Pointer pk64, int nb_bits, int iq)
11011105
11021106 private void setPk2_loop (Pointer pk2 , Pointer pk64 , int nb_bits , int iq )
11031107 {
1108+ //TODO:
11041109 for (int k = 0 ; k < iq ; ++k )
11051110 {
11061111 pk2 .set (k , (pk64 .get (k ) >>> (nb_bits & 63 )) ^ (pk64 .get (k + 1 ) << (64 - (nb_bits & 63 ))));
@@ -1156,6 +1161,7 @@ private long convMQ_last_uncompressL_gf2(Pointer pk2, PointerUnion pk)
11561161 if ((((NB_MONOMIAL_PK - LOST_BITS + 7 ) >>> 3 ) & 7 ) != 0 )//Except cyangemss192, magentagemss192
11571162 {
11581163 final int NB_WHOLE_BLOCKS = ((HFEnv - ((64 - ((NB_MONOMIAL_PK - LOST_BITS - HFEnvr ) & 63 )) & 63 )) >>> 6 );
1164+ //TODO:
11591165 for (k = 0 ; k < NB_WHOLE_BLOCKS ; ++k )
11601166 {
11611167 pk2 .set (k , (pk64 .get (k ) >>> (nb_bits & 63 )) ^ (pk64 .getWithCheck (k + 1 ) << (64 - (nb_bits & 63 ))));
@@ -1189,6 +1195,7 @@ private long convMQ_last_uncompressL_gf2(Pointer pk2, PointerUnion pk)
11891195 {
11901196 if ((((NB_MONOMIAL_PK - LOST_BITS + 7 ) >>> 3 ) & 7 ) != 0 )
11911197 {
1198+ //TODO Pointer.for_set
11921199 for (k = 0 ; k < iq ; ++k )
11931200 {
11941201 pk2 .set (k , pk64 .get (k ));
@@ -1197,6 +1204,7 @@ private long convMQ_last_uncompressL_gf2(Pointer pk2, PointerUnion pk)
11971204 }
11981205 else
11991206 {
1207+ //TODO Pointer.for_set
12001208 for (k = 0 ; k <= iq ; ++k )
12011209 {
12021210 pk2 .set (k , pk64 .get (k ));
@@ -1222,6 +1230,7 @@ else if (LAST_ROW_Q != 0)
12221230 }
12231231 else
12241232 {
1233+ //TODO Pointer.for_set
12251234 for (k = 0 ; k < iq ; ++k )
12261235 {
12271236 pk2 .set (k , pk64 .get (k ));
@@ -1896,7 +1905,7 @@ private void LOOPIR(Pointer S, Pointer L_cp, Pointer U, int NB_IT, int nq, int n
18961905 private void LOOPJR (Pointer S , Pointer L , Pointer U , int NB_IT , int iq , int jq )
18971906 {
18981907 int mini = Math .min (iq , jq );
1899- S .set (0 , 0 );
1908+ S .set (0L );
19001909 long tmp ;
19011910 for (int jr = 0 ; jr < NB_IT ; ++jr )
19021911 {
@@ -2162,7 +2171,7 @@ private int frobeniusMap_HFE_gf2nx(Pointer Xqn, SecretKeyHFE.complete_sparse_mon
21622171 /* Step 1: compute X^(2^(HFEDegI+1)) */
21632172 d = 2 << HFEDegI ;
21642173 /* Xqn is initialized to 0 with calloc, so the multiprecision word is initialized to 1 just by setting the first word */
2165- Xqn .set (d * NB_WORD_GFqn , 1 );
2174+ Xqn .set (d * NB_WORD_GFqn , 1L );
21662175 /* Step 2: reduction of X^(2^(HFEDegI+1)) modulo (F-U) */
21672176 divsqr_r_HFE_cstdeg_gf2nx (Xqn , d , F , cst );
21682177 for (i = HFEDegI + 1 ; i < HFEn ; ++i )
@@ -2173,7 +2182,7 @@ private int frobeniusMap_HFE_gf2nx(Pointer Xqn, SecretKeyHFE.complete_sparse_mon
21732182 divsqr_r_HFE_cstdeg_gf2nx (Xqn , (HFEDeg - 1 ) << 1 , F , cst );
21742183 }
21752184 /* (X^(2^n) mod (F-U)) - X */
2176- Xqn .setXor (NB_WORD_GFqn , 1 );
2185+ Xqn .setXor (NB_WORD_GFqn , 1L );
21772186 return getD_for_not0_or_plus (Xqn );
21782187 }
21792188
@@ -2450,7 +2459,7 @@ private void convHFEpolynomialSparseToDense_gf2nx(Pointer F_dense, SecretKeyHFE.
24502459 }
24512460 F_dense .changeIndex (F_dense_orig );
24522461 /* Leading term: 1 */
2453- F_dense .set (HFEDeg * NB_WORD_GFqn , 1 );
2462+ F_dense .set (HFEDeg * NB_WORD_GFqn , 1L );
24542463 }
24552464
24562465 int div_r_gf2nx (Pointer A , int da , Pointer B , int db )
@@ -3589,7 +3598,6 @@ int interpolateHFE_FS_ref(Pointer MQS, Pointer F, Pointer S)
35893598 void evalHFEv_gf2nx (Pointer Fxv , Pointer F , Pointer xv )
35903599 {
35913600 Pointer cur_acc = new Pointer (NB_WORD_MUL );
3592- //Pointer prod = new Pointer(NB_WORD_MUL);
35933601 Pointer acc = new Pointer (NB_WORD_MUL );
35943602 Pointer tab_Xqj = new Pointer ((HFEDegI + 1 ) * NB_WORD_GFqn );
35953603 Pointer tab_Xqj_cp2 = new Pointer ();
@@ -3608,6 +3616,7 @@ void evalHFEv_gf2nx(Pointer Fxv, Pointer F, Pointer xv)
36083616 }
36093617 /* Evaluation of the constant, quadratic in the vinegars */
36103618 int endloop = (NB_WORD_GFqn + NB_WORD_GFqv ) == NB_WORD_GF2nv ? NB_WORD_GFqv : NB_WORD_GFqv - 1 ;
3619+ //TODO setRangeRotate
36113620 for (j = 0 ; j < endloop ; ++j )
36123621 {
36133622 V .set (j , (xv .get (NB_WORD_GFqn - 1 + j ) >>> HFEnr ) ^ (xv .get (NB_WORD_GFqn + j ) << (64 - HFEnr )));
@@ -3702,7 +3711,7 @@ int sign_openHFE_uncomp_pk(byte[] m, int len, byte[] sm8, PointerUnion pk)
37023711 /* Copy of pointer */
37033712 Pointer Si = new Pointer (Si_tab );
37043713 /* Vector of D_1, ..., D_(NB_ITE) */
3705- Pointer D = new Pointer (SIZE_DIGEST_UINT );//NB_ITE * SIZE_DIGEST_UINT
3714+ Pointer D = new Pointer (SIZE_DIGEST_UINT );
37063715 /* Take the (n+v) first bits */
37073716 sm .fill (0 , sm8 , 0 , NB_BYTES_GFqnv );
37083717 byte [] hashbuffer = new byte [64 ];
0 commit comments