|
|
@@ -8,6 +8,10 @@
|
|
|
|
|
|
package curve25519
|
|
|
|
|
|
+import (
|
|
|
+ "encoding/binary"
|
|
|
+)
|
|
|
+
|
|
|
// This code is a port of the public domain, "ref10" implementation of
|
|
|
// curve25519 from SUPERCOP 20130419 by D. J. Bernstein.
|
|
|
|
|
|
@@ -50,17 +54,11 @@ func feCopy(dst, src *fieldElement) {
|
|
|
//
|
|
|
// Preconditions: b in {0,1}.
|
|
|
func feCSwap(f, g *fieldElement, b int32) {
|
|
|
- var x fieldElement
|
|
|
b = -b
|
|
|
- for i := range x {
|
|
|
- x[i] = b & (f[i] ^ g[i])
|
|
|
- }
|
|
|
-
|
|
|
for i := range f {
|
|
|
- f[i] ^= x[i]
|
|
|
- }
|
|
|
- for i := range g {
|
|
|
- g[i] ^= x[i]
|
|
|
+ t := b & (f[i] ^ g[i])
|
|
|
+ f[i] ^= t
|
|
|
+ g[i] ^= t
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -75,12 +73,7 @@ func load3(in []byte) int64 {
|
|
|
|
|
|
// load4 reads a 32-bit, little-endian value from in.
|
|
|
func load4(in []byte) int64 {
|
|
|
- var r int64
|
|
|
- r = int64(in[0])
|
|
|
- r |= int64(in[1]) << 8
|
|
|
- r |= int64(in[2]) << 16
|
|
|
- r |= int64(in[3]) << 24
|
|
|
- return r
|
|
|
+ return int64(binary.LittleEndian.Uint32(in))
|
|
|
}
|
|
|
|
|
|
func feFromBytes(dst *fieldElement, src *[32]byte) {
|