1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
package main
import (
"bytes"
"encoding/json"
"flag"
"fmt"
"io/ioutil"
"github.com/cloudflare/cfssl/transport"
"github.com/cloudflare/cfssl/transport/core"
"github.com/cloudflare/cfssl/transport/example/exlib"
)
// maclient is a mutual-authentication client, meant to demonstrate
// using the client-side mutual authentication side of the transport
// package.
var messages = []string{"hello world", "hello", "world"}
func main() {
var addr, conf string
flag.StringVar(&addr, "a", "127.0.0.1:9876", "`address` of server")
flag.StringVar(&conf, "f", "client.json", "config `file` to use")
flag.Parse()
var id = new(core.Identity)
data, err := ioutil.ReadFile(conf)
if err != nil {
exlib.Err(1, err, "reading config file")
}
err = json.Unmarshal(data, id)
if err != nil {
exlib.Err(1, err, "parsing config file")
}
tr, err := transport.New(exlib.Before, id)
if err != nil {
exlib.Err(1, err, "creating transport")
}
conn, err := transport.Dial(addr, tr)
if err != nil {
exlib.Err(1, err, "dialing %s", addr)
}
defer conn.Close()
for _, msg := range messages {
if err = exlib.Pack(conn, []byte(msg)); err != nil {
exlib.Err(1, err, "sending message")
}
var resp []byte
resp, err = exlib.Unpack(conn)
if err != nil {
exlib.Err(1, err, "receiving message")
}
if !bytes.Equal(resp, []byte("OK")) {
exlib.Errx(1, "server didn't send an OK message; received '%s'", resp)
}
}
err = exlib.Pack(conn, []byte{})
if err != nil {
exlib.Err(1, err, "sending shutdown message failed")
}
fmt.Println("OK")
}
|