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  }