Skip to content

Instantly share code, notes, and snippets.

@looselycoupled
Last active February 9, 2023 04:13
Show Gist options
  • Save looselycoupled/b1a4ced402c2ca05c4788822c7de71f1 to your computer and use it in GitHub Desktop.
Save looselycoupled/b1a4ced402c2ca05c4788822c7de71f1 to your computer and use it in GitHub Desktop.
Simple example of using the ProtonMail/gopenpgp package to quickly create ed25519 keys and then encrypt/decrypt some data.
package foo
import (
"github.com/ProtonMail/gopenpgp/v2/crypto"
"github.com/ProtonMail/gopenpgp/v2/helper"
"github.com/stretchr/testify/require"
"testing"
)
func TestGenerateGPGKeys(t *testing.T) {
name := "bob"
email := "bob@example.com"
passphrase := []byte("some random passphrase")
secretkey, err := crypto.GenerateKey(name, email, "x25519", 0)
require.NoError(t, err)
secretkey, err = secretkey.Lock(passphrase)
require.NoError(t, err)
skarmor, err := secretkey.Armor()
pkarmor, err := secretkey.GetArmoredPublicKey()
// encrypt plain text message using public key
plaintext := []byte("plain text")
armor, err := helper.EncryptBinaryMessageArmored(pkarmor, plaintext)
require.NoError(t, err)
// decrypt armored encrypted message using the private key and obtain plain text
decrypted, err := helper.DecryptBinaryMessageArmored(skarmor, passphrase, armor)
require.NoError(t, err)
require.Equal(t, plaintext, decrypted)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment