diff --git a/.gitignore b/.gitignore
index 61763ce43..bceba742e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -87,4 +87,5 @@ tools/lp-autoanswer
build/macos/pkg-distribution.xml
tester/record_for_lc_*.wav
tester/record-call_with_file_player.wav
+tester/ZIDCache*.xml
diff --git a/tester/ZIDCache.xml b/tester/ZIDCache.xml
deleted file mode 100644
index 6c96b40cc..000000000
--- a/tester/ZIDCache.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-ef7692d0792a67491ae2d44e005dbe0399643d953a2202dd9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899pipo1@pipo.com963c57bb28e62068d2df23e8f9b771932d3c57bb28e62068d2df23e8f9b7719305d9ac653a83c4559cb0ae7394e7cd3b2d3c57bb28e62068d2df23e8f9b771935f9aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b7719302ffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b7719300000069000001e8011234567889643d953a2202ee9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899pipo1@pipo.com123456789012345678901234567890123456765431262068d2df23e8f9b7719325d9ac653a83c4559cb0ae7394e7cd3b2d3c57bb28e62068d2df23e8f9b77193f69aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b7719322ffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b77193000000010000000001
diff --git a/tester/ZIDCacheAlice.xml b/tester/ZIDCacheAlice.xml
deleted file mode 100644
index 0edd84bd9..000000000
--- a/tester/ZIDCacheAlice.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-ef7692d0792a67491ae2d44e005dbe0399643d953a2202dd9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899sip:pauline@sip.example.org9111ebeb52e50edcc6fcb3eea1a2d3ae3c2c75d3668923e83c59d0f47245515060f020a3fe11dc2cc0e1e8ed9341b4cd14944db806ca4fc95456bbe45d95c43a5f9aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b77193bcffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b7719300000080000001cf011234567889643d953a2202ee9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899sip:pauline@sip.example.org72d80ab1cad243cf45634980c1d02cfb2df81ce0dd5dfcf1ebeacfc5345a917625d9ac653a83c4559cb0ae7394e7cd3b2d3c57bb28e62068d2df23e8f9b77193f69aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b7719322ffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b771930000000f00000000
diff --git a/tester/ZIDCacheBob.xml b/tester/ZIDCacheBob.xml
deleted file mode 100644
index 3795074a2..000000000
--- a/tester/ZIDCacheBob.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-005dbe0399643d953a2202dd
- ef7692d0792a67491ae2d44e9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899sip:marie@sip.example.org9111ebeb52e50edcc6fcb3eea1a2d3ae3c2c75d3668923e83c59d0f47245515060f020a3fe11dc2cc0e1e8ed9341b4cd14944db806ca4fc95456bbe45d95c43a5f9aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b77193bcffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b7719300000080000001cf01
- 1234567889643d953a2202ee9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899sip:marie@sip.example.org81e6e6362c34dc974263d1f77cbb9a8d6d6a718330994379099a8fa19fb12faa25d9ac653a83c4559cb0ae7394e7cd3b2d3c57bb28e62068d2df23e8f9b77193f69aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b7719322ffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b771930000002e0000000001
diff --git a/tester/message_tester.c b/tester/message_tester.c
index b78962885..7e27f0ff4 100644
--- a/tester/message_tester.c
+++ b/tester/message_tester.c
@@ -661,13 +661,19 @@ static void lime_file_transfer_message(void) {
static void printHex(char *title, uint8_t *data, uint32_t length) {
int i;
- printf ("%s : ", title);
+ char debug_string_buffer[2048];
+ char *debug_string = debug_string_buffer;
+ sprintf (debug_string, "%s : ", title);
+ debug_string += strlen(title)+3;
for (i=0; i\nef7692d0792a67491ae2d44e005dbe0399643d953a2202dd9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899pipo1@pipo.com963c57bb28e62068d2df23e8f9b771932d3c57bb28e62068d2df23e8f9b7719305d9ac653a83c4559cb0ae7394e7cd3b2d3c57bb28e62068d2df23e8f9b771935f9aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b7719302ffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b7719300000069000001e8011234567889643d953a2202ee9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899pipo1@pipo.com123456789012345678901234567890123456765431262068d2df23e8f9b7719325d9ac653a83c4559cb0ae7394e7cd3b2d3c57bb28e62068d2df23e8f9b77193f69aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b7719322ffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b77193000000010000000001");
+ fclose(CACHE);
+ CACHE = fopen("ZIDCache.xml", "rb+");
+ cacheBufferString = (uint8_t*) ms_load_file_content(CACHE, &size);
+ *(cacheBufferString+size) = '\0';
+ fclose(CACHE);
+ /* parse it to an xmlDoc */
+ cacheBuffer = xmlParseDoc(cacheBufferString);
+ ms_free(cacheBufferString);
+
+ /* get data from cache : sender */
+ associatedKeys.peerURI = (uint8_t *)malloc(15);
+ memcpy(associatedKeys.peerURI, "pipo1@pipo.com", 15);
+ associatedKeys.associatedZIDNumber = 0;
+ retval = lime_getCachedSndKeysByURI(cacheBuffer, &associatedKeys);
+ BC_ASSERT_EQUAL_FATAL(retval, 0, int, "%d");
+ BC_ASSERT_EQUAL_FATAL(associatedKeys.associatedZIDNumber, 2, int, "%d"); /* there are 2 keys associated to pipo1@pipo.com address in the cache above*/
+ ms_message("Get cached key by URI, for sender, return %d keys", associatedKeys.associatedZIDNumber);
+
+ for (i=0; ipeerZID, 12);
+ printHex("key", associatedKeys.peerKeys[i]->key, 32);
+ printHex("sessionID", associatedKeys.peerKeys[i]->sessionId, 32);
+ ms_message("session index %d\n", associatedKeys.peerKeys[i]->sessionIndex);
+ }
+
+ /* get data from cache : receiver */
+ memcpy(associatedKey.peerZID, targetZID, 12);
+ retval = lime_getCachedRcvKeyByZid(cacheBuffer, &associatedKey);
+ BC_ASSERT_EQUAL_FATAL(retval, 0, int, "%d");
+ printHex("Got receiver key for ZID", targetZID, 12);
+ printHex("Key", associatedKey.key, 32);
+ printHex("sessionID", associatedKey.sessionId, 32);
+ ms_message("session index %d\n", associatedKey.sessionIndex);
+
+ /* encrypt/decrypt a message */
+ lime_encryptMessage(associatedKeys.peerKeys[0], (uint8_t *)PLAIN_TEXT_TEST_MESSAGE, strlen(PLAIN_TEXT_TEST_MESSAGE), senderZID, encryptedMessage);
+ printHex("Ciphered", encryptedMessage, strlen((char *)encryptedMessage));
+ /* invert sender and receiverZID to decrypt/authenticate */
+ memcpy(receiverZID, associatedKeys.peerKeys[0]->peerZID, 12);
+ memcpy(associatedKeys.peerKeys[0]->peerZID, senderZID, 12);
+ retval = lime_decryptMessage(associatedKeys.peerKeys[0], encryptedMessage, strlen(PLAIN_TEXT_TEST_MESSAGE)+16, receiverZID, plainMessage);
+ BC_ASSERT_EQUAL_FATAL(retval, 0, int, "%d");
+ BC_ASSERT_STRING_EQUAL((char *)plainMessage, (char *)PLAIN_TEXT_TEST_MESSAGE);
+ ms_message("Decrypt and auth returned %d\nPlain text is %s\n", retval, plainMessage);
+
+ /* update receiver data */
+ associatedKey.sessionIndex++;
+ associatedKey.key[0]++;
+ associatedKey.sessionId[0]++;
+ retval = lime_setCachedKey(cacheBuffer, &associatedKey, LIME_RECEIVER);
+ BC_ASSERT_EQUAL_FATAL(retval, 0, int, "%d");
+
+ /* update sender data */
+ associatedKeys.peerKeys[0]->sessionIndex++;
+ associatedKeys.peerKeys[0]->key[0]++;
+ associatedKeys.peerKeys[0]->sessionId[0]++;
+ retval = lime_setCachedKey(cacheBuffer, associatedKeys.peerKeys[0], LIME_SENDER);
+ BC_ASSERT_EQUAL_FATAL(retval, 0, int, "%d");
+
+ /* free memory */
+ lime_freeKeys(associatedKeys);
+
+ /* write the file */
+ /* dump the xml document into a string */
+ xmlDocDumpFormatMemoryEnc(cacheBuffer, &xmlStringOutput, &xmlStringLength, "UTF-8", 0);
+ /* write it to the file */
+ CACHE = fopen("ZIDCache.xml", "w+");
+ fwrite(xmlStringOutput, 1, xmlStringLength, CACHE);
+ xmlFree(xmlStringOutput);
+ fclose(CACHE);
+ xmlFreeDoc(cacheBuffer);
+
+ /**** Higher level tests using 2 caches to encrypt/decrypt a message ****/
+ /* Create Alice cache file and then load it */
+ CACHE = fopen("ZIDCacheAlice.xml", "wb");
+ fprintf(CACHE, "\nef7692d0792a67491ae2d44e005dbe0399643d953a2202dd9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899sip:pauline@sip.example.org9111ebeb52e50edcc6fcb3eea1a2d3ae3c2c75d3668923e83c59d0f47245515060f020a3fe11dc2cc0e1e8ed9341b4cd14944db806ca4fc95456bbe45d95c43a5f9aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b77193bcffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b7719300000080000001cf011234567889643d953a2202ee9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899sip:pauline@sip.example.org72d80ab1cad243cf45634980c1d02cfb2df81ce0dd5dfcf1ebeacfc5345a917625d9ac653a83c4559cb0ae7394e7cd3b2d3c57bb28e62068d2df23e8f9b77193f69aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b7719322ffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b771930000000f00000000");
+ fclose(CACHE);
+ CACHE = fopen("ZIDCacheAlice.xml", "rb+");
cacheBufferString = (uint8_t *)ms_load_file_content(CACHE, &size);
*(cacheBufferString+size) = '\0';
fclose(CACHE);
@@ -697,7 +786,10 @@ static void lime_unit(void) {
cacheBufferAlice = xmlParseDoc(cacheBufferString);
ms_free(cacheBufferString);
- /* Load Bob cache file */
+ /* Create Bob cache file and then load it */
+ CACHE = fopen("ZIDCacheBob.xml", "wb");
+ fprintf(CACHE, "\n005dbe0399643d953a2202ddef7692d0792a67491ae2d44e9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899sip:marie@sip.example.org9111ebeb52e50edcc6fcb3eea1a2d3ae3c2c75d3668923e83c59d0f47245515060f020a3fe11dc2cc0e1e8ed9341b4cd14944db806ca4fc95456bbe45d95c43a5f9aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b77193bcffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b7719300000080000001cf011234567889643d953a2202ee9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899sip:marie@sip.example.org81e6e6362c34dc974263d1f77cbb9a8d6d6a718330994379099a8fa19fb12faa25d9ac653a83c4559cb0ae7394e7cd3b2d3c57bb28e62068d2df23e8f9b77193f69aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b7719322ffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b771930000002e0000000001");
+ fclose(CACHE);
CACHE = fopen("ZIDCacheBob.xml", "rb+");
cacheBufferString = (uint8_t *)ms_load_file_content(CACHE, &size);
*(cacheBufferString+size) = '\0';
@@ -709,19 +801,20 @@ static void lime_unit(void) {
/* encrypt a message */
- retval = lime_createMultipartMessage(cacheBufferAlice, (uint8_t *)"Bonjour les petits lapins,ca va? éh oui oui", (uint8_t *)"sip:pauline@sip.example.org", &multipartMessage);
+ retval = lime_createMultipartMessage(cacheBufferAlice, (uint8_t *)PLAIN_TEXT_TEST_MESSAGE, (uint8_t *)"sip:pauline@sip.example.org", &multipartMessage);
- printf("create message return %d\n", retval);
+ BC_ASSERT_EQUAL_FATAL(retval, 0, int, "%d");
if (retval == 0) {
- printf("message is %s\n", multipartMessage);
+ ms_message("Encrypted message created is %s", multipartMessage);
}
/* decrypt the multipart message */
retval = lime_decryptMultipartMessage(cacheBufferBob, multipartMessage, &decryptedMessage);
- printf("decrypt message return %d\n", retval);
+ BC_ASSERT_EQUAL_FATAL(retval, 0, int, "%d");
if (retval == 0) {
- printf("message is %s##END\n", decryptedMessage);
+ BC_ASSERT_STRING_EQUAL((char *)decryptedMessage, (char *)PLAIN_TEXT_TEST_MESSAGE);
+ ms_message("Succesfully decrypted message is %s", decryptedMessage);
}
free(multipartMessage);
free(decryptedMessage);
@@ -745,74 +838,6 @@ static void lime_unit(void) {
xmlFreeDoc(cacheBufferAlice);
xmlFreeDoc(cacheBufferBob);
-
- /* Load cache file */
- CACHE = fopen("ZIDCache.xml", "rb+");
- cacheBufferString = (uint8_t*) ms_load_file_content(CACHE, &size);
- *(cacheBufferString+size) = '\0';
- fclose(CACHE);
- /* parse it to an xmlDoc */
- cacheBuffer = xmlParseDoc(cacheBufferString);
- ms_free(cacheBufferString);
-
- /* get data from cache : sender */
- associatedKeys.peerURI = (uint8_t *)malloc(15);
- memcpy(associatedKeys.peerURI, "pipo1@pipo.com", 15);
- associatedKeys.associatedZIDNumber = 0;
- retval = lime_getCachedSndKeysByURI(cacheBuffer, &associatedKeys);
- printf("getCachedKeys returns %d, number of key found %d\n", retval, associatedKeys.associatedZIDNumber);
-
- for (i=0; ipeerZID, 12);
- printHex("key", associatedKeys.peerKeys[i]->key, 32);
- printHex("sessionID", associatedKeys.peerKeys[i]->sessionId, 32);
- printf("session index %d\n", associatedKeys.peerKeys[i]->sessionIndex);
- }
-
- /* get data from cache : receiver */
- memcpy(associatedKey.peerZID, targetZID, 12);
- retval = lime_getCachedRcvKeyByZid(cacheBuffer, &associatedKey);
- printf("getCachedKey by ZID return %d\n", retval);
-
- printHex("Key", associatedKey.key, 32);
- printHex("sessionID", associatedKey.sessionId, 32);
- printf("session index %d\n", associatedKey.sessionIndex);
-
- /* encrypt/decrypt a message */
- lime_encryptMessage(associatedKeys.peerKeys[0], (uint8_t *)"bla Bla bla b! Pipo", 20, senderZID, encryptedMessage);
- printHex("Ciphered", encryptedMessage, 32);
- /* invert sender and receiverZID to decrypt/authenticate */
- memcpy(receiverZID, associatedKeys.peerKeys[0]->peerZID, 12);
- memcpy(associatedKeys.peerKeys[0]->peerZID, senderZID, 12);
- retval = lime_decryptMessage(associatedKeys.peerKeys[0], encryptedMessage, 36, receiverZID, plainMessage);
- printf("Decrypt and auth returned %d\nPlain: %s\n", retval, plainMessage);
-
- /* update receiver data */
- associatedKey.sessionIndex++;
- associatedKey.key[0]++;
- associatedKey.sessionId[0]++;
- retval = lime_setCachedKey(cacheBuffer, &associatedKey, LIME_RECEIVER);
- printf("setCachedKey return %d\n", retval);
-
- /* update sender data */
- associatedKeys.peerKeys[0]->sessionIndex++;
- associatedKeys.peerKeys[0]->key[0]++;
- associatedKeys.peerKeys[0]->sessionId[0]++;
- retval = lime_setCachedKey(cacheBuffer, associatedKeys.peerKeys[0], LIME_SENDER);
- printf("setCachedKey return %d\n", retval);
-
- /* free memory */
- lime_freeKeys(associatedKeys);
-
- /* write the file */
- /* dump the xml document into a string */
- xmlDocDumpFormatMemoryEnc(cacheBuffer, &xmlStringOutput, &xmlStringLength, "UTF-8", 0);
- /* write it to the file */
- CACHE = fopen("ZIDCache.xml", "w+");
- fwrite(xmlStringOutput, 1, xmlStringLength, CACHE);
- xmlFree(xmlStringOutput);
- fclose(CACHE);
- xmlFreeDoc(cacheBuffer);
}
static void lime_text_message(void) {