github.com/hairyhenderson/gomplate/v3@v3.11.7/crypto/ecdsa_test.go (about) 1 package crypto 2 3 import ( 4 "crypto/ecdsa" 5 "crypto/elliptic" 6 "crypto/rand" 7 "crypto/x509" 8 "encoding/pem" 9 "strings" 10 "testing" 11 12 "github.com/stretchr/testify/assert" 13 ) 14 15 func genECDSAPrivKey() (*ecdsa.PrivateKey, string) { 16 priv, _ := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) 17 der, _ := x509.MarshalECPrivateKey(priv) 18 privBlock := &pem.Block{ 19 Type: "EC PRIVATE KEY", 20 Bytes: der, 21 } 22 return priv, string(pem.EncodeToMemory(privBlock)) 23 } 24 25 func deriveECPubkey(priv *ecdsa.PrivateKey) string { 26 b, _ := x509.MarshalPKIXPublicKey(&priv.PublicKey) 27 pubBlock := &pem.Block{ 28 Type: "PUBLIC KEY", 29 Bytes: b, 30 } 31 testPubKey := string(pem.EncodeToMemory(pubBlock)) 32 return testPubKey 33 } 34 35 func TestECDSAGenerateKey(t *testing.T) { 36 key, err := ECDSAGenerateKey(elliptic.P224()) 37 assert.NoError(t, err) 38 assert.True(t, strings.HasPrefix(string(key), 39 "-----BEGIN EC PRIVATE KEY-----")) 40 assert.True(t, strings.HasSuffix(string(key), 41 "-----END EC PRIVATE KEY-----\n")) 42 43 key, err = ECDSAGenerateKey(elliptic.P256()) 44 assert.NoError(t, err) 45 assert.True(t, strings.HasPrefix(string(key), 46 "-----BEGIN EC PRIVATE KEY-----")) 47 assert.True(t, strings.HasSuffix(string(key), 48 "-----END EC PRIVATE KEY-----\n")) 49 50 key, err = ECDSAGenerateKey(elliptic.P384()) 51 assert.NoError(t, err) 52 assert.True(t, strings.HasPrefix(string(key), 53 "-----BEGIN EC PRIVATE KEY-----")) 54 assert.True(t, strings.HasSuffix(string(key), 55 "-----END EC PRIVATE KEY-----\n")) 56 57 key, err = ECDSAGenerateKey(elliptic.P521()) 58 assert.NoError(t, err) 59 assert.True(t, strings.HasPrefix(string(key), 60 "-----BEGIN EC PRIVATE KEY-----")) 61 assert.True(t, strings.HasSuffix(string(key), 62 "-----END EC PRIVATE KEY-----\n")) 63 } 64 65 func TestECDSADerivePublicKey(t *testing.T) { 66 _, err := ECDSADerivePublicKey(nil) 67 assert.Error(t, err) 68 69 _, err = ECDSADerivePublicKey([]byte(`-----BEGIN FOO----- 70 -----END FOO-----`)) 71 assert.Error(t, err) 72 73 priv, privKey := genECDSAPrivKey() 74 expected := deriveECPubkey(priv) 75 76 actual, err := ECDSADerivePublicKey([]byte(privKey)) 77 assert.NoError(t, err) 78 assert.Equal(t, expected, string(actual)) 79 }