summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordtucker@openbsd.org <dtucker@openbsd.org>2021-01-04 21:58:58 +0000
committerDamien Miller <djm@mindrot.org>2021-01-08 13:46:35 +1100
commit91bac5e95b1b0debf9b2b4f05c20dcfa96b368b9 (patch)
tree1174a47d454137f0b15c7882e7c9a0e4366ca86c
parent4d96a3ebab2224f17e639a15078e03be1ad3736d (diff)
upstream: estructure sntrup761.sh to process all files in a single
list, which will make it easier to reorder. Re-inline int32_MINMAX. ok tobhe@ OpenBSD-Commit-ID: d145c6c19b08bb93c9e14bfaa7af589d90f144c0
-rw-r--r--int32_minmax.inc20
-rw-r--r--sntrup761.c15
-rw-r--r--sntrup761.sh39
3 files changed, 33 insertions, 41 deletions
diff --git a/int32_minmax.inc b/int32_minmax.inc
index 2f6ff5195..e69de29bb 100644
--- a/int32_minmax.inc
+++ b/int32_minmax.inc
@@ -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)
diff --git a/sntrup761.c b/sntrup761.c
index c7ef95c77..de18ca953 100644
--- a/sntrup761.c
+++ b/sntrup761.c
@@ -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:
@@ -12,10 +12,21 @@
#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
diff --git a/sntrup761.sh b/sntrup761.sh
index 3ab303ab7..e7c5eed14 100644
--- a/sntrup761.sh
+++ b/sntrup761.sh
@@ -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