This consists of ~2000 lines of amd64 assembly and a, much slower, generic Go version in curve25519.go. The assembly has been ported from djb's public domain sources and the only semantic alterations are to deal with Go's split stacks. R=rsc CC=golang-dev https://golang.org/cl/5786045
24 lines
1000 B
Go
24 lines
1000 B
Go
// Copyright 2012 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Package curve25519 provides an implementation of scalar multiplication on
|
|
// the elliptic curve known as curve25519. See http://cr.yp.to/ecdh.html
|
|
package curve25519
|
|
|
|
// basePoint is the x coordinate of the generator of the curve.
|
|
var basePoint = [32]byte{9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
|
|
|
// ScalarMult sets dst to the product in*base where dst and base are the x
|
|
// coordinates of group points and all values are in little-endian form.
|
|
func ScalarMult(dst, in, base *[32]byte) {
|
|
scalarMult(dst, in, base)
|
|
}
|
|
|
|
// ScalarBaseMult sets dst to the product in*base where dst and base are the x
|
|
// coordinates of group points, base is the standard generator and all values
|
|
// are in little-endian form.
|
|
func ScalarBaseMult(dst, in *[32]byte) {
|
|
ScalarMult(dst, in, &basePoint)
|
|
}
|