diff options
Diffstat (limited to 'src/util/crypto_hash.c')
-rw-r--r-- | src/util/crypto_hash.c | 51 |
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 | */ |
361 | void | 361 | void |
362 | GNUNET_CRYPTO_hash (const void *block, unsigned int size, | 362 | GNUNET_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 | ||
662 | void | 663 | void |
663 | GNUNET_CRYPTO_hash_create_random (GNUNET_HashCode * result) | 664 | GNUNET_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 | ||
671 | void | 672 | void |
672 | GNUNET_CRYPTO_hash_difference (const GNUNET_HashCode * a, | 673 | GNUNET_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 | ||
682 | void | 683 | void |
683 | GNUNET_CRYPTO_hash_sum (const GNUNET_HashCode * a, | 684 | GNUNET_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 | ||
693 | void | 694 | void |
694 | GNUNET_CRYPTO_hash_xor (const GNUNET_HashCode * a, | 695 | GNUNET_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 | */ |
706 | void | 707 | void |
707 | GNUNET_CRYPTO_hash_to_aes_key (const GNUNET_HashCode * hc, | 708 | GNUNET_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 | */ |
740 | int | 741 | int |
741 | GNUNET_CRYPTO_hash_cmp (const GNUNET_HashCode * h1, | 742 | GNUNET_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 | */ |
766 | int | 767 | int |
767 | GNUNET_CRYPTO_hash_xorcmp (const GNUNET_HashCode * h1, | 768 | GNUNET_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 */ |