Skip to content

Commit

Permalink
Add p448_32
Browse files Browse the repository at this point in the history
Disable p448 x32 on backends w/o int128 support

It doesn't work due to #797

<details><summary>Timing Diff</summary>
<p>

```
     Time |   Peak Mem | File Name
----------------------------------------------------------------------------
63m03.86s | 1916264 ko | Total Time / Peak Mem
----------------------------------------------------------------------------
 7m48.59s |  812688 ko | fiat-rust/src/p384_32.rs
 7m43.34s |  930444 ko | fiat-go/src/p384_32.go
 7m37.87s | 1071224 ko | fiat-bedrock2/src/p384_32.c
 7m37.37s | 1065336 ko | fiat-java/src/FiatP384.java
 7m37.03s | 1074936 ko | fiat-c/src/p384_32.c
 0m52.25s |   63728 ko | fiat-bedrock2/src/p521_64.c
 0m50.72s |   69828 ko | fiat-go/src/p521_64.go
 0m50.68s |   62288 ko | fiat-c/src/p521_64.c
 0m50.59s |   62252 ko | fiat-rust/src/p521_64.rs
 0m43.59s | 1594940 ko | ExtractionOCaml/bedrock2_word_by_word_montgomery
 0m42.99s | 1594780 ko | ExtractionOCaml/word_by_word_montgomery
 0m36.77s |   75096 ko | fiat-bedrock2/src/p448_solinas_32.c
 0m31.68s | 1252444 ko | ExtractionOCaml/bedrock2_unsaturated_solinas
 0m31.39s |   45904 ko | fiat-java/src/FiatP448Solinas.java
 0m31.30s | 1213388 ko | ExtractionOCaml/unsaturated_solinas
 0m30.60s |   50876 ko | fiat-go/src/p448_solinas_32.go
 0m30.28s |  190236 ko | fiat-bedrock2/src/p256_32.c
 0m30.13s |   46416 ko | fiat-c/src/p448_solinas_32.c
 0m29.76s | 1053884 ko | ExtractionOCaml/perf_word_by_word_montgomery
 0m29.46s |   51052 ko | fiat-rust/src/p448_solinas_32.rs
 0m29.26s |  190512 ko | fiat-bedrock2/src/secp256k1_32.c
 0m29.02s | 1053672 ko | ExtractionOCaml/bedrock2_base_conversion
 0m28.70s |  196588 ko | fiat-java/src/FiatSecp256K1.java
 0m28.08s |  217476 ko | fiat-java/src/FiatP256.java
 0m27.73s |  198524 ko | fiat-rust/src/secp256k1_32.rs
 0m27.69s | 1916264 ko | ExtractionOCaml/bedrock2_word_by_word_montgomery.ml
 0m27.62s | 1086056 ko | ExtractionOCaml/bedrock2_saturated_solinas
 0m27.26s |  189608 ko | fiat-c/src/secp256k1_32.c
 0m27.26s |  215472 ko | fiat-go/src/p256_32.go
 0m27.13s | 1089140 ko | ExtractionOCaml/base_conversion
 0m26.96s | 1787860 ko | ExtractionOCaml/word_by_word_montgomery.ml
 0m26.82s |  190440 ko | fiat-rust/src/p256_32.rs
 0m26.65s |  189664 ko | fiat-c/src/p256_32.c
 0m26.25s | 1054328 ko | ExtractionOCaml/saturated_solinas
 0m25.68s | 1086780 ko | ExtractionOCaml/perf_unsaturated_solinas
 0m25.54s |  209344 ko | fiat-go/src/secp256k1_32.go
 0m23.53s |   52116 ko | fiat-bedrock2/src/p448_solinas_64.c
 0m22.64s |  118728 ko | fiat-bedrock2/src/p434_64.c
 0m22.43s |   46136 ko | fiat-go/src/p448_solinas_64.go
 0m22.15s |   46056 ko | fiat-rust/src/p448_solinas_64.rs
 0m22.05s |   45892 ko | fiat-c/src/p448_solinas_64.c
 0m20.98s | 1585224 ko | ExtractionOCaml/bedrock2_unsaturated_solinas.ml
 0m20.27s |  123684 ko | fiat-rust/src/p434_64.rs
 0m19.23s |  131440 ko | fiat-c/src/p434_64.c
 0m19.17s | 1531960 ko | ExtractionOCaml/unsaturated_solinas.ml
 0m18.86s |  123072 ko | fiat-go/src/p434_64.go
 0m17.83s | 1729860 ko | ExtractionOCaml/perf_word_by_word_montgomery.ml
 0m17.82s | 1490644 ko | ExtractionOCaml/bedrock2_base_conversion.ml
 0m16.85s | 1507296 ko | ExtractionOCaml/bedrock2_saturated_solinas.ml
 0m16.79s | 1762800 ko | ExtractionOCaml/perf_unsaturated_solinas.ml
 0m16.59s | 1512576 ko | ExtractionOCaml/saturated_solinas.ml
 0m16.46s | 1483712 ko | ExtractionOCaml/base_conversion.ml
 0m12.39s |  129480 ko | fiat-go/src/p224_32.go
 0m12.38s |  116660 ko | fiat-bedrock2/src/p224_32.c
 0m12.38s |  115040 ko | fiat-java/src/FiatP224.java
 0m12.22s |  115064 ko | fiat-rust/src/p224_32.rs
 0m12.03s |  115652 ko | fiat-c/src/p224_32.c
 0m10.38s |   82772 ko | fiat-bedrock2/src/p384_64.c
 0m08.92s |   79460 ko | fiat-rust/src/p384_64.rs
 0m08.64s |   78952 ko | fiat-c/src/p384_64.c
 0m08.55s |   79640 ko | fiat-go/src/p384_64.go
 0m04.12s |   33240 ko | fiat-bedrock2/src/curve25519_32.c
 0m03.54s |   25924 ko | fiat-java/src/FiatCurve25519.java
 0m03.49s |   25636 ko | fiat-go/src/curve25519_32.go
 0m03.49s |   24396 ko | fiat-rust/src/curve25519_32.rs
 0m03.47s |   25820 ko | fiat-c/src/curve25519_32.c
 0m02.37s |   25400 ko | fiat-bedrock2/src/curve25519_64.c
 0m02.33s |   23336 ko | fiat-go/src/curve25519_64.go
 0m02.24s |   24212 ko | fiat-rust/src/curve25519_64.rs
 0m02.23s |   24088 ko | fiat-c/src/curve25519_64.c
 0m02.05s |  771148 ko | Bedrock/StandaloneOCamlMain.vo
 0m02.03s |   34112 ko | fiat-bedrock2/src/secp256k1_64.c
 0m02.00s |  759356 ko | Rewriter/PerfTesting/StandaloneOCamlMain.vo
 0m01.97s |   33988 ko | fiat-bedrock2/src/p224_64.c
 0m01.94s |   32776 ko | fiat-go/src/secp256k1_64.go
 0m01.92s |   32964 ko | fiat-go/src/p224_64.go
 0m01.90s |   31848 ko | fiat-bedrock2/src/p256_64.c
 0m01.86s |   33052 ko | fiat-rust/src/secp256k1_64.rs
 0m01.84s |   32692 ko | fiat-go/src/p256_64.go
 0m01.82s |   32744 ko | fiat-c/src/secp256k1_64.c
 0m01.82s |   33900 ko | fiat-rust/src/p224_64.rs
 0m01.79s |   33916 ko | fiat-c/src/p224_64.c
 0m01.72s |   34012 ko | fiat-rust/src/p256_64.rs
 0m01.70s |  745148 ko | StandaloneOCamlMain.vo
 0m01.62s |   35656 ko | fiat-c/src/p256_64.c
 0m00.43s |   20536 ko | fiat-bedrock2/src/poly1305_32.c
 0m00.38s |   16816 ko | fiat-java/src/FiatPoly1305.java
 0m00.37s |   16936 ko | fiat-go/src/poly1305_32.go
 0m00.37s |   17920 ko | fiat-rust/src/poly1305_32.rs
 0m00.35s |   18024 ko | fiat-c/src/poly1305_32.c
 0m00.31s |   17700 ko | fiat-go/src/poly1305_64.go
 0m00.29s |   18852 ko | fiat-bedrock2/src/poly1305_64.c
 0m00.26s |   16880 ko | fiat-c/src/poly1305_64.c
 0m00.26s |   16816 ko | fiat-rust/src/poly1305_64.rs

```
</p>
  • Loading branch information
