mirror of
https://github.com/ipmitool/ipmitool.git
synced 2025-05-10 18:47:22 +00:00
md2 and md5 were split into here
This commit is contained in:
parent
72417c67db
commit
639df0246c
167
ipmitool/src/plugins/lan/auth.c
Normal file
167
ipmitool/src/plugins/lan/auth.c
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* Redistribution of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* Redistribution in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of Sun Microsystems, Inc. or the names of
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* This software is provided "AS IS," without a warranty of any kind.
|
||||||
|
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
||||||
|
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
|
||||||
|
* SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
|
||||||
|
* FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
|
||||||
|
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
|
||||||
|
* SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
|
||||||
|
* OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
|
||||||
|
* PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
|
||||||
|
* LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
|
||||||
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
*
|
||||||
|
* You acknowledge that this software is not designed or intended for use
|
||||||
|
* in the design, construction, operation or maintenance of any nuclear
|
||||||
|
* facility.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <ipmitool/helper.h>
|
||||||
|
#include <ipmitool/bswap.h>
|
||||||
|
#include <ipmitool/ipmi.h>
|
||||||
|
#include <ipmitool/ipmi_intf.h>
|
||||||
|
|
||||||
|
#if HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CRYPTO_MD2
|
||||||
|
# include <openssl/md2.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CRYPTO_MD5
|
||||||
|
# include <openssl/md5.h>
|
||||||
|
#else
|
||||||
|
# include "md5.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* multi-session authcode generation for MD5
|
||||||
|
* H(password + session_id + msg + session_seq + password)
|
||||||
|
*
|
||||||
|
* Use OpenSSL implementation of MD5 algorithm if found
|
||||||
|
*/
|
||||||
|
unsigned char * ipmi_auth_md5(struct ipmi_session * s, unsigned char * data, int data_len)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_CRYPTO_MD5
|
||||||
|
MD5_CTX ctx;
|
||||||
|
static unsigned char md[16];
|
||||||
|
uint32_t temp;
|
||||||
|
|
||||||
|
#if WORDS_BIGENDIAN
|
||||||
|
temp = BSWAP_32(s->in_seq);
|
||||||
|
#else
|
||||||
|
temp = s->in_seq;
|
||||||
|
#endif
|
||||||
|
memset(md, 0, 16);
|
||||||
|
memset(&ctx, 0, sizeof(MD5_CTX));
|
||||||
|
|
||||||
|
MD5_Init(&ctx);
|
||||||
|
MD5_Update(&ctx, (const unsigned char *)s->authcode, 16);
|
||||||
|
MD5_Update(&ctx, (const unsigned char *)&s->session_id, 4);
|
||||||
|
MD5_Update(&ctx, (const unsigned char *)data, data_len);
|
||||||
|
MD5_Update(&ctx, (const unsigned char *)&temp, sizeof(uint32_t));
|
||||||
|
MD5_Update(&ctx, (const unsigned char *)s->authcode, 16);
|
||||||
|
MD5_Final(md, &ctx);
|
||||||
|
|
||||||
|
if (verbose > 3)
|
||||||
|
printf(" MD5 AuthCode : %s\n", buf2str(md, 16));
|
||||||
|
|
||||||
|
return md;
|
||||||
|
#else /*HAVE_CRYPTO_MD5*/
|
||||||
|
md5_state_t state;
|
||||||
|
static md5_byte_t digest[16];
|
||||||
|
uint32_t temp;
|
||||||
|
|
||||||
|
memset(digest, 0, 16);
|
||||||
|
memset(&state, 0, sizeof(md5_state_t));
|
||||||
|
|
||||||
|
md5_init(&state);
|
||||||
|
|
||||||
|
md5_append(&state, (const md5_byte_t *)s->authcode, 16);
|
||||||
|
md5_append(&state, (const md5_byte_t *)&s->session_id, 4);
|
||||||
|
md5_append(&state, (const md5_byte_t *)data, data_len);
|
||||||
|
|
||||||
|
#if WORDS_BIGENDIAN
|
||||||
|
temp = BSWAP_32(s->in_seq);
|
||||||
|
#else
|
||||||
|
temp = s->in_seq;
|
||||||
|
#endif
|
||||||
|
md5_append(&state, (const md5_byte_t *)&temp, 4);
|
||||||
|
md5_append(&state, (const md5_byte_t *)s->authcode, 16);
|
||||||
|
|
||||||
|
md5_finish(&state, digest);
|
||||||
|
|
||||||
|
if (verbose > 3)
|
||||||
|
printf(" MD5 AuthCode : %s\n", buf2str(digest, 16));
|
||||||
|
return digest;
|
||||||
|
#endif /*HAVE_CRYPTO_MD5*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* multi-session authcode generation for MD2
|
||||||
|
* H(password + session_id + msg + session_seq + password)
|
||||||
|
*
|
||||||
|
* Use OpenSSL implementation of MD2 algorithm if found.
|
||||||
|
* This function is analogous to ipmi_auth_md5
|
||||||
|
*/
|
||||||
|
unsigned char * ipmi_auth_md2(struct ipmi_session * s, unsigned char * data, int data_len)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_CRYPTO_MD2
|
||||||
|
MD2_CTX ctx;
|
||||||
|
static unsigned char md[16];
|
||||||
|
uint32_t temp;
|
||||||
|
|
||||||
|
#if WORDS_BIGENDIAN
|
||||||
|
temp = BSWAP_32(s->in_seq);
|
||||||
|
#else
|
||||||
|
temp = s->in_seq;
|
||||||
|
#endif
|
||||||
|
memset(md, 0, 16);
|
||||||
|
memset(&ctx, 0, sizeof(MD2_CTX));
|
||||||
|
|
||||||
|
MD2_Init(&ctx);
|
||||||
|
MD2_Update(&ctx, (const unsigned char *)s->authcode, 16);
|
||||||
|
MD2_Update(&ctx, (const unsigned char *)&s->session_id, 4);
|
||||||
|
MD2_Update(&ctx, (const unsigned char *)data, data_len);
|
||||||
|
MD2_Update(&ctx, (const unsigned char *)&temp, sizeof(uint32_t));
|
||||||
|
MD2_Update(&ctx, (const unsigned char *)s->authcode, 16);
|
||||||
|
MD2_Final(md, &ctx);
|
||||||
|
|
||||||
|
if (verbose > 3)
|
||||||
|
printf(" MD2 AuthCode : %s\n", buf2str(md, 16));
|
||||||
|
|
||||||
|
return md;
|
||||||
|
#else /*HAVE_CRYPTO_MD2*/
|
||||||
|
static unsigned char md[16];
|
||||||
|
memset(md, 0, 16);
|
||||||
|
printf("WARNING: No internal support for MD2! "
|
||||||
|
"Please re-compile with OpenSSL.\n");
|
||||||
|
return md;
|
||||||
|
#endif /*HAVE_CRYPTO_MD2*/
|
||||||
|
}
|
43
ipmitool/src/plugins/lan/auth.h
Normal file
43
ipmitool/src/plugins/lan/auth.h
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* Redistribution of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* Redistribution in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of Sun Microsystems, Inc. or the names of
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* This software is provided "AS IS," without a warranty of any kind.
|
||||||
|
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
||||||
|
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
|
||||||
|
* SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
|
||||||
|
* FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
|
||||||
|
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
|
||||||
|
* SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
|
||||||
|
* OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
|
||||||
|
* PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
|
||||||
|
* LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
|
||||||
|
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
*
|
||||||
|
* You acknowledge that this software is not designed or intended for use
|
||||||
|
* in the design, construction, operation or maintenance of any nuclear
|
||||||
|
* facility.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef IPMI_AUTH_H
|
||||||
|
#define IPMI_AUTH_H
|
||||||
|
|
||||||
|
unsigned char * ipmi_auth_md2(struct ipmi_session * s, unsigned char * data, int data_len);
|
||||||
|
unsigned char * ipmi_auth_md5(struct ipmi_session * s, unsigned char * data, int data_len);
|
||||||
|
|
||||||
|
#endif /*IPMI_AUTH_H*/
|
Loading…
x
Reference in New Issue
Block a user