diff options
Diffstat (limited to 'libinterp')
| -rw-r--r-- | libinterp/keyring.c | 56 | ||||
| -rw-r--r-- | libinterp/keyring.h | 6 | ||||
| -rw-r--r-- | libinterp/runt.h | 52 |
3 files changed, 113 insertions, 1 deletions
diff --git a/libinterp/keyring.c b/libinterp/keyring.c index 56971cf4..7bc5b5d3 100644 --- a/libinterp/keyring.c +++ b/libinterp/keyring.c @@ -1263,6 +1263,62 @@ Keyring_sha1(void *fp) } 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) { F_Keyring_md5 *f; 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 |