JasonGross committed May 21, 2020
1 parent d43df58 commit ccf644f
Show file tree
Hide file tree
Showing 3 changed files with 3,339 additions and 12 deletions.
63 changes: 51 additions & 12 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -124,33 +124,37 @@ GO_DIR := fiat-go/src/
JAVA_DIR := fiat-java/src/
JAVADOC_DIR := fiat-java/doc/

UNSATURATED_SOLINAS_BASE_FILES := curve25519_64 curve25519_32 poly1305_64 poly1305_32 p521_64 p448_solinas_64 # p224_solinas_64
UNSATURATED_SOLINAS_BASE_FILES := curve25519_64 curve25519_32 poly1305_64 poly1305_32 p521_64 p448_solinas_64 p448_solinas_32 # p224_solinas_64
WORD_BY_WORD_MONTGOMERY_BASE_FILES := p256_64 p256_32 p384_64 p384_32 secp256k1_64 secp256k1_32 p224_64 p224_32 p434_64 # p434_32
ALL_BASE_FILES := $(UNSATURATED_SOLINAS_BASE_FILES) $(WORD_BY_WORD_MONTGOMERY_BASE_FILES)

BASE_FILES_NEEDING_INT128 := p448_solinas_32

UNSATURATED_SOLINAS_C_FILES := $(patsubst %,$(C_DIR)%.c,$(UNSATURATED_SOLINAS_BASE_FILES))
WORD_BY_WORD_MONTGOMERY_C_FILES := $(patsubst %,$(C_DIR)%.c,$(WORD_BY_WORD_MONTGOMERY_BASE_FILES))
ALL_C_FILES := $(patsubst %,$(C_DIR)%.c,$(ALL_BASE_FILES))
ALL_C_FILES := $(UNSATURATED_SOLINAS_C_FILES) $(WORD_BY_WORD_MONTGOMERY_C_FILES)

