unsigned char random_u8(unsigned int seed) { rand_t *r; int rv; unsigned char rand; r = rand_open(); if (r == NULL) return -1; rv = rand_set(r,&seed,4); if (r == NULL) return -1; rand = rand_uint8(r); r = rand_close(r); return rand; }
static unsigned int Rand_GenRand(unsigned char *pRand, unsigned long ulRandLen) { rand_t *r; int rv; // time_t seed; r = rand_open(); if (r == NULL) return -1; if(g_ulSendlen != 0) { rv = rand_set(r,&g_Seed,g_ulSendlen); if (r == NULL) return -1; } rv = rand_get(r,pRand,ulRandLen); if (r == NULL) return -1; r = rand_close(r); memcpy(g_Seed,pRand,g_ulSendlen); return 0; }
/*lint -e525 -e438*/ int GeneratePublicKey(DH_KEY *params, unsigned char *publicValue, unsigned int pubValueLen) { rand_t *rd; int rv; time_t seed; unsigned int bytesNeeded; unsigned char seedByte[20] = {0}; R_RANDOM_STRUCT randomStruct; bytesNeeded = pubValueLen; randomStruct.bytesNeeded = bytesNeeded; memset ((POINTER)randomStruct.state, 0, sizeof (randomStruct.state)); randomStruct.outputAvailable = 0; time(&seed); rd = rand_open(); if (rd == NULL) return -1; rand_set(rd,&seed,4); if (rd == NULL) return -1; while (1) { bytesNeeded = randomStruct.bytesNeeded; if (bytesNeeded == 0) break; rand_get(rd,seedByte,16); if (rd == NULL) return -1; RandomUpdate(&randomStruct, seedByte, 16); } rd = rand_close(rd); params->priVallen = pubValueLen; rv = SetupDHAgreement(publicValue,params->privateValue,pubValueLen, params,&randomStruct); return rv; }
int random_generate(unsigned int seed_ext,unsigned char *buf,unsigned len) { #define SEEDBYTE_NUM 128 unsigned int seed=seed_ext; rand_t *r; int rv; unsigned pos,cnt; unsigned char seedByte[SEEDBYTE_NUM] = {0}; r = rand_open(); if (r == NULL) return -1; rv = rand_set(r,&seed,4); if (r == NULL) return -1; rv = rand_get(r,seedByte,SEEDBYTE_NUM); r = rand_close(r); if(len <= SEEDBYTE_NUM){ memcpy(buf,seedByte,len); } else{ pos = 0; while(len>0){ if(len>=SEEDBYTE_NUM){ cnt = SEEDBYTE_NUM; } else{ cnt = len; } memcpy(&buf[pos],seedByte,cnt); len -= cnt; pos += cnt; //printf("len:%d\n",len); } } #undef SEEDBYTE_NUM return 0; }