Skip to content

Commit

Permalink
Merge pull request mit-plv#1608 from mit-plv/dettman32
Browse files Browse the repository at this point in the history
Generalize dettman algorithm
  • Loading branch information
OwenConoly authored Jun 15, 2023
2 parents fd26eec + 5ef1961 commit c371fb8
Show file tree
Hide file tree
Showing 21 changed files with 15,288 additions and 703 deletions.
5 changes: 3 additions & 2 deletions Makefile.examples
Original file line number Diff line number Diff line change
Expand Up @@ -127,12 +127,13 @@ $(foreach bw,64 32,$(eval $(call add_curve_keys,p256_scalar_$(bw),WORD_BY_WORD_M
$(foreach bw,64 32,$(eval $(call add_curve_keys,p384_scalar_$(bw),WORD_BY_WORD_MONTGOMERY,'p384_scalar',$(bw),'2^384 - 1388124618062372383947042015309946732620727252194336364173',$(WORD_BY_WORD_MONTGOMERY_FUNCTIONS),WORD_BY_WORD_MONTGOMERY)))
$(foreach bw,64 32,$(eval $(call add_curve_keys,secp256k1_montgomery_scalar_$(bw),WORD_BY_WORD_MONTGOMERY,'secp256k1_montgomery_scalar',$(bw),'2^256 - 432420386565659656852420866394968145599',$(WORD_BY_WORD_MONTGOMERY_FUNCTIONS),WORD_BY_WORD_MONTGOMERY)))

$(foreach bw,64,$(eval $(call add_curve_keys,secp256k1_dettman_$(bw),DETTMAN_MULTIPLICATION,'secp256k1_dettman',$(bw),5 48 '2^256 - 4294968273',$(DETTMAN_MULTIPLICATION_FUNCTIONS),DETTMAN_MULTIPLICATION)))
$(foreach bw,64,$(eval $(call add_curve_keys,secp256k1_dettman_$(bw),DETTMAN_MULTIPLICATION,'secp256k1_dettman',$(bw),5 48 2 '2^256 - 4294968273',$(DETTMAN_MULTIPLICATION_FUNCTIONS),DETTMAN_MULTIPLICATION)))
$(foreach bw,32,$(eval $(call add_curve_keys,secp256k1_dettman_$(bw),DETTMAN_MULTIPLICATION,'secp256k1_dettman',$(bw),10 22 6 '2^256 - 4294968273',$(DETTMAN_MULTIPLICATION_FUNCTIONS),DETTMAN_MULTIPLICATION)))

$(foreach bw,64,$(eval $(call add_curve_keys,curve25519_solinas_$(bw),SOLINAS_REDUCTION,'curve25519_solinas',$(bw),'2^255 - 19',$(SOLINAS_REDUCTION_FUNCTIONS),SOLINAS_REDUCTION)))

# Files taking 30s or less
LITE_BASE_FILES := curve25519_64 poly1305_64 poly1305_32 p256_64 secp256k1_dettman_64 secp256k1_montgomery_64 p384_64 p224_32 p434_64 p448_solinas_64 secp256k1_montgomery_32 p256_32 p448_solinas_32 \
LITE_BASE_FILES := curve25519_64 poly1305_64 poly1305_32 p256_64 secp256k1_dettman_64 secp256k1_dettman_32 secp256k1_montgomery_64 p384_64 p224_32 p434_64 p448_solinas_64 secp256k1_montgomery_32 p256_32 p448_solinas_32 \
curve25519_scalar_64 p256_scalar_64 secp256k1_montgomery_scalar_64 p384_scalar_64 secp256k1_montgomery_scalar_32 p256_scalar_32

EXTRA_C_FILES := inversion/c/*_test.c
Expand Down
7 changes: 3 additions & 4 deletions etc/ci/test-fiat-c-boringssl.sh
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,9 @@ pushd boringssl >/dev/null
echo "::group::Patching BoringSSL"
({
set -ex
( cd third_party/fiat && for i in *.h; do
if [ "$i" != "curve25519_64_msvc.h" ] && [ "$i" != "p256_64_msvc.h" ]; then
cp "${SUBCOMPONENT_PATH}/${i/.h/.c}" "$i" || exit $?;
fi;
( cd third_party/fiat &&
for i in "curve25519_32.h" "curve25519_64.h" "p256_32.h" "p256_64.h"; do
cp "${SUBCOMPONENT_PATH}/${i/.h/.c}" "$i" || exit $?
done ) || exit $?
( cd third_party/fiat && git --no-pager diff )
}) || exit $?
Expand Down
10 changes: 5 additions & 5 deletions fiat-amd64/gentest.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ def removeprefix(s, prefix):
saturatedsolinasprimes = dict(
curve25519_solinas=('2^255 - 19'))

dettmanprimes = dict( # last limb width, limbs, prime
secp256k1_dettman=('48', '5', '2^256 - 4294968273'))
dettmanprimes = dict( # last limb width, limbs, last reduction, prime
secp256k1_dettman=('48', '5', '2', '2^256 - 4294968273'))

output_makefile = ('--makefile' in sys.argv[1:])
directories = tuple(i for i in sys.argv[1:] if i not in ('--makefile',))
Expand All @@ -60,7 +60,7 @@ def asm_op_names_key(val):

if name in dettmanprimes.keys():
kind = 0
limbwidth, n, prime = dettmanprimes[name]
limbwidth, n, last_reduction, prime = dettmanprimes[name]

elif name in saturatedsolinasprimes.keys():
kind = 1
Expand Down Expand Up @@ -113,8 +113,8 @@ def is_small(val):
if kind == 0:
binary = 'src/ExtractionOCaml/dettman_multiplication'
binary_descr = 'Dettman Multiplication'
limbwidth, _n, _prime = dettmanprimes[name]
invocation = ' '.join([binary, name, '64', n, limbwidth, shlex.quote(prime), op, '--no-wide-int', '--shiftr-avoid-uint1'] + [item for fname in fnames for item in ('--hints-file', shlex.quote(fname))])
limbwidth, _n, last_reduction, _prime = dettmanprimes[name]
invocation = ' '.join([binary, name, '64', n, limbwidth, last_reduction, shlex.quote(prime), op, '--no-wide-int', '--shiftr-avoid-uint1'] + [item for fname in fnames for item in ('--hints-file', shlex.quote(fname))])
elif kind == 1:
binary = 'src/ExtractionOCaml/solinas_reduction'
binary_descr = 'Saturated Solinas'
Expand Down
1,423 changes: 1,423 additions & 0 deletions fiat-bedrock2/src/secp256k1_dettman_32.c

Large diffs are not rendered by default.

151 changes: 76 additions & 75 deletions fiat-bedrock2/src/secp256k1_dettman_64.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit c371fb8

Please sign in to comment.