123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- package sign
- import (
- "bytes"
- "crypto/rsa"
- "crypto/x509"
- "encoding/pem"
- "io"
- "math/rand"
- "strings"
- "testing"
- )
- func generatePEM(randReader io.Reader, password []byte) (buf *bytes.Buffer, err error) {
- k, err := rsa.GenerateKey(randReader, 1024)
- if err != nil {
- return nil, err
- }
- derBytes := x509.MarshalPKCS1PrivateKey(k)
- var block *pem.Block
- if password != nil {
- block, err = x509.EncryptPEMBlock(randReader, "RSA PRIVATE KEY", derBytes, password, x509.PEMCipherAES128)
- } else {
- block = &pem.Block{
- Type: "RSA PRIVATE KEY",
- Bytes: derBytes,
- }
- }
- buf = &bytes.Buffer{}
- err = pem.Encode(buf, block)
- return buf, err
- }
- func TestLoadPemPrivKey(t *testing.T) {
- reader, err := generatePEM(newRandomReader(rand.New(rand.NewSource(1))), nil)
- if err != nil {
- t.Errorf("Unexpected pem generation err %s", err.Error())
- }
- privKey, err := LoadPEMPrivKey(reader)
- if err != nil {
- t.Errorf("Unexpected key load error, %s", err.Error())
- }
- if privKey == nil {
- t.Errorf("Expected valid privKey, but got nil")
- }
- }
- func TestLoadPemPrivKeyInvalidPEM(t *testing.T) {
- reader := strings.NewReader("invalid PEM data")
- privKey, err := LoadPEMPrivKey(reader)
- if err == nil {
- t.Errorf("Expected error invalid PEM data error")
- }
- if privKey != nil {
- t.Errorf("Expected nil privKey but got %#v", privKey)
- }
- }
- func TestLoadEncryptedPEMPrivKey(t *testing.T) {
- reader, err := generatePEM(newRandomReader(rand.New(rand.NewSource(1))), []byte("password"))
- if err != nil {
- t.Errorf("Unexpected pem generation err %s", err.Error())
- }
- privKey, err := LoadEncryptedPEMPrivKey(reader, []byte("password"))
- if err != nil {
- t.Errorf("Unexpected key load error, %s", err.Error())
- }
- if privKey == nil {
- t.Errorf("Expected valid privKey, but got nil")
- }
- }
- func TestLoadEncryptedPEMPrivKeyWrongPassword(t *testing.T) {
- reader, err := generatePEM(newRandomReader(rand.New(rand.NewSource(1))), []byte("password"))
- privKey, err := LoadEncryptedPEMPrivKey(reader, []byte("wrong password"))
- if err == nil {
- t.Errorf("Expected error invalid PEM data error")
- }
- if privKey != nil {
- t.Errorf("Expected nil privKey but got %#v", privKey)
- }
- }
|