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