uint8_t SYS_RANDOM_CryptoByteGet( void ) { uint8_t rNo; CRYPT_RNG_Get(&sysRandCtx, (unsigned char*)&rNo); return rNo; // TODO: set error status/return error if failed }
/* 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; }