72 lines
1.7 KiB
Go
72 lines
1.7 KiB
Go
package tlshandshake
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
trs "github.com/henrydcase/trs"
|
|
)
|
|
|
|
var TlsVersionToName = map[uint16]string{
|
|
trs.VersionTLS10: "1.0",
|
|
trs.VersionTLS11: "1.1",
|
|
trs.VersionTLS12: "1.2",
|
|
trs.VersionTLS13: "1.3",
|
|
}
|
|
|
|
var CipherSuiteIdToName = map[uint16]string{
|
|
trs.TLS_RSA_WITH_AES_128_CBC_SHA: "TLS_RSA_WITH_AES_128_CBC_SHA",
|
|
trs.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
|
|
trs.TLS_AES_128_GCM_SHA256: "TLS_AES_128_GCM_SHA256",
|
|
trs.TLS_AES_256_GCM_SHA384: "TLS_AES_256_GCM_SHA384",
|
|
trs.TLS_CHACHA20_POLY1305_SHA256: "TLS_CHACHA20_POLY1305_SHA256",
|
|
}
|
|
|
|
var NamedGroupsToName = map[uint16]string{
|
|
uint16(trs.HybridSIDHp503Curve25519): "X25519-SIDHp503",
|
|
uint16(trs.HybridSIKEp503Curve25519): "X25519-SIKEp503",
|
|
uint16(trs.X25519): "X25519",
|
|
uint16(trs.CurveP256): "P-256",
|
|
uint16(trs.CurveP384): "P-384",
|
|
uint16(trs.CurveP521): "P-521",
|
|
}
|
|
|
|
var failed uint
|
|
|
|
type Client struct {
|
|
TLS trs.Config
|
|
Addr string
|
|
}
|
|
|
|
func NewClient() *Client {
|
|
var c Client
|
|
c.TLS.InsecureSkipVerify = true
|
|
return &c
|
|
}
|
|
|
|
func (c *Client) Run() {
|
|
fmt.Printf("TLS %s with %s\n", TlsVersionToName[c.TLS.MinVersion], CipherSuiteIdToName[c.TLS.CipherSuites[0]])
|
|
|
|
con, err := trs.Dial("tcp", c.Addr, &c.TLS)
|
|
if err != nil {
|
|
fmt.Printf("handshake failed: %v\n\n", err)
|
|
failed++
|
|
return
|
|
}
|
|
defer con.Close()
|
|
|
|
fmt.Printf("[TLS: %s]\n", TlsVersionToName[con.ConnectionState().Version])
|
|
fmt.Println("OK\n")
|
|
}
|
|
|
|
func (c *Client) Clone() *Client {
|
|
var clone Client
|
|
clone.TLS = *c.TLS.Clone()
|
|
clone.Addr = c.Addr
|
|
return &clone
|
|
}
|
|
|
|
func (c *Client) SetMinMaxTLS(ver uint16) {
|
|
c.TLS.MinVersion = ver
|
|
c.TLS.MaxVersion = ver
|
|
}
|