http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/buffer_test.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/buffer_test.go 
b/cli/vendor/golang.org/x/crypto/ssh/buffer_test.go
deleted file mode 100644
index d5781cb..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/buffer_test.go
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-       "io"
-       "testing"
-)
-
-var alphabet = []byte("abcdefghijklmnopqrstuvwxyz")
-
-func TestBufferReadwrite(t *testing.T) {
-       b := newBuffer()
-       b.write(alphabet[:10])
-       r, _ := b.Read(make([]byte, 10))
-       if r != 10 {
-               t.Fatalf("Expected written == read == 10, written: 10, read 
%d", r)
-       }
-
-       b = newBuffer()
-       b.write(alphabet[:5])
-       r, _ = b.Read(make([]byte, 10))
-       if r != 5 {
-               t.Fatalf("Expected written == read == 5, written: 5, read %d", 
r)
-       }
-
-       b = newBuffer()
-       b.write(alphabet[:10])
-       r, _ = b.Read(make([]byte, 5))
-       if r != 5 {
-               t.Fatalf("Expected written == 10, read == 5, written: 10, read 
%d", r)
-       }
-
-       b = newBuffer()
-       b.write(alphabet[:5])
-       b.write(alphabet[5:15])
-       r, _ = b.Read(make([]byte, 10))
-       r2, _ := b.Read(make([]byte, 10))
-       if r != 10 || r2 != 5 || 15 != r+r2 {
-               t.Fatal("Expected written == read == 15")
-       }
-}
-
-func TestBufferClose(t *testing.T) {
-       b := newBuffer()
-       b.write(alphabet[:10])
-       b.eof()
-       _, err := b.Read(make([]byte, 5))
-       if err != nil {
-               t.Fatal("expected read of 5 to not return EOF")
-       }
-       b = newBuffer()
-       b.write(alphabet[:10])
-       b.eof()
-       r, err := b.Read(make([]byte, 5))
-       r2, err2 := b.Read(make([]byte, 10))
-       if r != 5 || r2 != 5 || err != nil || err2 != nil {
-               t.Fatal("expected reads of 5 and 5")
-       }
-
-       b = newBuffer()
-       b.write(alphabet[:10])
-       b.eof()
-       r, err = b.Read(make([]byte, 5))
-       r2, err2 = b.Read(make([]byte, 10))
-       r3, err3 := b.Read(make([]byte, 10))
-       if r != 5 || r2 != 5 || r3 != 0 || err != nil || err2 != nil || err3 != 
io.EOF {
-               t.Fatal("expected reads of 5 and 5 and 0, with EOF")
-       }
-
-       b = newBuffer()
-       b.write(make([]byte, 5))
-       b.write(make([]byte, 10))
-       b.eof()
-       r, err = b.Read(make([]byte, 9))
-       r2, err2 = b.Read(make([]byte, 3))
-       r3, err3 = b.Read(make([]byte, 3))
-       r4, err4 := b.Read(make([]byte, 10))
-       if err != nil || err2 != nil || err3 != nil || err4 != io.EOF {
-               t.Fatalf("Expected EOF on forth read only, err=%v, err2=%v, 
err3=%v, err4=%v", err, err2, err3, err4)
-       }
-       if r != 9 || r2 != 3 || r3 != 3 || r4 != 0 {
-               t.Fatal("Expected written == read == 15", r, r2, r3, r4)
-       }
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/certs.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/certs.go 
b/cli/vendor/golang.org/x/crypto/ssh/certs.go
deleted file mode 100644
index 3857700..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/certs.go
+++ /dev/null
@@ -1,501 +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"
-       "errors"
-       "fmt"
-       "io"
-       "net"
-       "sort"
-       "time"
-)
-
-// These constants from [PROTOCOL.certkeys] represent the algorithm names
-// for certificate types supported by this package.
-const (
-       CertAlgoRSAv01      = "ssh-rsa-cert-...@openssh.com"
-       CertAlgoDSAv01      = "ssh-dss-cert-...@openssh.com"
-       CertAlgoECDSA256v01 = "ecdsa-sha2-nistp256-cert-...@openssh.com"
-       CertAlgoECDSA384v01 = "ecdsa-sha2-nistp384-cert-...@openssh.com"
-       CertAlgoECDSA521v01 = "ecdsa-sha2-nistp521-cert-...@openssh.com"
-)
-
-// Certificate types distinguish between host and user
-// certificates. The values can be set in the CertType field of
-// Certificate.
-const (
-       UserCert = 1
-       HostCert = 2
-)
-
-// Signature represents a cryptographic signature.
-type Signature struct {
-       Format string
-       Blob   []byte
-}
-
-// CertTimeInfinity can be used for OpenSSHCertV01.ValidBefore to indicate that
-// a certificate does not expire.
-const CertTimeInfinity = 1<<64 - 1
-
-// An Certificate represents an OpenSSH certificate as defined in
-// [PROTOCOL.certkeys]?rev=1.8.
-type Certificate struct {
-       Nonce           []byte
-       Key             PublicKey
-       Serial          uint64
-       CertType        uint32
-       KeyId           string
-       ValidPrincipals []string
-       ValidAfter      uint64
-       ValidBefore     uint64
-       Permissions
-       Reserved     []byte
-       SignatureKey PublicKey
-       Signature    *Signature
-}
-
-// genericCertData holds the key-independent part of the certificate data.
-// Overall, certificates contain an nonce, public key fields and
-// key-independent fields.
-type genericCertData struct {
-       Serial          uint64
-       CertType        uint32
-       KeyId           string
-       ValidPrincipals []byte
-       ValidAfter      uint64
-       ValidBefore     uint64
-       CriticalOptions []byte
-       Extensions      []byte
-       Reserved        []byte
-       SignatureKey    []byte
-       Signature       []byte
-}
-
-func marshalStringList(namelist []string) []byte {
-       var to []byte
-       for _, name := range namelist {
-               s := struct{ N string }{name}
-               to = append(to, Marshal(&s)...)
-       }
-       return to
-}
-
-type optionsTuple struct {
-       Key   string
-       Value []byte
-}
-
-type optionsTupleValue struct {
-       Value string
-}
-
-// serialize a map of critical options or extensions
-// issue #10569 - per [PROTOCOL.certkeys] and SSH implementation,
-// we need two length prefixes for a non-empty string value
-func marshalTuples(tups map[string]string) []byte {
-       keys := make([]string, 0, len(tups))
-       for key := range tups {
-               keys = append(keys, key)
-       }
-       sort.Strings(keys)
-
-       var ret []byte
-       for _, key := range keys {
-               s := optionsTuple{Key: key}
-               if value := tups[key]; len(value) > 0 {
-                       s.Value = Marshal(&optionsTupleValue{value})
-               }
-               ret = append(ret, Marshal(&s)...)
-       }
-       return ret
-}
-
-// issue #10569 - per [PROTOCOL.certkeys] and SSH implementation,
-// we need two length prefixes for a non-empty option value
-func parseTuples(in []byte) (map[string]string, error) {
-       tups := map[string]string{}
-       var lastKey string
-       var haveLastKey bool
-
-       for len(in) > 0 {
-               var key, val, extra []byte
-               var ok bool
-
-               if key, in, ok = parseString(in); !ok {
-                       return nil, errShortRead
-               }
-               keyStr := string(key)
-               // according to [PROTOCOL.certkeys], the names must be in
-               // lexical order.
-               if haveLastKey && keyStr <= lastKey {
-                       return nil, fmt.Errorf("ssh: certificate options are 
not in lexical order")
-               }
-               lastKey, haveLastKey = keyStr, true
-               // the next field is a data field, which if non-empty has a 
string embedded
-               if val, in, ok = parseString(in); !ok {
-                       return nil, errShortRead
-               }
-               if len(val) > 0 {
-                       val, extra, ok = parseString(val)
-                       if !ok {
-                               return nil, errShortRead
-                       }
-                       if len(extra) > 0 {
-                               return nil, fmt.Errorf("ssh: unexpected 
trailing data after certificate option value")
-                       }
-                       tups[keyStr] = string(val)
-               } else {
-                       tups[keyStr] = ""
-               }
-       }
-       return tups, nil
-}
-
-func parseCert(in []byte, privAlgo string) (*Certificate, error) {
-       nonce, rest, ok := parseString(in)
-       if !ok {
-               return nil, errShortRead
-       }
-
-       key, rest, err := parsePubKey(rest, privAlgo)
-       if err != nil {
-               return nil, err
-       }
-
-       var g genericCertData
-       if err := Unmarshal(rest, &g); err != nil {
-               return nil, err
-       }
-
-       c := &Certificate{
-               Nonce:       nonce,
-               Key:         key,
-               Serial:      g.Serial,
-               CertType:    g.CertType,
-               KeyId:       g.KeyId,
-               ValidAfter:  g.ValidAfter,
-               ValidBefore: g.ValidBefore,
-       }
-
-       for principals := g.ValidPrincipals; len(principals) > 0; {
-               principal, rest, ok := parseString(principals)
-               if !ok {
-                       return nil, errShortRead
-               }
-               c.ValidPrincipals = append(c.ValidPrincipals, string(principal))
-               principals = rest
-       }
-
-       c.CriticalOptions, err = parseTuples(g.CriticalOptions)
-       if err != nil {
-               return nil, err
-       }
-       c.Extensions, err = parseTuples(g.Extensions)
-       if err != nil {
-               return nil, err
-       }
-       c.Reserved = g.Reserved
-       k, err := ParsePublicKey(g.SignatureKey)
-       if err != nil {
-               return nil, err
-       }
-
-       c.SignatureKey = k
-       c.Signature, rest, ok = parseSignatureBody(g.Signature)
-       if !ok || len(rest) > 0 {
-               return nil, errors.New("ssh: signature parse error")
-       }
-
-       return c, nil
-}
-
-type openSSHCertSigner struct {
-       pub    *Certificate
-       signer Signer
-}
-
-// NewCertSigner returns a Signer that signs with the given Certificate, whose
-// private key is held by signer. It returns an error if the public key in cert
-// doesn't match the key used by signer.
-func NewCertSigner(cert *Certificate, signer Signer) (Signer, error) {
-       if bytes.Compare(cert.Key.Marshal(), signer.PublicKey().Marshal()) != 0 
{
-               return nil, errors.New("ssh: signer and cert have different 
public key")
-       }
-
-       return &openSSHCertSigner{cert, signer}, nil
-}
-
-func (s *openSSHCertSigner) Sign(rand io.Reader, data []byte) (*Signature, 
error) {
-       return s.signer.Sign(rand, data)
-}
-
-func (s *openSSHCertSigner) PublicKey() PublicKey {
-       return s.pub
-}
-
-const sourceAddressCriticalOption = "source-address"
-
-// CertChecker does the work of verifying a certificate. Its methods
-// can be plugged into ClientConfig.HostKeyCallback and
-// ServerConfig.PublicKeyCallback. For the CertChecker to work,
-// minimally, the IsAuthority callback should be set.
-type CertChecker struct {
-       // SupportedCriticalOptions lists the CriticalOptions that the
-       // server application layer understands. These are only used
-       // for user certificates.
-       SupportedCriticalOptions []string
-
-       // IsAuthority should return true if the key is recognized as
-       // an authority. This allows for certificates to be signed by other
-       // certificates.
-       IsAuthority func(auth PublicKey) bool
-
-       // Clock is used for verifying time stamps. If nil, time.Now
-       // is used.
-       Clock func() time.Time
-
-       // UserKeyFallback is called when CertChecker.Authenticate encounters a
-       // public key that is not a certificate. It must implement validation
-       // of user keys or else, if nil, all such keys are rejected.
-       UserKeyFallback func(conn ConnMetadata, key PublicKey) (*Permissions, 
error)
-
-       // HostKeyFallback is called when CertChecker.CheckHostKey encounters a
-       // public key that is not a certificate. It must implement host key
-       // validation or else, if nil, all such keys are rejected.
-       HostKeyFallback func(addr string, remote net.Addr, key PublicKey) error
-
-       // IsRevoked is called for each certificate so that revocation checking
-       // can be implemented. It should return true if the given certificate
-       // is revoked and false otherwise. If nil, no certificates are
-       // considered to have been revoked.
-       IsRevoked func(cert *Certificate) bool
-}
-
-// CheckHostKey checks a host key certificate. This method can be
-// plugged into ClientConfig.HostKeyCallback.
-func (c *CertChecker) CheckHostKey(addr string, remote net.Addr, key 
PublicKey) error {
-       cert, ok := key.(*Certificate)
-       if !ok {
-               if c.HostKeyFallback != nil {
-                       return c.HostKeyFallback(addr, remote, key)
-               }
-               return errors.New("ssh: non-certificate host key")
-       }
-       if cert.CertType != HostCert {
-               return fmt.Errorf("ssh: certificate presented as a host key has 
type %d", cert.CertType)
-       }
-
-       return c.CheckCert(addr, cert)
-}
-
-// Authenticate checks a user certificate. Authenticate can be used as
-// a value for ServerConfig.PublicKeyCallback.
-func (c *CertChecker) Authenticate(conn ConnMetadata, pubKey PublicKey) 
(*Permissions, error) {
-       cert, ok := pubKey.(*Certificate)
-       if !ok {
-               if c.UserKeyFallback != nil {
-                       return c.UserKeyFallback(conn, pubKey)
-               }
-               return nil, errors.New("ssh: normal key pairs not accepted")
-       }
-
-       if cert.CertType != UserCert {
-               return nil, fmt.Errorf("ssh: cert has type %d", cert.CertType)
-       }
-
-       if err := c.CheckCert(conn.User(), cert); err != nil {
-               return nil, err
-       }
-
-       return &cert.Permissions, nil
-}
-
-// CheckCert checks CriticalOptions, ValidPrincipals, revocation, timestamp and
-// the signature of the certificate.
-func (c *CertChecker) CheckCert(principal string, cert *Certificate) error {
-       if c.IsRevoked != nil && c.IsRevoked(cert) {
-               return fmt.Errorf("ssh: certicate serial %d revoked", 
cert.Serial)
-       }
-
-       for opt, _ := range cert.CriticalOptions {
-               // sourceAddressCriticalOption will be enforced by
-               // serverAuthenticate
-               if opt == sourceAddressCriticalOption {
-                       continue
-               }
-
-               found := false
-               for _, supp := range c.SupportedCriticalOptions {
-                       if supp == opt {
-                               found = true
-                               break
-                       }
-               }
-               if !found {
-                       return fmt.Errorf("ssh: unsupported critical option %q 
in certificate", opt)
-               }
-       }
-
-       if len(cert.ValidPrincipals) > 0 {
-               // By default, certs are valid for all users/hosts.
-               found := false
-               for _, p := range cert.ValidPrincipals {
-                       if p == principal {
-                               found = true
-                               break
-                       }
-               }
-               if !found {
-                       return fmt.Errorf("ssh: principal %q not in the set of 
valid principals for given certificate: %q", principal, cert.ValidPrincipals)
-               }
-       }
-
-       if !c.IsAuthority(cert.SignatureKey) {
-               return fmt.Errorf("ssh: certificate signed by unrecognized 
authority")
-       }
-
-       clock := c.Clock
-       if clock == nil {
-               clock = time.Now
-       }
-
-       unixNow := clock().Unix()
-       if after := int64(cert.ValidAfter); after < 0 || unixNow < 
int64(cert.ValidAfter) {
-               return fmt.Errorf("ssh: cert is not yet valid")
-       }
-       if before := int64(cert.ValidBefore); cert.ValidBefore != 
uint64(CertTimeInfinity) && (unixNow >= before || before < 0) {
-               return fmt.Errorf("ssh: cert has expired")
-       }
-       if err := cert.SignatureKey.Verify(cert.bytesForSigning(), 
cert.Signature); err != nil {
-               return fmt.Errorf("ssh: certificate signature does not verify")
-       }
-
-       return nil
-}
-
-// SignCert sets c.SignatureKey to the authority's public key and stores a
-// Signature, by authority, in the certificate.
-func (c *Certificate) SignCert(rand io.Reader, authority Signer) error {
-       c.Nonce = make([]byte, 32)
-       if _, err := io.ReadFull(rand, c.Nonce); err != nil {
-               return err
-       }
-       c.SignatureKey = authority.PublicKey()
-
-       sig, err := authority.Sign(rand, c.bytesForSigning())
-       if err != nil {
-               return err
-       }
-       c.Signature = sig
-       return nil
-}
-
-var certAlgoNames = map[string]string{
-       KeyAlgoRSA:      CertAlgoRSAv01,
-       KeyAlgoDSA:      CertAlgoDSAv01,
-       KeyAlgoECDSA256: CertAlgoECDSA256v01,
-       KeyAlgoECDSA384: CertAlgoECDSA384v01,
-       KeyAlgoECDSA521: CertAlgoECDSA521v01,
-}
-
-// certToPrivAlgo returns the underlying algorithm for a certificate algorithm.
-// Panics if a non-certificate algorithm is passed.
-func certToPrivAlgo(algo string) string {
-       for privAlgo, pubAlgo := range certAlgoNames {
-               if pubAlgo == algo {
-                       return privAlgo
-               }
-       }
-       panic("unknown cert algorithm")
-}
-
-func (cert *Certificate) bytesForSigning() []byte {
-       c2 := *cert
-       c2.Signature = nil
-       out := c2.Marshal()
-       // Drop trailing signature length.
-       return out[:len(out)-4]
-}
-
-// Marshal serializes c into OpenSSH's wire format. It is part of the
-// PublicKey interface.
-func (c *Certificate) Marshal() []byte {
-       generic := genericCertData{
-               Serial:          c.Serial,
-               CertType:        c.CertType,
-               KeyId:           c.KeyId,
-               ValidPrincipals: marshalStringList(c.ValidPrincipals),
-               ValidAfter:      uint64(c.ValidAfter),
-               ValidBefore:     uint64(c.ValidBefore),
-               CriticalOptions: marshalTuples(c.CriticalOptions),
-               Extensions:      marshalTuples(c.Extensions),
-               Reserved:        c.Reserved,
-               SignatureKey:    c.SignatureKey.Marshal(),
-       }
-       if c.Signature != nil {
-               generic.Signature = Marshal(c.Signature)
-       }
-       genericBytes := Marshal(&generic)
-       keyBytes := c.Key.Marshal()
-       _, keyBytes, _ = parseString(keyBytes)
-       prefix := Marshal(&struct {
-               Name  string
-               Nonce []byte
-               Key   []byte `ssh:"rest"`
-       }{c.Type(), c.Nonce, keyBytes})
-
-       result := make([]byte, 0, len(prefix)+len(genericBytes))
-       result = append(result, prefix...)
-       result = append(result, genericBytes...)
-       return result
-}
-
-// Type returns the key name. It is part of the PublicKey interface.
-func (c *Certificate) Type() string {
-       algo, ok := certAlgoNames[c.Key.Type()]
-       if !ok {
-               panic("unknown cert key type")
-       }
-       return algo
-}
-
-// Verify verifies a signature against the certificate's public
-// key. It is part of the PublicKey interface.
-func (c *Certificate) Verify(data []byte, sig *Signature) error {
-       return c.Key.Verify(data, sig)
-}
-
-func parseSignatureBody(in []byte) (out *Signature, rest []byte, ok bool) {
-       format, in, ok := parseString(in)
-       if !ok {
-               return
-       }
-
-       out = &Signature{
-               Format: string(format),
-       }
-
-       if out.Blob, in, ok = parseString(in); !ok {
-               return
-       }
-
-       return out, in, ok
-}
-
-func parseSignature(in []byte) (out *Signature, rest []byte, ok bool) {
-       sigBytes, rest, ok := parseString(in)
-       if !ok {
-               return
-       }
-
-       out, trailing, ok := parseSignatureBody(sigBytes)
-       if !ok || len(trailing) > 0 {
-               return nil, nil, false
-       }
-       return
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/certs_test.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/certs_test.go 
b/cli/vendor/golang.org/x/crypto/ssh/certs_test.go
deleted file mode 100644
index c5f2e53..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/certs_test.go
+++ /dev/null
@@ -1,216 +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 (
-       "bytes"
-       "crypto/rand"
-       "reflect"
-       "testing"
-       "time"
-)
-
-// Cert generated by ssh-keygen 6.0p1 Debian-4.
-// % ssh-keygen -s ca-key -I test user-key
-const exampleSSHCert = `ssh-rsa-cert-...@openssh.com 
AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgb1srW/W3ZDjYAO45xLYAwzHBDLsJ4Ux6ICFIkTjb1LEAAAADAQABAAAAYQCkoR51poH0wE8w72cqSB8Sszx+vAhzcMdCO0wqHTj7UNENHWEXGrU0E0UQekD7U+yhkhtoyjbPOVIP7hNa6aRk/ezdh/iUnCIt4Jt1v3Z1h1P+hA4QuYFMHNB+rmjPwAcAAAAAAAAAAAAAAAEAAAAEdGVzdAAAAAAAAAAAAAAAAP//////////AAAAAAAAAIIAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAAHcAAAAHc3NoLXJzYQAAAAMBAAEAAABhANFS2kaktpSGc+CcmEKPyw9mJC4nZKxHKTgLVZeaGbFZOvJTNzBspQHdy7Q1uKSfktxpgjZnksiu/tFF9ngyY2KFoc+U88ya95IZUycBGCUbBQ8+bhDtw/icdDGQD5WnUwAAAG8AAAAHc3NoLXJzYQAAAGC8Y9Z2LQKhIhxf52773XaWrXdxP0t3GBVo4A10vUWiYoAGepr6rQIoGGXFxT4B9Gp+nEBJjOwKDXPrAevow0T9ca8gZN+0ykbhSrXLE5Ao48rqr3zP4O1/9P7e6gp0gw8=`
-
-func TestParseCert(t *testing.T) {
-       authKeyBytes := []byte(exampleSSHCert)
-
-       key, _, _, rest, err := ParseAuthorizedKey(authKeyBytes)
-       if err != nil {
-               t.Fatalf("ParseAuthorizedKey: %v", err)
-       }
-       if len(rest) > 0 {
-               t.Errorf("rest: got %q, want empty", rest)
-       }
-
-       if _, ok := key.(*Certificate); !ok {
-               t.Fatalf("got %v (%T), want *Certificate", key, key)
-       }
-
-       marshaled := MarshalAuthorizedKey(key)
-       // Before comparison, remove the trailing newline that
-       // MarshalAuthorizedKey adds.
-       marshaled = marshaled[:len(marshaled)-1]
-       if !bytes.Equal(authKeyBytes, marshaled) {
-               t.Errorf("marshaled certificate does not match original: got 
%q, want %q", marshaled, authKeyBytes)
-       }
-}
-
-// Cert generated by ssh-keygen OpenSSH_6.8p1 OS X 10.10.3
-// % ssh-keygen -s ca -I testcert -O source-address=192.168.1.0/24 -O 
force-command=/bin/sleep user.pub
-// user.pub key: ssh-rsa 
AAAAB3NzaC1yc2EAAAADAQABAAABAQDACh1rt2DXfV3hk6fszSQcQ/rueMId0kVD9U7nl8cfEnFxqOCrNT92g4laQIGl2mn8lsGZfTLg8ksHq3gkvgO3oo/0wHy4v32JeBOHTsN5AL4gfHNEhWeWb50ev47hnTsRIt9P4dxogeUo/hTu7j9+s9lLpEQXCvq6xocXQt0j8MV9qZBBXFLXVT3cWIkSqOdwt/5ZBg+1GSrc7WfCXVWgTk4a20uPMuJPxU4RQwZW6X3+O8Pqo8C3cW0OzZRFP6gUYUKUsTI5WntlS+LAxgw1mZNsozFGdbiOPRnEryE3SRldh9vjDR3tin1fGpA5P7+CEB/bqaXtG3V+F2OkqaMN
-// Critical Options:
-//         force-command /bin/sleep
-//         source-address 192.168.1.0/24
-// Extensions:
-//         permit-X11-forwarding
-//         permit-agent-forwarding
-//         permit-port-forwarding
-//         permit-pty
-//         permit-user-rc
-const exampleSSHCertWithOptions = `ssh-rsa-cert-...@openssh.com 
AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgDyysCJY0XrO1n03EeRRoITnTPdjENFmWDs9X58PP3VUAAAADAQABAAABAQDACh1rt2DXfV3hk6fszSQcQ/rueMId0kVD9U7nl8cfEnFxqOCrNT92g4laQIGl2mn8lsGZfTLg8ksHq3gkvgO3oo/0wHy4v32JeBOHTsN5AL4gfHNEhWeWb50ev47hnTsRIt9P4dxogeUo/hTu7j9+s9lLpEQXCvq6xocXQt0j8MV9qZBBXFLXVT3cWIkSqOdwt/5ZBg+1GSrc7WfCXVWgTk4a20uPMuJPxU4RQwZW6X3+O8Pqo8C3cW0OzZRFP6gUYUKUsTI5WntlS+LAxgw1mZNsozFGdbiOPRnEryE3SRldh9vjDR3tin1fGpA5P7+CEB/bqaXtG3V+F2OkqaMNAAAAAAAAAAAAAAABAAAACHRlc3RjZXJ0AAAAAAAAAAAAAAAA//////////8AAABLAAAADWZvcmNlLWNvbW1hbmQAAAAOAAAACi9iaW4vc2xlZXAAAAAOc291cmNlLWFkZHJlc3MAAAASAAAADjE5Mi4xNjguMS4wLzI0AAAAggAAABVwZXJtaXQtWDExLWZvcndhcmRpbmcAAAAAAAAAF3Blcm1pdC1hZ2VudC1mb3J3YXJkaW5nAAAAAAAAABZwZXJtaXQtcG9ydC1mb3J3YXJkaW5nAAAAAAAAAApwZXJtaXQtcHR5AAAAAAAAAA5wZXJtaXQtdXNlci1yYwAAAAAAAAAAAAABFwAAAAdzc2gtcnNhAAAAAwEAAQAAAQEAwU+c5ui5A8+J/CFpjW8wCa52bEODA808WWQDCSuTG/eMXNf59v9Y8Pk0F1E9dGCosSNyVcB/hacUrc6He+i97+HJCyKavBsE6GDxr
 
jRyxYqAlfcOXi/IVmaUGiO8OQ39d4GHrjToInKvExSUeleQyH4Y4/e27T/pILAqPFL3fyrvMLT5qU9QyIt6zIpa7GBP5+urouNavMprV3zsfIqNBbWypinOQAw823a5wN+zwXnhZrgQiHZ/USG09Y6k98y1dTVz8YHlQVR4D3lpTAsKDKJ5hCH9WU4fdf+lU8OyNGaJ/vz0XNqxcToe1l4numLTnaoSuH89pHryjqurB7lJKwAAAQ8AAAAHc3NoLXJzYQAAAQCaHvUIoPL1zWUHIXLvu96/HU1s/i4CAW2IIEuGgxCUCiFj6vyTyYtgxQxcmbfZf6eaITlS6XJZa7Qq4iaFZh75C1DXTX8labXhRSD4E2t//AIP9MC1rtQC5xo6FmbQ+BoKcDskr+mNACcbRSxs3IL3bwCfWDnIw2WbVox9ZdcthJKk4UoCW4ix4QwdHw7zlddlz++fGEEVhmTbll1SUkycGApPFBsAYRTMupUJcYPIeReBI/m8XfkoMk99bV8ZJQTAd7OekHY2/48Ff53jLmyDjP7kNw1F8OaPtkFs6dGJXta4krmaekPy87j+35In5hFj7yoOqvSbmYUkeX70/GGQ`
-
-func TestParseCertWithOptions(t *testing.T) {
-       opts := map[string]string{
-               "source-address": "192.168.1.0/24",
-               "force-command":  "/bin/sleep",
-       }
-       exts := map[string]string{
-               "permit-X11-forwarding":   "",
-               "permit-agent-forwarding": "",
-               "permit-port-forwarding":  "",
-               "permit-pty":              "",
-               "permit-user-rc":          "",
-       }
-       authKeyBytes := []byte(exampleSSHCertWithOptions)
-
-       key, _, _, rest, err := ParseAuthorizedKey(authKeyBytes)
-       if err != nil {
-               t.Fatalf("ParseAuthorizedKey: %v", err)
-       }
-       if len(rest) > 0 {
-               t.Errorf("rest: got %q, want empty", rest)
-       }
-       cert, ok := key.(*Certificate)
-       if !ok {
-               t.Fatalf("got %v (%T), want *Certificate", key, key)
-       }
-       if !reflect.DeepEqual(cert.CriticalOptions, opts) {
-               t.Errorf("unexpected critical options - got %v, want %v", 
cert.CriticalOptions, opts)
-       }
-       if !reflect.DeepEqual(cert.Extensions, exts) {
-               t.Errorf("unexpected Extensions - got %v, want %v", 
cert.Extensions, exts)
-       }
-       marshaled := MarshalAuthorizedKey(key)
-       // Before comparison, remove the trailing newline that
-       // MarshalAuthorizedKey adds.
-       marshaled = marshaled[:len(marshaled)-1]
-       if !bytes.Equal(authKeyBytes, marshaled) {
-               t.Errorf("marshaled certificate does not match original: got 
%q, want %q", marshaled, authKeyBytes)
-       }
-}
-
-func TestValidateCert(t *testing.T) {
-       key, _, _, _, err := ParseAuthorizedKey([]byte(exampleSSHCert))
-       if err != nil {
-               t.Fatalf("ParseAuthorizedKey: %v", err)
-       }
-       validCert, ok := key.(*Certificate)
-       if !ok {
-               t.Fatalf("got %v (%T), want *Certificate", key, key)
-       }
-       checker := CertChecker{}
-       checker.IsAuthority = func(k PublicKey) bool {
-               return bytes.Equal(k.Marshal(), 
validCert.SignatureKey.Marshal())
-       }
-
-       if err := checker.CheckCert("user", validCert); err != nil {
-               t.Errorf("Unable to validate certificate: %v", err)
-       }
-       invalidCert := &Certificate{
-               Key:          testPublicKeys["rsa"],
-               SignatureKey: testPublicKeys["ecdsa"],
-               ValidBefore:  CertTimeInfinity,
-               Signature:    &Signature{},
-       }
-       if err := checker.CheckCert("user", invalidCert); err == nil {
-               t.Error("Invalid cert signature passed validation")
-       }
-}
-
-func TestValidateCertTime(t *testing.T) {
-       cert := Certificate{
-               ValidPrincipals: []string{"user"},
-               Key:             testPublicKeys["rsa"],
-               ValidAfter:      50,
-               ValidBefore:     100,
-       }
-
-       cert.SignCert(rand.Reader, testSigners["ecdsa"])
-
-       for ts, ok := range map[int64]bool{
-               25:  false,
-               50:  true,
-               99:  true,
-               100: false,
-               125: false,
-       } {
-               checker := CertChecker{
-                       Clock: func() time.Time { return time.Unix(ts, 0) },
-               }
-               checker.IsAuthority = func(k PublicKey) bool {
-                       return bytes.Equal(k.Marshal(),
-                               testPublicKeys["ecdsa"].Marshal())
-               }
-
-               if v := checker.CheckCert("user", &cert); (v == nil) != ok {
-                       t.Errorf("Authenticate(%d): %v", ts, v)
-               }
-       }
-}
-
-// TODO(hanwen): tests for
-//
-// host keys:
-// * fallbacks
-
-func TestHostKeyCert(t *testing.T) {
-       cert := &Certificate{
-               ValidPrincipals: []string{"hostname", "hostname.domain"},
-               Key:             testPublicKeys["rsa"],
-               ValidBefore:     CertTimeInfinity,
-               CertType:        HostCert,
-       }
-       cert.SignCert(rand.Reader, testSigners["ecdsa"])
-
-       checker := &CertChecker{
-               IsAuthority: func(p PublicKey) bool {
-                       return bytes.Equal(testPublicKeys["ecdsa"].Marshal(), 
p.Marshal())
-               },
-       }
-
-       certSigner, err := NewCertSigner(cert, testSigners["rsa"])
-       if err != nil {
-               t.Errorf("NewCertSigner: %v", err)
-       }
-
-       for _, name := range []string{"hostname", "otherhost"} {
-               c1, c2, err := netPipe()
-               if err != nil {
-                       t.Fatalf("netPipe: %v", err)
-               }
-               defer c1.Close()
-               defer c2.Close()
-
-               errc := make(chan error)
-
-               go func() {
-                       conf := ServerConfig{
-                               NoClientAuth: true,
-                       }
-                       conf.AddHostKey(certSigner)
-                       _, _, _, err := NewServerConn(c1, &conf)
-                       errc <- err
-               }()
-
-               config := &ClientConfig{
-                       User:            "user",
-                       HostKeyCallback: checker.CheckHostKey,
-               }
-               _, _, _, err = NewClientConn(c2, name, config)
-
-               succeed := name == "hostname"
-               if (err == nil) != succeed {
-                       t.Fatalf("NewClientConn(%q): %v", name, err)
-               }
-
-               err = <-errc
-               if (err == nil) != succeed {
-                       t.Fatalf("NewServerConn(%q): %v", name, err)
-               }
-       }
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/channel.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/channel.go 
b/cli/vendor/golang.org/x/crypto/ssh/channel.go
deleted file mode 100644
index 5403c7e..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/channel.go
+++ /dev/null
@@ -1,631 +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 (
-       "encoding/binary"
-       "errors"
-       "fmt"
-       "io"
-       "log"
-       "sync"
-)
-
-const (
-       minPacketLength = 9
-       // channelMaxPacket contains the maximum number of bytes that will be
-       // sent in a single packet. As per RFC 4253, section 6.1, 32k is also
-       // the minimum.
-       channelMaxPacket = 1 << 15
-       // We follow OpenSSH here.
-       channelWindowSize = 64 * channelMaxPacket
-)
-
-// NewChannel represents an incoming request to a channel. It must either be
-// accepted for use by calling Accept, or rejected by calling Reject.
-type NewChannel interface {
-       // Accept accepts the channel creation request. It returns the Channel
-       // and a Go channel containing SSH requests. The Go channel must be
-       // serviced otherwise the Channel will hang.
-       Accept() (Channel, <-chan *Request, error)
-
-       // Reject rejects the channel creation request. After calling
-       // this, no other methods on the Channel may be called.
-       Reject(reason RejectionReason, message string) error
-
-       // ChannelType returns the type of the channel, as supplied by the
-       // client.
-       ChannelType() string
-
-       // ExtraData returns the arbitrary payload for this channel, as supplied
-       // by the client. This data is specific to the channel type.
-       ExtraData() []byte
-}
-
-// A Channel is an ordered, reliable, flow-controlled, duplex stream
-// that is multiplexed over an SSH connection.
-type Channel interface {
-       // Read reads up to len(data) bytes from the channel.
-       Read(data []byte) (int, error)
-
-       // Write writes len(data) bytes to the channel.
-       Write(data []byte) (int, error)
-
-       // Close signals end of channel use. No data may be sent after this
-       // call.
-       Close() error
-
-       // CloseWrite signals the end of sending in-band
-       // data. Requests may still be sent, and the other side may
-       // still send data
-       CloseWrite() error
-
-       // SendRequest sends a channel request.  If wantReply is true,
-       // it will wait for a reply and return the result as a
-       // boolean, otherwise the return value will be false. Channel
-       // requests are out-of-band messages so they may be sent even
-       // if the data stream is closed or blocked by flow control.
-       SendRequest(name string, wantReply bool, payload []byte) (bool, error)
-
-       // Stderr returns an io.ReadWriter that writes to this channel
-       // with the extended data type set to stderr. Stderr may
-       // safely be read and written from a different goroutine than
-       // Read and Write respectively.
-       Stderr() io.ReadWriter
-}
-
-// Request is a request sent outside of the normal stream of
-// data. Requests can either be specific to an SSH channel, or they
-// can be global.
-type Request struct {
-       Type      string
-       WantReply bool
-       Payload   []byte
-
-       ch  *channel
-       mux *mux
-}
-
-// Reply sends a response to a request. It must be called for all requests
-// where WantReply is true and is a no-op otherwise. The payload argument is
-// ignored for replies to channel-specific requests.
-func (r *Request) Reply(ok bool, payload []byte) error {
-       if !r.WantReply {
-               return nil
-       }
-
-       if r.ch == nil {
-               return r.mux.ackRequest(ok, payload)
-       }
-
-       return r.ch.ackRequest(ok)
-}
-
-// RejectionReason is an enumeration used when rejecting channel creation
-// requests. See RFC 4254, section 5.1.
-type RejectionReason uint32
-
-const (
-       Prohibited RejectionReason = iota + 1
-       ConnectionFailed
-       UnknownChannelType
-       ResourceShortage
-)
-
-// String converts the rejection reason to human readable form.
-func (r RejectionReason) String() string {
-       switch r {
-       case Prohibited:
-               return "administratively prohibited"
-       case ConnectionFailed:
-               return "connect failed"
-       case UnknownChannelType:
-               return "unknown channel type"
-       case ResourceShortage:
-               return "resource shortage"
-       }
-       return fmt.Sprintf("unknown reason %d", int(r))
-}
-
-func min(a uint32, b int) uint32 {
-       if a < uint32(b) {
-               return a
-       }
-       return uint32(b)
-}
-
-type channelDirection uint8
-
-const (
-       channelInbound channelDirection = iota
-       channelOutbound
-)
-
-// channel is an implementation of the Channel interface that works
-// with the mux class.
-type channel struct {
-       // R/O after creation
-       chanType          string
-       extraData         []byte
-       localId, remoteId uint32
-
-       // maxIncomingPayload and maxRemotePayload are the maximum
-       // payload sizes of normal and extended data packets for
-       // receiving and sending, respectively. The wire packet will
-       // be 9 or 13 bytes larger (excluding encryption overhead).
-       maxIncomingPayload uint32
-       maxRemotePayload   uint32
-
-       mux *mux
-
-       // decided is set to true if an accept or reject message has been sent
-       // (for outbound channels) or received (for inbound channels).
-       decided bool
-
-       // direction contains either channelOutbound, for channels created
-       // locally, or channelInbound, for channels created by the peer.
-       direction channelDirection
-
-       // Pending internal channel messages.
-       msg chan interface{}
-
-       // Since requests have no ID, there can be only one request
-       // with WantReply=true outstanding.  This lock is held by a
-       // goroutine that has such an outgoing request pending.
-       sentRequestMu sync.Mutex
-
-       incomingRequests chan *Request
-
-       sentEOF bool
-
-       // thread-safe data
-       remoteWin  window
-       pending    *buffer
-       extPending *buffer
-
-       // windowMu protects myWindow, the flow-control window.
-       windowMu sync.Mutex
-       myWindow uint32
-
-       // writeMu serializes calls to mux.conn.writePacket() and
-       // protects sentClose and packetPool. This mutex must be
-       // different from windowMu, as writePacket can block if there
-       // is a key exchange pending.
-       writeMu   sync.Mutex
-       sentClose bool
-
-       // packetPool has a buffer for each extended channel ID to
-       // save allocations during writes.
-       packetPool map[uint32][]byte
-}
-
-// writePacket sends a packet. If the packet is a channel close, it updates
-// sentClose. This method takes the lock c.writeMu.
-func (c *channel) writePacket(packet []byte) error {
-       c.writeMu.Lock()
-       if c.sentClose {
-               c.writeMu.Unlock()
-               return io.EOF
-       }
-       c.sentClose = (packet[0] == msgChannelClose)
-       err := c.mux.conn.writePacket(packet)
-       c.writeMu.Unlock()
-       return err
-}
-
-func (c *channel) sendMessage(msg interface{}) error {
-       if debugMux {
-               log.Printf("send %d: %#v", c.mux.chanList.offset, msg)
-       }
-
-       p := Marshal(msg)
-       binary.BigEndian.PutUint32(p[1:], c.remoteId)
-       return c.writePacket(p)
-}
-
-// WriteExtended writes data to a specific extended stream. These streams are
-// used, for example, for stderr.
-func (c *channel) WriteExtended(data []byte, extendedCode uint32) (n int, err 
error) {
-       if c.sentEOF {
-               return 0, io.EOF
-       }
-       // 1 byte message type, 4 bytes remoteId, 4 bytes data length
-       opCode := byte(msgChannelData)
-       headerLength := uint32(9)
-       if extendedCode > 0 {
-               headerLength += 4
-               opCode = msgChannelExtendedData
-       }
-
-       c.writeMu.Lock()
-       packet := c.packetPool[extendedCode]
-       // We don't remove the buffer from packetPool, so
-       // WriteExtended calls from different goroutines will be
-       // flagged as errors by the race detector.
-       c.writeMu.Unlock()
-
-       for len(data) > 0 {
-               space := min(c.maxRemotePayload, len(data))
-               if space, err = c.remoteWin.reserve(space); err != nil {
-                       return n, err
-               }
-               if want := headerLength + space; uint32(cap(packet)) < want {
-                       packet = make([]byte, want)
-               } else {
-                       packet = packet[:want]
-               }
-
-               todo := data[:space]
-
-               packet[0] = opCode
-               binary.BigEndian.PutUint32(packet[1:], c.remoteId)
-               if extendedCode > 0 {
-                       binary.BigEndian.PutUint32(packet[5:], 
uint32(extendedCode))
-               }
-               binary.BigEndian.PutUint32(packet[headerLength-4:], 
uint32(len(todo)))
-               copy(packet[headerLength:], todo)
-               if err = c.writePacket(packet); err != nil {
-                       return n, err
-               }
-
-               n += len(todo)
-               data = data[len(todo):]
-       }
-
-       c.writeMu.Lock()
-       c.packetPool[extendedCode] = packet
-       c.writeMu.Unlock()
-
-       return n, err
-}
-
-func (c *channel) handleData(packet []byte) error {
-       headerLen := 9
-       isExtendedData := packet[0] == msgChannelExtendedData
-       if isExtendedData {
-               headerLen = 13
-       }
-       if len(packet) < headerLen {
-               // malformed data packet
-               return parseError(packet[0])
-       }
-
-       var extended uint32
-       if isExtendedData {
-               extended = binary.BigEndian.Uint32(packet[5:])
-       }
-
-       length := binary.BigEndian.Uint32(packet[headerLen-4 : headerLen])
-       if length == 0 {
-               return nil
-       }
-       if length > c.maxIncomingPayload {
-               // TODO(hanwen): should send Disconnect?
-               return errors.New("ssh: incoming packet exceeds maximum payload 
size")
-       }
-
-       data := packet[headerLen:]
-       if length != uint32(len(data)) {
-               return errors.New("ssh: wrong packet length")
-       }
-
-       c.windowMu.Lock()
-       if c.myWindow < length {
-               c.windowMu.Unlock()
-               // TODO(hanwen): should send Disconnect with reason?
-               return errors.New("ssh: remote side wrote too much")
-       }
-       c.myWindow -= length
-       c.windowMu.Unlock()
-
-       if extended == 1 {
-               c.extPending.write(data)
-       } else if extended > 0 {
-               // discard other extended data.
-       } else {
-               c.pending.write(data)
-       }
-       return nil
-}
-
-func (c *channel) adjustWindow(n uint32) error {
-       c.windowMu.Lock()
-       // Since myWindow is managed on our side, and can never exceed
-       // the initial window setting, we don't worry about overflow.
-       c.myWindow += uint32(n)
-       c.windowMu.Unlock()
-       return c.sendMessage(windowAdjustMsg{
-               AdditionalBytes: uint32(n),
-       })
-}
-
-func (c *channel) ReadExtended(data []byte, extended uint32) (n int, err 
error) {
-       switch extended {
-       case 1:
-               n, err = c.extPending.Read(data)
-       case 0:
-               n, err = c.pending.Read(data)
-       default:
-               return 0, fmt.Errorf("ssh: extended code %d unimplemented", 
extended)
-       }
-
-       if n > 0 {
-               err = c.adjustWindow(uint32(n))
-               // sendWindowAdjust can return io.EOF if the remote
-               // peer has closed the connection, however we want to
-               // defer forwarding io.EOF to the caller of Read until
-               // the buffer has been drained.
-               if n > 0 && err == io.EOF {
-                       err = nil
-               }
-       }
-
-       return n, err
-}
-
-func (c *channel) close() {
-       c.pending.eof()
-       c.extPending.eof()
-       close(c.msg)
-       close(c.incomingRequests)
-       c.writeMu.Lock()
-       // This is not necesary for a normal channel teardown, but if
-       // there was another error, it is.
-       c.sentClose = true
-       c.writeMu.Unlock()
-       // Unblock writers.
-       c.remoteWin.close()
-}
-
-// responseMessageReceived is called when a success or failure message is
-// received on a channel to check that such a message is reasonable for the
-// given channel.
-func (c *channel) responseMessageReceived() error {
-       if c.direction == channelInbound {
-               return errors.New("ssh: channel response message received on 
inbound channel")
-       }
-       if c.decided {
-               return errors.New("ssh: duplicate response received for 
channel")
-       }
-       c.decided = true
-       return nil
-}
-
-func (c *channel) handlePacket(packet []byte) error {
-       switch packet[0] {
-       case msgChannelData, msgChannelExtendedData:
-               return c.handleData(packet)
-       case msgChannelClose:
-               c.sendMessage(channelCloseMsg{PeersId: c.remoteId})
-               c.mux.chanList.remove(c.localId)
-               c.close()
-               return nil
-       case msgChannelEOF:
-               // RFC 4254 is mute on how EOF affects dataExt messages but
-               // it is logical to signal EOF at the same time.
-               c.extPending.eof()
-               c.pending.eof()
-               return nil
-       }
-
-       decoded, err := decode(packet)
-       if err != nil {
-               return err
-       }
-
-       switch msg := decoded.(type) {
-       case *channelOpenFailureMsg:
-               if err := c.responseMessageReceived(); err != nil {
-                       return err
-               }
-               c.mux.chanList.remove(msg.PeersId)
-               c.msg <- msg
-       case *channelOpenConfirmMsg:
-               if err := c.responseMessageReceived(); err != nil {
-                       return err
-               }
-               if msg.MaxPacketSize < minPacketLength || msg.MaxPacketSize > 
1<<31 {
-                       return fmt.Errorf("ssh: invalid MaxPacketSize %d from 
peer", msg.MaxPacketSize)
-               }
-               c.remoteId = msg.MyId
-               c.maxRemotePayload = msg.MaxPacketSize
-               c.remoteWin.add(msg.MyWindow)
-               c.msg <- msg
-       case *windowAdjustMsg:
-               if !c.remoteWin.add(msg.AdditionalBytes) {
-                       return fmt.Errorf("ssh: invalid window update for %d 
bytes", msg.AdditionalBytes)
-               }
-       case *channelRequestMsg:
-               req := Request{
-                       Type:      msg.Request,
-                       WantReply: msg.WantReply,
-                       Payload:   msg.RequestSpecificData,
-                       ch:        c,
-               }
-
-               c.incomingRequests <- &req
-       default:
-               c.msg <- msg
-       }
-       return nil
-}
-
-func (m *mux) newChannel(chanType string, direction channelDirection, 
extraData []byte) *channel {
-       ch := &channel{
-               remoteWin:        window{Cond: newCond()},
-               myWindow:         channelWindowSize,
-               pending:          newBuffer(),
-               extPending:       newBuffer(),
-               direction:        direction,
-               incomingRequests: make(chan *Request, 16),
-               msg:              make(chan interface{}, 16),
-               chanType:         chanType,
-               extraData:        extraData,
-               mux:              m,
-               packetPool:       make(map[uint32][]byte),
-       }
-       ch.localId = m.chanList.add(ch)
-       return ch
-}
-
-var errUndecided = errors.New("ssh: must Accept or Reject channel")
-var errDecidedAlready = errors.New("ssh: can call Accept or Reject only once")
-
-type extChannel struct {
-       code uint32
-       ch   *channel
-}
-
-func (e *extChannel) Write(data []byte) (n int, err error) {
-       return e.ch.WriteExtended(data, e.code)
-}
-
-func (e *extChannel) Read(data []byte) (n int, err error) {
-       return e.ch.ReadExtended(data, e.code)
-}
-
-func (c *channel) Accept() (Channel, <-chan *Request, error) {
-       if c.decided {
-               return nil, nil, errDecidedAlready
-       }
-       c.maxIncomingPayload = channelMaxPacket
-       confirm := channelOpenConfirmMsg{
-               PeersId:       c.remoteId,
-               MyId:          c.localId,
-               MyWindow:      c.myWindow,
-               MaxPacketSize: c.maxIncomingPayload,
-       }
-       c.decided = true
-       if err := c.sendMessage(confirm); err != nil {
-               return nil, nil, err
-       }
-
-       return c, c.incomingRequests, nil
-}
-
-func (ch *channel) Reject(reason RejectionReason, message string) error {
-       if ch.decided {
-               return errDecidedAlready
-       }
-       reject := channelOpenFailureMsg{
-               PeersId:  ch.remoteId,
-               Reason:   reason,
-               Message:  message,
-               Language: "en",
-       }
-       ch.decided = true
-       return ch.sendMessage(reject)
-}
-
-func (ch *channel) Read(data []byte) (int, error) {
-       if !ch.decided {
-               return 0, errUndecided
-       }
-       return ch.ReadExtended(data, 0)
-}
-
-func (ch *channel) Write(data []byte) (int, error) {
-       if !ch.decided {
-               return 0, errUndecided
-       }
-       return ch.WriteExtended(data, 0)
-}
-
-func (ch *channel) CloseWrite() error {
-       if !ch.decided {
-               return errUndecided
-       }
-       ch.sentEOF = true
-       return ch.sendMessage(channelEOFMsg{
-               PeersId: ch.remoteId})
-}
-
-func (ch *channel) Close() error {
-       if !ch.decided {
-               return errUndecided
-       }
-
-       return ch.sendMessage(channelCloseMsg{
-               PeersId: ch.remoteId})
-}
-
-// Extended returns an io.ReadWriter that sends and receives data on the given,
-// SSH extended stream. Such streams are used, for example, for stderr.
-func (ch *channel) Extended(code uint32) io.ReadWriter {
-       if !ch.decided {
-               return nil
-       }
-       return &extChannel{code, ch}
-}
-
-func (ch *channel) Stderr() io.ReadWriter {
-       return ch.Extended(1)
-}
-
-func (ch *channel) SendRequest(name string, wantReply bool, payload []byte) 
(bool, error) {
-       if !ch.decided {
-               return false, errUndecided
-       }
-
-       if wantReply {
-               ch.sentRequestMu.Lock()
-               defer ch.sentRequestMu.Unlock()
-       }
-
-       msg := channelRequestMsg{
-               PeersId:             ch.remoteId,
-               Request:             name,
-               WantReply:           wantReply,
-               RequestSpecificData: payload,
-       }
-
-       if err := ch.sendMessage(msg); err != nil {
-               return false, err
-       }
-
-       if wantReply {
-               m, ok := (<-ch.msg)
-               if !ok {
-                       return false, io.EOF
-               }
-               switch m.(type) {
-               case *channelRequestFailureMsg:
-                       return false, nil
-               case *channelRequestSuccessMsg:
-                       return true, nil
-               default:
-                       return false, fmt.Errorf("ssh: unexpected response to 
channel request: %#v", m)
-               }
-       }
-
-       return false, nil
-}
-
-// ackRequest either sends an ack or nack to the channel request.
-func (ch *channel) ackRequest(ok bool) error {
-       if !ch.decided {
-               return errUndecided
-       }
-
-       var msg interface{}
-       if !ok {
-               msg = channelRequestFailureMsg{
-                       PeersId: ch.remoteId,
-               }
-       } else {
-               msg = channelRequestSuccessMsg{
-                       PeersId: ch.remoteId,
-               }
-       }
-       return ch.sendMessage(msg)
-}
-
-func (ch *channel) ChannelType() string {
-       return ch.chanType
-}
-
-func (ch *channel) ExtraData() []byte {
-       return ch.extraData
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/cipher.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/cipher.go 
b/cli/vendor/golang.org/x/crypto/ssh/cipher.go
deleted file mode 100644
index 2732963..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/cipher.go
+++ /dev/null
@@ -1,552 +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 (
-       "crypto/aes"
-       "crypto/cipher"
-       "crypto/rc4"
-       "crypto/subtle"
-       "encoding/binary"
-       "errors"
-       "fmt"
-       "hash"
-       "io"
-       "io/ioutil"
-)
-
-const (
-       packetSizeMultiple = 16 // TODO(huin) this should be determined by the 
cipher.
-
-       // RFC 4253 section 6.1 defines a minimum packet size of 32768 that 
implementations
-       // MUST be able to process (plus a few more kilobytes for padding and 
mac). The RFC
-       // indicates implementations SHOULD be able to handle larger packet 
sizes, but then
-       // waffles on about reasonable limits.
-       //
-       // OpenSSH caps their maxPacket at 256kB so we choose to do
-       // the same. maxPacket is also used to ensure that uint32
-       // length fields do not overflow, so it should remain well
-       // below 4G.
-       maxPacket = 256 * 1024
-)
-
-// noneCipher implements cipher.Stream and provides no encryption. It is used
-// by the transport before the first key-exchange.
-type noneCipher struct{}
-
-func (c noneCipher) XORKeyStream(dst, src []byte) {
-       copy(dst, src)
-}
-
-func newAESCTR(key, iv []byte) (cipher.Stream, error) {
-       c, err := aes.NewCipher(key)
-       if err != nil {
-               return nil, err
-       }
-       return cipher.NewCTR(c, iv), nil
-}
-
-func newRC4(key, iv []byte) (cipher.Stream, error) {
-       return rc4.NewCipher(key)
-}
-
-type streamCipherMode struct {
-       keySize    int
-       ivSize     int
-       skip       int
-       createFunc func(key, iv []byte) (cipher.Stream, error)
-}
-
-func (c *streamCipherMode) createStream(key, iv []byte) (cipher.Stream, error) 
{
-       if len(key) < c.keySize {
-               panic("ssh: key length too small for cipher")
-       }
-       if len(iv) < c.ivSize {
-               panic("ssh: iv too small for cipher")
-       }
-
-       stream, err := c.createFunc(key[:c.keySize], iv[:c.ivSize])
-       if err != nil {
-               return nil, err
-       }
-
-       var streamDump []byte
-       if c.skip > 0 {
-               streamDump = make([]byte, 512)
-       }
-
-       for remainingToDump := c.skip; remainingToDump > 0; {
-               dumpThisTime := remainingToDump
-               if dumpThisTime > len(streamDump) {
-                       dumpThisTime = len(streamDump)
-               }
-               stream.XORKeyStream(streamDump[:dumpThisTime], 
streamDump[:dumpThisTime])
-               remainingToDump -= dumpThisTime
-       }
-
-       return stream, nil
-}
-
-// cipherModes documents properties of supported ciphers. Ciphers not included
-// are not supported and will not be negotiated, even if explicitly requested 
in
-// ClientConfig.Crypto.Ciphers.
-var cipherModes = map[string]*streamCipherMode{
-       // Ciphers from RFC4344, which introduced many CTR-based ciphers. 
Algorithms
-       // are defined in the order specified in the RFC.
-       "aes128-ctr": {16, aes.BlockSize, 0, newAESCTR},
-       "aes192-ctr": {24, aes.BlockSize, 0, newAESCTR},
-       "aes256-ctr": {32, aes.BlockSize, 0, newAESCTR},
-
-       // Ciphers from RFC4345, which introduces security-improved arcfour 
ciphers.
-       // They are defined in the order specified in the RFC.
-       "arcfour128": {16, 0, 1536, newRC4},
-       "arcfour256": {32, 0, 1536, newRC4},
-
-       // Cipher defined in RFC 4253, which describes SSH Transport Layer 
Protocol.
-       // Note that this cipher is not safe, as stated in RFC 4253: "Arcfour 
(and
-       // RC4) has problems with weak keys, and should be used with caution."
-       // RFC4345 introduces improved versions of Arcfour.
-       "arcfour": {16, 0, 0, newRC4},
-
-       // AES-GCM is not a stream cipher, so it is constructed with a
-       // special case. If we add any more non-stream ciphers, we
-       // should invest a cleaner way to do this.
-       gcmCipherID: {16, 12, 0, nil},
-
-       // CBC mode is insecure and so is not included in the default config.
-       // (See http://www.isg.rhul.ac.uk/~kp/SandPfinal.pdf). If absolutely
-       // needed, it's possible to specify a custom Config to enable it.
-       // You should expect that an active attacker can recover plaintext if
-       // you do.
-       aes128cbcID: {16, aes.BlockSize, 0, nil},
-}
-
-// prefixLen is the length of the packet prefix that contains the packet length
-// and number of padding bytes.
-const prefixLen = 5
-
-// streamPacketCipher is a packetCipher using a stream cipher.
-type streamPacketCipher struct {
-       mac    hash.Hash
-       cipher cipher.Stream
-
-       // The following members are to avoid per-packet allocations.
-       prefix      [prefixLen]byte
-       seqNumBytes [4]byte
-       padding     [2 * packetSizeMultiple]byte
-       packetData  []byte
-       macResult   []byte
-}
-
-// readPacket reads and decrypt a single packet from the reader argument.
-func (s *streamPacketCipher) readPacket(seqNum uint32, r io.Reader) ([]byte, 
error) {
-       if _, err := io.ReadFull(r, s.prefix[:]); err != nil {
-               return nil, err
-       }
-
-       s.cipher.XORKeyStream(s.prefix[:], s.prefix[:])
-       length := binary.BigEndian.Uint32(s.prefix[0:4])
-       paddingLength := uint32(s.prefix[4])
-
-       var macSize uint32
-       if s.mac != nil {
-               s.mac.Reset()
-               binary.BigEndian.PutUint32(s.seqNumBytes[:], seqNum)
-               s.mac.Write(s.seqNumBytes[:])
-               s.mac.Write(s.prefix[:])
-               macSize = uint32(s.mac.Size())
-       }
-
-       if length <= paddingLength+1 {
-               return nil, errors.New("ssh: invalid packet length, packet too 
small")
-       }
-
-       if length > maxPacket {
-               return nil, errors.New("ssh: invalid packet length, packet too 
large")
-       }
-
-       // the maxPacket check above ensures that length-1+macSize
-       // does not overflow.
-       if uint32(cap(s.packetData)) < length-1+macSize {
-               s.packetData = make([]byte, length-1+macSize)
-       } else {
-               s.packetData = s.packetData[:length-1+macSize]
-       }
-
-       if _, err := io.ReadFull(r, s.packetData); err != nil {
-               return nil, err
-       }
-       mac := s.packetData[length-1:]
-       data := s.packetData[:length-1]
-       s.cipher.XORKeyStream(data, data)
-
-       if s.mac != nil {
-               s.mac.Write(data)
-               s.macResult = s.mac.Sum(s.macResult[:0])
-               if subtle.ConstantTimeCompare(s.macResult, mac) != 1 {
-                       return nil, errors.New("ssh: MAC failure")
-               }
-       }
-
-       return s.packetData[:length-paddingLength-1], nil
-}
-
-// writePacket encrypts and sends a packet of data to the writer argument
-func (s *streamPacketCipher) writePacket(seqNum uint32, w io.Writer, rand 
io.Reader, packet []byte) error {
-       if len(packet) > maxPacket {
-               return errors.New("ssh: packet too large")
-       }
-
-       paddingLength := packetSizeMultiple - 
(prefixLen+len(packet))%packetSizeMultiple
-       if paddingLength < 4 {
-               paddingLength += packetSizeMultiple
-       }
-
-       length := len(packet) + 1 + paddingLength
-       binary.BigEndian.PutUint32(s.prefix[:], uint32(length))
-       s.prefix[4] = byte(paddingLength)
-       padding := s.padding[:paddingLength]
-       if _, err := io.ReadFull(rand, padding); err != nil {
-               return err
-       }
-
-       if s.mac != nil {
-               s.mac.Reset()
-               binary.BigEndian.PutUint32(s.seqNumBytes[:], seqNum)
-               s.mac.Write(s.seqNumBytes[:])
-               s.mac.Write(s.prefix[:])
-               s.mac.Write(packet)
-               s.mac.Write(padding)
-       }
-
-       s.cipher.XORKeyStream(s.prefix[:], s.prefix[:])
-       s.cipher.XORKeyStream(packet, packet)
-       s.cipher.XORKeyStream(padding, padding)
-
-       if _, err := w.Write(s.prefix[:]); err != nil {
-               return err
-       }
-       if _, err := w.Write(packet); err != nil {
-               return err
-       }
-       if _, err := w.Write(padding); err != nil {
-               return err
-       }
-
-       if s.mac != nil {
-               s.macResult = s.mac.Sum(s.macResult[:0])
-               if _, err := w.Write(s.macResult); err != nil {
-                       return err
-               }
-       }
-
-       return nil
-}
-
-type gcmCipher struct {
-       aead   cipher.AEAD
-       prefix [4]byte
-       iv     []byte
-       buf    []byte
-}
-
-func newGCMCipher(iv, key, macKey []byte) (packetCipher, error) {
-       c, err := aes.NewCipher(key)
-       if err != nil {
-               return nil, err
-       }
-
-       aead, err := cipher.NewGCM(c)
-       if err != nil {
-               return nil, err
-       }
-
-       return &gcmCipher{
-               aead: aead,
-               iv:   iv,
-       }, nil
-}
-
-const gcmTagSize = 16
-
-func (c *gcmCipher) writePacket(seqNum uint32, w io.Writer, rand io.Reader, 
packet []byte) error {
-       // Pad out to multiple of 16 bytes. This is different from the
-       // stream cipher because that encrypts the length too.
-       padding := byte(packetSizeMultiple - (1+len(packet))%packetSizeMultiple)
-       if padding < 4 {
-               padding += packetSizeMultiple
-       }
-
-       length := uint32(len(packet) + int(padding) + 1)
-       binary.BigEndian.PutUint32(c.prefix[:], length)
-       if _, err := w.Write(c.prefix[:]); err != nil {
-               return err
-       }
-
-       if cap(c.buf) < int(length) {
-               c.buf = make([]byte, length)
-       } else {
-               c.buf = c.buf[:length]
-       }
-
-       c.buf[0] = padding
-       copy(c.buf[1:], packet)
-       if _, err := io.ReadFull(rand, c.buf[1+len(packet):]); err != nil {
-               return err
-       }
-       c.buf = c.aead.Seal(c.buf[:0], c.iv, c.buf, c.prefix[:])
-       if _, err := w.Write(c.buf); err != nil {
-               return err
-       }
-       c.incIV()
-
-       return nil
-}
-
-func (c *gcmCipher) incIV() {
-       for i := 4 + 7; i >= 4; i-- {
-               c.iv[i]++
-               if c.iv[i] != 0 {
-                       break
-               }
-       }
-}
-
-func (c *gcmCipher) readPacket(seqNum uint32, r io.Reader) ([]byte, error) {
-       if _, err := io.ReadFull(r, c.prefix[:]); err != nil {
-               return nil, err
-       }
-       length := binary.BigEndian.Uint32(c.prefix[:])
-       if length > maxPacket {
-               return nil, errors.New("ssh: max packet length exceeded.")
-       }
-
-       if cap(c.buf) < int(length+gcmTagSize) {
-               c.buf = make([]byte, length+gcmTagSize)
-       } else {
-               c.buf = c.buf[:length+gcmTagSize]
-       }
-
-       if _, err := io.ReadFull(r, c.buf); err != nil {
-               return nil, err
-       }
-
-       plain, err := c.aead.Open(c.buf[:0], c.iv, c.buf, c.prefix[:])
-       if err != nil {
-               return nil, err
-       }
-       c.incIV()
-
-       padding := plain[0]
-       if padding < 4 || padding >= 20 {
-               return nil, fmt.Errorf("ssh: illegal padding %d", padding)
-       }
-
-       if int(padding+1) >= len(plain) {
-               return nil, fmt.Errorf("ssh: padding %d too large", padding)
-       }
-       plain = plain[1 : length-uint32(padding)]
-       return plain, nil
-}
-
-// cbcCipher implements aes128-cbc cipher defined in RFC 4253 section 6.1
-type cbcCipher struct {
-       mac       hash.Hash
-       macSize   uint32
-       decrypter cipher.BlockMode
-       encrypter cipher.BlockMode
-
-       // The following members are to avoid per-packet allocations.
-       seqNumBytes [4]byte
-       packetData  []byte
-       macResult   []byte
-
-       // Amount of data we should still read to hide which
-       // verification error triggered.
-       oracleCamouflage uint32
-}
-
-func newAESCBCCipher(iv, key, macKey []byte, algs directionAlgorithms) 
(packetCipher, error) {
-       c, err := aes.NewCipher(key)
-       if err != nil {
-               return nil, err
-       }
-
-       cbc := &cbcCipher{
-               mac:        macModes[algs.MAC].new(macKey),
-               decrypter:  cipher.NewCBCDecrypter(c, iv),
-               encrypter:  cipher.NewCBCEncrypter(c, iv),
-               packetData: make([]byte, 1024),
-       }
-       if cbc.mac != nil {
-               cbc.macSize = uint32(cbc.mac.Size())
-       }
-
-       return cbc, nil
-}
-
-func maxUInt32(a, b int) uint32 {
-       if a > b {
-               return uint32(a)
-       }
-       return uint32(b)
-}
-
-const (
-       cbcMinPacketSizeMultiple = 8
-       cbcMinPacketSize         = 16
-       cbcMinPaddingSize        = 4
-)
-
-// cbcError represents a verification error that may leak information.
-type cbcError string
-
-func (e cbcError) Error() string { return string(e) }
-
-func (c *cbcCipher) readPacket(seqNum uint32, r io.Reader) ([]byte, error) {
-       p, err := c.readPacketLeaky(seqNum, r)
-       if err != nil {
-               if _, ok := err.(cbcError); ok {
-                       // Verification error: read a fixed amount of
-                       // data, to make distinguishing between
-                       // failing MAC and failing length check more
-                       // difficult.
-                       io.CopyN(ioutil.Discard, r, int64(c.oracleCamouflage))
-               }
-       }
-       return p, err
-}
-
-func (c *cbcCipher) readPacketLeaky(seqNum uint32, r io.Reader) ([]byte, 
error) {
-       blockSize := c.decrypter.BlockSize()
-
-       // Read the header, which will include some of the subsequent data in 
the
-       // case of block ciphers - this is copied back to the payload later.
-       // How many bytes of payload/padding will be read with this first read.
-       firstBlockLength := uint32((prefixLen + blockSize - 1) / blockSize * 
blockSize)
-       firstBlock := c.packetData[:firstBlockLength]
-       if _, err := io.ReadFull(r, firstBlock); err != nil {
-               return nil, err
-       }
-
-       c.oracleCamouflage = maxPacket + 4 + c.macSize - firstBlockLength
-
-       c.decrypter.CryptBlocks(firstBlock, firstBlock)
-       length := binary.BigEndian.Uint32(firstBlock[:4])
-       if length > maxPacket {
-               return nil, cbcError("ssh: packet too large")
-       }
-       if length+4 < maxUInt32(cbcMinPacketSize, blockSize) {
-               // The minimum size of a packet is 16 (or the cipher block 
size, whichever
-               // is larger) bytes.
-               return nil, cbcError("ssh: packet too small")
-       }
-       // The length of the packet (including the length field but not the 
MAC) must
-       // be a multiple of the block size or 8, whichever is larger.
-       if (length+4)%maxUInt32(cbcMinPacketSizeMultiple, blockSize) != 0 {
-               return nil, cbcError("ssh: invalid packet length multiple")
-       }
-
-       paddingLength := uint32(firstBlock[4])
-       if paddingLength < cbcMinPaddingSize || length <= paddingLength+1 {
-               return nil, cbcError("ssh: invalid packet length")
-       }
-
-       // Positions within the c.packetData buffer:
-       macStart := 4 + length
-       paddingStart := macStart - paddingLength
-
-       // Entire packet size, starting before length, ending at end of mac.
-       entirePacketSize := macStart + c.macSize
-
-       // Ensure c.packetData is large enough for the entire packet data.
-       if uint32(cap(c.packetData)) < entirePacketSize {
-               // Still need to upsize and copy, but this should be rare at 
runtime, only
-               // on upsizing the packetData buffer.
-               c.packetData = make([]byte, entirePacketSize)
-               copy(c.packetData, firstBlock)
-       } else {
-               c.packetData = c.packetData[:entirePacketSize]
-       }
-
-       if n, err := io.ReadFull(r, c.packetData[firstBlockLength:]); err != 
nil {
-               return nil, err
-       } else {
-               c.oracleCamouflage -= uint32(n)
-       }
-
-       remainingCrypted := c.packetData[firstBlockLength:macStart]
-       c.decrypter.CryptBlocks(remainingCrypted, remainingCrypted)
-
-       mac := c.packetData[macStart:]
-       if c.mac != nil {
-               c.mac.Reset()
-               binary.BigEndian.PutUint32(c.seqNumBytes[:], seqNum)
-               c.mac.Write(c.seqNumBytes[:])
-               c.mac.Write(c.packetData[:macStart])
-               c.macResult = c.mac.Sum(c.macResult[:0])
-               if subtle.ConstantTimeCompare(c.macResult, mac) != 1 {
-                       return nil, cbcError("ssh: MAC failure")
-               }
-       }
-
-       return c.packetData[prefixLen:paddingStart], nil
-}
-
-func (c *cbcCipher) writePacket(seqNum uint32, w io.Writer, rand io.Reader, 
packet []byte) error {
-       effectiveBlockSize := maxUInt32(cbcMinPacketSizeMultiple, 
c.encrypter.BlockSize())
-
-       // Length of encrypted portion of the packet (header, payload, padding).
-       // Enforce minimum padding and packet size.
-       encLength := maxUInt32(prefixLen+len(packet)+cbcMinPaddingSize, 
cbcMinPaddingSize)
-       // Enforce block size.
-       encLength = (encLength + effectiveBlockSize - 1) / effectiveBlockSize * 
effectiveBlockSize
-
-       length := encLength - 4
-       paddingLength := int(length) - (1 + len(packet))
-
-       // Overall buffer contains: header, payload, padding, mac.
-       // Space for the MAC is reserved in the capacity but not the slice 
length.
-       bufferSize := encLength + c.macSize
-       if uint32(cap(c.packetData)) < bufferSize {
-               c.packetData = make([]byte, encLength, bufferSize)
-       } else {
-               c.packetData = c.packetData[:encLength]
-       }
-
-       p := c.packetData
-
-       // Packet header.
-       binary.BigEndian.PutUint32(p, length)
-       p = p[4:]
-       p[0] = byte(paddingLength)
-
-       // Payload.
-       p = p[1:]
-       copy(p, packet)
-
-       // Padding.
-       p = p[len(packet):]
-       if _, err := io.ReadFull(rand, p); err != nil {
-               return err
-       }
-
-       if c.mac != nil {
-               c.mac.Reset()
-               binary.BigEndian.PutUint32(c.seqNumBytes[:], seqNum)
-               c.mac.Write(c.seqNumBytes[:])
-               c.mac.Write(c.packetData)
-               // The MAC is now appended into the capacity reserved for it 
earlier.
-               c.packetData = c.mac.Sum(c.packetData)
-       }
-
-       c.encrypter.CryptBlocks(c.packetData[:encLength], 
c.packetData[:encLength])
-
-       if _, err := w.Write(c.packetData); err != nil {
-               return err
-       }
-
-       return nil
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/cipher_test.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/cipher_test.go 
b/cli/vendor/golang.org/x/crypto/ssh/cipher_test.go
deleted file mode 100644
index 54b92b6..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/cipher_test.go
+++ /dev/null
@@ -1,127 +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"
-       "crypto"
-       "crypto/aes"
-       "crypto/rand"
-       "testing"
-)
-
-func TestDefaultCiphersExist(t *testing.T) {
-       for _, cipherAlgo := range supportedCiphers {
-               if _, ok := cipherModes[cipherAlgo]; !ok {
-                       t.Errorf("default cipher %q is unknown", cipherAlgo)
-               }
-       }
-}
-
-func TestPacketCiphers(t *testing.T) {
-       // Still test aes128cbc cipher althought it's commented out.
-       cipherModes[aes128cbcID] = &streamCipherMode{16, aes.BlockSize, 0, nil}
-       defer delete(cipherModes, aes128cbcID)
-
-       for cipher := range cipherModes {
-               kr := &kexResult{Hash: crypto.SHA1}
-               algs := directionAlgorithms{
-                       Cipher:      cipher,
-                       MAC:         "hmac-sha1",
-                       Compression: "none",
-               }
-               client, err := newPacketCipher(clientKeys, algs, kr)
-               if err != nil {
-                       t.Errorf("newPacketCipher(client, %q): %v", cipher, err)
-                       continue
-               }
-               server, err := newPacketCipher(clientKeys, algs, kr)
-               if err != nil {
-                       t.Errorf("newPacketCipher(client, %q): %v", cipher, err)
-                       continue
-               }
-
-               want := "bla bla"
-               input := []byte(want)
-               buf := &bytes.Buffer{}
-               if err := client.writePacket(0, buf, rand.Reader, input); err 
!= nil {
-                       t.Errorf("writePacket(%q): %v", cipher, err)
-                       continue
-               }
-
-               packet, err := server.readPacket(0, buf)
-               if err != nil {
-                       t.Errorf("readPacket(%q): %v", cipher, err)
-                       continue
-               }
-
-               if string(packet) != want {
-                       t.Errorf("roundtrip(%q): got %q, want %q", cipher, 
packet, want)
-               }
-       }
-}
-
-func TestCBCOracleCounterMeasure(t *testing.T) {
-       cipherModes[aes128cbcID] = &streamCipherMode{16, aes.BlockSize, 0, nil}
-       defer delete(cipherModes, aes128cbcID)
-
-       kr := &kexResult{Hash: crypto.SHA1}
-       algs := directionAlgorithms{
-               Cipher:      aes128cbcID,
-               MAC:         "hmac-sha1",
-               Compression: "none",
-       }
-       client, err := newPacketCipher(clientKeys, algs, kr)
-       if err != nil {
-               t.Fatalf("newPacketCipher(client): %v", err)
-       }
-
-       want := "bla bla"
-       input := []byte(want)
-       buf := &bytes.Buffer{}
-       if err := client.writePacket(0, buf, rand.Reader, input); err != nil {
-               t.Errorf("writePacket: %v", err)
-       }
-
-       packetSize := buf.Len()
-       buf.Write(make([]byte, 2*maxPacket))
-
-       // We corrupt each byte, but this usually will only test the
-       // 'packet too large' or 'MAC failure' cases.
-       lastRead := -1
-       for i := 0; i < packetSize; i++ {
-               server, err := newPacketCipher(clientKeys, algs, kr)
-               if err != nil {
-                       t.Fatalf("newPacketCipher(client): %v", err)
-               }
-
-               fresh := &bytes.Buffer{}
-               fresh.Write(buf.Bytes())
-               fresh.Bytes()[i] ^= 0x01
-
-               before := fresh.Len()
-               _, err = server.readPacket(0, fresh)
-               if err == nil {
-                       t.Errorf("corrupt byte %d: readPacket succeeded ", i)
-                       continue
-               }
-               if _, ok := err.(cbcError); !ok {
-                       t.Errorf("corrupt byte %d: got %v (%T), want cbcError", 
i, err, err)
-                       continue
-               }
-
-               after := fresh.Len()
-               bytesRead := before - after
-               if bytesRead < maxPacket {
-                       t.Errorf("corrupt byte %d: read %d bytes, want more 
than %d", i, bytesRead, maxPacket)
-                       continue
-               }
-
-               if i > 0 && bytesRead != lastRead {
-                       t.Errorf("corrupt byte %d: read %d bytes, want %d bytes 
read", i, bytesRead, lastRead)
-               }
-               lastRead = bytesRead
-       }
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/client.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/client.go 
b/cli/vendor/golang.org/x/crypto/ssh/client.go
deleted file mode 100644
index 0b9fbe5..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/client.go
+++ /dev/null
@@ -1,213 +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 (
-       "errors"
-       "fmt"
-       "net"
-       "sync"
-)
-
-// Client implements a traditional SSH client that supports shells,
-// subprocesses, port forwarding and tunneled dialing.
-type Client struct {
-       Conn
-
-       forwards        forwardList // forwarded tcpip connections from the 
remote side
-       mu              sync.Mutex
-       channelHandlers map[string]chan NewChannel
-}
-
-// HandleChannelOpen returns a channel on which NewChannel requests
-// for the given type are sent. If the type already is being handled,
-// nil is returned. The channel is closed when the connection is closed.
-func (c *Client) HandleChannelOpen(channelType string) <-chan NewChannel {
-       c.mu.Lock()
-       defer c.mu.Unlock()
-       if c.channelHandlers == nil {
-               // The SSH channel has been closed.
-               c := make(chan NewChannel)
-               close(c)
-               return c
-       }
-
-       ch := c.channelHandlers[channelType]
-       if ch != nil {
-               return nil
-       }
-
-       ch = make(chan NewChannel, 16)
-       c.channelHandlers[channelType] = ch
-       return ch
-}
-
-// NewClient creates a Client on top of the given connection.
-func NewClient(c Conn, chans <-chan NewChannel, reqs <-chan *Request) *Client {
-       conn := &Client{
-               Conn:            c,
-               channelHandlers: make(map[string]chan NewChannel, 1),
-       }
-
-       go conn.handleGlobalRequests(reqs)
-       go conn.handleChannelOpens(chans)
-       go func() {
-               conn.Wait()
-               conn.forwards.closeAll()
-       }()
-       go 
conn.forwards.handleChannels(conn.HandleChannelOpen("forwarded-tcpip"))
-       return conn
-}
-
-// NewClientConn establishes an authenticated SSH connection using c
-// as the underlying transport.  The Request and NewChannel channels
-// must be serviced or the connection will hang.
-func NewClientConn(c net.Conn, addr string, config *ClientConfig) (Conn, 
<-chan NewChannel, <-chan *Request, error) {
-       fullConf := *config
-       fullConf.SetDefaults()
-       conn := &connection{
-               sshConn: sshConn{conn: c},
-       }
-
-       if err := conn.clientHandshake(addr, &fullConf); err != nil {
-               c.Close()
-               return nil, nil, nil, fmt.Errorf("ssh: handshake failed: %v", 
err)
-       }
-       conn.mux = newMux(conn.transport)
-       return conn, conn.mux.incomingChannels, conn.mux.incomingRequests, nil
-}
-
-// clientHandshake performs the client side key exchange. See RFC 4253 Section
-// 7.
-func (c *connection) clientHandshake(dialAddress string, config *ClientConfig) 
error {
-       if config.ClientVersion != "" {
-               c.clientVersion = []byte(config.ClientVersion)
-       } else {
-               c.clientVersion = []byte(packageVersion)
-       }
-       var err error
-       c.serverVersion, err = exchangeVersions(c.sshConn.conn, c.clientVersion)
-       if err != nil {
-               return err
-       }
-
-       c.transport = newClientTransport(
-               newTransport(c.sshConn.conn, config.Rand, true /* is client */),
-               c.clientVersion, c.serverVersion, config, dialAddress, 
c.sshConn.RemoteAddr())
-       if err := c.transport.requestKeyChange(); err != nil {
-               return err
-       }
-
-       if packet, err := c.transport.readPacket(); err != nil {
-               return err
-       } else if packet[0] != msgNewKeys {
-               return unexpectedMessageError(msgNewKeys, packet[0])
-       }
-
-       // We just did the key change, so the session ID is established.
-       c.sessionID = c.transport.getSessionID()
-
-       return c.clientAuthenticate(config)
-}
-
-// verifyHostKeySignature verifies the host key obtained in the key
-// exchange.
-func verifyHostKeySignature(hostKey PublicKey, result *kexResult) error {
-       sig, rest, ok := parseSignatureBody(result.Signature)
-       if len(rest) > 0 || !ok {
-               return errors.New("ssh: signature parse error")
-       }
-
-       return hostKey.Verify(result.H, sig)
-}
-
-// NewSession opens a new Session for this client. (A session is a remote
-// execution of a program.)
-func (c *Client) NewSession() (*Session, error) {
-       ch, in, err := c.OpenChannel("session", nil)
-       if err != nil {
-               return nil, err
-       }
-       return newSession(ch, in)
-}
-
-func (c *Client) handleGlobalRequests(incoming <-chan *Request) {
-       for r := range incoming {
-               // This handles keepalive messages and matches
-               // the behaviour of OpenSSH.
-               r.Reply(false, nil)
-       }
-}
-
-// handleChannelOpens channel open messages from the remote side.
-func (c *Client) handleChannelOpens(in <-chan NewChannel) {
-       for ch := range in {
-               c.mu.Lock()
-               handler := c.channelHandlers[ch.ChannelType()]
-               c.mu.Unlock()
-
-               if handler != nil {
-                       handler <- ch
-               } else {
-                       ch.Reject(UnknownChannelType, fmt.Sprintf("unknown 
channel type: %v", ch.ChannelType()))
-               }
-       }
-
-       c.mu.Lock()
-       for _, ch := range c.channelHandlers {
-               close(ch)
-       }
-       c.channelHandlers = nil
-       c.mu.Unlock()
-}
-
-// Dial starts a client connection to the given SSH server. It is a
-// convenience function that connects to the given network address,
-// initiates the SSH handshake, and then sets up a Client.  For access
-// to incoming channels and requests, use net.Dial with NewClientConn
-// instead.
-func Dial(network, addr string, config *ClientConfig) (*Client, error) {
-       conn, err := net.Dial(network, addr)
-       if err != nil {
-               return nil, err
-       }
-       c, chans, reqs, err := NewClientConn(conn, addr, config)
-       if err != nil {
-               return nil, err
-       }
-       return NewClient(c, chans, reqs), nil
-}
-
-// A ClientConfig structure is used to configure a Client. It must not be
-// modified after having been passed to an SSH function.
-type ClientConfig struct {
-       // Config contains configuration that is shared between clients and
-       // servers.
-       Config
-
-       // User contains the username to authenticate as.
-       User string
-
-       // Auth contains possible authentication methods to use with the
-       // server. Only the first instance of a particular RFC 4252 method will
-       // be used during authentication.
-       Auth []AuthMethod
-
-       // HostKeyCallback, if not nil, is called during the cryptographic
-       // handshake to validate the server's host key. A nil HostKeyCallback
-       // implies that all host keys are accepted.
-       HostKeyCallback func(hostname string, remote net.Addr, key PublicKey) 
error
-
-       // ClientVersion contains the version identification string that will
-       // be used for the connection. If empty, a reasonable default is used.
-       ClientVersion string
-
-       // HostKeyAlgorithms lists the key types that the client will
-       // accept from the server as host key, in order of
-       // preference. If empty, a reasonable default is used. Any
-       // string returned from PublicKey.Type method may be used, or
-       // any of the CertAlgoXxxx and KeyAlgoXxxx constants.
-       HostKeyAlgorithms []string
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/client_auth.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/client_auth.go 
b/cli/vendor/golang.org/x/crypto/ssh/client_auth.go
deleted file mode 100644
index e15be3e..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/client_auth.go
+++ /dev/null
@@ -1,441 +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"
-       "errors"
-       "fmt"
-       "io"
-)
-
-// clientAuthenticate authenticates with the remote server. See RFC 4252.
-func (c *connection) clientAuthenticate(config *ClientConfig) error {
-       // initiate user auth session
-       if err := 
c.transport.writePacket(Marshal(&serviceRequestMsg{serviceUserAuth})); err != 
nil {
-               return err
-       }
-       packet, err := c.transport.readPacket()
-       if err != nil {
-               return err
-       }
-       var serviceAccept serviceAcceptMsg
-       if err := Unmarshal(packet, &serviceAccept); err != nil {
-               return err
-       }
-
-       // during the authentication phase the client first attempts the "none" 
method
-       // then any untried methods suggested by the server.
-       tried := make(map[string]bool)
-       var lastMethods []string
-       for auth := AuthMethod(new(noneAuth)); auth != nil; {
-               ok, methods, err := auth.auth(c.transport.getSessionID(), 
config.User, c.transport, config.Rand)
-               if err != nil {
-                       return err
-               }
-               if ok {
-                       // success
-                       return nil
-               }
-               tried[auth.method()] = true
-               if methods == nil {
-                       methods = lastMethods
-               }
-               lastMethods = methods
-
-               auth = nil
-
-       findNext:
-               for _, a := range config.Auth {
-                       candidateMethod := a.method()
-                       if tried[candidateMethod] {
-                               continue
-                       }
-                       for _, meth := range methods {
-                               if meth == candidateMethod {
-                                       auth = a
-                                       break findNext
-                               }
-                       }
-               }
-       }
-       return fmt.Errorf("ssh: unable to authenticate, attempted methods %v, 
no supported methods remain", keys(tried))
-}
-
-func keys(m map[string]bool) []string {
-       s := make([]string, 0, len(m))
-
-       for key := range m {
-               s = append(s, key)
-       }
-       return s
-}
-
-// An AuthMethod represents an instance of an RFC 4252 authentication method.
-type AuthMethod interface {
-       // auth authenticates user over transport t.
-       // Returns true if authentication is successful.
-       // If authentication is not successful, a []string of alternative
-       // method names is returned. If the slice is nil, it will be ignored
-       // and the previous set of possible methods will be reused.
-       auth(session []byte, user string, p packetConn, rand io.Reader) (bool, 
[]string, error)
-
-       // method returns the RFC 4252 method name.
-       method() string
-}
-
-// "none" authentication, RFC 4252 section 5.2.
-type noneAuth int
-
-func (n *noneAuth) auth(session []byte, user string, c packetConn, rand 
io.Reader) (bool, []string, error) {
-       if err := c.writePacket(Marshal(&userAuthRequestMsg{
-               User:    user,
-               Service: serviceSSH,
-               Method:  "none",
-       })); err != nil {
-               return false, nil, err
-       }
-
-       return handleAuthResponse(c)
-}
-
-func (n *noneAuth) method() string {
-       return "none"
-}
-
-// passwordCallback is an AuthMethod that fetches the password through
-// a function call, e.g. by prompting the user.
-type passwordCallback func() (password string, err error)
-
-func (cb passwordCallback) auth(session []byte, user string, c packetConn, 
rand io.Reader) (bool, []string, error) {
-       type passwordAuthMsg struct {
-               User     string `sshtype:"50"`
-               Service  string
-               Method   string
-               Reply    bool
-               Password string
-       }
-
-       pw, err := cb()
-       // REVIEW NOTE: is there a need to support skipping a password attempt?
-       // The program may only find out that the user doesn't have a password
-       // when prompting.
-       if err != nil {
-               return false, nil, err
-       }
-
-       if err := c.writePacket(Marshal(&passwordAuthMsg{
-               User:     user,
-               Service:  serviceSSH,
-               Method:   cb.method(),
-               Reply:    false,
-               Password: pw,
-       })); err != nil {
-               return false, nil, err
-       }
-
-       return handleAuthResponse(c)
-}
-
-func (cb passwordCallback) method() string {
-       return "password"
-}
-
-// Password returns an AuthMethod using the given password.
-func Password(secret string) AuthMethod {
-       return passwordCallback(func() (string, error) { return secret, nil })
-}
-
-// PasswordCallback returns an AuthMethod that uses a callback for
-// fetching a password.
-func PasswordCallback(prompt func() (secret string, err error)) AuthMethod {
-       return passwordCallback(prompt)
-}
-
-type publickeyAuthMsg struct {
-       User    string `sshtype:"50"`
-       Service string
-       Method  string
-       // HasSig indicates to the receiver packet that the auth request is 
signed and
-       // should be used for authentication of the request.
-       HasSig   bool
-       Algoname string
-       PubKey   []byte
-       // Sig is tagged with "rest" so Marshal will exclude it during
-       // validateKey
-       Sig []byte `ssh:"rest"`
-}
-
-// publicKeyCallback is an AuthMethod that uses a set of key
-// pairs for authentication.
-type publicKeyCallback func() ([]Signer, error)
-
-func (cb publicKeyCallback) method() string {
-       return "publickey"
-}
-
-func (cb publicKeyCallback) auth(session []byte, user string, c packetConn, 
rand io.Reader) (bool, []string, error) {
-       // Authentication is performed in two stages. The first stage sends an
-       // enquiry to test if each key is acceptable to the remote. The second
-       // stage attempts to authenticate with the valid keys obtained in the
-       // first stage.
-
-       signers, err := cb()
-       if err != nil {
-               return false, nil, err
-       }
-       var validKeys []Signer
-       for _, signer := range signers {
-               if ok, err := validateKey(signer.PublicKey(), user, c); ok {
-                       validKeys = append(validKeys, signer)
-               } else {
-                       if err != nil {
-                               return false, nil, err
-                       }
-               }
-       }
-
-       // methods that may continue if this auth is not successful.
-       var methods []string
-       for _, signer := range validKeys {
-               pub := signer.PublicKey()
-
-               pubKey := pub.Marshal()
-               sign, err := signer.Sign(rand, buildDataSignedForAuth(session, 
userAuthRequestMsg{
-                       User:    user,
-                       Service: serviceSSH,
-                       Method:  cb.method(),
-               }, []byte(pub.Type()), pubKey))
-               if err != nil {
-                       return false, nil, err
-               }
-
-               // manually wrap the serialized signature in a string
-               s := Marshal(sign)
-               sig := make([]byte, stringLength(len(s)))
-               marshalString(sig, s)
-               msg := publickeyAuthMsg{
-                       User:     user,
-                       Service:  serviceSSH,
-                       Method:   cb.method(),
-                       HasSig:   true,
-                       Algoname: pub.Type(),
-                       PubKey:   pubKey,
-                       Sig:      sig,
-               }
-               p := Marshal(&msg)
-               if err := c.writePacket(p); err != nil {
-                       return false, nil, err
-               }
-               var success bool
-               success, methods, err = handleAuthResponse(c)
-               if err != nil {
-                       return false, nil, err
-               }
-               if success {
-                       return success, methods, err
-               }
-       }
-       return false, methods, nil
-}
-
-// validateKey validates the key provided is acceptable to the server.
-func validateKey(key PublicKey, user string, c packetConn) (bool, error) {
-       pubKey := key.Marshal()
-       msg := publickeyAuthMsg{
-               User:     user,
-               Service:  serviceSSH,
-               Method:   "publickey",
-               HasSig:   false,
-               Algoname: key.Type(),
-               PubKey:   pubKey,
-       }
-       if err := c.writePacket(Marshal(&msg)); err != nil {
-               return false, err
-       }
-
-       return confirmKeyAck(key, c)
-}
-
-func confirmKeyAck(key PublicKey, c packetConn) (bool, error) {
-       pubKey := key.Marshal()
-       algoname := key.Type()
-
-       for {
-               packet, err := c.readPacket()
-               if err != nil {
-                       return false, err
-               }
-               switch packet[0] {
-               case msgUserAuthBanner:
-                       // TODO(gpaul): add callback to present the banner to 
the user
-               case msgUserAuthPubKeyOk:
-                       var msg userAuthPubKeyOkMsg
-                       if err := Unmarshal(packet, &msg); err != nil {
-                               return false, err
-                       }
-                       if msg.Algo != algoname || !bytes.Equal(msg.PubKey, 
pubKey) {
-                               return false, nil
-                       }
-                       return true, nil
-               case msgUserAuthFailure:
-                       return false, nil
-               default:
-                       return false, 
unexpectedMessageError(msgUserAuthSuccess, packet[0])
-               }
-       }
-}
-
-// PublicKeys returns an AuthMethod that uses the given key
-// pairs.
-func PublicKeys(signers ...Signer) AuthMethod {
-       return publicKeyCallback(func() ([]Signer, error) { return signers, nil 
})
-}
-
-// PublicKeysCallback returns an AuthMethod that runs the given
-// function to obtain a list of key pairs.
-func PublicKeysCallback(getSigners func() (signers []Signer, err error)) 
AuthMethod {
-       return publicKeyCallback(getSigners)
-}
-
-// handleAuthResponse returns whether the preceding authentication request 
succeeded
-// along with a list of remaining authentication methods to try next and
-// an error if an unexpected response was received.
-func handleAuthResponse(c packetConn) (bool, []string, error) {
-       for {
-               packet, err := c.readPacket()
-               if err != nil {
-                       return false, nil, err
-               }
-
-               switch packet[0] {
-               case msgUserAuthBanner:
-                       // TODO: add callback to present the banner to the user
-               case msgUserAuthFailure:
-                       var msg userAuthFailureMsg
-                       if err := Unmarshal(packet, &msg); err != nil {
-                               return false, nil, err
-                       }
-                       return false, msg.Methods, nil
-               case msgUserAuthSuccess:
-                       return true, nil, nil
-               case msgDisconnect:
-                       return false, nil, io.EOF
-               default:
-                       return false, nil, 
unexpectedMessageError(msgUserAuthSuccess, packet[0])
-               }
-       }
-}
-
-// KeyboardInteractiveChallenge should print questions, optionally
-// disabling echoing (e.g. for passwords), and return all the answers.
-// Challenge may be called multiple times in a single session. After
-// successful authentication, the server may send a challenge with no
-// questions, for which the user and instruction messages should be
-// printed.  RFC 4256 section 3.3 details how the UI should behave for
-// both CLI and GUI environments.
-type KeyboardInteractiveChallenge func(user, instruction string, questions 
[]string, echos []bool) (answers []string, err error)
-
-// KeyboardInteractive returns a AuthMethod using a prompt/response
-// sequence controlled by the server.
-func KeyboardInteractive(challenge KeyboardInteractiveChallenge) AuthMethod {
-       return challenge
-}
-
-func (cb KeyboardInteractiveChallenge) method() string {
-       return "keyboard-interactive"
-}
-
-func (cb KeyboardInteractiveChallenge) auth(session []byte, user string, c 
packetConn, rand io.Reader) (bool, []string, error) {
-       type initiateMsg struct {
-               User       string `sshtype:"50"`
-               Service    string
-               Method     string
-               Language   string
-               Submethods string
-       }
-
-       if err := c.writePacket(Marshal(&initiateMsg{
-               User:    user,
-               Service: serviceSSH,
-               Method:  "keyboard-interactive",
-       })); err != nil {
-               return false, nil, err
-       }
-
-       for {
-               packet, err := c.readPacket()
-               if err != nil {
-                       return false, nil, err
-               }
-
-               // like handleAuthResponse, but with less options.
-               switch packet[0] {
-               case msgUserAuthBanner:
-                       // TODO: Print banners during userauth.
-                       continue
-               case msgUserAuthInfoRequest:
-                       // OK
-               case msgUserAuthFailure:
-                       var msg userAuthFailureMsg
-                       if err := Unmarshal(packet, &msg); err != nil {
-                               return false, nil, err
-                       }
-                       return false, msg.Methods, nil
-               case msgUserAuthSuccess:
-                       return true, nil, nil
-               default:
-                       return false, nil, 
unexpectedMessageError(msgUserAuthInfoRequest, packet[0])
-               }
-
-               var msg userAuthInfoRequestMsg
-               if err := Unmarshal(packet, &msg); err != nil {
-                       return false, nil, err
-               }
-
-               // Manually unpack the prompt/echo pairs.
-               rest := msg.Prompts
-               var prompts []string
-               var echos []bool
-               for i := 0; i < int(msg.NumPrompts); i++ {
-                       prompt, r, ok := parseString(rest)
-                       if !ok || len(r) == 0 {
-                               return false, nil, errors.New("ssh: prompt 
format error")
-                       }
-                       prompts = append(prompts, string(prompt))
-                       echos = append(echos, r[0] != 0)
-                       rest = r[1:]
-               }
-
-               if len(rest) != 0 {
-                       return false, nil, errors.New("ssh: extra data 
following keyboard-interactive pairs")
-               }
-
-               answers, err := cb(msg.User, msg.Instruction, prompts, echos)
-               if err != nil {
-                       return false, nil, err
-               }
-
-               if len(answers) != len(prompts) {
-                       return false, nil, errors.New("ssh: not enough answers 
from keyboard-interactive callback")
-               }
-               responseLength := 1 + 4
-               for _, a := range answers {
-                       responseLength += stringLength(len(a))
-               }
-               serialized := make([]byte, responseLength)
-               p := serialized
-               p[0] = msgUserAuthInfoResponse
-               p = p[1:]
-               p = marshalUint32(p, uint32(len(answers)))
-               for _, a := range answers {
-                       p = marshalString(p, []byte(a))
-               }
-
-               if err := c.writePacket(serialized); err != nil {
-                       return false, nil, err
-               }
-       }
-}

Reply via email to