summaryrefslogtreecommitdiff
path: root/libinterp
diff options
context:
space:
mode:
Diffstat (limited to 'libinterp')
-rw-r--r--libinterp/keyring.c56
-rw-r--r--libinterp/keyring.h6
-rw-r--r--libinterp/runt.h52
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