Files
km 344f86b07f TAI64N ハードウェア実装追加
- SE050 モノトニックカウンタ使用
- リプレイ防止用タイムスタンプ
- テスト実装済み
2026-03-27 05:26:46 +09:00

104 lines
2.9 KiB
C

#include <stdio.h>
#include <stdint.h>
#include <string.h>
#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;
}