예제 #1
0
파일: rand.c 프로젝트: rofehr/uboot-amlogic
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;
}
예제 #2
0
파일: rand.c 프로젝트: rofehr/uboot-amlogic
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;
}
예제 #3
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;
}
예제 #4
0
파일: rand.c 프로젝트: rofehr/uboot-amlogic
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;
}