package cryptutil import ( "encoding/pem" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) // generated using: // // openssl genpkey -algorithm x25519 -out priv.pem // openssl pkey -in priv.pem -out pub.pem -pubout var ( rawPrivateX25519Key = []byte(`-----BEGIN PRIVATE KEY----- MC4CAQAwBQYDK2VuBCIEIKALoNgzCksH0v0Bc7Ghl8vGin4MAIKpmtZSmaMN0Vtb -----END PRIVATE KEY----- `) rawPublicX25519Key = []byte(`-----BEGIN PUBLIC KEY----- MCowBQYDK2VuAyEAk63g8PY1JJTkrranWTxGSd/yA5kAgJlPk4/srMKg9mg= -----END PUBLIC KEY----- `) ) func TestPKCS8PrivateKey(t *testing.T) { block, _ := pem.Decode(rawPrivateX25519Key) kek, err := ParsePKCS8PrivateKey(block.Bytes) assert.NoError(t, err) assert.IsType(t, &PrivateKeyEncryptionKey{}, kek) t.Run("marshal", func(t *testing.T) { der, err := MarshalPKCS8PrivateKey(kek) require.NoError(t, err) actual := pem.EncodeToMemory(&pem.Block{ Type: "PRIVATE KEY", Bytes: der, }) assert.Equal(t, rawPrivateX25519Key, actual) }) } func TestPKIXPublicKey(t *testing.T) { block, _ := pem.Decode(rawPublicX25519Key) kek, err := ParsePKIXPublicKey(block.Bytes) assert.NoError(t, err) assert.IsType(t, &PublicKeyEncryptionKey{}, kek) t.Run("marshal", func(t *testing.T) { der, err := MarshalPKIXPublicKey(kek) require.NoError(t, err) actual := pem.EncodeToMemory(&pem.Block{ Type: "PUBLIC KEY", Bytes: der, }) assert.Equal(t, rawPublicX25519Key, actual) }) }