mirror of
https://github.com/moparisthebest/pacman
synced 2024-12-21 23:38:49 -05:00
Update MD5 routines with changes from PolarSSL
Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
parent
c9cc2332cf
commit
835365b817
@ -1,7 +1,12 @@
|
||||
/*
|
||||
* RFC 1321 compliant MD5 implementation
|
||||
*
|
||||
* Copyright (C) 2006-2007 Christophe Devine
|
||||
* Copyright (C) 2006-2010, Brainspark B.V.
|
||||
*
|
||||
* This file is part of PolarSSL (http://www.polarssl.org)
|
||||
* Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -24,29 +29,19 @@
|
||||
/*
|
||||
* Pacman Notes:
|
||||
*
|
||||
* Taken from the XySSL project at www.xyssl.org under terms of the
|
||||
* GPL. This is from version 0.9 of the library, and has been modified
|
||||
* Taken from the PolarSSL project at http://polarssl.org under terms of the
|
||||
* GPL. This is from version 1.0.0 of the library, and has been modified
|
||||
* as following, which may be helpful for future updates:
|
||||
* * remove "xyssl/config.h" include
|
||||
* * change include from "xyssl/md5.h" to "md5.h"
|
||||
* * remove "polarssl/config.h" include
|
||||
* * change include from "polarssl/sha2.h" to "sha2.h"
|
||||
* * removal of HMAC code
|
||||
* * removal of SELF_TEST code
|
||||
* * removal of ipad and opad from the md5_context struct in md5.h
|
||||
* * change of md5_file prototype from
|
||||
* int md5_file( char *path, unsigned char *output )
|
||||
* to
|
||||
* int md5_file( const char *path, unsigned char *output )
|
||||
* * use a dynamically-allocated buffer in md5_file, and increase the size
|
||||
* for performance reasons
|
||||
* * various static/inline changes
|
||||
*
|
||||
* NOTE: XySSL has been renamed to PolarSSL, which is available at
|
||||
* www.polarssl.org. If we update, we should get it from there.
|
||||
* * removal of ipad and opad from the md5_context struct in sha2.h
|
||||
* * increase the size of buffer for performance reasons
|
||||
* * various static changes
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "md5.h"
|
||||
|
||||
@ -76,7 +71,7 @@
|
||||
/*
|
||||
* MD5 context setup
|
||||
*/
|
||||
static inline void md5_starts( md5_context *ctx )
|
||||
static void md5_starts( md5_context *ctx )
|
||||
{
|
||||
ctx->total[0] = 0;
|
||||
ctx->total[1] = 0;
|
||||
@ -87,7 +82,7 @@ static inline void md5_starts( md5_context *ctx )
|
||||
ctx->state[3] = 0x10325476;
|
||||
}
|
||||
|
||||
static inline void md5_process( md5_context *ctx, unsigned char data[64] )
|
||||
static void md5_process( md5_context *ctx, const unsigned char data[64] )
|
||||
{
|
||||
unsigned long X[16], A, B, C, D;
|
||||
|
||||
@ -161,7 +156,7 @@ static inline void md5_process( md5_context *ctx, unsigned char data[64] )
|
||||
P( B, C, D, A, 12, 20, 0x8D2A4C8A );
|
||||
|
||||
#undef F
|
||||
|
||||
|
||||
#define F(x,y,z) (x ^ y ^ z)
|
||||
|
||||
P( A, B, C, D, 5, 4, 0xFFFA3942 );
|
||||
@ -213,9 +208,9 @@ static inline void md5_process( md5_context *ctx, unsigned char data[64] )
|
||||
/*
|
||||
* MD5 process buffer
|
||||
*/
|
||||
static inline void md5_update( md5_context *ctx, unsigned char *input, int ilen )
|
||||
static void md5_update( md5_context *ctx, const unsigned char *input, size_t ilen )
|
||||
{
|
||||
int fill;
|
||||
size_t fill;
|
||||
unsigned long left;
|
||||
|
||||
if( ilen <= 0 )
|
||||
@ -224,7 +219,7 @@ static inline void md5_update( md5_context *ctx, unsigned char *input, int ilen
|
||||
left = ctx->total[0] & 0x3F;
|
||||
fill = 64 - left;
|
||||
|
||||
ctx->total[0] += ilen;
|
||||
ctx->total[0] += (unsigned long) ilen;
|
||||
ctx->total[0] &= 0xFFFFFFFF;
|
||||
|
||||
if( ctx->total[0] < (unsigned long) ilen )
|
||||
@ -254,7 +249,7 @@ static inline void md5_update( md5_context *ctx, unsigned char *input, int ilen
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned char md5_padding[64] =
|
||||
static const unsigned char md5_padding[64] =
|
||||
{
|
||||
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
@ -265,7 +260,7 @@ static unsigned char md5_padding[64] =
|
||||
/*
|
||||
* MD5 final digest
|
||||
*/
|
||||
static inline void md5_finish( md5_context *ctx, unsigned char output[16] )
|
||||
static void md5_finish( md5_context *ctx, unsigned char output[16] )
|
||||
{
|
||||
unsigned long last, padn;
|
||||
unsigned long high, low;
|
||||
@ -293,7 +288,7 @@ static inline void md5_finish( md5_context *ctx, unsigned char output[16] )
|
||||
/*
|
||||
* output = MD5( input buffer )
|
||||
*/
|
||||
void md5( unsigned char *input, int ilen, unsigned char output[16] )
|
||||
void md5( const unsigned char *input, size_t ilen, unsigned char output[16] )
|
||||
{
|
||||
md5_context ctx;
|
||||
|
||||
@ -312,25 +307,19 @@ int md5_file( const char *path, unsigned char output[16] )
|
||||
FILE *f;
|
||||
size_t n;
|
||||
md5_context ctx;
|
||||
unsigned char *buf;
|
||||
unsigned char buf[4096];
|
||||
|
||||
if( ( buf = calloc(8192, sizeof(unsigned char)) ) == NULL )
|
||||
if( ( f = fopen( path, "rb" ) ) == NULL )
|
||||
return( 1 );
|
||||
|
||||
if( ( f = fopen( path, "rb" ) ) == NULL ) {
|
||||
free( buf );
|
||||
return( 1 );
|
||||
}
|
||||
|
||||
md5_starts( &ctx );
|
||||
|
||||
while( ( n = fread( buf, 1, sizeof( buf ), f ) ) > 0 )
|
||||
md5_update( &ctx, buf, (int) n );
|
||||
md5_update( &ctx, buf, n );
|
||||
|
||||
md5_finish( &ctx, output );
|
||||
|
||||
memset( &ctx, 0, sizeof( md5_context ) );
|
||||
free( buf );
|
||||
|
||||
if( ferror( f ) != 0 )
|
||||
{
|
||||
|
@ -1,7 +1,12 @@
|
||||
/*
|
||||
* RFC 1321 compliant MD5 implementation
|
||||
*
|
||||
* Copyright (C) 2006-2007 Christophe Devine
|
||||
* Copyright (C) 2006-2010, Brainspark B.V.
|
||||
*
|
||||
* This file is part of PolarSSL (http://www.polarssl.org)
|
||||
* Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -16,10 +21,11 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef _MD5_H
|
||||
#define _MD5_H
|
||||
|
||||
#include <string.h>
|
||||
|
||||
/**
|
||||
* \brief MD5 context structure
|
||||
*/
|
||||
@ -38,7 +44,7 @@ md5_context;
|
||||
* \param ilen length of the input data
|
||||
* \param output MD5 checksum result
|
||||
*/
|
||||
void md5( unsigned char *input, int ilen, unsigned char output[16] );
|
||||
void md5( const unsigned char *input, size_t ilen, unsigned char output[16] );
|
||||
|
||||
/**
|
||||
* \brief Output = MD5( file contents )
|
||||
|
Loading…
Reference in New Issue
Block a user