I am trying to print a PGP public key in an ASCII armored encoding using Go's openpgp/armor
package.
The output I would expect:
-----BEGIN PGP PUBLIC KEY BLOCK-----
<base64 encoded bytes of public key>
<checksum>
-----END PGP PUBLIC KEY BLOCK-----
The output I get:
-----BEGIN PGP PUBLIC KEY BLOCK-----
<first part of base64 encoded bytes of public key>
It only prints the first part of the public key.
The public key is obtained from a local keyring file and processed as follows:
keyRingFileBuffer, err := os.Open(keyRingFilePath)
if err != nil {
log.Fatal(err)
}
defer keyRingFileBuffer.Close()
keyRing,err := openpgp.ReadKeyRing(keyRingFileBuffer)
if err != nil {
log.Fatal(err)
}
for _, k := range keyRing {
w, _ := armor.Encode(os.Stdout, openpgp.PublicKeyType, nil)
k.PrimaryKey.Serialize(w)
}
Am I using the package incorrectly? Any ideas on how to track the reason for this (in my opinion) wrong output?
Whoops, after putting a bounty on the question I found an answer. Oh well.
The armor
writer must be closed in order to add that end line.
pubKeyBuf := bytes.NewBuffer(nil)
pubKeyWriter, err := armor.Encode(pubKeyBuf, openpgp.PublicKeyType, nil)
checkIfError(err)
err = e.Serialize(pubKeyWriter)
pubKeyWriter.Close()
checkIfError(err)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With