int atcacert_gen_challenge_hw( uint8_t challenge[32] ) { if (challenge == NULL) return ATCACERT_E_BAD_PARAMS; return atcab_random(challenge); }
/** \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; }
/** \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); }