From f1dcfd03b4648fd6c0221d14436b391cd368beac Mon Sep 17 00:00:00 2001 From: forsyth Date: Wed, 3 Feb 2010 20:48:47 +0000 Subject: 20100203-2048 --- libinterp/keyring.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++ libinterp/keyring.h | 6 +++++- libinterp/runt.h | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 113 insertions(+), 1 deletion(-) (limited to 'libinterp') diff --git a/libinterp/keyring.c b/libinterp/keyring.c index 56971cf4..7bc5b5d3 100644 --- a/libinterp/keyring.c +++ b/libinterp/keyring.c @@ -1262,6 +1262,62 @@ Keyring_sha1(void *fp) *f->ret = keyring_digest_x(f->buf, f->n, f->digest, SHA1dlen, f->state, sha1); } +void +Keyring_sha224(void *fp) +{ + F_Keyring_sha224 *f; + void *r; + + f = fp; + r = *f->ret; + *f->ret = H; + destroy(r); + + *f->ret = keyring_digest_x(f->buf, f->n, f->digest, SHA224dlen, f->state, sha224); +} + +void +Keyring_sha256(void *fp) +{ + F_Keyring_sha256 *f; + void *r; + + f = fp; + r = *f->ret; + *f->ret = H; + destroy(r); + + *f->ret = keyring_digest_x(f->buf, f->n, f->digest, SHA256dlen, f->state, sha256); +} + +void +Keyring_sha384(void *fp) +{ + F_Keyring_sha384 *f; + void *r; + + f = fp; + r = *f->ret; + *f->ret = H; + destroy(r); + + *f->ret = keyring_digest_x(f->buf, f->n, f->digest, SHA384dlen, f->state, sha384); +} + +void +Keyring_sha512(void *fp) +{ + F_Keyring_sha512 *f; + void *r; + + f = fp; + r = *f->ret; + *f->ret = H; + destroy(r); + + *f->ret = keyring_digest_x(f->buf, f->n, f->digest, SHA512dlen, f->state, sha512); +} + void Keyring_md5(void *fp) { diff --git a/libinterp/keyring.h b/libinterp/keyring.h index 0aa4185a..f5ea7a1c 100644 --- a/libinterp/keyring.h +++ b/libinterp/keyring.h @@ -68,6 +68,10 @@ Runtab Keyringmodtab[]={ "senderrmsg",0xd2526222,Keyring_senderrmsg,40,2,{0x0,0xc0,}, "sendmsg",0x7cfef557,Keyring_sendmsg,48,2,{0x0,0xc0,}, "sha1",0x7656377,Keyring_sha1,48,2,{0x0,0xb0,}, + "sha224",0x7656377,Keyring_sha224,48,2,{0x0,0xb0,}, + "sha256",0x7656377,Keyring_sha256,48,2,{0x0,0xb0,}, + "sha384",0x7656377,Keyring_sha384,48,2,{0x0,0xb0,}, + "sha512",0x7656377,Keyring_sha512,48,2,{0x0,0xb0,}, "IPint.shl",0xc7b0bc01,IPint_shl,40,2,{0x0,0x80,}, "IPint.shr",0xc7b0bc01,IPint_shr,40,2,{0x0,0x80,}, "sign",0xdacb7a7e,Keyring_sign,48,2,{0x0,0xb0,}, @@ -92,4 +96,4 @@ Runtab Keyringmodtab[]={ "IPint.xor",0xa47c1b24,IPint_xor,40,2,{0x0,0xc0,}, 0 }; -#define Keyringmodlen 90 +#define Keyringmodlen 94 diff --git a/libinterp/runt.h b/libinterp/runt.h index 75144e0c..1ed6a493 100644 --- a/libinterp/runt.h +++ b/libinterp/runt.h @@ -3830,6 +3830,54 @@ struct F_Keyring_sha1 Array* digest; Keyring_DigestState* state; }; +void Keyring_sha224(void*); +typedef struct F_Keyring_sha224 F_Keyring_sha224; +struct F_Keyring_sha224 +{ + WORD regs[NREG-1]; + Keyring_DigestState** ret; + uchar temps[12]; + Array* buf; + WORD n; + Array* digest; + Keyring_DigestState* state; +}; +void Keyring_sha256(void*); +typedef struct F_Keyring_sha256 F_Keyring_sha256; +struct F_Keyring_sha256 +{ + WORD regs[NREG-1]; + Keyring_DigestState** ret; + uchar temps[12]; + Array* buf; + WORD n; + Array* digest; + Keyring_DigestState* state; +}; +void Keyring_sha384(void*); +typedef struct F_Keyring_sha384 F_Keyring_sha384; +struct F_Keyring_sha384 +{ + WORD regs[NREG-1]; + Keyring_DigestState** ret; + uchar temps[12]; + Array* buf; + WORD n; + Array* digest; + Keyring_DigestState* state; +}; +void Keyring_sha512(void*); +typedef struct F_Keyring_sha512 F_Keyring_sha512; +struct F_Keyring_sha512 +{ + WORD regs[NREG-1]; + Keyring_DigestState** ret; + uchar temps[12]; + Array* buf; + WORD n; + Array* digest; + Keyring_DigestState* state; +}; void IPint_shl(void*); typedef struct F_IPint_shl F_IPint_shl; struct F_IPint_shl @@ -4054,6 +4102,10 @@ struct F_IPint_xor }; #define Keyring_PATH "$Keyring" #define Keyring_SHA1dlen 20 +#define Keyring_SHA224dlen 28 +#define Keyring_SHA256dlen 32 +#define Keyring_SHA384dlen 48 +#define Keyring_SHA512dlen 64 #define Keyring_MD5dlen 16 #define Keyring_MD4dlen 16 #define Keyring_Encrypt 0 -- cgit v1.2.3