+void SHA384_Simple(const void *p, int len, unsigned char *output) {
+ SHA512_State s;
+
+ SHA384_Init(&s);
+ SHA512_Bytes(&s, p, len);
+ SHA384_Final(&s, output);
+}
+
+/*
+ * Thin abstraction for things where hashes are pluggable.
+ */
+
+static void *sha512_init(void)
+{
+ SHA512_State *s;
+
+ s = snew(SHA512_State);
+ SHA512_Init(s);
+ return s;
+}
+
+static void sha512_bytes(void *handle, void *p, int len)
+{
+ SHA512_State *s = handle;
+
+ SHA512_Bytes(s, p, len);
+}
+
+static void sha512_final(void *handle, unsigned char *output)
+{
+ SHA512_State *s = handle;
+
+ SHA512_Final(s, output);
+ sfree(s);
+}
+
+const struct ssh_hash ssh_sha512 = {
+ sha512_init, sha512_bytes, sha512_final, 64, "SHA-512"
+};
+
+static void *sha384_init(void)
+{
+ SHA512_State *s;
+
+ s = snew(SHA512_State);
+ SHA384_Init(s);
+ return s;
+}
+
+static void sha384_final(void *handle, unsigned char *output)
+{
+ SHA512_State *s = handle;
+
+ SHA384_Final(s, output);
+ sfree(s);
+}
+
+const struct ssh_hash ssh_sha384 = {
+ sha384_init, sha512_bytes, sha384_final, 48, "SHA-384"
+};
+