aboutsummaryrefslogtreecommitdiff
path: root/device/noise-helpers.go
diff options
context:
space:
mode:
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
+}