File: privkey_test.go

package info (click to toggle)
golang-github-aws-aws-sdk-go 1.1.14%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 25,048 kB
  • ctags: 30,114
  • sloc: ruby: 193; makefile: 98
file content (90 lines) | stat: -rw-r--r-- 2,177 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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)
	}
}