forked from mirrors/linphone-iphone
fix lime unitary test when lime is not available
This commit is contained in:
parent
2c70954130
commit
71b9fc8300
1 changed files with 167 additions and 163 deletions
|
|
@ -965,170 +965,174 @@ static void printHex(char *title, uint8_t *data, size_t length) {
|
|||
}
|
||||
|
||||
static void lime_unit(void) {
|
||||
const char* PLAIN_TEXT_TEST_MESSAGE = "Ceci est un fabuleux msg de test à encrypter";
|
||||
int retval;
|
||||
size_t size;
|
||||
uint8_t *cacheBufferString;
|
||||
xmlDocPtr cacheBufferAlice;
|
||||
xmlDocPtr cacheBufferBob;
|
||||
uint8_t *multipartMessage = NULL;
|
||||
uint8_t *decryptedMessage = NULL;
|
||||
xmlChar *xmlStringOutput;
|
||||
int xmlStringLength;
|
||||
limeURIKeys_t associatedKeys;
|
||||
int i;
|
||||
limeKey_t associatedKey;
|
||||
uint8_t targetZID[12] = {0x00, 0x5d, 0xbe, 0x03, 0x99, 0x64, 0x3d, 0x95, 0x3a, 0x22, 0x02, 0xdd};
|
||||
uint8_t senderZID[12] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x70, 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0};
|
||||
uint8_t encryptedMessage[1024];
|
||||
uint8_t plainMessage[1024];
|
||||
uint8_t receiverZID[12];
|
||||
xmlDocPtr cacheBuffer;
|
||||
FILE *CACHE;
|
||||
|
||||
/**** Low level tests using on cache file to extract keys, encrypt/decrypt ****/
|
||||
/**** use functions that are not directly used by external entities ****/
|
||||
|
||||
/* create and load cache file */
|
||||
CACHE = fopen_from_write_dir("ZIDCache.xml", "wb");
|
||||
fprintf (CACHE, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<cache><selfZID>ef7692d0792a67491ae2d44e</selfZID><peer><ZID>005dbe0399643d953a2202dd</ZID><rs1>9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045</rs1><aux>f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e</aux><rs2>2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899</rs2><uri>pipo1@pipo.com</uri><sndKey>963c57bb28e62068d2df23e8f9b771932d3c57bb28e62068d2df23e8f9b77193</sndKey><rcvKey>05d9ac653a83c4559cb0ae7394e7cd3b2d3c57bb28e62068d2df23e8f9b77193</rcvKey><sndSId>5f9aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b77193</sndSId><rcvSId>02ffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b77193</rcvSId><sndIndex>00000069</sndIndex><rcvIndex>000001e8</rcvIndex><pvs>01</pvs></peer><peer><ZID>1234567889643d953a2202ee</ZID><rs1>9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045</rs1><aux>f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e</aux><rs2>2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899</rs2><uri>pipo1@pipo.com</uri><sndKey>123456789012345678901234567890123456765431262068d2df23e8f9b77193</sndKey><rcvKey>25d9ac653a83c4559cb0ae7394e7cd3b2d3c57bb28e62068d2df23e8f9b77193</rcvKey><sndSId>f69aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b77193</sndSId><rcvSId>22ffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b77193</rcvSId><sndIndex>00000001</sndIndex><rcvIndex>00000000</rcvIndex><pvs>01</pvs></peer></cache>");
|
||||
fclose(CACHE);
|
||||
CACHE = fopen_from_write_dir("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(retval, 0, int, "%d");
|
||||
BC_ASSERT_EQUAL(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; i<associatedKeys.associatedZIDNumber; i++) {
|
||||
printHex("ZID", associatedKeys.peerKeys[i]->peerZID, 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);
|
||||
if (lime_is_available()) {
|
||||
const char* PLAIN_TEXT_TEST_MESSAGE = "Ceci est un fabuleux msg de test à encrypter";
|
||||
int retval;
|
||||
size_t size;
|
||||
uint8_t *cacheBufferString;
|
||||
xmlDocPtr cacheBufferAlice;
|
||||
xmlDocPtr cacheBufferBob;
|
||||
uint8_t *multipartMessage = NULL;
|
||||
uint8_t *decryptedMessage = NULL;
|
||||
xmlChar *xmlStringOutput;
|
||||
int xmlStringLength;
|
||||
limeURIKeys_t associatedKeys;
|
||||
int i;
|
||||
limeKey_t associatedKey;
|
||||
uint8_t targetZID[12] = {0x00, 0x5d, 0xbe, 0x03, 0x99, 0x64, 0x3d, 0x95, 0x3a, 0x22, 0x02, 0xdd};
|
||||
uint8_t senderZID[12] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x70, 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0};
|
||||
uint8_t encryptedMessage[1024];
|
||||
uint8_t plainMessage[1024];
|
||||
uint8_t receiverZID[12];
|
||||
xmlDocPtr cacheBuffer;
|
||||
FILE *CACHE;
|
||||
|
||||
/**** Low level tests using on cache file to extract keys, encrypt/decrypt ****/
|
||||
/**** use functions that are not directly used by external entities ****/
|
||||
|
||||
/* create and load cache file */
|
||||
CACHE = fopen_from_write_dir("ZIDCache.xml", "wb");
|
||||
fprintf (CACHE, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<cache><selfZID>ef7692d0792a67491ae2d44e</selfZID><peer><ZID>005dbe0399643d953a2202dd</ZID><rs1>9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045</rs1><aux>f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e</aux><rs2>2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899</rs2><uri>pipo1@pipo.com</uri><sndKey>963c57bb28e62068d2df23e8f9b771932d3c57bb28e62068d2df23e8f9b77193</sndKey><rcvKey>05d9ac653a83c4559cb0ae7394e7cd3b2d3c57bb28e62068d2df23e8f9b77193</rcvKey><sndSId>5f9aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b77193</sndSId><rcvSId>02ffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b77193</rcvSId><sndIndex>00000069</sndIndex><rcvIndex>000001e8</rcvIndex><pvs>01</pvs></peer><peer><ZID>1234567889643d953a2202ee</ZID><rs1>9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045</rs1><aux>f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e</aux><rs2>2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899</rs2><uri>pipo1@pipo.com</uri><sndKey>123456789012345678901234567890123456765431262068d2df23e8f9b77193</sndKey><rcvKey>25d9ac653a83c4559cb0ae7394e7cd3b2d3c57bb28e62068d2df23e8f9b77193</rcvKey><sndSId>f69aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b77193</sndSId><rcvSId>22ffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b77193</rcvSId><sndIndex>00000001</sndIndex><rcvIndex>00000000</rcvIndex><pvs>01</pvs></peer></cache>");
|
||||
fclose(CACHE);
|
||||
CACHE = fopen_from_write_dir("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(retval, 0, int, "%d");
|
||||
BC_ASSERT_EQUAL(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; i<associatedKeys.associatedZIDNumber; i++) {
|
||||
printHex("ZID", associatedKeys.peerKeys[i]->peerZID, 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(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 msg */
|
||||
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(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(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(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_from_write_dir("ZIDCache.xml", "w+");
|
||||
fwrite(xmlStringOutput, 1, xmlStringLength, CACHE);
|
||||
xmlFree(xmlStringOutput);
|
||||
fclose(CACHE);
|
||||
xmlFreeDoc(cacheBuffer);
|
||||
|
||||
/**** Higher level tests using 2 caches to encrypt/decrypt a msg ****/
|
||||
/* Create Alice cache file and then load it */
|
||||
CACHE = fopen_from_write_dir("ZIDCacheAlice.xml", "wb");
|
||||
fprintf(CACHE, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<cache><selfZID>ef7692d0792a67491ae2d44e</selfZID><peer><ZID>005dbe0399643d953a2202dd</ZID><rs1>9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045</rs1><aux>f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e</aux><rs2>2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899</rs2><uri>sip:pauline@sip.example.org</uri><sndKey>9111ebeb52e50edcc6fcb3eea1a2d3ae3c2c75d3668923e83c59d0f472455150</sndKey><rcvKey>60f020a3fe11dc2cc0e1e8ed9341b4cd14944db806ca4fc95456bbe45d95c43a</rcvKey><sndSId>5f9aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b77193</sndSId><rcvSId>bcffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b77193</rcvSId><sndIndex>00000080</sndIndex><rcvIndex>000001cf</rcvIndex><pvs>01</pvs></peer><peer><ZID>1234567889643d953a2202ee</ZID><rs1>9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045</rs1><aux>f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e</aux><rs2>2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899</rs2><uri>sip:pauline@sip.example.org</uri><sndKey>72d80ab1cad243cf45634980c1d02cfb2df81ce0dd5dfcf1ebeacfc5345a9176</sndKey><rcvKey>25d9ac653a83c4559cb0ae7394e7cd3b2d3c57bb28e62068d2df23e8f9b77193</rcvKey><sndSId>f69aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b77193</sndSId><rcvSId>22ffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b77193</rcvSId><sndIndex>0000000f</sndIndex><rcvIndex>00000000</rcvIndex></peer></cache>");
|
||||
fclose(CACHE);
|
||||
CACHE = fopen_from_write_dir("ZIDCacheAlice.xml", "rb+");
|
||||
cacheBufferString = (uint8_t *)ms_load_file_content(CACHE, &size);
|
||||
*(cacheBufferString+size) = '\0';
|
||||
fclose(CACHE);
|
||||
/* parse it to an xmlDoc */
|
||||
cacheBufferAlice = xmlParseDoc(cacheBufferString);
|
||||
ms_free(cacheBufferString);
|
||||
|
||||
/* Create Bob cache file and then load it */
|
||||
CACHE = fopen_from_write_dir("ZIDCacheBob.xml", "wb");
|
||||
fprintf(CACHE, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<cache><selfZID>005dbe0399643d953a2202dd</selfZID><peer><ZID>ef7692d0792a67491ae2d44e</ZID><rs1>9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045</rs1><aux>f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e</aux><rs2>2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899</rs2><uri>sip:marie@sip.example.org</uri><rcvKey>9111ebeb52e50edcc6fcb3eea1a2d3ae3c2c75d3668923e83c59d0f472455150</rcvKey><sndKey>60f020a3fe11dc2cc0e1e8ed9341b4cd14944db806ca4fc95456bbe45d95c43a</sndKey><rcvSId>5f9aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b77193</rcvSId><sndSId>bcffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b77193</sndSId><rcvIndex>00000080</rcvIndex><sndIndex>000001cf</sndIndex><pvs>01</pvs></peer><peer><ZID>1234567889643d953a2202ee</ZID><rs1>9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045</rs1><aux>f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e</aux><rs2>2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899</rs2><uri>sip:marie@sip.example.org</uri><sndKey>81e6e6362c34dc974263d1f77cbb9a8d6d6a718330994379099a8fa19fb12faa</sndKey><rcvKey>25d9ac653a83c4559cb0ae7394e7cd3b2d3c57bb28e62068d2df23e8f9b77193</rcvKey><sndSId>f69aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b77193</sndSId><rcvSId>22ffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b77193</rcvSId><sndIndex>0000002e</sndIndex><rcvIndex>00000000</rcvIndex><pvs>01</pvs></peer></cache>");
|
||||
fclose(CACHE);
|
||||
CACHE = fopen_from_write_dir("ZIDCacheBob.xml", "rb+");
|
||||
cacheBufferString = (uint8_t *)ms_load_file_content(CACHE, &size);
|
||||
*(cacheBufferString+size) = '\0';
|
||||
fclose(CACHE);
|
||||
/* parse it to an xmlDoc */
|
||||
cacheBufferBob = xmlParseDoc(cacheBufferString);
|
||||
ms_free(cacheBufferString);
|
||||
|
||||
|
||||
|
||||
/* encrypt a msg */
|
||||
retval = lime_createMultipartMessage(cacheBufferAlice, (uint8_t *)PLAIN_TEXT_TEST_MESSAGE, (uint8_t *)"sip:pauline@sip.example.org", &multipartMessage);
|
||||
|
||||
BC_ASSERT_EQUAL(retval, 0, int, "%d");
|
||||
if (retval == 0) {
|
||||
ms_message("Encrypted msg created is %s", multipartMessage);
|
||||
}
|
||||
|
||||
/* decrypt the multipart msg */
|
||||
retval = lime_decryptMultipartMessage(cacheBufferBob, multipartMessage, &decryptedMessage);
|
||||
|
||||
BC_ASSERT_EQUAL(retval, 0, int, "%d");
|
||||
if (retval == 0) {
|
||||
BC_ASSERT_STRING_EQUAL((char *)decryptedMessage, (char *)PLAIN_TEXT_TEST_MESSAGE);
|
||||
ms_message("Succesfully decrypted msg is %s", decryptedMessage);
|
||||
}
|
||||
free(multipartMessage);
|
||||
free(decryptedMessage);
|
||||
|
||||
/* update ZID files */
|
||||
/* dump the xml document into a string */
|
||||
xmlDocDumpFormatMemoryEnc(cacheBufferAlice, &xmlStringOutput, &xmlStringLength, "UTF-8", 0);
|
||||
/* write it to the file */
|
||||
CACHE = fopen_from_write_dir("ZIDCacheAlice.xml", "wb+");
|
||||
fwrite(xmlStringOutput, 1, xmlStringLength, CACHE);
|
||||
xmlFree(xmlStringOutput);
|
||||
fclose(CACHE);
|
||||
|
||||
xmlDocDumpFormatMemoryEnc(cacheBufferBob, &xmlStringOutput, &xmlStringLength, "UTF-8", 0);
|
||||
/* write it to the file */
|
||||
CACHE = fopen_from_write_dir("ZIDCacheBob.xml", "wb+");
|
||||
fwrite(xmlStringOutput, 1, xmlStringLength, CACHE);
|
||||
xmlFree(xmlStringOutput);
|
||||
fclose(CACHE);
|
||||
|
||||
|
||||
xmlFreeDoc(cacheBufferAlice);
|
||||
xmlFreeDoc(cacheBufferBob);
|
||||
} else {
|
||||
ms_warning("Lime not available, skiping");
|
||||
}
|
||||
|
||||
/* get data from cache : receiver */
|
||||
memcpy(associatedKey.peerZID, targetZID, 12);
|
||||
retval = lime_getCachedRcvKeyByZid(cacheBuffer, &associatedKey);
|
||||
BC_ASSERT_EQUAL(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 msg */
|
||||
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(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(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(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_from_write_dir("ZIDCache.xml", "w+");
|
||||
fwrite(xmlStringOutput, 1, xmlStringLength, CACHE);
|
||||
xmlFree(xmlStringOutput);
|
||||
fclose(CACHE);
|
||||
xmlFreeDoc(cacheBuffer);
|
||||
|
||||
/**** Higher level tests using 2 caches to encrypt/decrypt a msg ****/
|
||||
/* Create Alice cache file and then load it */
|
||||
CACHE = fopen_from_write_dir("ZIDCacheAlice.xml", "wb");
|
||||
fprintf(CACHE, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<cache><selfZID>ef7692d0792a67491ae2d44e</selfZID><peer><ZID>005dbe0399643d953a2202dd</ZID><rs1>9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045</rs1><aux>f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e</aux><rs2>2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899</rs2><uri>sip:pauline@sip.example.org</uri><sndKey>9111ebeb52e50edcc6fcb3eea1a2d3ae3c2c75d3668923e83c59d0f472455150</sndKey><rcvKey>60f020a3fe11dc2cc0e1e8ed9341b4cd14944db806ca4fc95456bbe45d95c43a</rcvKey><sndSId>5f9aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b77193</sndSId><rcvSId>bcffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b77193</rcvSId><sndIndex>00000080</sndIndex><rcvIndex>000001cf</rcvIndex><pvs>01</pvs></peer><peer><ZID>1234567889643d953a2202ee</ZID><rs1>9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045</rs1><aux>f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e</aux><rs2>2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899</rs2><uri>sip:pauline@sip.example.org</uri><sndKey>72d80ab1cad243cf45634980c1d02cfb2df81ce0dd5dfcf1ebeacfc5345a9176</sndKey><rcvKey>25d9ac653a83c4559cb0ae7394e7cd3b2d3c57bb28e62068d2df23e8f9b77193</rcvKey><sndSId>f69aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b77193</sndSId><rcvSId>22ffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b77193</rcvSId><sndIndex>0000000f</sndIndex><rcvIndex>00000000</rcvIndex></peer></cache>");
|
||||
fclose(CACHE);
|
||||
CACHE = fopen_from_write_dir("ZIDCacheAlice.xml", "rb+");
|
||||
cacheBufferString = (uint8_t *)ms_load_file_content(CACHE, &size);
|
||||
*(cacheBufferString+size) = '\0';
|
||||
fclose(CACHE);
|
||||
/* parse it to an xmlDoc */
|
||||
cacheBufferAlice = xmlParseDoc(cacheBufferString);
|
||||
ms_free(cacheBufferString);
|
||||
|
||||
/* Create Bob cache file and then load it */
|
||||
CACHE = fopen_from_write_dir("ZIDCacheBob.xml", "wb");
|
||||
fprintf(CACHE, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<cache><selfZID>005dbe0399643d953a2202dd</selfZID><peer><ZID>ef7692d0792a67491ae2d44e</ZID><rs1>9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045</rs1><aux>f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e</aux><rs2>2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899</rs2><uri>sip:marie@sip.example.org</uri><rcvKey>9111ebeb52e50edcc6fcb3eea1a2d3ae3c2c75d3668923e83c59d0f472455150</rcvKey><sndKey>60f020a3fe11dc2cc0e1e8ed9341b4cd14944db806ca4fc95456bbe45d95c43a</sndKey><rcvSId>5f9aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b77193</rcvSId><sndSId>bcffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b77193</sndSId><rcvIndex>00000080</rcvIndex><sndIndex>000001cf</sndIndex><pvs>01</pvs></peer><peer><ZID>1234567889643d953a2202ee</ZID><rs1>9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045</rs1><aux>f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e</aux><rs2>2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899</rs2><uri>sip:marie@sip.example.org</uri><sndKey>81e6e6362c34dc974263d1f77cbb9a8d6d6a718330994379099a8fa19fb12faa</sndKey><rcvKey>25d9ac653a83c4559cb0ae7394e7cd3b2d3c57bb28e62068d2df23e8f9b77193</rcvKey><sndSId>f69aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b77193</sndSId><rcvSId>22ffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b77193</rcvSId><sndIndex>0000002e</sndIndex><rcvIndex>00000000</rcvIndex><pvs>01</pvs></peer></cache>");
|
||||
fclose(CACHE);
|
||||
CACHE = fopen_from_write_dir("ZIDCacheBob.xml", "rb+");
|
||||
cacheBufferString = (uint8_t *)ms_load_file_content(CACHE, &size);
|
||||
*(cacheBufferString+size) = '\0';
|
||||
fclose(CACHE);
|
||||
/* parse it to an xmlDoc */
|
||||
cacheBufferBob = xmlParseDoc(cacheBufferString);
|
||||
ms_free(cacheBufferString);
|
||||
|
||||
|
||||
|
||||
/* encrypt a msg */
|
||||
retval = lime_createMultipartMessage(cacheBufferAlice, (uint8_t *)PLAIN_TEXT_TEST_MESSAGE, (uint8_t *)"sip:pauline@sip.example.org", &multipartMessage);
|
||||
|
||||
BC_ASSERT_EQUAL(retval, 0, int, "%d");
|
||||
if (retval == 0) {
|
||||
ms_message("Encrypted msg created is %s", multipartMessage);
|
||||
}
|
||||
|
||||
/* decrypt the multipart msg */
|
||||
retval = lime_decryptMultipartMessage(cacheBufferBob, multipartMessage, &decryptedMessage);
|
||||
|
||||
BC_ASSERT_EQUAL(retval, 0, int, "%d");
|
||||
if (retval == 0) {
|
||||
BC_ASSERT_STRING_EQUAL((char *)decryptedMessage, (char *)PLAIN_TEXT_TEST_MESSAGE);
|
||||
ms_message("Succesfully decrypted msg is %s", decryptedMessage);
|
||||
}
|
||||
free(multipartMessage);
|
||||
free(decryptedMessage);
|
||||
|
||||
/* update ZID files */
|
||||
/* dump the xml document into a string */
|
||||
xmlDocDumpFormatMemoryEnc(cacheBufferAlice, &xmlStringOutput, &xmlStringLength, "UTF-8", 0);
|
||||
/* write it to the file */
|
||||
CACHE = fopen_from_write_dir("ZIDCacheAlice.xml", "wb+");
|
||||
fwrite(xmlStringOutput, 1, xmlStringLength, CACHE);
|
||||
xmlFree(xmlStringOutput);
|
||||
fclose(CACHE);
|
||||
|
||||
xmlDocDumpFormatMemoryEnc(cacheBufferBob, &xmlStringOutput, &xmlStringLength, "UTF-8", 0);
|
||||
/* write it to the file */
|
||||
CACHE = fopen_from_write_dir("ZIDCacheBob.xml", "wb+");
|
||||
fwrite(xmlStringOutput, 1, xmlStringLength, CACHE);
|
||||
xmlFree(xmlStringOutput);
|
||||
fclose(CACHE);
|
||||
|
||||
|
||||
xmlFreeDoc(cacheBufferAlice);
|
||||
xmlFreeDoc(cacheBufferBob);
|
||||
}
|
||||
|
||||
#ifdef SQLITE_STORAGE_ENABLED
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue