ecdsa_test.go raw
1 package p256k1
2
3 import (
4 "crypto/rand"
5 "testing"
6 )
7
8 func TestECDSASignVerify(t *testing.T) {
9 // Generate a random private key
10 seckey := make([]byte, 32)
11 if _, err := rand.Read(seckey); err != nil {
12 t.Fatal(err)
13 }
14
15 // Ensure it's a valid private key
16 var scalar Scalar
17 for !scalar.setB32Seckey(seckey) {
18 if _, err := rand.Read(seckey); err != nil {
19 t.Fatal(err)
20 }
21 }
22
23 // Create public key
24 var pubkey PublicKey
25 if err := ECPubkeyCreate(&pubkey, seckey); err != nil {
26 t.Fatalf("failed to create public key: %v", err)
27 }
28
29 // Create message hash
30 msghash := make([]byte, 32)
31 if _, err := rand.Read(msghash); err != nil {
32 t.Fatal(err)
33 }
34
35 // Sign
36 var sig ECDSASignature
37 if err := ECDSASign(&sig, msghash, seckey); err != nil {
38 t.Fatalf("failed to sign: %v", err)
39 }
40
41 // Verify
42 if !ECDSAVerify(&sig, msghash, &pubkey) {
43 t.Error("signature verification failed")
44 }
45
46 // Test with wrong message
47 wrongMsg := make([]byte, 32)
48 copy(wrongMsg, msghash)
49 wrongMsg[0] ^= 1
50 if ECDSAVerify(&sig, wrongMsg, &pubkey) {
51 t.Error("signature verification should fail with wrong message")
52 }
53 }
54
55 func TestECDSASignCompact(t *testing.T) {
56 // Generate a random private key
57 seckey := make([]byte, 32)
58 if _, err := rand.Read(seckey); err != nil {
59 t.Fatal(err)
60 }
61
62 // Ensure it's a valid private key
63 var scalar Scalar
64 for !scalar.setB32Seckey(seckey) {
65 if _, err := rand.Read(seckey); err != nil {
66 t.Fatal(err)
67 }
68 }
69
70 // Create public key
71 var pubkey PublicKey
72 if err := ECPubkeyCreate(&pubkey, seckey); err != nil {
73 t.Fatalf("failed to create public key: %v", err)
74 }
75
76 // Create message hash
77 msghash := make([]byte, 32)
78 if _, err := rand.Read(msghash); err != nil {
79 t.Fatal(err)
80 }
81
82 // Sign using compact format
83 var compactSig ECDSASignatureCompact
84 if err := ECDSASignCompact(&compactSig, msghash, seckey); err != nil {
85 t.Fatalf("failed to sign: %v", err)
86 }
87
88 // Verify compact signature
89 if !ECDSAVerifyCompact(&compactSig, msghash, &pubkey) {
90 t.Error("compact signature verification failed")
91 }
92
93 // Test conversion
94 var sig ECDSASignature
95 if err := sig.FromCompact(&compactSig); err != nil {
96 t.Fatalf("failed to parse compact signature: %v", err)
97 }
98
99 // Verify using regular format
100 if !ECDSAVerify(&sig, msghash, &pubkey) {
101 t.Error("signature verification failed after conversion")
102 }
103 }
104
105