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  }