summaryrefslogtreecommitdiff
path: root/static/decrypt-aes-gcm.go
diff options
context:
space:
mode:
Diffstat (limited to 'static/decrypt-aes-gcm.go')
-rw-r--r--static/decrypt-aes-gcm.go52
1 files changed, 52 insertions, 0 deletions
diff --git a/static/decrypt-aes-gcm.go b/static/decrypt-aes-gcm.go
new file mode 100644
index 0000000..bab07b5
--- /dev/null
+++ b/static/decrypt-aes-gcm.go
@@ -0,0 +1,52 @@
+package main
+
+import (
+ "crypto/aes"
+ "crypto/cipher"
+ "encoding/hex"
+ "errors"
+ "io/ioutil"
+ "os"
+)
+
+func main() {
+ err := inner()
+ if err != nil {
+ panic(err.Error())
+ }
+}
+
+func inner() error {
+ if len(os.Args) < 3 {
+ return errors.New("usage: ./decrypt-aes-gcm <key> <nonce> < input-file > output-file")
+ }
+ key, err := hex.DecodeString(os.Args[1])
+ if err != nil {
+ return err
+ }
+ nonce, err := hex.DecodeString(os.Args[2])
+ if err != nil {
+ return err
+ }
+ ciphertext, err := ioutil.ReadAll(os.Stdin)
+ if err != nil {
+ return err
+ }
+ block, err := aes.NewCipher(key)
+ if err != nil {
+ return err
+ }
+ aesgcm, err := cipher.NewGCM(block)
+ if err != nil {
+ return err
+ }
+ plaintext, err := aesgcm.Open(nil, nonce, ciphertext, nil)
+ if err != nil {
+ return err
+ }
+ _, err = os.Stdout.Write(plaintext)
+ if err != nil {
+ return err
+ }
+ return nil
+}