UNSATURATED_SOLINAS_BEDROCK2_FILES := $(patsubst %,$(BEDROCK2_DIR)%.c,$(UNSATURATED_SOLINAS_BASE_FILES))
WORD_BY_WORD_MONTGOMERY_BEDROCK2_FILES := $(patsubst %,$(BEDROCK2_DIR)%.c,$(WORD_BY_WORD_MONTGOMERY_BASE_FILES))
ALL_BEDROCK2_FILES := $(patsubst %,$(BEDROCK2_DIR)%.c,$(ALL_BASE_FILES))
UNSATURATED_SOLINAS_BEDROCK2_FILES := $(patsubst %,$(BEDROCK2_DIR)%.c,$(filter-out $(BASE_FILES_NEEDING_INT128),$(UNSATURATED_SOLINAS_BASE_FILES)))
WORD_BY_WORD_MONTGOMERY_BEDROCK2_FILES := $(patsubst %,$(BEDROCK2_DIR)%.c,$(filter-out $(BASE_FILES_NEEDING_INT128),$(WORD_BY_WORD_MONTGOMERY_BASE_FILES)))
ALL_BEDROCK2_FILES := $(UNSATURATED_SOLINAS_BEDROCK2_FILES) $(WORD_BY_WORD_MONTGOMERY_BEDROCK2_FILES)

