--- /dev/null
+diff -r 221f3eb76b52 src/pkg/crypto/openpgp/packet/signature.go
+--- a/src/pkg/crypto/openpgp/packet/signature.go Thu Nov 24 08:51:47 2011 -0800
++++ b/src/pkg/crypto/openpgp/packet/signature.go Wed Nov 30 21:54:03 2011 +0100
+@@ -163,7 +163,7 @@
+ const (
+ creationTimeSubpacket signatureSubpacketType = 2
+ signatureExpirationSubpacket signatureSubpacketType = 3
+- keyExpirySubpacket signatureSubpacketType = 9
++ keyExpirationSubpacket signatureSubpacketType = 9
+ prefSymmetricAlgosSubpacket signatureSubpacketType = 11
+ issuerSubpacket signatureSubpacketType = 16
+ prefHashAlgosSubpacket signatureSubpacketType = 21
+@@ -235,7 +235,7 @@
+ }
+ sig.SigLifetimeSecs = new(uint32)
+ *sig.SigLifetimeSecs = binary.BigEndian.Uint32(subpacket)
+- case keyExpirySubpacket:
++ case keyExpirationSubpacket:
+ // Key expiration time, section 5.2.3.6
+ if !isHashed {
+ return
+@@ -541,10 +541,7 @@
+
+ func (sig *Signature) buildSubpackets() (subpackets []outputSubpacket) {
+ creationTime := make([]byte, 4)
+- creationTime[0] = byte(sig.CreationTime >> 24)
+- creationTime[1] = byte(sig.CreationTime >> 16)
+- creationTime[2] = byte(sig.CreationTime >> 8)
+- creationTime[3] = byte(sig.CreationTime)
++ binary.BigEndian.PutUint32(creationTime, sig.CreationTime)
+ subpackets = append(subpackets, outputSubpacket{true, creationTimeSubpacket, false, creationTime})
+
+ if sig.IssuerKeyId != nil {
+@@ -553,5 +550,56 @@
+ subpackets = append(subpackets, outputSubpacket{true, issuerSubpacket, false, keyId})
+ }
+
++ if sig.SigLifetimeSecs != nil && *sig.SigLifetimeSecs != 0 {
++ sigLifetime := make([]byte, 4)
++ binary.BigEndian.PutUint32(sigLifetime, *sig.SigLifetimeSecs)
++ subpackets = append(subpackets, outputSubpacket{true, signatureExpirationSubpacket, false, sigLifetime})
++ }
++
++ // The following subpackets may only appear in self-signatures
++
++ if sig.KeyLifetimeSecs != nil && *sig.KeyLifetimeSecs != 0 {
++ keyLifetime := make([]byte, 4)
++ binary.BigEndian.PutUint32(keyLifetime, *sig.KeyLifetimeSecs)
++ subpackets = append(subpackets, outputSubpacket{true, keyExpirationSubpacket, false, keyLifetime})
++ }
++
++ if sig.IsPrimaryId != nil && *sig.IsPrimaryId {
++ subpackets = append(subpackets, outputSubpacket{true, primaryUserIdSubpacket, false, []byte{1}})
++ }
++
++ // []byte slices of preferred algorithms are not copied
++
++ if len(sig.PreferredSymmetric) > 0 {
++ subpackets = append(subpackets, outputSubpacket{true, prefSymmetricAlgosSubpacket, false, sig.PreferredSymmetric})
++ }
++
++ if len(sig.PreferredHash) > 0 {
++ subpackets = append(subpackets, outputSubpacket{true, prefHashAlgosSubpacket, false, sig.PreferredHash})
++ }
++
++ if len(sig.PreferredCompression) > 0 {
++ subpackets = append(subpackets, outputSubpacket{true, prefCompressionSubpacket, false, sig.PreferredCompression})
++ }
++
++ // The Key Flags subpacket may only appear in self-signatures or certification signatures
++
++ if sig.FlagsValid {
++ flags := byte(0)
++ if sig.FlagCertify {
++ flags |= 1
++ }
++ if sig.FlagSign {
++ flags |= 2
++ }
++ if sig.FlagEncryptCommunications {
++ flags |= 4
++ }
++ if sig.FlagEncryptStorage {
++ flags |= 8
++ }
++ subpackets = append(subpackets, outputSubpacket{true, keyFlagsSubpacket, false, []byte{flags}})
++ }
++
+ return
+ }