예제 #1
0
int atcacert_gen_challenge_hw( uint8_t challenge[32] )
{
    if (challenge == NULL)
        return ATCACERT_E_BAD_PARAMS;
    
    return atcab_random(challenge);
}
예제 #2
0
/** \brief Get a random number
 *  \param[out] randout Pointer the 32 random bytes that were returned by the Random Command
 *  \return ATCA_STATUS
 */
ATCA_STATUS atcatls_random(uint8_t* randout)
{
	ATCA_STATUS status = ATCA_SUCCESS;

	do {
		// Verify input parameters
		if (randout == NULL) {
			status = ATCA_BAD_PARAM;
			BREAK(status, "NULL inputs");
		}
		// Call the random command
		if ((status = atcab_random(randout)) != ATCA_SUCCESS) BREAK(status, "Random command failed");

	} while (0);

	return status;
}
예제 #3
0
/** \brief Test proper Random Command operation using the ECC508.
 *  \return void
 */
void test_atcatls_random(void)
{
	ATCA_STATUS status = ATCA_GEN_FAIL;
	uint8_t randomNum[RANDOM_RSP_SIZE] = { 0 };
	uint8_t randomNumNull[RANDOM_RSP_SIZE] = { 0 };
	int cmpResult = 0;

	status = atcatls_init(g_pCfg);
	TEST_ASSERT_EQUAL(ATCA_SUCCESS, status);

	status = atcab_random(randomNum);
	TEST_ASSERT_EQUAL(ATCA_SUCCESS, status);

	// Compare randomNum memory, it should have changed.  If all bytes are equal memcmp will return 0.
	cmpResult = memcmp(randomNum, randomNumNull, RANDOM_RSP_SIZE);
	TEST_ASSERT_NOT_EQUAL(cmpResult, 0);

	status = atcatls_finish();
	TEST_ASSERT_EQUAL(ATCA_SUCCESS, status);
}