Print this page
4185 New hash algorithm support

@@ -18,10 +18,11 @@
  *
  * CDDL HEADER END
  */
 /*
  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright Saso Kiselkov 2013, All rights reserved.
  */
 
 #ifndef _SYS_ZIO_CHECKSUM_H
 #define _SYS_ZIO_CHECKSUM_H
 

@@ -32,20 +33,27 @@
 #endif
 
 /*
  * Signature for checksum functions.
  */
-typedef void zio_checksum_t(const void *data, uint64_t size, zio_cksum_t *zcp);
+typedef void zio_checksum_t(const void *data, uint64_t size,
+    const zio_cksum_salt_t *salt, const void *ctx_template, zio_cksum_t *zcp);
+typedef void *zio_checksum_tmpl_init_t(const zio_cksum_salt_t *salt);
+typedef void zio_checksum_tmpl_free_t(void *ctx_template);
 
 /*
  * Information about each checksum function.
  */
 typedef struct zio_checksum_info {
-        zio_checksum_t  *ci_func[2]; /* checksum function for each byteorder */
+        /* checksum function for each byteorder */
+        zio_checksum_t                  *ci_func[2];
+        zio_checksum_tmpl_init_t        *ci_tmpl_init;
+        zio_checksum_tmpl_free_t        *ci_tmpl_free;
         int             ci_correctable; /* number of correctable bits   */
         int             ci_eck;         /* uses zio embedded checksum? */
         int             ci_dedup;       /* strong enough for dedup? */
+        int             ci_salted;      /* does the checksum support salts */
         char            *ci_name;       /* descriptive name */
 } zio_checksum_info_t;
 
 typedef struct zio_bad_cksum {
         zio_cksum_t             zbc_expected;

@@ -60,15 +68,30 @@
 
 /*
  * Checksum routines.
  */
 extern zio_checksum_t zio_checksum_SHA256;
+extern zio_checksum_t zio_checksum_SHA512_native;
+extern zio_checksum_t zio_checksum_SHA512_byteswap;
 
+/* Skein */
+extern zio_checksum_t zio_checksum_skein_native;
+extern zio_checksum_t zio_checksum_skein_byteswap;
+extern zio_checksum_tmpl_init_t zio_checksum_skein_tmpl_init;
+extern zio_checksum_tmpl_free_t zio_checksum_skein_tmpl_free;
+
+/* Edon-R */
+extern zio_checksum_t zio_checksum_edonr_native;
+extern zio_checksum_t zio_checksum_edonr_byteswap;
+extern zio_checksum_tmpl_init_t zio_checksum_edonr_tmpl_init;
+extern zio_checksum_tmpl_free_t zio_checksum_edonr_tmpl_free;
+
 extern void zio_checksum_compute(zio_t *zio, enum zio_checksum checksum,
     void *data, uint64_t size);
 extern int zio_checksum_error(zio_t *zio, zio_bad_cksum_t *out);
 extern enum zio_checksum spa_dedup_checksum(spa_t *spa);
+extern void zio_checksum_templates_free(spa_t *spa);
 
 #ifdef  __cplusplus
 }
 #endif