diff options
author | Max Kellermann <max@musicpd.org> | 2018-07-26 17:29:59 +0200 |
---|---|---|
committer | Max Kellermann <max@musicpd.org> | 2018-07-26 17:46:56 +0200 |
commit | 7db7568dcf4efe91fa878c809bb8e82aa35b6fe2 (patch) | |
tree | 17b56c74978200cb2198e2299283bfe86d30c2cc /src | |
parent | 409d3c7136a62d9b73706f05aaefc04e60652164 (diff) |
lib/gcrypt/MD5: move code to util/HexFormat.cxx
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/gcrypt/MD5.cxx | 11 | ||||
-rw-r--r-- | src/util/HexFormat.cxx | 43 | ||||
-rw-r--r-- | src/util/HexFormat.hxx | 64 |
3 files changed, 109 insertions, 9 deletions
diff --git a/src/lib/gcrypt/MD5.cxx b/src/lib/gcrypt/MD5.cxx index 621c8c29e..e31fa67a8 100644 --- a/src/lib/gcrypt/MD5.cxx +++ b/src/lib/gcrypt/MD5.cxx @@ -29,6 +29,7 @@ #include "MD5.hxx" #include "Hash.hxx" +#include "util/HexFormat.hxx" #include <stdio.h> @@ -42,13 +43,5 @@ StringBuffer<33> MD5Hex(ConstBuffer<void> input) noexcept { const auto raw = MD5(input); - StringBuffer<33> result; - - char *p = result.data(); - for (const auto i : raw) { - sprintf(p, "%02x", i); - p += 2; - } - - return result; + return HexFormatBuffer<raw.size()>(&raw.front()); } diff --git a/src/util/HexFormat.cxx b/src/util/HexFormat.cxx new file mode 100644 index 000000000..1a048eb23 --- /dev/null +++ b/src/util/HexFormat.cxx @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2018 Max Kellermann <max.kellermann@gmail.com> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "HexFormat.hxx" + +#include <stdio.h> + +char * +HexFormat(char *dest, ConstBuffer<uint8_t> src) noexcept +{ + for (auto i : src) { + sprintf(dest, "%02x", i); + dest += 2; + } + + return dest; +} diff --git a/src/util/HexFormat.hxx b/src/util/HexFormat.hxx new file mode 100644 index 000000000..d46903d3a --- /dev/null +++ b/src/util/HexFormat.hxx @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2018 Max Kellermann <max.kellermann@gmail.com> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef HEX_FORMAT_HXX +#define HEX_FORMAT_HXX + +#include "ConstBuffer.hxx" +#include "StringBuffer.hxx" +#include "Compiler.h" + +#include <stdint.h> + +/** + * Format the given byte sequence into a null-terminated hexadecimal + * string. + * + * @param dest the destination buffer; must be large enough to hold + * all hex digits plus the null terminator + * @return a pointer to the generated null terminator + */ +char * +HexFormat(char *dest, ConstBuffer<uint8_t> src) noexcept; + +/** + * Like HexFormat(), but return a #StringBuffer with exactly the + * required size. + */ +template<size_t size> +gcc_pure +auto +HexFormatBuffer(const uint8_t *src) noexcept +{ + StringBuffer<size * 2 + 1> dest; + HexFormat(dest.data(), {src, size}); + return dest; +} + +#endif |