aboutsummaryrefslogtreecommitdiff
path: root/device/noise-helpers.go
diff options
context:
space:
mode:
authorDavid Crawshaw <crawshaw@tailscale.com>2020-04-07 15:52:04 +1000
committerDavid Crawshaw <crawshaw@tailscale.com>2020-04-07 15:52:41 +1000
commitf6020a2085d9a6b911c00875752bb40bfe629e00 (patch)
treecc89cec68f8a182dfc36206e268c9dc8f0a5d3f2 /device/noise-helpers.go
parentad256f0b739b835e8836f84571424cb4adc01b1e (diff)
downloadwireguard-go-f6020a2085d9a6b911c00875752bb40bfe629e00.tar.gz
wireguard-go-f6020a2085d9a6b911c00875752bb40bfe629e00.zip
Revert "device: use wgcfg key types"
More cleanup work of wgcfg to do before bringing this in. This reverts commit 83ca9b47b63b4d07630c4d579faf1111e42537d3.
Diffstat (limited to 'device/noise-helpers.go')
-rw-r--r--device/noise-helpers.go27
1 files changed, 27 insertions, 0 deletions
diff --git a/device/noise-helpers.go b/device/noise-helpers.go
index ae52a7d..f5e4b4b 100644
--- a/device/noise-helpers.go
+++ b/device/noise-helpers.go
@@ -7,10 +7,12 @@ package device
import (
"crypto/hmac"
+ "crypto/rand"
"crypto/subtle"
"hash"
"golang.org/x/crypto/blake2s"
+ "golang.org/x/crypto/curve25519"
)
/* KDF related functions.
@@ -73,3 +75,28 @@ func setZero(arr []byte) {
arr[i] = 0
}
}
+
+func (sk *NoisePrivateKey) clamp() {
+ sk[0] &= 248
+ sk[31] = (sk[31] & 127) | 64
+}
+
+func newPrivateKey() (sk NoisePrivateKey, err error) {
+ _, err = rand.Read(sk[:])
+ sk.clamp()
+ return
+}
+
+func (sk *NoisePrivateKey) publicKey() (pk NoisePublicKey) {
+ apk := (*[NoisePublicKeySize]byte)(&pk)
+ ask := (*[NoisePrivateKeySize]byte)(sk)
+ curve25519.ScalarBaseMult(apk, ask)
+ return
+}
+
+func (sk *NoisePrivateKey) sharedSecret(pk NoisePublicKey) (ss [NoisePublicKeySize]byte) {
+ apk := (*[NoisePublicKeySize]byte)(&pk)
+ ask := (*[NoisePrivateKeySize]byte)(sk)
+ curve25519.ScalarMult(&ss, ask, apk)
+ return ss
+}