Print this page
4185 New hash algorithm support
*** 18,27 ****
--- 18,28 ----
*
* 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,51 ****
#endif
/*
* Signature for checksum functions.
*/
! typedef void zio_checksum_t(const void *data, uint64_t size, zio_cksum_t *zcp);
/*
* Information about each checksum function.
*/
typedef struct zio_checksum_info {
! zio_checksum_t *ci_func[2]; /* checksum function for each byteorder */
int ci_correctable; /* number of correctable bits */
int ci_eck; /* uses zio embedded checksum? */
int ci_dedup; /* strong enough for dedup? */
char *ci_name; /* descriptive name */
} zio_checksum_info_t;
typedef struct zio_bad_cksum {
zio_cksum_t zbc_expected;
--- 33,59 ----
#endif
/*
* Signature for checksum functions.
*/
! 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 {
! /* 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,74 ****
--- 68,97 ----
/*
* 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