TAI64N ハードウェア実装追加
- SE050 モノトニックカウンタ使用 - リプレイ防止用タイムスタンプ - テスト実装済み
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user