Skip to content

Commit 5002933

Browse files
committed
Optimize Encode function
1 parent 454239d commit 5002933

File tree

1 file changed

+27
-26
lines changed

1 file changed

+27
-26
lines changed

kem/ntruprime/internal/Encode.go

+27-26
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,34 @@
11
package internal
22

3-
// TO DO: Optimize the Encode function
43
/* 0 <= R[i] < M[i] < 16384 */
54
func Encode(out []uint8, R []uint16, M []uint16, len int) {
5+
if len > 1 {
6+
R2 := make([]uint16, (len+1)/2)
7+
M2 := make([]uint16, (len+1)/2)
8+
var i int
9+
for ; len > 1; len = (len + 1) / 2 {
10+
for i = 0; i < len-1; i += 2 {
11+
m0 := uint32(M[i])
12+
r := uint32(R[i]) + uint32(R[i+1])*m0
13+
m := uint32(M[i+1]) * m0
14+
for m >= 16384 {
15+
out[0] = uint8(r)
16+
out = out[1:]
17+
18+
r >>= 8
19+
m = (m + 255) >> 8
20+
}
21+
R2[i/2] = uint16(r)
22+
M2[i/2] = uint16(m)
23+
}
24+
if i < len {
25+
R2[i/2] = R[i]
26+
M2[i/2] = M[i]
27+
}
28+
copy(R, R2)
29+
copy(M, M2)
30+
}
31+
}
632
if len == 1 {
733
r := R[0]
834
m := M[0]
@@ -13,29 +39,4 @@ func Encode(out []uint8, R []uint16, M []uint16, len int) {
1339
m = (m + 255) >> 8
1440
}
1541
}
16-
if len > 1 {
17-
R2 := make([]uint16, (len+1)/2)
18-
M2 := make([]uint16, (len+1)/2)
19-
var i int
20-
21-
for i = 0; i < len-1; i += 2 {
22-
m0 := uint32(M[i])
23-
r := uint32(R[i]) + uint32(R[i+1])*m0
24-
m := uint32(M[i+1]) * m0
25-
for m >= 16384 {
26-
out[0] = uint8(r)
27-
out = out[1:]
28-
29-
r >>= 8
30-
m = (m + 255) >> 8
31-
}
32-
R2[i/2] = uint16(r)
33-
M2[i/2] = uint16(m)
34-
}
35-
if i < len {
36-
R2[i/2] = R[i]
37-
M2[i/2] = M[i]
38-
}
39-
Encode(out, R2, M2, (len+1)/2)
40-
}
4142
}

0 commit comments

Comments
 (0)