Safe Communication Framework
0.1.0 build feea4f9
ERTMS/ETCS safe communication (Subset-037 EuroRadio, Subset-098 RBC/RBC), CENELEC EN 50128 SIL 4 oriented
Toggle main menu visibility
Loading...
Searching...
No Matches
mac.h
Go to the documentation of this file.
1
21
#ifndef SAFECOMM_MAC_H
22
#define SAFECOMM_MAC_H
23
24
#include <stddef.h>
25
#include <stdint.h>
26
27
#include "
safecomm/status.h
"
28
29
#ifdef __cplusplus
30
extern
"C"
{
31
#endif
32
34
#define SAFECOMM_MAC_KEY_LEN 24U
36
#define SAFECOMM_MAC_LEN 8U
38
#define SAFECOMM_MAC_RAND_LEN 8U
39
41
typedef
enum
42
{
43
SAFECOMM_MAC_ALG_3DES_SS037
= 0
44
}
safecomm_mac_alg_t
;
45
47
typedef
struct
48
{
49
uint8_t
ksmac
[
SAFECOMM_MAC_KEY_LEN
];
50
safecomm_mac_alg_t
alg
;
51
}
safecomm_mac_ctx_t
;
52
68
safecomm_status_t
safecomm_mac_derive_ksmac
(
const
uint8_t kmac[
SAFECOMM_MAC_KEY_LEN
],
69
const
uint8_t ra[
SAFECOMM_MAC_RAND_LEN
],
70
const
uint8_t rb[
SAFECOMM_MAC_RAND_LEN
],
71
safecomm_mac_ctx_t
*out_ctx);
72
83
safecomm_status_t
safecomm_mac_compute
(
const
safecomm_mac_ctx_t
*ctx,
84
const
uint8_t *msg,
size_t
msg_len,
85
uint8_t out_mac[
SAFECOMM_MAC_LEN
]);
86
99
safecomm_status_t
safecomm_mac_verify
(
const
safecomm_mac_ctx_t
*ctx,
100
const
uint8_t *msg,
size_t
msg_len,
101
const
uint8_t rx_mac[
SAFECOMM_MAC_LEN
]);
102
103
#ifdef __cplusplus
104
}
105
#endif
106
107
#endif
/* SAFECOMM_MAC_H */
SAFECOMM_MAC_LEN
#define SAFECOMM_MAC_LEN
Definition
mac.h:36
SAFECOMM_MAC_RAND_LEN
#define SAFECOMM_MAC_RAND_LEN
Definition
mac.h:38
SAFECOMM_MAC_KEY_LEN
#define SAFECOMM_MAC_KEY_LEN
Definition
mac.h:34
safecomm_mac_derive_ksmac
safecomm_status_t safecomm_mac_derive_ksmac(const uint8_t kmac[SAFECOMM_MAC_KEY_LEN], const uint8_t ra[SAFECOMM_MAC_RAND_LEN], const uint8_t rb[SAFECOMM_MAC_RAND_LEN], safecomm_mac_ctx_t *out_ctx)
Derive the session key KSMAC from KMAC and the AU random values.
Definition
mac.c:267
safecomm_mac_alg_t
safecomm_mac_alg_t
MAC algorithm selector (only 3DES today; reserved for growth).
Definition
mac.h:42
SAFECOMM_MAC_ALG_3DES_SS037
@ SAFECOMM_MAC_ALG_3DES_SS037
Definition
mac.h:43
safecomm_mac_compute
safecomm_status_t safecomm_mac_compute(const safecomm_mac_ctx_t *ctx, const uint8_t *msg, size_t msg_len, uint8_t out_mac[SAFECOMM_MAC_LEN])
Compute the 8-byte EuroRadio MAC over msg.
Definition
mac.c:300
safecomm_mac_verify
safecomm_status_t safecomm_mac_verify(const safecomm_mac_ctx_t *ctx, const uint8_t *msg, size_t msg_len, const uint8_t rx_mac[SAFECOMM_MAC_LEN])
Constant-time verify of a received MAC against a freshly computed one.
Definition
mac.c:355
status.h
Common status codes for the Safe Communication Framework.
safecomm_status_t
safecomm_status_t
Result of a Safe Communication Framework operation.
Definition
status.h:17
safecomm_mac_ctx_t
Immutable session-key material for one SaF connection.
Definition
mac.h:48
safecomm_mac_ctx_t::ksmac
uint8_t ksmac[SAFECOMM_MAC_KEY_LEN]
Definition
mac.h:49
safecomm_mac_ctx_t::alg
safecomm_mac_alg_t alg
Definition
mac.h:50
include
safecomm
mac
mac.h
Generated by
1.18.0