diff options
author | April Chin <April.Chin@Sun.COM> | 2008-12-27 14:59:38 -0800 |
---|---|---|
committer | April Chin <April.Chin@Sun.COM> | 2008-12-27 14:59:38 -0800 |
commit | 7c2fbfb345896881c631598ee3852ce9ce33fb07 (patch) | |
tree | 4b173b5657508562dfc0aa05f7d056d1e9add505 /usr/src/lib/libsum/common/sum-lmd.c | |
parent | 6071ac1de68fed78e1e10052045bbb5f1732a263 (diff) | |
download | illumos-joyent-7c2fbfb345896881c631598ee3852ce9ce33fb07.tar.gz |
PSARC/2008/094 ksh93 Update 1
PSARC/2008/344 ksh93 Integration Update 1 Amendments 1
PSARC/2008/589 Remove /usr/bin/printf from PSARC case 2008 094
6619428 *ksh93* RFE: Update ksh93 in Solaris to ast-ksh.2008-11-04
6788659 RFE: Update libpp in Solaris to ast-open.2008-07-25
6561901 RFE: Add "shcomp" (shell script compiler) + kernel module to exec binary sh code
6599668 RFE: Move consumers of alias.sh over to ksh93
6595183 *ksh93* RFE: Update ksh93-integration demo code
6775901 *ksh93* no C message catalogs are generated for ksh93
6451262 *sleep* RFE: /usr/bin/sleep should support floating-point values
6687139 *ksh93* command substitution, exec, and stdout redirection cause allocation loop
6703761 *ksh93* crashes in script containing uncommon output redirections
6715496 *ksh93* SEGVs on array reinitialization
6713682 *ksh93* Creating a compound variable in a subshell "bleeds through" to the calling subshell
6672350 *ksh93* causes parent shell to die when child shell is suspended
6745015 *ksh93* VARIABLE=`command substitution` assignment is not reliable on OpenSolaris
6710205 *ksh93* problem with command substitution (within back quotes) containing \$'
6737600 *ksh93* exits debugger when user presses ctrl-c
6748645 *ksh93* fc -l -e - is mis-parsed, outputs wrong error message "-e - requires single argument"
6754020 *ksh93* does weird '[' expansion
6753538 *ksh93* umask modification leaks out of a ksh93 subshell
6766246 *ksh93* bug in pattern matching
6763594 *ksh93* executes command after "command" builtin twice on failure
6762665 *ksh93* Difficult-to-reproduce SIGSEGV in ksh93
Diffstat (limited to 'usr/src/lib/libsum/common/sum-lmd.c')
-rw-r--r-- | usr/src/lib/libsum/common/sum-lmd.c | 330 |
1 files changed, 330 insertions, 0 deletions
diff --git a/usr/src/lib/libsum/common/sum-lmd.c b/usr/src/lib/libsum/common/sum-lmd.c new file mode 100644 index 0000000000..1e011685cd --- /dev/null +++ b/usr/src/lib/libsum/common/sum-lmd.c @@ -0,0 +1,330 @@ +/*********************************************************************** +* * +* This software is part of the ast package * +* Copyright (c) 1996-2008 AT&T Intellectual Property * +* and is licensed under the * +* Common Public License, Version 1.0 * +* by AT&T Intellectual Property * +* * +* A copy of the License is available at * +* http://www.opensource.org/licenses/cpl1.0.txt * +* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * +* * +* Information and Software Systems Research * +* AT&T Research * +* Florham Park NJ * +* * +* Glenn Fowler <gsf@research.att.com> * +* * +***********************************************************************/ +#pragma prototyped + +/* + * sum(3) wrapper for solaris -lmd message digest library + */ + +typedef void (*Lmd_init_f)(void*); +typedef void (*Lmd_update_f)(void*, const void*, size_t); +typedef void (*Lmd_final_f)(unsigned char*, void*); + +#define _SUM_LMD_ \ + _SUM_PUBLIC_ \ + _SUM_PRIVATE_ \ + Lmd_init_f initf; \ + Lmd_update_f updatef; \ + Lmd_final_f finalf; \ + unsigned int datasize; \ + unsigned char total[64]; \ + unsigned char data[64]; + +typedef struct Lmd_s +{ + _SUM_LMD_ + struct + { + uintmax_t context; + } context; +} Lmd_t; + +static int +lmd_init(Sum_t* p) +{ + Lmd_t* lmd = (Lmd_t*)p; + + (*lmd->initf)(&lmd->context); + return 0; +} + +static int +lmd_block(Sum_t* p, const void* s, size_t n) +{ + Lmd_t* lmd = (Lmd_t*)p; + + (*lmd->updatef)(&lmd->context, s, n); + return 0; +} + +static int +lmd_done(Sum_t* p) +{ + register Lmd_t* lmd = (Lmd_t*)p; + register int i; + + (*lmd->finalf)(lmd->data, &lmd->context); + for (i = 0; i < lmd->datasize; i++) + lmd->total[i] ^= lmd->data[i]; + return 0; +} + +static int +lmd_print(Sum_t* p, Sfio_t* sp, register int flags, size_t scale) +{ + register Lmd_t* lmd = (Lmd_t*)p; + register unsigned char* d; + register int i; + + d = (flags & SUM_TOTAL) ? lmd->total : lmd->data; + for (i = 0; i < lmd->datasize; i++) + sfprintf(sp, "%02x", d[i]); + return 0; +} + +static int +lmd_data(Sum_t* p, Sumdata_t* data) +{ + Lmd_t* lmd = (Lmd_t*)p; + + data->size = lmd->datasize; + data->num = 0; + data->buf = lmd->data; + return 0; +} + +#if _lib_MD4Init && _hdr_md4 + +#include <md4.h> + +#define md4_description "RFC1320 MD4 message digest. Cryptographically weak. The block count is not printed." +#define md4_options "[+(version)?md4 (solaris -lmd) 2005-07-26]" +#define md4_match "md4|MD4" +#define md4_scale 0 +#define md4_init lmd_init +#define md4_block lmd_block +#define md4_done lmd_done +#define md4_print lmd_print +#define md4_data lmd_data + +typedef struct Md4_s +{ + _SUM_LMD_ + MD4_CTX context; +} Md4_t; + +static Sum_t* +md4_open(const Method_t* method, const char* name) +{ + Md4_t* lmd; + + if (lmd = newof(0, Md4_t, 1, 0)) + { + lmd->method = (Method_t*)method; + lmd->name = name; + lmd->datasize = 16; + lmd->initf = (Lmd_init_f)MD4Init; + lmd->updatef = (Lmd_update_f)MD4Update; + lmd->finalf = (Lmd_final_f)MD4Final; + md4_init((Sum_t*)lmd); + } + return (Sum_t*)lmd; +} + +#endif + +#if _lib_MD5Init && _hdr_md5 + +#include <md5.h> + +#define md5_description "RFC1321 MD5 message digest. Cryptographically weak. The block count is not printed." +#define md5_options "[+(version)?md5 (solaris -lmd) 2005-07-26]" +#define md5_match "md5|MD5" +#define md5_scale 0 +#define md5_init lmd_init +#define md5_block lmd_block +#define md5_done lmd_done +#define md5_print lmd_print +#define md5_data lmd_data + +typedef struct Md5_s +{ + _SUM_LMD_ + MD5_CTX context; +} Md5_t; + +static Sum_t* +md5_open(const Method_t* method, const char* name) +{ + Md5_t* lmd; + + if (lmd = newof(0, Md5_t, 1, 0)) + { + lmd->method = (Method_t*)method; + lmd->name = name; + lmd->datasize = 16; + lmd->initf = (Lmd_init_f)MD5Init; + lmd->updatef = (Lmd_update_f)MD5Update; + lmd->finalf = (Lmd_final_f)MD5Final; + md5_init((Sum_t*)lmd); + } + return (Sum_t*)lmd; +} + +#endif + +#if _lib_SHA1Init && _hdr_sha1 + +#include <sha1.h> + +#define sha1_description "RFC3174 / FIPS 180-1 SHA-1 secure hash algorithm 1. Cryptographically weak. The block count is not printed." +#define sha1_options "[+(version)?sha1 (solaris -lmd) 2005-07-26]" +#define sha1_match "sha1|SHA1|sha-1|SHA-1" +#define sha1_scale 0 +#define sha1_init lmd_init +#define sha1_block lmd_block +#define sha1_done lmd_done +#define sha1_print lmd_print +#define sha1_data lmd_data + +typedef struct Sha1_s +{ + _SUM_LMD_ + SHA1_CTX context; + unsigned char pad[1024]; /* XXX: who's bug is it? */ +} Sha1_t; + +static Sum_t* +sha1_open(const Method_t* method, const char* name) +{ + Sha1_t* lmd; + + if (lmd = newof(0, Sha1_t, 1, 0)) + { + lmd->method = (Method_t*)method; + lmd->name = name; + lmd->datasize = 20; + lmd->initf = (Lmd_init_f)SHA1Init; + lmd->updatef = (Lmd_update_f)SHA1Update; + lmd->finalf = (Lmd_final_f)SHA1Final; + sha1_init((Sum_t*)lmd); + } + return (Sum_t*)lmd; +} + +#endif + +#if _lib_SHA2Init && _hdr_sha2 + +#include <sha2.h> + +#define sha256_description "FIPS 180-2 SHA256 secure hash algorithm. The block count is not printed." +#define sha256_options "[+(version)?sha256 (solaris -lmd) 2005-07-26]" +#define sha256_match "sha256|sha-256|SHA256|SHA-256" +#define sha256_scale 0 +#define sha256_init lmd_init +#define sha256_block lmd_block +#define sha256_done lmd_done +#define sha256_print lmd_print +#define sha256_data lmd_data + +typedef struct Sha256_s +{ + _SUM_LMD_ + SHA256_CTX context; +} Sha256_t; + +static Sum_t* +sha256_open(const Method_t* method, const char* name) +{ + Sha256_t* lmd; + + if (lmd = newof(0, Sha256_t, 1, 0)) + { + lmd->method = (Method_t*)method; + lmd->name = name; + lmd->datasize = 32; + lmd->initf = (Lmd_init_f)SHA256Init; + lmd->updatef = (Lmd_update_f)SHA256Update; + lmd->finalf = (Lmd_final_f)SHA256Final; + sha256_init((Sum_t*)lmd); + } + return (Sum_t*)lmd; +} + +#define sha384_description "FIPS 180-2 SHA384 secure hash algorithm. The block count is not printed." +#define sha384_options "[+(version)?sha384 (solaris -lmd) 2005-07-26]" +#define sha384_match "sha384|sha-384|SHA384|SHA-384" +#define sha384_scale 0 +#define sha384_init lmd_init +#define sha384_block lmd_block +#define sha384_done lmd_done +#define sha384_print lmd_print +#define sha384_data lmd_data + +typedef struct Sha384_s +{ + _SUM_LMD_ + SHA384_CTX context; +} Sha384_t; + +static Sum_t* +sha384_open(const Method_t* method, const char* name) +{ + Sha384_t* lmd; + + if (lmd = newof(0, Sha384_t, 1, 0)) + { + lmd->method = (Method_t*)method; + lmd->name = name; + lmd->datasize = 48; + lmd->initf = (Lmd_init_f)SHA384Init; + lmd->updatef = (Lmd_update_f)SHA384Update; + lmd->finalf = (Lmd_final_f)SHA384Final; + sha384_init((Sum_t*)lmd); + } + return (Sum_t*)lmd; +} + +#define sha512_description "FIPS 180-2 SHA512 secure hash algorithm. The block count is not printed." +#define sha512_options "[+(version)?sha512 (solaris -lmd) 2005-07-26]" +#define sha512_match "sha512|sha-512|SHA512|SHA-512" +#define sha512_scale 0 +#define sha512_init lmd_init +#define sha512_block lmd_block +#define sha512_done lmd_done +#define sha512_print lmd_print +#define sha512_data lmd_data + +typedef struct Sha512_s +{ + _SUM_LMD_ + SHA512_CTX context; +} Sha512_t; + +static Sum_t* +sha512_open(const Method_t* method, const char* name) +{ + Sha512_t* lmd; + + if (lmd = newof(0, Sha512_t, 1, 0)) + { + lmd->method = (Method_t*)method; + lmd->name = name; + lmd->datasize = 64; + lmd->initf = (Lmd_init_f)SHA512Init; + lmd->updatef = (Lmd_update_f)SHA512Update; + lmd->finalf = (Lmd_final_f)SHA512Final; + sha512_init((Sum_t*)lmd); + } + return (Sum_t*)lmd; +} + +#endif |