Sha256: 3f1becdb0ac586760cac975a00af50d9b76a90b8c0d32aec167541108194cb6b
Contents?: true
Size: 1.95 KB
Versions: 4
Compression:
Stored size: 1.95 KB
Contents
package main import ( "C" "bytes" "strings" "net/http" "encoding/json" "io/ioutil" "log" "golang.org/x/crypto/openpgp" "golang.org/x/crypto/openpgp/armor" ) const urlBase = "https://env-service.herokuapp.com/" type EnvResponse struct { Env string `json:"env"` EncryptedPrivkey string `json:"encrypted_privkey"` } //export EnvJson func EnvJson(envkey *C.char) *C.char { split := strings.Split(C.GoString(envkey), "-") envkeyParam, pw := split[0], split[1] envResponse := new(EnvResponse) var err error err = getJson(urlBase + envkeyParam, envResponse) if (err != nil){ return C.CString("") } var decrypted string decrypted, err = decrypt(envResponse.Env, envResponse.EncryptedPrivkey, pw) if (err != nil){ return C.CString("") } return C.CString(decrypted) } func getJson(url string, target interface{}) error { r, err := http.Get(url) if err != nil { log.Fatal(err) return err } defer r.Body.Close() return json.NewDecoder(r.Body).Decode(target) } func decrypt(cipher, privkey, pw string) (string, error) { // Open the private key file keyringFileBuffer := bytes.NewBufferString(privkey) entityList, err := openpgp.ReadArmoredKeyRing(keyringFileBuffer) if (err != nil){ log.Fatal(err) return "", err } entity := entityList[0] // Get the passphrase and read the private key. passphraseByte := []byte(pw) entity.PrivateKey.Decrypt(passphraseByte) for _, subkey := range entity.Subkeys { subkey.PrivateKey.Decrypt(passphraseByte) } // Decode armored message decbuf := bytes.NewBufferString(cipher) result, err := armor.Decode(decbuf) if err != nil { return "", err } // Decrypt it with the contents of the private key md, err := openpgp.ReadMessage(result.Body, entityList, nil, nil) if err != nil { return "", err } bytes, err := ioutil.ReadAll(md.UnverifiedBody) if err != nil { return "", err } return string(bytes), nil } func main() {}
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
envkey-0.1.5 | ext/envkey.go |
envkey-0.1.4 | ext/envkey.go |
envkey-0.1.3 | ext/envkey.go |
envkey-0.1.2 | ext/envkey.go |