xref: /openbmc/phosphor-net-ipmid/rmcp.hpp (revision 9b307be6)
1 #pragma once
2 
3 #include <array>
4 #include <cstdint>
5 
6 namespace rmcp
7 {
8 
9 /*
10  * RSP needs more keying material than can be provided by session
11  * integrity key alone. As a result all keying material for the RSP
12  * confidentiality algorithms will be generated by processing a
13  * pre-defined set of constants using HMAC per [RFC2104], keyed by SIK.
14  * These constants are constructed using a hexadecimal octet value
15  * repeated up to the HMAC block size in length starting with the
16  * constant 01h. This mechanism can be used to derive up to 255
17  * HMAC-block-length pieces of keying material from a single SIK.For the
18  * mandatory confidentiality algorithm AES-CBC-128, processing the
19  * following constant will generate the required amount of keying
20  * material.
21  */
22 constexpr size_t CONST_N_SIZE = 20;
23 using Const_n = std::array<uint8_t, CONST_N_SIZE>;
24 
25 static constexpr Const_n const_1 = {
26     0x01, 0x01, 0x01, 0x01, 0x01,
27     0x01, 0x01, 0x01, 0x01, 0x01,
28     0x01, 0x01, 0x01, 0x01, 0x01,
29     0x01, 0x01, 0x01, 0x01, 0x01
30 };
31 
32 static constexpr Const_n const_2 = {
33     0x02, 0x02, 0x02, 0x02, 0x02,
34     0x02, 0x02, 0x02, 0x02, 0x02,
35     0x02, 0x02, 0x02, 0x02, 0x02,
36     0x02, 0x02, 0x02, 0x02, 0x02
37 };
38 
39 } // namespace rmcp
40