Blame src/lib/libsum/sum-lmd.c

Packit 992a25
/***********************************************************************
Packit 992a25
*                                                                      *
Packit 992a25
*               This software is part of the ast package               *
Packit 992a25
*          Copyright (c) 1996-2011 AT&T Intellectual Property          *
Packit 992a25
*                      and is licensed under the                       *
Packit 992a25
*                 Eclipse Public License, Version 1.0                  *
Packit 992a25
*                    by AT&T Intellectual Property                     *
Packit 992a25
*                                                                      *
Packit 992a25
*                A copy of the License is available at                 *
Packit 992a25
*          http://www.eclipse.org/org/documents/epl-v10.html           *
Packit 992a25
*         (with md5 checksum b35adb5213ca9657e911e9befb180842)         *
Packit 992a25
*                                                                      *
Packit 992a25
*              Information and Software Systems Research               *
Packit 992a25
*                            AT&T Research                             *
Packit 992a25
*                           Florham Park NJ                            *
Packit 992a25
*                                                                      *
Packit 992a25
*                 Glenn Fowler <gsf@research.att.com>                  *
Packit 992a25
*                                                                      *
Packit 992a25
***********************************************************************/
Packit 992a25
#pragma prototyped
Packit 992a25
Packit 992a25
/*
Packit 992a25
 * sum(3) wrapper for solaris -lmd message digest library
Packit 992a25
 */
Packit 992a25
Packit 992a25
typedef void (*Lmd_init_f)(void*);
Packit 992a25
typedef void (*Lmd_update_f)(void*, const void*, size_t);
Packit 992a25
typedef void (*Lmd_final_f)(unsigned char*, void*);
Packit 992a25
Packit 992a25
#define	_SUM_LMD_	\
Packit 992a25
	_SUM_PUBLIC_	\
Packit 992a25
	_SUM_PRIVATE_	\
Packit 992a25
	Lmd_init_f	initf; \
Packit 992a25
	Lmd_update_f	updatef; \
Packit 992a25
	Lmd_final_f	finalf; \
Packit 992a25
	unsigned int	datasize; \
Packit 992a25
	unsigned char	total[64]; \
Packit 992a25
	unsigned char	data[64];
