Safe API Framework
Layered API framework for safety-related applications (ERTMS RBC reference targeting CENELEC EN 50128 SIL 4)
Toggle main menu visibility
Loading...
Searching...
No Matches
sapi_checksum.h
Go to the documentation of this file.
1
55
56
#ifndef SAPI_CHECKSUM_H
57
#define SAPI_CHECKSUM_H
58
59
#include <stdint.h>
60
#include <stddef.h>
61
#include "
safeapi/utils/status/sapi_status.h
"
62
#include "
safeapi/utils/types/sapi_types.h
"
63
64
#ifdef __cplusplus
65
extern
"C"
{
66
#endif
67
68
/* ============================================================================
69
* Types & Constants
70
* ========================================================================== */
71
77
typedef
enum
{
82
SAPI_CRC64_ERTMS
,
83
88
SAPI_CRC64_ISO
,
89
94
SAPI_CRC64_XZ
95
}
sapi_crc64_polynomial_t
;
96
100
typedef
uint64_t
sapi_crc64_t
;
101
105
typedef
struct
{
106
sapi_crc64_t
computed
;
107
sapi_crc64_t
expected
;
108
uint8_t
match
;
109
}
sapi_checksum_result_t
;
110
111
/* ============================================================================
112
* API: CRC-64 Computation
113
* ========================================================================== */
114
137
sapi_status_t
sapi_checksum_crc64_init
(
sapi_crc64_polynomial_t
polynomial);
138
167
sapi_crc64_t
sapi_checksum_crc64
(
const
uint8_t *data,
size_t
size);
168
203
sapi_status_t
sapi_checksum_crc64_verify
(
const
uint8_t *data,
204
size_t
size,
205
sapi_crc64_t
expected_crc,
206
sapi_checksum_result_t
*result_out);
207
216
sapi_crc64_polynomial_t
sapi_checksum_crc64_get_polynomial
(
void
);
217
218
/* ============================================================================
219
* API: Vital Channel Data Wrapper
220
* ========================================================================== */
221
233
typedef
struct
{
234
uint32_t
sequence_number
;
235
uint32_t
sender_id
;
236
uint32_t
timestamp_ms
;
237
uint8_t
payload_size
;
238
uint8_t
padding
;
239
uint16_t
reserved
;
240
241
uint8_t
payload
[248];
242
sapi_crc64_t
crc64
;
243
}
sapi_vital_message_t
;
244
278
sapi_status_t
sapi_checksum_vital_message_create
(
279
sapi_vital_message_t
*msg_out,
280
uint32_t sender_id,
281
uint32_t sequence,
282
const
uint8_t *payload,
283
size_t
payload_size
284
);
285
331
sapi_status_t
sapi_checksum_vital_message_verify
(
332
const
sapi_vital_message_t
*msg,
333
uint32_t expected_sequence,
334
uint8_t *payload_out,
335
size_t
payload_max_size,
336
uint8_t *payload_size_out
337
);
338
339
/* ============================================================================
340
* API: Statistics & Diagnostics
341
* ========================================================================== */
342
346
typedef
struct
{
347
uint32_t
total_checksums
;
348
uint32_t
verification_passes
;
349
uint32_t
verification_failures
;
350
uint32_t
sequence_errors
;
351
uint32_t
payload_oversize
;
352
}
sapi_checksum_stats_t
;
353
364
sapi_status_t
sapi_checksum_get_stats
(
sapi_checksum_stats_t
*stats_out);
365
373
sapi_status_t
sapi_checksum_reset_stats
(
void
);
374
375
#ifdef __cplusplus
376
}
377
#endif
378
382
383
#endif
/* SAPI_CHECKSUM_H */
sapi_crc64_t
uint64_t sapi_crc64_t
CRC-64 checksum value (64-bit).
Definition
sapi_checksum.h:100
sapi_checksum_crc64_get_polynomial
sapi_crc64_polynomial_t sapi_checksum_crc64_get_polynomial(void)
Get current CRC-64 polynomial in use.
Definition
sapi_checksum.c:493
sapi_checksum_vital_message_verify
sapi_status_t sapi_checksum_vital_message_verify(const sapi_vital_message_t *msg, uint32_t expected_sequence, uint8_t *payload_out, size_t payload_max_size, uint8_t *payload_size_out)
Verify vital channel message and extract payload.
Definition
sapi_checksum.c:556
sapi_checksum_crc64
sapi_crc64_t sapi_checksum_crc64(const uint8_t *data, size_t size)
Compute CRC-64 for data buffer.
Definition
sapi_checksum.c:407
sapi_checksum_crc64_verify
sapi_status_t sapi_checksum_crc64_verify(const uint8_t *data, size_t size, sapi_crc64_t expected_crc, sapi_checksum_result_t *result_out)
Verify CRC-64 of data against stored value.
Definition
sapi_checksum.c:460
sapi_crc64_polynomial_t
sapi_crc64_polynomial_t
CRC-64 polynomial selection.
Definition
sapi_checksum.h:77
sapi_checksum_get_stats
sapi_status_t sapi_checksum_get_stats(sapi_checksum_stats_t *stats_out)
Get checksum statistics.
Definition
sapi_checksum.c:616
sapi_checksum_crc64_init
sapi_status_t sapi_checksum_crc64_init(sapi_crc64_polynomial_t polynomial)
Initialize CRC-64 lookup tables for chosen polynomial.
Definition
sapi_checksum.c:375
sapi_checksum_vital_message_create
sapi_status_t sapi_checksum_vital_message_create(sapi_vital_message_t *msg_out, uint32_t sender_id, uint32_t sequence, const uint8_t *payload, size_t payload_size)
Create vital channel message with CRC.
Definition
sapi_checksum.c:502
sapi_checksum_reset_stats
sapi_status_t sapi_checksum_reset_stats(void)
Reset checksum statistics.
Definition
sapi_checksum.c:626
SAPI_CRC64_XZ
@ SAPI_CRC64_XZ
Definition
sapi_checksum.h:94
SAPI_CRC64_ERTMS
@ SAPI_CRC64_ERTMS
Definition
sapi_checksum.h:82
SAPI_CRC64_ISO
@ SAPI_CRC64_ISO
Definition
sapi_checksum.h:88
sapi_status_t
sapi_status_t
Common result/status codes.
Definition
sapi_status.h:27
sapi_status.h
Common status/error codes returned by every Safe API Framework function. Shared across all OS Abstrac...
sapi_types.h
Common fixed-width types and the caller-owned-storage handle pattern used by every OAL service (see A...
sapi_checksum_result_t
Checksum result for validation.
Definition
sapi_checksum.h:105
sapi_checksum_result_t::expected
sapi_crc64_t expected
Definition
sapi_checksum.h:107
sapi_checksum_result_t::computed
sapi_crc64_t computed
Definition
sapi_checksum.h:106
sapi_checksum_result_t::match
uint8_t match
Definition
sapi_checksum.h:108
sapi_checksum_stats_t
Checksum statistics for monitoring.
Definition
sapi_checksum.h:346
sapi_checksum_stats_t::payload_oversize
uint32_t payload_oversize
Definition
sapi_checksum.h:351
sapi_checksum_stats_t::verification_failures
uint32_t verification_failures
Definition
sapi_checksum.h:349
sapi_checksum_stats_t::sequence_errors
uint32_t sequence_errors
Definition
sapi_checksum.h:350
sapi_checksum_stats_t::verification_passes
uint32_t verification_passes
Definition
sapi_checksum.h:348
sapi_checksum_stats_t::total_checksums
uint32_t total_checksums
Definition
sapi_checksum.h:347
sapi_vital_message_t
Vital channel message with integrated CRC-64.
Definition
sapi_checksum.h:233
sapi_vital_message_t::crc64
sapi_crc64_t crc64
Definition
sapi_checksum.h:242
sapi_vital_message_t::reserved
uint16_t reserved
Definition
sapi_checksum.h:239
sapi_vital_message_t::sender_id
uint32_t sender_id
Definition
sapi_checksum.h:235
sapi_vital_message_t::timestamp_ms
uint32_t timestamp_ms
Definition
sapi_checksum.h:236
sapi_vital_message_t::payload_size
uint8_t payload_size
Definition
sapi_checksum.h:237
sapi_vital_message_t::sequence_number
uint32_t sequence_number
Definition
sapi_checksum.h:234
sapi_vital_message_t::payload
uint8_t payload[248]
Definition
sapi_checksum.h:241
sapi_vital_message_t::padding
uint8_t padding
Definition
sapi_checksum.h:238
include
safeapi
redundancy
checksum
sapi_checksum.h
Generated by
1.18.0