diff --git a/auth/store/previousNegotiations.go b/auth/store/previousNegotiations.go index 0f7320ec2854ced997119a960ca6648ebff48c1e..37d9947e1da048a3c34230f04cbfd4802497e7a4 100644 --- a/auth/store/previousNegotiations.go +++ b/auth/store/previousNegotiations.go @@ -9,7 +9,6 @@ package store import ( "bytes" - "encoding/base64" "encoding/binary" "encoding/json" "os" @@ -215,8 +214,8 @@ func saveNegotiationFingerprints( // loadNegotiationFingerprints loads the list of sentByFingerprints for the given // partner from storage. func loadNegotiationFingerprints(partner *id.ID, kv *versioned.KV) ([][]byte, error) { - obj, err := kv.Get(makeNegotiationFingerprintsKey(partner), - currentNegotiationFingerprintsVersion) + fpKey := makeNegotiationFingerprintsKey(partner) + obj, err := kv.Get(fpKey, currentNegotiationFingerprintsVersion) if err != nil { return nil, err } @@ -262,8 +261,7 @@ func unmarshalNegotiationFingerprints(buf []byte) [][]byte { // makeOldNegotiationFingerprintsKey generates the key used to load and store // negotiation sentByFingerprints for the partner. func makeNegotiationFingerprintsKey(partner *id.ID) string { - return negotiationFingerprintsKeyPrefix + - string(base64.StdEncoding.EncodeToString(partner.Marshal())) + return negotiationFingerprintsKeyPrefix + partner.String() } // Historical functions diff --git a/auth/store/receivedRequest.go b/auth/store/receivedRequest.go index 2a9eaa56dcfc868bf42ee2141cec1c6112b33ca0..5eaee2e8e758c2e6f175a908d85a687dfb771f81 100644 --- a/auth/store/receivedRequest.go +++ b/auth/store/receivedRequest.go @@ -1,7 +1,7 @@ package store import ( - "encoding/base64" + "os" "sync" "github.com/cloudflare/circl/dh/sidh" @@ -61,7 +61,7 @@ func newReceivedRequest(kv *versioned.KV, c contact.Contact, func loadReceivedRequest(kv *versioned.KV, partner *id.ID) ( *ReceivedRequest, error) { - c, err := util.LoadContact(kv, partner) + c, contactVersion, err := util.LoadContact(kv, partner) if err != nil { return nil, errors.WithMessagef(err, "Failed to Load "+ "Received Auth Request Contact with %s", @@ -78,9 +78,14 @@ func loadReceivedRequest(kv *versioned.KV, partner *id.ID) ( round, err := rounds.LoadRound(kv, makeRoundKey(partner)) if err != nil { - return nil, errors.WithMessagef(err, "Failed to Load "+ - "round request was received on with %s", - partner) + if contactVersion == 0 && os.IsNotExist(err) { + jww.WARN.Printf("Old contact version, round to nil") + round = rounds.Round{} + } else { + return nil, errors.WithMessagef(err, "Failed to Load "+ + "round request was received on with %s", + partner) + } } return &ReceivedRequest{ @@ -120,6 +125,5 @@ func (rr *ReceivedRequest) getType() RequestType { } func makeRoundKey(partner *id.ID) string { - return "receivedRequestRound:" + - base64.StdEncoding.EncodeToString(partner.Marshal()) + return "receivedRequestRound:" + partner.String() } diff --git a/auth/store/sentRequest.go b/auth/store/sentRequest.go index c6080a9e059946ff9d04de06ad936b5650ea0cdb..9c70605aa0e4ddde19a2d1a59ca4e9fd5fb87115 100644 --- a/auth/store/sentRequest.go +++ b/auth/store/sentRequest.go @@ -8,9 +8,10 @@ package store import ( - "encoding/base64" "encoding/hex" "encoding/json" + "fmt" + "os" "sync" "github.com/cloudflare/circl/dh/sidh" @@ -24,7 +25,7 @@ import ( "gitlab.com/xx_network/primitives/netTime" ) -const currentSentRequestVersion = 0 +const currentSentRequestVersion = 1 type SentRequest struct { kv *versioned.KV @@ -73,8 +74,19 @@ func newSentRequest(kv *versioned.KV, partner *id.ID, partnerHistoricalPubKey, func loadSentRequest(kv *versioned.KV, partner *id.ID, grp *cyclic.Group) (*SentRequest, error) { srKey := makeSentRequestKey(partner) - obj, err := kv.Get(srKey, - currentSentRequestVersion) + obj, err := kv.Get(srKey, currentSentRequestVersion) + + // V0 Upgrade Path + if os.IsNotExist(err) { + obj2, err2 := kv.Get(makeOldSentRequestKey(partner), 0) + if err2 != nil { + jww.DEBUG.Printf("v0 loadSentRequest: %+v", err) + } else { + obj = obj2 + err = nil + } + // Note: uses same encoding, just different keys + } if err != nil { return nil, errors.WithMessagef(err, "Failed to Load "+ @@ -261,5 +273,11 @@ func (sr *SentRequest) getType() RequestType { } func makeSentRequestKey(partner *id.ID) string { - return "sentRequest:" + base64.StdEncoding.EncodeToString(partner.Marshal()) + return "sentRequest:" + partner.String() +} + +// V0 Utility Functions + +func makeOldSentRequestKey(partner *id.ID) string { + return fmt.Sprintf("Partner:%v", partner.String()) } diff --git a/storage/utility/contact.go b/storage/utility/contact.go index cccfef3483c47fc83579563e29b18e0578a17610..c599fa806e91ced30ec6629797aeac258762f0db 100644 --- a/storage/utility/contact.go +++ b/storage/utility/contact.go @@ -9,13 +9,14 @@ package utility import ( "fmt" + "gitlab.com/elixxir/client/storage/versioned" "gitlab.com/elixxir/crypto/contact" "gitlab.com/xx_network/primitives/id" "gitlab.com/xx_network/primitives/netTime" ) -const currentContactVersion = 0 +const currentContactVersion = 1 func StoreContact(kv *versioned.KV, c contact.Contact) error { now := netTime.Now() @@ -29,13 +30,14 @@ func StoreContact(kv *versioned.KV, c contact.Contact) error { return kv.Set(makeContactKey(c.ID), currentContactVersion, &obj) } -func LoadContact(kv *versioned.KV, cid *id.ID) (contact.Contact, error) { +func LoadContact(kv *versioned.KV, cid *id.ID) (contact.Contact, uint64, error) { vo, err := kv.Get(makeContactKey(cid), currentContactVersion) if err != nil { - return contact.Contact{}, err + return contact.Contact{}, vo.Version, err } - return contact.Unmarshal(vo.Data) + c, err := contact.Unmarshal(vo.Data) + return c, vo.Version, err } func DeleteContact(kv *versioned.KV, cid *id.ID) error {