// RetrieveGPGKey returns the PGP key specified as the pgpKey parameter, or queries // the public key from the keybase service if the parameter is a keybase username // prefixed with the phrase "keybase:" func RetrieveGPGKey(pgpKey string) (string, error) { const keybasePrefix = "keybase:" encryptionKey := pgpKey if strings.HasPrefix(pgpKey, keybasePrefix) { publicKeys, err := pgpkeys.FetchKeybasePubkeys([]string{pgpKey}) if err != nil { return "", errwrap.Wrapf(fmt.Sprintf("Error retrieving Public Key for %s: {{err}}", pgpKey), err) } encryptionKey = publicKeys[pgpKey] } return encryptionKey, nil }
func encryptPassword(password string, pgpKey string) (string, string, error) { const keybasePrefix = "keybase:" encryptionKey := pgpKey if strings.HasPrefix(pgpKey, keybasePrefix) { publicKeys, err := pgpkeys.FetchKeybasePubkeys([]string{pgpKey}) if err != nil { return "", "", errwrap.Wrapf( fmt.Sprintf("Error retrieving Public Key for %s: {{err}}", pgpKey), err) } encryptionKey = publicKeys[pgpKey] } fingerprints, encrypted, err := pgpkeys.EncryptShares([][]byte{[]byte(password)}, []string{encryptionKey}) if err != nil { return "", "", errwrap.Wrapf( fmt.Sprintf("Error encrypting password for %s: {{err}}", pgpKey), err) } return fingerprints[0], base64.StdEncoding.EncodeToString(encrypted[0]), nil }