diff options
author | Ondřej Surý <ondrej@sury.org> | 2011-08-03 17:26:15 +0200 |
---|---|---|
committer | Ondřej Surý <ondrej@sury.org> | 2011-08-03 17:31:49 +0200 |
commit | b757d264230d65f988e08158e096a09497d39eb4 (patch) | |
tree | e20ec608a2ec8ebf603fa7aa060eb9723c4780b9 /doc/talks/io2010/encrypt.go | |
parent | 5976088995f5c0d0bcada7d491fda4b6245e54e0 (diff) | |
download | golang-b757d264230d65f988e08158e096a09497d39eb4.tar.gz |
Imported Upstream version 2011.07.29
Diffstat (limited to 'doc/talks/io2010/encrypt.go')
-rw-r--r-- | doc/talks/io2010/encrypt.go | 40 |
1 files changed, 32 insertions, 8 deletions
diff --git a/doc/talks/io2010/encrypt.go b/doc/talks/io2010/encrypt.go index e5ab3fc59..c6508bba1 100644 --- a/doc/talks/io2010/encrypt.go +++ b/doc/talks/io2010/encrypt.go @@ -2,27 +2,51 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +// This code differs from the slides in that it handles errors. + package main import ( "crypto/aes" - "crypto/block" + "crypto/cipher" "compress/gzip" "io" + "log" "os" ) -func EncryptAndGzip(dstfile, srcfile string, key, iv []byte) { - r, _ := os.Open(srcfile, os.O_RDONLY, 0) +func EncryptAndGzip(dstfile, srcfile string, key, iv []byte) os.Error { + r, err := os.Open(srcfile) + if err != nil { + return err + } var w io.WriteCloser - w, _ = os.Open(dstfile, os.O_WRONLY|os.O_CREATE, 0666) + w, err = os.Create(dstfile) + if err != nil { + return err + } defer w.Close() - w, _ = gzip.NewDeflater(w) + w, err = gzip.NewWriter(w) + if err != nil { + return err + } defer w.Close() - c, _ := aes.NewCipher(key) - io.Copy(block.NewCBCEncrypter(c, iv, w), r) + c, err := aes.NewCipher(key) + if err != nil { + return err + } + _, err = io.Copy(cipher.StreamWriter{S: cipher.NewOFB(c, iv), W: w}, r) + return err } func main() { - EncryptAndGzip("/tmp/passwd.gz", "/etc/passwd", make([]byte, 16), make([]byte, 16)) + err := EncryptAndGzip( + "/tmp/passwd.gz", + "/etc/passwd", + make([]byte, 16), + make([]byte, 16), + ) + if err != nil { + log.Fatal(err) + } } |