http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/client_auth_test.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/client_auth_test.go 
b/cli/vendor/golang.org/x/crypto/ssh/client_auth_test.go
deleted file mode 100644
index 2ea4462..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/client_auth_test.go
+++ /dev/null
@@ -1,393 +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/rand"
-       "errors"
-       "fmt"
-       "strings"
-       "testing"
-)
-
-type keyboardInteractive map[string]string
-
-func (cr keyboardInteractive) Challenge(user string, instruction string, 
questions []string, echos []bool) ([]string, error) {
-       var answers []string
-       for _, q := range questions {
-               answers = append(answers, cr[q])
-       }
-       return answers, nil
-}
-
-// reused internally by tests
-var clientPassword = "tiger"
-
-// tryAuth runs a handshake with a given config against an SSH server
-// with config serverConfig
-func tryAuth(t *testing.T, config *ClientConfig) error {
-       c1, c2, err := netPipe()
-       if err != nil {
-               t.Fatalf("netPipe: %v", err)
-       }
-       defer c1.Close()
-       defer c2.Close()
-
-       certChecker := CertChecker{
-               IsAuthority: func(k PublicKey) bool {
-                       return bytes.Equal(k.Marshal(), 
testPublicKeys["ecdsa"].Marshal())
-               },
-               UserKeyFallback: func(conn ConnMetadata, key PublicKey) 
(*Permissions, error) {
-                       if conn.User() == "testuser" && 
bytes.Equal(key.Marshal(), testPublicKeys["rsa"].Marshal()) {
-                               return nil, nil
-                       }
-
-                       return nil, fmt.Errorf("pubkey for %q not acceptable", 
conn.User())
-               },
-               IsRevoked: func(c *Certificate) bool {
-                       return c.Serial == 666
-               },
-       }
-
-       serverConfig := &ServerConfig{
-               PasswordCallback: func(conn ConnMetadata, pass []byte) 
(*Permissions, error) {
-                       if conn.User() == "testuser" && string(pass) == 
clientPassword {
-                               return nil, nil
-                       }
-                       return nil, errors.New("password auth failed")
-               },
-               PublicKeyCallback: certChecker.Authenticate,
-               KeyboardInteractiveCallback: func(conn ConnMetadata, challenge 
KeyboardInteractiveChallenge) (*Permissions, error) {
-                       ans, err := challenge("user",
-                               "instruction",
-                               []string{"question1", "question2"},
-                               []bool{true, true})
-                       if err != nil {
-                               return nil, err
-                       }
-                       ok := conn.User() == "testuser" && ans[0] == "answer1" 
&& ans[1] == "answer2"
-                       if ok {
-                               challenge("user", "motd", nil, nil)
-                               return nil, nil
-                       }
-                       return nil, errors.New("keyboard-interactive failed")
-               },
-               AuthLogCallback: func(conn ConnMetadata, method string, err 
error) {
-                       t.Logf("user %q, method %q: %v", conn.User(), method, 
err)
-               },
-       }
-       serverConfig.AddHostKey(testSigners["rsa"])
-
-       go newServer(c1, serverConfig)
-       _, _, _, err = NewClientConn(c2, "", config)
-       return err
-}
-
-func TestClientAuthPublicKey(t *testing.T) {
-       config := &ClientConfig{
-               User: "testuser",
-               Auth: []AuthMethod{
-                       PublicKeys(testSigners["rsa"]),
-               },
-       }
-       if err := tryAuth(t, config); err != nil {
-               t.Fatalf("unable to dial remote side: %s", err)
-       }
-}
-
-func TestAuthMethodPassword(t *testing.T) {
-       config := &ClientConfig{
-               User: "testuser",
-               Auth: []AuthMethod{
-                       Password(clientPassword),
-               },
-       }
-
-       if err := tryAuth(t, config); err != nil {
-               t.Fatalf("unable to dial remote side: %s", err)
-       }
-}
-
-func TestAuthMethodFallback(t *testing.T) {
-       var passwordCalled bool
-       config := &ClientConfig{
-               User: "testuser",
-               Auth: []AuthMethod{
-                       PublicKeys(testSigners["rsa"]),
-                       PasswordCallback(
-                               func() (string, error) {
-                                       passwordCalled = true
-                                       return "WRONG", nil
-                               }),
-               },
-       }
-
-       if err := tryAuth(t, config); err != nil {
-               t.Fatalf("unable to dial remote side: %s", err)
-       }
-
-       if passwordCalled {
-               t.Errorf("password auth tried before public-key auth.")
-       }
-}
-
-func TestAuthMethodWrongPassword(t *testing.T) {
-       config := &ClientConfig{
-               User: "testuser",
-               Auth: []AuthMethod{
-                       Password("wrong"),
-                       PublicKeys(testSigners["rsa"]),
-               },
-       }
-
-       if err := tryAuth(t, config); err != nil {
-               t.Fatalf("unable to dial remote side: %s", err)
-       }
-}
-
-func TestAuthMethodKeyboardInteractive(t *testing.T) {
-       answers := keyboardInteractive(map[string]string{
-               "question1": "answer1",
-               "question2": "answer2",
-       })
-       config := &ClientConfig{
-               User: "testuser",
-               Auth: []AuthMethod{
-                       KeyboardInteractive(answers.Challenge),
-               },
-       }
-
-       if err := tryAuth(t, config); err != nil {
-               t.Fatalf("unable to dial remote side: %s", err)
-       }
-}
-
-func TestAuthMethodWrongKeyboardInteractive(t *testing.T) {
-       answers := keyboardInteractive(map[string]string{
-               "question1": "answer1",
-               "question2": "WRONG",
-       })
-       config := &ClientConfig{
-               User: "testuser",
-               Auth: []AuthMethod{
-                       KeyboardInteractive(answers.Challenge),
-               },
-       }
-
-       if err := tryAuth(t, config); err == nil {
-               t.Fatalf("wrong answers should not have authenticated with 
KeyboardInteractive")
-       }
-}
-
-// the mock server will only authenticate ssh-rsa keys
-func TestAuthMethodInvalidPublicKey(t *testing.T) {
-       config := &ClientConfig{
-               User: "testuser",
-               Auth: []AuthMethod{
-                       PublicKeys(testSigners["dsa"]),
-               },
-       }
-
-       if err := tryAuth(t, config); err == nil {
-               t.Fatalf("dsa private key should not have authenticated with 
rsa public key")
-       }
-}
-
-// the client should authenticate with the second key
-func TestAuthMethodRSAandDSA(t *testing.T) {
-       config := &ClientConfig{
-               User: "testuser",
-               Auth: []AuthMethod{
-                       PublicKeys(testSigners["dsa"], testSigners["rsa"]),
-               },
-       }
-       if err := tryAuth(t, config); err != nil {
-               t.Fatalf("client could not authenticate with rsa key: %v", err)
-       }
-}
-
-func TestClientHMAC(t *testing.T) {
-       for _, mac := range supportedMACs {
-               config := &ClientConfig{
-                       User: "testuser",
-                       Auth: []AuthMethod{
-                               PublicKeys(testSigners["rsa"]),
-                       },
-                       Config: Config{
-                               MACs: []string{mac},
-                       },
-               }
-               if err := tryAuth(t, config); err != nil {
-                       t.Fatalf("client could not authenticate with mac algo 
%s: %v", mac, err)
-               }
-       }
-}
-
-// issue 4285.
-func TestClientUnsupportedCipher(t *testing.T) {
-       config := &ClientConfig{
-               User: "testuser",
-               Auth: []AuthMethod{
-                       PublicKeys(),
-               },
-               Config: Config{
-                       Ciphers: []string{"aes128-cbc"}, // not currently 
supported
-               },
-       }
-       if err := tryAuth(t, config); err == nil {
-               t.Errorf("expected no ciphers in common")
-       }
-}
-
-func TestClientUnsupportedKex(t *testing.T) {
-       config := &ClientConfig{
-               User: "testuser",
-               Auth: []AuthMethod{
-                       PublicKeys(),
-               },
-               Config: Config{
-                       KeyExchanges: 
[]string{"diffie-hellman-group-exchange-sha256"}, // not currently supported
-               },
-       }
-       if err := tryAuth(t, config); err == nil || 
!strings.Contains(err.Error(), "common algorithm") {
-               t.Errorf("got %v, expected 'common algorithm'", err)
-       }
-}
-
-func TestClientLoginCert(t *testing.T) {
-       cert := &Certificate{
-               Key:         testPublicKeys["rsa"],
-               ValidBefore: CertTimeInfinity,
-               CertType:    UserCert,
-       }
-       cert.SignCert(rand.Reader, testSigners["ecdsa"])
-       certSigner, err := NewCertSigner(cert, testSigners["rsa"])
-       if err != nil {
-               t.Fatalf("NewCertSigner: %v", err)
-       }
-
-       clientConfig := &ClientConfig{
-               User: "user",
-       }
-       clientConfig.Auth = append(clientConfig.Auth, PublicKeys(certSigner))
-
-       t.Log("should succeed")
-       if err := tryAuth(t, clientConfig); err != nil {
-               t.Errorf("cert login failed: %v", err)
-       }
-
-       t.Log("corrupted signature")
-       cert.Signature.Blob[0]++
-       if err := tryAuth(t, clientConfig); err == nil {
-               t.Errorf("cert login passed with corrupted sig")
-       }
-
-       t.Log("revoked")
-       cert.Serial = 666
-       cert.SignCert(rand.Reader, testSigners["ecdsa"])
-       if err := tryAuth(t, clientConfig); err == nil {
-               t.Errorf("revoked cert login succeeded")
-       }
-       cert.Serial = 1
-
-       t.Log("sign with wrong key")
-       cert.SignCert(rand.Reader, testSigners["dsa"])
-       if err := tryAuth(t, clientConfig); err == nil {
-               t.Errorf("cert login passed with non-authoritive key")
-       }
-
-       t.Log("host cert")
-       cert.CertType = HostCert
-       cert.SignCert(rand.Reader, testSigners["ecdsa"])
-       if err := tryAuth(t, clientConfig); err == nil {
-               t.Errorf("cert login passed with wrong type")
-       }
-       cert.CertType = UserCert
-
-       t.Log("principal specified")
-       cert.ValidPrincipals = []string{"user"}
-       cert.SignCert(rand.Reader, testSigners["ecdsa"])
-       if err := tryAuth(t, clientConfig); err != nil {
-               t.Errorf("cert login failed: %v", err)
-       }
-
-       t.Log("wrong principal specified")
-       cert.ValidPrincipals = []string{"fred"}
-       cert.SignCert(rand.Reader, testSigners["ecdsa"])
-       if err := tryAuth(t, clientConfig); err == nil {
-               t.Errorf("cert login passed with wrong principal")
-       }
-       cert.ValidPrincipals = nil
-
-       t.Log("added critical option")
-       cert.CriticalOptions = map[string]string{"root-access": "yes"}
-       cert.SignCert(rand.Reader, testSigners["ecdsa"])
-       if err := tryAuth(t, clientConfig); err == nil {
-               t.Errorf("cert login passed with unrecognized critical option")
-       }
-
-       t.Log("allowed source address")
-       cert.CriticalOptions = map[string]string{"source-address": 
"127.0.0.42/24"}
-       cert.SignCert(rand.Reader, testSigners["ecdsa"])
-       if err := tryAuth(t, clientConfig); err != nil {
-               t.Errorf("cert login with source-address failed: %v", err)
-       }
-
-       t.Log("disallowed source address")
-       cert.CriticalOptions = map[string]string{"source-address": "127.0.0.42"}
-       cert.SignCert(rand.Reader, testSigners["ecdsa"])
-       if err := tryAuth(t, clientConfig); err == nil {
-               t.Errorf("cert login with source-address succeeded")
-       }
-}
-
-func testPermissionsPassing(withPermissions bool, t *testing.T) {
-       serverConfig := &ServerConfig{
-               PublicKeyCallback: func(conn ConnMetadata, key PublicKey) 
(*Permissions, error) {
-                       if conn.User() == "nopermissions" {
-                               return nil, nil
-                       } else {
-                               return &Permissions{}, nil
-                       }
-               },
-       }
-       serverConfig.AddHostKey(testSigners["rsa"])
-
-       clientConfig := &ClientConfig{
-               Auth: []AuthMethod{
-                       PublicKeys(testSigners["rsa"]),
-               },
-       }
-       if withPermissions {
-               clientConfig.User = "permissions"
-       } else {
-               clientConfig.User = "nopermissions"
-       }
-
-       c1, c2, err := netPipe()
-       if err != nil {
-               t.Fatalf("netPipe: %v", err)
-       }
-       defer c1.Close()
-       defer c2.Close()
-
-       go NewClientConn(c2, "", clientConfig)
-       serverConn, err := newServer(c1, serverConfig)
-       if err != nil {
-               t.Fatal(err)
-       }
-       if p := serverConn.Permissions; (p != nil) != withPermissions {
-               t.Fatalf("withPermissions is %t, but Permissions object is 
%#v", withPermissions, p)
-       }
-}
-
-func TestPermissionsPassing(t *testing.T) {
-       testPermissionsPassing(true, t)
-}
-
-func TestNoPermissionsPassing(t *testing.T) {
-       testPermissionsPassing(false, t)
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/client_test.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/client_test.go 
b/cli/vendor/golang.org/x/crypto/ssh/client_test.go
deleted file mode 100644
index 1fe790c..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/client_test.go
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ssh
-
-import (
-       "net"
-       "testing"
-)
-
-func testClientVersion(t *testing.T, config *ClientConfig, expected string) {
-       clientConn, serverConn := net.Pipe()
-       defer clientConn.Close()
-       receivedVersion := make(chan string, 1)
-       go func() {
-               version, err := readVersion(serverConn)
-               if err != nil {
-                       receivedVersion <- ""
-               } else {
-                       receivedVersion <- string(version)
-               }
-               serverConn.Close()
-       }()
-       NewClientConn(clientConn, "", config)
-       actual := <-receivedVersion
-       if actual != expected {
-               t.Fatalf("got %s; want %s", actual, expected)
-       }
-}
-
-func TestCustomClientVersion(t *testing.T) {
-       version := "Test-Client-Version-0.0"
-       testClientVersion(t, &ClientConfig{ClientVersion: version}, version)
-}
-
-func TestDefaultClientVersion(t *testing.T) {
-       testClientVersion(t, &ClientConfig{}, packageVersion)
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/common.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/common.go 
b/cli/vendor/golang.org/x/crypto/ssh/common.go
deleted file mode 100644
index 9fc739e..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/common.go
+++ /dev/null
@@ -1,354 +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"
-       "crypto/rand"
-       "fmt"
-       "io"
-       "sync"
-
-       _ "crypto/sha1"
-       _ "crypto/sha256"
-       _ "crypto/sha512"
-)
-
-// These are string constants in the SSH protocol.
-const (
-       compressionNone = "none"
-       serviceUserAuth = "ssh-userauth"
-       serviceSSH      = "ssh-connection"
-)
-
-// supportedCiphers specifies the supported ciphers in preference order.
-var supportedCiphers = []string{
-       "aes128-ctr", "aes192-ctr", "aes256-ctr",
-       "aes128-...@openssh.com",
-       "arcfour256", "arcfour128",
-}
-
-// supportedKexAlgos specifies the supported key-exchange algorithms in
-// preference order.
-var supportedKexAlgos = []string{
-       kexAlgoCurve25519SHA256,
-       // P384 and P521 are not constant-time yet, but since we don't
-       // reuse ephemeral keys, using them for ECDH should be OK.
-       kexAlgoECDH256, kexAlgoECDH384, kexAlgoECDH521,
-       kexAlgoDH14SHA1, kexAlgoDH1SHA1,
-}
-
-// supportedKexAlgos specifies the supported host-key algorithms (i.e. methods
-// of authenticating servers) in preference order.
-var supportedHostKeyAlgos = []string{
-       CertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01,
-       CertAlgoECDSA384v01, CertAlgoECDSA521v01,
-
-       KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521,
-       KeyAlgoRSA, KeyAlgoDSA,
-}
-
-// supportedMACs specifies a default set of MAC algorithms in preference order.
-// This is based on RFC 4253, section 6.4, but with hmac-md5 variants removed
-// because they have reached the end of their useful life.
-var supportedMACs = []string{
-       "hmac-sha2-256", "hmac-sha1", "hmac-sha1-96",
-}
-
-var supportedCompressions = []string{compressionNone}
-
-// hashFuncs keeps the mapping of supported algorithms to their respective
-// hashes needed for signature verification.
-var hashFuncs = map[string]crypto.Hash{
-       KeyAlgoRSA:          crypto.SHA1,
-       KeyAlgoDSA:          crypto.SHA1,
-       KeyAlgoECDSA256:     crypto.SHA256,
-       KeyAlgoECDSA384:     crypto.SHA384,
-       KeyAlgoECDSA521:     crypto.SHA512,
-       CertAlgoRSAv01:      crypto.SHA1,
-       CertAlgoDSAv01:      crypto.SHA1,
-       CertAlgoECDSA256v01: crypto.SHA256,
-       CertAlgoECDSA384v01: crypto.SHA384,
-       CertAlgoECDSA521v01: crypto.SHA512,
-}
-
-// unexpectedMessageError results when the SSH message that we received didn't
-// match what we wanted.
-func unexpectedMessageError(expected, got uint8) error {
-       return fmt.Errorf("ssh: unexpected message type %d (expected %d)", got, 
expected)
-}
-
-// parseError results from a malformed SSH message.
-func parseError(tag uint8) error {
-       return fmt.Errorf("ssh: parse error in message type %d", tag)
-}
-
-func findCommon(what string, client []string, server []string) (common string, 
err error) {
-       for _, c := range client {
-               for _, s := range server {
-                       if c == s {
-                               return c, nil
-                       }
-               }
-       }
-       return "", fmt.Errorf("ssh: no common algorithm for %s; client offered: 
%v, server offered: %v", what, client, server)
-}
-
-type directionAlgorithms struct {
-       Cipher      string
-       MAC         string
-       Compression string
-}
-
-type algorithms struct {
-       kex     string
-       hostKey string
-       w       directionAlgorithms
-       r       directionAlgorithms
-}
-
-func findAgreedAlgorithms(clientKexInit, serverKexInit *kexInitMsg) (algs 
*algorithms, err error) {
-       result := &algorithms{}
-
-       result.kex, err = findCommon("key exchange", clientKexInit.KexAlgos, 
serverKexInit.KexAlgos)
-       if err != nil {
-               return
-       }
-
-       result.hostKey, err = findCommon("host key", 
clientKexInit.ServerHostKeyAlgos, serverKexInit.ServerHostKeyAlgos)
-       if err != nil {
-               return
-       }
-
-       result.w.Cipher, err = findCommon("client to server cipher", 
clientKexInit.CiphersClientServer, serverKexInit.CiphersClientServer)
-       if err != nil {
-               return
-       }
-
-       result.r.Cipher, err = findCommon("server to client cipher", 
clientKexInit.CiphersServerClient, serverKexInit.CiphersServerClient)
-       if err != nil {
-               return
-       }
-
-       result.w.MAC, err = findCommon("client to server MAC", 
clientKexInit.MACsClientServer, serverKexInit.MACsClientServer)
-       if err != nil {
-               return
-       }
-
-       result.r.MAC, err = findCommon("server to client MAC", 
clientKexInit.MACsServerClient, serverKexInit.MACsServerClient)
-       if err != nil {
-               return
-       }
-
-       result.w.Compression, err = findCommon("client to server compression", 
clientKexInit.CompressionClientServer, serverKexInit.CompressionClientServer)
-       if err != nil {
-               return
-       }
-
-       result.r.Compression, err = findCommon("server to client compression", 
clientKexInit.CompressionServerClient, serverKexInit.CompressionServerClient)
-       if err != nil {
-               return
-       }
-
-       return result, nil
-}
-
-// If rekeythreshold is too small, we can't make any progress sending
-// stuff.
-const minRekeyThreshold uint64 = 256
-
-// Config contains configuration data common to both ServerConfig and
-// ClientConfig.
-type Config struct {
-       // Rand provides the source of entropy for cryptographic
-       // primitives. If Rand is nil, the cryptographic random reader
-       // in package crypto/rand will be used.
-       Rand io.Reader
-
-       // The maximum number of bytes sent or received after which a
-       // new key is negotiated. It must be at least 256. If
-       // unspecified, 1 gigabyte is used.
-       RekeyThreshold uint64
-
-       // The allowed key exchanges algorithms. If unspecified then a
-       // default set of algorithms is used.
-       KeyExchanges []string
-
-       // The allowed cipher algorithms. If unspecified then a sensible
-       // default is used.
-       Ciphers []string
-
-       // The allowed MAC algorithms. If unspecified then a sensible default
-       // is used.
-       MACs []string
-}
-
-// SetDefaults sets sensible values for unset fields in config. This is
-// exported for testing: Configs passed to SSH functions are copied and have
-// default values set automatically.
-func (c *Config) SetDefaults() {
-       if c.Rand == nil {
-               c.Rand = rand.Reader
-       }
-       if c.Ciphers == nil {
-               c.Ciphers = supportedCiphers
-       }
-       var ciphers []string
-       for _, c := range c.Ciphers {
-               if cipherModes[c] != nil {
-                       // reject the cipher if we have no cipherModes 
definition
-                       ciphers = append(ciphers, c)
-               }
-       }
-       c.Ciphers = ciphers
-
-       if c.KeyExchanges == nil {
-               c.KeyExchanges = supportedKexAlgos
-       }
-
-       if c.MACs == nil {
-               c.MACs = supportedMACs
-       }
-
-       if c.RekeyThreshold == 0 {
-               // RFC 4253, section 9 suggests rekeying after 1G.
-               c.RekeyThreshold = 1 << 30
-       }
-       if c.RekeyThreshold < minRekeyThreshold {
-               c.RekeyThreshold = minRekeyThreshold
-       }
-}
-
-// buildDataSignedForAuth returns the data that is signed in order to prove
-// possession of a private key. See RFC 4252, section 7.
-func buildDataSignedForAuth(sessionId []byte, req userAuthRequestMsg, algo, 
pubKey []byte) []byte {
-       data := struct {
-               Session []byte
-               Type    byte
-               User    string
-               Service string
-               Method  string
-               Sign    bool
-               Algo    []byte
-               PubKey  []byte
-       }{
-               sessionId,
-               msgUserAuthRequest,
-               req.User,
-               req.Service,
-               req.Method,
-               true,
-               algo,
-               pubKey,
-       }
-       return Marshal(data)
-}
-
-func appendU16(buf []byte, n uint16) []byte {
-       return append(buf, byte(n>>8), byte(n))
-}
-
-func appendU32(buf []byte, n uint32) []byte {
-       return append(buf, byte(n>>24), byte(n>>16), byte(n>>8), byte(n))
-}
-
-func appendU64(buf []byte, n uint64) []byte {
-       return append(buf,
-               byte(n>>56), byte(n>>48), byte(n>>40), byte(n>>32),
-               byte(n>>24), byte(n>>16), byte(n>>8), byte(n))
-}
-
-func appendInt(buf []byte, n int) []byte {
-       return appendU32(buf, uint32(n))
-}
-
-func appendString(buf []byte, s string) []byte {
-       buf = appendU32(buf, uint32(len(s)))
-       buf = append(buf, s...)
-       return buf
-}
-
-func appendBool(buf []byte, b bool) []byte {
-       if b {
-               return append(buf, 1)
-       }
-       return append(buf, 0)
-}
-
-// newCond is a helper to hide the fact that there is no usable zero
-// value for sync.Cond.
-func newCond() *sync.Cond { return sync.NewCond(new(sync.Mutex)) }
-
-// window represents the buffer available to clients
-// wishing to write to a channel.
-type window struct {
-       *sync.Cond
-       win          uint32 // RFC 4254 5.2 says the window size can grow to 
2^32-1
-       writeWaiters int
-       closed       bool
-}
-
-// add adds win to the amount of window available
-// for consumers.
-func (w *window) add(win uint32) bool {
-       // a zero sized window adjust is a noop.
-       if win == 0 {
-               return true
-       }
-       w.L.Lock()
-       if w.win+win < win {
-               w.L.Unlock()
-               return false
-       }
-       w.win += win
-       // It is unusual that multiple goroutines would be attempting to reserve
-       // window space, but not guaranteed. Use broadcast to notify all waiters
-       // that additional window is available.
-       w.Broadcast()
-       w.L.Unlock()
-       return true
-}
-
-// close sets the window to closed, so all reservations fail
-// immediately.
-func (w *window) close() {
-       w.L.Lock()
-       w.closed = true
-       w.Broadcast()
-       w.L.Unlock()
-}
-
-// reserve reserves win from the available window capacity.
-// If no capacity remains, reserve will block. reserve may
-// return less than requested.
-func (w *window) reserve(win uint32) (uint32, error) {
-       var err error
-       w.L.Lock()
-       w.writeWaiters++
-       w.Broadcast()
-       for w.win == 0 && !w.closed {
-               w.Wait()
-       }
-       w.writeWaiters--
-       if w.win < win {
-               win = w.win
-       }
-       w.win -= win
-       if w.closed {
-               err = io.EOF
-       }
-       w.L.Unlock()
-       return win, err
-}
-
-// waitWriterBlocked waits until some goroutine is blocked for further
-// writes. It is used in tests only.
-func (w *window) waitWriterBlocked() {
-       w.Cond.L.Lock()
-       for w.writeWaiters == 0 {
-               w.Cond.Wait()
-       }
-       w.Cond.L.Unlock()
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/connection.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/connection.go 
b/cli/vendor/golang.org/x/crypto/ssh/connection.go
deleted file mode 100644
index 979d919..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/connection.go
+++ /dev/null
@@ -1,144 +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 (
-       "fmt"
-       "net"
-)
-
-// OpenChannelError is returned if the other side rejects an
-// OpenChannel request.
-type OpenChannelError struct {
-       Reason  RejectionReason
-       Message string
-}
-
-func (e *OpenChannelError) Error() string {
-       return fmt.Sprintf("ssh: rejected: %s (%s)", e.Reason, e.Message)
-}
-
-// ConnMetadata holds metadata for the connection.
-type ConnMetadata interface {
-       // User returns the user ID for this connection.
-       // It is empty if no authentication is used.
-       User() string
-
-       // SessionID returns the sesson hash, also denoted by H.
-       SessionID() []byte
-
-       // ClientVersion returns the client's version string as hashed
-       // into the session ID.
-       ClientVersion() []byte
-
-       // ServerVersion returns the server's version string as hashed
-       // into the session ID.
-       ServerVersion() []byte
-
-       // RemoteAddr returns the remote address for this connection.
-       RemoteAddr() net.Addr
-
-       // LocalAddr returns the local address for this connection.
-       LocalAddr() net.Addr
-}
-
-// Conn represents an SSH connection for both server and client roles.
-// Conn is the basis for implementing an application layer, such
-// as ClientConn, which implements the traditional shell access for
-// clients.
-type Conn interface {
-       ConnMetadata
-
-       // SendRequest sends a global request, and returns the
-       // reply. If wantReply is true, it returns the response status
-       // and payload. See also RFC4254, section 4.
-       SendRequest(name string, wantReply bool, payload []byte) (bool, []byte, 
error)
-
-       // OpenChannel tries to open an channel. If the request is
-       // rejected, it returns *OpenChannelError. On success it returns
-       // the SSH Channel and a Go channel for incoming, out-of-band
-       // requests. The Go channel must be serviced, or the
-       // connection will hang.
-       OpenChannel(name string, data []byte) (Channel, <-chan *Request, error)
-
-       // Close closes the underlying network connection
-       Close() error
-
-       // Wait blocks until the connection has shut down, and returns the
-       // error causing the shutdown.
-       Wait() error
-
-       // TODO(hanwen): consider exposing:
-       //   RequestKeyChange
-       //   Disconnect
-}
-
-// DiscardRequests consumes and rejects all requests from the
-// passed-in channel.
-func DiscardRequests(in <-chan *Request) {
-       for req := range in {
-               if req.WantReply {
-                       req.Reply(false, nil)
-               }
-       }
-}
-
-// A connection represents an incoming connection.
-type connection struct {
-       transport *handshakeTransport
-       sshConn
-
-       // The connection protocol.
-       *mux
-}
-
-func (c *connection) Close() error {
-       return c.sshConn.conn.Close()
-}
-
-// sshconn provides net.Conn metadata, but disallows direct reads and
-// writes.
-type sshConn struct {
-       conn net.Conn
-
-       user          string
-       sessionID     []byte
-       clientVersion []byte
-       serverVersion []byte
-}
-
-func dup(src []byte) []byte {
-       dst := make([]byte, len(src))
-       copy(dst, src)
-       return dst
-}
-
-func (c *sshConn) User() string {
-       return c.user
-}
-
-func (c *sshConn) RemoteAddr() net.Addr {
-       return c.conn.RemoteAddr()
-}
-
-func (c *sshConn) Close() error {
-       return c.conn.Close()
-}
-
-func (c *sshConn) LocalAddr() net.Addr {
-       return c.conn.LocalAddr()
-}
-
-func (c *sshConn) SessionID() []byte {
-       return dup(c.sessionID)
-}
-
-func (c *sshConn) ClientVersion() []byte {
-       return dup(c.clientVersion)
-}
-
-func (c *sshConn) ServerVersion() []byte {
-       return dup(c.serverVersion)
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/doc.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/doc.go 
b/cli/vendor/golang.org/x/crypto/ssh/doc.go
deleted file mode 100644
index d6be894..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/doc.go
+++ /dev/null
@@ -1,18 +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 implements an SSH client and server.
-
-SSH is a transport security protocol, an authentication protocol and a
-family of application protocols. The most typical application level
-protocol is a remote shell and this is specifically implemented.  However,
-the multiplexed nature of SSH is exposed to users that wish to support
-others.
-
-References:
-  [PROTOCOL.certkeys]: 
http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL.certkeys?rev=HEAD
-  [SSH-PARAMETERS]:    
http://www.iana.org/assignments/ssh-parameters/ssh-parameters.xml#ssh-parameters-1
-*/
-package ssh // import "golang.org/x/crypto/ssh"

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/example_test.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/example_test.go 
b/cli/vendor/golang.org/x/crypto/ssh/example_test.go
deleted file mode 100644
index dfd9dca..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/example_test.go
+++ /dev/null
@@ -1,211 +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_test
-
-import (
-       "bytes"
-       "fmt"
-       "io/ioutil"
-       "log"
-       "net"
-       "net/http"
-
-       "golang.org/x/crypto/ssh"
-       "golang.org/x/crypto/ssh/terminal"
-)
-
-func ExampleNewServerConn() {
-       // An SSH server is represented by a ServerConfig, which holds
-       // certificate details and handles authentication of ServerConns.
-       config := &ssh.ServerConfig{
-               PasswordCallback: func(c ssh.ConnMetadata, pass []byte) 
(*ssh.Permissions, error) {
-                       // Should use constant-time compare (or better, 
salt+hash) in
-                       // a production setting.
-                       if c.User() == "testuser" && string(pass) == "tiger" {
-                               return nil, nil
-                       }
-                       return nil, fmt.Errorf("password rejected for %q", 
c.User())
-               },
-       }
-
-       privateBytes, err := ioutil.ReadFile("id_rsa")
-       if err != nil {
-               panic("Failed to load private key")
-       }
-
-       private, err := ssh.ParsePrivateKey(privateBytes)
-       if err != nil {
-               panic("Failed to parse private key")
-       }
-
-       config.AddHostKey(private)
-
-       // Once a ServerConfig has been configured, connections can be
-       // accepted.
-       listener, err := net.Listen("tcp", "0.0.0.0:2022")
-       if err != nil {
-               panic("failed to listen for connection")
-       }
-       nConn, err := listener.Accept()
-       if err != nil {
-               panic("failed to accept incoming connection")
-       }
-
-       // Before use, a handshake must be performed on the incoming
-       // net.Conn.
-       _, chans, reqs, err := ssh.NewServerConn(nConn, config)
-       if err != nil {
-               panic("failed to handshake")
-       }
-       // The incoming Request channel must be serviced.
-       go ssh.DiscardRequests(reqs)
-
-       // Service the incoming Channel channel.
-       for newChannel := range chans {
-               // Channels have a type, depending on the application level
-               // protocol intended. In the case of a shell, the type is
-               // "session" and ServerShell may be used to present a simple
-               // terminal interface.
-               if newChannel.ChannelType() != "session" {
-                       newChannel.Reject(ssh.UnknownChannelType, "unknown 
channel type")
-                       continue
-               }
-               channel, requests, err := newChannel.Accept()
-               if err != nil {
-                       panic("could not accept channel.")
-               }
-
-               // Sessions have out-of-band requests such as "shell",
-               // "pty-req" and "env".  Here we handle only the
-               // "shell" request.
-               go func(in <-chan *ssh.Request) {
-                       for req := range in {
-                               ok := false
-                               switch req.Type {
-                               case "shell":
-                                       ok = true
-                                       if len(req.Payload) > 0 {
-                                               // We don't accept any
-                                               // commands, only the
-                                               // default shell.
-                                               ok = false
-                                       }
-                               }
-                               req.Reply(ok, nil)
-                       }
-               }(requests)
-
-               term := terminal.NewTerminal(channel, "> ")
-
-               go func() {
-                       defer channel.Close()
-                       for {
-                               line, err := term.ReadLine()
-                               if err != nil {
-                                       break
-                               }
-                               fmt.Println(line)
-                       }
-               }()
-       }
-}
-
-func ExampleDial() {
-       // An SSH client is represented with a ClientConn. Currently only
-       // the "password" authentication method is supported.
-       //
-       // To authenticate with the remote server you must pass at least one
-       // implementation of AuthMethod via the Auth field in ClientConfig.
-       config := &ssh.ClientConfig{
-               User: "username",
-               Auth: []ssh.AuthMethod{
-                       ssh.Password("yourpassword"),
-               },
-       }
-       client, err := ssh.Dial("tcp", "yourserver.com:22", config)
-       if err != nil {
-               panic("Failed to dial: " + err.Error())
-       }
-
-       // Each ClientConn can support multiple interactive sessions,
-       // represented by a Session.
-       session, err := client.NewSession()
-       if err != nil {
-               panic("Failed to create session: " + err.Error())
-       }
-       defer session.Close()
-
-       // Once a Session is created, you can execute a single command on
-       // the remote side using the Run method.
-       var b bytes.Buffer
-       session.Stdout = &b
-       if err := session.Run("/usr/bin/whoami"); err != nil {
-               panic("Failed to run: " + err.Error())
-       }
-       fmt.Println(b.String())
-}
-
-func ExampleClient_Listen() {
-       config := &ssh.ClientConfig{
-               User: "username",
-               Auth: []ssh.AuthMethod{
-                       ssh.Password("password"),
-               },
-       }
-       // Dial your ssh server.
-       conn, err := ssh.Dial("tcp", "localhost:22", config)
-       if err != nil {
-               log.Fatalf("unable to connect: %s", err)
-       }
-       defer conn.Close()
-
-       // Request the remote side to open port 8080 on all interfaces.
-       l, err := conn.Listen("tcp", "0.0.0.0:8080")
-       if err != nil {
-               log.Fatalf("unable to register tcp forward: %v", err)
-       }
-       defer l.Close()
-
-       // Serve HTTP with your SSH server acting as a reverse proxy.
-       http.Serve(l, http.HandlerFunc(func(resp http.ResponseWriter, req 
*http.Request) {
-               fmt.Fprintf(resp, "Hello world!\n")
-       }))
-}
-
-func ExampleSession_RequestPty() {
-       // Create client config
-       config := &ssh.ClientConfig{
-               User: "username",
-               Auth: []ssh.AuthMethod{
-                       ssh.Password("password"),
-               },
-       }
-       // Connect to ssh server
-       conn, err := ssh.Dial("tcp", "localhost:22", config)
-       if err != nil {
-               log.Fatalf("unable to connect: %s", err)
-       }
-       defer conn.Close()
-       // Create a session
-       session, err := conn.NewSession()
-       if err != nil {
-               log.Fatalf("unable to create session: %s", err)
-       }
-       defer session.Close()
-       // Set up terminal modes
-       modes := ssh.TerminalModes{
-               ssh.ECHO:          0,     // disable echoing
-               ssh.TTY_OP_ISPEED: 14400, // input speed = 14.4kbaud
-               ssh.TTY_OP_OSPEED: 14400, // output speed = 14.4kbaud
-       }
-       // Request pseudo terminal
-       if err := session.RequestPty("xterm", 80, 40, modes); err != nil {
-               log.Fatalf("request for pseudo terminal failed: %s", err)
-       }
-       // Start remote shell
-       if err := session.Shell(); err != nil {
-               log.Fatalf("failed to start shell: %s", err)
-       }
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/handshake.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/handshake.go 
b/cli/vendor/golang.org/x/crypto/ssh/handshake.go
deleted file mode 100644
index 1c54f75..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/handshake.go
+++ /dev/null
@@ -1,412 +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 (
-       "crypto/rand"
-       "errors"
-       "fmt"
-       "io"
-       "log"
-       "net"
-       "sync"
-)
-
-// debugHandshake, if set, prints messages sent and received.  Key
-// exchange messages are printed as if DH were used, so the debug
-// messages are wrong when using ECDH.
-const debugHandshake = false
-
-// keyingTransport is a packet based transport that supports key
-// changes. It need not be thread-safe. It should pass through
-// msgNewKeys in both directions.
-type keyingTransport interface {
-       packetConn
-
-       // prepareKeyChange sets up a key change. The key change for a
-       // direction will be effected if a msgNewKeys message is sent
-       // or received.
-       prepareKeyChange(*algorithms, *kexResult) error
-
-       // getSessionID returns the session ID. prepareKeyChange must
-       // have been called once.
-       getSessionID() []byte
-}
-
-// rekeyingTransport is the interface of handshakeTransport that we
-// (internally) expose to ClientConn and ServerConn.
-type rekeyingTransport interface {
-       packetConn
-
-       // requestKeyChange asks the remote side to change keys. All
-       // writes are blocked until the key change succeeds, which is
-       // signaled by reading a msgNewKeys.
-       requestKeyChange() error
-
-       // getSessionID returns the session ID. This is only valid
-       // after the first key change has completed.
-       getSessionID() []byte
-}
-
-// handshakeTransport implements rekeying on top of a keyingTransport
-// and offers a thread-safe writePacket() interface.
-type handshakeTransport struct {
-       conn   keyingTransport
-       config *Config
-
-       serverVersion []byte
-       clientVersion []byte
-
-       // hostKeys is non-empty if we are the server. In that case,
-       // it contains all host keys that can be used to sign the
-       // connection.
-       hostKeys []Signer
-
-       // hostKeyAlgorithms is non-empty if we are the client. In that case,
-       // we accept these key types from the server as host key.
-       hostKeyAlgorithms []string
-
-       // On read error, incoming is closed, and readError is set.
-       incoming  chan []byte
-       readError error
-
-       // data for host key checking
-       hostKeyCallback func(hostname string, remote net.Addr, key PublicKey) 
error
-       dialAddress     string
-       remoteAddr      net.Addr
-
-       readSinceKex uint64
-
-       // Protects the writing side of the connection
-       mu              sync.Mutex
-       cond            *sync.Cond
-       sentInitPacket  []byte
-       sentInitMsg     *kexInitMsg
-       writtenSinceKex uint64
-       writeError      error
-}
-
-func newHandshakeTransport(conn keyingTransport, config *Config, 
clientVersion, serverVersion []byte) *handshakeTransport {
-       t := &handshakeTransport{
-               conn:          conn,
-               serverVersion: serverVersion,
-               clientVersion: clientVersion,
-               incoming:      make(chan []byte, 16),
-               config:        config,
-       }
-       t.cond = sync.NewCond(&t.mu)
-       return t
-}
-
-func newClientTransport(conn keyingTransport, clientVersion, serverVersion 
[]byte, config *ClientConfig, dialAddr string, addr net.Addr) 
*handshakeTransport {
-       t := newHandshakeTransport(conn, &config.Config, clientVersion, 
serverVersion)
-       t.dialAddress = dialAddr
-       t.remoteAddr = addr
-       t.hostKeyCallback = config.HostKeyCallback
-       if config.HostKeyAlgorithms != nil {
-               t.hostKeyAlgorithms = config.HostKeyAlgorithms
-       } else {
-               t.hostKeyAlgorithms = supportedHostKeyAlgos
-       }
-       go t.readLoop()
-       return t
-}
-
-func newServerTransport(conn keyingTransport, clientVersion, serverVersion 
[]byte, config *ServerConfig) *handshakeTransport {
-       t := newHandshakeTransport(conn, &config.Config, clientVersion, 
serverVersion)
-       t.hostKeys = config.hostKeys
-       go t.readLoop()
-       return t
-}
-
-func (t *handshakeTransport) getSessionID() []byte {
-       return t.conn.getSessionID()
-}
-
-func (t *handshakeTransport) id() string {
-       if len(t.hostKeys) > 0 {
-               return "server"
-       }
-       return "client"
-}
-
-func (t *handshakeTransport) readPacket() ([]byte, error) {
-       p, ok := <-t.incoming
-       if !ok {
-               return nil, t.readError
-       }
-       return p, nil
-}
-
-func (t *handshakeTransport) readLoop() {
-       for {
-               p, err := t.readOnePacket()
-               if err != nil {
-                       t.readError = err
-                       close(t.incoming)
-                       break
-               }
-               if p[0] == msgIgnore || p[0] == msgDebug {
-                       continue
-               }
-               t.incoming <- p
-       }
-
-       // If we can't read, declare the writing part dead too.
-       t.mu.Lock()
-       defer t.mu.Unlock()
-       if t.writeError == nil {
-               t.writeError = t.readError
-       }
-       t.cond.Broadcast()
-}
-
-func (t *handshakeTransport) readOnePacket() ([]byte, error) {
-       if t.readSinceKex > t.config.RekeyThreshold {
-               if err := t.requestKeyChange(); err != nil {
-                       return nil, err
-               }
-       }
-
-       p, err := t.conn.readPacket()
-       if err != nil {
-               return nil, err
-       }
-
-       t.readSinceKex += uint64(len(p))
-       if debugHandshake {
-               msg, err := decode(p)
-               log.Printf("%s got %T %v (%v)", t.id(), msg, msg, err)
-       }
-       if p[0] != msgKexInit {
-               return p, nil
-       }
-       err = t.enterKeyExchange(p)
-
-       t.mu.Lock()
-       if err != nil {
-               // drop connection
-               t.conn.Close()
-               t.writeError = err
-       }
-
-       if debugHandshake {
-               log.Printf("%s exited key exchange, err %v", t.id(), err)
-       }
-
-       // Unblock writers.
-       t.sentInitMsg = nil
-       t.sentInitPacket = nil
-       t.cond.Broadcast()
-       t.writtenSinceKex = 0
-       t.mu.Unlock()
-
-       if err != nil {
-               return nil, err
-       }
-
-       t.readSinceKex = 0
-       return []byte{msgNewKeys}, nil
-}
-
-// sendKexInit sends a key change message, and returns the message
-// that was sent. After initiating the key change, all writes will be
-// blocked until the change is done, and a failed key change will
-// close the underlying transport. This function is safe for
-// concurrent use by multiple goroutines.
-func (t *handshakeTransport) sendKexInit() (*kexInitMsg, []byte, error) {
-       t.mu.Lock()
-       defer t.mu.Unlock()
-       return t.sendKexInitLocked()
-}
-
-func (t *handshakeTransport) requestKeyChange() error {
-       _, _, err := t.sendKexInit()
-       return err
-}
-
-// sendKexInitLocked sends a key change message. t.mu must be locked
-// while this happens.
-func (t *handshakeTransport) sendKexInitLocked() (*kexInitMsg, []byte, error) {
-       // kexInits may be sent either in response to the other side,
-       // or because our side wants to initiate a key change, so we
-       // may have already sent a kexInit. In that case, don't send a
-       // second kexInit.
-       if t.sentInitMsg != nil {
-               return t.sentInitMsg, t.sentInitPacket, nil
-       }
-       msg := &kexInitMsg{
-               KexAlgos:                t.config.KeyExchanges,
-               CiphersClientServer:     t.config.Ciphers,
-               CiphersServerClient:     t.config.Ciphers,
-               MACsClientServer:        t.config.MACs,
-               MACsServerClient:        t.config.MACs,
-               CompressionClientServer: supportedCompressions,
-               CompressionServerClient: supportedCompressions,
-       }
-       io.ReadFull(rand.Reader, msg.Cookie[:])
-
-       if len(t.hostKeys) > 0 {
-               for _, k := range t.hostKeys {
-                       msg.ServerHostKeyAlgos = append(
-                               msg.ServerHostKeyAlgos, k.PublicKey().Type())
-               }
-       } else {
-               msg.ServerHostKeyAlgos = t.hostKeyAlgorithms
-       }
-       packet := Marshal(msg)
-
-       // writePacket destroys the contents, so save a copy.
-       packetCopy := make([]byte, len(packet))
-       copy(packetCopy, packet)
-
-       if err := t.conn.writePacket(packetCopy); err != nil {
-               return nil, nil, err
-       }
-
-       t.sentInitMsg = msg
-       t.sentInitPacket = packet
-       return msg, packet, nil
-}
-
-func (t *handshakeTransport) writePacket(p []byte) error {
-       t.mu.Lock()
-       defer t.mu.Unlock()
-
-       if t.writtenSinceKex > t.config.RekeyThreshold {
-               t.sendKexInitLocked()
-       }
-       for t.sentInitMsg != nil && t.writeError == nil {
-               t.cond.Wait()
-       }
-       if t.writeError != nil {
-               return t.writeError
-       }
-       t.writtenSinceKex += uint64(len(p))
-
-       switch p[0] {
-       case msgKexInit:
-               return errors.New("ssh: only handshakeTransport can send 
kexInit")
-       case msgNewKeys:
-               return errors.New("ssh: only handshakeTransport can send 
newKeys")
-       default:
-               return t.conn.writePacket(p)
-       }
-}
-
-func (t *handshakeTransport) Close() error {
-       return t.conn.Close()
-}
-
-// enterKeyExchange runs the key exchange.
-func (t *handshakeTransport) enterKeyExchange(otherInitPacket []byte) error {
-       if debugHandshake {
-               log.Printf("%s entered key exchange", t.id())
-       }
-       myInit, myInitPacket, err := t.sendKexInit()
-       if err != nil {
-               return err
-       }
-
-       otherInit := &kexInitMsg{}
-       if err := Unmarshal(otherInitPacket, otherInit); err != nil {
-               return err
-       }
-
-       magics := handshakeMagics{
-               clientVersion: t.clientVersion,
-               serverVersion: t.serverVersion,
-               clientKexInit: otherInitPacket,
-               serverKexInit: myInitPacket,
-       }
-
-       clientInit := otherInit
-       serverInit := myInit
-       if len(t.hostKeys) == 0 {
-               clientInit = myInit
-               serverInit = otherInit
-
-               magics.clientKexInit = myInitPacket
-               magics.serverKexInit = otherInitPacket
-       }
-
-       algs, err := findAgreedAlgorithms(clientInit, serverInit)
-       if err != nil {
-               return err
-       }
-
-       // We don't send FirstKexFollows, but we handle receiving it.
-       if otherInit.FirstKexFollows && algs.kex != otherInit.KexAlgos[0] {
-               // other side sent a kex message for the wrong algorithm,
-               // which we have to ignore.
-               if _, err := t.conn.readPacket(); err != nil {
-                       return err
-               }
-       }
-
-       kex, ok := kexAlgoMap[algs.kex]
-       if !ok {
-               return fmt.Errorf("ssh: unexpected key exchange algorithm %v", 
algs.kex)
-       }
-
-       var result *kexResult
-       if len(t.hostKeys) > 0 {
-               result, err = t.server(kex, algs, &magics)
-       } else {
-               result, err = t.client(kex, algs, &magics)
-       }
-
-       if err != nil {
-               return err
-       }
-
-       t.conn.prepareKeyChange(algs, result)
-       if err = t.conn.writePacket([]byte{msgNewKeys}); err != nil {
-               return err
-       }
-       if packet, err := t.conn.readPacket(); err != nil {
-               return err
-       } else if packet[0] != msgNewKeys {
-               return unexpectedMessageError(msgNewKeys, packet[0])
-       }
-       return nil
-}
-
-func (t *handshakeTransport) server(kex kexAlgorithm, algs *algorithms, magics 
*handshakeMagics) (*kexResult, error) {
-       var hostKey Signer
-       for _, k := range t.hostKeys {
-               if algs.hostKey == k.PublicKey().Type() {
-                       hostKey = k
-               }
-       }
-
-       r, err := kex.Server(t.conn, t.config.Rand, magics, hostKey)
-       return r, err
-}
-
-func (t *handshakeTransport) client(kex kexAlgorithm, algs *algorithms, magics 
*handshakeMagics) (*kexResult, error) {
-       result, err := kex.Client(t.conn, t.config.Rand, magics)
-       if err != nil {
-               return nil, err
-       }
-
-       hostKey, err := ParsePublicKey(result.HostKey)
-       if err != nil {
-               return nil, err
-       }
-
-       if err := verifyHostKeySignature(hostKey, result); err != nil {
-               return nil, err
-       }
-
-       if t.hostKeyCallback != nil {
-               err = t.hostKeyCallback(t.dialAddress, t.remoteAddr, hostKey)
-               if err != nil {
-                       return nil, err
-               }
-       }
-
-       return result, nil
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/handshake_test.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/handshake_test.go 
b/cli/vendor/golang.org/x/crypto/ssh/handshake_test.go
deleted file mode 100644
index b86d369..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/handshake_test.go
+++ /dev/null
@@ -1,415 +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"
-       "errors"
-       "fmt"
-       "net"
-       "runtime"
-       "strings"
-       "sync"
-       "testing"
-)
-
-type testChecker struct {
-       calls []string
-}
-
-func (t *testChecker) Check(dialAddr string, addr net.Addr, key PublicKey) 
error {
-       if dialAddr == "bad" {
-               return fmt.Errorf("dialAddr is bad")
-       }
-
-       if tcpAddr, ok := addr.(*net.TCPAddr); !ok || tcpAddr == nil {
-               return fmt.Errorf("testChecker: got %T want *net.TCPAddr", addr)
-       }
-
-       t.calls = append(t.calls, fmt.Sprintf("%s %v %s %x", dialAddr, addr, 
key.Type(), key.Marshal()))
-
-       return nil
-}
-
-// netPipe is analogous to net.Pipe, but it uses a real net.Conn, and
-// therefore is buffered (net.Pipe deadlocks if both sides start with
-// a write.)
-func netPipe() (net.Conn, net.Conn, error) {
-       listener, err := net.Listen("tcp", "127.0.0.1:0")
-       if err != nil {
-               return nil, nil, err
-       }
-       defer listener.Close()
-       c1, err := net.Dial("tcp", listener.Addr().String())
-       if err != nil {
-               return nil, nil, err
-       }
-
-       c2, err := listener.Accept()
-       if err != nil {
-               c1.Close()
-               return nil, nil, err
-       }
-
-       return c1, c2, nil
-}
-
-func handshakePair(clientConf *ClientConfig, addr string) (client 
*handshakeTransport, server *handshakeTransport, err error) {
-       a, b, err := netPipe()
-       if err != nil {
-               return nil, nil, err
-       }
-
-       trC := newTransport(a, rand.Reader, true)
-       trS := newTransport(b, rand.Reader, false)
-       clientConf.SetDefaults()
-
-       v := []byte("version")
-       client = newClientTransport(trC, v, v, clientConf, addr, a.RemoteAddr())
-
-       serverConf := &ServerConfig{}
-       serverConf.AddHostKey(testSigners["ecdsa"])
-       serverConf.AddHostKey(testSigners["rsa"])
-       serverConf.SetDefaults()
-       server = newServerTransport(trS, v, v, serverConf)
-
-       return client, server, nil
-}
-
-func TestHandshakeBasic(t *testing.T) {
-       if runtime.GOOS == "plan9" {
-               t.Skip("see golang.org/issue/7237")
-       }
-       checker := &testChecker{}
-       trC, trS, err := handshakePair(&ClientConfig{HostKeyCallback: 
checker.Check}, "addr")
-       if err != nil {
-               t.Fatalf("handshakePair: %v", err)
-       }
-
-       defer trC.Close()
-       defer trS.Close()
-
-       go func() {
-               // Client writes a bunch of stuff, and does a key
-               // change in the middle. This should not confuse the
-               // handshake in progress
-               for i := 0; i < 10; i++ {
-                       p := []byte{msgRequestSuccess, byte(i)}
-                       if err := trC.writePacket(p); err != nil {
-                               t.Fatalf("sendPacket: %v", err)
-                       }
-                       if i == 5 {
-                               // halfway through, we request a key change.
-                               _, _, err := trC.sendKexInit()
-                               if err != nil {
-                                       t.Fatalf("sendKexInit: %v", err)
-                               }
-                       }
-               }
-               trC.Close()
-       }()
-
-       // Server checks that client messages come in cleanly
-       i := 0
-       for {
-               p, err := trS.readPacket()
-               if err != nil {
-                       break
-               }
-               if p[0] == msgNewKeys {
-                       continue
-               }
-               want := []byte{msgRequestSuccess, byte(i)}
-               if bytes.Compare(p, want) != 0 {
-                       t.Errorf("message %d: got %q, want %q", i, p, want)
-               }
-               i++
-       }
-       if i != 10 {
-               t.Errorf("received %d messages, want 10.", i)
-       }
-
-       // If all went well, we registered exactly 1 key change.
-       if len(checker.calls) != 1 {
-               t.Fatalf("got %d host key checks, want 1", len(checker.calls))
-       }
-
-       pub := testSigners["ecdsa"].PublicKey()
-       want := fmt.Sprintf("%s %v %s %x", "addr", trC.remoteAddr, pub.Type(), 
pub.Marshal())
-       if want != checker.calls[0] {
-               t.Errorf("got %q want %q for host key check", checker.calls[0], 
want)
-       }
-}
-
-func TestHandshakeError(t *testing.T) {
-       checker := &testChecker{}
-       trC, trS, err := handshakePair(&ClientConfig{HostKeyCallback: 
checker.Check}, "bad")
-       if err != nil {
-               t.Fatalf("handshakePair: %v", err)
-       }
-       defer trC.Close()
-       defer trS.Close()
-
-       // send a packet
-       packet := []byte{msgRequestSuccess, 42}
-       if err := trC.writePacket(packet); err != nil {
-               t.Errorf("writePacket: %v", err)
-       }
-
-       // Now request a key change.
-       _, _, err = trC.sendKexInit()
-       if err != nil {
-               t.Errorf("sendKexInit: %v", err)
-       }
-
-       // the key change will fail, and afterwards we can't write.
-       if err := trC.writePacket([]byte{msgRequestSuccess, 43}); err == nil {
-               t.Errorf("writePacket after botched rekey succeeded.")
-       }
-
-       readback, err := trS.readPacket()
-       if err != nil {
-               t.Fatalf("server closed too soon: %v", err)
-       }
-       if bytes.Compare(readback, packet) != 0 {
-               t.Errorf("got %q want %q", readback, packet)
-       }
-       readback, err = trS.readPacket()
-       if err == nil {
-               t.Errorf("got a message %q after failed key change", readback)
-       }
-}
-
-func TestHandshakeTwice(t *testing.T) {
-       checker := &testChecker{}
-       trC, trS, err := handshakePair(&ClientConfig{HostKeyCallback: 
checker.Check}, "addr")
-       if err != nil {
-               t.Fatalf("handshakePair: %v", err)
-       }
-
-       defer trC.Close()
-       defer trS.Close()
-
-       // send a packet
-       packet := make([]byte, 5)
-       packet[0] = msgRequestSuccess
-       if err := trC.writePacket(packet); err != nil {
-               t.Errorf("writePacket: %v", err)
-       }
-
-       // Now request a key change.
-       _, _, err = trC.sendKexInit()
-       if err != nil {
-               t.Errorf("sendKexInit: %v", err)
-       }
-
-       // Send another packet. Use a fresh one, since writePacket destroys.
-       packet = make([]byte, 5)
-       packet[0] = msgRequestSuccess
-       if err := trC.writePacket(packet); err != nil {
-               t.Errorf("writePacket: %v", err)
-       }
-
-       // 2nd key change.
-       _, _, err = trC.sendKexInit()
-       if err != nil {
-               t.Errorf("sendKexInit: %v", err)
-       }
-
-       packet = make([]byte, 5)
-       packet[0] = msgRequestSuccess
-       if err := trC.writePacket(packet); err != nil {
-               t.Errorf("writePacket: %v", err)
-       }
-
-       packet = make([]byte, 5)
-       packet[0] = msgRequestSuccess
-       for i := 0; i < 5; i++ {
-               msg, err := trS.readPacket()
-               if err != nil {
-                       t.Fatalf("server closed too soon: %v", err)
-               }
-               if msg[0] == msgNewKeys {
-                       continue
-               }
-
-               if bytes.Compare(msg, packet) != 0 {
-                       t.Errorf("packet %d: got %q want %q", i, msg, packet)
-               }
-       }
-       if len(checker.calls) != 2 {
-               t.Errorf("got %d key changes, want 2", len(checker.calls))
-       }
-}
-
-func TestHandshakeAutoRekeyWrite(t *testing.T) {
-       checker := &testChecker{}
-       clientConf := &ClientConfig{HostKeyCallback: checker.Check}
-       clientConf.RekeyThreshold = 500
-       trC, trS, err := handshakePair(clientConf, "addr")
-       if err != nil {
-               t.Fatalf("handshakePair: %v", err)
-       }
-       defer trC.Close()
-       defer trS.Close()
-
-       for i := 0; i < 5; i++ {
-               packet := make([]byte, 251)
-               packet[0] = msgRequestSuccess
-               if err := trC.writePacket(packet); err != nil {
-                       t.Errorf("writePacket: %v", err)
-               }
-       }
-
-       j := 0
-       for ; j < 5; j++ {
-               _, err := trS.readPacket()
-               if err != nil {
-                       break
-               }
-       }
-
-       if j != 5 {
-               t.Errorf("got %d, want 5 messages", j)
-       }
-
-       if len(checker.calls) != 2 {
-               t.Errorf("got %d key changes, wanted 2", len(checker.calls))
-       }
-}
-
-type syncChecker struct {
-       called chan int
-}
-
-func (t *syncChecker) Check(dialAddr string, addr net.Addr, key PublicKey) 
error {
-       t.called <- 1
-       return nil
-}
-
-func TestHandshakeAutoRekeyRead(t *testing.T) {
-       sync := &syncChecker{make(chan int, 2)}
-       clientConf := &ClientConfig{
-               HostKeyCallback: sync.Check,
-       }
-       clientConf.RekeyThreshold = 500
-
-       trC, trS, err := handshakePair(clientConf, "addr")
-       if err != nil {
-               t.Fatalf("handshakePair: %v", err)
-       }
-       defer trC.Close()
-       defer trS.Close()
-
-       packet := make([]byte, 501)
-       packet[0] = msgRequestSuccess
-       if err := trS.writePacket(packet); err != nil {
-               t.Fatalf("writePacket: %v", err)
-       }
-       // While we read out the packet, a key change will be
-       // initiated.
-       if _, err := trC.readPacket(); err != nil {
-               t.Fatalf("readPacket(client): %v", err)
-       }
-
-       <-sync.called
-}
-
-// errorKeyingTransport generates errors after a given number of
-// read/write operations.
-type errorKeyingTransport struct {
-       packetConn
-       readLeft, writeLeft int
-}
-
-func (n *errorKeyingTransport) prepareKeyChange(*algorithms, *kexResult) error 
{
-       return nil
-}
-func (n *errorKeyingTransport) getSessionID() []byte {
-       return nil
-}
-
-func (n *errorKeyingTransport) writePacket(packet []byte) error {
-       if n.writeLeft == 0 {
-               n.Close()
-               return errors.New("barf")
-       }
-
-       n.writeLeft--
-       return n.packetConn.writePacket(packet)
-}
-
-func (n *errorKeyingTransport) readPacket() ([]byte, error) {
-       if n.readLeft == 0 {
-               n.Close()
-               return nil, errors.New("barf")
-       }
-
-       n.readLeft--
-       return n.packetConn.readPacket()
-}
-
-func TestHandshakeErrorHandlingRead(t *testing.T) {
-       for i := 0; i < 20; i++ {
-               testHandshakeErrorHandlingN(t, i, -1)
-       }
-}
-
-func TestHandshakeErrorHandlingWrite(t *testing.T) {
-       for i := 0; i < 20; i++ {
-               testHandshakeErrorHandlingN(t, -1, i)
-       }
-}
-
-// testHandshakeErrorHandlingN runs handshakes, injecting errors. If
-// handshakeTransport deadlocks, the go runtime will detect it and
-// panic.
-func testHandshakeErrorHandlingN(t *testing.T, readLimit, writeLimit int) {
-       msg := Marshal(&serviceRequestMsg{strings.Repeat("x", 
int(minRekeyThreshold)/4)})
-
-       a, b := memPipe()
-       defer a.Close()
-       defer b.Close()
-
-       key := testSigners["ecdsa"]
-       serverConf := Config{RekeyThreshold: minRekeyThreshold}
-       serverConf.SetDefaults()
-       serverConn := newHandshakeTransport(&errorKeyingTransport{a, readLimit, 
writeLimit}, &serverConf, []byte{'a'}, []byte{'b'})
-       serverConn.hostKeys = []Signer{key}
-       go serverConn.readLoop()
-
-       clientConf := Config{RekeyThreshold: 10 * minRekeyThreshold}
-       clientConf.SetDefaults()
-       clientConn := newHandshakeTransport(&errorKeyingTransport{b, -1, -1}, 
&clientConf, []byte{'a'}, []byte{'b'})
-       clientConn.hostKeyAlgorithms = []string{key.PublicKey().Type()}
-       go clientConn.readLoop()
-
-       var wg sync.WaitGroup
-       wg.Add(4)
-
-       for _, hs := range []packetConn{serverConn, clientConn} {
-               go func(c packetConn) {
-                       for {
-                               err := c.writePacket(msg)
-                               if err != nil {
-                                       break
-                               }
-                       }
-                       wg.Done()
-               }(hs)
-               go func(c packetConn) {
-                       for {
-                               _, err := c.readPacket()
-                               if err != nil {
-                                       break
-                               }
-                       }
-                       wg.Done()
-               }(hs)
-       }
-
-       wg.Wait()
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/kex.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/kex.go 
b/cli/vendor/golang.org/x/crypto/ssh/kex.go
deleted file mode 100644
index 3ec603c..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/kex.go
+++ /dev/null
@@ -1,526 +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 (
-       "crypto"
-       "crypto/ecdsa"
-       "crypto/elliptic"
-       "crypto/rand"
-       "crypto/subtle"
-       "errors"
-       "io"
-       "math/big"
-
-       "golang.org/x/crypto/curve25519"
-)
-
-const (
-       kexAlgoDH1SHA1          = "diffie-hellman-group1-sha1"
-       kexAlgoDH14SHA1         = "diffie-hellman-group14-sha1"
-       kexAlgoECDH256          = "ecdh-sha2-nistp256"
-       kexAlgoECDH384          = "ecdh-sha2-nistp384"
-       kexAlgoECDH521          = "ecdh-sha2-nistp521"
-       kexAlgoCurve25519SHA256 = "curve25519-sha...@libssh.org"
-)
-
-// kexResult captures the outcome of a key exchange.
-type kexResult struct {
-       // Session hash. See also RFC 4253, section 8.
-       H []byte
-
-       // Shared secret. See also RFC 4253, section 8.
-       K []byte
-
-       // Host key as hashed into H.
-       HostKey []byte
-
-       // Signature of H.
-       Signature []byte
-
-       // A cryptographic hash function that matches the security
-       // level of the key exchange algorithm. It is used for
-       // calculating H, and for deriving keys from H and K.
-       Hash crypto.Hash
-
-       // The session ID, which is the first H computed. This is used
-       // to signal data inside transport.
-       SessionID []byte
-}
-
-// handshakeMagics contains data that is always included in the
-// session hash.
-type handshakeMagics struct {
-       clientVersion, serverVersion []byte
-       clientKexInit, serverKexInit []byte
-}
-
-func (m *handshakeMagics) write(w io.Writer) {
-       writeString(w, m.clientVersion)
-       writeString(w, m.serverVersion)
-       writeString(w, m.clientKexInit)
-       writeString(w, m.serverKexInit)
-}
-
-// kexAlgorithm abstracts different key exchange algorithms.
-type kexAlgorithm interface {
-       // Server runs server-side key agreement, signing the result
-       // with a hostkey.
-       Server(p packetConn, rand io.Reader, magics *handshakeMagics, s Signer) 
(*kexResult, error)
-
-       // Client runs the client-side key agreement. Caller is
-       // responsible for verifying the host key signature.
-       Client(p packetConn, rand io.Reader, magics *handshakeMagics) 
(*kexResult, error)
-}
-
-// dhGroup is a multiplicative group suitable for implementing Diffie-Hellman 
key agreement.
-type dhGroup struct {
-       g, p *big.Int
-}
-
-func (group *dhGroup) diffieHellman(theirPublic, myPrivate *big.Int) 
(*big.Int, error) {
-       if theirPublic.Sign() <= 0 || theirPublic.Cmp(group.p) >= 0 {
-               return nil, errors.New("ssh: DH parameter out of bounds")
-       }
-       return new(big.Int).Exp(theirPublic, myPrivate, group.p), nil
-}
-
-func (group *dhGroup) Client(c packetConn, randSource io.Reader, magics 
*handshakeMagics) (*kexResult, error) {
-       hashFunc := crypto.SHA1
-
-       x, err := rand.Int(randSource, group.p)
-       if err != nil {
-               return nil, err
-       }
-       X := new(big.Int).Exp(group.g, x, group.p)
-       kexDHInit := kexDHInitMsg{
-               X: X,
-       }
-       if err := c.writePacket(Marshal(&kexDHInit)); err != nil {
-               return nil, err
-       }
-
-       packet, err := c.readPacket()
-       if err != nil {
-               return nil, err
-       }
-
-       var kexDHReply kexDHReplyMsg
-       if err = Unmarshal(packet, &kexDHReply); err != nil {
-               return nil, err
-       }
-
-       kInt, err := group.diffieHellman(kexDHReply.Y, x)
-       if err != nil {
-               return nil, err
-       }
-
-       h := hashFunc.New()
-       magics.write(h)
-       writeString(h, kexDHReply.HostKey)
-       writeInt(h, X)
-       writeInt(h, kexDHReply.Y)
-       K := make([]byte, intLength(kInt))
-       marshalInt(K, kInt)
-       h.Write(K)
-
-       return &kexResult{
-               H:         h.Sum(nil),
-               K:         K,
-               HostKey:   kexDHReply.HostKey,
-               Signature: kexDHReply.Signature,
-               Hash:      crypto.SHA1,
-       }, nil
-}
-
-func (group *dhGroup) Server(c packetConn, randSource io.Reader, magics 
*handshakeMagics, priv Signer) (result *kexResult, err error) {
-       hashFunc := crypto.SHA1
-       packet, err := c.readPacket()
-       if err != nil {
-               return
-       }
-       var kexDHInit kexDHInitMsg
-       if err = Unmarshal(packet, &kexDHInit); err != nil {
-               return
-       }
-
-       y, err := rand.Int(randSource, group.p)
-       if err != nil {
-               return
-       }
-
-       Y := new(big.Int).Exp(group.g, y, group.p)
-       kInt, err := group.diffieHellman(kexDHInit.X, y)
-       if err != nil {
-               return nil, err
-       }
-
-       hostKeyBytes := priv.PublicKey().Marshal()
-
-       h := hashFunc.New()
-       magics.write(h)
-       writeString(h, hostKeyBytes)
-       writeInt(h, kexDHInit.X)
-       writeInt(h, Y)
-
-       K := make([]byte, intLength(kInt))
-       marshalInt(K, kInt)
-       h.Write(K)
-
-       H := h.Sum(nil)
-
-       // H is already a hash, but the hostkey signing will apply its
-       // own key-specific hash algorithm.
-       sig, err := signAndMarshal(priv, randSource, H)
-       if err != nil {
-               return nil, err
-       }
-
-       kexDHReply := kexDHReplyMsg{
-               HostKey:   hostKeyBytes,
-               Y:         Y,
-               Signature: sig,
-       }
-       packet = Marshal(&kexDHReply)
-
-       err = c.writePacket(packet)
-       return &kexResult{
-               H:         H,
-               K:         K,
-               HostKey:   hostKeyBytes,
-               Signature: sig,
-               Hash:      crypto.SHA1,
-       }, nil
-}
-
-// ecdh performs Elliptic Curve Diffie-Hellman key exchange as
-// described in RFC 5656, section 4.
-type ecdh struct {
-       curve elliptic.Curve
-}
-
-func (kex *ecdh) Client(c packetConn, rand io.Reader, magics *handshakeMagics) 
(*kexResult, error) {
-       ephKey, err := ecdsa.GenerateKey(kex.curve, rand)
-       if err != nil {
-               return nil, err
-       }
-
-       kexInit := kexECDHInitMsg{
-               ClientPubKey: elliptic.Marshal(kex.curve, ephKey.PublicKey.X, 
ephKey.PublicKey.Y),
-       }
-
-       serialized := Marshal(&kexInit)
-       if err := c.writePacket(serialized); err != nil {
-               return nil, err
-       }
-
-       packet, err := c.readPacket()
-       if err != nil {
-               return nil, err
-       }
-
-       var reply kexECDHReplyMsg
-       if err = Unmarshal(packet, &reply); err != nil {
-               return nil, err
-       }
-
-       x, y, err := unmarshalECKey(kex.curve, reply.EphemeralPubKey)
-       if err != nil {
-               return nil, err
-       }
-
-       // generate shared secret
-       secret, _ := kex.curve.ScalarMult(x, y, ephKey.D.Bytes())
-
-       h := ecHash(kex.curve).New()
-       magics.write(h)
-       writeString(h, reply.HostKey)
-       writeString(h, kexInit.ClientPubKey)
-       writeString(h, reply.EphemeralPubKey)
-       K := make([]byte, intLength(secret))
-       marshalInt(K, secret)
-       h.Write(K)
-
-       return &kexResult{
-               H:         h.Sum(nil),
-               K:         K,
-               HostKey:   reply.HostKey,
-               Signature: reply.Signature,
-               Hash:      ecHash(kex.curve),
-       }, nil
-}
-
-// unmarshalECKey parses and checks an EC key.
-func unmarshalECKey(curve elliptic.Curve, pubkey []byte) (x, y *big.Int, err 
error) {
-       x, y = elliptic.Unmarshal(curve, pubkey)
-       if x == nil {
-               return nil, nil, errors.New("ssh: elliptic.Unmarshal failure")
-       }
-       if !validateECPublicKey(curve, x, y) {
-               return nil, nil, errors.New("ssh: public key not on curve")
-       }
-       return x, y, nil
-}
-
-// validateECPublicKey checks that the point is a valid public key for
-// the given curve. See [SEC1], 3.2.2
-func validateECPublicKey(curve elliptic.Curve, x, y *big.Int) bool {
-       if x.Sign() == 0 && y.Sign() == 0 {
-               return false
-       }
-
-       if x.Cmp(curve.Params().P) >= 0 {
-               return false
-       }
-
-       if y.Cmp(curve.Params().P) >= 0 {
-               return false
-       }
-
-       if !curve.IsOnCurve(x, y) {
-               return false
-       }
-
-       // We don't check if N * PubKey == 0, since
-       //
-       // - the NIST curves have cofactor = 1, so this is implicit.
-       // (We don't foresee an implementation that supports non NIST
-       // curves)
-       //
-       // - for ephemeral keys, we don't need to worry about small
-       // subgroup attacks.
-       return true
-}
-
-func (kex *ecdh) Server(c packetConn, rand io.Reader, magics *handshakeMagics, 
priv Signer) (result *kexResult, err error) {
-       packet, err := c.readPacket()
-       if err != nil {
-               return nil, err
-       }
-
-       var kexECDHInit kexECDHInitMsg
-       if err = Unmarshal(packet, &kexECDHInit); err != nil {
-               return nil, err
-       }
-
-       clientX, clientY, err := unmarshalECKey(kex.curve, 
kexECDHInit.ClientPubKey)
-       if err != nil {
-               return nil, err
-       }
-
-       // We could cache this key across multiple users/multiple
-       // connection attempts, but the benefit is small. OpenSSH
-       // generates a new key for each incoming connection.
-       ephKey, err := ecdsa.GenerateKey(kex.curve, rand)
-       if err != nil {
-               return nil, err
-       }
-
-       hostKeyBytes := priv.PublicKey().Marshal()
-
-       serializedEphKey := elliptic.Marshal(kex.curve, ephKey.PublicKey.X, 
ephKey.PublicKey.Y)
-
-       // generate shared secret
-       secret, _ := kex.curve.ScalarMult(clientX, clientY, ephKey.D.Bytes())
-
-       h := ecHash(kex.curve).New()
-       magics.write(h)
-       writeString(h, hostKeyBytes)
-       writeString(h, kexECDHInit.ClientPubKey)
-       writeString(h, serializedEphKey)
-
-       K := make([]byte, intLength(secret))
-       marshalInt(K, secret)
-       h.Write(K)
-
-       H := h.Sum(nil)
-
-       // H is already a hash, but the hostkey signing will apply its
-       // own key-specific hash algorithm.
-       sig, err := signAndMarshal(priv, rand, H)
-       if err != nil {
-               return nil, err
-       }
-
-       reply := kexECDHReplyMsg{
-               EphemeralPubKey: serializedEphKey,
-               HostKey:         hostKeyBytes,
-               Signature:       sig,
-       }
-
-       serialized := Marshal(&reply)
-       if err := c.writePacket(serialized); err != nil {
-               return nil, err
-       }
-
-       return &kexResult{
-               H:         H,
-               K:         K,
-               HostKey:   reply.HostKey,
-               Signature: sig,
-               Hash:      ecHash(kex.curve),
-       }, nil
-}
-
-var kexAlgoMap = map[string]kexAlgorithm{}
-
-func init() {
-       // This is the group called diffie-hellman-group1-sha1 in RFC
-       // 4253 and Oakley Group 2 in RFC 2409.
-       p, _ := 
new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF",
 16)
-       kexAlgoMap[kexAlgoDH1SHA1] = &dhGroup{
-               g: new(big.Int).SetInt64(2),
-               p: p,
-       }
-
-       // This is the group called diffie-hellman-group14-sha1 in RFC
-       // 4253 and Oakley Group 14 in RFC 3526.
-       p, _ = 
new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF",
 16)
-
-       kexAlgoMap[kexAlgoDH14SHA1] = &dhGroup{
-               g: new(big.Int).SetInt64(2),
-               p: p,
-       }
-
-       kexAlgoMap[kexAlgoECDH521] = &ecdh{elliptic.P521()}
-       kexAlgoMap[kexAlgoECDH384] = &ecdh{elliptic.P384()}
-       kexAlgoMap[kexAlgoECDH256] = &ecdh{elliptic.P256()}
-       kexAlgoMap[kexAlgoCurve25519SHA256] = &curve25519sha256{}
-}
-
-// curve25519sha256 implements the curve25519-sha...@libssh.org key
-// agreement protocol, as described in
-// 
https://git.libssh.org/projects/libssh.git/tree/doc/curve25519-sha...@libssh.org.txt
-type curve25519sha256 struct{}
-
-type curve25519KeyPair struct {
-       priv [32]byte
-       pub  [32]byte
-}
-
-func (kp *curve25519KeyPair) generate(rand io.Reader) error {
-       if _, err := io.ReadFull(rand, kp.priv[:]); err != nil {
-               return err
-       }
-       curve25519.ScalarBaseMult(&kp.pub, &kp.priv)
-       return nil
-}
-
-// curve25519Zeros is just an array of 32 zero bytes so that we have something
-// convenient to compare against in order to reject curve25519 points with the
-// wrong order.
-var curve25519Zeros [32]byte
-
-func (kex *curve25519sha256) Client(c packetConn, rand io.Reader, magics 
*handshakeMagics) (*kexResult, error) {
-       var kp curve25519KeyPair
-       if err := kp.generate(rand); err != nil {
-               return nil, err
-       }
-       if err := c.writePacket(Marshal(&kexECDHInitMsg{kp.pub[:]})); err != 
nil {
-               return nil, err
-       }
-
-       packet, err := c.readPacket()
-       if err != nil {
-               return nil, err
-       }
-
-       var reply kexECDHReplyMsg
-       if err = Unmarshal(packet, &reply); err != nil {
-               return nil, err
-       }
-       if len(reply.EphemeralPubKey) != 32 {
-               return nil, errors.New("ssh: peer's curve25519 public value has 
wrong length")
-       }
-
-       var servPub, secret [32]byte
-       copy(servPub[:], reply.EphemeralPubKey)
-       curve25519.ScalarMult(&secret, &kp.priv, &servPub)
-       if subtle.ConstantTimeCompare(secret[:], curve25519Zeros[:]) == 1 {
-               return nil, errors.New("ssh: peer's curve25519 public value has 
wrong order")
-       }
-
-       h := crypto.SHA256.New()
-       magics.write(h)
-       writeString(h, reply.HostKey)
-       writeString(h, kp.pub[:])
-       writeString(h, reply.EphemeralPubKey)
-
-       kInt := new(big.Int).SetBytes(secret[:])
-       K := make([]byte, intLength(kInt))
-       marshalInt(K, kInt)
-       h.Write(K)
-
-       return &kexResult{
-               H:         h.Sum(nil),
-               K:         K,
-               HostKey:   reply.HostKey,
-               Signature: reply.Signature,
-               Hash:      crypto.SHA256,
-       }, nil
-}
-
-func (kex *curve25519sha256) Server(c packetConn, rand io.Reader, magics 
*handshakeMagics, priv Signer) (result *kexResult, err error) {
-       packet, err := c.readPacket()
-       if err != nil {
-               return
-       }
-       var kexInit kexECDHInitMsg
-       if err = Unmarshal(packet, &kexInit); err != nil {
-               return
-       }
-
-       if len(kexInit.ClientPubKey) != 32 {
-               return nil, errors.New("ssh: peer's curve25519 public value has 
wrong length")
-       }
-
-       var kp curve25519KeyPair
-       if err := kp.generate(rand); err != nil {
-               return nil, err
-       }
-
-       var clientPub, secret [32]byte
-       copy(clientPub[:], kexInit.ClientPubKey)
-       curve25519.ScalarMult(&secret, &kp.priv, &clientPub)
-       if subtle.ConstantTimeCompare(secret[:], curve25519Zeros[:]) == 1 {
-               return nil, errors.New("ssh: peer's curve25519 public value has 
wrong order")
-       }
-
-       hostKeyBytes := priv.PublicKey().Marshal()
-
-       h := crypto.SHA256.New()
-       magics.write(h)
-       writeString(h, hostKeyBytes)
-       writeString(h, kexInit.ClientPubKey)
-       writeString(h, kp.pub[:])
-
-       kInt := new(big.Int).SetBytes(secret[:])
-       K := make([]byte, intLength(kInt))
-       marshalInt(K, kInt)
-       h.Write(K)
-
-       H := h.Sum(nil)
-
-       sig, err := signAndMarshal(priv, rand, H)
-       if err != nil {
-               return nil, err
-       }
-
-       reply := kexECDHReplyMsg{
-               EphemeralPubKey: kp.pub[:],
-               HostKey:         hostKeyBytes,
-               Signature:       sig,
-       }
-       if err := c.writePacket(Marshal(&reply)); err != nil {
-               return nil, err
-       }
-       return &kexResult{
-               H:         H,
-               K:         K,
-               HostKey:   hostKeyBytes,
-               Signature: sig,
-               Hash:      crypto.SHA256,
-       }, nil
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/868863aa/cli/vendor/golang.org/x/crypto/ssh/kex_test.go
----------------------------------------------------------------------
diff --git a/cli/vendor/golang.org/x/crypto/ssh/kex_test.go 
b/cli/vendor/golang.org/x/crypto/ssh/kex_test.go
deleted file mode 100644
index 12ca0ac..0000000
--- a/cli/vendor/golang.org/x/crypto/ssh/kex_test.go
+++ /dev/null
@@ -1,50 +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
-
-// Key exchange tests.
-
-import (
-       "crypto/rand"
-       "reflect"
-       "testing"
-)
-
-func TestKexes(t *testing.T) {
-       type kexResultErr struct {
-               result *kexResult
-               err    error
-       }
-
-       for name, kex := range kexAlgoMap {
-               a, b := memPipe()
-
-               s := make(chan kexResultErr, 1)
-               c := make(chan kexResultErr, 1)
-               var magics handshakeMagics
-               go func() {
-                       r, e := kex.Client(a, rand.Reader, &magics)
-                       a.Close()
-                       c <- kexResultErr{r, e}
-               }()
-               go func() {
-                       r, e := kex.Server(b, rand.Reader, &magics, 
testSigners["ecdsa"])
-                       b.Close()
-                       s <- kexResultErr{r, e}
-               }()
-
-               clientRes := <-c
-               serverRes := <-s
-               if clientRes.err != nil {
-                       t.Errorf("client: %v", clientRes.err)
-               }
-               if serverRes.err != nil {
-                       t.Errorf("server: %v", serverRes.err)
-               }
-               if !reflect.DeepEqual(clientRes.result, serverRes.result) {
-                       t.Errorf("kex %q: mismatch %#v, %#v", name, 
clientRes.result, serverRes.result)
-               }
-       }
-}

Reply via email to