| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- // 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 (
- "fmt"
- "net"
- "testing"
- )
- func pipe() (net.Conn, net.Conn, error) {
- l, err := net.Listen("tcp", ":0")
- if err != nil {
- return nil, nil, err
- }
- conn1, err := net.Dial("tcp", l.Addr().String())
- if err != nil {
- return nil, nil, err
- }
- conn2, err := l.Accept()
- if err != nil {
- conn1.Close()
- return nil, nil, err
- }
- l.Close()
- return conn1, conn2, nil
- }
- func testKexAlgorithm(algo string) error {
- crypto := CryptoConfig{
- KeyExchanges: []string{algo},
- }
- serverConfig := ServerConfig{
- PasswordCallback: func(conn *ServerConn, user, password string) bool {
- return password == "password"
- },
- Crypto: crypto,
- }
- if err := serverConfig.SetRSAPrivateKey([]byte(testServerPrivateKey)); err != nil {
- return fmt.Errorf("SetRSAPrivateKey: %v", err)
- }
- clientConfig := ClientConfig{
- User: "user",
- Auth: []ClientAuth{ClientAuthPassword(password("password"))},
- Crypto: crypto,
- }
- conn1, conn2, err := pipe()
- if err != nil {
- return err
- }
- defer conn1.Close()
- defer conn2.Close()
- server := Server(conn2, &serverConfig)
- serverHS := make(chan error, 1)
- go func() {
- serverHS <- server.Handshake()
- }()
- // Client runs the handshake.
- _, err = Client(conn1, &clientConfig)
- if err != nil {
- return fmt.Errorf("Client: %v", err)
- }
- if err := <-serverHS; err != nil {
- return fmt.Errorf("server.Handshake: %v", err)
- }
- // Here we could check that we now can send data between client &
- // server.
- return nil
- }
- func TestKexAlgorithms(t *testing.T) {
- for _, algo := range []string{kexAlgoECDH256, kexAlgoECDH384, kexAlgoECDH521, kexAlgoDH1SHA1, kexAlgoDH14SHA1} {
- if err := testKexAlgorithm(algo); err != nil {
- t.Errorf("algorithm %s: %v", algo, err)
- }
- }
- }
|