Skip to content
This repository has been archived by the owner on Jan 16, 2024. It is now read-only.

Commit

Permalink
Update poly.go
Browse files Browse the repository at this point in the history
  • Loading branch information
tgkudelski authored Jan 16, 2024
1 parent bffe856 commit d0631a8
Showing 1 changed file with 7 additions and 8 deletions.
15 changes: 7 additions & 8 deletions crystals-kyber/poly.go
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ func polyToMsg(p Poly) []byte {
return msg
}

//compress packs a polynomial into a byte array using d bits per coefficient
//compress packs a polynomial into a byte array using d bits per coefficient - fixed against https://kyberslash.cr.yp.to/faq.html (cases d=4,5 only for now)
func (p *Poly) compress(d int) []byte {
c := make([]byte, n*d/8)
switch d {
Expand Down Expand Up @@ -229,18 +229,17 @@ func (p *Poly) compress(d int) []byte {

case 5:
var t [8]uint16
var d0 uint32 /* accumulation value for fixing KyberSlash2 */
var d5 uint32 /* accumulation value for fixing KyberSlash2 */
id := 0
for i := 0; i < n/8; i++ {
for j := 0; j < 8; j++ {
/* t[j] = uint16(((uint32(p[8*i+j])<<5)+uint32(q)/2)/
uint32(q)) & ((1 << 5) - 1) */
t[j] = uint16(p[8*i+j])
d0 = uint32(t[j] << 5)
d0 += 1664
d0 *= 40318
d0 >>= 27
t[j] = uint16(d0 & 0x1f)
d5 = uint32(p[8*i+j] << 5)
d5 += 1664
d5 *= 40318
d5 >>= 27
t[j] = uint16(d5 & 0x1f)
}
c[id] = byte(t[0]) | byte(t[1]<<5)
c[id+1] = byte(t[1]>>3) | byte(t[2]<<2) | byte(t[3]<<7)
Expand Down

0 comments on commit d0631a8

Please sign in to comment.