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 < 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 }