generate ecdsa public key from an input public key (#219)

This commit is contained in:
Richard Ramos
2021-12-02 03:24:12 -04:00
committed by GitHub
parent e467196d68
commit 73e57d3948
2 changed files with 51 additions and 0 deletions

View File

@@ -1,6 +1,7 @@
package crypto
import (
"crypto/ecdsa"
"crypto/rand"
"testing"
)
@@ -94,3 +95,48 @@ func TestECDSAMarshalLoop(t *testing.T) {
}
}
func TestECDSAPublicKeyFromPubKey(t *testing.T) {
ecdsaPrivK, err := ecdsa.GenerateKey(ECDSACurve, rand.Reader)
if err != nil {
t.Fatal(err)
}
privK, _, err := ECDSAKeyPairFromKey(ecdsaPrivK)
if err != nil {
t.Fatal(err)
}
data := []byte("Hello world!")
signature, err := privK.Sign(data)
if err != nil {
t.Fatal(err)
}
pubKey, err := ECDSAPublicKeyFromPubKey(ecdsaPrivK.PublicKey)
if err != nil {
t.Fatal(err)
}
ok, err := pubKey.Verify(data, signature)
if err != nil {
t.Fatal(err)
}
if !ok {
t.Fatal("signature didn't match")
}
pubB, err := MarshalPublicKey(pubKey)
if err != nil {
t.Fatal(err)
}
pubNew, err := UnmarshalPublicKey(pubB)
if err != nil {
t.Fatal(err)
}
if !pubKey.Equals(pubNew) || !pubNew.Equals(pubKey) {
t.Fatal("keys are not equal")
}
}