mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-04 09:01:40 +01:00 
			
		
		
		
	
		
			
	
	
		
			67 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			67 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#include <stdio.h>
							 | 
						||
| 
								 | 
							
								#include <string.h>
							 | 
						||
| 
								 | 
							
								#include "unity.h"
							 | 
						||
| 
								 | 
							
								#include "esp_system.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Note: these are just sanity tests, not the same as
							 | 
						||
| 
								 | 
							
								   entropy tests
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								TEST_CASE("call esp_random()", "[random]")
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    const size_t NUM_RANDOM = 128; /* in most cases this is massive overkill */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    uint32_t zeroes = UINT32_MAX;
							 | 
						||
| 
								 | 
							
								    uint32_t ones = 0;
							 | 
						||
| 
								 | 
							
								    for (int i = 0; i < NUM_RANDOM - 1; i++) {
							 | 
						||
| 
								 | 
							
								        uint32_t r = esp_random();
							 | 
						||
| 
								 | 
							
								        ones |= r;
							 | 
						||
| 
								 | 
							
								        zeroes &= ~r;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* assuming a 'white' random distribution, we can expect
							 | 
						||
| 
								 | 
							
								       usually at least one time each bit will be zero and at
							 | 
						||
| 
								 | 
							
								       least one time each will be one. Statistically this
							 | 
						||
| 
								 | 
							
								       can still fail, just *very* unlikely to. */
							 | 
						||
| 
								 | 
							
								    TEST_ASSERT_EQUAL_HEX32(0, zeroes);
							 | 
						||
| 
								 | 
							
								    TEST_ASSERT_EQUAL_HEX32(UINT32_MAX, ones);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								TEST_CASE("call esp_fill_random()", "[random]")
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    const size_t NUM_BUF = 200;
							 | 
						||
| 
								 | 
							
								    const size_t BUF_SZ = 16;
							 | 
						||
| 
								 | 
							
								    uint8_t buf[NUM_BUF][BUF_SZ];
							 | 
						||
| 
								 | 
							
								    uint8_t zero_buf[BUF_SZ];
							 | 
						||
| 
								 | 
							
								    uint8_t one_buf[BUF_SZ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    bzero(buf, sizeof(buf));
							 | 
						||
| 
								 | 
							
								    bzero(one_buf, sizeof(zero_buf));
							 | 
						||
| 
								 | 
							
								    memset(zero_buf, 0xFF, sizeof(one_buf));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    for (int i = 0; i < NUM_BUF; i++) {
							 | 
						||
| 
								 | 
							
								        esp_fill_random(buf[i], BUF_SZ);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /* No two 128-bit buffers should be the same
							 | 
						||
| 
								 | 
							
								       (again, statistically this could happen but it's very unlikely) */
							 | 
						||
| 
								 | 
							
								    for (int i = 0; i < NUM_BUF; i++) {
							 | 
						||
| 
								 | 
							
								        for (int j = 0; j < NUM_BUF; j++) {
							 | 
						||
| 
								 | 
							
								            if (i != j) {
							 | 
						||
| 
								 | 
							
								                TEST_ASSERT_NOT_EQUAL(0, memcmp(buf[i], buf[j], BUF_SZ));
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* Do the same all bits are zero and one at least once test across the buffers */
							 | 
						||
| 
								 | 
							
								    for (int i = 0; i < NUM_BUF; i++) {
							 | 
						||
| 
								 | 
							
								        for (int x = 0; x < BUF_SZ; x++) {
							 | 
						||
| 
								 | 
							
								            zero_buf[x] &= ~buf[i][x];
							 | 
						||
| 
								 | 
							
								            one_buf[x] |= buf[i][x];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    for (int x = 0; x < BUF_SZ; x++) {
							 | 
						||
| 
								 | 
							
								        TEST_ASSERT_EQUAL_HEX8(0, zero_buf[x]);
							 | 
						||
| 
								 | 
							
								        TEST_ASSERT_EQUAL_HEX8(0xFF, one_buf[x]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |