示例#1
0
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;    
}
示例#2
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;
}