Add SHA-512 implementations for POWER8 and POWER9
[libgcrypt.git] / cipher / hash-common.h
index 3caf0a7..0b3ade1 100644 (file)
@@ -30,10 +30,11 @@ const char * _gcry_hash_selftest_check_one
 
 /* Type for the md_write helper function.  */
 typedef unsigned int (*_gcry_md_block_write_t) (void *c,
-                                               const unsigned char *buf);
+                                               const unsigned char *blks,
+                                               size_t nblks);
 
-#if defined(HAVE_U64_TYPEDEF) && defined(USE_SHA512)
-/* SHA-512 needs u64 and larger buffer. */
+#if (defined(USE_SHA512) || defined(USE_WHIRLPOOL))
+/* SHA-512 and Whirlpool needs u64. SHA-512 needs larger buffer. */
 # define MD_BLOCK_MAX_BLOCKSIZE 128
 # define MD_NBLOCKS_TYPE u64
 #else
@@ -41,10 +42,14 @@ typedef unsigned int (*_gcry_md_block_write_t) (void *c,
 # define MD_NBLOCKS_TYPE u32
 #endif
 
+/* SHA1 needs 2x64 bytes and SHA-512 needs 128 bytes. */
+#define MD_BLOCK_CTX_BUFFER_SIZE 128
+
 typedef struct gcry_md_block_ctx
 {
-    byte buf[MD_BLOCK_MAX_BLOCKSIZE];
+    byte buf[MD_BLOCK_CTX_BUFFER_SIZE];
     MD_NBLOCKS_TYPE nblocks;
+    MD_NBLOCKS_TYPE nblocks_high;
     int count;
     size_t blocksize;
     _gcry_md_block_write_t bwrite;