summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/matterbridge/go-whatsapp/crypto/curve25519/curve.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/matterbridge/go-whatsapp/crypto/curve25519/curve.go')
-rw-r--r--vendor/github.com/matterbridge/go-whatsapp/crypto/curve25519/curve.go44
1 files changed, 44 insertions, 0 deletions
diff --git a/vendor/github.com/matterbridge/go-whatsapp/crypto/curve25519/curve.go b/vendor/github.com/matterbridge/go-whatsapp/crypto/curve25519/curve.go
new file mode 100644
index 00000000..5ddf9c9a
--- /dev/null
+++ b/vendor/github.com/matterbridge/go-whatsapp/crypto/curve25519/curve.go
@@ -0,0 +1,44 @@
+/*
+In cryptography, Curve25519 is an elliptic curve offering 128 bits of security and designed for use with the elliptic
+curve Diffie–Hellman (ECDH) key agreement scheme. It is one of the fastest ECC curves and is not covered by any known
+patents. The reference implementation is public domain software. The original Curve25519 paper defined it
+as a Diffie–Hellman (DH) function.
+*/
+package curve25519
+
+import (
+ "crypto/rand"
+ "golang.org/x/crypto/curve25519"
+ "io"
+)
+
+/*
+GenerateKey generates a public private key pair using Curve25519.
+*/
+func GenerateKey() (privateKey *[32]byte, publicKey *[32]byte, err error) {
+ var pub, priv [32]byte
+
+ _, err = io.ReadFull(rand.Reader, priv[:])
+ if err != nil {
+ return nil, nil, err
+ }
+
+ priv[0] &= 248
+ priv[31] &= 127
+ priv[31] |= 64
+
+ curve25519.ScalarBaseMult(&pub, &priv)
+
+ return &priv, &pub, nil
+}
+
+/*
+GenerateSharedSecret generates the shared secret with a given public private key pair.
+*/
+func GenerateSharedSecret(priv, pub [32]byte) []byte {
+ var secret [32]byte
+
+ curve25519.ScalarMult(&secret, &priv, &pub)
+
+ return secret[:]
+}