@@ -307,7 +307,7 @@ func ringDecodeAndDecompress10(bb *[encodingSize10]byte) ringElement {
307
307
func ringCompressAndEncode (s []byte , f ringElement , d uint8 ) []byte {
308
308
var b byte
309
309
var bIdx uint8
310
- for i := 0 ; i < n ; i ++ {
310
+ for i := range n {
311
311
c := compress (f [i ], d )
312
312
var cIdx uint8
313
313
for cIdx < d {
@@ -401,8 +401,8 @@ func samplePolyCBD(s []byte, b, η byte) ringElement {
401
401
prf := sha3 .NewSHAKE256 ()
402
402
prf .Write (s )
403
403
prf .Write ([]byte {b })
404
- B := make ([ ]byte , 64 * η )
405
- prf .Read (B )
404
+ var B [ maxBytesOf64Mulη ]byte
405
+ prf .Read (B [: 64 * η ] )
406
406
407
407
// SamplePolyCBD simply draws four (2η) bits for each coefficient, and adds
408
408
// the first two and subtracts the last two.
@@ -419,20 +419,15 @@ func samplePolyCBD(s []byte, b, η byte) ringElement {
419
419
}
420
420
case 3 :
421
421
for i := 0 ; i < n ; i += 4 {
422
- j := (i / 4 ) * 3
423
- b := B [j ]
424
- b_7 , b_6 , b_5 , b_4 := b >> 7 , b >> 6 & 1 , b >> 5 & 1 , b >> 4 & 1
425
- b_3 , b_2 , b_1 , b_0 := b >> 3 & 1 , b >> 2 & 1 , b >> 1 & 1 , b & 1
426
- b = B [j + 1 ]
427
- b_15 , b_14 , b_13 , b_12 := b >> 7 , b >> 6 & 1 , b >> 5 & 1 , b >> 4 & 1
428
- b_11 , b_10 , b_9 , b_8 := b >> 3 & 1 , b >> 2 & 1 , b >> 1 & 1 , b & 1
429
- b = B [j + 2 ]
430
- b_23 , b_22 , b_21 , b_20 := b >> 7 , b >> 6 & 1 , b >> 5 & 1 , b >> 4 & 1
431
- b_19 , b_18 , b_17 , b_16 := b >> 3 & 1 , b >> 2 & 1 , b >> 1 & 1 , b & 1
432
- f [i ] = fieldSub (fieldElement (b_0 + b_1 + b_2 ), fieldElement (b_3 + b_4 + b_5 ))
433
- f [i + 1 ] = fieldSub (fieldElement (b_6 + b_7 + b_8 ), fieldElement (b_9 + b_10 + b_11 ))
434
- f [i + 2 ] = fieldSub (fieldElement (b_12 + b_13 + b_14 ), fieldElement (b_15 + b_16 + b_17 ))
435
- f [i + 3 ] = fieldSub (fieldElement (b_18 + b_19 + b_20 ), fieldElement (b_21 + b_22 + b_23 ))
422
+ j := (i >> 2 ) * 3
423
+
424
+ bits := uint32 (B [j ]) | uint32 (B [j + 1 ])<< 8 | uint32 (B [j + 2 ])<< 16
425
+ for k := range 4 {
426
+ off := 6 * k
427
+ sum := ((bits >> off ) & 1 ) + ((bits >> (off + 1 )) & 1 ) + ((bits >> (off + 2 )) & 1 )
428
+ sub := ((bits >> (off + 3 )) & 1 ) + ((bits >> (off + 4 )) & 1 ) + ((bits >> (off + 5 )) & 1 )
429
+ f [i + k ] = fieldSub (fieldElement (sum ), fieldElement (sub ))
430
+ }
436
431
}
437
432
}
438
433
return f
0 commit comments