Refactor node ID handling, use check digits (fixes #269)

New node ID:s contain four Luhn check digits and are grouped
differently. Code uses NodeID type instead of string, so it's formatted
homogenously everywhere.
This commit is contained in:
Jakob Borg
2014-06-30 01:42:03 +02:00
parent fee8289c0a
commit 8f3effed32
35 changed files with 563 additions and 478 deletions

View File

@@ -327,7 +327,7 @@ func restGetSystem(w http.ResponseWriter) {
runtime.ReadMemStats(&m)
res := make(map[string]interface{})
res["myID"] = myID
res["myID"] = myID.String()
res["goroutines"] = runtime.NumGoroutine()
res["alloc"] = m.Alloc
res["sys"] = m.Sys

View File

@@ -61,7 +61,7 @@ func init() {
var (
cfg config.Configuration
myID string
myID protocol.NodeID
confDir string
logFlags int = log.Ltime
rateBucket *ratelimit.Bucket
@@ -181,8 +181,8 @@ func main() {
l.FatalErr(err)
}
myID = certID(cert.Certificate[0])
l.SetPrefix(fmt.Sprintf("[%s] ", myID[:5]))
myID = protocol.NewNodeID(cert.Certificate[0])
l.SetPrefix(fmt.Sprintf("[%s] ", myID.String()[:5]))
l.Infoln(LongVersion)
l.Infoln("My ID:", myID)
@@ -263,7 +263,7 @@ func main() {
tlsCfg := &tls.Config{
Certificates: []tls.Certificate{cert},
NextProtos: []string{"bep/1.0"},
ServerName: myID,
ServerName: myID.String(),
ClientAuth: tls.RequestClientCert,
SessionTicketsDisabled: true,
InsecureSkipVerify: true,
@@ -567,7 +567,7 @@ func saveConfig() {
saveConfigCh <- struct{}{}
}
func listenConnect(myID string, m *model.Model, tlsCfg *tls.Config) {
func listenConnect(myID protocol.NodeID, m *model.Model, tlsCfg *tls.Config) {
var conns = make(chan *tls.Conn)
// Listen
@@ -673,7 +673,7 @@ next:
conn.Close()
continue
}
remoteID := certID(certs[0].Raw)
remoteID := protocol.NewNodeID(certs[0].Raw)
if remoteID == myID {
l.Infof("Connected to myself (%s) - should not happen", remoteID)

View File

@@ -11,14 +11,12 @@ import (
"crypto/tls"
"crypto/x509"
"crypto/x509/pkix"
"encoding/base32"
"encoding/binary"
"encoding/pem"
"math/big"
mr "math/rand"
"os"
"path/filepath"
"strings"
"time"
)
@@ -28,14 +26,9 @@ const (
)
func loadCert(dir string, prefix string) (tls.Certificate, error) {
return tls.LoadX509KeyPair(filepath.Join(dir, prefix+"cert.pem"), filepath.Join(dir, prefix+"key.pem"))
}
func certID(bs []byte) string {
hf := sha256.New()
hf.Write(bs)
id := hf.Sum(nil)
return strings.Trim(base32.StdEncoding.EncodeToString(id), "=")
cf := filepath.Join(dir, prefix+"cert.pem")
kf := filepath.Join(dir, prefix+"key.pem")
return tls.LoadX509KeyPair(cf, kf)
}
func certSeed(bs []byte) int64 {

View File

@@ -23,7 +23,7 @@ var stopUsageReportingCh = make(chan struct{})
func reportData(m *model.Model) map[string]interface{} {
res := make(map[string]interface{})
res["uniqueID"] = strings.ToLower(certID([]byte(myID)))[:6]
res["uniqueID"] = strings.ToLower(myID.String()[:6])
res["version"] = Version
res["longVersion"] = LongVersion
res["platform"] = runtime.GOOS + "-" + runtime.GOARCH