Skip to content

Instantly share code, notes, and snippets.

@jvehent
Created April 5, 2014 16:39
Show Gist options
  • Save jvehent/9994311 to your computer and use it in GitHub Desktop.
Save jvehent/9994311 to your computer and use it in GitHub Desktop.
Parsing PGP keys in Go
package main
import (
"bytes"
"code.google.com/p/go.crypto/openpgp"
"crypto/rsa"
"encoding/hex"
"fmt"
"strconv"
"strings"
)
func main() {
// iterate over the keys, and load them into an io.Reader keyring
for _, key := range PUBLICPGPKEYS {
// Load PGP public key
els, err := openpgp.ReadArmoredKeyRing(bytes.NewBufferString(key))
if err != nil {
panic(err)
}
if len(els) != 1 {
err = fmt.Errorf("Public GPG Key contains %d entities, wanted 1\n", len(els))
panic(err)
}
for _, el := range els {
keyid := strconv.FormatUint(el.PrimaryKey.KeyId, 16)
fmt.Println("Details of Key ID", strings.ToUpper(keyid))
fingerprint := hex.EncodeToString(el.PrimaryKey.Fingerprint[:])
fmt.Println("Fingerprint:", strings.ToUpper(fingerprint))
fmt.Println("Creation Time:", el.PrimaryKey.CreationTime)
switch el.PrimaryKey.PubKeyAlgo {
case 1:
fmt.Println("Pubkey algorithm: RSA")
parseRSAPubKey(el.PrimaryKey.PublicKey.(*rsa.PublicKey))
case 2:
fmt.Println("Pubkey algorithm: RSA Encrypt Only")
case 3:
fmt.Println("Pubkey algorithm: RSA Sign Only")
case 16:
fmt.Println("Pubkey algorithm: ElGamal")
case 17:
fmt.Println("Pubkey algorithm: DSA")
case 18:
fmt.Println("Pubkey algorithm: ECDH")
case 19:
fmt.Println("Pubkey algorithm: ECDSA")
}
fmt.Println("Identities:")
for name, id := range el.Identities {
fmt.Println("-", name)
fmt.Println("\tsignatures:")
for _, sig := range id.Signatures {
hexsig := strconv.FormatUint(*sig.IssuerKeyId, 16)
fmt.Println("\t-", strings.ToUpper(hexsig), sig.CreationTime.String())
}
}
}
}
}
func parseRSAPubKey(pubkey *rsa.PublicKey) (err error) {
fmt.Println("Public Modulus:", pubkey.N.BitLen(), "bits. Public exponent:", pubkey.E)
return
}
// PGP public key that is authorized to sign actions
var PUBLICPGPKEYS = [...]string{
`
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: SKS 1.1.4
Comment: Hostname: keyserver.mozilla.org
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
uH0wPPE=
=QsLA
-----END PGP PUBLIC KEY BLOCK-----
`}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment