fs/btrfs: add dependency on BLAKE2 hash
authorQu Wenruo <wqu@suse.com>
Mon, 27 Dec 2021 06:12:08 +0000 (14:12 +0800)
committerTom Rini <trini@konsulko.com>
Tue, 18 Jan 2022 13:31:02 +0000 (08:31 -0500)
Now btrfs can utilize the newly intorudced BLAKE2 hash.

Signed-off-by: Qu Wenruo <wqu@suse.com>
fs/btrfs/Kconfig
fs/btrfs/crypto/hash.c
fs/btrfs/crypto/hash.h
fs/btrfs/disk-io.c

index a0b48c23b31ac784da40b3837cecf8d6b54ae1aa..e31afe595f31976a3452e503a380be5450ffcdb7 100644 (file)
@@ -6,6 +6,7 @@ config FS_BTRFS
        select ZSTD
        select RBTREE
        select SHA256
+       select BLAKE2
        help
          This provides a single-device read-only BTRFS support. BTRFS is a
          next-generation Linux file system based on the copy-on-write
index fb51f6386cb16277d063a92d031458945c8ff303..891a2974be0508ca8eb89d256688082622f91303 100644 (file)
@@ -4,6 +4,7 @@
 #include <linux/unaligned/access_ok.h>
 #include <linux/types.h>
 #include <u-boot/sha256.h>
+#include <u-boot/blake2.h>
 #include <u-boot/crc.h>
 
 static u32 btrfs_crc32c_table[256];
@@ -39,6 +40,19 @@ int hash_xxhash(const u8 *buf, size_t length, u8 *out)
        return 0;
 }
 
+/* We use the full CSUM_SIZE(32) for BLAKE2B */
+#define BTRFS_BLAKE2_HASH_SIZE 32
+int hash_blake2(const u8 *buf, size_t length, u8 *out)
+{
+       blake2b_state S;
+
+       blake2b_init(&S, BTRFS_BLAKE2_HASH_SIZE);
+       blake2b_update(&S, buf, length);
+       blake2b_final(&S, out, BTRFS_BLAKE2_HASH_SIZE);
+
+       return 0;
+}
+
 int hash_crc32c(const u8 *buf, size_t length, u8 *out)
 {
        u32 crc;
index d1ba1fa374e3ed4eab3e315f01003213c26c7b2f..f9846038bfa30f92672564b9bad67dda95e01f46 100644 (file)
@@ -9,6 +9,7 @@ void btrfs_hash_init(void);
 int hash_crc32c(const u8 *buf, size_t length, u8 *out);
 int hash_xxhash(const u8 *buf, size_t length, u8 *out);
 int hash_sha256(const u8 *buf, size_t length, u8 *out);
+int hash_blake2(const u8 *buf, size_t length, u8 *out);
 
 u32 crc32c(u32 seed, const void * data, size_t len);
 
index eb7736d53e11cfab4a70291162d8eb79eb305a1a..8043abc1bd605953818a479da2418a6d97a6b690 100644 (file)
@@ -126,6 +126,8 @@ int btrfs_csum_data(u16 csum_type, const u8 *data, u8 *out, size_t len)
                return hash_xxhash(data, len, out);
        case BTRFS_CSUM_TYPE_SHA256:
                return hash_sha256(data, len, out);
+       case BTRFS_CSUM_TYPE_BLAKE2:
+               return hash_blake2(data, len, out);
        default:
                printf("Unknown csum type %d\n", csum_type);
                return -EINVAL;