diff options
Diffstat (limited to 'src/gnsrecord/gnsrecord_crypto.c')
-rw-r--r-- | src/gnsrecord/gnsrecord_crypto.c | 58 |
1 files changed, 28 insertions, 30 deletions
diff --git a/src/gnsrecord/gnsrecord_crypto.c b/src/gnsrecord/gnsrecord_crypto.c index 890ddb011..ff92911de 100644 --- a/src/gnsrecord/gnsrecord_crypto.c +++ b/src/gnsrecord/gnsrecord_crypto.c | |||
@@ -223,7 +223,6 @@ block_create_ecdsa (const struct GNUNET_CRYPTO_EcdsaPrivateKey *key, | |||
223 | unsigned char ctr[GNUNET_CRYPTO_AES_KEY_LENGTH / 2]; | 223 | unsigned char ctr[GNUNET_CRYPTO_AES_KEY_LENGTH / 2]; |
224 | unsigned char skey[GNUNET_CRYPTO_AES_KEY_LENGTH]; | 224 | unsigned char skey[GNUNET_CRYPTO_AES_KEY_LENGTH]; |
225 | struct GNUNET_GNSRECORD_Data rdc[GNUNET_NZL (rd_count)]; | 225 | struct GNUNET_GNSRECORD_Data rdc[GNUNET_NZL (rd_count)]; |
226 | uint32_t rd_count_nbo; | ||
227 | struct GNUNET_TIME_Absolute now; | 226 | struct GNUNET_TIME_Absolute now; |
228 | 227 | ||
229 | if (payload_len < 0) | 228 | if (payload_len < 0) |
@@ -254,7 +253,6 @@ block_create_ecdsa (const struct GNUNET_CRYPTO_EcdsaPrivateKey *key, | |||
254 | /* serialize */ | 253 | /* serialize */ |
255 | *block = GNUNET_malloc (sizeof (struct GNUNET_GNSRECORD_Block) + payload_len); | 254 | *block = GNUNET_malloc (sizeof (struct GNUNET_GNSRECORD_Block) + payload_len); |
256 | (*block)->size = htonl(sizeof (struct GNUNET_GNSRECORD_Block) + payload_len); | 255 | (*block)->size = htonl(sizeof (struct GNUNET_GNSRECORD_Block) + payload_len); |
257 | rd_count_nbo = htonl (rd_count); | ||
258 | { | 256 | { |
259 | char payload[payload_len]; | 257 | char payload[payload_len]; |
260 | 258 | ||
@@ -282,12 +280,12 @@ block_create_ecdsa (const struct GNUNET_CRYPTO_EcdsaPrivateKey *key, | |||
282 | label, | 280 | label, |
283 | ecblock->expiration_time.abs_value_us__, | 281 | ecblock->expiration_time.abs_value_us__, |
284 | pkey); | 282 | pkey); |
285 | GNUNET_break (payload_len == | 283 | GNUNET_assert (payload_len == |
286 | ecdsa_symmetric_encrypt (payload, | 284 | ecdsa_symmetric_encrypt (payload, |
287 | payload_len, | 285 | payload_len, |
288 | skey, | 286 | skey, |
289 | ctr, | 287 | ctr, |
290 | &ecblock[1])); | 288 | &ecblock[1])); |
291 | GNUNET_memcpy (&gnr_block[1], &ecblock[1], payload_len); | 289 | GNUNET_memcpy (&gnr_block[1], &ecblock[1], payload_len); |
292 | } | 290 | } |
293 | if (GNUNET_OK != | 291 | if (GNUNET_OK != |
@@ -298,8 +296,10 @@ block_create_ecdsa (const struct GNUNET_CRYPTO_EcdsaPrivateKey *key, | |||
298 | GNUNET_break (0); | 296 | GNUNET_break (0); |
299 | GNUNET_free (*block); | 297 | GNUNET_free (*block); |
300 | GNUNET_free (dkey); | 298 | GNUNET_free (dkey); |
299 | GNUNET_free (gnr_block); | ||
301 | return GNUNET_SYSERR; | 300 | return GNUNET_SYSERR; |
302 | } | 301 | } |
302 | GNUNET_free (gnr_block); | ||
303 | GNUNET_free (dkey); | 303 | GNUNET_free (dkey); |
304 | return GNUNET_OK; | 304 | return GNUNET_OK; |
305 | } | 305 | } |
@@ -348,7 +348,6 @@ block_create_eddsa (const struct GNUNET_CRYPTO_EddsaPrivateKey *key, | |||
348 | unsigned char nonce[crypto_secretbox_NONCEBYTES]; | 348 | unsigned char nonce[crypto_secretbox_NONCEBYTES]; |
349 | unsigned char skey[crypto_secretbox_KEYBYTES]; | 349 | unsigned char skey[crypto_secretbox_KEYBYTES]; |
350 | struct GNUNET_GNSRECORD_Data rdc[GNUNET_NZL (rd_count)]; | 350 | struct GNUNET_GNSRECORD_Data rdc[GNUNET_NZL (rd_count)]; |
351 | uint32_t rd_count_nbo; | ||
352 | struct GNUNET_TIME_Absolute now; | 351 | struct GNUNET_TIME_Absolute now; |
353 | 352 | ||
354 | if (payload_len < 0) | 353 | if (payload_len < 0) |
@@ -381,7 +380,6 @@ block_create_eddsa (const struct GNUNET_CRYPTO_EddsaPrivateKey *key, | |||
381 | + payload_len + crypto_secretbox_MACBYTES); | 380 | + payload_len + crypto_secretbox_MACBYTES); |
382 | (*block)->size = htonl(sizeof (struct GNUNET_GNSRECORD_Block) | 381 | (*block)->size = htonl(sizeof (struct GNUNET_GNSRECORD_Block) |
383 | + payload_len + crypto_secretbox_MACBYTES); | 382 | + payload_len + crypto_secretbox_MACBYTES); |
384 | rd_count_nbo = htonl (rd_count); | ||
385 | { | 383 | { |
386 | char payload[payload_len]; | 384 | char payload[payload_len]; |
387 | 385 | ||
@@ -415,12 +413,12 @@ block_create_eddsa (const struct GNUNET_CRYPTO_EddsaPrivateKey *key, | |||
415 | label, | 413 | label, |
416 | edblock->expiration_time.abs_value_us__, | 414 | edblock->expiration_time.abs_value_us__, |
417 | pkey); | 415 | pkey); |
418 | GNUNET_break (GNUNET_OK == | 416 | GNUNET_assert (GNUNET_OK == |
419 | eddsa_symmetric_encrypt (payload, | 417 | eddsa_symmetric_encrypt (payload, |
420 | payload_len, | 418 | payload_len, |
421 | skey, | 419 | skey, |
422 | nonce, | 420 | nonce, |
423 | &edblock[1])); | 421 | &edblock[1])); |
424 | GNUNET_memcpy (&gnr_block[1], &edblock[1], | 422 | GNUNET_memcpy (&gnr_block[1], &edblock[1], |
425 | payload_len + crypto_secretbox_MACBYTES); | 423 | payload_len + crypto_secretbox_MACBYTES); |
426 | 424 | ||
@@ -438,7 +436,7 @@ GNUNET_GNSRECORD_block_calculate_size (const struct | |||
438 | unsigned int rd_count) | 436 | unsigned int rd_count) |
439 | { | 437 | { |
440 | struct GNUNET_IDENTITY_PublicKey pkey; | 438 | struct GNUNET_IDENTITY_PublicKey pkey; |
441 | ssize_t res; | 439 | ssize_t res = -1; |
442 | 440 | ||
443 | GNUNET_IDENTITY_key_get_public (key, | 441 | GNUNET_IDENTITY_key_get_public (key, |
444 | &pkey); | 442 | &pkey); |
@@ -453,7 +451,7 @@ GNUNET_GNSRECORD_block_calculate_size (const struct | |||
453 | default: | 451 | default: |
454 | GNUNET_assert (0); | 452 | GNUNET_assert (0); |
455 | } | 453 | } |
456 | return -1; | 454 | return res; |
457 | 455 | ||
458 | } | 456 | } |
459 | 457 | ||
@@ -593,8 +591,9 @@ GNUNET_GNSRECORD_block_verify (const struct GNUNET_GNSRECORD_Block *block) | |||
593 | purp = GNUNET_malloc (sizeof (struct GNRBlockPS) + payload_len); | 591 | purp = GNUNET_malloc (sizeof (struct GNRBlockPS) + payload_len); |
594 | purp->purpose.size = htonl (sizeof (struct GNRBlockPS) + payload_len); | 592 | purp->purpose.size = htonl (sizeof (struct GNRBlockPS) + payload_len); |
595 | purp->purpose.purpose = htonl (GNUNET_SIGNATURE_PURPOSE_GNS_RECORD_SIGN); | 593 | purp->purpose.purpose = htonl (GNUNET_SIGNATURE_PURPOSE_GNS_RECORD_SIGN); |
596 | GNUNET_memcpy (&purp[1], &block[1], payload_len); | 594 | GNUNET_memcpy (&purp[1], |
597 | 595 | &block[1], | |
596 | payload_len); | ||
598 | switch (ntohl (block->type)) | 597 | switch (ntohl (block->type)) |
599 | { | 598 | { |
600 | case GNUNET_GNSRECORD_TYPE_PKEY: | 599 | case GNUNET_GNSRECORD_TYPE_PKEY: |
@@ -650,10 +649,10 @@ block_decrypt_ecdsa (const struct GNUNET_GNSRECORD_Block *block, | |||
650 | char payload[payload_len]; | 649 | char payload[payload_len]; |
651 | unsigned int rd_count; | 650 | unsigned int rd_count; |
652 | 651 | ||
653 | GNUNET_break (payload_len == | 652 | GNUNET_assert (payload_len == |
654 | ecdsa_symmetric_decrypt (&block[1], payload_len, | 653 | ecdsa_symmetric_decrypt (&block[1], payload_len, |
655 | key, ctr, | 654 | key, ctr, |
656 | payload)); | 655 | payload)); |
657 | rd_count = GNUNET_GNSRECORD_records_deserialize_get_size (payload_len, | 656 | rd_count = GNUNET_GNSRECORD_records_deserialize_get_size (payload_len, |
658 | payload); | 657 | payload); |
659 | if (rd_count > 2048) | 658 | if (rd_count > 2048) |
@@ -754,7 +753,6 @@ block_decrypt_eddsa (const struct GNUNET_GNSRECORD_Block *block, | |||
754 | GNUNET_GNSRECORD_RecordCallback proc, | 753 | GNUNET_GNSRECORD_RecordCallback proc, |
755 | void *proc_cls) | 754 | void *proc_cls) |
756 | { | 755 | { |
757 | const struct GNUNET_GNSRECORD_EddsaBlock *edblock = &block->eddsa_block; | ||
758 | size_t payload_len = ntohl (block->size) - sizeof (struct | 756 | size_t payload_len = ntohl (block->size) - sizeof (struct |
759 | GNUNET_GNSRECORD_Block); | 757 | GNUNET_GNSRECORD_Block); |
760 | unsigned char nonce[crypto_secretbox_NONCEBYTES]; | 758 | unsigned char nonce[crypto_secretbox_NONCEBYTES]; |
@@ -776,10 +774,10 @@ block_decrypt_eddsa (const struct GNUNET_GNSRECORD_Block *block, | |||
776 | char payload[payload_len]; | 774 | char payload[payload_len]; |
777 | unsigned int rd_count; | 775 | unsigned int rd_count; |
778 | 776 | ||
779 | GNUNET_break (GNUNET_OK == | 777 | GNUNET_assert (GNUNET_OK == |
780 | eddsa_symmetric_decrypt (&block[1], payload_len, | 778 | eddsa_symmetric_decrypt (&block[1], payload_len, |
781 | key, nonce, | 779 | key, nonce, |
782 | payload)); | 780 | payload)); |
783 | payload_len -= crypto_secretbox_MACBYTES; | 781 | payload_len -= crypto_secretbox_MACBYTES; |
784 | rd_count = GNUNET_GNSRECORD_records_deserialize_get_size (payload_len, | 782 | rd_count = GNUNET_GNSRECORD_records_deserialize_get_size (payload_len, |
785 | payload); | 783 | payload); |
@@ -909,7 +907,7 @@ GNUNET_GNSRECORD_block_decrypt (const struct GNUNET_GNSRECORD_Block *block, | |||
909 | proc_cls); | 907 | proc_cls); |
910 | break; | 908 | break; |
911 | default: | 909 | default: |
912 | return GNUNET_SYSERR; | 910 | res = GNUNET_SYSERR; |
913 | } | 911 | } |
914 | GNUNET_free (norm_label); | 912 | GNUNET_free (norm_label); |
915 | return res; | 913 | return res; |