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 }