UNSATURATED_SOLINAS_RUST_FILES := $(patsubst %,$(RS_DIR)%.rs,$(UNSATURATED_SOLINAS_BASE_FILES))
WORD_BY_WORD_MONTGOMERY_RUST_FILES := $(patsubst %,$(RS_DIR)%.rs,$(WORD_BY_WORD_MONTGOMERY_BASE_FILES))
ALL_RUST_FILES := $(patsubst %,$(RS_DIR)%.rs,$(ALL_BASE_FILES))
ALL_RUST_FILES := $(UNSATURATED_SOLINAS_RUST_FILES) $(WORD_BY_WORD_MONTGOMERY_RUST_FILES)

UNSATURATED_SOLINAS_GO_FILES := $(patsubst %,$(GO_DIR)%.go,$(UNSATURATED_SOLINAS_BASE_FILES))
WORD_BY_WORD_MONTGOMERY_GO_FILES := $(patsubst %,$(GO_DIR)%.go,$(WORD_BY_WORD_MONTGOMERY_BASE_FILES))
ALL_GO_FILES := $(patsubst %,$(GO_DIR)%.go,$(ALL_BASE_FILES))
UNSATURATED_SOLINAS_GO_FILES := $(patsubst %,$(GO_DIR)%.go,$(filter-out $(BASE_FILES_NEEDING_INT128),$(UNSATURATED_SOLINAS_BASE_FILES)))
WORD_BY_WORD_MONTGOMERY_GO_FILES := $(patsubst %,$(GO_DIR)%.go,$(filter-out $(BASE_FILES_NEEDING_INT128),$(WORD_BY_WORD_MONTGOMERY_BASE_FILES)))
ALL_GO_FILES := $(UNSATURATED_SOLINAS_GO_FILES) $(WORD_BY_WORD_MONTGOMERY_GO_FILES)

# Java only really supports 32-bit builds, because we have neither 64x64->64x64 multiplication, nor uint128
# Java also requires that class names match file names
# from https://stackoverflow.com/q/42925485/377022
to_title_case = $(shell echo '$(1)' | sed 's/.*/\L&/; s/[a-z]*/\u&/g')
JAVA_RENAME = $(foreach i,$(patsubst %_32,%,$(filter %_32,$(1))),Fiat$(call to_title_case,$(subst _, ,$(i))))
UNSATURATED_SOLINAS_JAVA_FILES := $(patsubst %,$(JAVA_DIR)%.java,$(call JAVA_RENAME,$(UNSATURATED_SOLINAS_BASE_FILES)))
WORD_BY_WORD_MONTGOMERY_JAVA_FILES := $(patsubst %,$(JAVA_DIR)%.java,$(call JAVA_RENAME,$(WORD_BY_WORD_MONTGOMERY_BASE_FILES)))
empty=
space=$(empty) $(empty)
JAVA_RENAME = $(foreach i,$(patsubst %_32,%,$(filter %_32,$(1))),Fiat$(subst $(space),,$(call to_title_case,$(subst _, ,$(i)))))
UNSATURATED_SOLINAS_JAVA_FILES := $(patsubst %,$(JAVA_DIR)%.java,$(call JAVA_RENAME,$(filter-out $(BASE_FILES_NEEDING_INT128),$(UNSATURATED_SOLINAS_BASE_FILES))))
WORD_BY_WORD_MONTGOMERY_JAVA_FILES := $(patsubst %,$(JAVA_DIR)%.java,$(call JAVA_RENAME,$(filter-out $(BASE_FILES_NEEDING_INT128),$(WORD_BY_WORD_MONTGOMERY_BASE_FILES))))
ALL_JAVA_FILES := $(UNSATURATED_SOLINAS_JAVA_FILES) $(WORD_BY_WORD_MONTGOMERY_JAVA_FILES)

