1 #pragma once 2 3 #include "comm_module.hpp" 4 #include "message_handler.hpp" 5 6 #include <vector> 7 8 namespace command 9 { 10 11 constexpr size_t userNameMaxLen = 16; 12 13 constexpr uint8_t userNameOnlyLookupMask = 0x10; 14 constexpr uint8_t userNameOnlyLookup = 0x10; 15 constexpr uint8_t userNamePrivLookup = 0x0; 16 17 /** 18 * @struct RAKP1request 19 * 20 * IPMI Payload for RAKP Message 1 21 */ 22 struct RAKP1request 23 { 24 uint8_t messageTag; 25 uint8_t reserved1; 26 uint16_t reserved2; 27 uint32_t managedSystemSessionID; 28 uint8_t remote_console_random_number[16]; 29 uint8_t req_max_privilege_level; 30 uint16_t reserved3; 31 uint8_t user_name_len; 32 char user_name[userNameMaxLen]; 33 } __attribute__((packed)); 34 35 /** 36 * @struct RAKP2response 37 * 38 * IPMI Payload for RAKP Message 2 39 */ 40 struct RAKP2response 41 { 42 uint8_t messageTag; 43 uint8_t rmcpStatusCode; 44 uint16_t reserved; 45 uint32_t remoteConsoleSessionID; 46 uint8_t managed_system_random_number[16]; 47 uint8_t managed_system_guid[16]; 48 } __attribute__((packed)); 49 50 /** 51 * @brief RAKP Message 1, RAKP Message 2 52 * 53 * These messages are used to exchange random number and identification 54 * information between the BMC and the remote console that are, in effect, 55 * mutual challenges for a challenge/response. (Unlike IPMI v1.5, the v2.0/RMCP+ 56 * challenge/response is symmetric. I.e. the remote console and BMC both issues 57 * challenges,and both need to provide valid responses for the session to be 58 * activated.) 59 * 60 * The remote console request (RAKP Message 1) passes a random number and 61 * username/privilege information that the BMC will later use to ‘sign’ a 62 * response message based on key information associated with the user and the 63 * Authentication Algorithm negotiated in the Open Session Request/Response 64 * exchange. The BMC responds with RAKP Message 2 and passes a random number and 65 * GUID (globally unique ID) for the managed system that the remote console 66 * uses according the Authentication Algorithm to sign a response back to the 67 * BMC. 68 * 69 * @param[in] inPayload - Request Data for the command 70 * @param[in] handler - Reference to the Message Handler 71 * 72 * @return Response data for the command 73 */ 74 std::vector<uint8_t> RAKP12(const std::vector<uint8_t>& inPayload, 75 const message::Handler& handler); 76 77 } // namespace command 78