summaryrefslogtreecommitdiff
path: root/toxencryptsave
diff options
context:
space:
mode:
Diffstat (limited to 'toxencryptsave')
-rw-r--r--toxencryptsave/toxencryptsave.c17
-rw-r--r--toxencryptsave/toxencryptsave.h15
2 files changed, 22 insertions, 10 deletions
diff --git a/toxencryptsave/toxencryptsave.c b/toxencryptsave/toxencryptsave.c
index e7ec31f1..9b202f49 100644
--- a/toxencryptsave/toxencryptsave.c
+++ b/toxencryptsave/toxencryptsave.c
@@ -93,7 +93,8 @@ bool tox_derive_key_from_pass(uint8_t *passphrase, size_t pplength, uint8_t *out
93/* Same as above, except with use the given salt for deterministic key derivation. 93/* Same as above, except with use the given salt for deterministic key derivation.
94 * The salt must be tox_salt_length() bytes in length. 94 * The salt must be tox_salt_length() bytes in length.
95 */ 95 */
96bool tox_derive_key_with_salt(uint8_t *passphrase, size_t pplength, uint8_t *salt, uint8_t *out_key, TOX_ERR_KEY_DERIVATION *error) 96bool tox_derive_key_with_salt(uint8_t *passphrase, size_t pplength, uint8_t *salt, uint8_t *out_key,
97 TOX_ERR_KEY_DERIVATION *error)
97{ 98{
98 if (pplength == 0 || !passphrase || !salt || !out_key) { 99 if (pplength == 0 || !passphrase || !salt || !out_key) {
99 SET_ERROR_PARAMETER(error, TOX_ERR_KEY_DERIVATION_NULL); 100 SET_ERROR_PARAMETER(error, TOX_ERR_KEY_DERIVATION_NULL);
@@ -133,7 +134,8 @@ bool tox_derive_key_with_salt(uint8_t *passphrase, size_t pplength, uint8_t *sal
133 * 134 *
134 * returns true on success 135 * returns true on success
135 */ 136 */
136bool tox_pass_key_encrypt(const uint8_t *data, size_t data_len, const uint8_t *key, uint8_t *out, TOX_ERR_ENCRYPTION *error) 137bool tox_pass_key_encrypt(const uint8_t *data, size_t data_len, const uint8_t *key, uint8_t *out,
138 TOX_ERR_ENCRYPTION *error)
137{ 139{
138 if (data_len == 0 || !data || !key || !out) { 140 if (data_len == 0 || !data || !key || !out) {
139 SET_ERROR_PARAMETER(error, TOX_ERR_ENCRYPTION_NULL); 141 SET_ERROR_PARAMETER(error, TOX_ERR_ENCRYPTION_NULL);
@@ -179,7 +181,8 @@ bool tox_pass_key_encrypt(const uint8_t *data, size_t data_len, const uint8_t *k
179 * 181 *
180 * returns true on success 182 * returns true on success
181 */ 183 */
182bool tox_pass_encrypt(const uint8_t *data, size_t data_len, uint8_t *passphrase, size_t pplength, uint8_t *out, TOX_ERR_ENCRYPTION *error) 184bool tox_pass_encrypt(const uint8_t *data, size_t data_len, uint8_t *passphrase, size_t pplength, uint8_t *out,
185 TOX_ERR_ENCRYPTION *error)
183{ 186{
184 uint8_t key[TOX_PASS_KEY_LENGTH]; 187 uint8_t key[TOX_PASS_KEY_LENGTH];
185 TOX_ERR_KEY_DERIVATION _error; 188 TOX_ERR_KEY_DERIVATION _error;
@@ -190,6 +193,7 @@ bool tox_pass_encrypt(const uint8_t *data, size_t data_len, uint8_t *passphrase,
190 } else if (_error == TOX_ERR_KEY_DERIVATION_FAILED) { 193 } else if (_error == TOX_ERR_KEY_DERIVATION_FAILED) {
191 SET_ERROR_PARAMETER(error, TOX_ERR_ENCRYPTION_KEY_DERIVATION_FAILED); 194 SET_ERROR_PARAMETER(error, TOX_ERR_ENCRYPTION_KEY_DERIVATION_FAILED);
192 } 195 }
196
193 return 0; 197 return 0;
194 } 198 }
195 199
@@ -203,12 +207,14 @@ bool tox_pass_encrypt(const uint8_t *data, size_t data_len, uint8_t *passphrase,
203 * 207 *
204 * returns true on success 208 * returns true on success
205 */ 209 */
206bool tox_pass_key_decrypt(const uint8_t *data, size_t length, const uint8_t *key, uint8_t *out, TOX_ERR_DECRYPTION *error) 210bool tox_pass_key_decrypt(const uint8_t *data, size_t length, const uint8_t *key, uint8_t *out,
211 TOX_ERR_DECRYPTION *error)
207{ 212{
208 if (length <= TOX_PASS_ENCRYPTION_EXTRA_LENGTH) { 213 if (length <= TOX_PASS_ENCRYPTION_EXTRA_LENGTH) {
209 SET_ERROR_PARAMETER(error, TOX_ERR_DECRYPTION_INVALID_LENGTH); 214 SET_ERROR_PARAMETER(error, TOX_ERR_DECRYPTION_INVALID_LENGTH);
210 return 0; 215 return 0;
211 } 216 }
217
212 if (memcmp(data, TOX_ENC_SAVE_MAGIC_NUMBER, TOX_ENC_SAVE_MAGIC_LENGTH) != 0) { 218 if (memcmp(data, TOX_ENC_SAVE_MAGIC_NUMBER, TOX_ENC_SAVE_MAGIC_LENGTH) != 0) {
213 SET_ERROR_PARAMETER(error, TOX_ERR_DECRYPTION_BAD_FORMAT); 219 SET_ERROR_PARAMETER(error, TOX_ERR_DECRYPTION_BAD_FORMAT);
214 return 0; 220 return 0;
@@ -245,7 +251,8 @@ bool tox_pass_key_decrypt(const uint8_t *data, size_t length, const uint8_t *key
245 * 251 *
246 * returns true on success 252 * returns true on success
247 */ 253 */
248bool tox_pass_decrypt(const uint8_t *data, size_t length, uint8_t *passphrase, size_t pplength, uint8_t *out, TOX_ERR_DECRYPTION *error) 254bool tox_pass_decrypt(const uint8_t *data, size_t length, uint8_t *passphrase, size_t pplength, uint8_t *out,
255 TOX_ERR_DECRYPTION *error)
249{ 256{
250 if (memcmp(data, TOX_ENC_SAVE_MAGIC_NUMBER, TOX_ENC_SAVE_MAGIC_LENGTH) != 0) { 257 if (memcmp(data, TOX_ENC_SAVE_MAGIC_NUMBER, TOX_ENC_SAVE_MAGIC_LENGTH) != 0) {
251 SET_ERROR_PARAMETER(error, TOX_ERR_DECRYPTION_BAD_FORMAT); 258 SET_ERROR_PARAMETER(error, TOX_ERR_DECRYPTION_BAD_FORMAT);
diff --git a/toxencryptsave/toxencryptsave.h b/toxencryptsave/toxencryptsave.h
index ef1dfb5e..2ee4af46 100644
--- a/toxencryptsave/toxencryptsave.h
+++ b/toxencryptsave/toxencryptsave.h
@@ -134,7 +134,8 @@ typedef enum TOX_ERR_DECRYPTION {
134 * 134 *
135 * returns true on success 135 * returns true on success
136 */ 136 */
137bool tox_pass_encrypt(const uint8_t *data, size_t data_len, uint8_t *passphrase, size_t pplength, uint8_t *out, TOX_ERR_ENCRYPTION *error); 137bool tox_pass_encrypt(const uint8_t *data, size_t data_len, uint8_t *passphrase, size_t pplength, uint8_t *out,
138 TOX_ERR_ENCRYPTION *error);
138 139
139 140
140/* Decrypts the given data with the given passphrase. The output array must be 141/* Decrypts the given data with the given passphrase. The output array must be
@@ -145,7 +146,8 @@ bool tox_pass_encrypt(const uint8_t *data, size_t data_len, uint8_t *passphrase,
145 * 146 *
146 * returns true on success 147 * returns true on success
147 */ 148 */
148bool tox_pass_decrypt(const uint8_t *data, size_t length, uint8_t *passphrase, size_t pplength, uint8_t *out, TOX_ERR_DECRYPTION *error); 149bool tox_pass_decrypt(const uint8_t *data, size_t length, uint8_t *passphrase, size_t pplength, uint8_t *out,
150 TOX_ERR_DECRYPTION *error);
149 151
150 152
151/******************************* BEGIN PART 1 ******************************* 153/******************************* BEGIN PART 1 *******************************
@@ -169,7 +171,8 @@ bool tox_derive_key_from_pass(uint8_t *passphrase, size_t pplength, uint8_t *out
169/* Same as above, except with use the given salt for deterministic key derivation. 171/* Same as above, except with use the given salt for deterministic key derivation.
170 * The salt must be tox_salt_length() bytes in length. 172 * The salt must be tox_salt_length() bytes in length.
171 */ 173 */
172bool tox_derive_key_with_salt(uint8_t *passphrase, size_t pplength, uint8_t *salt, uint8_t *out_key, TOX_ERR_KEY_DERIVATION *error); 174bool tox_derive_key_with_salt(uint8_t *passphrase, size_t pplength, uint8_t *salt, uint8_t *out_key,
175 TOX_ERR_KEY_DERIVATION *error);
173 176
174/* This retrieves the salt used to encrypt the given data, which can then be passed to 177/* This retrieves the salt used to encrypt the given data, which can then be passed to
175 * derive_key_with_salt to produce the same key as was previously used. Any encrpyted 178 * derive_key_with_salt to produce the same key as was previously used. Any encrpyted
@@ -191,7 +194,8 @@ bool tox_get_salt(const uint8_t *data, uint8_t *salt);
191 * 194 *
192 * returns true on success 195 * returns true on success
193 */ 196 */
194bool tox_pass_key_encrypt(const uint8_t *data, size_t data_len, const uint8_t *key, uint8_t *out, TOX_ERR_ENCRYPTION *error); 197bool tox_pass_key_encrypt(const uint8_t *data, size_t data_len, const uint8_t *key, uint8_t *out,
198 TOX_ERR_ENCRYPTION *error);
195 199
196/* This is the inverse of tox_pass_key_encrypt, also using only keys produced by 200/* This is the inverse of tox_pass_key_encrypt, also using only keys produced by
197 * tox_derive_key_from_pass. 201 * tox_derive_key_from_pass.
@@ -200,7 +204,8 @@ bool tox_pass_key_encrypt(const uint8_t *data, size_t data_len, const uint8_t *k
200 * 204 *
201 * returns true on success 205 * returns true on success
202 */ 206 */
203bool tox_pass_key_decrypt(const uint8_t *data, size_t length, const uint8_t *key, uint8_t *out, TOX_ERR_DECRYPTION *error); 207bool tox_pass_key_decrypt(const uint8_t *data, size_t length, const uint8_t *key, uint8_t *out,
208 TOX_ERR_DECRYPTION *error);
204 209
205/* Determines whether or not the given data is encrypted (by checking the magic number) 210/* Determines whether or not the given data is encrypted (by checking the magic number)
206 */ 211 */