diff options
author | Qu Wenruo <wqu@suse.com> | 2021-12-27 14:12:08 +0800 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2022-01-18 08:31:02 -0500 |
commit | 1617165a172ea1768c9cb12cde536f1da252546e (patch) | |
tree | 9c4af983adca444808b7e3ff629a377c222150cc /fs | |
parent | 7c3fd5c25dd005c5eef54cc629fcbfcf48a04e9a (diff) | |
download | u-boot-1617165a172ea1768c9cb12cde536f1da252546e.tar.gz |
fs/btrfs: add dependency on BLAKE2 hash
Now btrfs can utilize the newly intorudced BLAKE2 hash.
Signed-off-by: Qu Wenruo <wqu@suse.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/Kconfig | 1 | ||||
-rw-r--r-- | fs/btrfs/crypto/hash.c | 14 | ||||
-rw-r--r-- | fs/btrfs/crypto/hash.h | 1 | ||||
-rw-r--r-- | fs/btrfs/disk-io.c | 2 |
4 files changed, 18 insertions, 0 deletions
diff --git a/fs/btrfs/Kconfig b/fs/btrfs/Kconfig index a0b48c23b3..e31afe595f 100644 --- a/fs/btrfs/Kconfig +++ b/fs/btrfs/Kconfig @@ -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 diff --git a/fs/btrfs/crypto/hash.c b/fs/btrfs/crypto/hash.c index fb51f6386c..891a2974be 100644 --- a/fs/btrfs/crypto/hash.c +++ b/fs/btrfs/crypto/hash.c @@ -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; diff --git a/fs/btrfs/crypto/hash.h b/fs/btrfs/crypto/hash.h index d1ba1fa374..f9846038bf 100644 --- a/fs/btrfs/crypto/hash.h +++ b/fs/btrfs/crypto/hash.h @@ -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); diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index eb7736d53e..8043abc1bd 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -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; |