Last active
December 19, 2024 09:32
-
-
Save stuart-warren/93750a142d3de4e8fdd2 to your computer and use it in GitHub Desktop.
Revisions
-
stuart-warren renamed this gist
Sep 10, 2014 . 1 changed file with 0 additions and 0 deletions.There are no files selected for viewing
File renamed without changes. -
stuart-warren revised this gist
Sep 10, 2014 . 1 changed file with 112 additions and 50 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,61 +1,123 @@ package main import ( "bytes" "code.google.com/p/go.crypto/openpgp" "encoding/base64" "io/ioutil" "log" "os" ) // create gpg keys with // $ gpg --gen-key // ensure you correct paths and passphrase const mySecretString = "this is so very secret!" const prefix, passphrase = "/Users/stuart-warren/", "1234" const secretKeyring = prefix + ".gnupg/secring.gpg" const publicKeyring = prefix + ".gnupg/pubring.gpg" func encTest(secretString string) (string, error) { log.Println("Secret to hide:", secretString) log.Println("Public Keyring:", publicKeyring) // Read in public key keyringFileBuffer, _ := os.Open(publicKeyring) defer keyringFileBuffer.Close() entityList, err := openpgp.ReadKeyRing(keyringFileBuffer) if err != nil { return "", err } // encrypt string buf := new(bytes.Buffer) w, err := openpgp.Encrypt(buf, entityList, nil, nil, nil) if err != nil { return "", err } _, err = w.Write([]byte(mySecretString)) if err != nil { return "", err } err = w.Close() if err != nil { return "", err } // Encode to base64 bytes, err := ioutil.ReadAll(buf) if err != nil { return "", err } encStr := base64.StdEncoding.EncodeToString(bytes) // Output encrypted/encoded string log.Println("Encrypted Secret:", encStr) return encStr, nil } func decTest(encString string) (string, error) { log.Println("Secret Keyring:", secretKeyring) log.Println("Passphrase:", passphrase) // init some vars var entity *openpgp.Entity var entityList openpgp.EntityList // Open the private key file keyringFileBuffer, err := os.Open(secretKeyring) if err != nil { return "", err } defer keyringFileBuffer.Close() entityList, err = openpgp.ReadKeyRing(keyringFileBuffer) if err != nil { return "", err } entity = entityList[0] // Get the passphrase and read the private key. // Have not touched the encrypted string yet passphraseByte := []byte(passphrase) log.Println("Decrypting private key using passphrase") entity.PrivateKey.Decrypt(passphraseByte) for _, subkey := range entity.Subkeys { subkey.PrivateKey.Decrypt(passphraseByte) } log.Println("Finished decrypting private key using passphrase") // Decode the base64 string dec, err := base64.StdEncoding.DecodeString(encString) if err != nil { return "", err } // Decrypt it with the contents of the private key md, err := openpgp.ReadMessage(bytes.NewBuffer(dec), entityList, nil, nil) if err != nil { return "", err } bytes, err := ioutil.ReadAll(md.UnverifiedBody) if err != nil { return "", err } decStr := string(bytes) return decStr, nil } func main() { encStr, err := encTest(mySecretString) if err != nil { log.Fatal(err) } decStr, err := decTest(encStr) if err != nil { log.Fatal(err) } // should be done log.Println("Decrypted Secret:", decStr) } -
stuart-warren revised this gist
Sep 9, 2014 . 1 changed file with 3 additions and 3 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -9,9 +9,9 @@ import ( "os" ) // create gpg keys with // $ gpg --gen-key // ensure you correct paths and passphrase const mysecretstring = "this is so very secret!" const secretKeyring = "/Users/stuart-warren/.gnupg/secring.gpg" -
stuart-warren renamed this gist
Sep 7, 2014 . 1 changed file with 0 additions and 0 deletions.There are no files selected for viewing
File renamed without changes. -
stuart-warren created this gist
Sep 7, 2014 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,61 @@ package main import ( "log" "bytes" "code.google.com/p/go.crypto/openpgp" "encoding/base64" "io/ioutil" "os" ) # create gpg keys with # $ gpg --gen-key # ensure you correct paths and passphrase const mysecretstring = "this is so very secret!" const secretKeyring = "/Users/stuart-warren/.gnupg/secring.gpg" const publicKeyring = "/Users/stuart-warren/.gnupg/pubring.gpg" const passphrase = "1234" func main() { log.Printf("Secret: ", mysecretstring) log.Printf("Secret Keyring: ", secretKeyring) log.Printf("Public Keyring: ", publicKeyring) log.Printf("Passphrase: ", passphrase) keyringFileBuffer, _ := os.Open(publicKeyring) defer keyringFileBuffer.Close() entitylist, _ := openpgp.ReadKeyRing(keyringFileBuffer) buf := new(bytes.Buffer) w, _ := openpgp.Encrypt(buf, entitylist, nil, nil, nil) w.Write([]byte(mysecretstring)) bytesp, _ := ioutil.ReadAll(buf) encstr := base64.StdEncoding.EncodeToString(bytesp) log.Printf("Encrypted Secret: ", encstr) var entity2 *openpgp.Entity var entitylist2 openpgp.EntityList keyringFileBuffer2, _ := os.Open(secretKeyring) defer keyringFileBuffer2.Close() entitylist2, _ = openpgp.ReadKeyRing(keyringFileBuffer2) entity2 = entitylist2[0] passphrasebyte := []byte(passphrase) log.Printf("Decrypting private key using passphrase") entity2.PrivateKey.Decrypt(passphrasebyte) for _, subkey := range entity2.Subkeys { subkey.PrivateKey.Decrypt(passphrasebyte) } log.Printf("Finished decrypting private key using passphrase") dec, _ := base64.StdEncoding.DecodeString(encstr) md, _ := openpgp.ReadMessage(bytes.NewBuffer(dec), entitylist2, nil, nil) bytess, _ := ioutil.ReadAll(md.UnverifiedBody) decstr := string(bytess) log.Printf("Decrypted Secret: ", decstr) }