Changeset 137 for trunk/src/sh_utils.c
- Timestamp:
- Oct 28, 2007, 1:17:58 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/sh_utils.c
r133 r137 45 45 #include "sh_tiger.h" 46 46 #include "sh_entropy.h" 47 #include "sh_pthread.h" 47 48 48 49 #undef FIL__ … … 570 571 } 571 572 572 char * sh_util_charhex( unsigned char i ) 573 { 574 static char i2h[2]; 573 char * sh_util_charhex( unsigned char i , char * i2h) 574 { 575 575 int j, k; 576 576 … … 669 669 UINT32 * h2; 670 670 UINT32 cc[KEY_LEN/4]; 671 char * res;672 671 UINT32 kbuf[KEY_BYT/sizeof(UINT32)]; 673 672 char hashbuf[KEYBUF_SIZE]; … … 681 680 if (KEY_BLOCK > (KEY_LEN/2)) 682 681 { 683 res = sh_tiger_hash (NULL, TIGER_DATA, 0, hashbuf, sizeof(hashbuf)); 682 (void) sh_tiger_hash (NULL, TIGER_DATA, 0, hashbuf, sizeof(hashbuf)); 683 sl_strlcpy(res, hashbuf, len); 684 684 SL_RETURN(res, _("sh_util_hmac_tiger")); 685 685 } … … 689 689 if (sh_util_hextobinary (K, hexkey, KEY_LEN) < 0) 690 690 { 691 res = sh_tiger_hash (NULL, TIGER_DATA, 0, hashbuf, sizeof(hashbuf)); 691 (void) sh_tiger_hash (NULL, TIGER_DATA, 0, hashbuf, sizeof(hashbuf)); 692 sl_strlcpy(res, hashbuf, len); 692 693 SL_RETURN(res, _("sh_util_hmac_tiger")); 693 694 } … … 712 713 _("integer overflow"), 713 714 _("sh_util_hmac_tiger")); 714 res = sh_tiger_hash (NULL, TIGER_DATA, 0, hashbuf, sizeof(hashbuf)); 715 (void) sh_tiger_hash (NULL, TIGER_DATA, 0, hashbuf, sizeof(hashbuf)); 716 sl_strlcpy(res, hashbuf, len); 715 717 SL_RETURN(res, _("sh_util_hmac_tiger")); 716 718 } … … 749 751 750 752 static char * sh_util_hash_tiger ( char * hexkey, 751 char * text, size_t textlen 753 char * text, size_t textlen, 752 754 char * res, size_t len) 753 755 { 754 756 char h2[2*KEY_LEN+1]; 757 char hashbuf[KEYBUF_SIZE]; 758 755 759 SL_ENTER(_("sh_util_hash_tiger")); 756 760 … … 760 764 (unsigned long) textlen, 761 765 hashbuf, sizeof(hashbuf)), 762 2*KEY_LEN+1 ,766 2*KEY_LEN+1 763 767 ); 764 768 … … 917 921 UINT32 * state = (UINT32 *) vstate; 918 922 923 /* 919 924 if (skey->rngI == BAD) 920 925 (void)taus_seed(); 926 */ 921 927 922 928 #define TAUSWORTHE(s,a,b,c,d) ((s &c) <<d) ^ (((s <<a) ^s) >>b) … … 932 938 * input for a one-way hash function. 933 939 */ 934 UINT32 taus_svec[6]; 935 936 UINT32 taus_get (void *state1, void *state2, void *state3) 937 { 940 941 UINT32 taus_get () 942 { 943 UINT32 taus_svec[6]; 938 944 UINT32 retval; 939 945 UINT32 * res; … … 943 949 UINT32 kbuf[KEY_BYT/sizeof(UINT32)]; 944 950 951 SH_MUTEX_LOCK_UNSAFE(mutex_skey); 945 952 if (res_num > 0) 946 953 { 947 954 retval = res_vec[res_num]; 948 955 res_num = (res_num == 5) ? 0 : (res_num + 1); 956 SH_MUTEX_UNLOCK_UNSAFE(mutex_skey); /* alternative path */ 949 957 return retval; 950 958 } 951 952 taus_svec[0] = taus_get_long (state1); 953 taus_svec[1] = taus_get_long (state2); 954 taus_svec[2] = taus_get_long (state3); 955 taus_svec[3] = taus_get_long (state1); 956 taus_svec[4] = taus_get_long (state2); 957 taus_svec[5] = taus_get_long (state3); 959 SH_MUTEX_UNLOCK_UNSAFE(mutex_skey); 960 961 (void)taus_seed(); 962 963 SH_MUTEX_LOCK_UNSAFE(mutex_skey); 964 taus_svec[0] = taus_get_long (&(skey->rng0[0])); 965 taus_svec[1] = taus_get_long (&(skey->rng1[0])); 966 taus_svec[2] = taus_get_long (&(skey->rng2[2])); 967 taus_svec[3] = taus_get_long (&(skey->rng0[0])); 968 taus_svec[4] = taus_get_long (&(skey->rng1[0])); 969 taus_svec[5] = taus_get_long (&(skey->rng2[0])); 970 SH_MUTEX_UNLOCK_UNSAFE(mutex_skey); 958 971 959 972 res = sh_tiger_hash_uint32 ( (char *) &taus_svec[0], … … 962 975 kbuf, KEY_BYT/sizeof(UINT32)); 963 976 977 SH_MUTEX_LOCK_UNSAFE(mutex_skey); 964 978 for (i = 1; i < 6; ++i) 965 979 { … … 968 982 retval = taus_svec[0]; 969 983 res_num = 1; 984 SH_MUTEX_UNLOCK_UNSAFE(mutex_skey); 970 985 971 986 taus_svec[0] = 0; taus_svec[1] = 0; taus_svec[2] = 0; … … 1027 1042 int status; 1028 1043 static unsigned long seed_time = 0; 1044 unsigned long gtime; 1029 1045 1030 1046 SL_ENTER(_("taus_seed")); … … 1032 1048 if (skey->rngI == GOOD) 1033 1049 { 1034 if ( (sh_unix_longtime () - seed_time) < 3600)1050 if ( (sh_unix_longtime () - seed_time) < 7200) 1035 1051 SL_RETURN( (0), _("taus_seed")); 1036 1052 } … … 1042 1058 if (!SL_ISERROR(status)) 1043 1059 { 1044 skey->rngI = GOOD;1060 SH_MUTEX_LOCK_UNSAFE(mutex_skey); 1045 1061 memcpy (&skey->rng0[0], &bufx[0], 2*sizeof(UINT32)); 1046 1062 memcpy (&skey->rng1[0], &bufx[2*sizeof(UINT32)], 2*sizeof(UINT32)); … … 1056 1072 taus_set_from_state( &(skey->rng2[0]), &(skey->rng2[0])); 1057 1073 1074 skey->rngI = GOOD; 1075 SH_MUTEX_UNLOCK_UNSAFE(mutex_skey); 1058 1076 SL_RETURN( (0), _("taus_seed")); 1059 1077 } … … 1064 1082 /* emergency backup - unsafe ! 1065 1083 */ 1066 skey->rngI = GOOD;1067 1084 #ifdef HAVE_GETTIMEOFDAY 1068 taus_set_from_ulong ( &(skey->rng0[0]), LCG (sh_unix_notime()));1085 gtime = sh_unix_notime(); 1069 1086 #else 1070 taus_set_from_ulong ( &(skey->rng0[0]), LCG (seed_time) );1087 gtime = seed_time; 1071 1088 #endif 1089 1090 SH_MUTEX_LOCK_UNSAFE(mutex_skey); 1091 taus_set_from_ulong ( &(skey->rng0[0]), LCG (gtime) ); 1072 1092 taus_set_from_ulong ( &(skey->rng1[0]), LCG (skey->rng0[0]) ); 1073 1093 taus_set_from_ulong ( &(skey->rng2[0]), LCG (skey->rng1[0]) ); 1074 1094 skey->rngI = BAD; 1095 SH_MUTEX_UNLOCK_UNSAFE(mutex_skey); 1075 1096 1076 1097 SL_RETURN( (-1), _("taus_seed"));
Note:
See TracChangeset
for help on using the changeset viewer.