UNSATURATED_SOLINAS_FUNCTIONS := carry_mul carry_square carry add sub opp selectznz to_bytes from_bytes
Expand Down Expand Up @@ -445,6 +449,13 @@ $(C_DIR)p448_solinas_64.c : $(C_DIR)p448_solinas_%.c :
$(HIDE)($(TIMER) $(UNSATURATED_SOLINAS) --static 'p448' '8' '2^448 - 2^224 - 1' '$*' $(UNSATURATED_SOLINAS_FUNCTIONS) && touch $@.ok) > $@.tmp
$(HIDE)(rm $@.ok && mv $@.tmp $@) || ( RV=$$?; cat $@.tmp; exit $$RV )

# 2^448 - 2^224 - 1
$(C_DIR)p448_solinas_32.c : $(C_DIR)p448_solinas_%.c :
$(SHOW)'SYNTHESIZE > $@'
$(HIDE)rm -f $@.ok
$(HIDE)($(TIMER) $(UNSATURATED_SOLINAS) --static 'p448' '16' '2^448 - 2^224 - 1' '$*' $(UNSATURATED_SOLINAS_FUNCTIONS) && touch $@.ok) > $@.tmp
$(HIDE)(rm $@.ok && mv $@.tmp $@) || ( RV=$$?; cat $@.tmp; exit $$RV )

# 2^256 - 2^224 + 2^192 + 2^96 - 1
$(C_DIR)p256_64.c $(C_DIR)p256_32.c : $(C_DIR)p256_%.c :
$(SHOW)'SYNTHESIZE > $@'
Expand Down Expand Up @@ -538,6 +549,13 @@ $(BEDROCK2_DIR)p448_solinas_64.c : $(BEDROCK2_DIR)p448_solinas_%.c :
$(HIDE)($(TIMER) $(BEDROCK2_UNSATURATED_SOLINAS) --lang=bedrock2 $(BEDROCK2_ARGS) 'p448' '8' '2^448 - 2^224 - 1' '$*' $(UNSATURATED_SOLINAS_FUNCTIONS) && touch $@.ok) > $@.tmp
$(HIDE)(rm $@.ok && mv $@.tmp $@) || ( RV=$$?; cat $@.tmp; exit $$RV )

# 2^448 - 2^224 - 1
$(BEDROCK2_DIR)p448_solinas_32.c : $(BEDROCK2_DIR)p448_solinas_%.c :
$(SHOW)'SYNTHESIZE > $@'
$(HIDE)rm -f $@.ok
$(HIDE)($(TIMER) $(BEDROCK2_UNSATURATED_SOLINAS) --lang=bedrock2 $(BEDROCK2_ARGS) 'p448' '16' '2^448 - 2^224 - 1' '$*' $(UNSATURATED_SOLINAS_FUNCTIONS) && touch $@.ok) > $@.tmp
$(HIDE)(rm $@.ok && mv $@.tmp $@) || ( RV=$$?; cat $@.tmp; exit $$RV )

# 2^256 - 2^224 + 2^192 + 2^96 - 1
$(BEDROCK2_DIR)p256_64.c $(BEDROCK2_DIR)p256_32.c : $(BEDROCK2_DIR)p256_%.c :
$(SHOW)'SYNTHESIZE > $@'
Expand Down Expand Up @@ -631,6 +649,13 @@ $(RS_DIR)p448_solinas_64.rs : $(RS_DIR)p448_solinas_%.rs :
$(HIDE)($(TIMER) $(UNSATURATED_SOLINAS) --lang=Rust 'p448' '8' '2^448 - 2^224 - 1' '$*' $(UNSATURATED_SOLINAS_FUNCTIONS) && touch $@.ok) > $@.tmp
$(HIDE)(rm $@.ok && mv $@.tmp $@) || ( RV=$$?; cat $@.tmp; exit $$RV )