Packit 992a25
Packit 992a25
typedef struct Lmd_s
Packit 992a25
{
Packit 992a25
	_SUM_LMD_
Packit 992a25
	struct
Packit 992a25
	{
Packit 992a25
	uintmax_t	context;
Packit 992a25
	}		context;
Packit 992a25
} Lmd_t;
Packit 992a25
Packit 992a25
static int
Packit 992a25
lmd_init(Sum_t* p)
Packit 992a25
{
Packit 992a25
	Lmd_t*	lmd = (Lmd_t*)p;
Packit 992a25
Packit 992a25
	(*lmd->initf)(&lmd->context);
Packit 992a25
	return 0;
Packit 992a25
}
Packit 992a25
Packit 992a25
static int
Packit 992a25
lmd_block(Sum_t* p, const void* s, size_t n)
Packit 992a25
{
Packit 992a25
	Lmd_t*	lmd = (Lmd_t*)p;
Packit 992a25
Packit 992a25
	(*lmd->updatef)(&lmd->context, s, n);
Packit 992a25
	return 0;
Packit 992a25
}
Packit 992a25
Packit 992a25
static int
Packit 992a25
lmd_done(Sum_t* p)
Packit 992a25
{
Packit 992a25
	register Lmd_t*	lmd = (Lmd_t*)p;
Packit 992a25
	register int	i;
Packit 992a25
Packit 992a25
	(*lmd->finalf)(lmd->data, &lmd->context);
Packit 992a25
	for (i = 0; i < lmd->datasize; i++)
Packit 992a25
		lmd->total[i] ^= lmd->data[i];
Packit 992a25
	return 0;
Packit 992a25
}
Packit 992a25
Packit 992a25
static int
Packit 992a25
lmd_print(Sum_t* p, Sfio_t* sp, register int flags, size_t scale)
Packit 992a25
{
Packit 992a25
	register Lmd_t*		lmd = (Lmd_t*)p;
Packit 992a25
	register unsigned char*	d;
Packit 992a25
	register int		i;
Packit 992a25
Packit 992a25
	d = (flags & SUM_TOTAL) ? lmd->total : lmd->data;
Packit 992a25
	for (i = 0; i < lmd->datasize; i++)
Packit 992a25
		sfprintf(sp, "%02x", d[i]);
Packit 992a25
	return 0;
Packit 992a25
}
Packit 992a25
Packit 992a25
static int
Packit 992a25
lmd_data(Sum_t* p, Sumdata_t* data)
Packit 992a25
{
Packit 992a25
	Lmd_t*		lmd = (Lmd_t*)p;
Packit 992a25
Packit 992a25
	data->size = lmd->datasize;
Packit 992a25
	data->num = 0;
Packit 992a25
	data->buf = lmd->data;
Packit 992a25
	return 0;
Packit 992a25
}
Packit 992a25
Packit 992a25
#if _lib_MD4Init && _hdr_md4
Packit 992a25
Packit 992a25
#include <md4.h>
Packit 992a25
Packit 992a25
#define md4_description "RFC1320 MD4 message digest. Cryptographically weak. The block count is not printed."
Packit 992a25
#define md4_options	"[+(version)?md4 (solaris -lmd) 2005-07-26]"
Packit 992a25
#define md4_match	"md4|MD4"
Packit 992a25
#define md4_scale	0
Packit 992a25
#define md4_init	lmd_init
Packit 992a25
#define md4_block	lmd_block
Packit 992a25
#define md4_done	lmd_done
Packit 992a25
#define md4_print	lmd_print
Packit 992a25
#define md4_data	lmd_data
Packit 992a25
Packit 992a25
typedef struct Md4_s
Packit 992a25
{
Packit 992a25
	_SUM_LMD_
Packit 992a25
	MD4_CTX		context;
Packit 992a25
} Md4_t;
Packit 992a25
Packit 992a25
static Sum_t*
Packit 992a25
md4_open(const Method_t* method, const char* name)
Packit 992a25
{
Packit 992a25
	Md4_t*	lmd;
Packit 992a25
Packit 992a25
	if (lmd = newof(0, Md4_t, 1, 0))
Packit 992a25
	{
Packit 992a25
		lmd->method = (Method_t*)method;
Packit 992a25
		lmd->name = name;
Packit 992a25
		lmd->datasize = 16;
Packit 992a25
		lmd->initf = (Lmd_init_f)MD4Init;
Packit 992a25
		lmd->updatef = (Lmd_update_f)MD4Update;
Packit 992a25
		lmd->finalf = (Lmd_final_f)MD4Final;
Packit 992a25
		md4_init((Sum_t*)lmd);
Packit 992a25
	}
Packit 992a25
	return (Sum_t*)lmd;
Packit 992a25
}
Packit 992a25
Packit 992a25
#endif
Packit 992a25
Packit 992a25
#if _lib_MD5Init && _hdr_md5
Packit 992a25
Packit 992a25
#include <md5.h>
Packit 992a25
Packit 992a25
#define md5_description	"RFC1321 MD5 message digest. Cryptographically weak. The block count is not printed."
Packit 992a25
#define md5_options	"[+(version)?md5 (solaris -lmd) 2005-07-26]"
Packit 992a25
#define md5_match	"md5|MD5"
Packit 992a25
#define md5_scale	0
Packit 992a25
#define md5_init	lmd_init
Packit 992a25
#define md5_block	lmd_block
Packit 992a25
#define md5_done	lmd_done
Packit 992a25
#define md5_print	lmd_print
Packit 992a25
#define md5_data	lmd_data
Packit 992a25
Packit 992a25
typedef struct Md5_s
Packit 992a25
{
Packit 992a25
	_SUM_LMD_
Packit 992a25
	MD5_CTX		context;
Packit 992a25
} Md5_t;
Packit 992a25
Packit 992a25
static Sum_t*
Packit 992a25
md5_open(const Method_t* method, const char* name)
Packit 992a25
{
Packit 992a25
	Md5_t*	lmd;
Packit 992a25
Packit 992a25
	if (lmd = newof(0, Md5_t, 1, 0))
Packit 992a25
	{
Packit 992a25
		lmd->method = (Method_t*)method;
Packit 992a25
		lmd->name = name;
Packit 992a25
		lmd->datasize = 16;
Packit 992a25
		lmd->initf = (Lmd_init_f)MD5Init;
Packit 992a25
		lmd->updatef = (Lmd_update_f)MD5Update;
Packit 992a25
		lmd->finalf = (Lmd_final_f)MD5Final;
Packit 992a25
		md5_init((Sum_t*)lmd);
Packit 992a25
	}
Packit 992a25
	return (Sum_t*)lmd;
Packit 992a25
}
Packit 992a25
Packit 992a25
#endif
Packit 992a25
Packit 992a25
#if _lib_SHA1Init && _hdr_sha1
Packit 992a25
Packit 992a25
#include <sha1.h>
Packit 992a25
Packit 992a25
#define sha1_description "RFC3174 / FIPS 180-1 SHA-1 secure hash algorithm 1. Cryptographically weak. The block count is not printed."
Packit 992a25
#define sha1_options	"[+(version)?sha1 (solaris -lmd) 2005-07-26]"
Packit 992a25
#define sha1_match	"sha1|SHA1|sha-1|SHA-1"
Packit 992a25
#define sha1_scale	0
Packit 992a25
#define sha1_init	lmd_init
Packit 992a25
#define sha1_block	lmd_block
Packit 992a25
#define sha1_done	lmd_done
Packit 992a25
#define sha1_print	lmd_print
Packit 992a25
#define sha1_data	lmd_data
Packit 992a25
Packit 992a25
typedef struct Sha1_s
Packit 992a25
{
Packit 992a25
	_SUM_LMD_
Packit 992a25
	SHA1_CTX	context;
Packit 992a25
	unsigned char	pad[1024];	/* XXX: who's bug is it? */
Packit 992a25
} Sha1_t;
Packit 992a25
Packit 992a25
static Sum_t*
Packit 992a25
sha1_open(const Method_t* method, const char* name)
Packit 992a25
{
Packit 992a25
	Sha1_t*	lmd;
Packit 992a25
Packit 992a25
	if (lmd = newof(0, Sha1_t, 1, 0))
Packit 992a25
	{
Packit 992a25
		lmd->method = (Method_t*)method;
Packit 992a25
		lmd->name = name;
Packit 992a25
		lmd->datasize = 20;
Packit 992a25
		lmd->initf = (Lmd_init_f)SHA1Init;
Packit 992a25
		lmd->updatef = (Lmd_update_f)SHA1Update;
Packit 992a25
		lmd->finalf = (Lmd_final_f)SHA1Final;
Packit 992a25
		sha1_init((Sum_t*)lmd);
Packit 992a25
	}
Packit 992a25
	return (Sum_t*)lmd;
Packit 992a25
}
Packit 992a25
Packit 992a25
#endif
Packit 992a25
Packit 992a25
#if _lib_SHA2Init && _hdr_sha2
Packit 992a25
Packit 992a25
#include <sha2.h>
Packit 992a25
Packit 992a25
#define sha256_description "FIPS 180-2 SHA256 secure hash algorithm.  The block count is not printed."
Packit 992a25
#define sha256_options	"[+(version)?sha256 (solaris -lmd) 2005-07-26]"
Packit 992a25
#define sha256_match	"sha256|sha-256|SHA256|SHA-256"
Packit 992a25
#define sha256_scale	0
Packit 992a25
#define sha256_init	lmd_init
Packit 992a25
#define sha256_block	lmd_block
Packit 992a25
#define sha256_done	lmd_done
Packit 992a25
#define sha256_print	lmd_print
Packit 992a25
#define sha256_data	lmd_data
Packit 992a25
Packit 992a25
typedef struct Sha256_s
Packit 992a25
{
Packit 992a25
	_SUM_LMD_
Packit 992a25
	SHA256_CTX	context;
Packit 992a25
} Sha256_t;
Packit 992a25
Packit 992a25
static Sum_t*
Packit 992a25
sha256_open(const Method_t* method, const char* name)
Packit 992a25
{
Packit 992a25
	Sha256_t*	lmd;
Packit 992a25
Packit 992a25
	if (lmd = newof(0, Sha256_t, 1, 0))
Packit 992a25
	{
Packit 992a25
		lmd->method = (Method_t*)method;
Packit 992a25
		lmd->name = name;
Packit 992a25
		lmd->datasize = 32;
Packit 992a25
		lmd->initf = (Lmd_init_f)SHA256Init;
Packit 992a25
		lmd->updatef = (Lmd_update_f)SHA256Update;
Packit 992a25
		lmd->finalf = (Lmd_final_f)SHA256Final;
Packit 992a25
		sha256_init((Sum_t*)lmd);
Packit 992a25
	}
Packit 992a25
	return (Sum_t*)lmd;
Packit 992a25
}
Packit 992a25
Packit 992a25
#define sha384_description "FIPS 180-2 SHA384 secure hash algorithm.  The block count is not printed."
Packit 992a25
#define sha384_options	"[+(version)?sha384 (solaris -lmd) 2005-07-26]"
Packit 992a25
#define sha384_match	"sha384|sha-384|SHA384|SHA-384"
Packit 992a25
#define sha384_scale	0
Packit 992a25
#define sha384_init	lmd_init
Packit 992a25
#define sha384_block	lmd_block
Packit 992a25
#define sha384_done	lmd_done
Packit 992a25
#define sha384_print	lmd_print
Packit 992a25
#define sha384_data	lmd_data
Packit 992a25
Packit 992a25
typedef struct Sha384_s
Packit 992a25
{
Packit 992a25
	_SUM_LMD_
Packit 992a25
	SHA384_CTX	context;
Packit 992a25
} Sha384_t;
Packit 992a25
Packit 992a25
static Sum_t*
Packit 992a25
sha384_open(const Method_t* method, const char* name)
Packit 992a25
{
Packit 992a25
	Sha384_t*	lmd;
Packit 992a25
Packit 992a25
	if (lmd = newof(0, Sha384_t, 1, 0))
Packit 992a25
	{
Packit 992a25
		lmd->method = (Method_t*)method;
Packit 992a25
		lmd->name = name;
Packit 992a25
		lmd->datasize = 48;
Packit 992a25
		lmd->initf = (Lmd_init_f)SHA384Init;
Packit 992a25
		lmd->updatef = (Lmd_update_f)SHA384Update;
Packit 992a25
		lmd->finalf = (Lmd_final_f)SHA384Final;
Packit 992a25
		sha384_init((Sum_t*)lmd);
Packit 992a25
	}
Packit 992a25
	return (Sum_t*)lmd;
Packit 992a25
}
Packit 992a25
Packit 992a25
#define sha512_description "FIPS 180-2 SHA512 secure hash algorithm.  The block count is not printed."
Packit 992a25
#define sha512_options	"[+(version)?sha512 (solaris -lmd) 2005-07-26]"
Packit 992a25
#define sha512_match	"sha512|sha-512|SHA512|SHA-512"
Packit 992a25
#define sha512_scale	0
Packit 992a25
#define sha512_init	lmd_init
Packit 992a25
#define sha512_block	lmd_block
Packit 992a25
#define sha512_done	lmd_done
Packit 992a25
#define sha512_print	lmd_print
Packit 992a25
#define sha512_data	lmd_data
Packit 992a25
Packit 992a25
typedef struct Sha512_s
Packit 992a25
{
Packit 992a25
	_SUM_LMD_
Packit 992a25
	SHA512_CTX	context;
Packit 992a25
} Sha512_t;
Packit 992a25
Packit 992a25
static Sum_t*
Packit 992a25
sha512_open(const Method_t* method, const char* name)
Packit 992a25
{
Packit 992a25
	Sha512_t*	lmd;
Packit 992a25
Packit 992a25
	if (lmd = newof(0, Sha512_t, 1, 0))
Packit 992a25
	{
Packit 992a25
		lmd->method = (Method_t*)method;
Packit 992a25
		lmd->name = name;
Packit 992a25
		lmd->datasize = 64;
Packit 992a25
		lmd->initf = (Lmd_init_f)SHA512Init;
Packit 992a25
		lmd->updatef = (Lmd_update_f)SHA512Update;
Packit 992a25
		lmd->finalf = (Lmd_final_f)SHA512Final;
Packit 992a25
		sha512_init((Sum_t*)lmd);
Packit 992a25
	}
Packit 992a25
	return (Sum_t*)lmd;
Packit 992a25
}
Packit 992a25
Packit 992a25
#endif