openpgp: Implement compressed data packets & add support for compressing data during symmetric encryption.
This patch implements the facilities needed to compress data before encryption as allowed (and recommended) by RFC 4880. The new functionality is then used to add support for compressing data during symmetric encryption (openpgp.SymmetricallyEncrypt()). For now, compression defaults to off. Also, only the ZIP and ZLIB compression schemes are supported by this patch. Resulting output tested/verified using GPG. https://gist.github.com/marete/6189760 is a small program that can be used to test that the output of various compression/encryption settings can be read by GPG or other RFC 4880 programs. Upon review, I will follow this patch with 2 others: a) Add support for compression during public key encryption (openpgp.Encrypt()) b) Enable compression by default (subject to the restrictions of the "Compression Preferences" section in RFC 4880). R=golang-dev, agl CC=golang-dev https://golang.org/cl/12685044
This commit is contained in:
committed by
Adam Langley
parent
f23aef828f
commit
690e22b80a
+14
-1
@@ -118,11 +118,24 @@ func SymmetricallyEncrypt(ciphertext io.Writer, passphrase []byte, hints *FileHi
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
literaldata := w
|
||||
if algo := config.Compression(); algo != packet.CompressionNone {
|
||||
var compConfig *packet.CompressionConfig
|
||||
if config != nil {
|
||||
compConfig = config.CompressionConfig
|
||||
}
|
||||
literaldata, err = packet.SerializeCompressed(w, algo, compConfig)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
var epochSeconds uint32
|
||||
if !hints.ModTime.IsZero() {
|
||||
epochSeconds = uint32(hints.ModTime.Unix())
|
||||
}
|
||||
return packet.SerializeLiteral(w, hints.IsBinary, hints.FileName, epochSeconds)
|
||||
return packet.SerializeLiteral(literaldata, hints.IsBinary, hints.FileName, epochSeconds)
|
||||
}
|
||||
|
||||
// intersectPreferences mutates and returns a prefix of a that contains only
|
||||
|
||||
Reference in New Issue
Block a user