From 068738eea9e14490a42897923d1f5a3213827459 Mon Sep 17 00:00:00 2001 From: Tatsuyuki Ishi Date: Mon, 17 Apr 2023 22:41:43 +0900 Subject: [PATCH] util: Add mesa_blake3 wrappers. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The wrappers mirrors the mesa_sha1 API to ease migration. Acked-by: Marek Olšák Part-of: --- src/util/mesa-blake3.c | 44 +++++++++++++++++++++++++++++++++ src/util/mesa-blake3.h | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/util/meson.build | 3 +++ 3 files changed, 113 insertions(+) create mode 100644 src/util/mesa-blake3.c create mode 100644 src/util/mesa-blake3.h diff --git a/src/util/mesa-blake3.c b/src/util/mesa-blake3.c new file mode 100644 index 0000000..7c4accb --- /dev/null +++ b/src/util/mesa-blake3.c @@ -0,0 +1,44 @@ +/* Copyright © 2023 Valve Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include "mesa-blake3.h" + +#include "hex.h" + +void _mesa_blake3_format(char *buf, const unsigned char *blake3) +{ + mesa_bytes_to_hex(buf, blake3, BLAKE3_OUT_LEN); +} + +void _mesa_blake3_hex_to_blake3(unsigned char *buf, const char *hex) +{ + mesa_hex_to_bytes(buf, hex, BLAKE3_OUT_LEN); +} + +void _mesa_blake3_compute(const void *data, size_t size, + unsigned char result[BLAKE3_OUT_LEN]) +{ + struct mesa_blake3 ctx; + _mesa_blake3_init(&ctx); + _mesa_blake3_update(&ctx, data, size); + _mesa_blake3_final(&ctx, result); +} \ No newline at end of file diff --git a/src/util/mesa-blake3.h b/src/util/mesa-blake3.h new file mode 100644 index 0000000..181d722 --- /dev/null +++ b/src/util/mesa-blake3.h @@ -0,0 +1,66 @@ +/* Copyright © 2023 Valve Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifndef MESA_BLAKE3_H +#define MESA_BLAKE3_H + +#include "blake3/blake3.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define mesa_blake3 blake3_hasher + +static inline void +_mesa_blake3_init(struct mesa_blake3 *ctx) +{ + blake3_hasher_init(ctx); +} + +static inline void +_mesa_blake3_update(struct mesa_blake3 *ctx, const void *data, size_t size) +{ + blake3_hasher_update(ctx, data, size); +} + +static inline void +_mesa_blake3_final(struct mesa_blake3 *ctx, unsigned char result[BLAKE3_OUT_LEN]) +{ + blake3_hasher_finalize(ctx, result, BLAKE3_OUT_LEN); +} + +void +_mesa_blake3_format(char *buf, const unsigned char *blake3); + +void +_mesa_blake3_hex_to_blake3(unsigned char *buf, const char *hex); + +void +_mesa_blake3_compute(const void *data, size_t size, unsigned char result[BLAKE3_OUT_LEN]); + +#ifdef __cplusplus +} /* extern C */ +#endif + + +#endif \ No newline at end of file diff --git a/src/util/meson.build b/src/util/meson.build index 376bc19..3765618 100644 --- a/src/util/meson.build +++ b/src/util/meson.build @@ -75,6 +75,8 @@ files_mesa_util = files( 'memstream.h', 'mesa-sha1.c', 'mesa-sha1.h', + 'mesa-blake3.c', + 'mesa-blake3.h', 'os_time.c', 'os_time.h', 'os_file.c', @@ -221,6 +223,7 @@ deps_for_libmesa_util = [ dep_dl, dep_unwind, dep_futex, + idep_blake3, idep_mesautilc11 ] -- 2.7.4