Skip to content

Commit

Permalink
Merge pull request #1550 from mit-plv/dettman_cli
Browse files Browse the repository at this point in the history
CLI stuff for dettman multiplication function
  • Loading branch information
andres-erbsen authored Mar 7, 2023
2 parents 990bf2c + 4411948 commit 008d2b8
Show file tree
Hide file tree
Showing 70 changed files with 38,057 additions and 34,534 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -158,22 +158,26 @@ third_party/openssl-nistz256-amd64/measure
third_party/openssl-nistz256/measure
third_party/curve25519-donna-c64/measure
src/ExtractionHaskell/saturated_solinas
src/ExtractionHaskell/dettman_multiplication
src/ExtractionHaskell/unsaturated_solinas
src/ExtractionHaskell/solinas_reduction
src/ExtractionHaskell/word_by_word_montgomery
src/ExtractionHaskell/base_conversion
src/ExtractionHaskell/*.hs
src/ExtractionOCaml/saturated_solinas
src/ExtractionOCaml/dettman_multiplication
src/ExtractionOCaml/unsaturated_solinas
src/ExtractionOCaml/solinas_reduction
src/ExtractionOCaml/word_by_word_montgomery
src/ExtractionOCaml/base_conversion
src/ExtractionOCaml/bedrock2_saturated_solinas
src/ExtractionOCaml/bedrock2_dettman_multiplication
src/ExtractionOCaml/bedrock2_unsaturated_solinas
src/ExtractionOCaml/bedrock2_solinas_reduction
src/ExtractionOCaml/bedrock2_word_by_word_montgomery
src/ExtractionOCaml/bedrock2_base_conversion
src/ExtractionOCaml/with_bedrock2_saturated_solinas
src/ExtractionOCaml/with_bedrock2_dettman_multiplication
src/ExtractionOCaml/with_bedrock2_unsaturated_solinas
src/ExtractionOCaml/with_bedrock2_solinas_reduction
src/ExtractionOCaml/with_bedrock2_word_by_word_montgomery
Expand Down
2 changes: 1 addition & 1 deletion Makefile.config
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ else
if_SKIP_BEDROCK2 = $(1)
endif

BASE_STANDALONE := unsaturated_solinas saturated_solinas word_by_word_montgomery base_conversion solinas_reduction
BASE_STANDALONE := unsaturated_solinas saturated_solinas dettman_multiplication word_by_word_montgomery base_conversion solinas_reduction
BEDROCK2_STANDALONE := $(addprefix bedrock2_,$(BASE_STANDALONE)) $(addprefix with_bedrock2_,$(BASE_STANDALONE))
STANDALONE := $(BASE_STANDALONE) $(call if_SKIP_BEDROCK2,,$(BEDROCK2_STANDALONE) $(WITH_BEDROCK2_STANDALONE))
PERF_STANDALONE := perf_unsaturated_solinas perf_word_by_word_montgomery
Expand Down
13 changes: 9 additions & 4 deletions Makefile.examples
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,10 @@ UNSATURATED_SOLINAS_FUNCTIONS := carry_mul carry_square carry add sub opp select
FUNCTIONS_FOR_25519 := $(UNSATURATED_SOLINAS_FUNCTIONS) carry_scmul121666
WORD_BY_WORD_MONTGOMERY_FUNCTIONS := mul square add sub opp from_montgomery to_montgomery nonzero selectznz to_bytes from_bytes one msat divstep divstep_precomp
SOLINAS_REDUCTION_FUNCTIONS := mul square
DETTMAN_MULTIPLICATION_FUNCTIONS := mul
UNSATURATED_SOLINAS := src/ExtractionOCaml/unsaturated_solinas
WORD_BY_WORD_MONTGOMERY := src/ExtractionOCaml/word_by_word_montgomery
DETTMAN_MULTIPLICATION := src/ExtractionOCaml/dettman_multiplication
SOLINAS_REDUCTION := src/ExtractionOCaml/solinas_reduction

UNSATURATED_SOLINAS_BASE_FILES := # p224_solinas_64
Expand All @@ -110,21 +112,23 @@ $(eval $(call add_curve_keys,p521_64,UNSATURATED_SOLINAS,'p521',64,'9' '2^521 -
$(eval $(call add_curve_keys,p448_solinas_64,UNSATURATED_SOLINAS,'p448',64,'8' '2^448 - 2^224 - 1',$(UNSATURATED_SOLINAS_FUNCTIONS),UNSATURATED_SOLINAS))
$(eval $(call add_curve_keys,p448_solinas_32,UNSATURATED_SOLINAS,'p448',32,'16' '2^448 - 2^224 - 1',$(UNSATURATED_SOLINAS_FUNCTIONS),UNSATURATED_SOLINAS))
$(foreach bw,64 32,$(eval $(call add_curve_keys,p256_$(bw),WORD_BY_WORD_MONTGOMERY,'p256',$(bw),'2^256 - 2^224 + 2^192 + 2^96 - 1',$(WORD_BY_WORD_MONTGOMERY_FUNCTIONS),WORD_BY_WORD_MONTGOMERY)))
$(foreach bw,64 32,$(eval $(call add_curve_keys,secp256k1_$(bw),WORD_BY_WORD_MONTGOMERY,'secp256k1',$(bw),'2^256 - 2^32 - 977',$(WORD_BY_WORD_MONTGOMERY_FUNCTIONS),WORD_BY_WORD_MONTGOMERY)))
$(foreach bw,64 32,$(eval $(call add_curve_keys,secp256k1_montgomery_$(bw),WORD_BY_WORD_MONTGOMERY,'secp256k1_montgomery',$(bw),'2^256 - 2^32 - 977',$(WORD_BY_WORD_MONTGOMERY_FUNCTIONS),WORD_BY_WORD_MONTGOMERY)))
$(foreach bw,64 32,$(eval $(call add_curve_keys,p384_$(bw),WORD_BY_WORD_MONTGOMERY,'p384',$(bw),'2^384 - 2^128 - 2^96 + 2^32 - 1',$(WORD_BY_WORD_MONTGOMERY_FUNCTIONS),WORD_BY_WORD_MONTGOMERY)))
$(foreach bw,64 32,$(eval $(call add_curve_keys,p224_$(bw),WORD_BY_WORD_MONTGOMERY,'p224',$(bw),'2^224 - 2^96 + 1',$(WORD_BY_WORD_MONTGOMERY_FUNCTIONS),WORD_BY_WORD_MONTGOMERY)))
$(foreach bw,64,$(eval $(call add_curve_keys,p434_$(bw),WORD_BY_WORD_MONTGOMERY,'p434',$(bw),'2^216 * 3^137 - 1',$(WORD_BY_WORD_MONTGOMERY_FUNCTIONS),WORD_BY_WORD_MONTGOMERY))) # 32 is a bit too heavy

$(foreach bw,64 32,$(eval $(call add_curve_keys,curve25519_scalar_$(bw),WORD_BY_WORD_MONTGOMERY,'25519_scalar',$(bw),'2^252 + 27742317777372353535851937790883648493',$(WORD_BY_WORD_MONTGOMERY_FUNCTIONS),WORD_BY_WORD_MONTGOMERY)))
$(foreach bw,64 32,$(eval $(call add_curve_keys,p256_scalar_$(bw),WORD_BY_WORD_MONTGOMERY,'p256_scalar',$(bw),'2^256 - 2^224 + 2^192 - 89188191075325690597107910205041859247',$(WORD_BY_WORD_MONTGOMERY_FUNCTIONS),WORD_BY_WORD_MONTGOMERY)))
$(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_scalar_$(bw),WORD_BY_WORD_MONTGOMERY,'secp256k1_scalar',$(bw),'2^256 - 432420386565659656852420866394968145599',$(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,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_64 p384_64 p224_32 p434_64 p448_solinas_64 secp256k1_32 p256_32 p448_solinas_32 \
curve25519_scalar_64 p256_scalar_64 secp256k1_scalar_64 p384_scalar_64 secp256k1_scalar_32 p256_scalar_32
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 \
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 All @@ -147,6 +151,7 @@ LITE_ZIG_FILES := $(patsubst %,$(ZIG_DIR)%.zig,$(LITE_BASE_FILES))

BEDROCK2_UNSATURATED_SOLINAS := src/ExtractionOCaml/bedrock2_unsaturated_solinas
BEDROCK2_WORD_BY_WORD_MONTGOMERY := src/ExtractionOCaml/bedrock2_word_by_word_montgomery
BEDROCK2_DETTMAN_MULTIPLICATION := src/ExtractionOCaml/bedrock2_dettman_multiplication
BEDROCK2_SOLINAS_REDUCTION := src/ExtractionOCaml/bedrock2_solinas_reduction

C_EXTRA_ARGS := --inline --static --use-value-barrier
Expand Down
309 changes: 309 additions & 0 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 008d2b8

Please sign in to comment.