"veyron/security": Expose Load/SavePEMKey
LoadPEMKey and SavePEMKey methods would be needed by WSPR to manage
its private key within Chrome. This CL exposes these two methods.
Change-Id: I8e16fccce899ed305471549978a33d24c2453130
diff --git a/security/principal.go b/security/principal.go
index 2b1f211..8be1a27 100644
--- a/security/principal.go
+++ b/security/principal.go
@@ -133,7 +133,7 @@
return nil, err
}
defer f.Close()
- key, err := loadPEMKey(f, passphrase)
+ key, err := LoadPEMKey(f, passphrase)
if err != nil {
return nil, err
}
@@ -160,7 +160,7 @@
if err != nil {
return nil, fmt.Errorf("failed to generate private key: %v", err)
}
- if err := savePEMKey(f, key, passphrase); err != nil {
+ if err := SavePEMKey(f, key, passphrase); err != nil {
return nil, fmt.Errorf("failed to save private key to %q: %v", keyFile, err)
}
return key, nil
diff --git a/security/principal_test.go b/security/principal_test.go
index fd6d05d..8be6f25 100644
--- a/security/principal_test.go
+++ b/security/principal_test.go
@@ -103,7 +103,7 @@
panic(err)
}
defer f.Close()
- if err = savePEMKey(f, key, passphrase); err != nil {
+ if err = SavePEMKey(f, key, passphrase); err != nil {
panic(err)
}
return dir
diff --git a/security/util.go b/security/util.go
index b33d7fd..23268f4 100644
--- a/security/util.go
+++ b/security/util.go
@@ -30,9 +30,9 @@
var PassphraseErr = errors.New("passphrase incorrect for decrypting private key")
-// loadPEMKey loads a key from 'r'. returns PassphraseErr for incorrect Passphrase.
+// LoadPEMKey loads a key from 'r'. returns PassphraseErr for incorrect Passphrase.
// If the key held in 'r' is unencrypted, 'passphrase' will be ignored.
-func loadPEMKey(r io.Reader, passphrase []byte) (interface{}, error) {
+func LoadPEMKey(r io.Reader, passphrase []byte) (interface{}, error) {
pemBlockBytes, err := ioutil.ReadAll(r)
if err != nil {
return nil, err
@@ -62,12 +62,12 @@
return nil, fmt.Errorf("PEM key block has an unrecognized type: %v", pemBlock.Type)
}
-// savePEMKey marshals 'key', encrypts it using 'passphrase', and saves the bytes to 'w' in PEM format.
+// SavePEMKey marshals 'key', encrypts it using 'passphrase', and saves the bytes to 'w' in PEM format.
// If passphrase is nil, the key will not be encrypted.
//
// For example, if key is an ECDSA private key, it will be marshaled
// in ASN.1, DER format, encrypted, and then written in a PEM block.
-func savePEMKey(w io.Writer, key interface{}, passphrase []byte) error {
+func SavePEMKey(w io.Writer, key interface{}, passphrase []byte) error {
var data []byte
var err error
switch k := key.(type) {
diff --git a/security/util_test.go b/security/util_test.go
index 356f98c..9d098a6 100644
--- a/security/util_test.go
+++ b/security/util_test.go
@@ -20,11 +20,11 @@
}
var buf bytes.Buffer
- if err := savePEMKey(&buf, key, nil); err != nil {
+ if err := SavePEMKey(&buf, key, nil); err != nil {
t.Fatalf("Failed to save ECDSA private key: %v", err)
}
- loadedKey, err := loadPEMKey(&buf, nil)
+ loadedKey, err := LoadPEMKey(&buf, nil)
if !reflect.DeepEqual(loadedKey, key) {
t.Fatalf("Got key %v, but want %v", loadedKey, key)
}
@@ -40,28 +40,28 @@
var buf bytes.Buffer
// Test incorrect passphrase.
- if err := savePEMKey(&buf, key, pass); err != nil {
+ if err := SavePEMKey(&buf, key, pass); err != nil {
t.Fatalf("Failed to save ECDSA private key: %v", err)
}
- loadedKey, err := loadPEMKey(&buf, incorrect_pass)
+ loadedKey, err := LoadPEMKey(&buf, incorrect_pass)
if loadedKey != nil && err != nil {
t.Errorf("expected (nil, err != nil) received (%v,%v)", loadedKey, err)
}
// Test correct password.
- if err := savePEMKey(&buf, key, pass); err != nil {
+ if err := SavePEMKey(&buf, key, pass); err != nil {
t.Fatalf("Failed to save ECDSA private key: %v", err)
}
- loadedKey, err = loadPEMKey(&buf, pass)
+ loadedKey, err = LoadPEMKey(&buf, pass)
if !reflect.DeepEqual(loadedKey, key) {
t.Fatalf("Got key %v, but want %v", loadedKey, key)
}
// Test nil passphrase.
- if err := savePEMKey(&buf, key, pass); err != nil {
+ if err := SavePEMKey(&buf, key, pass); err != nil {
t.Fatalf("Failed to save ECDSA private key: %v", err)
}
- if loadedKey, err = loadPEMKey(&buf, nil); loadedKey != nil || err != PassphraseErr {
+ if loadedKey, err = LoadPEMKey(&buf, nil); loadedKey != nil || err != PassphraseErr {
t.Fatalf("expected(nil, PassphraseError), instead got (%v, %v)", loadedKey, err)
}
}