SYS_MODULE_OBJ SYS_RANDOM_Initialize( const SYS_MODULE_INDEX index, const SYS_MODULE_INIT * const init ) { sysRandObject.index = index; sysRandObject.status = SYS_STATUS_BUSY; const SYS_RANDOM_INIT* pInitData = (const SYS_RANDOM_INIT*)init; if(pInitData == 0) { pInitData = &randInitDefault; } srand(pInitData->seedPseudo); if(CRYPT_RNG_Initialize(&sysRandCtx) < 0) { // failed sysRandObject.status = SYS_STATUS_UNINITIALIZED; return SYS_MODULE_OBJ_INVALID; } sysRandObject.seedCryptoSize = pInitData->seedCryptoSize; sysRandObject.status = SYS_STATUS_READY; /* Return dummy object */ return 0; }
/* check mcapi rng */ static int check_rng(void) { int ret; int i; byte in[RANDOM_BYTE_SZ]; byte out[RANDOM_BYTE_SZ]; for (i = 0; i < RANDOM_BYTE_SZ; i++) in[i] = (byte)i; for (i = 0; i < RANDOM_BYTE_SZ; i++) out[i] = (byte)i; ret = InitRng(&defRng); if (ret != 0) { printf("default rng init failed\n"); return -1; } ret = CRYPT_RNG_Initialize(&mcRng); if (ret != 0) { printf("mcapi rng init failed\n"); return -1; } ret = CRYPT_RNG_Get(&mcRng, &out[0]); if (ret != 0) { printf("mcapi rng get failed\n"); return -1; } ret = CRYPT_RNG_BlockGenerate(&mcRng, out, RANDOM_BYTE_SZ); if (ret != 0) { printf("mcapi rng block gen failed\n"); return -1; } if (memcmp(in, out, RANDOM_BYTE_SZ) == 0) { printf("mcapi rng block gen output failed\n"); return -1; } printf("rng mcapi test passed\n"); return 0; }