aboutsummaryrefslogtreecommitdiff
path: root/src/gnsrecord/gnsrecord_crypto.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gnsrecord/gnsrecord_crypto.c')
-rw-r--r--src/gnsrecord/gnsrecord_crypto.c58
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;