github.com/aavshr/aws-sdk-go@v1.41.3/service/cloudfront/sign/privkey_test.go (about)

     1  package sign
     2  
     3  import (
     4  	"bytes"
     5  	"crypto/rsa"
     6  	"crypto/x509"
     7  	"encoding/pem"
     8  	"io"
     9  	"math/rand"
    10  	"strings"
    11  	"testing"
    12  )
    13  
    14  func generatePEM(randReader io.Reader, password []byte) (buf *bytes.Buffer, err error) {
    15  	k, err := rsa.GenerateKey(randReader, 1024)
    16  	if err != nil {
    17  		return nil, err
    18  	}
    19  
    20  	derBytes := x509.MarshalPKCS1PrivateKey(k)
    21  
    22  	var block *pem.Block
    23  	if password != nil {
    24  		block, err = x509.EncryptPEMBlock(randReader, "RSA PRIVATE KEY", derBytes, password, x509.PEMCipherAES128)
    25  	} else {
    26  		block = &pem.Block{
    27  			Type:  "RSA PRIVATE KEY",
    28  			Bytes: derBytes,
    29  		}
    30  	}
    31  
    32  	buf = &bytes.Buffer{}
    33  	err = pem.Encode(buf, block)
    34  	return buf, err
    35  }
    36  
    37  func TestLoadPemPrivKey(t *testing.T) {
    38  	reader, err := generatePEM(newRandomReader(rand.New(rand.NewSource(1))), nil)
    39  	if err != nil {
    40  		t.Errorf("Unexpected pem generation err %s", err.Error())
    41  	}
    42  
    43  	privKey, err := LoadPEMPrivKey(reader)
    44  	if err != nil {
    45  		t.Errorf("Unexpected key load error, %s", err.Error())
    46  	}
    47  	if privKey == nil {
    48  		t.Errorf("Expected valid privKey, but got nil")
    49  	}
    50  }
    51  
    52  func TestLoadPemPrivKeyInvalidPEM(t *testing.T) {
    53  	reader := strings.NewReader("invalid PEM data")
    54  	privKey, err := LoadPEMPrivKey(reader)
    55  
    56  	if err == nil {
    57  		t.Errorf("Expected error invalid PEM data error")
    58  	}
    59  	if privKey != nil {
    60  		t.Errorf("Expected nil privKey but got %#v", privKey)
    61  	}
    62  }
    63  
    64  func TestLoadEncryptedPEMPrivKey(t *testing.T) {
    65  	reader, err := generatePEM(newRandomReader(rand.New(rand.NewSource(1))), []byte("password"))
    66  	if err != nil {
    67  		t.Errorf("Unexpected pem generation err %s", err.Error())
    68  	}
    69  
    70  	privKey, err := LoadEncryptedPEMPrivKey(reader, []byte("password"))
    71  
    72  	if err != nil {
    73  		t.Errorf("Unexpected key load error, %s", err.Error())
    74  	}
    75  	if privKey == nil {
    76  		t.Errorf("Expected valid privKey, but got nil")
    77  	}
    78  }
    79  
    80  func TestLoadEncryptedPEMPrivKeyWrongPassword(t *testing.T) {
    81  	reader, err := generatePEM(newRandomReader(rand.New(rand.NewSource(1))), []byte("password"))
    82  	privKey, err := LoadEncryptedPEMPrivKey(reader, []byte("wrong password"))
    83  
    84  	if err == nil {
    85  		t.Errorf("Expected error invalid PEM data error")
    86  	}
    87  	if privKey != nil {
    88  		t.Errorf("Expected nil privKey but got %#v", privKey)
    89  	}
    90  }