http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/openpgp/packet/signature.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/openpgp/packet/signature.go 
b/cli/vendor/golang.org/x/crypto/openpgp/packet/signature.go
deleted file mode 100644
index 1f29d3d..0000000
--- a/cli/vendor/golang.org/x/crypto/openpgp/packet/signature.go
+++ /dev/null
@@ -1,699 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package packet
-
-import (
-       "bytes"
-       "crypto"
-       "crypto/dsa"
-       "crypto/rsa"
-       "encoding/binary"
-       "hash"
-       "io"
-       "strconv"
-       "time"
-
-       "golang.org/x/crypto/openpgp/errors"
-       "golang.org/x/crypto/openpgp/s2k"
-)
-
-const (
-       // See RFC 4880, section 5.2.3.21 for details.
-       KeyFlagCertify = 1 << iota
-       KeyFlagSign
-       KeyFlagEncryptCommunications
-       KeyFlagEncryptStorage
-)
-
-// Signature represents a signature. See RFC 4880, section 5.2.
-type Signature struct {
-       SigType    SignatureType
-       PubKeyAlgo PublicKeyAlgorithm
-       Hash       crypto.Hash
-
-       // HashSuffix is extra data that is hashed in after the signed data.
-       HashSuffix []byte
-       // HashTag contains the first two bytes of the hash for fast rejection
-       // of bad signed data.
-       HashTag      [2]byte
-       CreationTime time.Time
-
-       RSASignature         parsedMPI
-       DSASigR, DSASigS     parsedMPI
-       ECDSASigR, ECDSASigS parsedMPI
-
-       // rawSubpackets contains the unparsed subpackets, in order.
-       rawSubpackets []outputSubpacket
-
-       // The following are optional so are nil when not included in the
-       // signature.
-
-       SigLifetimeSecs, KeyLifetimeSecs                        *uint32
-       PreferredSymmetric, PreferredHash, PreferredCompression []uint8
-       IssuerKeyId                                             *uint64
-       IsPrimaryId                                             *bool
-
-       // FlagsValid is set if any flags were given. See RFC 4880, section
-       // 5.2.3.21 for details.
-       FlagsValid                                                           
bool
-       FlagCertify, FlagSign, FlagEncryptCommunications, FlagEncryptStorage 
bool
-
-       // RevocationReason is set if this signature has been revoked.
-       // See RFC 4880, section 5.2.3.23 for details.
-       RevocationReason     *uint8
-       RevocationReasonText string
-
-       // MDC is set if this signature has a feature packet that indicates
-       // support for MDC subpackets.
-       MDC bool
-
-       // EmbeddedSignature, if non-nil, is a signature of the parent key, by
-       // this key. This prevents an attacker from claiming another's signing
-       // subkey as their own.
-       EmbeddedSignature *Signature
-
-       outSubpackets []outputSubpacket
-}
-
-func (sig *Signature) parse(r io.Reader) (err error) {
-       // RFC 4880, section 5.2.3
-       var buf [5]byte
-       _, err = readFull(r, buf[:1])
-       if err != nil {
-               return
-       }
-       if buf[0] != 4 {
-               err = errors.UnsupportedError("signature packet version " + 
strconv.Itoa(int(buf[0])))
-               return
-       }
-
-       _, err = readFull(r, buf[:5])
-       if err != nil {
-               return
-       }
-       sig.SigType = SignatureType(buf[0])
-       sig.PubKeyAlgo = PublicKeyAlgorithm(buf[1])
-       switch sig.PubKeyAlgo {
-       case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoDSA, 
PubKeyAlgoECDSA:
-       default:
-               err = errors.UnsupportedError("public key algorithm " + 
strconv.Itoa(int(sig.PubKeyAlgo)))
-               return
-       }
-
-       var ok bool
-       sig.Hash, ok = s2k.HashIdToHash(buf[2])
-       if !ok {
-               return errors.UnsupportedError("hash function " + 
strconv.Itoa(int(buf[2])))
-       }
-
-       hashedSubpacketsLength := int(buf[3])<<8 | int(buf[4])
-       l := 6 + hashedSubpacketsLength
-       sig.HashSuffix = make([]byte, l+6)
-       sig.HashSuffix[0] = 4
-       copy(sig.HashSuffix[1:], buf[:5])
-       hashedSubpackets := sig.HashSuffix[6:l]
-       _, err = readFull(r, hashedSubpackets)
-       if err != nil {
-               return
-       }
-       // See RFC 4880, section 5.2.4
-       trailer := sig.HashSuffix[l:]
-       trailer[0] = 4
-       trailer[1] = 0xff
-       trailer[2] = uint8(l >> 24)
-       trailer[3] = uint8(l >> 16)
-       trailer[4] = uint8(l >> 8)
-       trailer[5] = uint8(l)
-
-       err = parseSignatureSubpackets(sig, hashedSubpackets, true)
-       if err != nil {
-               return
-       }
-
-       _, err = readFull(r, buf[:2])
-       if err != nil {
-               return
-       }
-       unhashedSubpacketsLength := int(buf[0])<<8 | int(buf[1])
-       unhashedSubpackets := make([]byte, unhashedSubpacketsLength)
-       _, err = readFull(r, unhashedSubpackets)
-       if err != nil {
-               return
-       }
-       err = parseSignatureSubpackets(sig, unhashedSubpackets, false)
-       if err != nil {
-               return
-       }
-
-       _, err = readFull(r, sig.HashTag[:2])
-       if err != nil {
-               return
-       }
-
-       switch sig.PubKeyAlgo {
-       case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly:
-               sig.RSASignature.bytes, sig.RSASignature.bitLength, err = 
readMPI(r)
-       case PubKeyAlgoDSA:
-               sig.DSASigR.bytes, sig.DSASigR.bitLength, err = readMPI(r)
-               if err == nil {
-                       sig.DSASigS.bytes, sig.DSASigS.bitLength, err = 
readMPI(r)
-               }
-       case PubKeyAlgoECDSA:
-               sig.ECDSASigR.bytes, sig.ECDSASigR.bitLength, err = readMPI(r)
-               if err == nil {
-                       sig.ECDSASigS.bytes, sig.ECDSASigS.bitLength, err = 
readMPI(r)
-               }
-       default:
-               panic("unreachable")
-       }
-       return
-}
-
-// parseSignatureSubpackets parses subpackets of the main signature packet. See
-// RFC 4880, section 5.2.3.1.
-func parseSignatureSubpackets(sig *Signature, subpackets []byte, isHashed 
bool) (err error) {
-       for len(subpackets) > 0 {
-               subpackets, err = parseSignatureSubpacket(sig, subpackets, 
isHashed)
-               if err != nil {
-                       return
-               }
-       }
-
-       if sig.CreationTime.IsZero() {
-               err = errors.StructuralError("no creation time in signature")
-       }
-
-       return
-}
-
-type signatureSubpacketType uint8
-
-const (
-       creationTimeSubpacket        signatureSubpacketType = 2
-       signatureExpirationSubpacket signatureSubpacketType = 3
-       keyExpirationSubpacket       signatureSubpacketType = 9
-       prefSymmetricAlgosSubpacket  signatureSubpacketType = 11
-       issuerSubpacket              signatureSubpacketType = 16
-       prefHashAlgosSubpacket       signatureSubpacketType = 21
-       prefCompressionSubpacket     signatureSubpacketType = 22
-       primaryUserIdSubpacket       signatureSubpacketType = 25
-       keyFlagsSubpacket            signatureSubpacketType = 27
-       reasonForRevocationSubpacket signatureSubpacketType = 29
-       featuresSubpacket            signatureSubpacketType = 30
-       embeddedSignatureSubpacket   signatureSubpacketType = 32
-)
-
-// parseSignatureSubpacket parses a single subpacket. len(subpacket) is >= 1.
-func parseSignatureSubpacket(sig *Signature, subpacket []byte, isHashed bool) 
(rest []byte, err error) {
-       // RFC 4880, section 5.2.3.1
-       var (
-               length     uint32
-               packetType signatureSubpacketType
-               isCritical bool
-       )
-       switch {
-       case subpacket[0] < 192:
-               length = uint32(subpacket[0])
-               subpacket = subpacket[1:]
-       case subpacket[0] < 255:
-               if len(subpacket) < 2 {
-                       goto Truncated
-               }
-               length = uint32(subpacket[0]-192)<<8 + uint32(subpacket[1]) + 
192
-               subpacket = subpacket[2:]
-       default:
-               if len(subpacket) < 5 {
-                       goto Truncated
-               }
-               length = uint32(subpacket[1])<<24 |
-                       uint32(subpacket[2])<<16 |
-                       uint32(subpacket[3])<<8 |
-                       uint32(subpacket[4])
-               subpacket = subpacket[5:]
-       }
-       if length > uint32(len(subpacket)) {
-               goto Truncated
-       }
-       rest = subpacket[length:]
-       subpacket = subpacket[:length]
-       if len(subpacket) == 0 {
-               err = errors.StructuralError("zero length signature subpacket")
-               return
-       }
-       packetType = signatureSubpacketType(subpacket[0] & 0x7f)
-       isCritical = subpacket[0]&0x80 == 0x80
-       subpacket = subpacket[1:]
-       sig.rawSubpackets = append(sig.rawSubpackets, outputSubpacket{isHashed, 
packetType, isCritical, subpacket})
-       switch packetType {
-       case creationTimeSubpacket:
-               if !isHashed {
-                       err = errors.StructuralError("signature creation time 
in non-hashed area")
-                       return
-               }
-               if len(subpacket) != 4 {
-                       err = errors.StructuralError("signature creation time 
not four bytes")
-                       return
-               }
-               t := binary.BigEndian.Uint32(subpacket)
-               sig.CreationTime = time.Unix(int64(t), 0)
-       case signatureExpirationSubpacket:
-               // Signature expiration time, section 5.2.3.10
-               if !isHashed {
-                       return
-               }
-               if len(subpacket) != 4 {
-                       err = errors.StructuralError("expiration subpacket with 
bad length")
-                       return
-               }
-               sig.SigLifetimeSecs = new(uint32)
-               *sig.SigLifetimeSecs = binary.BigEndian.Uint32(subpacket)
-       case keyExpirationSubpacket:
-               // Key expiration time, section 5.2.3.6
-               if !isHashed {
-                       return
-               }
-               if len(subpacket) != 4 {
-                       err = errors.StructuralError("key expiration subpacket 
with bad length")
-                       return
-               }
-               sig.KeyLifetimeSecs = new(uint32)
-               *sig.KeyLifetimeSecs = binary.BigEndian.Uint32(subpacket)
-       case prefSymmetricAlgosSubpacket:
-               // Preferred symmetric algorithms, section 5.2.3.7
-               if !isHashed {
-                       return
-               }
-               sig.PreferredSymmetric = make([]byte, len(subpacket))
-               copy(sig.PreferredSymmetric, subpacket)
-       case issuerSubpacket:
-               // Issuer, section 5.2.3.5
-               if len(subpacket) != 8 {
-                       err = errors.StructuralError("issuer subpacket with bad 
length")
-                       return
-               }
-               sig.IssuerKeyId = new(uint64)
-               *sig.IssuerKeyId = binary.BigEndian.Uint64(subpacket)
-       case prefHashAlgosSubpacket:
-               // Preferred hash algorithms, section 5.2.3.8
-               if !isHashed {
-                       return
-               }
-               sig.PreferredHash = make([]byte, len(subpacket))
-               copy(sig.PreferredHash, subpacket)
-       case prefCompressionSubpacket:
-               // Preferred compression algorithms, section 5.2.3.9
-               if !isHashed {
-                       return
-               }
-               sig.PreferredCompression = make([]byte, len(subpacket))
-               copy(sig.PreferredCompression, subpacket)
-       case primaryUserIdSubpacket:
-               // Primary User ID, section 5.2.3.19
-               if !isHashed {
-                       return
-               }
-               if len(subpacket) != 1 {
-                       err = errors.StructuralError("primary user id subpacket 
with bad length")
-                       return
-               }
-               sig.IsPrimaryId = new(bool)
-               if subpacket[0] > 0 {
-                       *sig.IsPrimaryId = true
-               }
-       case keyFlagsSubpacket:
-               // Key flags, section 5.2.3.21
-               if !isHashed {
-                       return
-               }
-               if len(subpacket) == 0 {
-                       err = errors.StructuralError("empty key flags 
subpacket")
-                       return
-               }
-               sig.FlagsValid = true
-               if subpacket[0]&KeyFlagCertify != 0 {
-                       sig.FlagCertify = true
-               }
-               if subpacket[0]&KeyFlagSign != 0 {
-                       sig.FlagSign = true
-               }
-               if subpacket[0]&KeyFlagEncryptCommunications != 0 {
-                       sig.FlagEncryptCommunications = true
-               }
-               if subpacket[0]&KeyFlagEncryptStorage != 0 {
-                       sig.FlagEncryptStorage = true
-               }
-       case reasonForRevocationSubpacket:
-               // Reason For Revocation, section 5.2.3.23
-               if !isHashed {
-                       return
-               }
-               if len(subpacket) == 0 {
-                       err = errors.StructuralError("empty revocation reason 
subpacket")
-                       return
-               }
-               sig.RevocationReason = new(uint8)
-               *sig.RevocationReason = subpacket[0]
-               sig.RevocationReasonText = string(subpacket[1:])
-       case featuresSubpacket:
-               // Features subpacket, section 5.2.3.24 specifies a very general
-               // mechanism for OpenPGP implementations to signal support for 
new
-               // features. In practice, the subpacket is used exclusively to
-               // indicate support for MDC-protected encryption.
-               sig.MDC = len(subpacket) >= 1 && subpacket[0]&1 == 1
-       case embeddedSignatureSubpacket:
-               // Only usage is in signatures that cross-certify
-               // signing subkeys. section 5.2.3.26 describes the
-               // format, with its usage described in section 11.1
-               if sig.EmbeddedSignature != nil {
-                       err = errors.StructuralError("Cannot have multiple 
embedded signatures")
-                       return
-               }
-               sig.EmbeddedSignature = new(Signature)
-               // Embedded signatures are required to be v4 signatures see
-               // section 12.1. However, we only parse v4 signatures in this
-               // file anyway.
-               if err := 
sig.EmbeddedSignature.parse(bytes.NewBuffer(subpacket)); err != nil {
-                       return nil, err
-               }
-               if sigType := sig.EmbeddedSignature.SigType; sigType != 
SigTypePrimaryKeyBinding {
-                       return nil, errors.StructuralError("cross-signature has 
unexpected type " + strconv.Itoa(int(sigType)))
-               }
-       default:
-               if isCritical {
-                       err = errors.UnsupportedError("unknown critical 
signature subpacket type " + strconv.Itoa(int(packetType)))
-                       return
-               }
-       }
-       return
-
-Truncated:
-       err = errors.StructuralError("signature subpacket truncated")
-       return
-}
-
-// subpacketLengthLength returns the length, in bytes, of an encoded length 
value.
-func subpacketLengthLength(length int) int {
-       if length < 192 {
-               return 1
-       }
-       if length < 16320 {
-               return 2
-       }
-       return 5
-}
-
-// serializeSubpacketLength marshals the given length into to.
-func serializeSubpacketLength(to []byte, length int) int {
-       // RFC 4880, Section 4.2.2.
-       if length < 192 {
-               to[0] = byte(length)
-               return 1
-       }
-       if length < 16320 {
-               length -= 192
-               to[0] = byte((length >> 8) + 192)
-               to[1] = byte(length)
-               return 2
-       }
-       to[0] = 255
-       to[1] = byte(length >> 24)
-       to[2] = byte(length >> 16)
-       to[3] = byte(length >> 8)
-       to[4] = byte(length)
-       return 5
-}
-
-// subpacketsLength returns the serialized length, in bytes, of the given
-// subpackets.
-func subpacketsLength(subpackets []outputSubpacket, hashed bool) (length int) {
-       for _, subpacket := range subpackets {
-               if subpacket.hashed == hashed {
-                       length += subpacketLengthLength(len(subpacket.contents) 
+ 1)
-                       length += 1 // type byte
-                       length += len(subpacket.contents)
-               }
-       }
-       return
-}
-
-// serializeSubpackets marshals the given subpackets into to.
-func serializeSubpackets(to []byte, subpackets []outputSubpacket, hashed bool) 
{
-       for _, subpacket := range subpackets {
-               if subpacket.hashed == hashed {
-                       n := serializeSubpacketLength(to, 
len(subpacket.contents)+1)
-                       to[n] = byte(subpacket.subpacketType)
-                       to = to[1+n:]
-                       n = copy(to, subpacket.contents)
-                       to = to[n:]
-               }
-       }
-       return
-}
-
-// KeyExpired returns whether sig is a self-signature of a key that has
-// expired.
-func (sig *Signature) KeyExpired(currentTime time.Time) bool {
-       if sig.KeyLifetimeSecs == nil {
-               return false
-       }
-       expiry := sig.CreationTime.Add(time.Duration(*sig.KeyLifetimeSecs) * 
time.Second)
-       return currentTime.After(expiry)
-}
-
-// buildHashSuffix constructs the HashSuffix member of sig in preparation for 
signing.
-func (sig *Signature) buildHashSuffix() (err error) {
-       hashedSubpacketsLen := subpacketsLength(sig.outSubpackets, true)
-
-       var ok bool
-       l := 6 + hashedSubpacketsLen
-       sig.HashSuffix = make([]byte, l+6)
-       sig.HashSuffix[0] = 4
-       sig.HashSuffix[1] = uint8(sig.SigType)
-       sig.HashSuffix[2] = uint8(sig.PubKeyAlgo)
-       sig.HashSuffix[3], ok = s2k.HashToHashId(sig.Hash)
-       if !ok {
-               sig.HashSuffix = nil
-               return errors.InvalidArgumentError("hash cannot be represented 
in OpenPGP: " + strconv.Itoa(int(sig.Hash)))
-       }
-       sig.HashSuffix[4] = byte(hashedSubpacketsLen >> 8)
-       sig.HashSuffix[5] = byte(hashedSubpacketsLen)
-       serializeSubpackets(sig.HashSuffix[6:l], sig.outSubpackets, true)
-       trailer := sig.HashSuffix[l:]
-       trailer[0] = 4
-       trailer[1] = 0xff
-       trailer[2] = byte(l >> 24)
-       trailer[3] = byte(l >> 16)
-       trailer[4] = byte(l >> 8)
-       trailer[5] = byte(l)
-       return
-}
-
-func (sig *Signature) signPrepareHash(h hash.Hash) (digest []byte, err error) {
-       err = sig.buildHashSuffix()
-       if err != nil {
-               return
-       }
-
-       h.Write(sig.HashSuffix)
-       digest = h.Sum(nil)
-       copy(sig.HashTag[:], digest)
-       return
-}
-
-// Sign signs a message with a private key. The hash, h, must contain
-// the hash of the message to be signed and will be mutated by this function.
-// On success, the signature is stored in sig. Call Serialize to write it out.
-// If config is nil, sensible defaults will be used.
-func (sig *Signature) Sign(h hash.Hash, priv *PrivateKey, config *Config) (err 
error) {
-       sig.outSubpackets = sig.buildSubpackets()
-       digest, err := sig.signPrepareHash(h)
-       if err != nil {
-               return
-       }
-
-       switch priv.PubKeyAlgo {
-       case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly:
-               sig.RSASignature.bytes, err = rsa.SignPKCS1v15(config.Random(), 
priv.PrivateKey.(*rsa.PrivateKey), sig.Hash, digest)
-               sig.RSASignature.bitLength = uint16(8 * 
len(sig.RSASignature.bytes))
-       case PubKeyAlgoDSA:
-               dsaPriv := priv.PrivateKey.(*dsa.PrivateKey)
-
-               // Need to truncate hashBytes to match FIPS 186-3 section 4.6.
-               subgroupSize := (dsaPriv.Q.BitLen() + 7) / 8
-               if len(digest) > subgroupSize {
-                       digest = digest[:subgroupSize]
-               }
-               r, s, err := dsa.Sign(config.Random(), dsaPriv, digest)
-               if err == nil {
-                       sig.DSASigR.bytes = r.Bytes()
-                       sig.DSASigR.bitLength = uint16(8 * 
len(sig.DSASigR.bytes))
-                       sig.DSASigS.bytes = s.Bytes()
-                       sig.DSASigS.bitLength = uint16(8 * 
len(sig.DSASigS.bytes))
-               }
-       default:
-               err = errors.UnsupportedError("public key algorithm: " + 
strconv.Itoa(int(sig.PubKeyAlgo)))
-       }
-
-       return
-}
-
-// SignUserId computes a signature from priv, asserting that pub is a valid
-// key for the identity id.  On success, the signature is stored in sig. Call
-// Serialize to write it out.
-// If config is nil, sensible defaults will be used.
-func (sig *Signature) SignUserId(id string, pub *PublicKey, priv *PrivateKey, 
config *Config) error {
-       h, err := userIdSignatureHash(id, pub, sig.Hash)
-       if err != nil {
-               return nil
-       }
-       return sig.Sign(h, priv, config)
-}
-
-// SignKey computes a signature from priv, asserting that pub is a subkey. On
-// success, the signature is stored in sig. Call Serialize to write it out.
-// If config is nil, sensible defaults will be used.
-func (sig *Signature) SignKey(pub *PublicKey, priv *PrivateKey, config 
*Config) error {
-       h, err := keySignatureHash(&priv.PublicKey, pub, sig.Hash)
-       if err != nil {
-               return err
-       }
-       return sig.Sign(h, priv, config)
-}
-
-// Serialize marshals sig to w. Sign, SignUserId or SignKey must have been
-// called first.
-func (sig *Signature) Serialize(w io.Writer) (err error) {
-       if len(sig.outSubpackets) == 0 {
-               sig.outSubpackets = sig.rawSubpackets
-       }
-       if sig.RSASignature.bytes == nil && sig.DSASigR.bytes == nil && 
sig.ECDSASigR.bytes == nil {
-               return errors.InvalidArgumentError("Signature: need to call 
Sign, SignUserId or SignKey before Serialize")
-       }
-
-       sigLength := 0
-       switch sig.PubKeyAlgo {
-       case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly:
-               sigLength = 2 + len(sig.RSASignature.bytes)
-       case PubKeyAlgoDSA:
-               sigLength = 2 + len(sig.DSASigR.bytes)
-               sigLength += 2 + len(sig.DSASigS.bytes)
-       case PubKeyAlgoECDSA:
-               sigLength = 2 + len(sig.ECDSASigR.bytes)
-               sigLength += 2 + len(sig.ECDSASigS.bytes)
-       default:
-               panic("impossible")
-       }
-
-       unhashedSubpacketsLen := subpacketsLength(sig.outSubpackets, false)
-       length := len(sig.HashSuffix) - 6 /* trailer not included */ +
-               2 /* length of unhashed subpackets */ + unhashedSubpacketsLen +
-               2 /* hash tag */ + sigLength
-       err = serializeHeader(w, packetTypeSignature, length)
-       if err != nil {
-               return
-       }
-
-       _, err = w.Write(sig.HashSuffix[:len(sig.HashSuffix)-6])
-       if err != nil {
-               return
-       }
-
-       unhashedSubpackets := make([]byte, 2+unhashedSubpacketsLen)
-       unhashedSubpackets[0] = byte(unhashedSubpacketsLen >> 8)
-       unhashedSubpackets[1] = byte(unhashedSubpacketsLen)
-       serializeSubpackets(unhashedSubpackets[2:], sig.outSubpackets, false)
-
-       _, err = w.Write(unhashedSubpackets)
-       if err != nil {
-               return
-       }
-       _, err = w.Write(sig.HashTag[:])
-       if err != nil {
-               return
-       }
-
-       switch sig.PubKeyAlgo {
-       case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly:
-               err = writeMPIs(w, sig.RSASignature)
-       case PubKeyAlgoDSA:
-               err = writeMPIs(w, sig.DSASigR, sig.DSASigS)
-       case PubKeyAlgoECDSA:
-               err = writeMPIs(w, sig.ECDSASigR, sig.ECDSASigS)
-       default:
-               panic("impossible")
-       }
-       return
-}
-
-// outputSubpacket represents a subpacket to be marshaled.
-type outputSubpacket struct {
-       hashed        bool // true if this subpacket is in the hashed area.
-       subpacketType signatureSubpacketType
-       isCritical    bool
-       contents      []byte
-}
-
-func (sig *Signature) buildSubpackets() (subpackets []outputSubpacket) {
-       creationTime := make([]byte, 4)
-       binary.BigEndian.PutUint32(creationTime, 
uint32(sig.CreationTime.Unix()))
-       subpackets = append(subpackets, outputSubpacket{true, 
creationTimeSubpacket, false, creationTime})
-
-       if sig.IssuerKeyId != nil {
-               keyId := make([]byte, 8)
-               binary.BigEndian.PutUint64(keyId, *sig.IssuerKeyId)
-               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, true, sigLifetime})
-       }
-
-       // Key flags may only appear in self-signatures or certification 
signatures.
-
-       if sig.FlagsValid {
-               var flags byte
-               if sig.FlagCertify {
-                       flags |= KeyFlagCertify
-               }
-               if sig.FlagSign {
-                       flags |= KeyFlagSign
-               }
-               if sig.FlagEncryptCommunications {
-                       flags |= KeyFlagEncryptCommunications
-               }
-               if sig.FlagEncryptStorage {
-                       flags |= KeyFlagEncryptStorage
-               }
-               subpackets = append(subpackets, outputSubpacket{true, 
keyFlagsSubpacket, false, []byte{flags}})
-       }
-
-       // 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, true, keyLifetime})
-       }
-
-       if sig.IsPrimaryId != nil && *sig.IsPrimaryId {
-               subpackets = append(subpackets, outputSubpacket{true, 
primaryUserIdSubpacket, false, []byte{1}})
-       }
-
-       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})
-       }
-
-       return
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/openpgp/packet/signature_test.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/openpgp/packet/signature_test.go 
b/cli/vendor/golang.org/x/crypto/openpgp/packet/signature_test.go
deleted file mode 100644
index c1bbde8..0000000
--- a/cli/vendor/golang.org/x/crypto/openpgp/packet/signature_test.go
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package packet
-
-import (
-       "bytes"
-       "crypto"
-       "encoding/hex"
-       "testing"
-)
-
-func TestSignatureRead(t *testing.T) {
-       packet, err := Read(readerFromHex(signatureDataHex))
-       if err != nil {
-               t.Error(err)
-               return
-       }
-       sig, ok := packet.(*Signature)
-       if !ok || sig.SigType != SigTypeBinary || sig.PubKeyAlgo != 
PubKeyAlgoRSA || sig.Hash != crypto.SHA1 {
-               t.Errorf("failed to parse, got: %#v", packet)
-       }
-}
-
-func TestSignatureReserialize(t *testing.T) {
-       packet, _ := Read(readerFromHex(signatureDataHex))
-       sig := packet.(*Signature)
-       out := new(bytes.Buffer)
-       err := sig.Serialize(out)
-       if err != nil {
-               t.Errorf("error reserializing: %s", err)
-               return
-       }
-
-       expected, _ := hex.DecodeString(signatureDataHex)
-       if !bytes.Equal(expected, out.Bytes()) {
-               t.Errorf("output doesn't match input (got vs 
expected):\n%s\n%s", hex.Dump(out.Bytes()), hex.Dump(expected))
-       }
-}
-
-const signatureDataHex = 
"c2c05c04000102000605024cb45112000a0910ab105c91af38fb158f8d07ff5596ea368c5efe015bed6e78348c0f033c931d5f2ce5db54ce7f2a7e4b4ad64db758d65a7a71773edeab7ba2a9e0908e6a94a1175edd86c1d843279f045b021a6971a72702fcbd650efc393c5474d5b59a15f96d2eaad4c4c426797e0dcca2803ef41c6ff234d403eec38f31d610c344c06f2401c262f0993b2e66cad8a81ebc4322c723e0d4ba09fe917e8777658307ad8329adacba821420741009dfe87f007759f0982275d028a392c6ed983a0d846f890b36148c7358bdb8a516007fac760261ecd06076813831a36d0459075d1befa245ae7f7fb103d92ca759e9498fe60ef8078a39a3beda510deea251ea9f0a7f0df6ef42060f20780360686f3e400e"

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/openpgp/packet/signature_v3.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/openpgp/packet/signature_v3.go 
b/cli/vendor/golang.org/x/crypto/openpgp/packet/signature_v3.go
deleted file mode 100644
index 6edff88..0000000
--- a/cli/vendor/golang.org/x/crypto/openpgp/packet/signature_v3.go
+++ /dev/null
@@ -1,146 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package packet
-
-import (
-       "crypto"
-       "encoding/binary"
-       "fmt"
-       "io"
-       "strconv"
-       "time"
-
-       "golang.org/x/crypto/openpgp/errors"
-       "golang.org/x/crypto/openpgp/s2k"
-)
-
-// SignatureV3 represents older version 3 signatures. These signatures are 
less secure
-// than version 4 and should not be used to create new signatures. They are 
included
-// here for backwards compatibility to read and validate with older key 
material.
-// See RFC 4880, section 5.2.2.
-type SignatureV3 struct {
-       SigType      SignatureType
-       CreationTime time.Time
-       IssuerKeyId  uint64
-       PubKeyAlgo   PublicKeyAlgorithm
-       Hash         crypto.Hash
-       HashTag      [2]byte
-
-       RSASignature     parsedMPI
-       DSASigR, DSASigS parsedMPI
-}
-
-func (sig *SignatureV3) parse(r io.Reader) (err error) {
-       // RFC 4880, section 5.2.2
-       var buf [8]byte
-       if _, err = readFull(r, buf[:1]); err != nil {
-               return
-       }
-       if buf[0] < 2 || buf[0] > 3 {
-               err = errors.UnsupportedError("signature packet version " + 
strconv.Itoa(int(buf[0])))
-               return
-       }
-       if _, err = readFull(r, buf[:1]); err != nil {
-               return
-       }
-       if buf[0] != 5 {
-               err = errors.UnsupportedError(
-                       "invalid hashed material length " + 
strconv.Itoa(int(buf[0])))
-               return
-       }
-
-       // Read hashed material: signature type + creation time
-       if _, err = readFull(r, buf[:5]); err != nil {
-               return
-       }
-       sig.SigType = SignatureType(buf[0])
-       t := binary.BigEndian.Uint32(buf[1:5])
-       sig.CreationTime = time.Unix(int64(t), 0)
-
-       // Eight-octet Key ID of signer.
-       if _, err = readFull(r, buf[:8]); err != nil {
-               return
-       }
-       sig.IssuerKeyId = binary.BigEndian.Uint64(buf[:])
-
-       // Public-key and hash algorithm
-       if _, err = readFull(r, buf[:2]); err != nil {
-               return
-       }
-       sig.PubKeyAlgo = PublicKeyAlgorithm(buf[0])
-       switch sig.PubKeyAlgo {
-       case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoDSA:
-       default:
-               err = errors.UnsupportedError("public key algorithm " + 
strconv.Itoa(int(sig.PubKeyAlgo)))
-               return
-       }
-       var ok bool
-       if sig.Hash, ok = s2k.HashIdToHash(buf[1]); !ok {
-               return errors.UnsupportedError("hash function " + 
strconv.Itoa(int(buf[2])))
-       }
-
-       // Two-octet field holding left 16 bits of signed hash value.
-       if _, err = readFull(r, sig.HashTag[:2]); err != nil {
-               return
-       }
-
-       switch sig.PubKeyAlgo {
-       case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly:
-               sig.RSASignature.bytes, sig.RSASignature.bitLength, err = 
readMPI(r)
-       case PubKeyAlgoDSA:
-               if sig.DSASigR.bytes, sig.DSASigR.bitLength, err = readMPI(r); 
err != nil {
-                       return
-               }
-               sig.DSASigS.bytes, sig.DSASigS.bitLength, err = readMPI(r)
-       default:
-               panic("unreachable")
-       }
-       return
-}
-
-// Serialize marshals sig to w. Sign, SignUserId or SignKey must have been
-// called first.
-func (sig *SignatureV3) Serialize(w io.Writer) (err error) {
-       buf := make([]byte, 8)
-
-       // Write the sig type and creation time
-       buf[0] = byte(sig.SigType)
-       binary.BigEndian.PutUint32(buf[1:5], uint32(sig.CreationTime.Unix()))
-       if _, err = w.Write(buf[:5]); err != nil {
-               return
-       }
-
-       // Write the issuer long key ID
-       binary.BigEndian.PutUint64(buf[:8], sig.IssuerKeyId)
-       if _, err = w.Write(buf[:8]); err != nil {
-               return
-       }
-
-       // Write public key algorithm, hash ID, and hash value
-       buf[0] = byte(sig.PubKeyAlgo)
-       hashId, ok := s2k.HashToHashId(sig.Hash)
-       if !ok {
-               return errors.UnsupportedError(fmt.Sprintf("hash function %v", 
sig.Hash))
-       }
-       buf[1] = hashId
-       copy(buf[2:4], sig.HashTag[:])
-       if _, err = w.Write(buf[:4]); err != nil {
-               return
-       }
-
-       if sig.RSASignature.bytes == nil && sig.DSASigR.bytes == nil {
-               return errors.InvalidArgumentError("Signature: need to call 
Sign, SignUserId or SignKey before Serialize")
-       }
-
-       switch sig.PubKeyAlgo {
-       case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly:
-               err = writeMPIs(w, sig.RSASignature)
-       case PubKeyAlgoDSA:
-               err = writeMPIs(w, sig.DSASigR, sig.DSASigS)
-       default:
-               panic("impossible")
-       }
-       return
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/openpgp/packet/signature_v3_test.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/openpgp/packet/signature_v3_test.go 
b/cli/vendor/golang.org/x/crypto/openpgp/packet/signature_v3_test.go
deleted file mode 100644
index ad7b62a..0000000
--- a/cli/vendor/golang.org/x/crypto/openpgp/packet/signature_v3_test.go
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package packet
-
-import (
-       "bytes"
-       "crypto"
-       "encoding/hex"
-       "io"
-       "io/ioutil"
-       "testing"
-
-       "golang.org/x/crypto/openpgp/armor"
-)
-
-func TestSignatureV3Read(t *testing.T) {
-       r := v3KeyReader(t)
-       Read(r)                // Skip public key
-       Read(r)                // Skip uid
-       packet, err := Read(r) // Signature
-       if err != nil {
-               t.Error(err)
-               return
-       }
-       sig, ok := packet.(*SignatureV3)
-       if !ok || sig.SigType != SigTypeGenericCert || sig.PubKeyAlgo != 
PubKeyAlgoRSA || sig.Hash != crypto.MD5 {
-               t.Errorf("failed to parse, got: %#v", packet)
-       }
-}
-
-func TestSignatureV3Reserialize(t *testing.T) {
-       r := v3KeyReader(t)
-       Read(r) // Skip public key
-       Read(r) // Skip uid
-       packet, err := Read(r)
-       if err != nil {
-               t.Error(err)
-               return
-       }
-       sig := packet.(*SignatureV3)
-       out := new(bytes.Buffer)
-       if err = sig.Serialize(out); err != nil {
-               t.Errorf("error reserializing: %s", err)
-               return
-       }
-       expected, err := ioutil.ReadAll(v3KeyReader(t))
-       if err != nil {
-               t.Error(err)
-               return
-       }
-       expected = expected[4+141+4+39:] // See pgpdump offsets below, this is 
where the sig starts
-       if !bytes.Equal(expected, out.Bytes()) {
-               t.Errorf("output doesn't match input (got vs 
expected):\n%s\n%s", hex.Dump(out.Bytes()), hex.Dump(expected))
-       }
-}
-
-func v3KeyReader(t *testing.T) io.Reader {
-       armorBlock, err := armor.Decode(bytes.NewBufferString(keySigV3Armor))
-       if err != nil {
-               t.Fatalf("armor Decode failed: %v", err)
-       }
-       return armorBlock.Body
-}
-
-// keySigV3Armor is some V3 public key I found in an SKS dump.
-// Old: Public Key Packet(tag 6)(141 bytes)
-//      Ver 4 - new
-//      Public key creation time - Fri Sep 16 17:13:54 CDT 1994
-//      Pub alg - unknown(pub 0)
-//      Unknown public key(pub 0)
-// Old: User ID Packet(tag 13)(39 bytes)
-//      User ID - Armin M. Warda <wa...@nephilim.ruhr.de>
-// Old: Signature Packet(tag 2)(149 bytes)
-//      Ver 4 - new
-//      Sig type - unknown(05)
-//      Pub alg - ElGamal Encrypt-Only(pub 16)
-//      Hash alg - unknown(hash 46)
-//      Hashed Sub: unknown(sub 81, critical)(1988 bytes)
-const keySigV3Armor = `-----BEGIN PGP PUBLIC KEY BLOCK-----
-Version: SKS 1.0.10
-
-mI0CLnoYogAAAQQA1qwA2SuJwfQ5bCQ6u5t20ulnOtY0gykf7YjiK4LiVeRBwHjGq7v30tGV
-5Qti7qqRW4Ww7CDCJc4sZMFnystucR2vLkXaSoNWoFm4Fg47NiisDdhDezHwbVPW6OpCFNSi
-ZAamtj4QAUBu8j4LswafrJqZqR9336/V3g8Yil2l48kABRG0J0FybWluIE0uIFdhcmRhIDx3
-YXJkYUBuZXBoaWxpbS5ydWhyLmRlPoiVAgUQLok2xwXR6zmeWEiZAQE/DgP/WgxPQh40/Po4
-gSkWZCDAjNdph7zexvAb0CcUWahcwiBIgg3U5ErCx9I5CNVA9U+s8bNrDZwgSIeBzp3KhWUx
-524uhGgm6ZUTOAIKA6CbV6pfqoLpJnRYvXYQU5mIWsNa99wcu2qu18OeEDnztb7aLA6Ra9OF
-YFCbq4EjXRoOrYM=
-=LPjs
------END PGP PUBLIC KEY BLOCK-----`

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted.go
----------------------------------------------------------------------
diff --git 
a/cli/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted.go 
b/cli/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted.go
deleted file mode 100644
index 4b1105b..0000000
--- a/cli/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted.go
+++ /dev/null
@@ -1,155 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package packet
-
-import (
-       "bytes"
-       "crypto/cipher"
-       "io"
-       "strconv"
-
-       "golang.org/x/crypto/openpgp/errors"
-       "golang.org/x/crypto/openpgp/s2k"
-)
-
-// This is the largest session key that we'll support. Since no 512-bit cipher
-// has even been seriously used, this is comfortably large.
-const maxSessionKeySizeInBytes = 64
-
-// SymmetricKeyEncrypted represents a passphrase protected session key. See RFC
-// 4880, section 5.3.
-type SymmetricKeyEncrypted struct {
-       CipherFunc   CipherFunction
-       s2k          func(out, in []byte)
-       encryptedKey []byte
-}
-
-const symmetricKeyEncryptedVersion = 4
-
-func (ske *SymmetricKeyEncrypted) parse(r io.Reader) error {
-       // RFC 4880, section 5.3.
-       var buf [2]byte
-       if _, err := readFull(r, buf[:]); err != nil {
-               return err
-       }
-       if buf[0] != symmetricKeyEncryptedVersion {
-               return errors.UnsupportedError("SymmetricKeyEncrypted version")
-       }
-       ske.CipherFunc = CipherFunction(buf[1])
-
-       if ske.CipherFunc.KeySize() == 0 {
-               return errors.UnsupportedError("unknown cipher: " + 
strconv.Itoa(int(buf[1])))
-       }
-
-       var err error
-       ske.s2k, err = s2k.Parse(r)
-       if err != nil {
-               return err
-       }
-
-       encryptedKey := make([]byte, maxSessionKeySizeInBytes)
-       // The session key may follow. We just have to try and read to find
-       // out. If it exists then we limit it to maxSessionKeySizeInBytes.
-       n, err := readFull(r, encryptedKey)
-       if err != nil && err != io.ErrUnexpectedEOF {
-               return err
-       }
-
-       if n != 0 {
-               if n == maxSessionKeySizeInBytes {
-                       return errors.UnsupportedError("oversized encrypted 
session key")
-               }
-               ske.encryptedKey = encryptedKey[:n]
-       }
-
-       return nil
-}
-
-// Decrypt attempts to decrypt an encrypted session key and returns the key and
-// the cipher to use when decrypting a subsequent Symmetrically Encrypted Data
-// packet.
-func (ske *SymmetricKeyEncrypted) Decrypt(passphrase []byte) ([]byte, 
CipherFunction, error) {
-       key := make([]byte, ske.CipherFunc.KeySize())
-       ske.s2k(key, passphrase)
-
-       if len(ske.encryptedKey) == 0 {
-               return key, ske.CipherFunc, nil
-       }
-
-       // the IV is all zeros
-       iv := make([]byte, ske.CipherFunc.blockSize())
-       c := cipher.NewCFBDecrypter(ske.CipherFunc.new(key), iv)
-       plaintextKey := make([]byte, len(ske.encryptedKey))
-       c.XORKeyStream(plaintextKey, ske.encryptedKey)
-       cipherFunc := CipherFunction(plaintextKey[0])
-       if cipherFunc.blockSize() == 0 {
-               return nil, ske.CipherFunc, errors.UnsupportedError("unknown 
cipher: " + strconv.Itoa(int(cipherFunc)))
-       }
-       plaintextKey = plaintextKey[1:]
-       if l := len(plaintextKey); l == 0 || l%cipherFunc.blockSize() != 0 {
-               return nil, cipherFunc, errors.StructuralError("length of 
decrypted key not a multiple of block size")
-       }
-
-       return plaintextKey, cipherFunc, nil
-}
-
-// SerializeSymmetricKeyEncrypted serializes a symmetric key packet to w. The
-// packet contains a random session key, encrypted by a key derived from the
-// given passphrase. The session key is returned and must be passed to
-// SerializeSymmetricallyEncrypted.
-// If config is nil, sensible defaults will be used.
-func SerializeSymmetricKeyEncrypted(w io.Writer, passphrase []byte, config 
*Config) (key []byte, err error) {
-       cipherFunc := config.Cipher()
-       keySize := cipherFunc.KeySize()
-       if keySize == 0 {
-               return nil, errors.UnsupportedError("unknown cipher: " + 
strconv.Itoa(int(cipherFunc)))
-       }
-
-       s2kBuf := new(bytes.Buffer)
-       keyEncryptingKey := make([]byte, keySize)
-       // s2k.Serialize salts and stretches the passphrase, and writes the
-       // resulting key to keyEncryptingKey and the s2k descriptor to s2kBuf.
-       err = s2k.Serialize(s2kBuf, keyEncryptingKey, config.Random(), 
passphrase, &s2k.Config{Hash: config.Hash(), S2KCount: 
config.PasswordHashIterations()})
-       if err != nil {
-               return
-       }
-       s2kBytes := s2kBuf.Bytes()
-
-       packetLength := 2 /* header */ + len(s2kBytes) + 1 /* cipher type */ + 
keySize
-       err = serializeHeader(w, packetTypeSymmetricKeyEncrypted, packetLength)
-       if err != nil {
-               return
-       }
-
-       var buf [2]byte
-       buf[0] = symmetricKeyEncryptedVersion
-       buf[1] = byte(cipherFunc)
-       _, err = w.Write(buf[:])
-       if err != nil {
-               return
-       }
-       _, err = w.Write(s2kBytes)
-       if err != nil {
-               return
-       }
-
-       sessionKey := make([]byte, keySize)
-       _, err = io.ReadFull(config.Random(), sessionKey)
-       if err != nil {
-               return
-       }
-       iv := make([]byte, cipherFunc.blockSize())
-       c := cipher.NewCFBEncrypter(cipherFunc.new(keyEncryptingKey), iv)
-       encryptedCipherAndKey := make([]byte, keySize+1)
-       c.XORKeyStream(encryptedCipherAndKey, buf[1:])
-       c.XORKeyStream(encryptedCipherAndKey[1:], sessionKey)
-       _, err = w.Write(encryptedCipherAndKey)
-       if err != nil {
-               return
-       }
-
-       key = sessionKey
-       return
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted_test.go
----------------------------------------------------------------------
diff --git 
a/cli/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted_test.go 
b/cli/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted_test.go
deleted file mode 100644
index 19538df..0000000
--- 
a/cli/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted_test.go
+++ /dev/null
@@ -1,103 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package packet
-
-import (
-       "bytes"
-       "encoding/hex"
-       "io"
-       "io/ioutil"
-       "testing"
-)
-
-func TestSymmetricKeyEncrypted(t *testing.T) {
-       buf := readerFromHex(symmetricallyEncryptedHex)
-       packet, err := Read(buf)
-       if err != nil {
-               t.Errorf("failed to read SymmetricKeyEncrypted: %s", err)
-               return
-       }
-       ske, ok := packet.(*SymmetricKeyEncrypted)
-       if !ok {
-               t.Error("didn't find SymmetricKeyEncrypted packet")
-               return
-       }
-       key, cipherFunc, err := ske.Decrypt([]byte("password"))
-       if err != nil {
-               t.Error(err)
-               return
-       }
-
-       packet, err = Read(buf)
-       if err != nil {
-               t.Errorf("failed to read SymmetricallyEncrypted: %s", err)
-               return
-       }
-       se, ok := packet.(*SymmetricallyEncrypted)
-       if !ok {
-               t.Error("didn't find SymmetricallyEncrypted packet")
-               return
-       }
-       r, err := se.Decrypt(cipherFunc, key)
-       if err != nil {
-               t.Error(err)
-               return
-       }
-
-       contents, err := ioutil.ReadAll(r)
-       if err != nil && err != io.EOF {
-               t.Error(err)
-               return
-       }
-
-       expectedContents, _ := 
hex.DecodeString(symmetricallyEncryptedContentsHex)
-       if !bytes.Equal(expectedContents, contents) {
-               t.Errorf("bad contents got:%x want:%x", contents, 
expectedContents)
-       }
-}
-
-const symmetricallyEncryptedHex = 
"8c0d04030302371a0b38d884f02060c91cf97c9973b8e58e028e9501708ccfe618fb92afef7fa2d80ddadd93cf"
-const symmetricallyEncryptedContentsHex = 
"cb1062004d14c4df636f6e74656e74732e0a"
-
-func TestSerializeSymmetricKeyEncrypted(t *testing.T) {
-       buf := bytes.NewBuffer(nil)
-       passphrase := []byte("testing")
-       const cipherFunc = CipherAES128
-       config := &Config{
-               DefaultCipher: cipherFunc,
-       }
-
-       key, err := SerializeSymmetricKeyEncrypted(buf, passphrase, config)
-       if err != nil {
-               t.Errorf("failed to serialize: %s", err)
-               return
-       }
-
-       p, err := Read(buf)
-       if err != nil {
-               t.Errorf("failed to reparse: %s", err)
-               return
-       }
-       ske, ok := p.(*SymmetricKeyEncrypted)
-       if !ok {
-               t.Errorf("parsed a different packet type: %#v", p)
-               return
-       }
-
-       if ske.CipherFunc != config.DefaultCipher {
-               t.Errorf("SKE cipher function is %d (expected %d)", 
ske.CipherFunc, config.DefaultCipher)
-       }
-       parsedKey, parsedCipherFunc, err := ske.Decrypt(passphrase)
-       if err != nil {
-               t.Errorf("failed to decrypt reparsed SKE: %s", err)
-               return
-       }
-       if !bytes.Equal(key, parsedKey) {
-               t.Errorf("keys don't match after Decrypt: %x (original) vs %x 
(parsed)", key, parsedKey)
-       }
-       if parsedCipherFunc != cipherFunc {
-               t.Errorf("cipher function doesn't match after Decrypt: %d 
(original) vs %d (parsed)", cipherFunc, parsedCipherFunc)
-       }
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go
----------------------------------------------------------------------
diff --git 
a/cli/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go 
b/cli/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go
deleted file mode 100644
index 6126030..0000000
--- a/cli/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go
+++ /dev/null
@@ -1,290 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package packet
-
-import (
-       "crypto/cipher"
-       "crypto/sha1"
-       "crypto/subtle"
-       "golang.org/x/crypto/openpgp/errors"
-       "hash"
-       "io"
-       "strconv"
-)
-
-// SymmetricallyEncrypted represents a symmetrically encrypted byte string. The
-// encrypted contents will consist of more OpenPGP packets. See RFC 4880,
-// sections 5.7 and 5.13.
-type SymmetricallyEncrypted struct {
-       MDC      bool // true iff this is a type 18 packet and thus has an 
embedded MAC.
-       contents io.Reader
-       prefix   []byte
-}
-
-const symmetricallyEncryptedVersion = 1
-
-func (se *SymmetricallyEncrypted) parse(r io.Reader) error {
-       if se.MDC {
-               // See RFC 4880, section 5.13.
-               var buf [1]byte
-               _, err := readFull(r, buf[:])
-               if err != nil {
-                       return err
-               }
-               if buf[0] != symmetricallyEncryptedVersion {
-                       return errors.UnsupportedError("unknown 
SymmetricallyEncrypted version")
-               }
-       }
-       se.contents = r
-       return nil
-}
-
-// Decrypt returns a ReadCloser, from which the decrypted contents of the
-// packet can be read. An incorrect key can, with high probability, be detected
-// immediately and this will result in a KeyIncorrect error being returned.
-func (se *SymmetricallyEncrypted) Decrypt(c CipherFunction, key []byte) 
(io.ReadCloser, error) {
-       keySize := c.KeySize()
-       if keySize == 0 {
-               return nil, errors.UnsupportedError("unknown cipher: " + 
strconv.Itoa(int(c)))
-       }
-       if len(key) != keySize {
-               return nil, 
errors.InvalidArgumentError("SymmetricallyEncrypted: incorrect key length")
-       }
-
-       if se.prefix == nil {
-               se.prefix = make([]byte, c.blockSize()+2)
-               _, err := readFull(se.contents, se.prefix)
-               if err != nil {
-                       return nil, err
-               }
-       } else if len(se.prefix) != c.blockSize()+2 {
-               return nil, errors.InvalidArgumentError("can't try ciphers with 
different block lengths")
-       }
-
-       ocfbResync := OCFBResync
-       if se.MDC {
-               // MDC packets use a different form of OCFB mode.
-               ocfbResync = OCFBNoResync
-       }
-
-       s := NewOCFBDecrypter(c.new(key), se.prefix, ocfbResync)
-       if s == nil {
-               return nil, errors.ErrKeyIncorrect
-       }
-
-       plaintext := cipher.StreamReader{S: s, R: se.contents}
-
-       if se.MDC {
-               // MDC packets have an embedded hash that we need to check.
-               h := sha1.New()
-               h.Write(se.prefix)
-               return &seMDCReader{in: plaintext, h: h}, nil
-       }
-
-       // Otherwise, we just need to wrap plaintext so that it's a valid 
ReadCloser.
-       return seReader{plaintext}, nil
-}
-
-// seReader wraps an io.Reader with a no-op Close method.
-type seReader struct {
-       in io.Reader
-}
-
-func (ser seReader) Read(buf []byte) (int, error) {
-       return ser.in.Read(buf)
-}
-
-func (ser seReader) Close() error {
-       return nil
-}
-
-const mdcTrailerSize = 1 /* tag byte */ + 1 /* length byte */ + sha1.Size
-
-// An seMDCReader wraps an io.Reader, maintains a running hash and keeps hold
-// of the most recent 22 bytes (mdcTrailerSize). Upon EOF, those bytes form an
-// MDC packet containing a hash of the previous contents which is checked
-// against the running hash. See RFC 4880, section 5.13.
-type seMDCReader struct {
-       in          io.Reader
-       h           hash.Hash
-       trailer     [mdcTrailerSize]byte
-       scratch     [mdcTrailerSize]byte
-       trailerUsed int
-       error       bool
-       eof         bool
-}
-
-func (ser *seMDCReader) Read(buf []byte) (n int, err error) {
-       if ser.error {
-               err = io.ErrUnexpectedEOF
-               return
-       }
-       if ser.eof {
-               err = io.EOF
-               return
-       }
-
-       // If we haven't yet filled the trailer buffer then we must do that
-       // first.
-       for ser.trailerUsed < mdcTrailerSize {
-               n, err = ser.in.Read(ser.trailer[ser.trailerUsed:])
-               ser.trailerUsed += n
-               if err == io.EOF {
-                       if ser.trailerUsed != mdcTrailerSize {
-                               n = 0
-                               err = io.ErrUnexpectedEOF
-                               ser.error = true
-                               return
-                       }
-                       ser.eof = true
-                       n = 0
-                       return
-               }
-
-               if err != nil {
-                       n = 0
-                       return
-               }
-       }
-
-       // If it's a short read then we read into a temporary buffer and shift
-       // the data into the caller's buffer.
-       if len(buf) <= mdcTrailerSize {
-               n, err = readFull(ser.in, ser.scratch[:len(buf)])
-               copy(buf, ser.trailer[:n])
-               ser.h.Write(buf[:n])
-               copy(ser.trailer[:], ser.trailer[n:])
-               copy(ser.trailer[mdcTrailerSize-n:], ser.scratch[:])
-               if n < len(buf) {
-                       ser.eof = true
-                       err = io.EOF
-               }
-               return
-       }
-
-       n, err = ser.in.Read(buf[mdcTrailerSize:])
-       copy(buf, ser.trailer[:])
-       ser.h.Write(buf[:n])
-       copy(ser.trailer[:], buf[n:])
-
-       if err == io.EOF {
-               ser.eof = true
-       }
-       return
-}
-
-// This is a new-format packet tag byte for a type 19 (MDC) packet.
-const mdcPacketTagByte = byte(0x80) | 0x40 | 19
-
-func (ser *seMDCReader) Close() error {
-       if ser.error {
-               return errors.SignatureError("error during reading")
-       }
-
-       for !ser.eof {
-               // We haven't seen EOF so we need to read to the end
-               var buf [1024]byte
-               _, err := ser.Read(buf[:])
-               if err == io.EOF {
-                       break
-               }
-               if err != nil {
-                       return errors.SignatureError("error during reading")
-               }
-       }
-
-       if ser.trailer[0] != mdcPacketTagByte || ser.trailer[1] != sha1.Size {
-               return errors.SignatureError("MDC packet not found")
-       }
-       ser.h.Write(ser.trailer[:2])
-
-       final := ser.h.Sum(nil)
-       if subtle.ConstantTimeCompare(final, ser.trailer[2:]) != 1 {
-               return errors.SignatureError("hash mismatch")
-       }
-       return nil
-}
-
-// An seMDCWriter writes through to an io.WriteCloser while maintains a running
-// hash of the data written. On close, it emits an MDC packet containing the
-// running hash.
-type seMDCWriter struct {
-       w io.WriteCloser
-       h hash.Hash
-}
-
-func (w *seMDCWriter) Write(buf []byte) (n int, err error) {
-       w.h.Write(buf)
-       return w.w.Write(buf)
-}
-
-func (w *seMDCWriter) Close() (err error) {
-       var buf [mdcTrailerSize]byte
-
-       buf[0] = mdcPacketTagByte
-       buf[1] = sha1.Size
-       w.h.Write(buf[:2])
-       digest := w.h.Sum(nil)
-       copy(buf[2:], digest)
-
-       _, err = w.w.Write(buf[:])
-       if err != nil {
-               return
-       }
-       return w.w.Close()
-}
-
-// noOpCloser is like an ioutil.NopCloser, but for an io.Writer.
-type noOpCloser struct {
-       w io.Writer
-}
-
-func (c noOpCloser) Write(data []byte) (n int, err error) {
-       return c.w.Write(data)
-}
-
-func (c noOpCloser) Close() error {
-       return nil
-}
-
-// SerializeSymmetricallyEncrypted serializes a symmetrically encrypted packet
-// to w and returns a WriteCloser to which the to-be-encrypted packets can be
-// written.
-// If config is nil, sensible defaults will be used.
-func SerializeSymmetricallyEncrypted(w io.Writer, c CipherFunction, key 
[]byte, config *Config) (contents io.WriteCloser, err error) {
-       if c.KeySize() != len(key) {
-               return nil, 
errors.InvalidArgumentError("SymmetricallyEncrypted.Serialize: bad key length")
-       }
-       writeCloser := noOpCloser{w}
-       ciphertext, err := serializeStreamHeader(writeCloser, 
packetTypeSymmetricallyEncryptedMDC)
-       if err != nil {
-               return
-       }
-
-       _, err = ciphertext.Write([]byte{symmetricallyEncryptedVersion})
-       if err != nil {
-               return
-       }
-
-       block := c.new(key)
-       blockSize := block.BlockSize()
-       iv := make([]byte, blockSize)
-       _, err = config.Random().Read(iv)
-       if err != nil {
-               return
-       }
-       s, prefix := NewOCFBEncrypter(block, iv, OCFBNoResync)
-       _, err = ciphertext.Write(prefix)
-       if err != nil {
-               return
-       }
-       plaintext := cipher.StreamWriter{S: s, W: ciphertext}
-
-       h := sha1.New()
-       h.Write(iv)
-       h.Write(iv[blockSize-2:])
-       contents = &seMDCWriter{w: plaintext, h: h}
-       return
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted_test.go
----------------------------------------------------------------------
diff --git 
a/cli/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted_test.go 
b/cli/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted_test.go
deleted file mode 100644
index c5c00f7..0000000
--- 
a/cli/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted_test.go
+++ /dev/null
@@ -1,123 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package packet
-
-import (
-       "bytes"
-       "crypto/sha1"
-       "encoding/hex"
-       "golang.org/x/crypto/openpgp/errors"
-       "io"
-       "io/ioutil"
-       "testing"
-)
-
-// TestReader wraps a []byte and returns reads of a specific length.
-type testReader struct {
-       data   []byte
-       stride int
-}
-
-func (t *testReader) Read(buf []byte) (n int, err error) {
-       n = t.stride
-       if n > len(t.data) {
-               n = len(t.data)
-       }
-       if n > len(buf) {
-               n = len(buf)
-       }
-       copy(buf, t.data)
-       t.data = t.data[n:]
-       if len(t.data) == 0 {
-               err = io.EOF
-       }
-       return
-}
-
-func testMDCReader(t *testing.T) {
-       mdcPlaintext, _ := hex.DecodeString(mdcPlaintextHex)
-
-       for stride := 1; stride < len(mdcPlaintext)/2; stride++ {
-               r := &testReader{data: mdcPlaintext, stride: stride}
-               mdcReader := &seMDCReader{in: r, h: sha1.New()}
-               body, err := ioutil.ReadAll(mdcReader)
-               if err != nil {
-                       t.Errorf("stride: %d, error: %s", stride, err)
-                       continue
-               }
-               if !bytes.Equal(body, mdcPlaintext[:len(mdcPlaintext)-22]) {
-                       t.Errorf("stride: %d: bad contents %x", stride, body)
-                       continue
-               }
-
-               err = mdcReader.Close()
-               if err != nil {
-                       t.Errorf("stride: %d, error on Close: %s", stride, err)
-               }
-       }
-
-       mdcPlaintext[15] ^= 80
-
-       r := &testReader{data: mdcPlaintext, stride: 2}
-       mdcReader := &seMDCReader{in: r, h: sha1.New()}
-       _, err := ioutil.ReadAll(mdcReader)
-       if err != nil {
-               t.Errorf("corruption test, error: %s", err)
-               return
-       }
-       err = mdcReader.Close()
-       if err == nil {
-               t.Error("corruption: no error")
-       } else if _, ok := err.(*errors.SignatureError); !ok {
-               t.Errorf("corruption: expected SignatureError, got: %s", err)
-       }
-}
-
-const mdcPlaintextHex = 
"a302789c3b2d93c4e0eb9aba22283539b3203335af44a134afb800c849cb4c4de10200aff40b45d31432c80cb384299a0655966d6939dfdeed1dddf980"
-
-func TestSerialize(t *testing.T) {
-       buf := bytes.NewBuffer(nil)
-       c := CipherAES128
-       key := make([]byte, c.KeySize())
-
-       w, err := SerializeSymmetricallyEncrypted(buf, c, key, nil)
-       if err != nil {
-               t.Errorf("error from SerializeSymmetricallyEncrypted: %s", err)
-               return
-       }
-
-       contents := []byte("hello world\n")
-
-       w.Write(contents)
-       w.Close()
-
-       p, err := Read(buf)
-       if err != nil {
-               t.Errorf("error from Read: %s", err)
-               return
-       }
-
-       se, ok := p.(*SymmetricallyEncrypted)
-       if !ok {
-               t.Errorf("didn't read a *SymmetricallyEncrypted")
-               return
-       }
-
-       r, err := se.Decrypt(c, key)
-       if err != nil {
-               t.Errorf("error from Decrypt: %s", err)
-               return
-       }
-
-       contentsCopy := bytes.NewBuffer(nil)
-       _, err = io.Copy(contentsCopy, r)
-       if err != nil {
-               t.Errorf("error from io.Copy: %s", err)
-               return
-       }
-       if !bytes.Equal(contentsCopy.Bytes(), contents) {
-               t.Errorf("contents not equal got: %x want: %x", 
contentsCopy.Bytes(), contents)
-       }
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/openpgp/packet/userattribute.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/openpgp/packet/userattribute.go 
b/cli/vendor/golang.org/x/crypto/openpgp/packet/userattribute.go
deleted file mode 100644
index 96a2b38..0000000
--- a/cli/vendor/golang.org/x/crypto/openpgp/packet/userattribute.go
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package packet
-
-import (
-       "bytes"
-       "image"
-       "image/jpeg"
-       "io"
-       "io/ioutil"
-)
-
-const UserAttrImageSubpacket = 1
-
-// UserAttribute is capable of storing other types of data about a user
-// beyond name, email and a text comment. In practice, user attributes are 
typically used
-// to store a signed thumbnail photo JPEG image of the user.
-// See RFC 4880, section 5.12.
-type UserAttribute struct {
-       Contents []*OpaqueSubpacket
-}
-
-// NewUserAttributePhoto creates a user attribute packet
-// containing the given images.
-func NewUserAttributePhoto(photos ...image.Image) (uat *UserAttribute, err 
error) {
-       uat = new(UserAttribute)
-       for _, photo := range photos {
-               var buf bytes.Buffer
-               // RFC 4880, Section 5.12.1.
-               data := []byte{
-                       0x10, 0x00, // Little-endian image header length (16 
bytes)
-                       0x01,       // Image header version 1
-                       0x01,       // JPEG
-                       0, 0, 0, 0, // 12 reserved octets, must be all zero.
-                       0, 0, 0, 0,
-                       0, 0, 0, 0}
-               if _, err = buf.Write(data); err != nil {
-                       return
-               }
-               if err = jpeg.Encode(&buf, photo, nil); err != nil {
-                       return
-               }
-               uat.Contents = append(uat.Contents, &OpaqueSubpacket{
-                       SubType:  UserAttrImageSubpacket,
-                       Contents: buf.Bytes()})
-       }
-       return
-}
-
-// NewUserAttribute creates a new user attribute packet containing the given 
subpackets.
-func NewUserAttribute(contents ...*OpaqueSubpacket) *UserAttribute {
-       return &UserAttribute{Contents: contents}
-}
-
-func (uat *UserAttribute) parse(r io.Reader) (err error) {
-       // RFC 4880, section 5.13
-       b, err := ioutil.ReadAll(r)
-       if err != nil {
-               return
-       }
-       uat.Contents, err = OpaqueSubpackets(b)
-       return
-}
-
-// Serialize marshals the user attribute to w in the form of an OpenPGP 
packet, including
-// header.
-func (uat *UserAttribute) Serialize(w io.Writer) (err error) {
-       var buf bytes.Buffer
-       for _, sp := range uat.Contents {
-               sp.Serialize(&buf)
-       }
-       if err = serializeHeader(w, packetTypeUserAttribute, buf.Len()); err != 
nil {
-               return err
-       }
-       _, err = w.Write(buf.Bytes())
-       return
-}
-
-// ImageData returns zero or more byte slices, each containing
-// JPEG File Interchange Format (JFIF), for each photo in the
-// the user attribute packet.
-func (uat *UserAttribute) ImageData() (imageData [][]byte) {
-       for _, sp := range uat.Contents {
-               if sp.SubType == UserAttrImageSubpacket && len(sp.Contents) > 
16 {
-                       imageData = append(imageData, sp.Contents[16:])
-               }
-       }
-       return
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/openpgp/packet/userattribute_test.go
----------------------------------------------------------------------
diff --git 
a/cli/vendor/golang.org/x/crypto/openpgp/packet/userattribute_test.go 
b/cli/vendor/golang.org/x/crypto/openpgp/packet/userattribute_test.go
deleted file mode 100644
index 13ca514..0000000
--- a/cli/vendor/golang.org/x/crypto/openpgp/packet/userattribute_test.go
+++ /dev/null
@@ -1,109 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package packet
-
-import (
-       "bytes"
-       "encoding/base64"
-       "image/color"
-       "image/jpeg"
-       "testing"
-)
-
-func TestParseUserAttribute(t *testing.T) {
-       r := base64.NewDecoder(base64.StdEncoding, 
bytes.NewBufferString(userAttributePacket))
-       for i := 0; i < 2; i++ {
-               p, err := Read(r)
-               if err != nil {
-                       t.Fatal(err)
-               }
-               uat := p.(*UserAttribute)
-               imgs := uat.ImageData()
-               if len(imgs) != 1 {
-                       t.Errorf("Unexpected number of images in user attribute 
packet: %d", len(imgs))
-               }
-               if len(imgs[0]) != 3395 {
-                       t.Errorf("Unexpected JPEG image size: %d", len(imgs[0]))
-               }
-               img, err := jpeg.Decode(bytes.NewBuffer(imgs[0]))
-               if err != nil {
-                       t.Errorf("Error decoding JPEG image: %v", err)
-               }
-               // A pixel in my right eye.
-               pixel := color.NRGBAModel.Convert(img.At(56, 36))
-               ref := color.NRGBA{R: 157, G: 128, B: 124, A: 255}
-               if pixel != ref {
-                       t.Errorf("Unexpected pixel color: %v", pixel)
-               }
-               w := bytes.NewBuffer(nil)
-               err = uat.Serialize(w)
-               if err != nil {
-                       t.Errorf("Error writing user attribute: %v", err)
-               }
-               r = bytes.NewBuffer(w.Bytes())
-       }
-}
-
-const userAttributePacket = `
-0cyWzJQBEAABAQAAAAAAAAAAAAAAAP/Y/+AAEEpGSUYAAQIAAAEAAQAA/9sAQwAFAwQEBAMFBAQE
-BQUFBgcMCAcHBwcPCgsJDBEPEhIRDxEQExYcFxMUGhUQERghGBocHR8fHxMXIiQiHiQcHh8e/9sA
-QwEFBQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e
-Hh4eHh4eHh4e/8AAEQgAZABkAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYH
-CAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHw
-JDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6
-g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk
-5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIB
-AgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEX
-GBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKT
-lJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX2
-9/j5+v/aAAwDAQACEQMRAD8A5uGP06VehQ4pIox04q5EnHSvAep+hIIl4zVuMHGPWmRrUWtalaaN
-pU2oXsgSGJSxPr6ClvoitErs0Itqjc7BQOpPAFYmrfEnwjojtHNqaXEynBjtx5hH4jj9a8B8d+Od
-W8UXZjWR4LJT+7t0Jwfc+prnIdO1CWZEW2mZ3HyDactXXDB3V5s8evm1namj6r0H4weCLtxG+ova
-ueP30RA/MV6not1bX0Ed1ZzxzwyDKvGwZSPqK+Ff+ES8R8t/ZV2oHUmM10Hgbxp4m8BatEfNnWBH
-/eWshOxx9Kmpg4te49RUM1kn+8Wh9zQ4P1FaMC7l465rjPh14y0fxnoseoaXOpfaPOgJ+eI98j09
-67W19M15bi4uzPSqTU480WXkjZkAyAR61DPE6OCSOalWRRgZxjvTb598sfU4FBwx5uY4T4feIm8P
-TeJbAgc65NIM+8cX+FFeLfF3Vr3SfiNrMFrMypJMJcDPUqP8KK+kpVFyLU+ar037SXqX4hxVpMY7
-1UhPpVlT2rybKx9smWYz3NeH/EDVLzxt40j8O6bITaQybPlbKkjq39K9O8fasdH8IahfKxWQRFIy
-Ou9uB/OuE/Z/0y3j1d9TuyoZCMs5xjuea1pLli5nn46q240l13PcfhN8EvDNtpcEl/CklyVBLuMk
-mvU/Dfwo0BL/AO13FjEDD/qyV7Vn+CvGPg8zRpJrVm8ikLtEg6+1ew2dxZ3EQaJgysuQPasH7eXW
-1zzsbVhT92kk/PsYieEND+zlPs6c/wCyAPyryH4wfCPRtW0u6j+xRLOxLxSoADkDpXY+MPjJ4c0S
-9k082d3O8ZKkxw5XI96ytK+IGk+IpFjRpod+Qq3C7QT6A1E6NenaXbqRg6rlLlqS0fRnxjpd1r/w
-w8afa7GWRPKbZLGeBKmeVNfZngLxNaeKfDdprVjxHcLlkJ5Vh1H5185/tDad9h8XOsqAw3Cb0cjq
-CfX61P8AsveKf7L8T3fhe5nxa3g324YniQdh9R/KuivTdSmp9TXB1/Z1nRlsfU249QBx1pWfcwI7
-Cq6u2Ovamb9rYz16V5x7Psz5q/aJhZfibcupIElvE3H+7j+lFbXx9szP45jlUfeso8/99OKK9elL
-3EeNVopzZVharCtxVRGGMk02S5JyFOB69zWTieypnL/GksfB+0cr9oQt69awPhPpD69Y3Ky3DWth
-CWluGU4LAdq3vibGs/g68BJygVxjrwRW5+ztoRv/AAs8EeCZnO/J/hzz/Kumi4wp3kePjlOdZKPY
-ml8Mvo6WM9ppi7J0EkQYMzkb1X0wW+bJHGACa+ivg14huZPCkjXUO6SImIYOQAP6UQ2sGneHmiWF
-CYoSAAuM8etXfhBpMr+EZ3SSNRcMx6ZxWdes6ytBGSwkMNFuo7pnP614Ut9Zn1C4uLySKcwObGFA
-Qnm4+XcR71h+CfDHiKCQWuv2YWFtw+bBZQD8rcE8n2Ney+GbGGQSM6I7xvtI681rXdp8hKRRp6t3
-FYPE1VDlsY1nQjWdl+J8w/tOeDZZ/AMd/EGefTHyxxyYjwfyODXg3waRh8UtEcFh+8Jb8FNfZPxh
-Ak8J6nbPIsiyW7LnseK+Ofh99ptPHFnf2lu0y2twGcKuSEPB/Q1WHk50miq1o14TXU+xop+On61H
-NMC6Nis1LgsAcUTSt1APFcXJZn0EqmhyvxA037friTYziBV6f7Tf40Vr3k4aXLx5OMZIzRXZB2ik
-efJXbPHJJcnaD9aN2R1qoGO8/WkuLlIV+YjdjpXSonQ5lTxfiTwzqCnkeQxx9BWx+zPrQsrBFYja
-zEfrXL6lfie3khcjY6lSPUGud+G3iA6FrY0uQ/KJsA9gCa0jSvFpnBi6tpKSPu++nsIfDFxeXciR
-qIicscY4rxTwB8RUkn1axsPEf2LTYx85kTGzqCUP8VcJ47+JOs+I0Hhq1njjt/ufIeSvq1VtE+Gs
-eoaUbSHUrkHdu3WtuX5Ix81XRh7OL5jirVpV5Whdn0F8C/iX4auVn0i612T7bASoe8wjTAd89K9g
-vtSt5NMa4t5lkRhgOh3Dn6V8aaz8KZrIR3OlQ6r56LySmSxxz06Vo/CHx34h0rxBP4XvJ5AjK2RP
-nEbAEj6ZxjPrWM6fMmoswqJxqJ1VZnqHxn1NLPwveqWHmNC2BnnNcD8DfDkGi+CH1m+ijN1qMzNA
-4GSIiAMf+hVxPxU8Tapc3c0F9MGCn5GU5BX0Pau3+HmrT3XgXSIJCBHDGdgAx1NYSpezha52Yauq
-1dya2Wh2onAIwTj1p0lxxWWLkhRyCKWa5O3ORXOos9KVQluZm83j0oqi84JyWH50Vdmc7ep43d3I
-t1Z2Iz2FYdxeSTsxyRnvTdVuDNcNluM9KrKcg817NOnZGNbEXdkNckjrXGeIIprPxFFdRHAlIwem
-COtdmxrG8Q2cd/ZNExw45RvQ1bVjim+dWNzw7eaTD4mN3dndCQCo6hmI5zXpj/Ea/wBHjkh0kwRW
-xXEfl4yTxXzXZalJDL9nuWKMmRnHcV2Hh3WreCyYXW2SWQhd5P3F6n+lS43d2cTm6d7Ox9EWPxH1
-ODQxPqWpCaSU/ukUc4z3/WvKW8UhviAdaMewYZG98gj9c1ymoa8LyWOJHwkTDaVPb0qpr+q2m6Nb
-cfvNo349az9mou9iZVXNWbub3jm98/Vza2ReV7lsJg/e3dsV654UR9N0K0sZP9ZDGFbHr3rzL4P+
-H7rXfEEWr3I3W1qf3IYdW9fwqDxf4k8UeH/G95p08kscHmk25dPlZT0we9YTj7SXKjpw1aNG8mj3
-FLv5ccU959ycnmvKPDnxB82YQarGsZPAlTp+IrvIr1ZIgySKwIyCOhFYTpyg9T0qWIhVV4svzPvf
-IdhgY4orPachj81FRdmtzxqdiZmJ9aQEgdqZcPtmbJ71DJcAZ5r20kkeXJtsfPIQDwPzrG1a+S3i
-LyHAHvmp7y7HOD1rlNdm+1T7Acovf3o+J2RMpezjzMvrob67pX9o2ShZlYgg/wAWKxZLLWLZ/Ke3
-mVh14yK9M+BMC3dre2ko3LHKCB7EV7EngeGQJdQ7HyBkMKS0djgq1W3c+XtK03U522RwzsTwNiEk
-ntXoHgf4calql9El/G8UZbLfLyfr7V9FeGvh+s+0Lbxxcglu2K1NW1nwN4Gk/wBLuI57tV5jjwzE
-/QVNS+0dWYRqNvXRFv4eeCodKsY1ggVIY1G3K4z714h+1Jqul3GpwaXYeXJLbzgyyrg4b+6D+HNb
-vjz436zq9m+naHF/ZdkeGfOZXH17V4Vqt2b29K+ZuOc5bnce5zWdPBShL2lTfojSeJhy+zp/NjVz
-1Bwa6DSfFGq6fbJFDKrov8DjPFcu97ZxsUe4jVhwVJ5Bpp1mwQiLewJPXacVq6fNpYyjOUXdHoKf
-EG8VQHsInbuVcgflRXnt5fIs2FYHgcgUVi8LG+xusdW/mN7U2KgEVkTzPt60UVfQ9eHxGHrV1MGi
-iD4V25x1qvdgLAMd6KK0pbHm4x++dp8FtUubLxJ5EIjMc+A4Za+qfD8pe1JZVOBmiinW3RyRPMfi
-R8QPE638+k2l6LK0Hylbddhb6nOa80mlkcmWR2kcnlnOSaKK7qCXKcNdu5narcSrAoBxvODWJIga
-VckjDdqKKwq/EaQ0gUdbjQ6mr7QGBUcd6tPBC6gtGpOOuKKKie5qn7qIpEXd0HSiiimSf//Z`

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/openpgp/packet/userid.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/openpgp/packet/userid.go 
b/cli/vendor/golang.org/x/crypto/openpgp/packet/userid.go
deleted file mode 100644
index d6bea7d..0000000
--- a/cli/vendor/golang.org/x/crypto/openpgp/packet/userid.go
+++ /dev/null
@@ -1,160 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package packet
-
-import (
-       "io"
-       "io/ioutil"
-       "strings"
-)
-
-// UserId contains text that is intended to represent the name and email
-// address of the key holder. See RFC 4880, section 5.11. By convention, this
-// takes the form "Full Name (Comment) <em...@example.com>"
-type UserId struct {
-       Id string // By convention, this takes the form "Full Name (Comment) 
<em...@example.com>" which is split out in the fields below.
-
-       Name, Comment, Email string
-}
-
-func hasInvalidCharacters(s string) bool {
-       for _, c := range s {
-               switch c {
-               case '(', ')', '<', '>', 0:
-                       return true
-               }
-       }
-       return false
-}
-
-// NewUserId returns a UserId or nil if any of the arguments contain invalid
-// characters. The invalid characters are '\x00', '(', ')', '<' and '>'
-func NewUserId(name, comment, email string) *UserId {
-       // RFC 4880 doesn't deal with the structure of userid strings; the
-       // name, comment and email form is just a convention. However, there's
-       // no convention about escaping the metacharacters and GPG just refuses
-       // to create user ids where, say, the name contains a '('. We mirror
-       // this behaviour.
-
-       if hasInvalidCharacters(name) || hasInvalidCharacters(comment) || 
hasInvalidCharacters(email) {
-               return nil
-       }
-
-       uid := new(UserId)
-       uid.Name, uid.Comment, uid.Email = name, comment, email
-       uid.Id = name
-       if len(comment) > 0 {
-               if len(uid.Id) > 0 {
-                       uid.Id += " "
-               }
-               uid.Id += "("
-               uid.Id += comment
-               uid.Id += ")"
-       }
-       if len(email) > 0 {
-               if len(uid.Id) > 0 {
-                       uid.Id += " "
-               }
-               uid.Id += "<"
-               uid.Id += email
-               uid.Id += ">"
-       }
-       return uid
-}
-
-func (uid *UserId) parse(r io.Reader) (err error) {
-       // RFC 4880, section 5.11
-       b, err := ioutil.ReadAll(r)
-       if err != nil {
-               return
-       }
-       uid.Id = string(b)
-       uid.Name, uid.Comment, uid.Email = parseUserId(uid.Id)
-       return
-}
-
-// Serialize marshals uid to w in the form of an OpenPGP packet, including
-// header.
-func (uid *UserId) Serialize(w io.Writer) error {
-       err := serializeHeader(w, packetTypeUserId, len(uid.Id))
-       if err != nil {
-               return err
-       }
-       _, err = w.Write([]byte(uid.Id))
-       return err
-}
-
-// parseUserId extracts the name, comment and email from a user id string that
-// is formatted as "Full Name (Comment) <em...@example.com>".
-func parseUserId(id string) (name, comment, email string) {
-       var n, c, e struct {
-               start, end int
-       }
-       var state int
-
-       for offset, rune := range id {
-               switch state {
-               case 0:
-                       // Entering name
-                       n.start = offset
-                       state = 1
-                       fallthrough
-               case 1:
-                       // In name
-                       if rune == '(' {
-                               state = 2
-                               n.end = offset
-                       } else if rune == '<' {
-                               state = 5
-                               n.end = offset
-                       }
-               case 2:
-                       // Entering comment
-                       c.start = offset
-                       state = 3
-                       fallthrough
-               case 3:
-                       // In comment
-                       if rune == ')' {
-                               state = 4
-                               c.end = offset
-                       }
-               case 4:
-                       // Between comment and email
-                       if rune == '<' {
-                               state = 5
-                       }
-               case 5:
-                       // Entering email
-                       e.start = offset
-                       state = 6
-                       fallthrough
-               case 6:
-                       // In email
-                       if rune == '>' {
-                               state = 7
-                               e.end = offset
-                       }
-               default:
-                       // After email
-               }
-       }
-       switch state {
-       case 1:
-               // ended in the name
-               n.end = len(id)
-       case 3:
-               // ended in comment
-               c.end = len(id)
-       case 6:
-               // ended in email
-               e.end = len(id)
-       }
-
-       name = strings.TrimSpace(id[n.start:n.end])
-       comment = strings.TrimSpace(id[c.start:c.end])
-       email = strings.TrimSpace(id[e.start:e.end])
-       return
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/openpgp/packet/userid_test.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/openpgp/packet/userid_test.go 
b/cli/vendor/golang.org/x/crypto/openpgp/packet/userid_test.go
deleted file mode 100644
index 2968193..0000000
--- a/cli/vendor/golang.org/x/crypto/openpgp/packet/userid_test.go
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package packet
-
-import (
-       "testing"
-)
-
-var userIdTests = []struct {
-       id                   string
-       name, comment, email string
-}{
-       {"", "", "", ""},
-       {"John Smith", "John Smith", "", ""},
-       {"John Smith ()", "John Smith", "", ""},
-       {"John Smith () <>", "John Smith", "", ""},
-       {"(comment", "", "comment", ""},
-       {"(comment)", "", "comment", ""},
-       {"<email", "", "", "email"},
-       {"<email>   sdfk", "", "", "email"},
-       {"  John Smith  (  Comment ) asdkflj < email > lksdfj", "John Smith", 
"Comment", "email"},
-       {"  John Smith  < email > lksdfj", "John Smith", "", "email"},
-       {"(<foo", "", "<foo", ""},
-       {"René Descartes (العربي)", "René Descartes", "العربي", 
""},
-}
-
-func TestParseUserId(t *testing.T) {
-       for i, test := range userIdTests {
-               name, comment, email := parseUserId(test.id)
-               if name != test.name {
-                       t.Errorf("%d: name mismatch got:%s want:%s", i, name, 
test.name)
-               }
-               if comment != test.comment {
-                       t.Errorf("%d: comment mismatch got:%s want:%s", i, 
comment, test.comment)
-               }
-               if email != test.email {
-                       t.Errorf("%d: email mismatch got:%s want:%s", i, email, 
test.email)
-               }
-       }
-}
-
-var newUserIdTests = []struct {
-       name, comment, email, id string
-}{
-       {"foo", "", "", "foo"},
-       {"", "bar", "", "(bar)"},
-       {"", "", "baz", "<baz>"},
-       {"foo", "bar", "", "foo (bar)"},
-       {"foo", "", "baz", "foo <baz>"},
-       {"", "bar", "baz", "(bar) <baz>"},
-       {"foo", "bar", "baz", "foo (bar) <baz>"},
-}
-
-func TestNewUserId(t *testing.T) {
-       for i, test := range newUserIdTests {
-               uid := NewUserId(test.name, test.comment, test.email)
-               if uid == nil {
-                       t.Errorf("#%d: returned nil", i)
-                       continue
-               }
-               if uid.Id != test.id {
-                       t.Errorf("#%d: got '%s', want '%s'", i, uid.Id, test.id)
-               }
-       }
-}
-
-var invalidNewUserIdTests = []struct {
-       name, comment, email string
-}{
-       {"foo(", "", ""},
-       {"foo<", "", ""},
-       {"", "bar)", ""},
-       {"", "bar<", ""},
-       {"", "", "baz>"},
-       {"", "", "baz)"},
-       {"", "", "baz\x00"},
-}
-
-func TestNewUserIdWithInvalidInput(t *testing.T) {
-       for i, test := range invalidNewUserIdTests {
-               if uid := NewUserId(test.name, test.comment, test.email); uid 
!= nil {
-                       t.Errorf("#%d: returned non-nil value: %#v", i, uid)
-               }
-       }
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/openpgp/read.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/openpgp/read.go 
b/cli/vendor/golang.org/x/crypto/openpgp/read.go
deleted file mode 100644
index dfffc39..0000000
--- a/cli/vendor/golang.org/x/crypto/openpgp/read.go
+++ /dev/null
@@ -1,439 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package openpgp implements high level operations on OpenPGP messages.
-package openpgp // import "golang.org/x/crypto/openpgp"
-
-import (
-       "crypto"
-       _ "crypto/sha256"
-       "hash"
-       "io"
-       "strconv"
-
-       "golang.org/x/crypto/openpgp/armor"
-       "golang.org/x/crypto/openpgp/errors"
-       "golang.org/x/crypto/openpgp/packet"
-)
-
-// SignatureType is the armor type for a PGP signature.
-var SignatureType = "PGP SIGNATURE"
-
-// readArmored reads an armored block with the given type.
-func readArmored(r io.Reader, expectedType string) (body io.Reader, err error) 
{
-       block, err := armor.Decode(r)
-       if err != nil {
-               return
-       }
-
-       if block.Type != expectedType {
-               return nil, errors.InvalidArgumentError("expected '" + 
expectedType + "', got: " + block.Type)
-       }
-
-       return block.Body, nil
-}
-
-// MessageDetails contains the result of parsing an OpenPGP encrypted and/or
-// signed message.
-type MessageDetails struct {
-       IsEncrypted              bool                // true if the message was 
encrypted.
-       EncryptedToKeyIds        []uint64            // the list of recipient 
key ids.
-       IsSymmetricallyEncrypted bool                // true if a passphrase 
could have decrypted the message.
-       DecryptedWith            Key                 // the private key used to 
decrypt the message, if any.
-       IsSigned                 bool                // true if the message is 
signed.
-       SignedByKeyId            uint64              // the key id of the 
signer, if any.
-       SignedBy                 *Key                // the key of the signer, 
if available.
-       LiteralData              *packet.LiteralData // the metadata of the 
contents
-       UnverifiedBody           io.Reader           // the contents of the 
message.
-
-       // If IsSigned is true and SignedBy is non-zero then the signature will
-       // be verified as UnverifiedBody is read. The signature cannot be
-       // checked until the whole of UnverifiedBody is read so UnverifiedBody
-       // must be consumed until EOF before the data can trusted. Even if a
-       // message isn't signed (or the signer is unknown) the data may contain
-       // an authentication code that is only checked once UnverifiedBody has
-       // been consumed. Once EOF has been seen, the following fields are
-       // valid. (An authentication code failure is reported as a
-       // SignatureError error when reading from UnverifiedBody.)
-       SignatureError error             // nil if the signature is good.
-       Signature      *packet.Signature // the signature packet itself.
-
-       decrypted io.ReadCloser
-}
-
-// A PromptFunction is used as a callback by functions that may need to decrypt
-// a private key, or prompt for a passphrase. It is called with a list of
-// acceptable, encrypted private keys and a boolean that indicates whether a
-// passphrase is usable. It should either decrypt a private key or return a
-// passphrase to try. If the decrypted private key or given passphrase isn't
-// correct, the function will be called again, forever. Any error returned will
-// be passed up.
-type PromptFunction func(keys []Key, symmetric bool) ([]byte, error)
-
-// A keyEnvelopePair is used to store a private key with the envelope that
-// contains a symmetric key, encrypted with that key.
-type keyEnvelopePair struct {
-       key          Key
-       encryptedKey *packet.EncryptedKey
-}
-
-// ReadMessage parses an OpenPGP message that may be signed and/or encrypted.
-// The given KeyRing should contain both public keys (for signature
-// verification) and, possibly encrypted, private keys for decrypting.
-// If config is nil, sensible defaults will be used.
-func ReadMessage(r io.Reader, keyring KeyRing, prompt PromptFunction, config 
*packet.Config) (md *MessageDetails, err error) {
-       var p packet.Packet
-
-       var symKeys []*packet.SymmetricKeyEncrypted
-       var pubKeys []keyEnvelopePair
-       var se *packet.SymmetricallyEncrypted
-
-       packets := packet.NewReader(r)
-       md = new(MessageDetails)
-       md.IsEncrypted = true
-
-       // The message, if encrypted, starts with a number of packets
-       // containing an encrypted decryption key. The decryption key is either
-       // encrypted to a public key, or with a passphrase. This loop
-       // collects these packets.
-ParsePackets:
-       for {
-               p, err = packets.Next()
-               if err != nil {
-                       return nil, err
-               }
-               switch p := p.(type) {
-               case *packet.SymmetricKeyEncrypted:
-                       // This packet contains the decryption key encrypted 
with a passphrase.
-                       md.IsSymmetricallyEncrypted = true
-                       symKeys = append(symKeys, p)
-               case *packet.EncryptedKey:
-                       // This packet contains the decryption key encrypted to 
a public key.
-                       md.EncryptedToKeyIds = append(md.EncryptedToKeyIds, 
p.KeyId)
-                       switch p.Algo {
-                       case packet.PubKeyAlgoRSA, 
packet.PubKeyAlgoRSAEncryptOnly, packet.PubKeyAlgoElGamal:
-                               break
-                       default:
-                               continue
-                       }
-                       var keys []Key
-                       if p.KeyId == 0 {
-                               keys = keyring.DecryptionKeys()
-                       } else {
-                               keys = keyring.KeysById(p.KeyId)
-                       }
-                       for _, k := range keys {
-                               pubKeys = append(pubKeys, keyEnvelopePair{k, p})
-                       }
-               case *packet.SymmetricallyEncrypted:
-                       se = p
-                       break ParsePackets
-               case *packet.Compressed, *packet.LiteralData, 
*packet.OnePassSignature:
-                       // This message isn't encrypted.
-                       if len(symKeys) != 0 || len(pubKeys) != 0 {
-                               return nil, errors.StructuralError("key 
material not followed by encrypted message")
-                       }
-                       packets.Unread(p)
-                       return readSignedMessage(packets, nil, keyring)
-               }
-       }
-
-       var candidates []Key
-       var decrypted io.ReadCloser
-
-       // Now that we have the list of encrypted keys we need to decrypt at
-       // least one of them or, if we cannot, we need to call the prompt
-       // function so that it can decrypt a key or give us a passphrase.
-FindKey:
-       for {
-               // See if any of the keys already have a private key available
-               candidates = candidates[:0]
-               candidateFingerprints := make(map[string]bool)
-
-               for _, pk := range pubKeys {
-                       if pk.key.PrivateKey == nil {
-                               continue
-                       }
-                       if !pk.key.PrivateKey.Encrypted {
-                               if len(pk.encryptedKey.Key) == 0 {
-                                       
pk.encryptedKey.Decrypt(pk.key.PrivateKey, config)
-                               }
-                               if len(pk.encryptedKey.Key) == 0 {
-                                       continue
-                               }
-                               decrypted, err = 
se.Decrypt(pk.encryptedKey.CipherFunc, pk.encryptedKey.Key)
-                               if err != nil && err != errors.ErrKeyIncorrect {
-                                       return nil, err
-                               }
-                               if decrypted != nil {
-                                       md.DecryptedWith = pk.key
-                                       break FindKey
-                               }
-                       } else {
-                               fpr := string(pk.key.PublicKey.Fingerprint[:])
-                               if v := candidateFingerprints[fpr]; v {
-                                       continue
-                               }
-                               candidates = append(candidates, pk.key)
-                               candidateFingerprints[fpr] = true
-                       }
-               }
-
-               if len(candidates) == 0 && len(symKeys) == 0 {
-                       return nil, errors.ErrKeyIncorrect
-               }
-
-               if prompt == nil {
-                       return nil, errors.ErrKeyIncorrect
-               }
-
-               passphrase, err := prompt(candidates, len(symKeys) != 0)
-               if err != nil {
-                       return nil, err
-               }
-
-               // Try the symmetric passphrase first
-               if len(symKeys) != 0 && passphrase != nil {
-                       for _, s := range symKeys {
-                               key, cipherFunc, err := s.Decrypt(passphrase)
-                               if err == nil {
-                                       decrypted, err = se.Decrypt(cipherFunc, 
key)
-                                       if err != nil && err != 
errors.ErrKeyIncorrect {
-                                               return nil, err
-                                       }
-                                       if decrypted != nil {
-                                               break FindKey
-                                       }
-                               }
-
-                       }
-               }
-       }
-
-       md.decrypted = decrypted
-       if err := packets.Push(decrypted); err != nil {
-               return nil, err
-       }
-       return readSignedMessage(packets, md, keyring)
-}
-
-// readSignedMessage reads a possibly signed message if mdin is non-zero then
-// that structure is updated and returned. Otherwise a fresh MessageDetails is
-// used.
-func readSignedMessage(packets *packet.Reader, mdin *MessageDetails, keyring 
KeyRing) (md *MessageDetails, err error) {
-       if mdin == nil {
-               mdin = new(MessageDetails)
-       }
-       md = mdin
-
-       var p packet.Packet
-       var h hash.Hash
-       var wrappedHash hash.Hash
-FindLiteralData:
-       for {
-               p, err = packets.Next()
-               if err != nil {
-                       return nil, err
-               }
-               switch p := p.(type) {
-               case *packet.Compressed:
-                       if err := packets.Push(p.Body); err != nil {
-                               return nil, err
-                       }
-               case *packet.OnePassSignature:
-                       if !p.IsLast {
-                               return nil, errors.UnsupportedError("nested 
signatures")
-                       }
-
-                       h, wrappedHash, err = hashForSignature(p.Hash, 
p.SigType)
-                       if err != nil {
-                               md = nil
-                               return
-                       }
-
-                       md.IsSigned = true
-                       md.SignedByKeyId = p.KeyId
-                       keys := keyring.KeysByIdUsage(p.KeyId, 
packet.KeyFlagSign)
-                       if len(keys) > 0 {
-                               md.SignedBy = &keys[0]
-                       }
-               case *packet.LiteralData:
-                       md.LiteralData = p
-                       break FindLiteralData
-               }
-       }
-
-       if md.SignedBy != nil {
-               md.UnverifiedBody = &signatureCheckReader{packets, h, 
wrappedHash, md}
-       } else if md.decrypted != nil {
-               md.UnverifiedBody = checkReader{md}
-       } else {
-               md.UnverifiedBody = md.LiteralData.Body
-       }
-
-       return md, nil
-}
-
-// hashForSignature returns a pair of hashes that can be used to verify a
-// signature. The signature may specify that the contents of the signed message
-// should be preprocessed (i.e. to normalize line endings). Thus this function
-// returns two hashes. The second should be used to hash the message itself and
-// performs any needed preprocessing.
-func hashForSignature(hashId crypto.Hash, sigType packet.SignatureType) 
(hash.Hash, hash.Hash, error) {
-       if !hashId.Available() {
-               return nil, nil, errors.UnsupportedError("hash not available: " 
+ strconv.Itoa(int(hashId)))
-       }
-       h := hashId.New()
-
-       switch sigType {
-       case packet.SigTypeBinary:
-               return h, h, nil
-       case packet.SigTypeText:
-               return h, NewCanonicalTextHash(h), nil
-       }
-
-       return nil, nil, errors.UnsupportedError("unsupported signature type: " 
+ strconv.Itoa(int(sigType)))
-}
-
-// checkReader wraps an io.Reader from a LiteralData packet. When it sees EOF
-// it closes the ReadCloser from any SymmetricallyEncrypted packet to trigger
-// MDC checks.
-type checkReader struct {
-       md *MessageDetails
-}
-
-func (cr checkReader) Read(buf []byte) (n int, err error) {
-       n, err = cr.md.LiteralData.Body.Read(buf)
-       if err == io.EOF {
-               mdcErr := cr.md.decrypted.Close()
-               if mdcErr != nil {
-                       err = mdcErr
-               }
-       }
-       return
-}
-
-// signatureCheckReader wraps an io.Reader from a LiteralData packet and hashes
-// the data as it is read. When it sees an EOF from the underlying io.Reader
-// it parses and checks a trailing Signature packet and triggers any MDC 
checks.
-type signatureCheckReader struct {
-       packets        *packet.Reader
-       h, wrappedHash hash.Hash
-       md             *MessageDetails
-}
-
-func (scr *signatureCheckReader) Read(buf []byte) (n int, err error) {
-       n, err = scr.md.LiteralData.Body.Read(buf)
-       scr.wrappedHash.Write(buf[:n])
-       if err == io.EOF {
-               var p packet.Packet
-               p, scr.md.SignatureError = scr.packets.Next()
-               if scr.md.SignatureError != nil {
-                       return
-               }
-
-               var ok bool
-               if scr.md.Signature, ok = p.(*packet.Signature); !ok {
-                       scr.md.SignatureError = 
errors.StructuralError("LiteralData not followed by Signature")
-                       return
-               }
-
-               scr.md.SignatureError = 
scr.md.SignedBy.PublicKey.VerifySignature(scr.h, scr.md.Signature)
-
-               // The SymmetricallyEncrypted packet, if any, might have an
-               // unsigned hash of its own. In order to check this we need to
-               // close that Reader.
-               if scr.md.decrypted != nil {
-                       mdcErr := scr.md.decrypted.Close()
-                       if mdcErr != nil {
-                               err = mdcErr
-                       }
-               }
-       }
-       return
-}
-
-// CheckDetachedSignature takes a signed file and a detached signature and
-// returns the signer if the signature is valid. If the signer isn't known,
-// ErrUnknownIssuer is returned.
-func CheckDetachedSignature(keyring KeyRing, signed, signature io.Reader) 
(signer *Entity, err error) {
-       var issuerKeyId uint64
-       var hashFunc crypto.Hash
-       var sigType packet.SignatureType
-       var keys []Key
-       var p packet.Packet
-
-       packets := packet.NewReader(signature)
-       for {
-               p, err = packets.Next()
-               if err == io.EOF {
-                       return nil, errors.ErrUnknownIssuer
-               }
-               if err != nil {
-                       return nil, err
-               }
-
-               switch sig := p.(type) {
-               case *packet.Signature:
-                       if sig.IssuerKeyId == nil {
-                               return nil, errors.StructuralError("signature 
doesn't have an issuer")
-                       }
-                       issuerKeyId = *sig.IssuerKeyId
-                       hashFunc = sig.Hash
-                       sigType = sig.SigType
-               case *packet.SignatureV3:
-                       issuerKeyId = sig.IssuerKeyId
-                       hashFunc = sig.Hash
-                       sigType = sig.SigType
-               default:
-                       return nil, errors.StructuralError("non signature 
packet found")
-               }
-
-               keys = keyring.KeysByIdUsage(issuerKeyId, packet.KeyFlagSign)
-               if len(keys) > 0 {
-                       break
-               }
-       }
-
-       if len(keys) == 0 {
-               panic("unreachable")
-       }
-
-       h, wrappedHash, err := hashForSignature(hashFunc, sigType)
-       if err != nil {
-               return nil, err
-       }
-
-       if _, err := io.Copy(wrappedHash, signed); err != nil && err != io.EOF {
-               return nil, err
-       }
-
-       for _, key := range keys {
-               switch sig := p.(type) {
-               case *packet.Signature:
-                       err = key.PublicKey.VerifySignature(h, sig)
-               case *packet.SignatureV3:
-                       err = key.PublicKey.VerifySignatureV3(h, sig)
-               default:
-                       panic("unreachable")
-               }
-
-               if err == nil {
-                       return key.Entity, nil
-               }
-       }
-
-       return nil, err
-}
-
-// CheckArmoredDetachedSignature performs the same actions as
-// CheckDetachedSignature but expects the signature to be armored.
-func CheckArmoredDetachedSignature(keyring KeyRing, signed, signature 
io.Reader) (signer *Entity, err error) {
-       body, err := readArmored(signature, SignatureType)
-       if err != nil {
-               return
-       }
-
-       return CheckDetachedSignature(keyring, signed, body)
-}

Reply via email to