]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
upstream: estructure sntrup761.sh to process all files in a single
authordtucker@openbsd.org <dtucker@openbsd.org>
Mon, 4 Jan 2021 21:58:58 +0000 (21:58 +0000)
committerDamien Miller <djm@mindrot.org>
Fri, 8 Jan 2021 02:46:35 +0000 (13:46 +1100)
list, which will make it easier to reorder.  Re-inline int32_MINMAX.  ok
tobhe@

OpenBSD-Commit-ID: d145c6c19b08bb93c9e14bfaa7af589d90f144c0

int32_minmax.inc
sntrup761.c
sntrup761.sh

index 2f6ff519518bbf7b62c5723d27eb06fbb4104a5e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,20 +0,0 @@
-/*  $OpenBSD: int32_minmax.inc,v 1.1 2020/12/30 14:13:28 tobhe Exp $ */
-
-/*
- * Public Domain, Authors:
- * - Daniel J. Bernstein
- * - Chitchanok Chuengsatiansup
- * - Tanja Lange
- * - Christine van Vredendaal
- */
-
-#define int32_MINMAX(a,b) \
-do { \
-  int64_t ab = (int64_t)b ^ (int64_t)a; \
-  int64_t c = (int64_t)b - (int64_t)a; \
-  c ^= ab & (c ^ b); \
-  c >>= 31; \
-  c &= ab; \
-  a ^= c; \
-  b ^= c; \
-} while(0)
index c7ef95c7790e148d8a31d94ff155c754bb7adaca..de18ca9537aca74f15f8e1ade65d6ae219637f50 100644 (file)
@@ -1,4 +1,4 @@
-/*  $OpenBSD: sntrup761.c,v 1.3 2021/01/03 18:05:21 tobhe Exp $ */
+/*  $OpenBSD: sntrup761.c,v 1.4 2021/01/04 21:58:58 dtucker Exp $ */
 
 /*
  * Public Domain, Authors:
 
 #include <string.h>
 #include "crypto_api.h"
-#include "int32_minmax.inc"
 
 #define CRYPTO_NAMESPACE(s) s
 
+/* from supercop-20201130/crypto_sort/int32/portable4/int32_minmax.inc */
+#define int32_MINMAX(a,b) \
+do { \
+  int64_t ab = (int64_t)b ^ (int64_t)a; \
+  int64_t c = (int64_t)b - (int64_t)a; \
+  c ^= ab & (c ^ b); \
+  c >>= 31; \
+  c &= ab; \
+  a ^= c; \
+  b ^= c; \
+} while(0)
+
 /* from supercop-20201130/crypto_sort/int32/portable4/sort.c */
 #define int32 crypto_int32
 
index 3ab303ab7c23385e41f0540d4898b4af939d2a64..e7c5eed1415cb8729483fb4851931c2eb309c23f 100644 (file)
@@ -1,9 +1,12 @@
 #!/bin/sh
-#       $OpenBSD: sntrup761.sh,v 1.3 2021/01/03 18:05:21 tobhe Exp $
+#       $OpenBSD: sntrup761.sh,v 1.4 2021/01/04 21:58:58 dtucker Exp $
 #       Placed in the Public Domain.
 #
 AUTHOR="supercop-20201130/crypto_kem/sntrup761/ref/implementors"
 FILES="
+       supercop-20201130/crypto_sort/int32/portable4/int32_minmax.inc
+       supercop-20201130/crypto_sort/int32/portable4/sort.c
+       supercop-20201130/crypto_sort/uint32/useint32/sort.c
        supercop-20201130/crypto_kem/sntrup761/ref/uint64.h
        supercop-20201130/crypto_kem/sntrup761/ref/uint16.h
        supercop-20201130/crypto_kem/sntrup761/ref/uint32.h
@@ -20,10 +23,6 @@ FILES="
        supercop-20201130/crypto_kem/sntrup761/ref/Encode.c
        supercop-20201130/crypto_kem/sntrup761/ref/kem.c
 "
-SORT_I32="
-       supercop-20201130/crypto_sort/int32/portable4/sort.c
-"
-SORT_U32="supercop-20201130/crypto_sort/uint32/useint32/sort.c"
 ###
 
 set -e
@@ -38,29 +37,31 @@ echo ' */'
 echo
 echo '#include <string.h>'
 echo '#include "crypto_api.h"'
-echo '#include "int32_minmax.inc"'
 echo
 echo '#define CRYPTO_NAMESPACE(s) s'
 echo
-for i in $SORT_I32; do
-       echo "/* from $i */"
-       grep \
-          -v '#include' $i | \
-          sed -e "s/void crypto_sort/static void crypto_sort_int32/g"
-       echo
-done
-echo "/* from $SORT_U32 */"
-grep \
-   -v '#include' $SORT_U32 | \
-   sed -e "s/void crypto_sort/static void crypto_sort_uint32/g"
-echo
 for i in $FILES; do
        echo "/* from $i */"
        grep \
           -v '#include' $i | \
-          sed -e "s/crypto_kem_/crypto_kem_sntrup761_/g" \
+       case "$i" in
+       # Use int64_t for intermediate values in int32_MINMAX to prevent signed
+       # 32-bit integer overflow when called by crypto_sort_uint32.
+       */int32_minmax.inc)
+           sed -e "s/int32 ab = b ^ a/int64_t ab = (int64_t)b ^ (int64_t)a/" \
+           -e "s/int32 c = b - a/int64_t c = (int64_t)b - (int64_t)a/"
+           ;;
+       */int32/portable4/sort.c)
+           sed -e "s/void crypto_sort/static void crypto_sort_int32/g"
+           ;;
+       */uint32/useint32/sort.c)
+           sed -e "s/void crypto_sort/static void crypto_sort_uint32/g"
+           ;;
+       *)
+           sed -e "s/crypto_kem_/crypto_kem_sntrup761_/g" \
                -e "s/^extern void /static void /" \
                -e "s/^void /static void /" \
                -e "/^typedef int32_t int32;$/d"
+       esac
        echo
 done