go.crypto/ssh: implement ECDH.

Implement elliptic-curve Diffie-Hellman, including host key signature
verification.

Moves host key cryptographic verification to ClientConn.handshake(), so
RSA host keys are also verified.

Fixes golang/go#6158.

R=dave, agl
CC=golang-dev
https://golang.org/cl/13021045
This commit is contained in:
Han-Wen Nienhuys
2013-08-28 10:50:25 -04:00
committed by Adam Langley
parent b725ff72eb
commit d7d50b0a7c
8 changed files with 538 additions and 84 deletions
+19 -13
View File
@@ -291,22 +291,28 @@ func marshalSignature(to []byte, sig *signature) []byte {
return to
}
func parseSignature(in []byte) (out *signature, rest []byte, ok bool) {
var sigBytes, format []byte
sig := new(signature)
func parseSignatureBody(in []byte) (out *signature, rest []byte, ok bool) {
var format []byte
if format, in, ok = parseString(in); !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) {
var sigBytes []byte
if sigBytes, rest, ok = parseString(in); !ok {
return
}
if format, sigBytes, ok = parseString(sigBytes); !ok {
return
}
sig.Format = string(format)
if sig.Blob, sigBytes, ok = parseString(sigBytes); !ok {
return
}
return sig, rest, ok
return parseSignatureBody(sigBytes)
}