Skip to content
Snippets Groups Projects
Select Git revision
  • c183df54f770c49c7f3f5c710b74c06a2c0c6b15
  • release default protected
  • 11-22-implement-kv-interface-defined-in-collectiveversionedkvgo
  • hotfix/TestHostPool_UpdateNdf_AddFilter
  • XX-4719/announcementChannels
  • xx-4717/logLevel
  • jonah/noob-channel
  • master protected
  • XX-4707/tagDiskJson
  • xx-4698/notification-retry
  • hotfix/notifylockup
  • syncNodes
  • hotfix/localCB
  • XX-4677/NewChanManagerMobile
  • XX-4689/DmSync
  • duplicatePrefix
  • XX-4601/HavenInvites
  • finalizedUICallbacks
  • XX-4673/AdminKeySync
  • debugNotifID
  • anne/test
  • v4.7.5
  • v4.7.4
  • v4.7.3
  • v4.7.2
  • v4.7.1
  • v4.6.3
  • v4.6.1
  • v4.5.0
  • v4.4.4
  • v4.3.11
  • v4.3.8
  • v4.3.7
  • v4.3.6
  • v4.3.5
  • v4.2.0
  • v4.3.0
  • v4.3.4
  • v4.3.3
  • v4.3.2
  • v4.3.1
41 results

random_test.go

Blame
  • addFact.go 2.17 KiB
    package ud
    
    import (
    	"crypto/rand"
    	"github.com/pkg/errors"
    	jww "github.com/spf13/jwalterweatherman"
    	pb "gitlab.com/elixxir/comms/mixmessages"
    	"gitlab.com/elixxir/crypto/factID"
    	"gitlab.com/elixxir/crypto/hash"
    	"gitlab.com/elixxir/primitives/fact"
    	"gitlab.com/xx_network/comms/connect"
    	"gitlab.com/xx_network/crypto/signature/rsa"
    	"gitlab.com/xx_network/primitives/id"
    )
    
    type addFactComms interface {
    	SendRegisterFact(host *connect.Host, message *pb.FactRegisterRequest) (*pb.FactRegisterResponse, error)
    }
    
    // SendRegisterFact adds a fact for the user to user discovery. Will only
    // succeed if the user is already registered and the system does not have the
    // fact currently registered for any user.
    // This does not complete the fact registration process, it returns a
    // confirmation id instead. Over the communications system the fact is
    // associated with, a code will be sent. This confirmation ID needs to be
    // called along with the code to finalize the fact.
    func (m *Manager) SendRegisterFact(fact fact.Fact) (string, error) {
    	jww.INFO.Printf("ud.SendRegisterFact(%s)", fact.Stringify())
    	return m.addFact(fact, m.myID, m.comms)
    }
    
    func (m *Manager) addFact(inFact fact.Fact, uid *id.ID, aFC addFactComms) (string, error) {
    
    	if !m.IsRegistered() {
    		return "", errors.New("Failed to add fact: " +
    			"client is not registered")
    	}
    
    	// Create a primitives Fact so we can hash it
    	f, err := fact.NewFact(inFact.T, inFact.Fact)
    	if err != nil {
    		return "", err
    	}
    
    	// Create a hash of our fact
    	fHash := factID.Fingerprint(f)
    
    	// Sign our inFact for putting into the request
    	fSig, err := rsa.Sign(rand.Reader, m.privKey, hash.CMixHash, fHash, nil)
    	if err != nil {
    		return "", err
    	}
    
    	// Create our Fact Removal Request message data
    	remFactMsg := pb.FactRegisterRequest{
    		UID: uid.Marshal(),
    		Fact: &pb.Fact{
    			Fact:     inFact.Fact,
    			FactType: uint32(inFact.T),
    		},
    		FactSig: fSig,
    	}
    
    	// Get UD host
    	host, err := m.getHost()
    	if err != nil {
    		return "", err
    	}
    
    	// Send the message
    	response, err := aFC.SendRegisterFact(host, &remFactMsg)
    
    	confirmationID := ""
    	if response != nil {
    		confirmationID = response.ConfirmationID
    	}
    
    	// Return the error
    	return confirmationID, err
    }