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