# 2^448 - 2^224 - 1
$(RS_DIR)p448_solinas_32.rs : $(RS_DIR)p448_solinas_%.rs :
$(SHOW)'SYNTHESIZE > $@'
$(HIDE)rm -f $@.ok
$(HIDE)($(TIMER) $(UNSATURATED_SOLINAS) --lang=Rust 'p448' '16' '2^448 - 2^224 - 1' '$*' $(UNSATURATED_SOLINAS_FUNCTIONS) && touch $@.ok) > $@.tmp
$(HIDE)(rm $@.ok && mv $@.tmp $@) || ( RV=$$?; cat $@.tmp; exit $$RV )

# 2^256 - 2^224 + 2^192 + 2^96 - 1
$(RS_DIR)p256_64.rs $(RS_DIR)p256_32.rs : $(RS_DIR)p256_%.rs :
$(SHOW)'SYNTHESIZE > $@'
Expand Down Expand Up @@ -732,6 +757,13 @@ $(GO_DIR)p448_solinas_64.go : $(GO_DIR)p448_solinas_%.go :
$(HIDE)($(TIMER) $(UNSATURATED_SOLINAS) --lang=Go $(GO_EXTRA_ARGS_$*) 'p448' '8' '2^448 - 2^224 - 1' '$*' $(UNSATURATED_SOLINAS_FUNCTIONS) && touch $@.ok) > $@.tmp
$(HIDE)(rm $@.ok && mv $@.tmp $@) || ( RV=$$?; cat $@.tmp; exit $$RV )

# 2^448 - 2^224 - 1
$(GO_DIR)p448_solinas_32.go : $(GO_DIR)p448_solinas_%.go :
$(SHOW)'SYNTHESIZE > $@'
$(HIDE)rm -f $@.ok
$(HIDE)($(TIMER) $(UNSATURATED_SOLINAS) --lang=Go $(GO_EXTRA_ARGS_$*) 'p448' '16' '2^448 - 2^224 - 1' '$*' $(UNSATURATED_SOLINAS_FUNCTIONS) && touch $@.ok) > $@.tmp
$(HIDE)(rm $@.ok && mv $@.tmp $@) || ( RV=$$?; cat $@.tmp; exit $$RV )

# 2^256 - 2^224 + 2^192 + 2^96 - 1
$(GO_DIR)p256_64.go $(GO_DIR)p256_32.go : $(GO_DIR)p256_%.go :
$(SHOW)'SYNTHESIZE > $@'
Expand Down Expand Up @@ -797,6 +829,13 @@ $(JAVA_DIR)FiatPoly1305.java : $(JAVA_DIR)Fiat%.java :
$(HIDE)($(TIMER) $(UNSATURATED_SOLINAS) --lang=Java $(JAVA_EXTRA_ARGS_32) '$*' '5' '2^130 - 5' '32' $(UNSATURATED_SOLINAS_FUNCTIONS) && touch $@.ok) > $@.tmp
$(HIDE)(rm $@.ok && mv $@.tmp $@) || ( RV=$$?; cat $@.tmp; exit $$RV )

# 2^448 - 2^224 - 1
$(JAVA_DIR)FiatP448Solinas.java : $(JAVA_DIR)Fiat%.java :
$(SHOW)'SYNTHESIZE > $@'
$(HIDE)rm -f $@.ok
$(HIDE)($(TIMER) $(UNSATURATED_SOLINAS) --lang=Java $(JAVA_EXTRA_ARGS_32) '$*' '16' '2^448 - 2^224 - 1' '32' $(UNSATURATED_SOLINAS_FUNCTIONS) && touch $@.ok) > $@.tmp
$(HIDE)(rm $@.ok && mv $@.tmp $@) || ( RV=$$?; cat $@.tmp; exit $$RV )

# 2^256 - 2^224 + 2^192 + 2^96 - 1
$(JAVA_DIR)FiatP256.java : $(JAVA_DIR)Fiat%.java :
$(SHOW)'SYNTHESIZE > $@'
Expand Down
Loading

0 comments on commit ccf644f

Please sign in to comment.