Print this page
4185 New hash algorithm support

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/zfs/sha256.c
          +++ new/usr/src/uts/common/fs/zfs/sha256.c
↓ open down ↓ 14 lines elided ↑ open up ↑
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  /*
  22   22   * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  23   23   * Use is subject to license terms.
  24   24   */
       25 +/*
       26 + * Copyright 2013 Saso Kiselkov. All rights reserved.
       27 + */
  25   28  #include <sys/zfs_context.h>
  26   29  #include <sys/zio.h>
  27   30  #include <sys/sha2.h>
  28   31  
       32 +/*ARGSUSED*/
  29   33  void
  30      -zio_checksum_SHA256(const void *buf, uint64_t size, zio_cksum_t *zcp)
       34 +zio_checksum_SHA256(const void *buf, uint64_t size,
       35 +    const zio_cksum_salt_t *salt, const void *ctx_template, zio_cksum_t *zcp)
  31   36  {
  32   37          SHA2_CTX ctx;
  33   38          zio_cksum_t tmp;
  34   39  
  35   40          SHA2Init(SHA256, &ctx);
  36   41          SHA2Update(&ctx, buf, size);
  37   42          SHA2Final(&tmp, &ctx);
  38   43  
  39   44          /*
  40   45           * A prior implementation of this function had a
  41   46           * private SHA256 implementation always wrote things out in
  42   47           * Big Endian and there wasn't a byteswap variant of it.
  43   48           * To preseve on disk compatibility we need to force that
  44   49           * behaviour.
  45   50           */
  46   51          zcp->zc_word[0] = BE_64(tmp.zc_word[0]);
  47   52          zcp->zc_word[1] = BE_64(tmp.zc_word[1]);
  48   53          zcp->zc_word[2] = BE_64(tmp.zc_word[2]);
  49   54          zcp->zc_word[3] = BE_64(tmp.zc_word[3]);
       55 +}
       56 +
       57 +/*ARGSUSED*/
       58 +void
       59 +zio_checksum_SHA512_native(const void *buf, uint64_t size,
       60 +    const zio_cksum_salt_t *salt, const void *ctx_template, zio_cksum_t *zcp)
       61 +{
       62 +        SHA2_CTX        ctx;
       63 +
       64 +        SHA2Init(SHA512_256, &ctx);
       65 +        SHA2Update(&ctx, buf, size);
       66 +        SHA2Final(zcp, &ctx);
       67 +}
       68 +
       69 +/*ARGSUSED*/
       70 +void
       71 +zio_checksum_SHA512_byteswap(const void *buf, uint64_t size,
       72 +    const zio_cksum_salt_t *salt, const void *ctx_template, zio_cksum_t *zcp)
       73 +{
       74 +        zio_cksum_t     tmp;
       75 +
       76 +        zio_checksum_SHA512_native(buf, size, salt, ctx_template, &tmp);
       77 +        zcp->zc_word[0] = BSWAP_64(tmp.zc_word[0]);
       78 +        zcp->zc_word[1] = BSWAP_64(tmp.zc_word[1]);
       79 +        zcp->zc_word[2] = BSWAP_64(tmp.zc_word[2]);
       80 +        zcp->zc_word[3] = BSWAP_64(tmp.zc_word[3]);
  50   81  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX