60 lines
1.2 KiB
Go
60 lines
1.2 KiB
Go
/*
|
|
Copyright IBM Corp. All Rights Reserved.
|
|
|
|
SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
package sw
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"crypto/rsa"
|
|
"crypto/sha256"
|
|
"crypto/x509"
|
|
"encoding/asn1"
|
|
"math/big"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
type rsaPublicKeyASN struct {
|
|
N *big.Int
|
|
E int
|
|
}
|
|
|
|
func TestRSAPublicKey(t *testing.T) {
|
|
lowLevelKey, err := rsa.GenerateKey(rand.Reader, 2048)
|
|
require.NoError(t, err)
|
|
k := &rsaPublicKey{&lowLevelKey.PublicKey}
|
|
|
|
require.False(t, k.Symmetric())
|
|
require.False(t, k.Private())
|
|
|
|
k.pubKey = nil
|
|
ski := k.SKI()
|
|
require.Nil(t, ski)
|
|
|
|
k.pubKey = &lowLevelKey.PublicKey
|
|
ski = k.SKI()
|
|
raw, err := asn1.Marshal(rsaPublicKeyASN{N: k.pubKey.N, E: k.pubKey.E})
|
|
require.NoError(t, err, "asn1 marshal failed")
|
|
hash := sha256.New()
|
|
hash.Write(raw)
|
|
ski2 := hash.Sum(nil)
|
|
require.Equal(t, ski, ski2, "SKI is not computed in the right way.")
|
|
|
|
pk, err := k.PublicKey()
|
|
require.NoError(t, err)
|
|
require.Equal(t, k, pk)
|
|
|
|
bytes, err := k.Bytes()
|
|
require.NoError(t, err)
|
|
bytes2, err := x509.MarshalPKIXPublicKey(k.pubKey)
|
|
require.NoError(t, err)
|
|
require.Equal(t, bytes2, bytes, "bytes are not computed in the right way.")
|
|
|
|
_, err = (&rsaPublicKey{}).Bytes()
|
|
require.EqualError(t, err, "Failed marshalling key. Key is nil.")
|
|
}
|