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.
- **/
- void
- ComputeAuthCode ( 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");
- }
- }
- }
|