From 0ede66dd95e1c90b46c5ad3905cee023b1dec142 Mon Sep 17 00:00:00 2001 From: Jono Wenger <jono@elixxir.io> Date: Fri, 26 Feb 2021 18:40:09 +0000 Subject: [PATCH] Jono/ud contact debug prints --- cmd/ud.go | 21 +++-- interfaces/contact/contact.go | 32 ++++---- interfaces/contact/contact_test.go | 121 +++++++++++------------------ 3 files changed, 76 insertions(+), 98 deletions(-) diff --git a/cmd/ud.go b/cmd/ud.go index 3c890c2e3..3bd4817ac 100644 --- a/cmd/ud.go +++ b/cmd/ud.go @@ -138,8 +138,7 @@ var udCmd = &cobra.Command{ if err != nil { jww.FATAL.Panicf("%+v", err) } - cBytes := newContact.Marshal() - fmt.Printf(string(cBytes)) + printContact(newContact) }, 90*time.Second) if err != nil { @@ -189,10 +188,8 @@ var udCmd = &cobra.Command{ if err != nil { jww.FATAL.Panicf("%+v", err) } - for i := 0; i < len(contacts); i++ { - cBytes := contacts[i].Marshal() - jww.INFO.Printf("Size Printed: %d", len(cBytes)) - fmt.Printf("%s", cBytes) + for _, c := range contacts { + printContact(c) } }, 90*time.Second) if err != nil { @@ -241,3 +238,15 @@ func init() { rootCmd.AddCommand(udCmd) } + +func printContact(c contact.Contact) { + jww.DEBUG.Printf("Printing client: %+v", c) + cBytes := c.Marshal() + if len(cBytes) == 0 { + jww.ERROR.Print("Marshaled client has a size of 0.") + } else { + jww.DEBUG.Printf("Printing marshaled contact of size %d.", len(cBytes)) + } + + fmt.Print(string(cBytes)) +} diff --git a/interfaces/contact/contact.go b/interfaces/contact/contact.go index 102b4b7d5..498500b03 100644 --- a/interfaces/contact/contact.go +++ b/interfaces/contact/contact.go @@ -80,22 +80,6 @@ func (c Contact) Marshal() []byte { return buff.Bytes() } -// Creates a 15 character long fingerprint of contact -// off of the ID and DH public key -func (c Contact) GetFingerprint() string { - // Generate hash - sha := crypto.SHA256 - h := sha.New() - - // Hash Id and public key - h.Write(c.ID.Bytes()) - h.Write(c.DhPubKey.Bytes()) - data := h.Sum(nil) - - // Encode hash and truncate - return base64.StdEncoding.EncodeToString(data[:])[:fingerprintLength] -} - // Unmarshal decodes the byte slice produced by Contact.Marshal into a Contact. func Unmarshal(b []byte) (Contact, error) { if len(b) < sizeByteLength*3+id.ArrIDLen { @@ -151,6 +135,22 @@ func Unmarshal(b []byte) (Contact, error) { return c, nil } +// GetFingerprint creates a 15 character long fingerprint of the contact off of +// the ID and DH public key. +func (c Contact) GetFingerprint() string { + // Generate hash + sha := crypto.SHA256 + h := sha.New() + + // Hash ID and DH public key + h.Write(c.ID.Bytes()) + h.Write(c.DhPubKey.Bytes()) + data := h.Sum(nil) + + // Base64 encode hash and truncate it + return base64.StdEncoding.EncodeToString(data)[:fingerprintLength] +} + // Equal determines if the two contacts have the same values. func Equal(a, b Contact) bool { return a.ID.Cmp(b.ID) && diff --git a/interfaces/contact/contact_test.go b/interfaces/contact/contact_test.go index 871b2f9bf..2d43f1818 100644 --- a/interfaces/contact/contact_test.go +++ b/interfaces/contact/contact_test.go @@ -11,7 +11,6 @@ import ( "crypto" "encoding/base64" "encoding/json" - "fmt" "gitlab.com/elixxir/crypto/cyclic" "gitlab.com/elixxir/primitives/fact" "gitlab.com/xx_network/crypto/csprng" @@ -38,8 +37,6 @@ func TestContact_Marshal_Unmarshal(t *testing.T) { buff := expectedContact.Marshal() - fmt.Println(string(buff)) - testContact, err := Unmarshal(buff) if err != nil { t.Errorf("Unmarshal() produced an error: %+v", err) @@ -101,78 +98,54 @@ func TestContact_Marshal_Size(t *testing.T) { } } -// Unit test of getFingerprint +// Unit test of GetFingerprint. func TestContact_GetFingerprint(t *testing.T) { c := Contact{ ID: id.NewIdFromString("Samwise", id.User, t), DhPubKey: getCycInt(512), } - contactString := c.GetFingerprint() - if len(contactString) != fingerprintLength { - t.Errorf("Unexpected length for fingerprint."+ - "\n\tExpected length: %d"+ - "\n\tReceived length: %d", len(contactString), fingerprintLength) + testFP := c.GetFingerprint() + if len(testFP) != fingerprintLength { + t.Errorf("GetFingerprint() returned fingerprint with unexpected length."+ + "\nexpected length: %d\nreceived length: %d", + fingerprintLength, len(testFP)) } - // Generate hash - sha := crypto.SHA256 - h := sha.New() - - // Hash Id and public key + // Generate expected fingerprint + h := crypto.SHA256.New() h.Write(c.ID.Bytes()) h.Write(c.DhPubKey.Bytes()) - data := h.Sum(nil) + expectedFP := base64.StdEncoding.EncodeToString(h.Sum(nil))[:fingerprintLength] - expectedFP := base64.StdEncoding.EncodeToString(data[:])[:fingerprintLength] - - if strings.Compare(contactString, expectedFP) != 0 { - t.Errorf("Fingerprint outputted is not expected."+ - "\n\tExpected: %s"+ - "\n\tReceived: %s", contactString, expectedFP) + if strings.Compare(expectedFP, testFP) != 0 { + t.Errorf("GetFingerprint() returned expected fingerprint."+ + "\nexpected: %s\nreceived: %s", expectedFP, testFP) } } -// Consistency test for changes in underlying dependencies +// Consistency test for changes in underlying dependencies. func TestContact_GetFingerprint_Consistency(t *testing.T) { expected := []string{ - "rBUw1n4jtH4uEYq", - "Z/Jm1OUwDaql5cd", - "+vHLzY+yH96zAiy", - "cZm5Iz78ViOIlnh", - "9LqrcbFEIV4C4LX", - "ll4eykGpMWYlxw+", - "6YQshWJhdPL6ajx", - "Y6gTPVEzow4IHOm", - "6f/rT2vWxDC9tdt", - "rwqbDT+PoeA6Iww", - "YN4IFijP/GZ172O", - "ScbHVQc2T9SXQ2m", - "50mfbCXQ+LIqiZn", - "cyRYdMKXByiFdtC", - "7g6ujy7iIbJVl4F", + "rBUw1n4jtH4uEYq", "Z/Jm1OUwDaql5cd", "+vHLzY+yH96zAiy", + "cZm5Iz78ViOIlnh", "9LqrcbFEIV4C4LX", "ll4eykGpMWYlxw+", + "6YQshWJhdPL6ajx", "Y6gTPVEzow4IHOm", "6f/rT2vWxDC9tdt", + "rwqbDT+PoeA6Iww", "YN4IFijP/GZ172O", "ScbHVQc2T9SXQ2m", + "50mfbCXQ+LIqiZn", "cyRYdMKXByiFdtC", "7g6ujy7iIbJVl4F", } - numTest := 15 - output := make([]string, 0) - for i := 0; i < numTest; i++ { + for i := range expected { c := Contact{ ID: id.NewIdFromUInt(uint64(i), id.User, t), DhPubKey: getGroup().NewInt(25), } - contactString := c.GetFingerprint() - output = append(output, contactString) - } - - for i := 0; i < numTest; i++ { - if strings.Compare(output[i], expected[i]) != 0 { - t.Errorf("Fingerprint outputted is not expected."+ - "\n\tReceived: %s"+ - "\n\tExpected: %s", output[i], expected[i]) + fp := c.GetFingerprint() + if expected[i] != fp { + t.Errorf("GetFingerprint() did not output the expected fingerprint (%d)."+ + "\nexpected: %s\nreceived: %s", i, expected[i], fp) } - } } @@ -183,9 +156,8 @@ func TestEqual(t *testing.T) { DhPubKey: getCycInt(512), OwnershipProof: make([]byte, 1024), Facts: fact.FactList{ - {Fact: "myVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongUsername", T: fact.Username}, - {Fact: "myVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongEmail@elixxir.io", T: fact.Email}, - {Fact: "6502530000US", T: fact.Phone}, + {Fact: "myUsername", T: fact.Username}, + {Fact: "devinputvalidation@elixxir.io", T: fact.Email}, }, } rand.Read(a.OwnershipProof) @@ -213,34 +185,31 @@ func TestEqual(t *testing.T) { } func getCycInt(size int) *cyclic.Int { - var primeString = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" + - "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" + - "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" + - "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" + - "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" + - "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" + - "83655D23DCA3AD961C62F356208552BB9ED529077096966D" + - "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" + - "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" + - "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" + - "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64" + - "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7" + - "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B" + - "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C" + - "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31" + - "43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7" + - "88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA" + - "2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6" + - "287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED" + - "1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9" + - "93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199" + - "FFFFFFFFFFFFFFFF" + var primeString = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E0" + + "88A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F" + + "14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDE" + + "E386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48" + + "361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED52907709" + + "6966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E8603" + + "9B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D22" + + "61898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458" + + "DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619" + + "DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE1" + + "17577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A" + + "92108011A723C12A787E6D788719A10BDBA5B2699C327186AF4E23C1A946834B6150B" + + "DA2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B" + + "2964FA090C3A2233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127" + + "D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199FFFFFFFFFFFFF" + + "FFF" + buff, err := csprng.GenerateInGroup([]byte(primeString), size, csprng.NewSystemRNG()) if err != nil { panic(err) } - grp := cyclic.NewGroup(large.NewIntFromString(primeString, 16), large.NewInt(2)).NewIntFromBytes(buff) + grp := cyclic.NewGroup(large.NewIntFromString(primeString, 16), + large.NewInt(2)).NewIntFromBytes(buff) + return grp } -- GitLab