diff --git a/README.md b/README.md index 88e874c..166add9 100644 --- a/README.md +++ b/README.md @@ -114,21 +114,20 @@ const privkey = `-----BEGIN PGP PRIVATE KEY BLOCK----- const passphrase = `the passphrase of the private key` // what the privKey is encrypted with -privateKeyRing, err := crypto.ReadArmoredKeyRing(strings.NewReader(privkey)) publicKeyRing, err := crypto.ReadArmoredKeyRing(strings.NewReader(pubkey)) -// encrypt message using public key and can be optionally signed using private key and passphrase -armor, err := pgp.EncryptMessage("plain text", publicKeyRing, privateKeyRing, passphrase, false) -// OR +privateKeyRing, err := crypto.ReadArmoredKeyRing(strings.NewReader(privkey)) privateKeyRing.Unlock([]byte(passphrase)) // if private key is locked with passphrase -armor, err := publicKeyRing.EncryptString("plain text", privateKeyRing) -// decrypt armored encrypted message using the private key and the passphrase of the private key -plainText, err := pgp.DecryptMessage(armor, privateKeyRing, passphrase) -// OR -signedText, err := privateKeyRing.DecryptString(armor) +// encrypt message using public key, can be optionally signed using private key +armor, err := publicKeyRing.EncryptMessage("plain text", privateKeyRing) + +// decrypt armored encrypted message using the private key +signedText, err := privateKeyRing.DecryptMessage(armor) plainText = signedText.String +// verify signature (optional) +signed = signedText.Signed.IsBy(publicKeyRing) ``` ### Generate key @@ -139,7 +138,7 @@ The library supports RSA with different key lengths or Curve25519 keys. ```go var pgp = crypto.GopenPGP{} -var ( +const ( localPart = "name.surname" domain = "example.com" passphrase = "LongSecret" @@ -166,7 +165,7 @@ const privkey = `-----BEGIN PGP PRIVATE KEY BLOCK----- passphrase = "LongSecret" const trimNewlines = false -signingKeyRing, err := ReadArmoredKeyRing(strings.NewReader(privkey)) +signingKeyRing, err := crypto.ReadArmoredKeyRing(strings.NewReader(privkey)) signature, err := signingKeyRing.SignTextDetached(plaintext, passphrase, trimNewlines) // passphrase is optional if the key is already unlocked @@ -188,7 +187,7 @@ const signature = `-----BEGIN PGP SIGNATURE----- const verifyTime = 0 const trimNewlines = false -signingKeyRing, err := ReadArmoredKeyRing(strings.NewReader(pubkey)) +signingKeyRing, err := crypto.ReadArmoredKeyRing(strings.NewReader(pubkey)) verified, err := signingKeyRing.VerifyTextDetachedSig(signature, signedPlainText, verifyTime, trimNewlines) ``` @@ -204,7 +203,7 @@ const privkey = `-----BEGIN PGP PRIVATE KEY BLOCK----- -----END PGP PRIVATE KEY BLOCK-----` // encrypted private key passphrase = "LongSecret" -signingKeyRing, err := ReadArmoredKeyRing(strings.NewReader(privkey)) +signingKeyRing, err := crypto.ReadArmoredKeyRing(strings.NewReader(privkey)) signature, err := signingKeyRing.SignBinDetached(data, passphrase) // passphrase is optional if the key is already unlocked @@ -225,7 +224,7 @@ const signature = `-----BEGIN PGP SIGNATURE----- const verifyTime = 0 -signingKeyRing, err := ReadArmoredKeyRing(strings.NewReader(pubkey)) +signingKeyRing, err := crypto.ReadArmoredKeyRing(strings.NewReader(pubkey)) verified, err := signingKeyRing.VerifyBinDetachedSig(signature, data, verifyTime) ``` diff --git a/crypto/keyring.go b/crypto/keyring.go index 35afe8b..104b091 100644 --- a/crypto/keyring.go +++ b/crypto/keyring.go @@ -228,9 +228,9 @@ func (kr *KeyRing) EncryptArmored(w io.Writer, sign *KeyRing) (wc io.WriteCloser return } -// EncryptString encrypts and armors a string to the keyring's owner. +// EncryptMessage encrypts and armors a string to the keyring's owner. // Wrapper of Encrypt. -func (kr *KeyRing) EncryptString(s string, sign *KeyRing) (encrypted string, err error) { +func (kr *KeyRing) EncryptMessage(s string, sign *KeyRing) (encrypted string, err error) { var b bytes.Buffer w, err := kr.EncryptArmored(&b, sign) if err != nil { @@ -272,10 +272,10 @@ func (kr *KeyRing) EncryptSymmetric(textToEncrypt string, canonicalizeText bool) return } -// DecryptString decrypts an armored string sent to the keypair's owner. +// DecryptMessage decrypts an armored string sent to the keypair's owner. // If error is errors.ErrSignatureExpired (from golang.org/x/crypto/openpgp/errors), // contents are still provided if library clients wish to process this message further. -func (kr *KeyRing) DecryptString(encrypted string) (SignedString, error) { +func (kr *KeyRing) DecryptMessage(encrypted string) (SignedString, error) { r, signed, err := kr.DecryptArmored(strings.NewReader(encrypted)) if err != nil && err != pgperrors.ErrSignatureExpired { return SignedString{String: encrypted, Signed: nil}, err @@ -290,15 +290,15 @@ func (kr *KeyRing) DecryptString(encrypted string) (SignedString, error) { return SignedString{String: s, Signed: signed}, nil } -// DecryptStringIfNeeded data if has armored PGP message format, if not return original data. +// DecryptMessageIfNeeded data if has armored PGP message format, if not return original data. // If error is errors.ErrSignatureExpired (from golang.org/x/crypto/openpgp/errors), // contents are still provided if library clients wish to process this message further. -func (kr *KeyRing) DecryptStringIfNeeded(data string) (decrypted string, err error) { +func (kr *KeyRing) DecryptMessageIfNeeded(data string) (decrypted string, err error) { if re := regexp.MustCompile("^-----BEGIN " + constants.PGPMessageHeader + "-----(?s:.+)-----END " + constants.PGPMessageHeader + "-----"); re.MatchString(data) { var signed SignedString - signed, err = kr.DecryptString(data) + signed, err = kr.DecryptMessage(data) decrypted = signed.String } else { decrypted = data diff --git a/crypto/keyring_test.go b/crypto/keyring_test.go index 6abcd8a..21d8f1b 100644 --- a/crypto/keyring_test.go +++ b/crypto/keyring_test.go @@ -57,7 +57,7 @@ func init() { } func TestKeyRing_Decrypt(t *testing.T) { - decString, err := testPrivateKeyRing.DecryptStringIfNeeded(readTestFile("keyring_token", false)) + decString, err := testPrivateKeyRing.DecryptMessageIfNeeded(readTestFile("keyring_token", false)) if err != nil { t.Fatal("Cannot decrypt token:", err) } @@ -66,14 +66,14 @@ func TestKeyRing_Decrypt(t *testing.T) { } func TestKeyRing_Encrypt(t *testing.T) { - encrypted, err := testPublicKeyRing.EncryptString(testToken, testPrivateKeyRing) + encrypted, err := testPublicKeyRing.EncryptMessage(testToken, testPrivateKeyRing) if err != nil { t.Fatal("Cannot encrypt token:", err) } // We can't just check if encrypted == testEncryptedToken // Decrypt instead - ss, err := testPrivateKeyRing.DecryptString(encrypted) + ss, err := testPrivateKeyRing.DecryptMessage(encrypted) if err != nil { t.Fatal("Cannot decrypt token:", err) }