pkgsrc-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[pkgsrc/trunk]: pkgsrc/pkgtools/digest digest: add the BLAKE2b digest.



details:   https://anonhg.NetBSD.org/pkgsrc/rev/6d4ce13918ad
branches:  trunk
changeset: 313657:6d4ce13918ad
user:      nia <nia%pkgsrc.org@localhost>
date:      Sat Oct 06 14:32:45 2018 +0000

description:
digest: add the BLAKE2b digest.

BLAKE2 is a further development of the SHA-3 finalist BLAKE by its original
authors that improves its performance. BLAKE2b is the variant optimized for
64-bit systems.

ok riastradh

diffstat:

 pkgtools/digest/DESCR              |    1 +
 pkgtools/digest/files/DESCR        |    2 +-
 pkgtools/digest/files/Makefile.in  |    8 +-
 pkgtools/digest/files/README       |    4 +-
 pkgtools/digest/files/blake2b-hl.c |  128 +++++++++++++
 pkgtools/digest/files/blake2b.c    |  350 +++++++++++++++++++++++++++++++++++++
 pkgtools/digest/files/blake2b.h    |   55 +++++
 pkgtools/digest/files/configure    |    2 +-
 pkgtools/digest/files/digest.1     |    6 +-
 pkgtools/digest/files/digest.c     |    6 +-
 10 files changed, 552 insertions(+), 10 deletions(-)

diffs (truncated from 654 to 300 lines):

diff -r e86a42a494cc -r 6d4ce13918ad pkgtools/digest/DESCR
--- a/pkgtools/digest/DESCR     Sat Oct 06 12:13:50 2018 +0000
+++ b/pkgtools/digest/DESCR     Sat Oct 06 14:32:45 2018 +0000
@@ -8,5 +8,6 @@
        + sha512
        + tiger
        + whirlpool
+       + blake2b
 
 message digest routines.
diff -r e86a42a494cc -r 6d4ce13918ad pkgtools/digest/files/DESCR
--- a/pkgtools/digest/files/DESCR       Sat Oct 06 12:13:50 2018 +0000
+++ b/pkgtools/digest/files/DESCR       Sat Oct 06 14:32:45 2018 +0000
@@ -1,2 +1,2 @@
 This utility is a wrapper for the md5(3), rmd160(3), and sha1, sha256,
-sha384 and sha512 routines.
+sha384, sha512, and blake2b routines.
diff -r e86a42a494cc -r 6d4ce13918ad pkgtools/digest/files/Makefile.in
--- a/pkgtools/digest/files/Makefile.in Sat Oct 06 12:13:50 2018 +0000
+++ b/pkgtools/digest/files/Makefile.in Sat Oct 06 14:32:45 2018 +0000
@@ -1,4 +1,4 @@
-# $Id: Makefile.in,v 1.6 2016/03/03 22:11:07 agc Exp $
+# $Id: Makefile.in,v 1.7 2018/10/06 14:32:45 nia Exp $
 
 @SET_MAKE@
 SHELL = @SHELL@
@@ -44,12 +44,12 @@
 
 digest_OBJS = digest.o keccak.o md5c.o md5hl.o rmd160.o \
 rmd160hl.o sha1.o sha1hl.o sha2.o sha2hl.o sha3.o sha3hl.o \
-tiger.o whirlpool.o
+tiger.o whirlpool.o blake2b.o blake2b-hl.o
 
 SRCS= digest.c keccak.c md5c.c md5hl.c rmd160.c \
 rmd160hl.c sha1.c sha1hl.c sha2.c sha2hl.c sha3.c sha3hl.c \
-tiger.c whirlpool.c \
-md5.h rmd160.h sha1.h sha2.h sha3.h tiger.h whirlpool.h
+tiger.c whirlpool.c blake2b.c blake2b-hl.c \
+md5.h rmd160.h sha1.h sha2.h sha3.h tiger.h whirlpool.h blake2.h
 
 DISTFILES= $(SRCS) AUTHORS COPYING DESCR INSTALL Makefile.in NEWS aclocal.m4 \
 config.guess config.h.in config.sub configure configure.ac install-sh \
