summaryrefslogtreecommitdiff
path: root/auto_tests/encryptsave_test.c
diff options
context:
space:
mode:
authoriphydf <iphydf@users.noreply.github.com>2016-12-10 11:21:22 +0000
committeriphydf <iphydf@users.noreply.github.com>2016-12-13 14:24:40 +0000
commit4cf69996cc16282b13615843febd68ff6355eb7d (patch)
treea25eabe891617be148a2de433fe1fe08759bea02 /auto_tests/encryptsave_test.c
parent3cfe5544b1cb01771b5a1f722311502127265d0b (diff)
Add apidsl file for toxencryptsave.
This breaks the toxencryptsave API. It hides the Tox_Pass_Key struct definition.
Diffstat (limited to 'auto_tests/encryptsave_test.c')
-rw-r--r--auto_tests/encryptsave_test.c39
1 files changed, 24 insertions, 15 deletions
diff --git a/auto_tests/encryptsave_test.c b/auto_tests/encryptsave_test.c
index fcdef3e6..895d129b 100644
--- a/auto_tests/encryptsave_test.c
+++ b/auto_tests/encryptsave_test.c
@@ -19,8 +19,8 @@
19#include "../toxencryptsave/crypto_pwhash_scryptsalsa208sha256/crypto_pwhash_scryptsalsa208sha256.h" 19#include "../toxencryptsave/crypto_pwhash_scryptsalsa208sha256/crypto_pwhash_scryptsalsa208sha256.h"
20#endif 20#endif
21 21
22static unsigned char test_salt[32] = {0xB1, 0xC2, 0x09, 0xEE, 0x50, 0x6C, 0xF0, 0x20, 0xC4, 0xD6, 0xEB, 0xC0, 0x44, 0x51, 0x3B, 0x60, 0x4B, 0x39, 0x4A, 0xCF, 0x09, 0x53, 0x4F, 0xEA, 0x08, 0x41, 0xFA, 0xCA, 0x66, 0xD2, 0x68, 0x7F}; 22static unsigned char test_salt[TOX_PASS_SALT_LENGTH] = {0xB1, 0xC2, 0x09, 0xEE, 0x50, 0x6C, 0xF0, 0x20, 0xC4, 0xD6, 0xEB, 0xC0, 0x44, 0x51, 0x3B, 0x60, 0x4B, 0x39, 0x4A, 0xCF, 0x09, 0x53, 0x4F, 0xEA, 0x08, 0x41, 0xFA, 0xCA, 0x66, 0xD2, 0x68, 0x7F};
23static unsigned char known_key[crypto_box_BEFORENMBYTES] = {0x29, 0x36, 0x1c, 0x9e, 0x65, 0xbb, 0x46, 0x8b, 0xde, 0xa1, 0xac, 0xf, 0xd5, 0x11, 0x81, 0xc8, 0x29, 0x28, 0x17, 0x23, 0xa6, 0xc3, 0x6b, 0x77, 0x2e, 0xd7, 0xd3, 0x10, 0xeb, 0xd2, 0xf7, 0xc8}; 23static unsigned char known_key[TOX_PASS_KEY_LENGTH] = {0x29, 0x36, 0x1c, 0x9e, 0x65, 0xbb, 0x46, 0x8b, 0xde, 0xa1, 0xac, 0xf, 0xd5, 0x11, 0x81, 0xc8, 0x29, 0x28, 0x17, 0x23, 0xa6, 0xc3, 0x6b, 0x77, 0x2e, 0xd7, 0xd3, 0x10, 0xeb, 0xd2, 0xf7, 0xc8};
24static const char *pw = "hunter2"; 24static const char *pw = "hunter2";
25static unsigned int pwlen = 7; 25static unsigned int pwlen = 7;
26 26
@@ -102,19 +102,20 @@ START_TEST(test_save_friend)
102 size = tox_get_savedata_size(tox3); 102 size = tox_get_savedata_size(tox3);
103 uint8_t data2[size]; 103 uint8_t data2[size];
104 tox_get_savedata(tox3, data2); 104 tox_get_savedata(tox3, data2);
105 TOX_PASS_KEY key; 105 Tox_Pass_Key *key = tox_pass_key_new();
106 memcpy(key.salt, test_salt, 32); 106 ck_assert_msg(key != NULL, "pass key allocation failure");
107 memcpy(key.key, known_key2, crypto_box_BEFORENMBYTES); 107 memcpy((uint8_t *)key, test_salt, TOX_PASS_SALT_LENGTH);
108 memcpy((uint8_t *)key + TOX_PASS_SALT_LENGTH, known_key2, TOX_PASS_KEY_LENGTH);
108 size2 = size + TOX_PASS_ENCRYPTION_EXTRA_LENGTH; 109 size2 = size + TOX_PASS_ENCRYPTION_EXTRA_LENGTH;
109 uint8_t encdata2[size2]; 110 uint8_t encdata2[size2];
110 ret = tox_pass_key_encrypt(data2, size, &key, encdata2, &error1); 111 ret = tox_pass_key_encrypt(key, data2, size, encdata2, &error1);
111 ck_assert_msg(ret, "failed to key encrypt %u", error1); 112 ck_assert_msg(ret, "failed to key encrypt %u", error1);
112 ck_assert_msg(tox_is_data_encrypted(encdata2), "magic number the second missing"); 113 ck_assert_msg(tox_is_data_encrypted(encdata2), "magic number the second missing");
113 114
114 uint8_t out1[size], out2[size]; 115 uint8_t out1[size], out2[size];
115 ret = tox_pass_decrypt(encdata2, size2, (const uint8_t *)pw, pwlen, out1, &err3); 116 ret = tox_pass_decrypt(encdata2, size2, (const uint8_t *)pw, pwlen, out1, &err3);
116 ck_assert_msg(ret, "failed to pw decrypt %u", err3); 117 ck_assert_msg(ret, "failed to pw decrypt %u", err3);
117 ret = tox_pass_key_decrypt(encdata2, size2, &key, out2, &err3); 118 ret = tox_pass_key_decrypt(key, encdata2, size2, out2, &err3);
118 ck_assert_msg(ret, "failed to key decrypt %u", err3); 119 ck_assert_msg(ret, "failed to key decrypt %u", err3);
119 ck_assert_msg(memcmp(out1, out2, size) == 0, "differing output data"); 120 ck_assert_msg(memcmp(out1, out2, size) == 0, "differing output data");
120 121
@@ -129,6 +130,8 @@ START_TEST(test_save_friend)
129 ck_assert_msg(ret, "no friends! the third"); 130 ck_assert_msg(ret, "no friends! the third");
130 ck_assert_msg(memcmp(address, address2, TOX_PUBLIC_KEY_SIZE) == 0, "addresses don't match! the third"); 131 ck_assert_msg(memcmp(address, address2, TOX_PUBLIC_KEY_SIZE) == 0, "addresses don't match! the third");
131 132
133 tox_pass_key_free(key);
134
132 tox_kill(tox1); 135 tox_kill(tox1);
133 tox_kill(tox2); 136 tox_kill(tox2);
134 tox_kill(tox3); 137 tox_kill(tox3);
@@ -141,13 +144,14 @@ START_TEST(test_keys)
141 TOX_ERR_ENCRYPTION encerr; 144 TOX_ERR_ENCRYPTION encerr;
142 TOX_ERR_DECRYPTION decerr; 145 TOX_ERR_DECRYPTION decerr;
143 TOX_ERR_KEY_DERIVATION keyerr; 146 TOX_ERR_KEY_DERIVATION keyerr;
144 TOX_PASS_KEY key; 147 Tox_Pass_Key *key = tox_pass_key_new();
145 bool ret = tox_derive_key_from_pass((const uint8_t *)"123qweasdzxc", 12, &key, &keyerr); 148 ck_assert_msg(key != NULL, "pass key allocation failure");
149 bool ret = tox_pass_key_derive(key, (const uint8_t *)"123qweasdzxc", 12, &keyerr);
146 ck_assert_msg(ret, "generic failure 1: %u", keyerr); 150 ck_assert_msg(ret, "generic failure 1: %u", keyerr);
147 const uint8_t *string = (const uint8_t *)"No Patrick, mayonnaise is not an instrument."; // 44 151 const uint8_t *string = (const uint8_t *)"No Patrick, mayonnaise is not an instrument."; // 44
148 152
149 uint8_t encrypted[44 + TOX_PASS_ENCRYPTION_EXTRA_LENGTH]; 153 uint8_t encrypted[44 + TOX_PASS_ENCRYPTION_EXTRA_LENGTH];
150 ret = tox_pass_key_encrypt(string, 44, &key, encrypted, &encerr); 154 ret = tox_pass_key_encrypt(key, string, 44, encrypted, &encerr);
151 ck_assert_msg(ret, "generic failure 2: %u", encerr); 155 ck_assert_msg(ret, "generic failure 2: %u", encerr);
152 156
153 uint8_t encrypted2[44 + TOX_PASS_ENCRYPTION_EXTRA_LENGTH]; 157 uint8_t encrypted2[44 + TOX_PASS_ENCRYPTION_EXTRA_LENGTH];
@@ -157,7 +161,7 @@ START_TEST(test_keys)
157 uint8_t out1[44 + TOX_PASS_ENCRYPTION_EXTRA_LENGTH]; 161 uint8_t out1[44 + TOX_PASS_ENCRYPTION_EXTRA_LENGTH];
158 uint8_t out2[44 + TOX_PASS_ENCRYPTION_EXTRA_LENGTH]; 162 uint8_t out2[44 + TOX_PASS_ENCRYPTION_EXTRA_LENGTH];
159 163
160 ret = tox_pass_key_decrypt(encrypted, 44 + TOX_PASS_ENCRYPTION_EXTRA_LENGTH, &key, out1, &decerr); 164 ret = tox_pass_key_decrypt(key, encrypted, 44 + TOX_PASS_ENCRYPTION_EXTRA_LENGTH, out1, &decerr);
161 ck_assert_msg(ret, "generic failure 4: %u", decerr); 165 ck_assert_msg(ret, "generic failure 4: %u", decerr);
162 ck_assert_msg(memcmp(out1, string, 44) == 0, "decryption 1 failed"); 166 ck_assert_msg(memcmp(out1, string, 44) == 0, "decryption 1 failed");
163 167
@@ -177,11 +181,16 @@ START_TEST(test_keys)
177 ck_assert_msg(memcmp(out1, string, 44) == 0, "decryption 3 failed"); 181 ck_assert_msg(memcmp(out1, string, 44) == 0, "decryption 3 failed");
178 182
179 uint8_t salt[TOX_PASS_SALT_LENGTH]; 183 uint8_t salt[TOX_PASS_SALT_LENGTH];
180 ck_assert_msg(tox_get_salt(encrypted, salt), "couldn't get salt"); 184 TOX_ERR_GET_SALT salt_err;
181 TOX_PASS_KEY key2; 185 ck_assert_msg(tox_get_salt(encrypted, salt, &salt_err), "couldn't get salt");
182 ret = tox_derive_key_with_salt((const uint8_t *)"123qweasdzxc", 12, salt, &key2, &keyerr); 186 ck_assert_msg(salt_err == TOX_ERR_GET_SALT_OK, "get_salt returned an error");
187 Tox_Pass_Key *key2 = tox_pass_key_new();
188 ck_assert_msg(key != NULL, "pass key allocation failure");
189 ret = tox_pass_key_derive_with_salt(key2, (const uint8_t *)"123qweasdzxc", 12, salt, &keyerr);
183 ck_assert_msg(ret, "generic failure 7: %u", keyerr); 190 ck_assert_msg(ret, "generic failure 7: %u", keyerr);
184 ck_assert_msg(0 == memcmp(&key, &key2, sizeof(TOX_PASS_KEY)), "salt comparison failed"); 191 ck_assert_msg(0 == memcmp(key, key2, TOX_PASS_KEY_LENGTH + TOX_PASS_SALT_LENGTH), "salt comparison failed");
192 tox_pass_key_free(key2);
193 tox_pass_key_free(key);
185} 194}
186END_TEST 195END_TEST
187 196