#include #include #include #include "se050_tai64n_hw.h" /* Mock SE050 API functions */ int Se05x_API_ReadCounter(void *session, uint32_t obj_id, uint32_t *counter) { (void)obj_id; if (session) { mock_session_t *s = (mock_session_t*)session; *counter = s->counter; } else { *counter = 0; } return 0; } int Se05x_API_IncrementCounter(void *session, uint32_t obj_id) { (void)session; (void)obj_id; return 0; } static void print_hex(const char *label, const uint8_t *buf, size_t len) { printf("%s: ", label); for (size_t i = 0; i < len; i++) printf("%02x", buf[i]); printf("\n"); } int main(void) { uint8_t tai64n[12]; uint32_t counter; uint8_t current[12]; int passed = 0; printf("SE050 Hardware TAI64N Test Suite\n"); printf("==================================\n\n"); printf("Test 1: Read Counter\n"); mock_session_t session = { .counter = 1234567890UL }; if (se050_tai64n_hw_read_counter(&session, &counter) == 0) { printf("Counter: %u (0x%08x)\n", counter, counter); printf("[PASS]\n\n"); passed++; } else { printf("[FAIL]\n\n"); } printf("Test 2: TAI64N Now\n"); if (se050_tai64n_hw_now(&session, tai64n) == 0) { print_hex("TAI64N", tai64n, 12); printf("[PASS]\n\n"); passed++; } else { printf("[FAIL]\n\n"); } printf("Test 3: Increment Counter\n"); uint32_t before = session.counter; if (se050_tai64n_hw_increment(&session) == 0) { printf("Before: %u, After: %u\n", before, session.counter); printf("[PASS]\n\n"); passed++; } else { printf("[FAIL]\n\n"); } printf("Test 4: Window Check\n"); se050_tai64n_hw_now(&session, tai64n); se050_tai64n_hw_now(&session, current); int result = se050_tai64n_hw_check_window(tai64n, current, 60); printf("Window check (60s): %s\n", result == 1 ? "PASS (within window)" : "FAIL"); if (result == 1) { printf("[PASS]\n\n"); passed++; } else { printf("[FAIL]\n\n"); } printf("Test 5: Replay Detection\n"); uint8_t old_timestamp[12]; session.counter = 1000000000UL; /* Reset to old value (1 second) */ se050_tai64n_hw_now(&session, old_timestamp); session.counter = 1060000000UL; /* 60 seconds later */ se050_tai64n_hw_now(&session, current); result = se050_tai64n_hw_check_window(old_timestamp, current, 30); printf("Old timestamp (60s old), window=30s: %s\n", result == 0 ? "REJECTED (expired)" : "ACCEPTED"); if (result == 0) { printf("[PASS] Replay correctly detected\n\n"); passed++; } else { printf("[FAIL]\n\n"); } printf("==================================\n"); printf("Passed: %d/5\n", passed); printf("==================================\n"); return (passed == 5) ? 0 : 1; }