⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ipmi_auth.cpp

📁 HIP 硬件设备管理标准接口
💻 CPP
字号:
/* * Copyright (c) 2003,2004 by FORCE Computers * * Note that this file is based on parts of OpenIPMI * written by Corey Minyard <minyard@mvista.com> * of MontaVista Software. Corey's code was helpful * and many thanks go to him. He gave the permission * to use this code in OpenHPI under BSD license. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  This * file and program are licensed under a BSD style license.  See * the Copying file included with the OpenHPI distribution for * full licensing terms. * * Authors: *     Thomas Kanngieser <thomas.kanngieser@fci.com> */#include "ipmi_auth.h"#include <string.h>#include <errno.h>#include <assert.h>cIpmiAuth *IpmiAuthFactory( tIpmiAuthType type ){  switch( type )     {       case eIpmiAuthTypeNone:            return new cIpmiAuthNone;       case eIpmiAuthTypeMd2:#ifdef HAVE_OPENSSL_MD2_H            return new cIpmiAuthMd2;#else            break;#endif       case eIpmiAuthTypeMd5:#ifdef HAVE_OPENSSL_MD5_H            return new cIpmiAuthMd5;#else            break;#endif       case eIpmiAuthTypeStraight:            return new cIpmiAuthStraight;       case eIpmiAuthTypeOem:            break;     }  assert( 0 );  return 0;}intcIpmiAuthNone::Init( const unsigned char * /*password*/ ){  return 0;}intcIpmiAuthNone::Gen( cIpmiAuthSg /*d*/[], void *output ){  memset( output, 0, 16 );  return 0;}intcIpmiAuthNone::Check( cIpmiAuthSg /*d*/[], void * /*code*/ ){  return 0;}#ifdef HAVE_OPENSSL_MD2_H#include <openssl/md2.h>intcIpmiAuthMd2::Init( const unsigned char *password ){  memcpy( data, password, 16 );  return 0;}intcIpmiAuthMd2::Gen( cIpmiAuthSg d[],                   void       *output ){  MD2_CTX ctx;  MD2_Init( &ctx );  MD2_Update( &ctx, data, 16 );  for( int i = 0; d[i].data != 0; i++ )       MD2_Update( &ctx, (unsigned char *)d[i].data, d[i].len );  MD2_Update( &ctx, data, 16 );  MD2_Final( (unsigned char *)output, &ctx );  return 0;}intcIpmiAuthMd2::Check( cIpmiAuthSg d[],                     void       *code ){  MD2_CTX ctx;  unsigned char md[16];  MD2_Init( &ctx );  MD2_Update( &ctx, data, 16 );  for( int i = 0; d[i].data != 0; i++ )       MD2_Update( &ctx, (unsigned char *)d[i].data, d[i].len );  MD2_Update( &ctx, data, 16 );  MD2_Final( md, &ctx );  if ( memcmp( code, md, 16 ) != 0 )       return EINVAL;  return 0;}#endif#ifdef HAVE_OPENSSL_MD5_H#include <openssl/md5.h>intcIpmiAuthMd5::Init( const unsigned char *password ){  memcpy( data, password, 16 );  return 0;}intcIpmiAuthMd5::Gen( cIpmiAuthSg d[],                   void        *output ){  MD5_CTX ctx;  MD5_Init( &ctx );  MD5_Update( &ctx, data, 16 );  for( int i = 0; d[i].data != 0; i++ )       MD5_Update( &ctx, d[i].data, d[i].len );  MD5_Update( &ctx, data, 16 );  MD5_Final( (unsigned char *)output, &ctx );  return 0;}intcIpmiAuthMd5::Check( cIpmiAuthSg d[],                     void       *code ){  MD5_CTX ctx;  unsigned char md[16];  MD5_Init( &ctx );  MD5_Update( &ctx, data, 16 );  for( int i = 0; d[i].data != 0; i++ )       MD5_Update( &ctx, d[i].data, d[i].len );  MD5_Update( &ctx, data, 16 );  MD5_Final( md, &ctx );  if ( memcmp( code, md, 16 ) != 0 )       return EINVAL;  return 0;}#endifintcIpmiAuthStraight::Init( const unsigned char *password ){  memcpy( data, password, 16 );  return 0;}intcIpmiAuthStraight::Gen( cIpmiAuthSg /*d*/[], void *output ){  memcpy( output, data, 16 );  return 0;}intcIpmiAuthStraight::Check( cIpmiAuthSg /*d*/[], void *code ){  if ( strncmp( (char *)data, (char *)code, 16 ) != 0 )       return EINVAL;  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -