2018-04-02 21:10:29 +00:00
|
|
|
package model
|
|
|
|
|
|
|
|
import (
|
|
|
|
"git.mascherari.press/cwtch/protocol"
|
|
|
|
"github.com/golang/protobuf/proto"
|
2018-05-28 17:44:47 +00:00
|
|
|
"strconv"
|
2018-04-02 21:10:29 +00:00
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
2018-05-28 17:44:47 +00:00
|
|
|
func TestMessagePadding(t *testing.T) {
|
|
|
|
|
|
|
|
// Setup the Group
|
|
|
|
sarah := GenerateNewProfile("Sarah")
|
|
|
|
alice := GenerateNewProfile("Alice")
|
|
|
|
sarah.AddContact(alice.Onion, &alice.PublicProfile)
|
|
|
|
alice.AddContact(sarah.Onion, &sarah.PublicProfile)
|
|
|
|
|
|
|
|
gid, invite, _ := alice.StartGroup("aaa.onion")
|
|
|
|
gci := &protocol.CwtchPeerPacket{}
|
|
|
|
proto.Unmarshal(invite, gci)
|
|
|
|
sarah.ProcessInvite(gci.GetGroupChatInvite(), alice.Onion)
|
|
|
|
|
|
|
|
group := alice.GetGroupByGroupID(gid)
|
|
|
|
|
|
|
|
c1, _ := sarah.EncryptMessageToGroup("Hello World 1", group.GroupID)
|
|
|
|
t.Logf("Length of Encrypted Message: %v", len(c1))
|
|
|
|
alice.AttemptDecryption(c1)
|
|
|
|
|
|
|
|
c2, _ := alice.EncryptMessageToGroup("Hello World 2", group.GroupID)
|
|
|
|
t.Logf("Length of Encrypted Message: %v", len(c2))
|
|
|
|
alice.AttemptDecryption(c2)
|
|
|
|
|
|
|
|
c3, _ := alice.EncryptMessageToGroup("Hello World 3", group.GroupID)
|
|
|
|
t.Logf("Length of Encrypted Message: %v", len(c3))
|
|
|
|
alice.AttemptDecryption(c3)
|
|
|
|
|
|
|
|
c4, _ := alice.EncryptMessageToGroup("Hello World this is a much longer message 3", group.GroupID)
|
|
|
|
t.Logf("Length of Encrypted Message: %v", len(c4))
|
|
|
|
alice.AttemptDecryption(c4)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2018-04-28 17:52:59 +00:00
|
|
|
func TestTranscriptConsistency(t *testing.T) {
|
2018-04-02 21:10:29 +00:00
|
|
|
timeline := new(Timeline)
|
|
|
|
|
|
|
|
// Setup the Group
|
|
|
|
sarah := GenerateNewProfile("Sarah")
|
|
|
|
alice := GenerateNewProfile("Alice")
|
2018-05-09 19:09:00 +00:00
|
|
|
sarah.AddContact(alice.Onion, &alice.PublicProfile)
|
|
|
|
alice.AddContact(sarah.Onion, &sarah.PublicProfile)
|
2018-04-02 21:10:29 +00:00
|
|
|
|
2018-05-16 20:20:46 +00:00
|
|
|
gid, invite, _ := alice.StartGroup("aaa.onion")
|
2018-04-02 21:10:29 +00:00
|
|
|
gci := &protocol.CwtchPeerPacket{}
|
|
|
|
proto.Unmarshal(invite, gci)
|
|
|
|
sarah.ProcessInvite(gci.GetGroupChatInvite(), alice.Onion)
|
|
|
|
|
2018-05-16 20:53:09 +00:00
|
|
|
group := alice.GetGroupByGroupID(gid)
|
2018-04-02 21:10:29 +00:00
|
|
|
|
2018-05-09 19:09:00 +00:00
|
|
|
t.Logf("group: %v, sarah %v", group, sarah)
|
|
|
|
|
|
|
|
c1, _ := sarah.EncryptMessageToGroup("Hello World 1", group.GroupID)
|
2018-05-28 17:44:47 +00:00
|
|
|
t.Logf("Length of Encrypted Message: %v", len(c1))
|
2018-04-02 21:10:29 +00:00
|
|
|
alice.AttemptDecryption(c1)
|
|
|
|
|
2018-05-09 19:09:00 +00:00
|
|
|
c2, _ := alice.EncryptMessageToGroup("Hello World 2", group.GroupID)
|
2018-05-28 17:44:47 +00:00
|
|
|
t.Logf("Length of Encrypted Message: %v", len(c2))
|
2018-04-02 21:10:29 +00:00
|
|
|
alice.AttemptDecryption(c2)
|
|
|
|
|
2018-05-09 19:09:00 +00:00
|
|
|
c3, _ := alice.EncryptMessageToGroup("Hello World 3", group.GroupID)
|
2018-05-28 17:44:47 +00:00
|
|
|
t.Logf("Length of Encrypted Message: %v", len(c3))
|
2018-04-02 21:10:29 +00:00
|
|
|
alice.AttemptDecryption(c3)
|
|
|
|
|
|
|
|
time.Sleep(time.Second * 1)
|
|
|
|
|
2018-05-09 19:09:00 +00:00
|
|
|
c4, _ := alice.EncryptMessageToGroup("Hello World 4", group.GroupID)
|
2018-05-28 17:44:47 +00:00
|
|
|
t.Logf("Length of Encrypted Message: %v", len(c4))
|
2018-04-02 21:10:29 +00:00
|
|
|
alice.AttemptDecryption(c4)
|
|
|
|
|
2018-05-09 19:09:00 +00:00
|
|
|
c5, _ := alice.EncryptMessageToGroup("Hello World 5", group.GroupID)
|
2018-05-28 17:44:47 +00:00
|
|
|
t.Logf("Length of Encrypted Message: %v", len(c5))
|
2018-04-02 21:10:29 +00:00
|
|
|
|
|
|
|
_, m1 := sarah.AttemptDecryption(c1)
|
|
|
|
_, m2 := sarah.AttemptDecryption(c2)
|
|
|
|
_, m3 := sarah.AttemptDecryption(c3)
|
|
|
|
_, m4 := sarah.AttemptDecryption(c4)
|
|
|
|
_, m5 := sarah.AttemptDecryption(c5)
|
|
|
|
|
|
|
|
// Now we simulate a client receiving these messages completely out of order
|
|
|
|
timeline.Insert(m1)
|
|
|
|
timeline.Insert(m5)
|
|
|
|
timeline.Insert(m4)
|
|
|
|
timeline.Insert(m3)
|
|
|
|
timeline.Insert(m2)
|
|
|
|
|
2018-05-20 19:58:16 +00:00
|
|
|
for i, m := range timeline.GetMessages() {
|
2018-05-28 17:44:47 +00:00
|
|
|
if m.Message != "Hello World "+strconv.Itoa(i+1) {
|
|
|
|
t.Fatalf("Timeline Out of Order!: %v %v", i, m)
|
|
|
|
}
|
|
|
|
|
2018-04-02 21:10:29 +00:00
|
|
|
t.Logf("Messages %v: %v %x %x", i, m.Message, m.Signature, m.PreviousMessageSig)
|
|
|
|
}
|
|
|
|
}
|