267 lines
9.7 KiB
Go
267 lines
9.7 KiB
Go
package createMessages_test
|
|
|
|
import "seekia/internal/cryptography/kyber"
|
|
import "seekia/internal/cryptography/nacl"
|
|
import "seekia/internal/helpers"
|
|
import "seekia/internal/identity"
|
|
import "seekia/internal/messaging/readMessages"
|
|
import "seekia/internal/messaging/createMessages"
|
|
import "seekia/internal/messaging/inbox"
|
|
|
|
import "time"
|
|
import "testing"
|
|
|
|
func TestReadMessagePublicData(t *testing.T){
|
|
|
|
messageNetworkType, err := helpers.GetRandomByteWithinRange(1, 2)
|
|
if (err != nil) {
|
|
t.Fatalf("Failed to get random network type: " + err.Error())
|
|
}
|
|
|
|
identityType, err := helpers.GetRandomItemFromList([]string{"Mate", "Moderator"})
|
|
if (err != nil) {
|
|
t.Fatalf("Failed to get random identity type: " + err.Error())
|
|
}
|
|
|
|
senderIdentityPublicKey, senderIdentityPrivateKey, err := identity.GetNewRandomPublicPrivateIdentityKeys()
|
|
if (err != nil) {
|
|
t.Fatalf("Failed to derive identity keys: " + err.Error())
|
|
}
|
|
|
|
senderIdentityHash, err := identity.ConvertIdentityKeyToIdentityHash(senderIdentityPublicKey, identityType)
|
|
if (err != nil) {
|
|
t.Fatalf("Failed to derive identity hash: " + err.Error())
|
|
}
|
|
|
|
recipientInbox, err := inbox.GetNewRandomInbox()
|
|
if (err != nil) {
|
|
t.Fatalf("GetNewRandomInbox failed: " + err.Error())
|
|
}
|
|
|
|
recipientIdentityHash, err := identity.GetNewRandomIdentityHash(true, identityType)
|
|
if (err != nil) {
|
|
t.Fatalf("Failed to get random identity hash: " + err.Error())
|
|
}
|
|
|
|
senderLatestChatKeysUpdateTime := int64(12345678900)
|
|
|
|
recipientNaclKey, err := nacl.GetNewRandomPublicNaclKey()
|
|
if (err != nil) {
|
|
t.Fatalf("GetNewRandomPublicNaclKey failed: " + err.Error())
|
|
}
|
|
|
|
recipientKyberKey, err := kyber.GetNewRandomPublicKyberKey()
|
|
if (err != nil) {
|
|
t.Fatalf("GetNewRandomPublicKyberKey failed: " + err.Error())
|
|
}
|
|
|
|
messageCreationTime := time.Now().Unix()
|
|
|
|
senderCurrentSecretInboxSeed, err := inbox.GetNewRandomSecretInboxSeed()
|
|
if (err != nil) {
|
|
t.Fatalf("GetNewRandomSecretInboxSeed failed: " + err.Error())
|
|
}
|
|
|
|
senderNextSecretInboxSeed, err := inbox.GetNewRandomSecretInboxSeed()
|
|
if (err != nil) {
|
|
t.Fatalf("GetNewRandomSecretInboxSeed failed: " + err.Error())
|
|
}
|
|
|
|
senderDeviceIdentifier, err := helpers.GetNewRandomDeviceIdentifier()
|
|
if (err != nil) {
|
|
t.Fatalf("GetNewRandomDeviceIdentifier failed: " + err.Error())
|
|
}
|
|
|
|
testCommunication := "This is a test message."
|
|
|
|
doubleSealedKeysSealerKey, err := helpers.GetNewRandom32ByteArray()
|
|
if (err != nil) {
|
|
t.Fatalf("GetNewRandom32ByteArray failed: " + err.Error())
|
|
}
|
|
|
|
finalMessage, messageHash, err := createMessages.CreateChatMessage(messageNetworkType, senderIdentityHash, senderIdentityPublicKey, senderIdentityPrivateKey, messageCreationTime, senderCurrentSecretInboxSeed, senderNextSecretInboxSeed, senderDeviceIdentifier, senderLatestChatKeysUpdateTime, testCommunication, recipientIdentityHash, recipientInbox, recipientNaclKey, recipientKyberKey, doubleSealedKeysSealerKey)
|
|
if (err != nil) {
|
|
t.Fatalf("Failed to create chat message: " + err.Error())
|
|
}
|
|
|
|
ableToRead, messageHash_Received, messageVersion_Received, messageNetworkType_Received, recipientInbox_Received, _, _, _, _, _, _, err := readMessages.ReadChatMessagePublicDataAndHash(true, finalMessage)
|
|
if (err != nil) {
|
|
t.Fatalf("Failed to read message public data: " + err.Error())
|
|
}
|
|
if (ableToRead == false){
|
|
t.Fatalf("Failed to read message public data.")
|
|
}
|
|
if (messageVersion_Received != 1){
|
|
t.Fatalf("Message version does not match.")
|
|
}
|
|
if (messageNetworkType_Received != messageNetworkType){
|
|
t.Fatalf("Message network type does not match.")
|
|
}
|
|
if (messageHash != messageHash_Received){
|
|
t.Fatalf("Message hash does not match.")
|
|
}
|
|
if (recipientInbox != recipientInbox_Received){
|
|
t.Fatalf("Message recipient identity hash does not match.")
|
|
}
|
|
}
|
|
|
|
|
|
func TestEncryptDecryptMessage(t *testing.T) {
|
|
|
|
messageNetworkType, err := helpers.GetRandomByteWithinRange(1, 2)
|
|
if (err != nil) {
|
|
t.Fatalf("Failed to get random network type: " + err.Error())
|
|
}
|
|
|
|
identityType, err := helpers.GetRandomItemFromList([]string{"Mate", "Moderator"})
|
|
if (err != nil) {
|
|
t.Fatalf("Failed to get random identity type: " + err.Error())
|
|
}
|
|
|
|
senderIdentityPublicKey, senderIdentityPrivateKey, err := identity.GetNewRandomPublicPrivateIdentityKeys()
|
|
if (err != nil) {
|
|
t.Fatalf("Failed to derive identity keys: " + err.Error())
|
|
}
|
|
|
|
senderIdentityHash, err := identity.ConvertIdentityKeyToIdentityHash(senderIdentityPublicKey, identityType)
|
|
if (err != nil) {
|
|
t.Fatalf("Failed to derive identity hash: " + err.Error())
|
|
}
|
|
|
|
recipientInbox, err := inbox.GetNewRandomInbox()
|
|
if (err != nil) {
|
|
t.Fatalf("GetNewRandomInbox failed: " + err.Error())
|
|
}
|
|
|
|
recipientIdentityHash, err := identity.GetNewRandomIdentityHash(true, identityType)
|
|
if (err != nil) {
|
|
t.Fatalf("Failed to get random identity hash: " + err.Error())
|
|
}
|
|
|
|
senderLatestChatKeysUpdateTime := int64(1234567899900)
|
|
|
|
recipientNaclPublicKey, recipientNaclPrivateKey, err := nacl.GetNewRandomPublicPrivateNaclKeys()
|
|
if (err != nil) {
|
|
t.Fatalf("Failed to derive Nacl keys: " + err.Error())
|
|
}
|
|
|
|
recipientKyberPublicKey, recipientKyberPrivateKey, err := kyber.GetNewRandomPublicPrivateKyberKeys()
|
|
if (err != nil) {
|
|
t.Fatalf("Failed to derive Kyber keys: " + err.Error())
|
|
}
|
|
|
|
messageCreationTime := time.Now().Unix()
|
|
|
|
senderCurrentSecretInboxSeed, err := inbox.GetNewRandomSecretInboxSeed()
|
|
if (err != nil) {
|
|
t.Fatalf("GetNewRandomSecretInboxSeed failed: " + err.Error())
|
|
}
|
|
|
|
senderNextSecretInboxSeed, err := inbox.GetNewRandomSecretInboxSeed()
|
|
if (err != nil) {
|
|
t.Fatalf("GetNewRandomSecretInboxSeed failed: " + err.Error())
|
|
}
|
|
|
|
senderDeviceIdentifier, err := helpers.GetNewRandomDeviceIdentifier()
|
|
if (err != nil) {
|
|
t.Fatalf("GetNewRandomDeviceIdentifier failed: " + err.Error())
|
|
}
|
|
|
|
testCommunication := "This is a test message."
|
|
|
|
doubleSealedKeysSealerKey, err := helpers.GetNewRandom32ByteArray()
|
|
if (err != nil) {
|
|
t.Fatalf("GetNewRandom32ByteArray failed: " + err.Error())
|
|
}
|
|
|
|
finalMessage, messageHash, err := createMessages.CreateChatMessage(messageNetworkType, senderIdentityHash, senderIdentityPublicKey, senderIdentityPrivateKey, messageCreationTime, senderCurrentSecretInboxSeed, senderNextSecretInboxSeed, senderDeviceIdentifier, senderLatestChatKeysUpdateTime, testCommunication, recipientIdentityHash, recipientInbox, recipientNaclPublicKey, recipientKyberPublicKey, doubleSealedKeysSealerKey,)
|
|
if (err != nil) {
|
|
t.Fatalf("Failed to create chat message: " + err.Error())
|
|
}
|
|
|
|
newChatKeySet := readMessages.ChatKeySet{
|
|
|
|
NaclPublicKey: recipientNaclPublicKey,
|
|
NaclPrivateKey: recipientNaclPrivateKey,
|
|
KyberPrivateKey: recipientKyberPrivateKey,
|
|
}
|
|
newRecipientChatDecryptionKeySetsList := []readMessages.ChatKeySet{newChatKeySet}
|
|
|
|
ableToRead, messageHash_Received, messageVersion, messageNetworkType_Received, messageCipherKey, senderIdentityHash_Received, recipientIdentityHash_Received, messageCreationTime_Received, communication_Received, senderCurrentSecretInboxSeed_Received, senderNextSecretInboxSeed_Received, senderDeviceIdentifier_Received, senderLatestChatKeysUpdateTime_Received, err := readMessages.ReadChatMessage(finalMessage, doubleSealedKeysSealerKey, newRecipientChatDecryptionKeySetsList)
|
|
if (err != nil) {
|
|
t.Fatalf("Failed to read chat message: " + err.Error())
|
|
}
|
|
if (ableToRead == false) {
|
|
t.Fatalf("Failed to read chat message.")
|
|
}
|
|
if (messageVersion != 1){
|
|
t.Fatalf("Message version is not valid.")
|
|
}
|
|
if (messageNetworkType_Received != messageNetworkType){
|
|
t.Fatalf("Message network type does not match.")
|
|
}
|
|
if (messageHash != messageHash_Received){
|
|
t.Fatalf("Message hash does not match.")
|
|
}
|
|
if (senderIdentityHash != senderIdentityHash_Received){
|
|
t.Fatalf("Sender identity hash does not match.")
|
|
}
|
|
if (recipientIdentityHash != recipientIdentityHash_Received){
|
|
t.Fatalf("Recipient identity hash does not match.")
|
|
}
|
|
if (messageCreationTime != messageCreationTime_Received){
|
|
t.Fatalf("Message creation time is incorrect.")
|
|
}
|
|
|
|
if (testCommunication != communication_Received){
|
|
t.Fatalf("Message communication does not match.")
|
|
}
|
|
|
|
if (senderCurrentSecretInboxSeed != senderCurrentSecretInboxSeed_Received){
|
|
t.Fatalf("senderCurrentSecretInboxSeed does not match.")
|
|
}
|
|
|
|
if (senderNextSecretInboxSeed != senderNextSecretInboxSeed_Received){
|
|
t.Fatalf("senderNextSecretInboxSeed does not match.")
|
|
}
|
|
|
|
if (senderLatestChatKeysUpdateTime != senderLatestChatKeysUpdateTime_Received){
|
|
t.Fatalf("Sender latest chat keys update time does not match.")
|
|
}
|
|
|
|
if (senderDeviceIdentifier != senderDeviceIdentifier_Received){
|
|
t.Fatalf("Sender device identifier does not match.")
|
|
}
|
|
|
|
if (len(messageCipherKey) != 32){
|
|
t.Fatalf("ReadChatMessage returning invalid messageCipherKey: Invalid length.")
|
|
}
|
|
|
|
messageCipherKeyArray := [32]byte(messageCipherKey)
|
|
|
|
ableToRead, messageHash_Received, messageVersion_Received, messageNetworkType_Received, senderIdentityHash_Received, communication_Received, err := readMessages.ReadChatMessageWithCipherKey(finalMessage, messageCipherKeyArray)
|
|
if (err != nil){
|
|
t.Fatalf("ReadChatMessageWithCipherKey failed: " + err.Error())
|
|
}
|
|
if (ableToRead == false){
|
|
t.Fatalf("ReadChatMessageWithCipherKey failed.")
|
|
}
|
|
if (messageVersion_Received != 1){
|
|
t.Fatalf("ReadChatMessageWithCipherKey failed: returning mismatched version.")
|
|
}
|
|
if (messageNetworkType_Received != messageNetworkType){
|
|
t.Fatalf("ReadChatMessageWithCipherKey failed: returning mismatched network type.")
|
|
}
|
|
if (messageHash != messageHash_Received){
|
|
t.Fatalf("ReadChatMessageWithCipherKey failed: returning mismatched messageHash.")
|
|
}
|
|
|
|
if (senderIdentityHash != senderIdentityHash_Received){
|
|
t.Fatalf("ReadChatMessageWithCipherKey failed: Sender identity hash does not match.")
|
|
}
|
|
|
|
if (testCommunication != communication_Received){
|
|
t.Fatalf("ReadChatMessageWithCipherKey failed: Message communication does not match.")
|
|
}
|
|
}
|
|
|