• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * This file is part of the openHiTLS project.
3  *
4  * openHiTLS is licensed under the Mulan PSL v2.
5  * You can use this software according to the terms and conditions of the Mulan PSL v2.
6  * You may obtain a copy of Mulan PSL v2 at:
7  *
8  *     http://license.coscl.org.cn/MulanPSL2
9  *
10  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
11  * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
12  * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
13  * See the Mulan PSL v2 for more details.
14  */
15 
16 #ifndef REC_ANTI_REPLAY_H
17 #define REC_ANTI_REPLAY_H
18 
19 #include <stdint.h>
20 #include <stdbool.h>
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 /**
27  *  Anti-replay check function:
28  *  Use uint64_t variable to store flag bit,When receive a message, set the flag of corresponding sequence number to 1
29  *  The least significant bit of the variable stores the maximum sequence number of the sliding window top,
30  *  when the top updates, shift the sliding window to the left
31  *  If a duplicate message or a message whose sequence number is smaller than the minimum sliding window value
32  *  is received, discard it
33  *
34  *  window: 64 bits Range: [top-63, top)
35  *  1. Initial state:
36  *        top - 63         top
37  *          | - - - - - - |
38  *  2. hen the top + 2 message is received:
39  *          top - 61    top + 2
40  *          | - - - - - - |
41  */
42 typedef struct {
43     uint64_t top;       /* Stores the current maximum sequence number */
44     uint64_t window;    /* Sliding window for storing flag bits */
45 } RecSlidWindow;
46 
47 /**
48  * @brief   Reset of the anti-replay module
49  *          The invoker must ensure that the input parameter is not empty
50  *
51  * @param   w [IN] Sliding window
52  */
53 void RecAntiReplayReset(RecSlidWindow *w);
54 
55 /**
56  * @brief   Anti-Replay Check
57  *          The invoker must ensure that the input parameter is not empty
58  *
59  * @param   w [IN] Sliding window
60  * @param   seq [IN] Sequence number to be checked
61  *
62  * @retval  true    The sequence number is duplicate
63  * @retval  false   The sequence number is not duplicate
64  */
65 bool RecAntiReplayCheck(const RecSlidWindow *w, uint64_t seq);
66 
67 /**
68  * @brief   Update the window
69  *          This function can be invoked only after the anti-replay check is passed
70  *          Ensure that the input parameter is not empty by the invoker
71  *
72  * @param   w [IN] Sliding window. The input parameter correctness is ensured externally
73  * @param   seq [IN] Sequence number of the window to be updated
74  */
75 void RecAntiReplayUpdate(RecSlidWindow *w, uint64_t seq);
76 
77 #ifdef __cplusplus
78 }
79 #endif
80 
81 #endif /* REC_ANTI_REPLAY_H */
82