blob: b18809adc5114184e63971c4adc1423905ab5beb [file] [log] [blame]
Vernon Mauery9b307be2017-11-22 09:28:16 -08001#pragma once
2
3#include <array>
Andrew Geissler9d9b7632020-05-17 09:18:05 -05004#include <cstddef>
Vernon Mauery9b307be2017-11-22 09:28:16 -08005#include <cstdint>
6
7namespace 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 */
23constexpr size_t CONST_N_SIZE = 20;
24using Const_n = std::array<uint8_t, CONST_N_SIZE>;
25
Vernon Mauery9e801a22018-10-12 13:20:49 -070026static 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};
Vernon Mauery9b307be2017-11-22 09:28:16 -080029
Vernon Mauery9e801a22018-10-12 13:20:49 -070030static 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};
Vernon Mauery9b307be2017-11-22 09:28:16 -080033
34} // namespace rmcp