privkey_test.go 2.1 KB

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