diff options
author | David Crawshaw <crawshaw@tailscale.com> | 2020-04-07 15:52:04 +1000 |
---|---|---|
committer | David Crawshaw <crawshaw@tailscale.com> | 2020-04-07 15:52:41 +1000 |
commit | f6020a2085d9a6b911c00875752bb40bfe629e00 (patch) | |
tree | cc89cec68f8a182dfc36206e268c9dc8f0a5d3f2 /device/noise-helpers.go | |
parent | ad256f0b739b835e8836f84571424cb4adc01b1e (diff) | |
download | wireguard-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.go | 27 |
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 +} |