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