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