added the version subcommand
added subjectAltNames to the embedded cert file
This commit is contained in:
parent
dcf3d852d2
commit
21997e6f74
17
Makefile
17
Makefile
@ -1,3 +1,6 @@
|
||||
NAME=hodu
|
||||
VERSION=1.0.0
|
||||
|
||||
SRCS=\
|
||||
client.go \
|
||||
client-ctl.go \
|
||||
@ -20,14 +23,14 @@ CMD_SRCS=\
|
||||
cmd/config.go \
|
||||
cmd/main.go \
|
||||
|
||||
all: hodu
|
||||
all: $(NAME)
|
||||
|
||||
hodu: $(SRCS) $(CMD_DATA) $(CMD_SRCS)
|
||||
CGO_ENABLED=0 go build -x -o $@ $(CMD_SRCS)
|
||||
$(NAME): $(SRCS) $(CMD_DATA) $(CMD_SRCS)
|
||||
CGO_ENABLED=0 go build -x -ldflags "-X 'main.HODU_NAME=$(NAME)' -X 'main.HODU_VERSION=$(VERSION)'" -o $@ $(CMD_SRCS)
|
||||
|
||||
clean:
|
||||
go clean -x -i
|
||||
rm -f hodu
|
||||
rm -f $(NAME)
|
||||
|
||||
hodu.pb.go: hodu.proto
|
||||
protoc --go_out=. --go_opt=paths=source_relative \
|
||||
@ -40,9 +43,9 @@ hodu_grpc.pb.go: hodu.proto
|
||||
hodu.proto
|
||||
|
||||
cmd/tls.crt:
|
||||
openssl req -x509 -newkey rsa:4096 -keyout cmd/tls.key -out cmd/tls.crt -sha256 -days 36500 -nodes -subj "/CN=hodu"
|
||||
openssl req -x509 -newkey rsa:4096 -keyout cmd/tls.key -out cmd/tls.crt -sha256 -days 36500 -nodes -subj "/CN=$(NAME)" --addext "subjectAltName=DNS:$(NAME),IP:10.0.0.1,IP:::1"
|
||||
|
||||
cmd/tls.key:
|
||||
openssl req -x509 -newkey rsa:4096 -keyout cmd/tls.key -out cmd/tls.crt -sha256 -days 36500 -nodes -subj "/CN=hodu"
|
||||
openssl req -x509 -newkey rsa:4096 -keyout cmd/tls.key -out cmd/tls.crt -sha256 -days 36500 -nodes -subj "/CN=$(NAME)" --addext "subjectAltName=DNS:$(NAME),IP:10.0.0.1,IP:::1"
|
||||
|
||||
.PHONY: clean
|
||||
.PHONY: clean certfiles
|
||||
|
@ -731,7 +731,7 @@ start_over:
|
||||
|
||||
// seed exchange is for furture expansion of the protocol
|
||||
// there is nothing to do much about it for now.
|
||||
c_seed.Version = HODU_VERSION
|
||||
c_seed.Version = HODU_RPC_VERSION
|
||||
c_seed.Flags = 0
|
||||
s_seed, err = cts.hdc.GetSeed(cts.cli.ctx, &c_seed)
|
||||
if err != nil {
|
||||
|
144
cmd/config.go
144
cmd/config.go
@ -1,7 +1,11 @@
|
||||
package main
|
||||
|
||||
import "crypto/tls"
|
||||
import "crypto/x509"
|
||||
import "errors"
|
||||
import "fmt"
|
||||
import "io"
|
||||
import "io/ioutil"
|
||||
import "os"
|
||||
|
||||
import "gopkg.in/yaml.v3"
|
||||
@ -56,7 +60,7 @@ type ClientConfig struct {
|
||||
}
|
||||
|
||||
|
||||
func LoadServerConfig(cfgfile string) (*ServerConfig, error) {
|
||||
func load_server_config(cfgfile string) (*ServerConfig, error) {
|
||||
var cfg ServerConfig
|
||||
var f *os.File
|
||||
var yd *yaml.Decoder
|
||||
@ -77,7 +81,7 @@ func LoadServerConfig(cfgfile string) (*ServerConfig, error) {
|
||||
return &cfg, nil
|
||||
}
|
||||
|
||||
func LoadClientConfig(cfgfile string) (*ClientConfig, error) {
|
||||
func load_client_config(cfgfile string) (*ClientConfig, error) {
|
||||
var cfg ClientConfig
|
||||
var f *os.File
|
||||
var yd *yaml.Decoder
|
||||
@ -97,3 +101,139 @@ func LoadClientConfig(cfgfile string) (*ClientConfig, error) {
|
||||
|
||||
return &cfg, nil
|
||||
}
|
||||
|
||||
|
||||
func tls_string_to_client_auth_type(str string) tls.ClientAuthType {
|
||||
switch str {
|
||||
case tls.NoClientCert.String():
|
||||
return tls.NoClientCert
|
||||
case tls.RequestClientCert.String():
|
||||
return tls.RequestClientCert
|
||||
case tls.RequireAnyClientCert.String():
|
||||
return tls.RequireAnyClientCert
|
||||
case tls.VerifyClientCertIfGiven.String():
|
||||
return tls.VerifyClientCertIfGiven
|
||||
case tls.RequireAndVerifyClientCert.String():
|
||||
return tls.RequireAndVerifyClientCert
|
||||
default:
|
||||
return tls.NoClientCert
|
||||
}
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
func make_tls_server_config(cfg *ServerTLSConfig) (*tls.Config, error) {
|
||||
var tlscfg *tls.Config
|
||||
|
||||
if cfg.Enabled {
|
||||
var cert tls.Certificate
|
||||
var cert_pool *x509.CertPool
|
||||
var err error
|
||||
|
||||
if cfg.CertText != "" && cfg.KeyText != "" {
|
||||
cert, err = tls.X509KeyPair([]byte(cfg.CertText), []byte(cfg.KeyText))
|
||||
} else if cfg.CertFile != "" && cfg.KeyFile != "" {
|
||||
cert, err = tls.LoadX509KeyPair(cfg.CertFile, cfg.KeyFile)
|
||||
} else {
|
||||
// use the embedded certificate
|
||||
cert, err = tls.X509KeyPair(hodu_tls_cert_text, hodul_tls_key_text)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to load key pair - %s", err)
|
||||
}
|
||||
|
||||
if cfg.ClientCACertText != "" || cfg.ClientCACertFile != ""{
|
||||
var ok bool
|
||||
|
||||
cert_pool = x509.NewCertPool()
|
||||
|
||||
if cfg.ClientCACertText != "" {
|
||||
ok = cert_pool.AppendCertsFromPEM([]byte(cfg.ClientCACertText))
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("failed to append certificate to pool")
|
||||
}
|
||||
} else if cfg.ClientCACertFile != "" {
|
||||
var text []byte
|
||||
text, err = ioutil.ReadFile(cfg.ClientCACertFile)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to load ca certficate file %s - %s", cfg.ClientCACertFile, err.Error())
|
||||
}
|
||||
ok = cert_pool.AppendCertsFromPEM(text)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("failed to append certificate to pool")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tlscfg = &tls.Config{
|
||||
Certificates: []tls.Certificate{cert},
|
||||
// If multiple certificates are configured, we may have to implement GetCertificate
|
||||
// GetCertificate: func (chi *tls.ClientHelloInfo) (*Certificate, error) { return cert, nil }
|
||||
ClientAuth: tls_string_to_client_auth_type(cfg.ClientAuthType),
|
||||
ClientCAs: cert_pool, // trusted CA certs for client certificate verification
|
||||
}
|
||||
}
|
||||
|
||||
return tlscfg, nil
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
func make_tls_client_config(cfg *ClientTLSConfig) (*tls.Config, error) {
|
||||
var tlscfg *tls.Config
|
||||
|
||||
if cfg.Enabled {
|
||||
var cert tls.Certificate
|
||||
var cert_pool *x509.CertPool
|
||||
var ok bool
|
||||
var err error
|
||||
|
||||
if cfg.CertText != "" && cfg.KeyText != "" {
|
||||
cert, err = tls.X509KeyPair([]byte(cfg.CertText), []byte(cfg.KeyText))
|
||||
} else if cfg.CertFile != "" && cfg.KeyFile != "" {
|
||||
cert, err = tls.LoadX509KeyPair(cfg.CertFile, cfg.KeyFile)
|
||||
} else {
|
||||
// use the embedded certificate
|
||||
cert, err = tls.X509KeyPair(hodu_tls_cert_text, hodul_tls_key_text)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to load key pair - %s", err)
|
||||
}
|
||||
|
||||
cert_pool = x509.NewCertPool()
|
||||
|
||||
if cfg.ServerCACertText != "" {
|
||||
ok = cert_pool.AppendCertsFromPEM([]byte(cfg.ServerCACertText))
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("failed to append certificate to pool")
|
||||
}
|
||||
} else if cfg.ServerCACertFile != "" {
|
||||
var text []byte
|
||||
text, err = ioutil.ReadFile(cfg.ServerCACertFile)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to load ca certficate file %s - %s", cfg.ServerCACertFile, err.Error())
|
||||
}
|
||||
ok = cert_pool.AppendCertsFromPEM(text)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("failed to append certificate to pool")
|
||||
}
|
||||
} else {
|
||||
// trust the embedded certificate if not explicitly specified
|
||||
ok = cert_pool.AppendCertsFromPEM(hodu_tls_cert_text)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("failed to append certificate to pool")
|
||||
}
|
||||
}
|
||||
|
||||
if cfg.ServerName == "" { cfg.ServerName = HODU_NAME }
|
||||
tlscfg = &tls.Config{
|
||||
//Certificates: []tls.Certificate{cert},
|
||||
GetClientCertificate: func(cri *tls.CertificateRequestInfo) (*tls.Certificate, error) { return &cert, nil },
|
||||
RootCAs: cert_pool,
|
||||
InsecureSkipVerify: cfg.InsecureSkipVerify,
|
||||
ServerName: cfg.ServerName,
|
||||
}
|
||||
}
|
||||
|
||||
return tlscfg, nil
|
||||
}
|
||||
|
146
cmd/main.go
146
cmd/main.go
@ -2,13 +2,11 @@ package main
|
||||
|
||||
import "context"
|
||||
import "crypto/tls"
|
||||
import "crypto/x509"
|
||||
import _ "embed"
|
||||
import "flag"
|
||||
import "fmt"
|
||||
import "hodu"
|
||||
import "io"
|
||||
import "io/ioutil"
|
||||
import "os"
|
||||
import "os/signal"
|
||||
import "path/filepath"
|
||||
@ -18,6 +16,11 @@ import "sync"
|
||||
import "syscall"
|
||||
import "time"
|
||||
|
||||
|
||||
// Don't change these items to 'const' as they can be overridden with a linker option
|
||||
var HODU_NAME string = "hodu"
|
||||
var HODU_VERSION string = "0.0.0"
|
||||
|
||||
//go:embed tls.crt
|
||||
var hodu_tls_cert_text []byte
|
||||
//go:embed tls.key
|
||||
@ -136,138 +139,6 @@ func (sh *signal_handler) WriteLog(id string, level hodu.LogLevel, fmt string, a
|
||||
sh.svc.WriteLog(id, level, fmt, args...)
|
||||
}
|
||||
|
||||
func tls_string_to_client_auth_type(str string) tls.ClientAuthType {
|
||||
switch str {
|
||||
case tls.NoClientCert.String():
|
||||
return tls.NoClientCert
|
||||
case tls.RequestClientCert.String():
|
||||
return tls.RequestClientCert
|
||||
case tls.RequireAnyClientCert.String():
|
||||
return tls.RequireAnyClientCert
|
||||
case tls.VerifyClientCertIfGiven.String():
|
||||
return tls.VerifyClientCertIfGiven
|
||||
case tls.RequireAndVerifyClientCert.String():
|
||||
return tls.RequireAndVerifyClientCert
|
||||
default:
|
||||
return tls.NoClientCert
|
||||
}
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
func make_tls_server_config(cfg *ServerTLSConfig) (*tls.Config, error) {
|
||||
var tlscfg *tls.Config
|
||||
|
||||
if cfg.Enabled {
|
||||
var cert tls.Certificate
|
||||
var cert_pool *x509.CertPool
|
||||
var err error
|
||||
|
||||
if cfg.CertText != "" && cfg.KeyText != "" {
|
||||
cert, err = tls.X509KeyPair([]byte(cfg.CertText), []byte(cfg.KeyText))
|
||||
} else if cfg.CertFile != "" && cfg.KeyFile != "" {
|
||||
cert, err = tls.LoadX509KeyPair(cfg.CertFile, cfg.KeyFile)
|
||||
} else {
|
||||
// use the embedded certificate
|
||||
cert, err = tls.X509KeyPair(hodu_tls_cert_text, hodul_tls_key_text)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to load key pair - %s", err)
|
||||
}
|
||||
|
||||
if cfg.ClientCACertText != "" || cfg.ClientCACertFile != ""{
|
||||
var ok bool
|
||||
|
||||
cert_pool = x509.NewCertPool()
|
||||
|
||||
if cfg.ClientCACertText != "" {
|
||||
ok = cert_pool.AppendCertsFromPEM([]byte(cfg.ClientCACertText))
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("failed to append certificate to pool")
|
||||
}
|
||||
} else if cfg.ClientCACertFile != "" {
|
||||
var text []byte
|
||||
text, err = ioutil.ReadFile(cfg.ClientCACertFile)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to load ca certficate file %s - %s", cfg.ClientCACertFile, err.Error())
|
||||
}
|
||||
ok = cert_pool.AppendCertsFromPEM(text)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("failed to append certificate to pool")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tlscfg = &tls.Config{
|
||||
Certificates: []tls.Certificate{cert},
|
||||
// If multiple certificates are configured, we may have to implement GetCertificate
|
||||
// GetCertificate: func (chi *tls.ClientHelloInfo) (*Certificate, error) { return cert, nil }
|
||||
ClientAuth: tls_string_to_client_auth_type(cfg.ClientAuthType),
|
||||
ClientCAs: cert_pool, // trusted CA certs for client certificate verification
|
||||
}
|
||||
}
|
||||
|
||||
return tlscfg, nil
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
func make_tls_client_config(cfg *ClientTLSConfig) (*tls.Config, error) {
|
||||
var tlscfg *tls.Config
|
||||
|
||||
if cfg.Enabled {
|
||||
var cert tls.Certificate
|
||||
var cert_pool *x509.CertPool
|
||||
var err error
|
||||
|
||||
|
||||
if cfg.CertText != "" && cfg.KeyText != "" {
|
||||
cert, err = tls.X509KeyPair([]byte(cfg.CertText), []byte(cfg.KeyText))
|
||||
} else if cfg.CertFile != "" && cfg.KeyFile != "" {
|
||||
cert, err = tls.LoadX509KeyPair(cfg.CertFile, cfg.KeyFile)
|
||||
} else {
|
||||
// use the embedded certificate
|
||||
cert, err = tls.X509KeyPair(hodu_tls_cert_text, hodul_tls_key_text)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to load key pair - %s", err)
|
||||
}
|
||||
|
||||
if cfg.ServerCACertText != "" || cfg.ServerCACertFile != ""{
|
||||
var ok bool
|
||||
|
||||
cert_pool = x509.NewCertPool()
|
||||
|
||||
if cfg.ServerCACertText != "" {
|
||||
ok = cert_pool.AppendCertsFromPEM([]byte(cfg.ServerCACertText))
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("failed to append certificate to pool")
|
||||
}
|
||||
} else if cfg.ServerCACertFile != "" {
|
||||
var text []byte
|
||||
text, err = ioutil.ReadFile(cfg.ServerCACertFile)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to load ca certficate file %s - %s", cfg.ServerCACertFile, err.Error())
|
||||
}
|
||||
ok = cert_pool.AppendCertsFromPEM(text)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("failed to append certificate to pool")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tlscfg = &tls.Config{
|
||||
//Certificates: []tls.Certificate{cert},
|
||||
GetClientCertificate: func(cri *tls.CertificateRequestInfo) (*tls.Certificate, error) { return &cert, nil },
|
||||
RootCAs: cert_pool,
|
||||
InsecureSkipVerify: cfg.InsecureSkipVerify,
|
||||
ServerName: cfg.ServerName,
|
||||
}
|
||||
}
|
||||
|
||||
return tlscfg, nil
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
func server_main(ctl_addrs []string, svcaddrs []string, cfg *ServerConfig) error {
|
||||
@ -385,7 +256,7 @@ func main() {
|
||||
}
|
||||
|
||||
if (cfgfile != "") {
|
||||
cfg, err = LoadServerConfig(cfgfile)
|
||||
cfg, err = load_server_config(cfgfile)
|
||||
if err != nil {
|
||||
fmt.Printf ("ERROR: failed to load configuration file %s - %s\n", cfgfile, err.Error())
|
||||
goto oops
|
||||
@ -431,7 +302,7 @@ func main() {
|
||||
}
|
||||
|
||||
if (cfgfile != "") {
|
||||
cfg, err = LoadClientConfig(cfgfile)
|
||||
cfg, err = load_client_config(cfgfile)
|
||||
if err != nil {
|
||||
fmt.Printf ("ERROR: failed to load configuration file %s - %s\n", cfgfile, err.Error())
|
||||
goto oops
|
||||
@ -443,6 +314,8 @@ func main() {
|
||||
fmt.Fprintf(os.Stderr, "ERROR: client error - %s\n", err.Error())
|
||||
goto oops
|
||||
}
|
||||
} else if strings.EqualFold(os.Args[1], "version") {
|
||||
fmt.Printf("%s %s\n", HODU_NAME, HODU_VERSION)
|
||||
} else {
|
||||
goto wrong_usage
|
||||
}
|
||||
@ -452,6 +325,7 @@ func main() {
|
||||
wrong_usage:
|
||||
fmt.Fprintf(os.Stderr, "USAGE: %s server --rpc-on=addr:port --ctl-on=addr:port\n", os.Args[0])
|
||||
fmt.Fprintf(os.Stderr, " %s client --rpc-server=addr:port --ctl-on=addr:port [peer-addr:peer-port ...]\n", os.Args[0])
|
||||
fmt.Fprintf(os.Stderr, " %s version\n", os.Args[0])
|
||||
os.Exit(1)
|
||||
|
||||
oops:
|
||||
|
55
cmd/tls.crt
55
cmd/tls.crt
@ -1,29 +1,30 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFATCCAumgAwIBAgIUYf8nD4uZJgKt00E1vhq2Kmbc3S8wDQYJKoZIhvcNAQEL
|
||||
BQAwDzENMAsGA1UEAwwEaG9kdTAgFw0yNDEyMDcwMzQwMzFaGA8yMTI0MTExMzAz
|
||||
NDAzMVowDzENMAsGA1UEAwwEaG9kdTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
|
||||
AgoCggIBAI8fLL9mkZH38Hu0zftteEKbDU7fsWLhUBg+vvPthIkEFowpWWrp6Pf7
|
||||
l2fu6jfAh8NzxFCafhrCMNqtN6dvCJQ8chB4E9fT2hWtbkZE+YnbQo7zundXelza
|
||||
CxnTE9f1r+LJ9CfymuA+2hz5RG+gU+k+JT2d0GpwSiCuUt2NnfGUOWfFdNTAxsbX
|
||||
pffCdjeyjlbrjkZKpNpWudmE0XcAJH/CGq0Y3SCjuU4tDKJ6aJ0ozLbUxP8UTOgr
|
||||
jl8W6vtIbpc/Epk8K2ylugZdjLHcTH0DjcWPO8IsGSxVjgppsMYoBO0iM4KkNpD7
|
||||
PaJkofyeUkqkJ7vHQ/1MBx2yMGkfVdnwCCT6HZOohIdNk7Y2Azl8o9+Q2tBT/sGh
|
||||
UhCCtm3uFNiGjj6CoGsbmsu2SVS3AIJtkgDFcuFNIOiqxk322GY8kwZVLYMm0t77
|
||||
z3utOKm3zIedqh4yDtfYlIUmTASzXTXEmzQYOCvZyCYFtcqR3Q5uCu5e9grimkkl
|
||||
4WkaWOxdsHrACpmEJbpd+4l/mwg+WYPpWA81OnWfmO0qTRew6OGF5iaYtdF+5sPW
|
||||
lUvL5Y1k/TRMUd1cbsOhe0Hnb2QJYlNxxn3aI2jflhc8kVnSd3BfFn8qSzEooj7C
|
||||
zLiZS+Wmzxo5f1Wlb9KIyljODpeIp7o7f4IsySW7uq0hncxcDe8lAgMBAAGjUzBR
|
||||
MB0GA1UdDgQWBBTsf09ZVNMHbhXGpxWD/lcAIUmlRDAfBgNVHSMEGDAWgBTsf09Z
|
||||
VNMHbhXGpxWD/lcAIUmlRDAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUA
|
||||
A4ICAQAok06886mPX617Eg5SQw8JlZujt3FXxWWTeBuZJkOraZ2sirsocYh0ep28
|
||||
3FDYWFHJjHmHaGnfjmbDuQaZ8+dbGxr9vwCott7yw71q0FqZTjmAqdvmyLPeaYfA
|
||||
r2vdyNTWe9zI/7c0k8KnyNhsqXoDbmuQ65vUnXHe0r1u1WSlFj40rcpzSYwQ5F4S
|
||||
iZ3JymJkTTyxyeNjngTmBaxEhe7cP5S7bsmL5lsDLQgXVaJAJaQqIbrt8H9Snp1a
|
||||
9GG0+NgAevFonazwTJXj+QyYyWYD0uGHSR9gQtUL8okZhf+WtW1yIN9pWs8clVJc
|
||||
fmDklOfvpDmOQuYG10fUHH1NoyciPnQMWQWXI9Zvy3pd4qg/9DYKY54I8Y2J80Vn
|
||||
G/JqXjLCGp7IdB3lrLRe3XAca1SBbgCh3FhqD/W8Qb8aJLx2E6eDwZmW0ophpxXQ
|
||||
6zIsK+60Aruk8pHnsqc+n4rXGXprboMk5aF5tjhnLncF/D6/qvxEJN85RHCZfvOs
|
||||
hoWNe9jjPEvCUPB23kDBPLxxPEzJm3y4pvwmvImvV2+N6akRqGa3LbupJEqtVBKd
|
||||
/6IpFjzTQTPiq024jtZTVbx3vqdupWNcZcTkcdb4GfhgtNu3RYssqheknRIsjisF
|
||||
1TlVrONqaIsFe9V5UW3fqa/4h6S6pO99pcNSzJn3VSRkJhZoaw==
|
||||
MIIFKjCCAxKgAwIBAgIUUcQVWyBuVqxS2has1SP37VMCZWswDQYJKoZIhvcNAQEL
|
||||
BQAwDzENMAsGA1UEAwwEaG9kdTAgFw0yNDEyMDcxMjIwMTdaGA8yMTI0MTExMzEy
|
||||
MjAxN1owDzENMAsGA1UEAwwEaG9kdTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
|
||||
AgoCggIBALA3CTpqk2Uq7mlp64lNuIgucdyXNrfdHFnWCR8C5oYlRtqM0yC544uT
|
||||
8k9t8Hhgk5EJfaA7ZIpXNbaq9zhXDLgi0/BSNNaH0mzczpLUiuCjRa5aPXY3P+hk
|
||||
egBzgwjmnLDJMvOe1aVKoygBpLws+lpJc+khFk7m+pQ2g7CGizQPXEdQ5xFrKe6x
|
||||
K+NXeKhgsbHV0aegoeumppX6++6kZ2ietfd4DaHuO/RNaguwlVnI2H+t7tMsi82g
|
||||
ougu40Zc/HK4foU217fvyS4VE1HXx7TYnBDrnAIa8QRUTLJ5SB7PQw6ifZ8dinsT
|
||||
+yi4oOGQdXDo/lQeCbNg2wthBPcwwqbhnQ/gmhbshM1OhrzwsvzFgh6Mt+l5x+0B
|
||||
7AXeyMljx0lN6nyfMk1qCyca9CYc3HSoj7UDY62Aj7LCyAzGIhVPB5pNfopem13i
|
||||
9PcWyzeAn9ZZL3q7AXImevCRSPLW30JsVRPCyp2v3KYkxKqM/H6xhqywvh38oDbh
|
||||
AQjB8ygLh/H5ESoxN0leL8RvMd/1t59QpNGX8bzz+SbHCkyMJLEWiQEQIkmIg6nk
|
||||
awrWj/Lxg8pW2tt0srswYtTmUgav4lTLa1Ckph+75TAXFCEfDg2w0yIhhZBoAjt8
|
||||
/bggXGa/oIdYqJNtusrILOy9Yz97uNH8AMNlwHudpXnahOsij7z9AgMBAAGjfDB6
|
||||
MB0GA1UdDgQWBBQMtXgimCHgFkL/uzfevQKQA8Ns7zAfBgNVHSMEGDAWgBQMtXgi
|
||||
mCHgFkL/uzfevQKQA8Ns7zAPBgNVHRMBAf8EBTADAQH/MCcGA1UdEQQgMB6CBGhv
|
||||
ZHWHBAoAAAGHEAAAAAAAAAAAAAAAAAAAAAEwDQYJKoZIhvcNAQELBQADggIBAKf/
|
||||
g5BK+opuXs1r/WbHj6wZOYs/Yrto2MHuuQkKyywLtWx7KWcsKITPPNv2JNWvor6J
|
||||
aiOsOdU2iH/DNus3Ja8Ezs8Y5StN5irTHAAOR13ilGFnuAkQiTfY2+zpYZ5mLCZn
|
||||
X6YP0SCaSLlRqNda2nFeCoPNQI1zCrtbOsHeY7z0QJL/ZccaJdGt3j7/qGdzRqSP
|
||||
F8ZXWtPthYgnwdP11Px+iM/eT/ECQmq1CANb38/BUgvGRLo3mYQQm5SwLJVnNzbm
|
||||
IheWdaHE0PC6SBGkcNKL1UtiH8aHU3Flk8D6qriogmeRRb0MLIktQXu+oYPsZiVy
|
||||
eFCGUBnPPUFxzaeB8Cw0FjWxgpBj/Ga75BkHj3W9t/9XKBKKPCwV/vJ52uP0BY7H
|
||||
cnr8fwvGdzwRABTCseQe/smELfiepvtoEy6+cMLTG+0smMsmntJ6CVicqS2hW5gB
|
||||
ebA3aHvHZXoHdI0F3HzQtbzFoR27cI97GTWFWM2Cikccd26c5b9Bq7P+o1I/vCXV
|
||||
40KBxGMCzGeDqyb2Z7f5RjNgGZlMB6pnzHAMapimrvdx5Z6pPLfQWJnkhY18YFzH
|
||||
7T82ebDFbGwDBkf77gbE7sWhZUq3pZmlW5umhUhnaQHYTGSh7mZeDdnm79ihdbu/
|
||||
HGOsIDnLdHlVsu8y/jqapPCnsw7dIcKr2Qz4EY4W
|
||||
-----END CERTIFICATE-----
|
||||
|
100
cmd/tls.key
100
cmd/tls.key
@ -1,52 +1,52 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
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
|
||||
cE9VuuHZqcE0fWokNG7bO3t6lqPg
|
||||
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
|
||||
x0bCQqNhRuHGFx7YtBAUIK+FZTd7
|
||||
-----END PRIVATE KEY-----
|
||||
|
2
hodu.go
2
hodu.go
@ -2,7 +2,7 @@ package hodu
|
||||
|
||||
import "sync"
|
||||
|
||||
const HODU_VERSION uint32 = 0x010000
|
||||
const HODU_RPC_VERSION uint32 = 0x010000
|
||||
|
||||
type LogLevel int
|
||||
|
||||
|
@ -651,7 +651,7 @@ func (s *Server) GetSeed(ctx context.Context, c_seed *Seed) (*Seed, error) {
|
||||
// seed exchange is for furture expansion of the protocol
|
||||
// there is nothing to do much about it for now.
|
||||
|
||||
s_seed.Version = HODU_VERSION
|
||||
s_seed.Version = HODU_RPC_VERSION
|
||||
s_seed.Flags = 0
|
||||
|
||||
// we create no ServerConn structure associated with the connection
|
||||
|
Loading…
x
Reference in New Issue
Block a user