ecdh_test.go raw
1 package secp256k1
2
3 import (
4 "encoding/hex"
5 "testing"
6 )
7
8 func TestECDHSymmetry(t *testing.T) {
9 var a, b [32]byte
10 a[31] = 1
11 b[31] = 2
12 pubA, ok := PubKey(a)
13 if !ok {
14 t.Fatal("pub a")
15 }
16 pubB, ok := PubKey(b)
17 if !ok {
18 t.Fatal("pub b")
19 }
20 x1, ok := ECDH(a, pubB)
21 if !ok {
22 t.Fatal("ecdh a,b")
23 }
24 x2, ok := ECDH(b, pubA)
25 if !ok {
26 t.Fatal("ecdh b,a")
27 }
28 if x1 != x2 {
29 t.Fatalf("shared secrets differ: %x %x", x1, x2)
30 }
31 // 2*G has this x coordinate.
32 const want = "c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5"
33 if got := hex.EncodeToString(x1[:]); got != want {
34 t.Fatalf("x = %s, want %s", got, want)
35 }
36 }
37
38 func TestECDHRejectsBadInput(t *testing.T) {
39 var zero, one [32]byte
40 one[31] = 1
41 if _, ok := ECDH(zero, one); ok {
42 t.Fatal("accepted zero secret")
43 }
44 badPub := [32]byte{0xff}
45 if _, ok := ECDH(one, badPub); ok {
46 t.Fatal("accepted off-curve public key")
47 }
48 }
49
50 func TestValidatePubKey(t *testing.T) {
51 var one [32]byte
52 one[31] = 1
53 pub, _ := PubKey(one)
54 if !ValidatePubKey(pub) {
55 t.Fatal("rejected a real public key")
56 }
57 if ValidatePubKey([32]byte{0xff}) {
58 t.Fatal("accepted an off-curve key")
59 }
60 }
61