diff options
author | dubslow <bunslow@gmail.com> | 2014-10-12 02:29:34 -0500 |
---|---|---|
committer | dubslow <bunslow@gmail.com> | 2014-10-12 02:29:34 -0500 |
commit | 458a09f6ab289afa1e475f388988d88e07dcb8b0 (patch) | |
tree | d85f2cb7780a5d36a4f43d3af028cdcaa947d5fe /toxencryptsave/toxencryptsave.c | |
parent | ccfd777e35812a914dd0025487f219d5f503a1bd (diff) | |
parent | 0444ca18dff821943aac9bc3a59207b2d0dea33f (diff) |
Merge branch 'master' of https://github.com/irungentoo/toxcore
Diffstat (limited to 'toxencryptsave/toxencryptsave.c')
-rw-r--r-- | toxencryptsave/toxencryptsave.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/toxencryptsave/toxencryptsave.c b/toxencryptsave/toxencryptsave.c index 953ee802..7efba089 100644 --- a/toxencryptsave/toxencryptsave.c +++ b/toxencryptsave/toxencryptsave.c | |||
@@ -59,7 +59,7 @@ uint32_t tox_encrypted_size(const Tox *tox) | |||
59 | * returns 0 on success | 59 | * returns 0 on success |
60 | * returns -1 on failure | 60 | * returns -1 on failure |
61 | */ | 61 | */ |
62 | int tox_derive_key_from_pass(uint8_t* passphrase, uint32_t pplength, uint8_t* out_key) | 62 | int tox_derive_key_from_pass(uint8_t *passphrase, uint32_t pplength, uint8_t *out_key) |
63 | { | 63 | { |
64 | if (pplength == 0) | 64 | if (pplength == 0) |
65 | return -1; | 65 | return -1; |
@@ -98,7 +98,7 @@ int tox_derive_key_from_pass(uint8_t* passphrase, uint32_t pplength, uint8_t* ou | |||
98 | * returns 0 on success | 98 | * returns 0 on success |
99 | * returns -1 on failure | 99 | * returns -1 on failure |
100 | */ | 100 | */ |
101 | int tox_pass_key_encrypt(uint8_t* data, uint32_t data_len, const uint8_t* key, uint8_t* out) | 101 | int tox_pass_key_encrypt(uint8_t *data, uint32_t data_len, const uint8_t *key, uint8_t *out) |
102 | { | 102 | { |
103 | /* the output data consists of, in order: | 103 | /* the output data consists of, in order: |
104 | * salt, nonce, mac, enc_data | 104 | * salt, nonce, mac, enc_data |
@@ -110,7 +110,7 @@ int tox_pass_key_encrypt(uint8_t* data, uint32_t data_len, const uint8_t* key, u | |||
110 | 110 | ||
111 | /* first add the prefix */ | 111 | /* first add the prefix */ |
112 | uint8_t nonce[crypto_box_NONCEBYTES]; | 112 | uint8_t nonce[crypto_box_NONCEBYTES]; |
113 | random_nonce(nonce); | 113 | random_nonce(nonce); |
114 | 114 | ||
115 | memcpy(out, key, crypto_pwhash_scryptsalsa208sha256_SALTBYTES); | 115 | memcpy(out, key, crypto_pwhash_scryptsalsa208sha256_SALTBYTES); |
116 | key += crypto_pwhash_scryptsalsa208sha256_SALTBYTES; | 116 | key += crypto_pwhash_scryptsalsa208sha256_SALTBYTES; |
@@ -134,9 +134,10 @@ int tox_pass_key_encrypt(uint8_t* data, uint32_t data_len, const uint8_t* key, u | |||
134 | * returns 0 on success | 134 | * returns 0 on success |
135 | * returns -1 on failure | 135 | * returns -1 on failure |
136 | */ | 136 | */ |
137 | int tox_pass_encrypt(uint8_t* data, uint32_t data_len, uint8_t* passphrase, uint32_t pplength, uint8_t* out) | 137 | int tox_pass_encrypt(uint8_t *data, uint32_t data_len, uint8_t *passphrase, uint32_t pplength, uint8_t *out) |
138 | { | 138 | { |
139 | uint8_t key[TOX_PASS_KEY_LENGTH]; | 139 | uint8_t key[TOX_PASS_KEY_LENGTH]; |
140 | |||
140 | if (tox_derive_key_from_pass(passphrase, pplength, key) == -1) | 141 | if (tox_derive_key_from_pass(passphrase, pplength, key) == -1) |
141 | return -1; | 142 | return -1; |
142 | 143 | ||
@@ -171,7 +172,7 @@ int tox_encrypted_save(const Tox *tox, uint8_t *data, uint8_t *passphrase, uint3 | |||
171 | * returns the length of the output data (== data_len - TOX_PASS_ENCRYPTION_EXTRA_LENGTH) on success | 172 | * returns the length of the output data (== data_len - TOX_PASS_ENCRYPTION_EXTRA_LENGTH) on success |
172 | * returns -1 on failure | 173 | * returns -1 on failure |
173 | */ | 174 | */ |
174 | int tox_pass_key_decrypt(const uint8_t* data, uint32_t length, const uint8_t* key, uint8_t* out) | 175 | int tox_pass_key_decrypt(const uint8_t *data, uint32_t length, const uint8_t *key, uint8_t *out) |
175 | { | 176 | { |
176 | if (length <= TOX_PASS_ENCRYPTION_EXTRA_LENGTH) | 177 | if (length <= TOX_PASS_ENCRYPTION_EXTRA_LENGTH) |
177 | return -1; | 178 | return -1; |
@@ -201,14 +202,14 @@ int tox_pass_key_decrypt(const uint8_t* data, uint32_t length, const uint8_t* ke | |||
201 | * returns the length of the output data (== data_len - TOX_PASS_ENCRYPTION_EXTRA_LENGTH) on success | 202 | * returns the length of the output data (== data_len - TOX_PASS_ENCRYPTION_EXTRA_LENGTH) on success |
202 | * returns -1 on failure | 203 | * returns -1 on failure |
203 | */ | 204 | */ |
204 | int tox_pass_decrypt(const uint8_t* data, uint32_t length, uint8_t* passphrase, uint32_t pplength, uint8_t* out) | 205 | int tox_pass_decrypt(const uint8_t *data, uint32_t length, uint8_t *passphrase, uint32_t pplength, uint8_t *out) |
205 | { | 206 | { |
206 | 207 | ||
207 | uint8_t passkey[crypto_hash_sha256_BYTES]; | 208 | uint8_t passkey[crypto_hash_sha256_BYTES]; |
208 | crypto_hash_sha256(passkey, passphrase, pplength); | 209 | crypto_hash_sha256(passkey, passphrase, pplength); |
209 | 210 | ||
210 | uint8_t salt[crypto_pwhash_scryptsalsa208sha256_SALTBYTES]; | 211 | uint8_t salt[crypto_pwhash_scryptsalsa208sha256_SALTBYTES]; |
211 | memcpy(salt, data, crypto_pwhash_scryptsalsa208sha256_SALTBYTES); | 212 | memcpy(salt, data, crypto_pwhash_scryptsalsa208sha256_SALTBYTES); |
212 | 213 | ||
213 | /* derive the key */ | 214 | /* derive the key */ |
214 | uint8_t key[crypto_box_KEYBYTES + crypto_pwhash_scryptsalsa208sha256_SALTBYTES]; | 215 | uint8_t key[crypto_box_KEYBYTES + crypto_pwhash_scryptsalsa208sha256_SALTBYTES]; |
@@ -236,13 +237,15 @@ int tox_encrypted_load(Tox *tox, const uint8_t *data, uint32_t length, uint8_t * | |||
236 | { | 237 | { |
237 | if (memcmp(data, TOX_ENC_SAVE_MAGIC_NUMBER, TOX_ENC_SAVE_MAGIC_LENGTH) != 0) | 238 | if (memcmp(data, TOX_ENC_SAVE_MAGIC_NUMBER, TOX_ENC_SAVE_MAGIC_LENGTH) != 0) |
238 | return -1; | 239 | return -1; |
239 | data += TOX_ENC_SAVE_MAGIC_LENGTH; length -= TOX_ENC_SAVE_MAGIC_LENGTH; | 240 | |
241 | data += TOX_ENC_SAVE_MAGIC_LENGTH; | ||
242 | length -= TOX_ENC_SAVE_MAGIC_LENGTH; | ||
240 | 243 | ||
241 | uint32_t decrypt_length = length - TOX_PASS_ENCRYPTION_EXTRA_LENGTH; | 244 | uint32_t decrypt_length = length - TOX_PASS_ENCRYPTION_EXTRA_LENGTH; |
242 | uint8_t temp_data[decrypt_length]; | 245 | uint8_t temp_data[decrypt_length]; |
243 | 246 | ||
244 | if (tox_pass_decrypt(data, length, passphrase, pplength, temp_data) | 247 | if (tox_pass_decrypt(data, length, passphrase, pplength, temp_data) |
245 | != decrypt_length) | 248 | != decrypt_length) |
246 | return -1; | 249 | return -1; |
247 | 250 | ||
248 | return tox_load(tox, temp_data, decrypt_length); | 251 | return tox_load(tox, temp_data, decrypt_length); |