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 = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 26 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 27 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}; 28 29 static constexpr Const_n const_2 = {0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 30 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 31 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}; 32 33 } // namespace rmcp 34