http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/keys.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/keys.go 
b/cli/vendor/golang.org/x/crypto/ssh/keys.go
deleted file mode 100644
index cfc970b..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/keys.go
+++ /dev/null
@@ -1,720 +0,0 @@
-// Copyright 2012 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 ssh
-
-import (
-       "bytes"
-       "crypto"
-       "crypto/dsa"
-       "crypto/ecdsa"
-       "crypto/elliptic"
-       "crypto/rsa"
-       "crypto/x509"
-       "encoding/asn1"
-       "encoding/base64"
-       "encoding/pem"
-       "errors"
-       "fmt"
-       "io"
-       "math/big"
-       "strings"
-)
-
-// These constants represent the algorithm names for key types supported by 
this
-// package.
-const (
-       KeyAlgoRSA      = "ssh-rsa"
-       KeyAlgoDSA      = "ssh-dss"
-       KeyAlgoECDSA256 = "ecdsa-sha2-nistp256"
-       KeyAlgoECDSA384 = "ecdsa-sha2-nistp384"
-       KeyAlgoECDSA521 = "ecdsa-sha2-nistp521"
-)
-
-// parsePubKey parses a public key of the given algorithm.
-// Use ParsePublicKey for keys with prepended algorithm.
-func parsePubKey(in []byte, algo string) (pubKey PublicKey, rest []byte, err 
error) {
-       switch algo {
-       case KeyAlgoRSA:
-               return parseRSA(in)
-       case KeyAlgoDSA:
-               return parseDSA(in)
-       case KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521:
-               return parseECDSA(in)
-       case CertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01, 
CertAlgoECDSA384v01, CertAlgoECDSA521v01:
-               cert, err := parseCert(in, certToPrivAlgo(algo))
-               if err != nil {
-                       return nil, nil, err
-               }
-               return cert, nil, nil
-       }
-       return nil, nil, fmt.Errorf("ssh: unknown key algorithm: %v", err)
-}
-
-// parseAuthorizedKey parses a public key in OpenSSH authorized_keys format
-// (see sshd(8) manual page) once the options and key type fields have been
-// removed.
-func parseAuthorizedKey(in []byte) (out PublicKey, comment string, err error) {
-       in = bytes.TrimSpace(in)
-
-       i := bytes.IndexAny(in, " \t")
-       if i == -1 {
-               i = len(in)
-       }
-       base64Key := in[:i]
-
-       key := make([]byte, base64.StdEncoding.DecodedLen(len(base64Key)))
-       n, err := base64.StdEncoding.Decode(key, base64Key)
-       if err != nil {
-               return nil, "", err
-       }
-       key = key[:n]
-       out, err = ParsePublicKey(key)
-       if err != nil {
-               return nil, "", err
-       }
-       comment = string(bytes.TrimSpace(in[i:]))
-       return out, comment, nil
-}
-
-// ParseKnownHosts parses an entry in the format of the known_hosts file.
-//
-// The known_hosts format is documented in the sshd(8) manual page. This
-// function will parse a single entry from in. On successful return, marker
-// will contain the optional marker value (i.e. "cert-authority" or "revoked")
-// or else be empty, hosts will contain the hosts that this entry matches,
-// pubKey will contain the public key and comment will contain any trailing
-// comment at the end of the line. See the sshd(8) manual page for the various
-// forms that a host string can take.
-//
-// The unparsed remainder of the input will be returned in rest. This function
-// can be called repeatedly to parse multiple entries.
-//
-// If no entries were found in the input then err will be io.EOF. Otherwise a
-// non-nil err value indicates a parse error.
-func ParseKnownHosts(in []byte) (marker string, hosts []string, pubKey 
PublicKey, comment string, rest []byte, err error) {
-       for len(in) > 0 {
-               end := bytes.IndexByte(in, '\n')
-               if end != -1 {
-                       rest = in[end+1:]
-                       in = in[:end]
-               } else {
-                       rest = nil
-               }
-
-               end = bytes.IndexByte(in, '\r')
-               if end != -1 {
-                       in = in[:end]
-               }
-
-               in = bytes.TrimSpace(in)
-               if len(in) == 0 || in[0] == '#' {
-                       in = rest
-                       continue
-               }
-
-               i := bytes.IndexAny(in, " \t")
-               if i == -1 {
-                       in = rest
-                       continue
-               }
-
-               // Strip out the begining of the known_host key.
-               // This is either an optional marker or a (set of) hostname(s).
-               keyFields := bytes.Fields(in)
-               if len(keyFields) < 3 || len(keyFields) > 5 {
-                       return "", nil, nil, "", nil, errors.New("ssh: invalid 
entry in known_hosts data")
-               }
-
-               // keyFields[0] is either "@cert-authority", "@revoked" or a 
comma separated
-               // list of hosts
-               marker := ""
-               if keyFields[0][0] == '@' {
-                       marker = string(keyFields[0][1:])
-                       keyFields = keyFields[1:]
-               }
-
-               hosts := string(keyFields[0])
-               // keyFields[1] contains the key type (e.g. “ssh-rsa”).
-               // However, that information is duplicated inside the
-               // base64-encoded key and so is ignored here.
-
-               key := bytes.Join(keyFields[2:], []byte(" "))
-               if pubKey, comment, err = parseAuthorizedKey(key); err != nil {
-                       return "", nil, nil, "", nil, err
-               }
-
-               return marker, strings.Split(hosts, ","), pubKey, comment, 
rest, nil
-       }
-
-       return "", nil, nil, "", nil, io.EOF
-}
-
-// ParseAuthorizedKeys parses a public key from an authorized_keys
-// file used in OpenSSH according to the sshd(8) manual page.
-func ParseAuthorizedKey(in []byte) (out PublicKey, comment string, options 
[]string, rest []byte, err error) {
-       for len(in) > 0 {
-               end := bytes.IndexByte(in, '\n')
-               if end != -1 {
-                       rest = in[end+1:]
-                       in = in[:end]
-               } else {
-                       rest = nil
-               }
-
-               end = bytes.IndexByte(in, '\r')
-               if end != -1 {
-                       in = in[:end]
-               }
-
-               in = bytes.TrimSpace(in)
-               if len(in) == 0 || in[0] == '#' {
-                       in = rest
-                       continue
-               }
-
-               i := bytes.IndexAny(in, " \t")
-               if i == -1 {
-                       in = rest
-                       continue
-               }
-
-               if out, comment, err = parseAuthorizedKey(in[i:]); err == nil {
-                       return out, comment, options, rest, nil
-               }
-
-               // No key type recognised. Maybe there's an options field at
-               // the beginning.
-               var b byte
-               inQuote := false
-               var candidateOptions []string
-               optionStart := 0
-               for i, b = range in {
-                       isEnd := !inQuote && (b == ' ' || b == '\t')
-                       if (b == ',' && !inQuote) || isEnd {
-                               if i-optionStart > 0 {
-                                       candidateOptions = 
append(candidateOptions, string(in[optionStart:i]))
-                               }
-                               optionStart = i + 1
-                       }
-                       if isEnd {
-                               break
-                       }
-                       if b == '"' && (i == 0 || (i > 0 && in[i-1] != '\\')) {
-                               inQuote = !inQuote
-                       }
-               }
-               for i < len(in) && (in[i] == ' ' || in[i] == '\t') {
-                       i++
-               }
-               if i == len(in) {
-                       // Invalid line: unmatched quote
-                       in = rest
-                       continue
-               }
-
-               in = in[i:]
-               i = bytes.IndexAny(in, " \t")
-               if i == -1 {
-                       in = rest
-                       continue
-               }
-
-               if out, comment, err = parseAuthorizedKey(in[i:]); err == nil {
-                       options = candidateOptions
-                       return out, comment, options, rest, nil
-               }
-
-               in = rest
-               continue
-       }
-
-       return nil, "", nil, nil, errors.New("ssh: no key found")
-}
-
-// ParsePublicKey parses an SSH public key formatted for use in
-// the SSH wire protocol according to RFC 4253, section 6.6.
-func ParsePublicKey(in []byte) (out PublicKey, err error) {
-       algo, in, ok := parseString(in)
-       if !ok {
-               return nil, errShortRead
-       }
-       var rest []byte
-       out, rest, err = parsePubKey(in, string(algo))
-       if len(rest) > 0 {
-               return nil, errors.New("ssh: trailing junk in public key")
-       }
-
-       return out, err
-}
-
-// MarshalAuthorizedKey serializes key for inclusion in an OpenSSH
-// authorized_keys file. The return value ends with newline.
-func MarshalAuthorizedKey(key PublicKey) []byte {
-       b := &bytes.Buffer{}
-       b.WriteString(key.Type())
-       b.WriteByte(' ')
-       e := base64.NewEncoder(base64.StdEncoding, b)
-       e.Write(key.Marshal())
-       e.Close()
-       b.WriteByte('\n')
-       return b.Bytes()
-}
-
-// PublicKey is an abstraction of different types of public keys.
-type PublicKey interface {
-       // Type returns the key's type, e.g. "ssh-rsa".
-       Type() string
-
-       // Marshal returns the serialized key data in SSH wire format,
-       // with the name prefix.
-       Marshal() []byte
-
-       // Verify that sig is a signature on the given data using this
-       // key. This function will hash the data appropriately first.
-       Verify(data []byte, sig *Signature) error
-}
-
-// A Signer can create signatures that verify against a public key.
-type Signer interface {
-       // PublicKey returns an associated PublicKey instance.
-       PublicKey() PublicKey
-
-       // Sign returns raw signature for the given data. This method
-       // will apply the hash specified for the keytype to the data.
-       Sign(rand io.Reader, data []byte) (*Signature, error)
-}
-
-type rsaPublicKey rsa.PublicKey
-
-func (r *rsaPublicKey) Type() string {
-       return "ssh-rsa"
-}
-
-// parseRSA parses an RSA key according to RFC 4253, section 6.6.
-func parseRSA(in []byte) (out PublicKey, rest []byte, err error) {
-       var w struct {
-               E    *big.Int
-               N    *big.Int
-               Rest []byte `ssh:"rest"`
-       }
-       if err := Unmarshal(in, &w); err != nil {
-               return nil, nil, err
-       }
-
-       if w.E.BitLen() > 24 {
-               return nil, nil, errors.New("ssh: exponent too large")
-       }
-       e := w.E.Int64()
-       if e < 3 || e&1 == 0 {
-               return nil, nil, errors.New("ssh: incorrect exponent")
-       }
-
-       var key rsa.PublicKey
-       key.E = int(e)
-       key.N = w.N
-       return (*rsaPublicKey)(&key), w.Rest, nil
-}
-
-func (r *rsaPublicKey) Marshal() []byte {
-       e := new(big.Int).SetInt64(int64(r.E))
-       wirekey := struct {
-               Name string
-               E    *big.Int
-               N    *big.Int
-       }{
-               KeyAlgoRSA,
-               e,
-               r.N,
-       }
-       return Marshal(&wirekey)
-}
-
-func (r *rsaPublicKey) Verify(data []byte, sig *Signature) error {
-       if sig.Format != r.Type() {
-               return fmt.Errorf("ssh: signature type %s for key type %s", 
sig.Format, r.Type())
-       }
-       h := crypto.SHA1.New()
-       h.Write(data)
-       digest := h.Sum(nil)
-       return rsa.VerifyPKCS1v15((*rsa.PublicKey)(r), crypto.SHA1, digest, 
sig.Blob)
-}
-
-type dsaPublicKey dsa.PublicKey
-
-func (r *dsaPublicKey) Type() string {
-       return "ssh-dss"
-}
-
-// parseDSA parses an DSA key according to RFC 4253, section 6.6.
-func parseDSA(in []byte) (out PublicKey, rest []byte, err error) {
-       var w struct {
-               P, Q, G, Y *big.Int
-               Rest       []byte `ssh:"rest"`
-       }
-       if err := Unmarshal(in, &w); err != nil {
-               return nil, nil, err
-       }
-
-       key := &dsaPublicKey{
-               Parameters: dsa.Parameters{
-                       P: w.P,
-                       Q: w.Q,
-                       G: w.G,
-               },
-               Y: w.Y,
-       }
-       return key, w.Rest, nil
-}
-
-func (k *dsaPublicKey) Marshal() []byte {
-       w := struct {
-               Name       string
-               P, Q, G, Y *big.Int
-       }{
-               k.Type(),
-               k.P,
-               k.Q,
-               k.G,
-               k.Y,
-       }
-
-       return Marshal(&w)
-}
-
-func (k *dsaPublicKey) Verify(data []byte, sig *Signature) error {
-       if sig.Format != k.Type() {
-               return fmt.Errorf("ssh: signature type %s for key type %s", 
sig.Format, k.Type())
-       }
-       h := crypto.SHA1.New()
-       h.Write(data)
-       digest := h.Sum(nil)
-
-       // Per RFC 4253, section 6.6,
-       // The value for 'dss_signature_blob' is encoded as a string containing
-       // r, followed by s (which are 160-bit integers, without lengths or
-       // padding, unsigned, and in network byte order).
-       // For DSS purposes, sig.Blob should be exactly 40 bytes in length.
-       if len(sig.Blob) != 40 {
-               return errors.New("ssh: DSA signature parse error")
-       }
-       r := new(big.Int).SetBytes(sig.Blob[:20])
-       s := new(big.Int).SetBytes(sig.Blob[20:])
-       if dsa.Verify((*dsa.PublicKey)(k), digest, r, s) {
-               return nil
-       }
-       return errors.New("ssh: signature did not verify")
-}
-
-type dsaPrivateKey struct {
-       *dsa.PrivateKey
-}
-
-func (k *dsaPrivateKey) PublicKey() PublicKey {
-       return (*dsaPublicKey)(&k.PrivateKey.PublicKey)
-}
-
-func (k *dsaPrivateKey) Sign(rand io.Reader, data []byte) (*Signature, error) {
-       h := crypto.SHA1.New()
-       h.Write(data)
-       digest := h.Sum(nil)
-       r, s, err := dsa.Sign(rand, k.PrivateKey, digest)
-       if err != nil {
-               return nil, err
-       }
-
-       sig := make([]byte, 40)
-       rb := r.Bytes()
-       sb := s.Bytes()
-
-       copy(sig[20-len(rb):20], rb)
-       copy(sig[40-len(sb):], sb)
-
-       return &Signature{
-               Format: k.PublicKey().Type(),
-               Blob:   sig,
-       }, nil
-}
-
-type ecdsaPublicKey ecdsa.PublicKey
-
-func (key *ecdsaPublicKey) Type() string {
-       return "ecdsa-sha2-" + key.nistID()
-}
-
-func (key *ecdsaPublicKey) nistID() string {
-       switch key.Params().BitSize {
-       case 256:
-               return "nistp256"
-       case 384:
-               return "nistp384"
-       case 521:
-               return "nistp521"
-       }
-       panic("ssh: unsupported ecdsa key size")
-}
-
-func supportedEllipticCurve(curve elliptic.Curve) bool {
-       return curve == elliptic.P256() || curve == elliptic.P384() || curve == 
elliptic.P521()
-}
-
-// ecHash returns the hash to match the given elliptic curve, see RFC
-// 5656, section 6.2.1
-func ecHash(curve elliptic.Curve) crypto.Hash {
-       bitSize := curve.Params().BitSize
-       switch {
-       case bitSize <= 256:
-               return crypto.SHA256
-       case bitSize <= 384:
-               return crypto.SHA384
-       }
-       return crypto.SHA512
-}
-
-// parseECDSA parses an ECDSA key according to RFC 5656, section 3.1.
-func parseECDSA(in []byte) (out PublicKey, rest []byte, err error) {
-       var w struct {
-               Curve    string
-               KeyBytes []byte
-               Rest     []byte `ssh:"rest"`
-       }
-
-       if err := Unmarshal(in, &w); err != nil {
-               return nil, nil, err
-       }
-
-       key := new(ecdsa.PublicKey)
-
-       switch w.Curve {
-       case "nistp256":
-               key.Curve = elliptic.P256()
-       case "nistp384":
-               key.Curve = elliptic.P384()
-       case "nistp521":
-               key.Curve = elliptic.P521()
-       default:
-               return nil, nil, errors.New("ssh: unsupported curve")
-       }
-
-       key.X, key.Y = elliptic.Unmarshal(key.Curve, w.KeyBytes)
-       if key.X == nil || key.Y == nil {
-               return nil, nil, errors.New("ssh: invalid curve point")
-       }
-       return (*ecdsaPublicKey)(key), w.Rest, nil
-}
-
-func (key *ecdsaPublicKey) Marshal() []byte {
-       // See RFC 5656, section 3.1.
-       keyBytes := elliptic.Marshal(key.Curve, key.X, key.Y)
-       w := struct {
-               Name string
-               ID   string
-               Key  []byte
-       }{
-               key.Type(),
-               key.nistID(),
-               keyBytes,
-       }
-
-       return Marshal(&w)
-}
-
-func (key *ecdsaPublicKey) Verify(data []byte, sig *Signature) error {
-       if sig.Format != key.Type() {
-               return fmt.Errorf("ssh: signature type %s for key type %s", 
sig.Format, key.Type())
-       }
-
-       h := ecHash(key.Curve).New()
-       h.Write(data)
-       digest := h.Sum(nil)
-
-       // Per RFC 5656, section 3.1.2,
-       // The ecdsa_signature_blob value has the following specific encoding:
-       //    mpint    r
-       //    mpint    s
-       var ecSig struct {
-               R *big.Int
-               S *big.Int
-       }
-
-       if err := Unmarshal(sig.Blob, &ecSig); err != nil {
-               return err
-       }
-
-       if ecdsa.Verify((*ecdsa.PublicKey)(key), digest, ecSig.R, ecSig.S) {
-               return nil
-       }
-       return errors.New("ssh: signature did not verify")
-}
-
-// NewSignerFromKey takes an *rsa.PrivateKey, *dsa.PrivateKey,
-// *ecdsa.PrivateKey or any other crypto.Signer and returns a corresponding
-// Signer instance. ECDSA keys must use P-256, P-384 or P-521.
-func NewSignerFromKey(key interface{}) (Signer, error) {
-       switch key := key.(type) {
-       case crypto.Signer:
-               return NewSignerFromSigner(key)
-       case *dsa.PrivateKey:
-               return &dsaPrivateKey{key}, nil
-       default:
-               return nil, fmt.Errorf("ssh: unsupported key type %T", key)
-       }
-}
-
-type wrappedSigner struct {
-       signer crypto.Signer
-       pubKey PublicKey
-}
-
-// NewSignerFromSigner takes any crypto.Signer implementation and
-// returns a corresponding Signer interface. This can be used, for
-// example, with keys kept in hardware modules.
-func NewSignerFromSigner(signer crypto.Signer) (Signer, error) {
-       pubKey, err := NewPublicKey(signer.Public())
-       if err != nil {
-               return nil, err
-       }
-
-       return &wrappedSigner{signer, pubKey}, nil
-}
-
-func (s *wrappedSigner) PublicKey() PublicKey {
-       return s.pubKey
-}
-
-func (s *wrappedSigner) Sign(rand io.Reader, data []byte) (*Signature, error) {
-       var hashFunc crypto.Hash
-
-       switch key := s.pubKey.(type) {
-       case *rsaPublicKey, *dsaPublicKey:
-               hashFunc = crypto.SHA1
-       case *ecdsaPublicKey:
-               hashFunc = ecHash(key.Curve)
-       default:
-               return nil, fmt.Errorf("ssh: unsupported key type %T", key)
-       }
-
-       h := hashFunc.New()
-       h.Write(data)
-       digest := h.Sum(nil)
-
-       signature, err := s.signer.Sign(rand, digest, hashFunc)
-       if err != nil {
-               return nil, err
-       }
-
-       // crypto.Signer.Sign is expected to return an ASN.1-encoded signature
-       // for ECDSA and DSA, but that's not the encoding expected by SSH, so
-       // re-encode.
-       switch s.pubKey.(type) {
-       case *ecdsaPublicKey, *dsaPublicKey:
-               type asn1Signature struct {
-                       R, S *big.Int
-               }
-               asn1Sig := new(asn1Signature)
-               _, err := asn1.Unmarshal(signature, asn1Sig)
-               if err != nil {
-                       return nil, err
-               }
-
-               switch s.pubKey.(type) {
-               case *ecdsaPublicKey:
-                       signature = Marshal(asn1Sig)
-
-               case *dsaPublicKey:
-                       signature = make([]byte, 40)
-                       r := asn1Sig.R.Bytes()
-                       s := asn1Sig.S.Bytes()
-                       copy(signature[20-len(r):20], r)
-                       copy(signature[40-len(s):40], s)
-               }
-       }
-
-       return &Signature{
-               Format: s.pubKey.Type(),
-               Blob:   signature,
-       }, nil
-}
-
-// NewPublicKey takes an *rsa.PublicKey, *dsa.PublicKey, *ecdsa.PublicKey or
-// any other crypto.Signer and returns a corresponding Signer instance. ECDSA
-// keys must use P-256, P-384 or P-521.
-func NewPublicKey(key interface{}) (PublicKey, error) {
-       switch key := key.(type) {
-       case *rsa.PublicKey:
-               return (*rsaPublicKey)(key), nil
-       case *ecdsa.PublicKey:
-               if !supportedEllipticCurve(key.Curve) {
-                       return nil, errors.New("ssh: only P-256, P-384 and 
P-521 EC keys are supported.")
-               }
-               return (*ecdsaPublicKey)(key), nil
-       case *dsa.PublicKey:
-               return (*dsaPublicKey)(key), nil
-       default:
-               return nil, fmt.Errorf("ssh: unsupported key type %T", key)
-       }
-}
-
-// ParsePrivateKey returns a Signer from a PEM encoded private key. It supports
-// the same keys as ParseRawPrivateKey.
-func ParsePrivateKey(pemBytes []byte) (Signer, error) {
-       key, err := ParseRawPrivateKey(pemBytes)
-       if err != nil {
-               return nil, err
-       }
-
-       return NewSignerFromKey(key)
-}
-
-// ParseRawPrivateKey returns a private key from a PEM encoded private key. It
-// supports RSA (PKCS#1), DSA (OpenSSL), and ECDSA private keys.
-func ParseRawPrivateKey(pemBytes []byte) (interface{}, error) {
-       block, _ := pem.Decode(pemBytes)
-       if block == nil {
-               return nil, errors.New("ssh: no key found")
-       }
-
-       switch block.Type {
-       case "RSA PRIVATE KEY":
-               return x509.ParsePKCS1PrivateKey(block.Bytes)
-       case "EC PRIVATE KEY":
-               return x509.ParseECPrivateKey(block.Bytes)
-       case "DSA PRIVATE KEY":
-               return ParseDSAPrivateKey(block.Bytes)
-       default:
-               return nil, fmt.Errorf("ssh: unsupported key type %q", 
block.Type)
-       }
-}
-
-// ParseDSAPrivateKey returns a DSA private key from its ASN.1 DER encoding, as
-// specified by the OpenSSL DSA man page.
-func ParseDSAPrivateKey(der []byte) (*dsa.PrivateKey, error) {
-       var k struct {
-               Version int
-               P       *big.Int
-               Q       *big.Int
-               G       *big.Int
-               Priv    *big.Int
-               Pub     *big.Int
-       }
-       rest, err := asn1.Unmarshal(der, &k)
-       if err != nil {
-               return nil, errors.New("ssh: failed to parse DSA key: " + 
err.Error())
-       }
-       if len(rest) > 0 {
-               return nil, errors.New("ssh: garbage after DSA key")
-       }
-
-       return &dsa.PrivateKey{
-               PublicKey: dsa.PublicKey{
-                       Parameters: dsa.Parameters{
-                               P: k.P,
-                               Q: k.Q,
-                               G: k.G,
-                       },
-                       Y: k.Priv,
-               },
-               X: k.Pub,
-       }, nil
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/keys_test.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/keys_test.go 
b/cli/vendor/golang.org/x/crypto/ssh/keys_test.go
deleted file mode 100644
index 2756947..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/keys_test.go
+++ /dev/null
@@ -1,437 +0,0 @@
-// Copyright 2014 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 ssh
-
-import (
-       "bytes"
-       "crypto/dsa"
-       "crypto/ecdsa"
-       "crypto/elliptic"
-       "crypto/rand"
-       "crypto/rsa"
-       "encoding/base64"
-       "fmt"
-       "reflect"
-       "strings"
-       "testing"
-
-       "golang.org/x/crypto/ssh/testdata"
-)
-
-func rawKey(pub PublicKey) interface{} {
-       switch k := pub.(type) {
-       case *rsaPublicKey:
-               return (*rsa.PublicKey)(k)
-       case *dsaPublicKey:
-               return (*dsa.PublicKey)(k)
-       case *ecdsaPublicKey:
-               return (*ecdsa.PublicKey)(k)
-       case *Certificate:
-               return k
-       }
-       panic("unknown key type")
-}
-
-func TestKeyMarshalParse(t *testing.T) {
-       for _, priv := range testSigners {
-               pub := priv.PublicKey()
-               roundtrip, err := ParsePublicKey(pub.Marshal())
-               if err != nil {
-                       t.Errorf("ParsePublicKey(%T): %v", pub, err)
-               }
-
-               k1 := rawKey(pub)
-               k2 := rawKey(roundtrip)
-
-               if !reflect.DeepEqual(k1, k2) {
-                       t.Errorf("got %#v in roundtrip, want %#v", k2, k1)
-               }
-       }
-}
-
-func TestUnsupportedCurves(t *testing.T) {
-       raw, err := ecdsa.GenerateKey(elliptic.P224(), rand.Reader)
-       if err != nil {
-               t.Fatalf("GenerateKey: %v", err)
-       }
-
-       if _, err = NewSignerFromKey(raw); err == nil || 
!strings.Contains(err.Error(), "only P-256") {
-               t.Fatalf("NewPrivateKey should not succeed with P-224, got: 
%v", err)
-       }
-
-       if _, err = NewPublicKey(&raw.PublicKey); err == nil || 
!strings.Contains(err.Error(), "only P-256") {
-               t.Fatalf("NewPublicKey should not succeed with P-224, got: %v", 
err)
-       }
-}
-
-func TestNewPublicKey(t *testing.T) {
-       for _, k := range testSigners {
-               raw := rawKey(k.PublicKey())
-               // Skip certificates, as NewPublicKey does not support them.
-               if _, ok := raw.(*Certificate); ok {
-                       continue
-               }
-               pub, err := NewPublicKey(raw)
-               if err != nil {
-                       t.Errorf("NewPublicKey(%#v): %v", raw, err)
-               }
-               if !reflect.DeepEqual(k.PublicKey(), pub) {
-                       t.Errorf("NewPublicKey(%#v) = %#v, want %#v", raw, pub, 
k.PublicKey())
-               }
-       }
-}
-
-func TestKeySignVerify(t *testing.T) {
-       for _, priv := range testSigners {
-               pub := priv.PublicKey()
-
-               data := []byte("sign me")
-               sig, err := priv.Sign(rand.Reader, data)
-               if err != nil {
-                       t.Fatalf("Sign(%T): %v", priv, err)
-               }
-
-               if err := pub.Verify(data, sig); err != nil {
-                       t.Errorf("publicKey.Verify(%T): %v", priv, err)
-               }
-               sig.Blob[5]++
-               if err := pub.Verify(data, sig); err == nil {
-                       t.Errorf("publicKey.Verify on broken sig did not fail")
-               }
-       }
-}
-
-func TestParseRSAPrivateKey(t *testing.T) {
-       key := testPrivateKeys["rsa"]
-
-       rsa, ok := key.(*rsa.PrivateKey)
-       if !ok {
-               t.Fatalf("got %T, want *rsa.PrivateKey", rsa)
-       }
-
-       if err := rsa.Validate(); err != nil {
-               t.Errorf("Validate: %v", err)
-       }
-}
-
-func TestParseECPrivateKey(t *testing.T) {
-       key := testPrivateKeys["ecdsa"]
-
-       ecKey, ok := key.(*ecdsa.PrivateKey)
-       if !ok {
-               t.Fatalf("got %T, want *ecdsa.PrivateKey", ecKey)
-       }
-
-       if !validateECPublicKey(ecKey.Curve, ecKey.X, ecKey.Y) {
-               t.Fatalf("public key does not validate.")
-       }
-}
-
-func TestParseDSA(t *testing.T) {
-       // We actually exercise the ParsePrivateKey codepath here, as opposed to
-       // using the ParseRawPrivateKey+NewSignerFromKey path that 
testdata_test.go
-       // uses.
-       s, err := ParsePrivateKey(testdata.PEMBytes["dsa"])
-       if err != nil {
-               t.Fatalf("ParsePrivateKey returned error: %s", err)
-       }
-
-       data := []byte("sign me")
-       sig, err := s.Sign(rand.Reader, data)
-       if err != nil {
-               t.Fatalf("dsa.Sign: %v", err)
-       }
-
-       if err := s.PublicKey().Verify(data, sig); err != nil {
-               t.Errorf("Verify failed: %v", err)
-       }
-}
-
-// Tests for authorized_keys parsing.
-
-// getTestKey returns a public key, and its base64 encoding.
-func getTestKey() (PublicKey, string) {
-       k := testPublicKeys["rsa"]
-
-       b := &bytes.Buffer{}
-       e := base64.NewEncoder(base64.StdEncoding, b)
-       e.Write(k.Marshal())
-       e.Close()
-
-       return k, b.String()
-}
-
-func TestMarshalParsePublicKey(t *testing.T) {
-       pub, pubSerialized := getTestKey()
-       line := fmt.Sprintf("%s %s user@host", pub.Type(), pubSerialized)
-
-       authKeys := MarshalAuthorizedKey(pub)
-       actualFields := strings.Fields(string(authKeys))
-       if len(actualFields) == 0 {
-               t.Fatalf("failed authKeys: %v", authKeys)
-       }
-
-       // drop the comment
-       expectedFields := strings.Fields(line)[0:2]
-
-       if !reflect.DeepEqual(actualFields, expectedFields) {
-               t.Errorf("got %v, expected %v", actualFields, expectedFields)
-       }
-
-       actPub, _, _, _, err := ParseAuthorizedKey([]byte(line))
-       if err != nil {
-               t.Fatalf("cannot parse %v: %v", line, err)
-       }
-       if !reflect.DeepEqual(actPub, pub) {
-               t.Errorf("got %v, expected %v", actPub, pub)
-       }
-}
-
-type authResult struct {
-       pubKey   PublicKey
-       options  []string
-       comments string
-       rest     string
-       ok       bool
-}
-
-func testAuthorizedKeys(t *testing.T, authKeys []byte, expected []authResult) {
-       rest := authKeys
-       var values []authResult
-       for len(rest) > 0 {
-               var r authResult
-               var err error
-               r.pubKey, r.comments, r.options, rest, err = 
ParseAuthorizedKey(rest)
-               r.ok = (err == nil)
-               t.Log(err)
-               r.rest = string(rest)
-               values = append(values, r)
-       }
-
-       if !reflect.DeepEqual(values, expected) {
-               t.Errorf("got %#v, expected %#v", values, expected)
-       }
-}
-
-func TestAuthorizedKeyBasic(t *testing.T) {
-       pub, pubSerialized := getTestKey()
-       line := "ssh-rsa " + pubSerialized + " user@host"
-       testAuthorizedKeys(t, []byte(line),
-               []authResult{
-                       {pub, nil, "user@host", "", true},
-               })
-}
-
-func TestAuth(t *testing.T) {
-       pub, pubSerialized := getTestKey()
-       authWithOptions := []string{
-               `# comments to ignore before any keys...`,
-               ``,
-               `env="HOME=/home/root",no-port-forwarding ssh-rsa ` + 
pubSerialized + ` user@host`,
-               `# comments to ignore, along with a blank line`,
-               ``,
-               `env="HOME=/home/root2" ssh-rsa ` + pubSerialized + ` 
user2@host2`,
-               ``,
-               `# more comments, plus a invalid entry`,
-               `ssh-rsa data-that-will-not-parse user@host3`,
-       }
-       for _, eol := range []string{"\n", "\r\n"} {
-               authOptions := strings.Join(authWithOptions, eol)
-               rest2 := strings.Join(authWithOptions[3:], eol)
-               rest3 := strings.Join(authWithOptions[6:], eol)
-               testAuthorizedKeys(t, []byte(authOptions), []authResult{
-                       {pub, []string{`env="HOME=/home/root"`, 
"no-port-forwarding"}, "user@host", rest2, true},
-                       {pub, []string{`env="HOME=/home/root2"`}, 
"user2@host2", rest3, true},
-                       {nil, nil, "", "", false},
-               })
-       }
-}
-
-func TestAuthWithQuotedSpaceInEnv(t *testing.T) {
-       pub, pubSerialized := getTestKey()
-       authWithQuotedSpaceInEnv := []byte(`env="HOME=/home/root 
dir",no-port-forwarding ssh-rsa ` + pubSerialized + ` user@host`)
-       testAuthorizedKeys(t, []byte(authWithQuotedSpaceInEnv), []authResult{
-               {pub, []string{`env="HOME=/home/root dir"`, 
"no-port-forwarding"}, "user@host", "", true},
-       })
-}
-
-func TestAuthWithQuotedCommaInEnv(t *testing.T) {
-       pub, pubSerialized := getTestKey()
-       authWithQuotedCommaInEnv := 
[]byte(`env="HOME=/home/root,dir",no-port-forwarding ssh-rsa ` + pubSerialized 
+ `   user@host`)
-       testAuthorizedKeys(t, []byte(authWithQuotedCommaInEnv), []authResult{
-               {pub, []string{`env="HOME=/home/root,dir"`, 
"no-port-forwarding"}, "user@host", "", true},
-       })
-}
-
-func TestAuthWithQuotedQuoteInEnv(t *testing.T) {
-       pub, pubSerialized := getTestKey()
-       authWithQuotedQuoteInEnv := []byte(`env="HOME=/home/\"root 
dir",no-port-forwarding` + "\t" + `ssh-rsa` + "\t" + pubSerialized + `   
user@host`)
-       authWithDoubleQuotedQuote := 
[]byte(`no-port-forwarding,env="HOME=/home/ \"root dir\"" ssh-rsa ` + 
pubSerialized + "\t" + `user@host`)
-       testAuthorizedKeys(t, []byte(authWithQuotedQuoteInEnv), []authResult{
-               {pub, []string{`env="HOME=/home/\"root dir"`, 
"no-port-forwarding"}, "user@host", "", true},
-       })
-
-       testAuthorizedKeys(t, []byte(authWithDoubleQuotedQuote), []authResult{
-               {pub, []string{"no-port-forwarding", `env="HOME=/home/ \"root 
dir\""`}, "user@host", "", true},
-       })
-}
-
-func TestAuthWithInvalidSpace(t *testing.T) {
-       _, pubSerialized := getTestKey()
-       authWithInvalidSpace := []byte(`env="HOME=/home/root dir", 
no-port-forwarding ssh-rsa ` + pubSerialized + ` user@host
-#more to follow but still no valid keys`)
-       testAuthorizedKeys(t, []byte(authWithInvalidSpace), []authResult{
-               {nil, nil, "", "", false},
-       })
-}
-
-func TestAuthWithMissingQuote(t *testing.T) {
-       pub, pubSerialized := getTestKey()
-       authWithMissingQuote := []byte(`env="HOME=/home/root,no-port-forwarding 
ssh-rsa ` + pubSerialized + ` user@host
-env="HOME=/home/root",shared-control ssh-rsa ` + pubSerialized + ` user@host`)
-
-       testAuthorizedKeys(t, []byte(authWithMissingQuote), []authResult{
-               {pub, []string{`env="HOME=/home/root"`, `shared-control`}, 
"user@host", "", true},
-       })
-}
-
-func TestInvalidEntry(t *testing.T) {
-       authInvalid := []byte(`ssh-rsa`)
-       _, _, _, _, err := ParseAuthorizedKey(authInvalid)
-       if err == nil {
-               t.Errorf("got valid entry for %q", authInvalid)
-       }
-}
-
-var knownHostsParseTests = []struct {
-       input     string
-       err       string
-
-       marker   string
-       comment  string
-       hosts    []string
-       rest     string
-} {
-       {
-               "",
-               "EOF",
-
-               "", "", nil, "",
-       },
-       {
-               "# Just a comment",
-               "EOF",
-
-               "", "", nil, "",
-       },
-       {
-               "   \t   ",
-               "EOF",
-
-               "", "", nil, "",
-       },
-       {
-               "localhost ssh-rsa {RSAPUB}",
-               "",
-
-               "", "", []string{"localhost"}, "",
-       },
-       {
-               "localhost\tssh-rsa {RSAPUB}",
-               "",
-
-               "", "", []string{"localhost"}, "",
-       },
-       {
-               "localhost\tssh-rsa {RSAPUB}\tcomment comment",
-               "",
-
-               "", "comment comment", []string{"localhost"}, "",
-       },
-       {
-               "localhost\tssh-rsa {RSAPUB}\tcomment comment\n",
-               "",
-
-               "", "comment comment", []string{"localhost"}, "",
-       },
-       {
-               "localhost\tssh-rsa {RSAPUB}\tcomment comment\r\n",
-               "",
-
-               "", "comment comment", []string{"localhost"}, "",
-       },
-       {
-               "localhost\tssh-rsa {RSAPUB}\tcomment comment\r\nnext line",
-               "",
-
-               "", "comment comment", []string{"localhost"}, "next line",
-       },
-       {
-               "localhost,[host2:123]\tssh-rsa {RSAPUB}\tcomment comment",
-               "",
-
-               "", "comment comment", []string{"localhost","[host2:123]"}, "",
-       },
-       {
-               "@marker \tlocalhost,[host2:123]\tssh-rsa {RSAPUB}",
-               "",
-
-               "marker", "", []string{"localhost","[host2:123]"}, "",
-       },
-       {
-               "@marker \tlocalhost,[host2:123]\tssh-rsa aabbccdd",
-               "short read",
-
-               "", "", nil, "",
-       },
-}
-
-func TestKnownHostsParsing(t *testing.T) {
-       rsaPub, rsaPubSerialized := getTestKey()
-
-       for i, test := range knownHostsParseTests {
-               var expectedKey PublicKey
-               const rsaKeyToken = "{RSAPUB}"
-
-               input := test.input
-               if strings.Contains(input, rsaKeyToken) {
-                       expectedKey = rsaPub
-                       input = strings.Replace(test.input, rsaKeyToken, 
rsaPubSerialized, -1)
-               }
-
-               marker, hosts, pubKey, comment, rest, err := 
ParseKnownHosts([]byte(input))
-               if err != nil {
-                       if len(test.err) == 0 {
-                               t.Errorf("#%d: unexpectedly failed with %q", i, 
err)
-                       } else if !strings.Contains(err.Error(), test.err) {
-                               t.Errorf("#%d: expected error containing %q, 
but got %q", i, test.err, err)
-                       }
-                       continue
-               } else if len(test.err) != 0 {
-                       t.Errorf("#%d: succeeded but expected error including 
%q", i, test.err)
-                       continue
-               }
-
-               if !reflect.DeepEqual(expectedKey, pubKey) {
-                       t.Errorf("#%d: expected key %#v, but got %#v", i, 
expectedKey, pubKey)
-               }
-
-               if marker != test.marker {
-                       t.Errorf("#%d: expected marker %q, but got %q", i, 
test.marker, marker)
-               }
-
-               if comment != test.comment {
-                       t.Errorf("#%d: expected comment %q, but got %q", i, 
test.comment, comment)
-               }
-
-               if !reflect.DeepEqual(test.hosts, hosts) {
-                       t.Errorf("#%d: expected hosts %#v, but got %#v", i, 
test.hosts, hosts)
-               }
-
-               if rest := string(rest); rest != test.rest {
-                       t.Errorf("#%d: expected remaining input to be %q, but 
got %q", i, test.rest, rest)
-               }
-       }
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/mac.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/mac.go 
b/cli/vendor/golang.org/x/crypto/ssh/mac.go
deleted file mode 100644
index 07744ad..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/mac.go
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2012 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 ssh
-
-// Message authentication support
-
-import (
-       "crypto/hmac"
-       "crypto/sha1"
-       "crypto/sha256"
-       "hash"
-)
-
-type macMode struct {
-       keySize int
-       new     func(key []byte) hash.Hash
-}
-
-// truncatingMAC wraps around a hash.Hash and truncates the output digest to
-// a given size.
-type truncatingMAC struct {
-       length int
-       hmac   hash.Hash
-}
-
-func (t truncatingMAC) Write(data []byte) (int, error) {
-       return t.hmac.Write(data)
-}
-
-func (t truncatingMAC) Sum(in []byte) []byte {
-       out := t.hmac.Sum(in)
-       return out[:len(in)+t.length]
-}
-
-func (t truncatingMAC) Reset() {
-       t.hmac.Reset()
-}
-
-func (t truncatingMAC) Size() int {
-       return t.length
-}
-
-func (t truncatingMAC) BlockSize() int { return t.hmac.BlockSize() }
-
-var macModes = map[string]*macMode{
-       "hmac-sha2-256": {32, func(key []byte) hash.Hash {
-               return hmac.New(sha256.New, key)
-       }},
-       "hmac-sha1": {20, func(key []byte) hash.Hash {
-               return hmac.New(sha1.New, key)
-       }},
-       "hmac-sha1-96": {20, func(key []byte) hash.Hash {
-               return truncatingMAC{12, hmac.New(sha1.New, key)}
-       }},
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/mempipe_test.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/mempipe_test.go 
b/cli/vendor/golang.org/x/crypto/ssh/mempipe_test.go
deleted file mode 100644
index 8697cd6..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/mempipe_test.go
+++ /dev/null
@@ -1,110 +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 ssh
-
-import (
-       "io"
-       "sync"
-       "testing"
-)
-
-// An in-memory packetConn. It is safe to call Close and writePacket
-// from different goroutines.
-type memTransport struct {
-       eof     bool
-       pending [][]byte
-       write   *memTransport
-       sync.Mutex
-       *sync.Cond
-}
-
-func (t *memTransport) readPacket() ([]byte, error) {
-       t.Lock()
-       defer t.Unlock()
-       for {
-               if len(t.pending) > 0 {
-                       r := t.pending[0]
-                       t.pending = t.pending[1:]
-                       return r, nil
-               }
-               if t.eof {
-                       return nil, io.EOF
-               }
-               t.Cond.Wait()
-       }
-}
-
-func (t *memTransport) closeSelf() error {
-       t.Lock()
-       defer t.Unlock()
-       if t.eof {
-               return io.EOF
-       }
-       t.eof = true
-       t.Cond.Broadcast()
-       return nil
-}
-
-func (t *memTransport) Close() error {
-       err := t.write.closeSelf()
-       t.closeSelf()
-       return err
-}
-
-func (t *memTransport) writePacket(p []byte) error {
-       t.write.Lock()
-       defer t.write.Unlock()
-       if t.write.eof {
-               return io.EOF
-       }
-       c := make([]byte, len(p))
-       copy(c, p)
-       t.write.pending = append(t.write.pending, c)
-       t.write.Cond.Signal()
-       return nil
-}
-
-func memPipe() (a, b packetConn) {
-       t1 := memTransport{}
-       t2 := memTransport{}
-       t1.write = &t2
-       t2.write = &t1
-       t1.Cond = sync.NewCond(&t1.Mutex)
-       t2.Cond = sync.NewCond(&t2.Mutex)
-       return &t1, &t2
-}
-
-func TestMemPipe(t *testing.T) {
-       a, b := memPipe()
-       if err := a.writePacket([]byte{42}); err != nil {
-               t.Fatalf("writePacket: %v", err)
-       }
-       if err := a.Close(); err != nil {
-               t.Fatal("Close: ", err)
-       }
-       p, err := b.readPacket()
-       if err != nil {
-               t.Fatal("readPacket: ", err)
-       }
-       if len(p) != 1 || p[0] != 42 {
-               t.Fatalf("got %v, want {42}", p)
-       }
-       p, err = b.readPacket()
-       if err != io.EOF {
-               t.Fatalf("got %v, %v, want EOF", p, err)
-       }
-}
-
-func TestDoubleClose(t *testing.T) {
-       a, _ := memPipe()
-       err := a.Close()
-       if err != nil {
-               t.Errorf("Close: %v", err)
-       }
-       err = a.Close()
-       if err != io.EOF {
-               t.Errorf("expect EOF on double close.")
-       }
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/messages.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/messages.go 
b/cli/vendor/golang.org/x/crypto/ssh/messages.go
deleted file mode 100644
index eaf6106..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/messages.go
+++ /dev/null
@@ -1,725 +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 ssh
-
-import (
-       "bytes"
-       "encoding/binary"
-       "errors"
-       "fmt"
-       "io"
-       "math/big"
-       "reflect"
-       "strconv"
-)
-
-// These are SSH message type numbers. They are scattered around several
-// documents but many were taken from [SSH-PARAMETERS].
-const (
-       msgIgnore        = 2
-       msgUnimplemented = 3
-       msgDebug         = 4
-       msgNewKeys       = 21
-
-       // Standard authentication messages
-       msgUserAuthSuccess = 52
-       msgUserAuthBanner  = 53
-)
-
-// SSH messages:
-//
-// These structures mirror the wire format of the corresponding SSH messages.
-// They are marshaled using reflection with the marshal and unmarshal functions
-// in this file. The only wrinkle is that a final member of type []byte with a
-// ssh tag of "rest" receives the remainder of a packet when unmarshaling.
-
-// See RFC 4253, section 11.1.
-const msgDisconnect = 1
-
-// disconnectMsg is the message that signals a disconnect. It is also
-// the error type returned from mux.Wait()
-type disconnectMsg struct {
-       Reason   uint32 `sshtype:"1"`
-       Message  string
-       Language string
-}
-
-func (d *disconnectMsg) Error() string {
-       return fmt.Sprintf("ssh: disconnect reason %d: %s", d.Reason, d.Message)
-}
-
-// See RFC 4253, section 7.1.
-const msgKexInit = 20
-
-type kexInitMsg struct {
-       Cookie                  [16]byte `sshtype:"20"`
-       KexAlgos                []string
-       ServerHostKeyAlgos      []string
-       CiphersClientServer     []string
-       CiphersServerClient     []string
-       MACsClientServer        []string
-       MACsServerClient        []string
-       CompressionClientServer []string
-       CompressionServerClient []string
-       LanguagesClientServer   []string
-       LanguagesServerClient   []string
-       FirstKexFollows         bool
-       Reserved                uint32
-}
-
-// See RFC 4253, section 8.
-
-// Diffie-Helman
-const msgKexDHInit = 30
-
-type kexDHInitMsg struct {
-       X *big.Int `sshtype:"30"`
-}
-
-const msgKexECDHInit = 30
-
-type kexECDHInitMsg struct {
-       ClientPubKey []byte `sshtype:"30"`
-}
-
-const msgKexECDHReply = 31
-
-type kexECDHReplyMsg struct {
-       HostKey         []byte `sshtype:"31"`
-       EphemeralPubKey []byte
-       Signature       []byte
-}
-
-const msgKexDHReply = 31
-
-type kexDHReplyMsg struct {
-       HostKey   []byte `sshtype:"31"`
-       Y         *big.Int
-       Signature []byte
-}
-
-// See RFC 4253, section 10.
-const msgServiceRequest = 5
-
-type serviceRequestMsg struct {
-       Service string `sshtype:"5"`
-}
-
-// See RFC 4253, section 10.
-const msgServiceAccept = 6
-
-type serviceAcceptMsg struct {
-       Service string `sshtype:"6"`
-}
-
-// See RFC 4252, section 5.
-const msgUserAuthRequest = 50
-
-type userAuthRequestMsg struct {
-       User    string `sshtype:"50"`
-       Service string
-       Method  string
-       Payload []byte `ssh:"rest"`
-}
-
-// See RFC 4252, section 5.1
-const msgUserAuthFailure = 51
-
-type userAuthFailureMsg struct {
-       Methods        []string `sshtype:"51"`
-       PartialSuccess bool
-}
-
-// See RFC 4256, section 3.2
-const msgUserAuthInfoRequest = 60
-const msgUserAuthInfoResponse = 61
-
-type userAuthInfoRequestMsg struct {
-       User               string `sshtype:"60"`
-       Instruction        string
-       DeprecatedLanguage string
-       NumPrompts         uint32
-       Prompts            []byte `ssh:"rest"`
-}
-
-// See RFC 4254, section 5.1.
-const msgChannelOpen = 90
-
-type channelOpenMsg struct {
-       ChanType         string `sshtype:"90"`
-       PeersId          uint32
-       PeersWindow      uint32
-       MaxPacketSize    uint32
-       TypeSpecificData []byte `ssh:"rest"`
-}
-
-const msgChannelExtendedData = 95
-const msgChannelData = 94
-
-// See RFC 4254, section 5.1.
-const msgChannelOpenConfirm = 91
-
-type channelOpenConfirmMsg struct {
-       PeersId          uint32 `sshtype:"91"`
-       MyId             uint32
-       MyWindow         uint32
-       MaxPacketSize    uint32
-       TypeSpecificData []byte `ssh:"rest"`
-}
-
-// See RFC 4254, section 5.1.
-const msgChannelOpenFailure = 92
-
-type channelOpenFailureMsg struct {
-       PeersId  uint32 `sshtype:"92"`
-       Reason   RejectionReason
-       Message  string
-       Language string
-}
-
-const msgChannelRequest = 98
-
-type channelRequestMsg struct {
-       PeersId             uint32 `sshtype:"98"`
-       Request             string
-       WantReply           bool
-       RequestSpecificData []byte `ssh:"rest"`
-}
-
-// See RFC 4254, section 5.4.
-const msgChannelSuccess = 99
-
-type channelRequestSuccessMsg struct {
-       PeersId uint32 `sshtype:"99"`
-}
-
-// See RFC 4254, section 5.4.
-const msgChannelFailure = 100
-
-type channelRequestFailureMsg struct {
-       PeersId uint32 `sshtype:"100"`
-}
-
-// See RFC 4254, section 5.3
-const msgChannelClose = 97
-
-type channelCloseMsg struct {
-       PeersId uint32 `sshtype:"97"`
-}
-
-// See RFC 4254, section 5.3
-const msgChannelEOF = 96
-
-type channelEOFMsg struct {
-       PeersId uint32 `sshtype:"96"`
-}
-
-// See RFC 4254, section 4
-const msgGlobalRequest = 80
-
-type globalRequestMsg struct {
-       Type      string `sshtype:"80"`
-       WantReply bool
-       Data      []byte `ssh:"rest"`
-}
-
-// See RFC 4254, section 4
-const msgRequestSuccess = 81
-
-type globalRequestSuccessMsg struct {
-       Data []byte `ssh:"rest" sshtype:"81"`
-}
-
-// See RFC 4254, section 4
-const msgRequestFailure = 82
-
-type globalRequestFailureMsg struct {
-       Data []byte `ssh:"rest" sshtype:"82"`
-}
-
-// See RFC 4254, section 5.2
-const msgChannelWindowAdjust = 93
-
-type windowAdjustMsg struct {
-       PeersId         uint32 `sshtype:"93"`
-       AdditionalBytes uint32
-}
-
-// See RFC 4252, section 7
-const msgUserAuthPubKeyOk = 60
-
-type userAuthPubKeyOkMsg struct {
-       Algo   string `sshtype:"60"`
-       PubKey []byte
-}
-
-// typeTag returns the type byte for the given type. The type should
-// be struct.
-func typeTag(structType reflect.Type) byte {
-       var tag byte
-       var tagStr string
-       tagStr = structType.Field(0).Tag.Get("sshtype")
-       i, err := strconv.Atoi(tagStr)
-       if err == nil {
-               tag = byte(i)
-       }
-       return tag
-}
-
-func fieldError(t reflect.Type, field int, problem string) error {
-       if problem != "" {
-               problem = ": " + problem
-       }
-       return fmt.Errorf("ssh: unmarshal error for field %s of type %s%s", 
t.Field(field).Name, t.Name(), problem)
-}
-
-var errShortRead = errors.New("ssh: short read")
-
-// Unmarshal parses data in SSH wire format into a structure. The out
-// argument should be a pointer to struct. If the first member of the
-// struct has the "sshtype" tag set to a number in decimal, the packet
-// must start that number.  In case of error, Unmarshal returns a
-// ParseError or UnexpectedMessageError.
-func Unmarshal(data []byte, out interface{}) error {
-       v := reflect.ValueOf(out).Elem()
-       structType := v.Type()
-       expectedType := typeTag(structType)
-       if len(data) == 0 {
-               return parseError(expectedType)
-       }
-       if expectedType > 0 {
-               if data[0] != expectedType {
-                       return unexpectedMessageError(expectedType, data[0])
-               }
-               data = data[1:]
-       }
-
-       var ok bool
-       for i := 0; i < v.NumField(); i++ {
-               field := v.Field(i)
-               t := field.Type()
-               switch t.Kind() {
-               case reflect.Bool:
-                       if len(data) < 1 {
-                               return errShortRead
-                       }
-                       field.SetBool(data[0] != 0)
-                       data = data[1:]
-               case reflect.Array:
-                       if t.Elem().Kind() != reflect.Uint8 {
-                               return fieldError(structType, i, "array of 
unsupported type")
-                       }
-                       if len(data) < t.Len() {
-                               return errShortRead
-                       }
-                       for j, n := 0, t.Len(); j < n; j++ {
-                               field.Index(j).Set(reflect.ValueOf(data[j]))
-                       }
-                       data = data[t.Len():]
-               case reflect.Uint64:
-                       var u64 uint64
-                       if u64, data, ok = parseUint64(data); !ok {
-                               return errShortRead
-                       }
-                       field.SetUint(u64)
-               case reflect.Uint32:
-                       var u32 uint32
-                       if u32, data, ok = parseUint32(data); !ok {
-                               return errShortRead
-                       }
-                       field.SetUint(uint64(u32))
-               case reflect.Uint8:
-                       if len(data) < 1 {
-                               return errShortRead
-                       }
-                       field.SetUint(uint64(data[0]))
-                       data = data[1:]
-               case reflect.String:
-                       var s []byte
-                       if s, data, ok = parseString(data); !ok {
-                               return fieldError(structType, i, "")
-                       }
-                       field.SetString(string(s))
-               case reflect.Slice:
-                       switch t.Elem().Kind() {
-                       case reflect.Uint8:
-                               if structType.Field(i).Tag.Get("ssh") == "rest" 
{
-                                       field.Set(reflect.ValueOf(data))
-                                       data = nil
-                               } else {
-                                       var s []byte
-                                       if s, data, ok = parseString(data); !ok 
{
-                                               return errShortRead
-                                       }
-                                       field.Set(reflect.ValueOf(s))
-                               }
-                       case reflect.String:
-                               var nl []string
-                               if nl, data, ok = parseNameList(data); !ok {
-                                       return errShortRead
-                               }
-                               field.Set(reflect.ValueOf(nl))
-                       default:
-                               return fieldError(structType, i, "slice of 
unsupported type")
-                       }
-               case reflect.Ptr:
-                       if t == bigIntType {
-                               var n *big.Int
-                               if n, data, ok = parseInt(data); !ok {
-                                       return errShortRead
-                               }
-                               field.Set(reflect.ValueOf(n))
-                       } else {
-                               return fieldError(structType, i, "pointer to 
unsupported type")
-                       }
-               default:
-                       return fieldError(structType, i, "unsupported type")
-               }
-       }
-
-       if len(data) != 0 {
-               return parseError(expectedType)
-       }
-
-       return nil
-}
-
-// Marshal serializes the message in msg to SSH wire format.  The msg
-// argument should be a struct or pointer to struct. If the first
-// member has the "sshtype" tag set to a number in decimal, that
-// number is prepended to the result. If the last of member has the
-// "ssh" tag set to "rest", its contents are appended to the output.
-func Marshal(msg interface{}) []byte {
-       out := make([]byte, 0, 64)
-       return marshalStruct(out, msg)
-}
-
-func marshalStruct(out []byte, msg interface{}) []byte {
-       v := reflect.Indirect(reflect.ValueOf(msg))
-       msgType := typeTag(v.Type())
-       if msgType > 0 {
-               out = append(out, msgType)
-       }
-
-       for i, n := 0, v.NumField(); i < n; i++ {
-               field := v.Field(i)
-               switch t := field.Type(); t.Kind() {
-               case reflect.Bool:
-                       var v uint8
-                       if field.Bool() {
-                               v = 1
-                       }
-                       out = append(out, v)
-               case reflect.Array:
-                       if t.Elem().Kind() != reflect.Uint8 {
-                               panic(fmt.Sprintf("array of non-uint8 in field 
%d: %T", i, field.Interface()))
-                       }
-                       for j, l := 0, t.Len(); j < l; j++ {
-                               out = append(out, uint8(field.Index(j).Uint()))
-                       }
-               case reflect.Uint32:
-                       out = appendU32(out, uint32(field.Uint()))
-               case reflect.Uint64:
-                       out = appendU64(out, uint64(field.Uint()))
-               case reflect.Uint8:
-                       out = append(out, uint8(field.Uint()))
-               case reflect.String:
-                       s := field.String()
-                       out = appendInt(out, len(s))
-                       out = append(out, s...)
-               case reflect.Slice:
-                       switch t.Elem().Kind() {
-                       case reflect.Uint8:
-                               if v.Type().Field(i).Tag.Get("ssh") != "rest" {
-                                       out = appendInt(out, field.Len())
-                               }
-                               out = append(out, field.Bytes()...)
-                       case reflect.String:
-                               offset := len(out)
-                               out = appendU32(out, 0)
-                               if n := field.Len(); n > 0 {
-                                       for j := 0; j < n; j++ {
-                                               f := field.Index(j)
-                                               if j != 0 {
-                                                       out = append(out, ',')
-                                               }
-                                               out = append(out, f.String()...)
-                                       }
-                                       // overwrite length value
-                                       
binary.BigEndian.PutUint32(out[offset:], uint32(len(out)-offset-4))
-                               }
-                       default:
-                               panic(fmt.Sprintf("slice of unknown type in 
field %d: %T", i, field.Interface()))
-                       }
-               case reflect.Ptr:
-                       if t == bigIntType {
-                               var n *big.Int
-                               nValue := reflect.ValueOf(&n)
-                               nValue.Elem().Set(field)
-                               needed := intLength(n)
-                               oldLength := len(out)
-
-                               if cap(out)-len(out) < needed {
-                                       newOut := make([]byte, len(out), 
2*(len(out)+needed))
-                                       copy(newOut, out)
-                                       out = newOut
-                               }
-                               out = out[:oldLength+needed]
-                               marshalInt(out[oldLength:], n)
-                       } else {
-                               panic(fmt.Sprintf("pointer to unknown type in 
field %d: %T", i, field.Interface()))
-                       }
-               }
-       }
-
-       return out
-}
-
-var bigOne = big.NewInt(1)
-
-func parseString(in []byte) (out, rest []byte, ok bool) {
-       if len(in) < 4 {
-               return
-       }
-       length := binary.BigEndian.Uint32(in)
-       in = in[4:]
-       if uint32(len(in)) < length {
-               return
-       }
-       out = in[:length]
-       rest = in[length:]
-       ok = true
-       return
-}
-
-var (
-       comma         = []byte{','}
-       emptyNameList = []string{}
-)
-
-func parseNameList(in []byte) (out []string, rest []byte, ok bool) {
-       contents, rest, ok := parseString(in)
-       if !ok {
-               return
-       }
-       if len(contents) == 0 {
-               out = emptyNameList
-               return
-       }
-       parts := bytes.Split(contents, comma)
-       out = make([]string, len(parts))
-       for i, part := range parts {
-               out[i] = string(part)
-       }
-       return
-}
-
-func parseInt(in []byte) (out *big.Int, rest []byte, ok bool) {
-       contents, rest, ok := parseString(in)
-       if !ok {
-               return
-       }
-       out = new(big.Int)
-
-       if len(contents) > 0 && contents[0]&0x80 == 0x80 {
-               // This is a negative number
-               notBytes := make([]byte, len(contents))
-               for i := range notBytes {
-                       notBytes[i] = ^contents[i]
-               }
-               out.SetBytes(notBytes)
-               out.Add(out, bigOne)
-               out.Neg(out)
-       } else {
-               // Positive number
-               out.SetBytes(contents)
-       }
-       ok = true
-       return
-}
-
-func parseUint32(in []byte) (uint32, []byte, bool) {
-       if len(in) < 4 {
-               return 0, nil, false
-       }
-       return binary.BigEndian.Uint32(in), in[4:], true
-}
-
-func parseUint64(in []byte) (uint64, []byte, bool) {
-       if len(in) < 8 {
-               return 0, nil, false
-       }
-       return binary.BigEndian.Uint64(in), in[8:], true
-}
-
-func intLength(n *big.Int) int {
-       length := 4 /* length bytes */
-       if n.Sign() < 0 {
-               nMinus1 := new(big.Int).Neg(n)
-               nMinus1.Sub(nMinus1, bigOne)
-               bitLen := nMinus1.BitLen()
-               if bitLen%8 == 0 {
-                       // The number will need 0xff padding
-                       length++
-               }
-               length += (bitLen + 7) / 8
-       } else if n.Sign() == 0 {
-               // A zero is the zero length string
-       } else {
-               bitLen := n.BitLen()
-               if bitLen%8 == 0 {
-                       // The number will need 0x00 padding
-                       length++
-               }
-               length += (bitLen + 7) / 8
-       }
-
-       return length
-}
-
-func marshalUint32(to []byte, n uint32) []byte {
-       binary.BigEndian.PutUint32(to, n)
-       return to[4:]
-}
-
-func marshalUint64(to []byte, n uint64) []byte {
-       binary.BigEndian.PutUint64(to, n)
-       return to[8:]
-}
-
-func marshalInt(to []byte, n *big.Int) []byte {
-       lengthBytes := to
-       to = to[4:]
-       length := 0
-
-       if n.Sign() < 0 {
-               // A negative number has to be converted to two's-complement
-               // form. So we'll subtract 1 and invert. If the
-               // most-significant-bit isn't set then we'll need to pad the
-               // beginning with 0xff in order to keep the number negative.
-               nMinus1 := new(big.Int).Neg(n)
-               nMinus1.Sub(nMinus1, bigOne)
-               bytes := nMinus1.Bytes()
-               for i := range bytes {
-                       bytes[i] ^= 0xff
-               }
-               if len(bytes) == 0 || bytes[0]&0x80 == 0 {
-                       to[0] = 0xff
-                       to = to[1:]
-                       length++
-               }
-               nBytes := copy(to, bytes)
-               to = to[nBytes:]
-               length += nBytes
-       } else if n.Sign() == 0 {
-               // A zero is the zero length string
-       } else {
-               bytes := n.Bytes()
-               if len(bytes) > 0 && bytes[0]&0x80 != 0 {
-                       // We'll have to pad this with a 0x00 in order to
-                       // stop it looking like a negative number.
-                       to[0] = 0
-                       to = to[1:]
-                       length++
-               }
-               nBytes := copy(to, bytes)
-               to = to[nBytes:]
-               length += nBytes
-       }
-
-       lengthBytes[0] = byte(length >> 24)
-       lengthBytes[1] = byte(length >> 16)
-       lengthBytes[2] = byte(length >> 8)
-       lengthBytes[3] = byte(length)
-       return to
-}
-
-func writeInt(w io.Writer, n *big.Int) {
-       length := intLength(n)
-       buf := make([]byte, length)
-       marshalInt(buf, n)
-       w.Write(buf)
-}
-
-func writeString(w io.Writer, s []byte) {
-       var lengthBytes [4]byte
-       lengthBytes[0] = byte(len(s) >> 24)
-       lengthBytes[1] = byte(len(s) >> 16)
-       lengthBytes[2] = byte(len(s) >> 8)
-       lengthBytes[3] = byte(len(s))
-       w.Write(lengthBytes[:])
-       w.Write(s)
-}
-
-func stringLength(n int) int {
-       return 4 + n
-}
-
-func marshalString(to []byte, s []byte) []byte {
-       to[0] = byte(len(s) >> 24)
-       to[1] = byte(len(s) >> 16)
-       to[2] = byte(len(s) >> 8)
-       to[3] = byte(len(s))
-       to = to[4:]
-       copy(to, s)
-       return to[len(s):]
-}
-
-var bigIntType = reflect.TypeOf((*big.Int)(nil))
-
-// Decode a packet into its corresponding message.
-func decode(packet []byte) (interface{}, error) {
-       var msg interface{}
-       switch packet[0] {
-       case msgDisconnect:
-               msg = new(disconnectMsg)
-       case msgServiceRequest:
-               msg = new(serviceRequestMsg)
-       case msgServiceAccept:
-               msg = new(serviceAcceptMsg)
-       case msgKexInit:
-               msg = new(kexInitMsg)
-       case msgKexDHInit:
-               msg = new(kexDHInitMsg)
-       case msgKexDHReply:
-               msg = new(kexDHReplyMsg)
-       case msgUserAuthRequest:
-               msg = new(userAuthRequestMsg)
-       case msgUserAuthFailure:
-               msg = new(userAuthFailureMsg)
-       case msgUserAuthPubKeyOk:
-               msg = new(userAuthPubKeyOkMsg)
-       case msgGlobalRequest:
-               msg = new(globalRequestMsg)
-       case msgRequestSuccess:
-               msg = new(globalRequestSuccessMsg)
-       case msgRequestFailure:
-               msg = new(globalRequestFailureMsg)
-       case msgChannelOpen:
-               msg = new(channelOpenMsg)
-       case msgChannelOpenConfirm:
-               msg = new(channelOpenConfirmMsg)
-       case msgChannelOpenFailure:
-               msg = new(channelOpenFailureMsg)
-       case msgChannelWindowAdjust:
-               msg = new(windowAdjustMsg)
-       case msgChannelEOF:
-               msg = new(channelEOFMsg)
-       case msgChannelClose:
-               msg = new(channelCloseMsg)
-       case msgChannelRequest:
-               msg = new(channelRequestMsg)
-       case msgChannelSuccess:
-               msg = new(channelRequestSuccessMsg)
-       case msgChannelFailure:
-               msg = new(channelRequestFailureMsg)
-       default:
-               return nil, unexpectedMessageError(0, packet[0])
-       }
-       if err := Unmarshal(packet, msg); err != nil {
-               return nil, err
-       }
-       return msg, nil
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/messages_test.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/messages_test.go 
b/cli/vendor/golang.org/x/crypto/ssh/messages_test.go
deleted file mode 100644
index 955b512..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/messages_test.go
+++ /dev/null
@@ -1,254 +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 ssh
-
-import (
-       "bytes"
-       "math/big"
-       "math/rand"
-       "reflect"
-       "testing"
-       "testing/quick"
-)
-
-var intLengthTests = []struct {
-       val, length int
-}{
-       {0, 4 + 0},
-       {1, 4 + 1},
-       {127, 4 + 1},
-       {128, 4 + 2},
-       {-1, 4 + 1},
-}
-
-func TestIntLength(t *testing.T) {
-       for _, test := range intLengthTests {
-               v := new(big.Int).SetInt64(int64(test.val))
-               length := intLength(v)
-               if length != test.length {
-                       t.Errorf("For %d, got length %d but expected %d", 
test.val, length, test.length)
-               }
-       }
-}
-
-type msgAllTypes struct {
-       Bool    bool `sshtype:"21"`
-       Array   [16]byte
-       Uint64  uint64
-       Uint32  uint32
-       Uint8   uint8
-       String  string
-       Strings []string
-       Bytes   []byte
-       Int     *big.Int
-       Rest    []byte `ssh:"rest"`
-}
-
-func (t *msgAllTypes) Generate(rand *rand.Rand, size int) reflect.Value {
-       m := &msgAllTypes{}
-       m.Bool = rand.Intn(2) == 1
-       randomBytes(m.Array[:], rand)
-       m.Uint64 = uint64(rand.Int63n(1<<63 - 1))
-       m.Uint32 = uint32(rand.Intn((1 << 31) - 1))
-       m.Uint8 = uint8(rand.Intn(1 << 8))
-       m.String = string(m.Array[:])
-       m.Strings = randomNameList(rand)
-       m.Bytes = m.Array[:]
-       m.Int = randomInt(rand)
-       m.Rest = m.Array[:]
-       return reflect.ValueOf(m)
-}
-
-func TestMarshalUnmarshal(t *testing.T) {
-       rand := rand.New(rand.NewSource(0))
-       iface := &msgAllTypes{}
-       ty := reflect.ValueOf(iface).Type()
-
-       n := 100
-       if testing.Short() {
-               n = 5
-       }
-       for j := 0; j < n; j++ {
-               v, ok := quick.Value(ty, rand)
-               if !ok {
-                       t.Errorf("failed to create value")
-                       break
-               }
-
-               m1 := v.Elem().Interface()
-               m2 := iface
-
-               marshaled := Marshal(m1)
-               if err := Unmarshal(marshaled, m2); err != nil {
-                       t.Errorf("Unmarshal %#v: %s", m1, err)
-                       break
-               }
-
-               if !reflect.DeepEqual(v.Interface(), m2) {
-                       t.Errorf("got: %#v\nwant:%#v\n%x", m2, m1, marshaled)
-                       break
-               }
-       }
-}
-
-func TestUnmarshalEmptyPacket(t *testing.T) {
-       var b []byte
-       var m channelRequestSuccessMsg
-       if err := Unmarshal(b, &m); err == nil {
-               t.Fatalf("unmarshal of empty slice succeeded")
-       }
-}
-
-func TestUnmarshalUnexpectedPacket(t *testing.T) {
-       type S struct {
-               I uint32 `sshtype:"43"`
-               S string
-               B bool
-       }
-
-       s := S{11, "hello", true}
-       packet := Marshal(s)
-       packet[0] = 42
-       roundtrip := S{}
-       err := Unmarshal(packet, &roundtrip)
-       if err == nil {
-               t.Fatal("expected error, not nil")
-       }
-}
-
-func TestMarshalPtr(t *testing.T) {
-       s := struct {
-               S string
-       }{"hello"}
-
-       m1 := Marshal(s)
-       m2 := Marshal(&s)
-       if !bytes.Equal(m1, m2) {
-               t.Errorf("got %q, want %q for marshaled pointer", m2, m1)
-       }
-}
-
-func TestBareMarshalUnmarshal(t *testing.T) {
-       type S struct {
-               I uint32
-               S string
-               B bool
-       }
-
-       s := S{42, "hello", true}
-       packet := Marshal(s)
-       roundtrip := S{}
-       Unmarshal(packet, &roundtrip)
-
-       if !reflect.DeepEqual(s, roundtrip) {
-               t.Errorf("got %#v, want %#v", roundtrip, s)
-       }
-}
-
-func TestBareMarshal(t *testing.T) {
-       type S2 struct {
-               I uint32
-       }
-       s := S2{42}
-       packet := Marshal(s)
-       i, rest, ok := parseUint32(packet)
-       if len(rest) > 0 || !ok {
-               t.Errorf("parseInt(%q): parse error", packet)
-       }
-       if i != s.I {
-               t.Errorf("got %d, want %d", i, s.I)
-       }
-}
-
-func TestUnmarshalShortKexInitPacket(t *testing.T) {
-       // This used to panic.
-       // Issue 11348
-       packet := []byte{0x14, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 
0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xff, 0xff, 0xff, 0xff}
-       kim := &kexInitMsg{}
-       if err := Unmarshal(packet, kim); err == nil {
-               t.Error("truncated packet unmarshaled without error")
-       }
-}
-
-func randomBytes(out []byte, rand *rand.Rand) {
-       for i := 0; i < len(out); i++ {
-               out[i] = byte(rand.Int31())
-       }
-}
-
-func randomNameList(rand *rand.Rand) []string {
-       ret := make([]string, rand.Int31()&15)
-       for i := range ret {
-               s := make([]byte, 1+(rand.Int31()&15))
-               for j := range s {
-                       s[j] = 'a' + uint8(rand.Int31()&15)
-               }
-               ret[i] = string(s)
-       }
-       return ret
-}
-
-func randomInt(rand *rand.Rand) *big.Int {
-       return new(big.Int).SetInt64(int64(int32(rand.Uint32())))
-}
-
-func (*kexInitMsg) Generate(rand *rand.Rand, size int) reflect.Value {
-       ki := &kexInitMsg{}
-       randomBytes(ki.Cookie[:], rand)
-       ki.KexAlgos = randomNameList(rand)
-       ki.ServerHostKeyAlgos = randomNameList(rand)
-       ki.CiphersClientServer = randomNameList(rand)
-       ki.CiphersServerClient = randomNameList(rand)
-       ki.MACsClientServer = randomNameList(rand)
-       ki.MACsServerClient = randomNameList(rand)
-       ki.CompressionClientServer = randomNameList(rand)
-       ki.CompressionServerClient = randomNameList(rand)
-       ki.LanguagesClientServer = randomNameList(rand)
-       ki.LanguagesServerClient = randomNameList(rand)
-       if rand.Int31()&1 == 1 {
-               ki.FirstKexFollows = true
-       }
-       return reflect.ValueOf(ki)
-}
-
-func (*kexDHInitMsg) Generate(rand *rand.Rand, size int) reflect.Value {
-       dhi := &kexDHInitMsg{}
-       dhi.X = randomInt(rand)
-       return reflect.ValueOf(dhi)
-}
-
-var (
-       _kexInitMsg   = new(kexInitMsg).Generate(rand.New(rand.NewSource(0)), 
10).Elem().Interface()
-       _kexDHInitMsg = new(kexDHInitMsg).Generate(rand.New(rand.NewSource(0)), 
10).Elem().Interface()
-
-       _kexInit   = Marshal(_kexInitMsg)
-       _kexDHInit = Marshal(_kexDHInitMsg)
-)
-
-func BenchmarkMarshalKexInitMsg(b *testing.B) {
-       for i := 0; i < b.N; i++ {
-               Marshal(_kexInitMsg)
-       }
-}
-
-func BenchmarkUnmarshalKexInitMsg(b *testing.B) {
-       m := new(kexInitMsg)
-       for i := 0; i < b.N; i++ {
-               Unmarshal(_kexInit, m)
-       }
-}
-
-func BenchmarkMarshalKexDHInitMsg(b *testing.B) {
-       for i := 0; i < b.N; i++ {
-               Marshal(_kexDHInitMsg)
-       }
-}
-
-func BenchmarkUnmarshalKexDHInitMsg(b *testing.B) {
-       m := new(kexDHInitMsg)
-       for i := 0; i < b.N; i++ {
-               Unmarshal(_kexDHInit, m)
-       }
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/mux.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/mux.go 
b/cli/vendor/golang.org/x/crypto/ssh/mux.go
deleted file mode 100644
index 321880a..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/mux.go
+++ /dev/null
@@ -1,356 +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 ssh
-
-import (
-       "encoding/binary"
-       "fmt"
-       "io"
-       "log"
-       "sync"
-       "sync/atomic"
-)
-
-// debugMux, if set, causes messages in the connection protocol to be
-// logged.
-const debugMux = false
-
-// chanList is a thread safe channel list.
-type chanList struct {
-       // protects concurrent access to chans
-       sync.Mutex
-
-       // chans are indexed by the local id of the channel, which the
-       // other side should send in the PeersId field.
-       chans []*channel
-
-       // This is a debugging aid: it offsets all IDs by this
-       // amount. This helps distinguish otherwise identical
-       // server/client muxes
-       offset uint32
-}
-
-// Assigns a channel ID to the given channel.
-func (c *chanList) add(ch *channel) uint32 {
-       c.Lock()
-       defer c.Unlock()
-       for i := range c.chans {
-               if c.chans[i] == nil {
-                       c.chans[i] = ch
-                       return uint32(i) + c.offset
-               }
-       }
-       c.chans = append(c.chans, ch)
-       return uint32(len(c.chans)-1) + c.offset
-}
-
-// getChan returns the channel for the given ID.
-func (c *chanList) getChan(id uint32) *channel {
-       id -= c.offset
-
-       c.Lock()
-       defer c.Unlock()
-       if id < uint32(len(c.chans)) {
-               return c.chans[id]
-       }
-       return nil
-}
-
-func (c *chanList) remove(id uint32) {
-       id -= c.offset
-       c.Lock()
-       if id < uint32(len(c.chans)) {
-               c.chans[id] = nil
-       }
-       c.Unlock()
-}
-
-// dropAll forgets all channels it knows, returning them in a slice.
-func (c *chanList) dropAll() []*channel {
-       c.Lock()
-       defer c.Unlock()
-       var r []*channel
-
-       for _, ch := range c.chans {
-               if ch == nil {
-                       continue
-               }
-               r = append(r, ch)
-       }
-       c.chans = nil
-       return r
-}
-
-// mux represents the state for the SSH connection protocol, which
-// multiplexes many channels onto a single packet transport.
-type mux struct {
-       conn     packetConn
-       chanList chanList
-
-       incomingChannels chan NewChannel
-
-       globalSentMu     sync.Mutex
-       globalResponses  chan interface{}
-       incomingRequests chan *Request
-
-       errCond *sync.Cond
-       err     error
-}
-
-// When debugging, each new chanList instantiation has a different
-// offset.
-var globalOff uint32
-
-func (m *mux) Wait() error {
-       m.errCond.L.Lock()
-       defer m.errCond.L.Unlock()
-       for m.err == nil {
-               m.errCond.Wait()
-       }
-       return m.err
-}
-
-// newMux returns a mux that runs over the given connection.
-func newMux(p packetConn) *mux {
-       m := &mux{
-               conn:             p,
-               incomingChannels: make(chan NewChannel, 16),
-               globalResponses:  make(chan interface{}, 1),
-               incomingRequests: make(chan *Request, 16),
-               errCond:          newCond(),
-       }
-       if debugMux {
-               m.chanList.offset = atomic.AddUint32(&globalOff, 1)
-       }
-
-       go m.loop()
-       return m
-}
-
-func (m *mux) sendMessage(msg interface{}) error {
-       p := Marshal(msg)
-       return m.conn.writePacket(p)
-}
-
-func (m *mux) SendRequest(name string, wantReply bool, payload []byte) (bool, 
[]byte, error) {
-       if wantReply {
-               m.globalSentMu.Lock()
-               defer m.globalSentMu.Unlock()
-       }
-
-       if err := m.sendMessage(globalRequestMsg{
-               Type:      name,
-               WantReply: wantReply,
-               Data:      payload,
-       }); err != nil {
-               return false, nil, err
-       }
-
-       if !wantReply {
-               return false, nil, nil
-       }
-
-       msg, ok := <-m.globalResponses
-       if !ok {
-               return false, nil, io.EOF
-       }
-       switch msg := msg.(type) {
-       case *globalRequestFailureMsg:
-               return false, msg.Data, nil
-       case *globalRequestSuccessMsg:
-               return true, msg.Data, nil
-       default:
-               return false, nil, fmt.Errorf("ssh: unexpected response to 
request: %#v", msg)
-       }
-}
-
-// ackRequest must be called after processing a global request that
-// has WantReply set.
-func (m *mux) ackRequest(ok bool, data []byte) error {
-       if ok {
-               return m.sendMessage(globalRequestSuccessMsg{Data: data})
-       }
-       return m.sendMessage(globalRequestFailureMsg{Data: data})
-}
-
-// TODO(hanwen): Disconnect is a transport layer message. We should
-// probably send and receive Disconnect somewhere in the transport
-// code.
-
-// Disconnect sends a disconnect message.
-func (m *mux) Disconnect(reason uint32, message string) error {
-       return m.sendMessage(disconnectMsg{
-               Reason:  reason,
-               Message: message,
-       })
-}
-
-func (m *mux) Close() error {
-       return m.conn.Close()
-}
-
-// loop runs the connection machine. It will process packets until an
-// error is encountered. To synchronize on loop exit, use mux.Wait.
-func (m *mux) loop() {
-       var err error
-       for err == nil {
-               err = m.onePacket()
-       }
-
-       for _, ch := range m.chanList.dropAll() {
-               ch.close()
-       }
-
-       close(m.incomingChannels)
-       close(m.incomingRequests)
-       close(m.globalResponses)
-
-       m.conn.Close()
-
-       m.errCond.L.Lock()
-       m.err = err
-       m.errCond.Broadcast()
-       m.errCond.L.Unlock()
-
-       if debugMux {
-               log.Println("loop exit", err)
-       }
-}
-
-// onePacket reads and processes one packet.
-func (m *mux) onePacket() error {
-       packet, err := m.conn.readPacket()
-       if err != nil {
-               return err
-       }
-
-       if debugMux {
-               if packet[0] == msgChannelData || packet[0] == 
msgChannelExtendedData {
-                       log.Printf("decoding(%d): data packet - %d bytes", 
m.chanList.offset, len(packet))
-               } else {
-                       p, _ := decode(packet)
-                       log.Printf("decoding(%d): %d %#v - %d bytes", 
m.chanList.offset, packet[0], p, len(packet))
-               }
-       }
-
-       switch packet[0] {
-       case msgNewKeys:
-               // Ignore notification of key change.
-               return nil
-       case msgDisconnect:
-               return m.handleDisconnect(packet)
-       case msgChannelOpen:
-               return m.handleChannelOpen(packet)
-       case msgGlobalRequest, msgRequestSuccess, msgRequestFailure:
-               return m.handleGlobalPacket(packet)
-       }
-
-       // assume a channel packet.
-       if len(packet) < 5 {
-               return parseError(packet[0])
-       }
-       id := binary.BigEndian.Uint32(packet[1:])
-       ch := m.chanList.getChan(id)
-       if ch == nil {
-               return fmt.Errorf("ssh: invalid channel %d", id)
-       }
-
-       return ch.handlePacket(packet)
-}
-
-func (m *mux) handleDisconnect(packet []byte) error {
-       var d disconnectMsg
-       if err := Unmarshal(packet, &d); err != nil {
-               return err
-       }
-
-       if debugMux {
-               log.Printf("caught disconnect: %v", d)
-       }
-       return &d
-}
-
-func (m *mux) handleGlobalPacket(packet []byte) error {
-       msg, err := decode(packet)
-       if err != nil {
-               return err
-       }
-
-       switch msg := msg.(type) {
-       case *globalRequestMsg:
-               m.incomingRequests <- &Request{
-                       Type:      msg.Type,
-                       WantReply: msg.WantReply,
-                       Payload:   msg.Data,
-                       mux:       m,
-               }
-       case *globalRequestSuccessMsg, *globalRequestFailureMsg:
-               m.globalResponses <- msg
-       default:
-               panic(fmt.Sprintf("not a global message %#v", msg))
-       }
-
-       return nil
-}
-
-// handleChannelOpen schedules a channel to be Accept()ed.
-func (m *mux) handleChannelOpen(packet []byte) error {
-       var msg channelOpenMsg
-       if err := Unmarshal(packet, &msg); err != nil {
-               return err
-       }
-
-       if msg.MaxPacketSize < minPacketLength || msg.MaxPacketSize > 1<<31 {
-               failMsg := channelOpenFailureMsg{
-                       PeersId:  msg.PeersId,
-                       Reason:   ConnectionFailed,
-                       Message:  "invalid request",
-                       Language: "en_US.UTF-8",
-               }
-               return m.sendMessage(failMsg)
-       }
-
-       c := m.newChannel(msg.ChanType, channelInbound, msg.TypeSpecificData)
-       c.remoteId = msg.PeersId
-       c.maxRemotePayload = msg.MaxPacketSize
-       c.remoteWin.add(msg.PeersWindow)
-       m.incomingChannels <- c
-       return nil
-}
-
-func (m *mux) OpenChannel(chanType string, extra []byte) (Channel, <-chan 
*Request, error) {
-       ch, err := m.openChannel(chanType, extra)
-       if err != nil {
-               return nil, nil, err
-       }
-
-       return ch, ch.incomingRequests, nil
-}
-
-func (m *mux) openChannel(chanType string, extra []byte) (*channel, error) {
-       ch := m.newChannel(chanType, channelOutbound, extra)
-
-       ch.maxIncomingPayload = channelMaxPacket
-
-       open := channelOpenMsg{
-               ChanType:         chanType,
-               PeersWindow:      ch.myWindow,
-               MaxPacketSize:    ch.maxIncomingPayload,
-               TypeSpecificData: extra,
-               PeersId:          ch.localId,
-       }
-       if err := m.sendMessage(open); err != nil {
-               return nil, err
-       }
-
-       switch msg := (<-ch.msg).(type) {
-       case *channelOpenConfirmMsg:
-               return ch, nil
-       case *channelOpenFailureMsg:
-               return nil, &OpenChannelError{msg.Reason, msg.Message}
-       default:
-               return nil, fmt.Errorf("ssh: unexpected packet in response to 
channel open: %T", msg)
-       }
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/mux_test.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/mux_test.go 
b/cli/vendor/golang.org/x/crypto/ssh/mux_test.go
deleted file mode 100644
index 5230389..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/mux_test.go
+++ /dev/null
@@ -1,525 +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 ssh
-
-import (
-       "io"
-       "io/ioutil"
-       "sync"
-       "testing"
-)
-
-func muxPair() (*mux, *mux) {
-       a, b := memPipe()
-
-       s := newMux(a)
-       c := newMux(b)
-
-       return s, c
-}
-
-// Returns both ends of a channel, and the mux for the the 2nd
-// channel.
-func channelPair(t *testing.T) (*channel, *channel, *mux) {
-       c, s := muxPair()
-
-       res := make(chan *channel, 1)
-       go func() {
-               newCh, ok := <-s.incomingChannels
-               if !ok {
-                       t.Fatalf("No incoming channel")
-               }
-               if newCh.ChannelType() != "chan" {
-                       t.Fatalf("got type %q want chan", newCh.ChannelType())
-               }
-               ch, _, err := newCh.Accept()
-               if err != nil {
-                       t.Fatalf("Accept %v", err)
-               }
-               res <- ch.(*channel)
-       }()
-
-       ch, err := c.openChannel("chan", nil)
-       if err != nil {
-               t.Fatalf("OpenChannel: %v", err)
-       }
-
-       return <-res, ch, c
-}
-
-// Test that stderr and stdout can be addressed from different
-// goroutines. This is intended for use with the race detector.
-func TestMuxChannelExtendedThreadSafety(t *testing.T) {
-       writer, reader, mux := channelPair(t)
-       defer writer.Close()
-       defer reader.Close()
-       defer mux.Close()
-
-       var wr, rd sync.WaitGroup
-       magic := "hello world"
-
-       wr.Add(2)
-       go func() {
-               io.WriteString(writer, magic)
-               wr.Done()
-       }()
-       go func() {
-               io.WriteString(writer.Stderr(), magic)
-               wr.Done()
-       }()
-
-       rd.Add(2)
-       go func() {
-               c, err := ioutil.ReadAll(reader)
-               if string(c) != magic {
-                       t.Fatalf("stdout read got %q, want %q (error %s)", c, 
magic, err)
-               }
-               rd.Done()
-       }()
-       go func() {
-               c, err := ioutil.ReadAll(reader.Stderr())
-               if string(c) != magic {
-                       t.Fatalf("stderr read got %q, want %q (error %s)", c, 
magic, err)
-               }
-               rd.Done()
-       }()
-
-       wr.Wait()
-       writer.CloseWrite()
-       rd.Wait()
-}
-
-func TestMuxReadWrite(t *testing.T) {
-       s, c, mux := channelPair(t)
-       defer s.Close()
-       defer c.Close()
-       defer mux.Close()
-
-       magic := "hello world"
-       magicExt := "hello stderr"
-       go func() {
-               _, err := s.Write([]byte(magic))
-               if err != nil {
-                       t.Fatalf("Write: %v", err)
-               }
-               _, err = s.Extended(1).Write([]byte(magicExt))
-               if err != nil {
-                       t.Fatalf("Write: %v", err)
-               }
-               err = s.Close()
-               if err != nil {
-                       t.Fatalf("Close: %v", err)
-               }
-       }()
-
-       var buf [1024]byte
-       n, err := c.Read(buf[:])
-       if err != nil {
-               t.Fatalf("server Read: %v", err)
-       }
-       got := string(buf[:n])
-       if got != magic {
-               t.Fatalf("server: got %q want %q", got, magic)
-       }
-
-       n, err = c.Extended(1).Read(buf[:])
-       if err != nil {
-               t.Fatalf("server Read: %v", err)
-       }
-
-       got = string(buf[:n])
-       if got != magicExt {
-               t.Fatalf("server: got %q want %q", got, magic)
-       }
-}
-
-func TestMuxChannelOverflow(t *testing.T) {
-       reader, writer, mux := channelPair(t)
-       defer reader.Close()
-       defer writer.Close()
-       defer mux.Close()
-
-       wDone := make(chan int, 1)
-       go func() {
-               if _, err := writer.Write(make([]byte, channelWindowSize)); err 
!= nil {
-                       t.Errorf("could not fill window: %v", err)
-               }
-               writer.Write(make([]byte, 1))
-               wDone <- 1
-       }()
-       writer.remoteWin.waitWriterBlocked()
-
-       // Send 1 byte.
-       packet := make([]byte, 1+4+4+1)
-       packet[0] = msgChannelData
-       marshalUint32(packet[1:], writer.remoteId)
-       marshalUint32(packet[5:], uint32(1))
-       packet[9] = 42
-
-       if err := writer.mux.conn.writePacket(packet); err != nil {
-               t.Errorf("could not send packet")
-       }
-       if _, err := reader.SendRequest("hello", true, nil); err == nil {
-               t.Errorf("SendRequest succeeded.")
-       }
-       <-wDone
-}
-
-func TestMuxChannelCloseWriteUnblock(t *testing.T) {
-       reader, writer, mux := channelPair(t)
-       defer reader.Close()
-       defer writer.Close()
-       defer mux.Close()
-
-       wDone := make(chan int, 1)
-       go func() {
-               if _, err := writer.Write(make([]byte, channelWindowSize)); err 
!= nil {
-                       t.Errorf("could not fill window: %v", err)
-               }
-               if _, err := writer.Write(make([]byte, 1)); err != io.EOF {
-                       t.Errorf("got %v, want EOF for unblock write", err)
-               }
-               wDone <- 1
-       }()
-
-       writer.remoteWin.waitWriterBlocked()
-       reader.Close()
-       <-wDone
-}
-
-func TestMuxConnectionCloseWriteUnblock(t *testing.T) {
-       reader, writer, mux := channelPair(t)
-       defer reader.Close()
-       defer writer.Close()
-       defer mux.Close()
-
-       wDone := make(chan int, 1)
-       go func() {
-               if _, err := writer.Write(make([]byte, channelWindowSize)); err 
!= nil {
-                       t.Errorf("could not fill window: %v", err)
-               }
-               if _, err := writer.Write(make([]byte, 1)); err != io.EOF {
-                       t.Errorf("got %v, want EOF for unblock write", err)
-               }
-               wDone <- 1
-       }()
-
-       writer.remoteWin.waitWriterBlocked()
-       mux.Close()
-       <-wDone
-}
-
-func TestMuxReject(t *testing.T) {
-       client, server := muxPair()
-       defer server.Close()
-       defer client.Close()
-
-       go func() {
-               ch, ok := <-server.incomingChannels
-               if !ok {
-                       t.Fatalf("Accept")
-               }
-               if ch.ChannelType() != "ch" || string(ch.ExtraData()) != 
"extra" {
-                       t.Fatalf("unexpected channel: %q, %q", 
ch.ChannelType(), ch.ExtraData())
-               }
-               ch.Reject(RejectionReason(42), "message")
-       }()
-
-       ch, err := client.openChannel("ch", []byte("extra"))
-       if ch != nil {
-               t.Fatal("openChannel not rejected")
-       }
-
-       ocf, ok := err.(*OpenChannelError)
-       if !ok {
-               t.Errorf("got %#v want *OpenChannelError", err)
-       } else if ocf.Reason != 42 || ocf.Message != "message" {
-               t.Errorf("got %#v, want {Reason: 42, Message: %q}", ocf, 
"message")
-       }
-
-       want := "ssh: rejected: unknown reason 42 (message)"
-       if err.Error() != want {
-               t.Errorf("got %q, want %q", err.Error(), want)
-       }
-}
-
-func TestMuxChannelRequest(t *testing.T) {
-       client, server, mux := channelPair(t)
-       defer server.Close()
-       defer client.Close()
-       defer mux.Close()
-
-       var received int
-       var wg sync.WaitGroup
-       wg.Add(1)
-       go func() {
-               for r := range server.incomingRequests {
-                       received++
-                       r.Reply(r.Type == "yes", nil)
-               }
-               wg.Done()
-       }()
-       _, err := client.SendRequest("yes", false, nil)
-       if err != nil {
-               t.Fatalf("SendRequest: %v", err)
-       }
-       ok, err := client.SendRequest("yes", true, nil)
-       if err != nil {
-               t.Fatalf("SendRequest: %v", err)
-       }
-
-       if !ok {
-               t.Errorf("SendRequest(yes): %v", ok)
-
-       }
-
-       ok, err = client.SendRequest("no", true, nil)
-       if err != nil {
-               t.Fatalf("SendRequest: %v", err)
-       }
-       if ok {
-               t.Errorf("SendRequest(no): %v", ok)
-
-       }
-
-       client.Close()
-       wg.Wait()
-
-       if received != 3 {
-               t.Errorf("got %d requests, want %d", received, 3)
-       }
-}
-
-func TestMuxGlobalRequest(t *testing.T) {
-       clientMux, serverMux := muxPair()
-       defer serverMux.Close()
-       defer clientMux.Close()
-
-       var seen bool
-       go func() {
-               for r := range serverMux.incomingRequests {
-                       seen = seen || r.Type == "peek"
-                       if r.WantReply {
-                               err := r.Reply(r.Type == "yes",
-                                       append([]byte(r.Type), r.Payload...))
-                               if err != nil {
-                                       t.Errorf("AckRequest: %v", err)
-                               }
-                       }
-               }
-       }()
-
-       _, _, err := clientMux.SendRequest("peek", false, nil)
-       if err != nil {
-               t.Errorf("SendRequest: %v", err)
-       }
-
-       ok, data, err := clientMux.SendRequest("yes", true, []byte("a"))
-       if !ok || string(data) != "yesa" || err != nil {
-               t.Errorf("SendRequest(\"yes\", true, \"a\"): %v %v %v",
-                       ok, data, err)
-       }
-       if ok, data, err := clientMux.SendRequest("yes", true, []byte("a")); 
!ok || string(data) != "yesa" || err != nil {
-               t.Errorf("SendRequest(\"yes\", true, \"a\"): %v %v %v",
-                       ok, data, err)
-       }
-
-       if ok, data, err := clientMux.SendRequest("no", true, []byte("a")); ok 
|| string(data) != "noa" || err != nil {
-               t.Errorf("SendRequest(\"no\", true, \"a\"): %v %v %v",
-                       ok, data, err)
-       }
-
-       clientMux.Disconnect(0, "")
-       if !seen {
-               t.Errorf("never saw 'peek' request")
-       }
-}
-
-func TestMuxGlobalRequestUnblock(t *testing.T) {
-       clientMux, serverMux := muxPair()
-       defer serverMux.Close()
-       defer clientMux.Close()
-
-       result := make(chan error, 1)
-       go func() {
-               _, _, err := clientMux.SendRequest("hello", true, nil)
-               result <- err
-       }()
-
-       <-serverMux.incomingRequests
-       serverMux.conn.Close()
-       err := <-result
-
-       if err != io.EOF {
-               t.Errorf("want EOF, got %v", io.EOF)
-       }
-}
-
-func TestMuxChannelRequestUnblock(t *testing.T) {
-       a, b, connB := channelPair(t)
-       defer a.Close()
-       defer b.Close()
-       defer connB.Close()
-
-       result := make(chan error, 1)
-       go func() {
-               _, err := a.SendRequest("hello", true, nil)
-               result <- err
-       }()
-
-       <-b.incomingRequests
-       connB.conn.Close()
-       err := <-result
-
-       if err != io.EOF {
-               t.Errorf("want EOF, got %v", err)
-       }
-}
-
-func TestMuxDisconnect(t *testing.T) {
-       a, b := muxPair()
-       defer a.Close()
-       defer b.Close()
-
-       go func() {
-               for r := range b.incomingRequests {
-                       r.Reply(true, nil)
-               }
-       }()
-
-       a.Disconnect(42, "whatever")
-       ok, _, err := a.SendRequest("hello", true, nil)
-       if ok || err == nil {
-               t.Errorf("got reply after disconnecting")
-       }
-       err = b.Wait()
-       if d, ok := err.(*disconnectMsg); !ok || d.Reason != 42 {
-               t.Errorf("got %#v, want disconnectMsg{Reason:42}", err)
-       }
-}
-
-func TestMuxCloseChannel(t *testing.T) {
-       r, w, mux := channelPair(t)
-       defer mux.Close()
-       defer r.Close()
-       defer w.Close()
-
-       result := make(chan error, 1)
-       go func() {
-               var b [1024]byte
-               _, err := r.Read(b[:])
-               result <- err
-       }()
-       if err := w.Close(); err != nil {
-               t.Errorf("w.Close: %v", err)
-       }
-
-       if _, err := w.Write([]byte("hello")); err != io.EOF {
-               t.Errorf("got err %v, want io.EOF after Close", err)
-       }
-
-       if err := <-result; err != io.EOF {
-               t.Errorf("got %v (%T), want io.EOF", err, err)
-       }
-}
-
-func TestMuxCloseWriteChannel(t *testing.T) {
-       r, w, mux := channelPair(t)
-       defer mux.Close()
-
-       result := make(chan error, 1)
-       go func() {
-               var b [1024]byte
-               _, err := r.Read(b[:])
-               result <- err
-       }()
-       if err := w.CloseWrite(); err != nil {
-               t.Errorf("w.CloseWrite: %v", err)
-       }
-
-       if _, err := w.Write([]byte("hello")); err != io.EOF {
-               t.Errorf("got err %v, want io.EOF after CloseWrite", err)
-       }
-
-       if err := <-result; err != io.EOF {
-               t.Errorf("got %v (%T), want io.EOF", err, err)
-       }
-}
-
-func TestMuxInvalidRecord(t *testing.T) {
-       a, b := muxPair()
-       defer a.Close()
-       defer b.Close()
-
-       packet := make([]byte, 1+4+4+1)
-       packet[0] = msgChannelData
-       marshalUint32(packet[1:], 29348723 /* invalid channel id */)
-       marshalUint32(packet[5:], 1)
-       packet[9] = 42
-
-       a.conn.writePacket(packet)
-       go a.SendRequest("hello", false, nil)
-       // 'a' wrote an invalid packet, so 'b' has exited.
-       req, ok := <-b.incomingRequests
-       if ok {
-               t.Errorf("got request %#v after receiving invalid packet", req)
-       }
-}
-
-func TestZeroWindowAdjust(t *testing.T) {
-       a, b, mux := channelPair(t)
-       defer a.Close()
-       defer b.Close()
-       defer mux.Close()
-
-       go func() {
-               io.WriteString(a, "hello")
-               // bogus adjust.
-               a.sendMessage(windowAdjustMsg{})
-               io.WriteString(a, "world")
-               a.Close()
-       }()
-
-       want := "helloworld"
-       c, _ := ioutil.ReadAll(b)
-       if string(c) != want {
-               t.Errorf("got %q want %q", c, want)
-       }
-}
-
-func TestMuxMaxPacketSize(t *testing.T) {
-       a, b, mux := channelPair(t)
-       defer a.Close()
-       defer b.Close()
-       defer mux.Close()
-
-       large := make([]byte, a.maxRemotePayload+1)
-       packet := make([]byte, 1+4+4+1+len(large))
-       packet[0] = msgChannelData
-       marshalUint32(packet[1:], a.remoteId)
-       marshalUint32(packet[5:], uint32(len(large)))
-       packet[9] = 42
-
-       if err := a.mux.conn.writePacket(packet); err != nil {
-               t.Errorf("could not send packet")
-       }
-
-       go a.SendRequest("hello", false, nil)
-
-       _, ok := <-b.incomingRequests
-       if ok {
-               t.Errorf("connection still alive after receiving large packet.")
-       }
-}
-
-// Don't ship code with debug=true.
-func TestDebug(t *testing.T) {
-       if debugMux {
-               t.Error("mux debug switched on")
-       }
-       if debugHandshake {
-               t.Error("handshake debug switched on")
-       }
-}

Reply via email to