diff -r e86a42a494cc -r 6d4ce13918ad pkgtools/digest/files/README
--- a/pkgtools/digest/files/README      Sat Oct 06 12:13:50 2018 +0000
+++ b/pkgtools/digest/files/README      Sat Oct 06 14:32:45 2018 +0000
@@ -1,2 +1,2 @@
-The digest utility is a wrapper for the md5, sha1, sha256, sha384, sha512 and
-rmd160 message digest algorithms. It first appeared in NetBSD 1.6.
+The digest utility is a wrapper for the blake2b, md5, sha1, sha256, sha384,
+sha512 and rmd160 message digest algorithms. It first appeared in NetBSD 1.6.
diff -r e86a42a494cc -r 6d4ce13918ad pkgtools/digest/files/blake2b-hl.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/pkgtools/digest/files/blake2b-hl.c        Sat Oct 06 14:32:45 2018 +0000
@@ -0,0 +1,128 @@
+/* $NetBSD: blake2b-hl.c,v 1.1 2018/10/06 14:32:45 nia Exp $   */
+
+/*
+ * blake2b-hl.c
+ * This code is derived from sha2hl.c, hence the following licence
+ * reproduction.
+ *
+ * This code is not a verbatim copy, since some routines have been added,
+ * and some bugs have been fixed.
+ *
+ * Version 1.0.0beta1
+ *
+ * Written by Aaron D. Gifford <me%aarongifford.com@localhost>
+ *
+ * Copyright 2000 Aaron D. Gifford.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. 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.
+ * 3. Neither the name of the copyright holder nor the names of contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) AND CONTRIBUTOR(S) ``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 AUTHOR(S) OR CONTRIBUTOR(S) 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.
+ *
+ */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#include <assert.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include "blake2b.h"
+
+static const char blake2_hex_digits[] = "0123456789abcdef";
+
+#ifndef MEMSET_BZERO
+#define MEMSET_BZERO(p,l)      memset((p), 0, (l))
+#endif
+
+#ifndef _DIAGASSERT
+#define _DIAGASSERT(cond)      assert(cond)
+#endif
+
+void
+BLAKE2b_Init(struct blake2b *ctx)
+{
+       blake2b_init(ctx, BLAKE2B_MAX_DIGEST, NULL, 0);
+}
+
+void
+BLAKE2b_Update(struct blake2b *ctx, const uint8_t *input, size_t len)
+{
+       blake2b_update(ctx, input, len);
+}
+
+char *
+BLAKE2b_File(char *filename, char *buf)
+{
+       unsigned char   buffer[BUFSIZ * 20];
+       struct blake2b  ctx;
+       int             fd, num, oerrno;
+
+       _DIAGASSERT(filename != NULL);
+       /* XXX: buf may be NULL ? */
+
+       BLAKE2b_Init(&ctx);
+
+       if ((fd = open(filename, O_RDONLY)) < 0)
+               return (0);
+
+       while ((num = read(fd, buffer, sizeof(buffer))) > 0)
+               blake2b_update(&ctx, buffer, (size_t) num);
+
+       oerrno = errno;
+       close(fd);
+       errno = oerrno;
+       BLAKE2b_End(&ctx, buf);
+       return (num < 0 ? 0 : buf);
+}
+
+char *
+BLAKE2b_End(struct blake2b *ctx, char buffer[])
+{
+       unsigned char digest[BLAKE2B_MAX_DIGEST], *d = digest;
+       unsigned char *ret;
+       int i;
+
+       assert(ctx != NULL);
+
+       if ((ret = buffer) != NULL) {
+               blake2b_final(ctx, digest);
+
+               for (i = 0; i < BLAKE2B_MAX_DIGEST; i++) {
+                       *buffer++ = blake2_hex_digits[(*d & 0xf0) >> 4];
+                       *buffer++ = blake2_hex_digits[*d & 0x0f];
+                       d++;
+               }
+               *buffer = '\0';
+       } else {
+               (void)MEMSET_BZERO(ctx, sizeof(struct blake2b));
+       }
+       (void)MEMSET_BZERO(digest, BLAKE2B_MAX_DIGEST);
+       return ret;
+}
diff -r e86a42a494cc -r 6d4ce13918ad pkgtools/digest/files/blake2b.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/pkgtools/digest/files/blake2b.c   Sat Oct 06 14:32:45 2018 +0000
@@ -0,0 +1,350 @@
+/*-
+ * Copyright (c) 2015 Taylor R. Campbell
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. 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 AUTHOR 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 AUTHOR 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.
+ */
+
+#define        _POSIX_C_SOURCE 200809L
+
+#include <assert.h>
+#include <stdint.h>
+#include <string.h>
+
+#include "blake2b.h"
+
+void *(*volatile blake2b_explicit_memset_impl)(void *, int, size_t) = &memset;
+static void *
+explicit_memset(void *buf, int c, size_t n)
+{
+
+       return (*blake2b_explicit_memset_impl)(buf, c, n);
+}
+
+static inline uint64_t
+rotr64(uint64_t x, unsigned c)
+{
+
+       return ((x >> c) | (x << (64 - c)));
+}
+
+static inline uint64_t
+le64dec(const void *buf)
+{
+       const uint8_t *p = buf;
+
+       return (((uint64_t)p[0]) |
+           ((uint64_t)p[1] << 8) |
+           ((uint64_t)p[2] << 16) |
+           ((uint64_t)p[3] << 24) |
+           ((uint64_t)p[4] << 32) |
+           ((uint64_t)p[5] << 40) |
+           ((uint64_t)p[6] << 48) |
+           ((uint64_t)p[7] << 56));
+}
+
+static inline void
+le64enc(void *buf, uint64_t v)
+{
+       uint8_t *p = buf;
+
+       *p++ = v; v >>= 8;
+       *p++ = v; v >>= 8;
+       *p++ = v; v >>= 8;
+       *p++ = v; v >>= 8;
+       *p++ = v; v >>= 8;
+       *p++ = v; v >>= 8;
+       *p++ = v; v >>= 8;
+       *p++ = v;
+}
+
+#define        BLAKE2B_G(VA, VB, VC, VD, X, Y) do                                    \
+{                                                                            \
+       (VA) = (VA) + (VB) + (X);                                             \
+       (VD) = rotr64((VD) ^ (VA), 32);                                       \
+       (VC) = (VC) + (VD);                                                   \
+       (VB) = rotr64((VB) ^ (VC), 24);                                       \
+       (VA) = (VA) + (VB) + (Y);                                             \
+       (VD) = rotr64((VD) ^ (VA), 16);                                       \
+       (VC) = (VC) + (VD);                                                   \
+       (VB) = rotr64((VB) ^ (VC), 63);                                       \
+} while (0)
+
+static const uint64_t blake2b_iv[8] = {
+       0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL,
+       0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL,
+       0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL,
+       0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL,
+};
+
+static const uint8_t blake2b_sigma[12][16] = {
+       {  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 },
+       { 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3 },
+       { 11,  8, 12,  0,  5,  2, 15, 13, 10, 14,  3,  6,  7,  1,  9,  4 },
+       {  7,  9,  3,  1, 13, 12, 11, 14,  2,  6,  5, 10,  4,  0, 15,  8 },
+       {  9,  0,  5,  7,  2,  4, 10, 15, 14,  1, 11, 12,  6,  8,  3, 13 },
+       {  2, 12,  6, 10,  0, 11,  8,  3,  4, 13,  7,  5, 15, 14,  1,  9 },
+       { 12,  5,  1, 15, 14, 13,  4, 10,  0,  7,  6,  3,  9,  2,  8, 11 },
+       { 13, 11,  7, 14, 12,  1,  3,  9,  5,  0, 15,  4,  8,  6,  2, 10 },
+       {  6, 15, 14,  9, 11,  3,  0,  8, 12,  2, 13,  7,  1,  4, 10,  5 },
+       { 10,  2,  8,  4,  7,  6,  1,  5, 15, 11,  9, 14,  3, 12, 13,  0 },
+       {  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 },
+       { 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3 },
+};
+
+static void



Home | Main Index | Thread Index | Old Index