20#define PROTECTED_ID 0x123
28 0x70, 0x81, 0x92, 0xA3, 0xB4, 0xC5,
29 0xD6, 0xE7, 0xF8, 0x09};
55 for (
int i = 0; i < EEPROM.length(); i++) {
56 EEPROM.write(i, 0xFF);
60 if (
CAN.begin(MCP_ANY, CAN_500KBPS, MCP_16MHZ) != CAN_OK) {
61 Serial.println(
"[ERROR] CAN Init Failed!");
65 CAN.setMode(MCP_NORMAL);
70 Serial.println(
"[INFO] Receiver Initialized");
89 if (
CAN.checkReceive() != CAN_MSGAVAIL) {
98 CAN.readMsgBuf(&rxId, &len, buf);
100 Serial.print(
"[DBG] CAN received ID=0x");
101 Serial.print(rxId, HEX);
102 Serial.print(
" len=");
107 Serial.println(
"[DBG] Ignored (unprotected ID)");
111 Serial.println(
"[ERROR] Frame too short");
119 memcpy(payload, buf, payloadLen);
123 Serial.print(
"[DBG] payload = ");
124 for (uint8_t i = 0; i < payloadLen; i++) {
125 if (payload[i] < 0x10)
127 Serial.print(payload[i], HEX);
133 Serial.print(
"[DBG] recv tag = ");
137 Serial.print(tag[i], HEX);
143 Serial.println(
"[DBG] minimac_verify()");
145 Serial.println(
"[INFO] Auth OK");
147 Serial.println(
"[ERROR] Auth FAIL");
bool minimac_verify(const uint8_t *data, uint8_t payload_len, const uint8_t *tag)
수신된 메시지의 Mini-MAC 태그 검증 및 상태 동기화
void minimac_init(uint16_t can_id, const uint8_t *key)
Mini-MAC 초기화 및 EEPROM 동기화
#define MINIMAC_TAG_LEN
Mini-MAC 다이제스트에서 사용할 태그 길이 (4바이트, 32비트)
#define MINIMAC_MAX_DATA
CAN 데이터 필드 최대 길이 (8바이트)
#define MINIMAC_KEY_LEN
Mini-MAC HMAC 키 길이 (16바이트, 128비트)
void setup()
수신기 시스템 초기화 함수로, 필요한 설정을 수행합니다.
MCP_CAN CAN(10)
CAN 버스 제어 객체.
#define PROTECTED_ID
Mini-MAC 인증이 적용되는 보호 대상 CAN 메시지 식별자.
const uint8_t SECRET_KEY[16]
Mini-MAC 프로토콜에 사용되는 16바이트 비밀 키.
void loop()
수신 루프 함수로, 도착한 CAN 메시지를 확인하고 Mini-MAC 태그를 검증합니다.