| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 | /****************************************************************** ****************************************************************** ***                                                             ** ***    (C)Copyright 2008-2009, American Megatrends Inc.         ** ***                                                             ** ***    All Rights Reserved.                                     ** ***                                                             ** ***    5555 , Oakbrook Pkwy, Norcross,                          ** ***                                                             ** ***    Georgia - 30093, USA. Phone-(770)-246-8600.              ** ***                                                             ** ****************************************************************** ****************************************************************** ****************************************************************** * * AuthCode.c * Authentication Code Caluculation * *  Author: Winston <winstonv@amiindia.co.in> ******************************************************************/#include "RMCP.h"#include "MD.h"#include <string.h>#include <stdint.h>#include "com_IPMIDefs.h"#include "com_IPMI_RMCP.h"#include "com_IPMI_AppDevice.h"#include "Session.h"/** * @fn ComputeAuthCode * @brief Compute authentication code. * @param pPassword     - User password. * @param pSessionHdr   - Session header RMCP message. * @param pIPMIMsg      - IPMI message payload. * @param pAuthCode     - Authentication Code being generated. * @param ChannelType   - Channel Type.**/voidComputeAuthCode ( uint8_t* pPassword,  SessionHdr_T* pSessionHdr,                  IPMIMsgHdr_T* pIPMIMsg,  uint8_t* pAuthCode,                 uint8_t ChannelType){    if (AUTH_TYPE_PASSWORD == pSessionHdr->AuthType)    {        memcpy (pAuthCode, pPassword, IPMI15_MAX_PASSWORD_LEN);    }    else    {        uint8_t   AuthBuf [MAX_AUTH_PARAM_SIZE];        uint16_t  AuthBufLen = 0;        uint8_t   IPMIMsgLen = *(( uint8_t*) pIPMIMsg - 1);        /* Password */        memcpy (AuthBuf, pPassword, IPMI15_MAX_PASSWORD_LEN);        AuthBufLen += IPMI15_MAX_PASSWORD_LEN;        /* Session ID */        memcpy ((uint8_t*)(AuthBuf + AuthBufLen), (uint8_t*)(&pSessionHdr->SessionID), sizeof (uint32_t));        AuthBufLen += sizeof (uint32_t);        /* IPMI Response Message */        memcpy (AuthBuf + AuthBufLen, pIPMIMsg, IPMIMsgLen);        AuthBufLen += IPMIMsgLen;        if (ChannelType == MULTI_SESSION_CHANNEL)        {            /* Session Sequence Number */            memcpy ((uint8_t*)(AuthBuf + AuthBufLen), (uint8_t*)(&pSessionHdr->SessionSeqNum), sizeof (uint32_t));            AuthBufLen += sizeof (uint32_t);        }        /* Password */        memcpy (AuthBuf + AuthBufLen, pPassword, IPMI15_MAX_PASSWORD_LEN);        AuthBufLen += IPMI15_MAX_PASSWORD_LEN;        switch (pSessionHdr->AuthType)        {        case AUTH_TYPE_MD2 :            AuthCodeCalMD2 (AuthBuf, pAuthCode, AuthBufLen);            break;        case AUTH_TYPE_MD5 :            AuthCodeCalMD5 (AuthBuf, pAuthCode, AuthBufLen);            break;        default  :            printf ("RMCP.c : Invalid Authentication Type \r\n");        }    }}
 |