initial commit [141.14.140.180,mike]
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
/*
|
||||
** Perl Extension for the
|
||||
**
|
||||
** RSA Data Security Inc. MD5 Message-Digest Algorithm
|
||||
**
|
||||
** This module by Neil Winton (N.Winton@axion.bt.co.uk)
|
||||
** SCCS ID @(#)MD5.xs 1.7 96/06/28
|
||||
**
|
||||
** This extension may be distributed under the same terms
|
||||
** as Perl. The MD5 code is covered by separate copyright and
|
||||
** licence, but this does not prohibit distribution under the
|
||||
** GNU or Artistic licences. See the file md5c.c or MD5.pm
|
||||
** for more details.
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#include "EXTERN.h"
|
||||
#include "perl.h"
|
||||
#include "XSUB.h"
|
||||
|
||||
#include "global.h"
|
||||
#include "md5.h"
|
||||
|
||||
/*
|
||||
** The following macro re-definitions added to work around a problem on
|
||||
** Solaris where the original MD5 routines are already in /lib/libnsl.a.
|
||||
** This causes dynamic linking of the module to fail.
|
||||
** Thanks to Ken Pizzini (ken@spry.com) for finally nailing this one!
|
||||
*/
|
||||
|
||||
#define MD5Init MD5Init_perl
|
||||
#define MD5Update MD5Update_perl
|
||||
#define MD5Final MD5Final_perl
|
||||
|
||||
typedef MD5_CTX *MD5;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
MODULE = MD5 PACKAGE = MD5
|
||||
|
||||
PROTOTYPES: DISABLE
|
||||
|
||||
MD5
|
||||
new(packname = "MD5")
|
||||
char * packname
|
||||
CODE:
|
||||
{
|
||||
RETVAL = (MD5_CTX *)safemalloc(sizeof(MD5_CTX));
|
||||
MD5Init(RETVAL);
|
||||
}
|
||||
OUTPUT:
|
||||
RETVAL
|
||||
|
||||
void
|
||||
DESTROY(context)
|
||||
MD5 context
|
||||
CODE:
|
||||
{
|
||||
safefree((char *)context);
|
||||
}
|
||||
|
||||
void
|
||||
reset(context)
|
||||
MD5 context
|
||||
CODE:
|
||||
{
|
||||
MD5Init(context);
|
||||
}
|
||||
|
||||
void
|
||||
add(context, ...)
|
||||
MD5 context
|
||||
CODE:
|
||||
{
|
||||
SV *svdata;
|
||||
STRLEN len;
|
||||
unsigned char *data;
|
||||
int i;
|
||||
|
||||
for (i = 1; i < items; i++)
|
||||
{
|
||||
data = (unsigned char *)(SvPV(ST(i), len));
|
||||
MD5Update(context, data, len);
|
||||
}
|
||||
}
|
||||
|
||||
SV *
|
||||
digest(context)
|
||||
MD5 context
|
||||
CODE:
|
||||
{
|
||||
unsigned char digeststr[16];
|
||||
|
||||
MD5Final(digeststr, context);
|
||||
ST(0) = sv_2mortal(newSVpv((char *)digeststr, 16));
|
||||
}
|
||||
Reference in New Issue
Block a user