Skip to content
Snippets Groups Projects
Commit 53837894 authored by Benjamin Wenger's avatar Benjamin Wenger
Browse files

added a dummy name server and added bindings. tests needed

parent b15b3e39
No related branches found
No related tags found
3 merge requests!510Release,!419rewrote the health tracker to both consider if there are waiting rounds and...,!340Project/channels
......@@ -167,6 +167,38 @@ func NewChannelsManagerGoEventModel(e2eID, udID int,
return channelManagerTrackerSingleton.make(m), nil
}
// NewChannelsManagerGoEventModelDummyNameService constructs a
// ChannelsManager. This is not compatible with GoMobile Bindings because
// it receives the go event model. This uses the dummy name service
// and is for debugging only
// Parameters:
// - e2eID - The tracked e2e object ID. This can be retrieved using
// [E2e.GetID].
// - udID - The tracked UD object ID. This can be retrieved using
// [UserDiscovery.GetID].
func NewChannelsManagerGoEventModelDummyNameService(e2eID int, username string,
goEvent channels.EventModel) (*ChannelsManager, error) {
// Get user from singleton
user, err := e2eTrackerSingleton.get(e2eID)
if err != nil {
return nil, err
}
rng := user.api.GetRng().GetStream()
defer rng.Close()
nameService, err := channels.NewDummyNameService(username, rng)
if err != nil {
return nil, err
}
// Construct new channels manager
m := channels.NewManager(user.api.GetStorage().GetKV(), user.api.GetCmix(),
user.api.GetRng(), nameService, goEvent)
// Add channel to singleton and return
return channelManagerTrackerSingleton.make(m), nil
}
type ChannelGeneration struct {
Channel string
PrivateKey string
......
package channels
import (
"crypto/ed25519"
jww "github.com/spf13/jwalterweatherman"
"gitlab.com/elixxir/crypto/channel"
"io"
"time"
)
// NewDummyNameService returns a dummy object adhering to the name service
// This neither produces valid signatures or validates passed signature
// is is for Development and Debugging purposes only
func NewDummyNameService(username string, rng io.Reader) (NameService, error) {
jww.WARN.Printf("Creating a Dummy Name Service. This is for " +
"development and debugging only. It does not produce valid " +
"signatures or verify passed signatures. YOU SHOULD NEVER SEE THIS " +
"MESSAGE IN PRODUCTION")
dns := &dummyNameService{
username: username,
lease: time.Now().Add(35 * 24 * time.Hour),
}
//generate the private key
var err error
dns.public, dns.private, err = ed25519.GenerateKey(rng)
if err != nil {
return nil, err
}
//generate a dummy user discover identity to produce a validation signature
//just sign with our own key, it wont be evaluated anyhow
dns.validationSig = channel.SignChannelLease(dns.public, dns.username,
dns.lease, dns.private)
return dns, nil
}
type dummyNameService struct {
private ed25519.PrivateKey
public ed25519.PublicKey
username string
validationSig []byte
lease time.Time
}
func (dns *dummyNameService) GetUsername() string {
return dns.username
}
func (dns *dummyNameService) GetChannelValidationSignature() ([]byte, time.Time) {
jww.WARN.Printf("GetChannelValidationSignature called on Dummy Name " +
"Service, dummy signature from a random key returned - identity not " +
"proven. YOU SHOULD NEVER SEE THIS MESSAGE IN PRODUCTION")
return dns.validationSig, dns.lease
}
func (dns *dummyNameService) GetChannelPubkey() ed25519.PublicKey {
return dns.public
}
func (dns *dummyNameService) SignChannelMessage(message []byte) (signature []byte, err error) {
jww.WARN.Printf("SignChannelMessage called on Dummy Name Service, " +
"signature from a random key - identity not proven. YOU SHOULD " +
"NEVER SEE THIS MESSAGE IN PRODUCTION")
sig := ed25519.Sign(dns.private, message)
return sig, nil
}
func (dns *dummyNameService) ValidateChannelMessage(username string, lease time.Time,
pubKey ed25519.PublicKey, authorIDSignature []byte) bool {
//ignore the authorIDSignature
jww.WARN.Printf("ValidateChannelMessage called on Dummy Name Service, " +
"no validation done - identity not validated. YOU SHOULD NEVER SEE " +
"THIS MESSAGE IN PRODUCTION")
return true
}
......@@ -21,7 +21,7 @@ type NameService interface {
// GetChannelValidationSignature returns the validation
// signature and the time it was signed.
GetChannelValidationSignature() (signature []byte, lease time.Time)
GetChannelValidationSignature() ([]byte, time.Time)
// GetChannelPubkey returns the user's public key.
GetChannelPubkey() ed25519.PublicKey
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment