aboutsummaryrefslogtreecommitdiff
path: root/src/util/crypto_hash.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/crypto_hash.c')
-rw-r--r--src/util/crypto_hash.c51
1 files changed, 26 insertions, 25 deletions
diff --git a/src/util/crypto_hash.c b/src/util/crypto_hash.c
index fce93ceaf..4f8482c4c 100644
--- a/src/util/crypto_hash.c
+++ b/src/util/crypto_hash.c
@@ -359,7 +359,8 @@ sha512_final (struct sha512_ctx *sctx, unsigned char *hash)
359 * @param ret pointer to where to write the hashcode 359 * @param ret pointer to where to write the hashcode
360 */ 360 */
361void 361void
362GNUNET_CRYPTO_hash (const void *block, unsigned int size, 362GNUNET_CRYPTO_hash (const void *block,
363 size_t size,
363 GNUNET_HashCode * ret) 364 GNUNET_HashCode * ret)
364{ 365{
365 struct sha512_ctx ctx; 366 struct sha512_ctx ctx;
@@ -660,18 +661,18 @@ GNUNET_CRYPTO_hash_distance_u32 (const GNUNET_HashCode * a,
660} 661}
661 662
662void 663void
663GNUNET_CRYPTO_hash_create_random (GNUNET_HashCode * result) 664GNUNET_CRYPTO_hash_create_random (enum GNUNET_CRYPTO_Quality mode, GNUNET_HashCode * result)
664{ 665{
665 int i; 666 int i;
666 for (i = (sizeof (GNUNET_HashCode) / sizeof (unsigned int)) - 1; i >= 0; 667 for (i = (sizeof (GNUNET_HashCode) / sizeof (uint32_t)) - 1; i >= 0;
667 i--) 668 i--)
668 result->bits[i] = rand (); 669 result->bits[i] = GNUNET_CRYPTO_random_u32 (mode, (uint32_t)-1);
669} 670}
670 671
671void 672void
672GNUNET_CRYPTO_hash_difference (const GNUNET_HashCode * a, 673GNUNET_CRYPTO_hash_difference (const GNUNET_HashCode * a,
673 const GNUNET_HashCode * b, 674 const GNUNET_HashCode * b,
674 GNUNET_HashCode * result) 675 GNUNET_HashCode * result)
675{ 676{
676 int i; 677 int i;
677 for (i = (sizeof (GNUNET_HashCode) / sizeof (unsigned int)) - 1; i >= 0; 678 for (i = (sizeof (GNUNET_HashCode) / sizeof (unsigned int)) - 1; i >= 0;
@@ -681,8 +682,8 @@ GNUNET_CRYPTO_hash_difference (const GNUNET_HashCode * a,
681 682
682void 683void
683GNUNET_CRYPTO_hash_sum (const GNUNET_HashCode * a, 684GNUNET_CRYPTO_hash_sum (const GNUNET_HashCode * a,
684 const GNUNET_HashCode * delta, 685 const GNUNET_HashCode * delta,
685 GNUNET_HashCode * result) 686 GNUNET_HashCode * result)
686{ 687{
687 int i; 688 int i;
688 for (i = (sizeof (GNUNET_HashCode) / sizeof (unsigned int)) - 1; i >= 0; 689 for (i = (sizeof (GNUNET_HashCode) / sizeof (unsigned int)) - 1; i >= 0;
@@ -692,7 +693,7 @@ GNUNET_CRYPTO_hash_sum (const GNUNET_HashCode * a,
692 693
693void 694void
694GNUNET_CRYPTO_hash_xor (const GNUNET_HashCode * a, 695GNUNET_CRYPTO_hash_xor (const GNUNET_HashCode * a,
695 const GNUNET_HashCode * b, GNUNET_HashCode * result) 696 const GNUNET_HashCode * b, GNUNET_HashCode * result)
696{ 697{
697 int i; 698 int i;
698 for (i = (sizeof (GNUNET_HashCode) / sizeof (unsigned int)) - 1; i >= 0; 699 for (i = (sizeof (GNUNET_HashCode) / sizeof (unsigned int)) - 1; i >= 0;
@@ -705,18 +706,18 @@ GNUNET_CRYPTO_hash_xor (const GNUNET_HashCode * a,
705 */ 706 */
706void 707void
707GNUNET_CRYPTO_hash_to_aes_key (const GNUNET_HashCode * hc, 708GNUNET_CRYPTO_hash_to_aes_key (const GNUNET_HashCode * hc,
708 struct GNUNET_CRYPTO_AesSessionKey *skey, 709 struct GNUNET_CRYPTO_AesSessionKey *skey,
709 struct GNUNET_CRYPTO_AesInitializationVector 710 struct GNUNET_CRYPTO_AesInitializationVector
710 *iv) 711 *iv)
711{ 712{
712 GNUNET_assert (sizeof (GNUNET_HashCode) >= 713 GNUNET_assert (sizeof (GNUNET_HashCode) >=
713 GNUNET_CRYPTO_AES_KEY_LENGTH + 714 GNUNET_CRYPTO_AES_KEY_LENGTH +
714 sizeof (struct GNUNET_CRYPTO_AesInitializationVector)); 715 sizeof (struct GNUNET_CRYPTO_AesInitializationVector));
715 memcpy (skey, hc, GNUNET_CRYPTO_AES_KEY_LENGTH); 716 memcpy (skey, hc, GNUNET_CRYPTO_AES_KEY_LENGTH);
716 skey->crc32 = 717 skey->crc32 =
717 htonl (GNUNET_CRYPTO_crc32_n (skey, GNUNET_CRYPTO_AES_KEY_LENGTH)); 718 htonl (GNUNET_CRYPTO_crc32_n (skey, GNUNET_CRYPTO_AES_KEY_LENGTH));
718 memcpy (iv, &((char *) hc)[GNUNET_CRYPTO_AES_KEY_LENGTH], 719 memcpy (iv, &((char *) hc)[GNUNET_CRYPTO_AES_KEY_LENGTH],
719 sizeof (struct GNUNET_CRYPTO_AesInitializationVector)); 720 sizeof (struct GNUNET_CRYPTO_AesInitializationVector));
720} 721}
721 722
722/** 723/**
@@ -739,21 +740,21 @@ GNUNET_CRYPTO_hash_get_bit (const GNUNET_HashCode * code, unsigned int bit)
739 */ 740 */
740int 741int
741GNUNET_CRYPTO_hash_cmp (const GNUNET_HashCode * h1, 742GNUNET_CRYPTO_hash_cmp (const GNUNET_HashCode * h1,
742 const GNUNET_HashCode * h2) 743 const GNUNET_HashCode * h2)
743{ 744{
744 unsigned int *i1; 745 unsigned int *i1;
745 unsigned int *i2; 746 unsigned int *i2;
746 int i; 747 int i;
747 748
748 i1 = (unsigned int *) h1; 749 i1 = (unsigned int *) h1;
749 i2 = (unsigned int *) h2; 750 i2 = (unsigned int *) h2;
750 for (i = (sizeof (GNUNET_HashCode) / sizeof (unsigned int)) - 1; i >= 0; 751 for (i = (sizeof (GNUNET_HashCode) / sizeof (unsigned int)) - 1; i >= 0;
751 i--) 752 i--)
752 { 753 {
753 if (i1[i] > i2[i]) 754 if (i1[i] > i2[i])
754 return 1; 755 return 1;
755 if (i1[i] < i2[i]) 756 if (i1[i] < i2[i])
756 return -1; 757 return -1;
757 } 758 }
758 return 0; 759 return 0;
759} 760}
@@ -765,23 +766,23 @@ GNUNET_CRYPTO_hash_cmp (const GNUNET_HashCode * h1,
765 */ 766 */
766int 767int
767GNUNET_CRYPTO_hash_xorcmp (const GNUNET_HashCode * h1, 768GNUNET_CRYPTO_hash_xorcmp (const GNUNET_HashCode * h1,
768 const GNUNET_HashCode * h2, 769 const GNUNET_HashCode * h2,
769 const GNUNET_HashCode * target) 770 const GNUNET_HashCode * target)
770{ 771{
771 int i; 772 int i;
772 unsigned int d1; 773 unsigned int d1;
773 unsigned int d2; 774 unsigned int d2;
774 775
775 for (i = sizeof (GNUNET_HashCode) / sizeof (unsigned int) - 1; i >= 0; i--) 776 for (i = sizeof (GNUNET_HashCode) / sizeof (unsigned int) - 1; i >= 0; i--)
776 { 777 {
777 d1 = ((unsigned int *) h1)[i] ^ ((unsigned int *) target)[i]; 778 d1 = ((unsigned int *) h1)[i] ^ ((unsigned int *) target)[i];
778 d2 = ((unsigned int *) h2)[i] ^ ((unsigned int *) target)[i]; 779 d2 = ((unsigned int *) h2)[i] ^ ((unsigned int *) target)[i];
779 if (d1 > d2) 780 if (d1 > d2)
780 return 1; 781 return 1;
781 else if (d1 < d2) 782 else if (d1 < d2)
782 return -1; 783 return -1;
783 } 784 }
784 return 0; 785 return 0;
785} 786}
786 787
787/* end of hashing.c */ 788/* end of crypto_hash.c */