| @@ -11,6 +11,7 @@ MACHINE := $(shell uname -m) | |||||
| BUILD_ASM = build/obj | BUILD_ASM = build/obj | ||||
| BUILD_OBJ = build/obj | BUILD_OBJ = build/obj | ||||
| BUILD_C = build/obj | BUILD_C = build/obj | ||||
| BUILD_H = build/obj/include | |||||
| BUILD_PY = build/obj | BUILD_PY = build/obj | ||||
| BUILD_LIB = build/lib | BUILD_LIB = build/lib | ||||
| BUILD_INC = build/include | BUILD_INC = build/include | ||||
| @@ -40,8 +41,8 @@ endif | |||||
| WARNFLAGS = -pedantic -Wall -Wextra -Werror -Wunreachable-code \ | WARNFLAGS = -pedantic -Wall -Wextra -Werror -Wunreachable-code \ | ||||
| -Wmissing-declarations -Wunused-function -Wno-overlength-strings $(EXWARN) | -Wmissing-declarations -Wunused-function -Wno-overlength-strings $(EXWARN) | ||||
| INCFLAGS = -Isrc/include -Ibuild/include | |||||
| PUB_INCFLAGS = -Ibuild/include | |||||
| INCFLAGS = -Isrc/include -I$(BUILD_INC) -I$(BUILD_H) | |||||
| PUB_INCFLAGS = -I$(BUILD_INC) | |||||
| LANGFLAGS = -std=c99 -fno-strict-aliasing | LANGFLAGS = -std=c99 -fno-strict-aliasing | ||||
| LANGXXFLAGS = -fno-strict-aliasing | LANGXXFLAGS = -fno-strict-aliasing | ||||
| GENFLAGS = -ffunction-sections -fdata-sections -fvisibility=hidden -fomit-frame-pointer -fPIC | GENFLAGS = -ffunction-sections -fdata-sections -fvisibility=hidden -fomit-frame-pointer -fPIC | ||||
| @@ -124,7 +125,7 @@ endif | |||||
| # Create all the build subdirectories | # Create all the build subdirectories | ||||
| $(BUILD_OBJ)/timestamp: | $(BUILD_OBJ)/timestamp: | ||||
| mkdir -p $(BUILD_ASM) $(BUILD_OBJ) $(BUILD_C) $(BUILD_PY) \ | mkdir -p $(BUILD_ASM) $(BUILD_OBJ) $(BUILD_C) $(BUILD_PY) \ | ||||
| $(BUILD_LIB) $(BUILD_INC) $(BUILD_BIN) $(BUILD_IBIN) $(BUILD_INC)/decaf | |||||
| $(BUILD_LIB) $(BUILD_INC) $(BUILD_BIN) $(BUILD_IBIN) $(BUILD_H) $(BUILD_INC)/decaf | |||||
| touch $@ | touch $@ | ||||
| $(BUILD_OBJ)/%.o: $(BUILD_ASM)/%.s | $(BUILD_OBJ)/%.o: $(BUILD_ASM)/%.s | ||||
| @@ -133,7 +134,7 @@ $(BUILD_OBJ)/%.o: $(BUILD_ASM)/%.s | |||||
| gen_headers: $(GEN_HEADERS) | gen_headers: $(GEN_HEADERS) | ||||
| $(GEN_HEADERS): src/gen_headers/*.py src/public_include/decaf/* | $(GEN_HEADERS): src/gen_headers/*.py src/public_include/decaf/* | ||||
| python -B src/gen_headers/main.py --hpre=$(BUILD_INC) --cpre=$(BUILD_C) | |||||
| python -B src/gen_headers/main.py --hpre=$(BUILD_INC) --ihpre=$(BUILD_H) --cpre=$(BUILD_C) | |||||
| cp src/public_include/decaf/* $(BUILD_INC)/decaf/ | cp src/public_include/decaf/* $(BUILD_INC)/decaf/ | ||||
| ################################################################ | ################################################################ | ||||
| @@ -145,17 +146,18 @@ COMPONENTS_OF_$(1) = $$(BUILD_OBJ)/$(1)_impl.o $$(BUILD_OBJ)/$(1)_arithmetic.o | |||||
| LIBCOMPONENTS += $$(COMPONENTS_OF_$(1)) | LIBCOMPONENTS += $$(COMPONENTS_OF_$(1)) | ||||
| $$(BUILD_ASM)/$(1)_arithmetic.s: src/$(1)/f_arithmetic.c $$(HEADERS) | $$(BUILD_ASM)/$(1)_arithmetic.s: src/$(1)/f_arithmetic.c $$(HEADERS) | ||||
| $$(CC) $$(CFLAGS) -I src/$(1) -I src/$(1)/$(2) -S -c -o $$@ $$< | |||||
| $$(CC) $$(CFLAGS) -I src/$(1) -I src/$(1)/$(2) -I $(BUILD_H)/$(1) -I $(BUILD_H)/$(1)/$(2) -S -c -o $$@ $$< | |||||
| $$(BUILD_ASM)/$(1)_impl.s: src/$(1)/$(2)/f_impl.c $$(HEADERS) | $$(BUILD_ASM)/$(1)_impl.s: src/$(1)/$(2)/f_impl.c $$(HEADERS) | ||||
| $$(CC) $$(CFLAGS) -I src/$(1) -I src/$(1)/$(2) -S -c -o $$@ $$< | |||||
| $$(CC) $$(CFLAGS) -I src/$(1) -I src/$(1)/$(2) -I $(BUILD_H)/$(1) -I $(BUILD_H)/$(1)/$(2) -S -c -o $$@ $$< | |||||
| endef | endef | ||||
| ################################################################ | ################################################################ | ||||
| # Per-field, per-curve code: call with curve, field | # Per-field, per-curve code: call with curve, field | ||||
| ################################################################ | ################################################################ | ||||
| define define_curve | define define_curve | ||||
| $$(BUILD_IBIN)/decaf_gen_tables_$(1): $$(BUILD_OBJ)/decaf_gen_tables_$(1).o $$(BUILD_OBJ)/decaf_$(1).o $$(BUILD_OBJ)/utils.o \ | |||||
| $$(BUILD_IBIN)/decaf_gen_tables_$(1): $$(BUILD_OBJ)/decaf_gen_tables_$(1).o \ | |||||
| $$(BUILD_OBJ)/decaf_$(1).o $$(BUILD_OBJ)/utils.o \ | |||||
| $$(COMPONENTS_OF_$(2)) | $$(COMPONENTS_OF_$(2)) | ||||
| $$(LD) $$(LDFLAGS) -o $$@ $$^ | $$(LD) $$(LDFLAGS) -o $$@ $$^ | ||||
| @@ -165,20 +167,24 @@ $$(BUILD_C)/decaf_tables_$(1).c: $$(BUILD_IBIN)/decaf_gen_tables_$(1) | |||||
| $$(BUILD_ASM)/decaf_tables_$(1).s: $$(BUILD_C)/decaf_tables_$(1).c $$(HEADERS) | $$(BUILD_ASM)/decaf_tables_$(1).s: $$(BUILD_C)/decaf_tables_$(1).c $$(HEADERS) | ||||
| $$(CC) $$(CFLAGS) -S -c -o $$@ $$< \ | $$(CC) $$(CFLAGS) -S -c -o $$@ $$< \ | ||||
| -I src/curve_$(1)/ -I src/$(2) -I src/$(2)/$$(ARCH_FOR_$(2)) \ | -I src/curve_$(1)/ -I src/$(2) -I src/$(2)/$$(ARCH_FOR_$(2)) \ | ||||
| -I $(BUILD_H)/curve_$(1) -I $(BUILD_H)/$(2) -I $(BUILD_H)/$(2)/$$(ARCH_FOR_$(2)) | |||||
| $$(BUILD_ASM)/decaf_gen_tables_$(1).s: src/decaf_gen_tables.c $$(HEADERS) | $$(BUILD_ASM)/decaf_gen_tables_$(1).s: src/decaf_gen_tables.c $$(HEADERS) | ||||
| $$(CC) $$(CFLAGS) \ | $$(CC) $$(CFLAGS) \ | ||||
| -I src/curve_$(1)/ -I src/$(2) -I src/$(2)/$$(ARCH_FOR_$(2)) \ | |||||
| -I src/curve_$(1) -I src/$(2) -I src/$(2)/$$(ARCH_FOR_$(2)) \ | |||||
| -I $(BUILD_H)/curve_$(1) -I $(BUILD_H)/$(2) -I $(BUILD_H)/$(2)/$$(ARCH_FOR_$(2)) \ | |||||
| -S -c -o $$@ $$< | -S -c -o $$@ $$< | ||||
| $$(BUILD_ASM)/decaf_$(1).s: src/decaf.c $$(HEADERS) | $$(BUILD_ASM)/decaf_$(1).s: src/decaf.c $$(HEADERS) | ||||
| $$(CC) $$(CFLAGS) \ | $$(CC) $$(CFLAGS) \ | ||||
| -I src/curve_$(1)/ -I src/$(2) -I src/$(2)/$$(ARCH_FOR_$(2)) \ | -I src/curve_$(1)/ -I src/$(2) -I src/$(2)/$$(ARCH_FOR_$(2)) \ | ||||
| -I $(BUILD_H)/curve_$(1) -I $(BUILD_H)/$(2) -I $(BUILD_H)/$(2)/$$(ARCH_FOR_$(2)) \ | |||||
| -S -c -o $$@ $$< | -S -c -o $$@ $$< | ||||
| $$(BUILD_ASM)/decaf_crypto_$(1).s: src/decaf_crypto.c $$(HEADERS) | $$(BUILD_ASM)/decaf_crypto_$(1).s: src/decaf_crypto.c $$(HEADERS) | ||||
| $$(CC) $$(CFLAGS) \ | $$(CC) $$(CFLAGS) \ | ||||
| -I src/curve_$(1)/ \ | -I src/curve_$(1)/ \ | ||||
| -I $(BUILD_H)/curve_$(1) \ | |||||
| -S -c -o $$@ $$< | -S -c -o $$@ $$< | ||||
| LIBCOMPONENTS += $$(BUILD_OBJ)/decaf_$(1).o $$(BUILD_OBJ)/decaf_tables_$(1).o | LIBCOMPONENTS += $$(BUILD_OBJ)/decaf_$(1).o $$(BUILD_OBJ)/decaf_tables_$(1).o | ||||
| @@ -1,6 +1,8 @@ | |||||
| from gen_file import gen_file | from gen_file import gen_file | ||||
| crypto_h = gen_file( | crypto_h = gen_file( | ||||
| public = True, | |||||
| per = "curve", | |||||
| name = "decaf/crypto_%(shortname)s.h", | name = "decaf/crypto_%(shortname)s.h", | ||||
| doc = """ | doc = """ | ||||
| Example Decaf crypto routines. | Example Decaf crypto routines. | ||||
| @@ -1,6 +1,8 @@ | |||||
| from gen_file import gen_file | from gen_file import gen_file | ||||
| crypto_hxx = gen_file( | crypto_hxx = gen_file( | ||||
| public = True, | |||||
| per = "curve", | |||||
| name = "decaf/crypto_%(shortname)s.hxx", | name = "decaf/crypto_%(shortname)s.hxx", | ||||
| doc = """ | doc = """ | ||||
| Example Decaf cyrpto routines, C++ wrapper. | Example Decaf cyrpto routines, C++ wrapper. | ||||
| @@ -1,3 +1,20 @@ | |||||
| field_data = { | |||||
| "p25519" : { | |||||
| "gf_desc" : "2^255 - 19", | |||||
| "modulus" : 2**255 - 19, | |||||
| "gf_shortname" : "25519", | |||||
| "gf_impl_bits" : 320, | |||||
| "gf_lit_limb_bits" : 51 | |||||
| }, | |||||
| "p448" : { | |||||
| "gf_desc" : "2^448 - 2^224 - 1", | |||||
| "modulus" : 2**448 - 2**224 - 1, | |||||
| "gf_shortname" : "448", | |||||
| "gf_impl_bits" : 512, | |||||
| "gf_lit_limb_bits" : 56 | |||||
| } | |||||
| } | |||||
| curve_data = { | curve_data = { | ||||
| "Curve25519" : { | "Curve25519" : { | ||||
| "iso_to" : "Curve25519", | "iso_to" : "Curve25519", | ||||
| @@ -7,9 +24,8 @@ curve_data = { | |||||
| "longnum" : "25519", | "longnum" : "25519", | ||||
| "c_ns" : "decaf_255", | "c_ns" : "decaf_255", | ||||
| "cofactor" : 8, | "cofactor" : 8, | ||||
| "modulus" : 2**255 - 19, | |||||
| "scalar_bits" : 253, | |||||
| "gf_bits" : 320 | |||||
| "field" : "p25519", | |||||
| "scalar_bits" : 253 | |||||
| }, | }, | ||||
| "Ed448" : { | "Ed448" : { | ||||
| "iso_to" : "Ed448-Goldilocks", | "iso_to" : "Ed448-Goldilocks", | ||||
| @@ -19,9 +35,8 @@ curve_data = { | |||||
| "longnum" : "448", | "longnum" : "448", | ||||
| "c_ns" : "decaf_448", | "c_ns" : "decaf_448", | ||||
| "cofactor" : 4, | "cofactor" : 4, | ||||
| "modulus" : 2**448 - 2**224 - 1, | |||||
| "scalar_bits" : 446, | |||||
| "gf_bits" : 512 | |||||
| "field" : "p448", | |||||
| "scalar_bits" : 446 | |||||
| } | } | ||||
| } | } | ||||
| @@ -33,7 +48,15 @@ def ceil_log2(x): | |||||
| out += 1 | out += 1 | ||||
| return out | return out | ||||
| for field,data in field_data.iteritems(): | |||||
| if "gf_bits" not in data: | |||||
| data["gf_bits"] = ceil_log2(data["modulus"]) | |||||
| for curve,data in curve_data.iteritems(): | for curve,data in curve_data.iteritems(): | ||||
| for key in field_data[data["field"]]: | |||||
| if key not in data: | |||||
| data[key] = field_data[data["field"]][key] | |||||
| if "modulus_type" not in data: | if "modulus_type" not in data: | ||||
| mod = data["modulus"] | mod = data["modulus"] | ||||
| ptwo = 2 | ptwo = 2 | ||||
| @@ -1,6 +1,8 @@ | |||||
| from gen_file import gen_file | from gen_file import gen_file | ||||
| decaf_h = gen_file( | decaf_h = gen_file( | ||||
| public = True, | |||||
| per = "curve", | |||||
| name = "decaf/%(c_ns)s.h", | name = "decaf/%(c_ns)s.h", | ||||
| doc = """@brief A group of prime order p, based on %(iso_to)s.""", | doc = """@brief A group of prime order p, based on %(iso_to)s.""", | ||||
| code = """ | code = """ | ||||
| @@ -11,7 +13,7 @@ extern "C" { | |||||
| #endif | #endif | ||||
| /** @cond internal */ | /** @cond internal */ | ||||
| #define %(C_NS)s_LIMBS (%(gf_bits)d/DECAF_WORD_BITS) | |||||
| #define %(C_NS)s_LIMBS (%(gf_impl_bits)d/DECAF_WORD_BITS) | |||||
| #define %(C_NS)s_SCALAR_LIMBS ((%(scalar_bits)d-1)/DECAF_WORD_BITS+1) | #define %(C_NS)s_SCALAR_LIMBS ((%(scalar_bits)d-1)/DECAF_WORD_BITS+1) | ||||
| /** @endcond */ | /** @endcond */ | ||||
| @@ -1,6 +1,8 @@ | |||||
| from gen_file import gen_file | from gen_file import gen_file | ||||
| decaf_hxx = gen_file( | decaf_hxx = gen_file( | ||||
| public = True, | |||||
| per = "curve", | |||||
| name = "decaf/%(c_ns)s.hxx", | name = "decaf/%(c_ns)s.hxx", | ||||
| doc = """ | doc = """ | ||||
| A group of prime order p, C++ wrapper. | A group of prime order p, C++ wrapper. | ||||
| @@ -0,0 +1,30 @@ | |||||
| from gen_file import gen_file | |||||
| f_field_h = gen_file( | |||||
| public = False, | |||||
| per = "field", | |||||
| name = "p%(gf_shortname)s/f_field.h", | |||||
| doc = """@brief Field-specific code for %(gf_desc)s.""", | |||||
| code = """ | |||||
| #include "constant_time.h" | |||||
| #include <string.h> | |||||
| #include "f_impl.h" | |||||
| #define GF_LIT_LIMB_BITS %(gf_lit_limb_bits)d | |||||
| #define GF_BITS %(gf_bits)d | |||||
| #define gf gf_%(gf_shortname)s_t | |||||
| #define gf_s gf_%(gf_shortname)s_s | |||||
| #define gf_mul gf_%(gf_shortname)s_mul | |||||
| #define gf_sqr gf_%(gf_shortname)s_sqr | |||||
| #define gf_add_RAW gf_%(gf_shortname)s_add_RAW | |||||
| #define gf_sub_RAW gf_%(gf_shortname)s_sub_RAW | |||||
| #define gf_mulw gf_%(gf_shortname)s_mulw | |||||
| #define gf_bias gf_%(gf_shortname)s_bias | |||||
| #define gf_isr gf_%(gf_shortname)s_isr | |||||
| #define gf_weak_reduce gf_%(gf_shortname)s_weak_reduce | |||||
| #define gf_strong_reduce gf_%(gf_shortname)s_strong_reduce | |||||
| #define gf_serialize gf_%(gf_shortname)s_serialize | |||||
| #define gf_deserialize gf_%(gf_shortname)s_deserialize | |||||
| #define SQRT_MINUS_ONE P%(gf_shortname)s_SQRT_MINUS_ONE /* might not be defined */ | |||||
| """) | |||||
| @@ -1,4 +1,4 @@ | |||||
| from curve_data import curve_data | |||||
| from curve_data import curve_data, field_data | |||||
| from textwrap import dedent | from textwrap import dedent | ||||
| def redoc(filename,doc,author): | def redoc(filename,doc,author): | ||||
| @@ -22,10 +22,12 @@ def redoc(filename,doc,author): | |||||
| gend_files = {} | gend_files = {} | ||||
| def gen_file(name,doc,code,author="Mike Hamburg"): | |||||
| per_map = {"field":field_data, "curve":curve_data, "global":{"global":{}} } | |||||
| def gen_file(public,name,doc,code,per="global",author="Mike Hamburg"): | |||||
| is_header = name.endswith(".h") or name.endswith(".hxx") or name.endswith(".h++") | is_header = name.endswith(".h") or name.endswith(".hxx") or name.endswith(".h++") | ||||
| for curve,data in curve_data.iteritems(): | |||||
| for curve,data in per_map[per].iteritems(): | |||||
| ns_name = name % data | ns_name = name % data | ||||
| _,_,name_base = ns_name.rpartition("/") | _,_,name_base = ns_name.rpartition("/") | ||||
| @@ -44,8 +46,5 @@ def gen_file(name,doc,code,author="Mike Hamburg"): | |||||
| #endif /* %(header_guard)s */ | #endif /* %(header_guard)s */ | ||||
| """) % { "header_guard" : header_guard, "code": ns_code } | """) % { "header_guard" : header_guard, "code": ns_code } | ||||
| ret += ns_code[1:-1] | ret += ns_code[1:-1] | ||||
| gend_files[ns_name] = ret | |||||
| if ns_name == name: | |||||
| # It's not namespaced | |||||
| break | |||||
| gend_files[ns_name] = (public,ret) | |||||
| @@ -5,16 +5,18 @@ import argparse | |||||
| import re | import re | ||||
| parser = argparse.ArgumentParser(description='Generate Decaf headers and other such files.') | parser = argparse.ArgumentParser(description='Generate Decaf headers and other such files.') | ||||
| parser.add_argument('--hpre', required = True, help = "Where to put the header files") | |||||
| parser.add_argument('--hpre', required = True, help = "Where to put the public header files") | |||||
| parser.add_argument('--ihpre', required = True, help = "Where to put the internal header files") | |||||
| parser.add_argument('--cpre', required = True, help = "Where to put the C/C++ implementation files") | parser.add_argument('--cpre', required = True, help = "Where to put the C/C++ implementation files") | ||||
| args = parser.parse_args() | args = parser.parse_args() | ||||
| prefixes = { "h" : args.hpre, "hxx" : args.hpre, "c" : args.cpre } | |||||
| prefixes = { (True,"h") : args.hpre, (True,"hxx") : args.hpre, (False,"c") : args.cpre, (False,"h") : args.ihpre } | |||||
| from decaf_hxx import decaf_hxx | from decaf_hxx import decaf_hxx | ||||
| from decaf_h import decaf_h | from decaf_h import decaf_h | ||||
| from crypto_h import crypto_h | from crypto_h import crypto_h | ||||
| from crypto_hxx import crypto_hxx | from crypto_hxx import crypto_hxx | ||||
| from f_field_h import f_field_h | |||||
| root_hxx_code = "\n".join(( | root_hxx_code = "\n".join(( | ||||
| "#include <%s>" % name | "#include <%s>" % name | ||||
| @@ -22,6 +24,8 @@ root_hxx_code = "\n".join(( | |||||
| if re.match("^decaf/decaf_\d+.hxx$",name) | if re.match("^decaf/decaf_\d+.hxx$",name) | ||||
| )) | )) | ||||
| decaf_root_hxx = gen_file( | decaf_root_hxx = gen_file( | ||||
| public = True, | |||||
| per = "global", | |||||
| name = "decaf.hxx", | name = "decaf.hxx", | ||||
| doc = """@brief Decaf curve metaheader.""", | doc = """@brief Decaf curve metaheader.""", | ||||
| code = "\n"+root_hxx_code+"\n" | code = "\n"+root_hxx_code+"\n" | ||||
| @@ -33,6 +37,8 @@ crypto_h_code = "\n".join(( | |||||
| if re.match("^decaf/crypto_\d+.h$",name) | if re.match("^decaf/crypto_\d+.h$",name) | ||||
| )) | )) | ||||
| crypto_h = gen_file( | crypto_h = gen_file( | ||||
| public = True, | |||||
| per = "global", | |||||
| name = "decaf/crypto.h", | name = "decaf/crypto.h", | ||||
| doc = """ | doc = """ | ||||
| Example Decaf crypto routines, metaheader. | Example Decaf crypto routines, metaheader. | ||||
| @@ -49,6 +55,8 @@ crypto_hxx_code = "\n".join(( | |||||
| if re.match("^decaf/crypto_\d+.hxx$",name) | if re.match("^decaf/crypto_\d+.hxx$",name) | ||||
| )) | )) | ||||
| crypto_hxx = gen_file( | crypto_hxx = gen_file( | ||||
| public = True, | |||||
| per = "global", | |||||
| name = "decaf/crypto.hxx", | name = "decaf/crypto.hxx", | ||||
| doc = """ | doc = """ | ||||
| Example Decaf crypto routines, C++, metaheader. | Example Decaf crypto routines, C++, metaheader. | ||||
| @@ -65,6 +73,8 @@ root_h_code = "\n".join(( | |||||
| if re.match("^decaf/decaf_\d+.h$",name) | if re.match("^decaf/decaf_\d+.h$",name) | ||||
| )) | )) | ||||
| decaf_root_hxx = gen_file( | decaf_root_hxx = gen_file( | ||||
| public = True, | |||||
| per = "global", | |||||
| name = "decaf.h", | name = "decaf.h", | ||||
| doc = """ | doc = """ | ||||
| Master header for Decaf library. | Master header for Decaf library. | ||||
| @@ -84,9 +94,9 @@ decaf_root_hxx = gen_file( | |||||
| ) | ) | ||||
| for name,code in gend_files.iteritems(): | |||||
| for name,(public,code) in gend_files.iteritems(): | |||||
| _,_,name_suffix = name.partition(".") | _,_,name_suffix = name.partition(".") | ||||
| prefix = prefixes[name_suffix] | |||||
| prefix = prefixes[(public,name_suffix)] | |||||
| if not os.path.exists(os.path.dirname(prefix + "/" + name)): | if not os.path.exists(os.path.dirname(prefix + "/" + name)): | ||||
| os.makedirs(os.path.dirname(prefix + "/" + name)) | os.makedirs(os.path.dirname(prefix + "/" + name)) | ||||
| with open(prefix + "/" + name,"w") as f: | with open(prefix + "/" + name,"w") as f: | ||||
| @@ -1,33 +0,0 @@ | |||||
| /** | |||||
| * @file f_field.h | |||||
| * @brief Field-specific code. | |||||
| * @copyright | |||||
| * Copyright (c) 2014 Cryptography Research, Inc. \n | |||||
| * Released under the MIT License. See LICENSE.txt for license information. | |||||
| * @author Mike Hamburg | |||||
| */ | |||||
| #ifndef __F_FIELD_H__ | |||||
| #define __F_FIELD_H__ 1 | |||||
| #include "constant_time.h" | |||||
| #include <string.h> | |||||
| #include "f_impl.h" | |||||
| #define GF_LIT_LIMB_BITS 51 | |||||
| #define GF_BITS 255 | |||||
| #define gf gf_25519_t | |||||
| #define gf_s gf_25519_s | |||||
| #define gf_mul gf_25519_mul | |||||
| #define gf_sqr gf_25519_sqr | |||||
| #define gf_add_RAW gf_25519_add_RAW | |||||
| #define gf_sub_RAW gf_25519_sub_RAW | |||||
| #define gf_mulw gf_25519_mulw | |||||
| #define gf_bias gf_25519_bias | |||||
| #define gf_isr gf_25519_isr | |||||
| #define gf_weak_reduce gf_25519_weak_reduce | |||||
| #define gf_strong_reduce gf_25519_strong_reduce | |||||
| #define gf_serialize gf_25519_serialize | |||||
| #define gf_deserialize gf_25519_deserialize | |||||
| #define SQRT_MINUS_ONE P25519_SQRT_MINUS_ONE | |||||
| #endif /* __F_FIELD_H__ */ | |||||
| @@ -22,7 +22,7 @@ static uint64_t widemul_32 ( | |||||
| } | } | ||||
| void | void | ||||
| p448_mul ( | |||||
| gf_448_mul ( | |||||
| gf_448_s *__restrict__ cs, | gf_448_s *__restrict__ cs, | ||||
| const gf_448_t as, | const gf_448_t as, | ||||
| const gf_448_t bs | const gf_448_t bs | ||||
| @@ -83,7 +83,7 @@ p448_mul ( | |||||
| } | } | ||||
| void | void | ||||
| p448_mulw ( | |||||
| gf_448_mulw ( | |||||
| gf_448_s *__restrict__ cs, | gf_448_s *__restrict__ cs, | ||||
| const gf_448_t as, | const gf_448_t as, | ||||
| uint64_t b | uint64_t b | ||||
| @@ -127,15 +127,15 @@ p448_mulw ( | |||||
| } | } | ||||
| void | void | ||||
| p448_sqr ( | |||||
| gf_448_sqr ( | |||||
| gf_448_s *__restrict__ cs, | gf_448_s *__restrict__ cs, | ||||
| const gf_448_t as | const gf_448_t as | ||||
| ) { | ) { | ||||
| p448_mul(cs,as,as); /* PERF */ | |||||
| gf_448_mul(cs,as,as); /* PERF */ | |||||
| } | } | ||||
| void | void | ||||
| p448_strong_reduce ( | |||||
| gf_448_strong_reduce ( | |||||
| gf_448_t a | gf_448_t a | ||||
| ) { | ) { | ||||
| word_t mask = (1ull<<28)-1; | word_t mask = (1ull<<28)-1; | ||||
| @@ -178,14 +178,14 @@ p448_strong_reduce ( | |||||
| } | } | ||||
| void | void | ||||
| p448_serialize ( | |||||
| gf_448_serialize ( | |||||
| uint8_t *serial, | uint8_t *serial, | ||||
| const gf_448_t x | const gf_448_t x | ||||
| ) { | ) { | ||||
| int i,j; | int i,j; | ||||
| gf_448_t red; | gf_448_t red; | ||||
| p448_copy(red, x); | |||||
| p448_strong_reduce(red); | |||||
| gf_448_copy(red, x); | |||||
| gf_448_strong_reduce(red); | |||||
| for (i=0; i<8; i++) { | for (i=0; i<8; i++) { | ||||
| uint64_t limb = red->limb[2*i] + (((uint64_t)red->limb[2*i+1])<<28); | uint64_t limb = red->limb[2*i] + (((uint64_t)red->limb[2*i+1])<<28); | ||||
| for (j=0; j<7; j++) { | for (j=0; j<7; j++) { | ||||
| @@ -197,7 +197,7 @@ p448_serialize ( | |||||
| } | } | ||||
| mask_t | mask_t | ||||
| p448_deserialize ( | |||||
| gf_448_deserialize ( | |||||
| gf_448_t x, | gf_448_t x, | ||||
| const uint8_t serial[56] | const uint8_t serial[56] | ||||
| ) { | ) { | ||||
| @@ -23,69 +23,69 @@ extern "C" { | |||||
| #endif | #endif | ||||
| static __inline__ void | static __inline__ void | ||||
| p448_add_RAW ( | |||||
| gf_448_add_RAW ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| const gf_448_t b | const gf_448_t b | ||||
| ) __attribute__((unused,always_inline)); | ) __attribute__((unused,always_inline)); | ||||
| static __inline__ void | static __inline__ void | ||||
| p448_sub_RAW ( | |||||
| gf_448_sub_RAW ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| const gf_448_t b | const gf_448_t b | ||||
| ) __attribute__((unused,always_inline)); | ) __attribute__((unused,always_inline)); | ||||
| static __inline__ void | static __inline__ void | ||||
| p448_copy ( | |||||
| gf_448_copy ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a | const gf_448_t a | ||||
| ) __attribute__((unused,always_inline)); | ) __attribute__((unused,always_inline)); | ||||
| static __inline__ void | static __inline__ void | ||||
| p448_weak_reduce ( | |||||
| gf_448_weak_reduce ( | |||||
| gf_448_t inout | gf_448_t inout | ||||
| ) __attribute__((unused,always_inline)); | ) __attribute__((unused,always_inline)); | ||||
| void | void | ||||
| p448_strong_reduce ( | |||||
| gf_448_strong_reduce ( | |||||
| gf_448_t inout | gf_448_t inout | ||||
| ); | ); | ||||
| static __inline__ void | static __inline__ void | ||||
| p448_bias ( | |||||
| gf_448_bias ( | |||||
| gf_448_t inout, | gf_448_t inout, | ||||
| int amount | int amount | ||||
| ) __attribute__((unused,always_inline)); | ) __attribute__((unused,always_inline)); | ||||
| void | void | ||||
| p448_mul ( | |||||
| gf_448_mul ( | |||||
| gf_448_s *__restrict__ out, | gf_448_s *__restrict__ out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| const gf_448_t b | const gf_448_t b | ||||
| ); | ); | ||||
| void | void | ||||
| p448_mulw ( | |||||
| gf_448_mulw ( | |||||
| gf_448_s *__restrict__ out, | gf_448_s *__restrict__ out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| uint64_t b | uint64_t b | ||||
| ); | ); | ||||
| void | void | ||||
| p448_sqr ( | |||||
| gf_448_sqr ( | |||||
| gf_448_s *__restrict__ out, | gf_448_s *__restrict__ out, | ||||
| const gf_448_t a | const gf_448_t a | ||||
| ); | ); | ||||
| void | void | ||||
| p448_serialize ( | |||||
| gf_448_serialize ( | |||||
| uint8_t *serial, | uint8_t *serial, | ||||
| const gf_448_t x | const gf_448_t x | ||||
| ); | ); | ||||
| mask_t | mask_t | ||||
| p448_deserialize ( | |||||
| gf_448_deserialize ( | |||||
| gf_448_t x, | gf_448_t x, | ||||
| const uint8_t serial[56] | const uint8_t serial[56] | ||||
| ); | ); | ||||
| @@ -93,7 +93,7 @@ p448_deserialize ( | |||||
| /* -------------- Inline functions begin here -------------- */ | /* -------------- Inline functions begin here -------------- */ | ||||
| void | void | ||||
| p448_add_RAW ( | |||||
| gf_448_add_RAW ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| const gf_448_t b | const gf_448_t b | ||||
| @@ -111,7 +111,7 @@ p448_add_RAW ( | |||||
| } | } | ||||
| void | void | ||||
| p448_sub_RAW ( | |||||
| gf_448_sub_RAW ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| const gf_448_t b | const gf_448_t b | ||||
| @@ -129,7 +129,7 @@ p448_sub_RAW ( | |||||
| } | } | ||||
| void | void | ||||
| p448_copy ( | |||||
| gf_448_copy ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a | const gf_448_t a | ||||
| ) { | ) { | ||||
| @@ -137,7 +137,7 @@ p448_copy ( | |||||
| } | } | ||||
| void | void | ||||
| p448_bias ( | |||||
| gf_448_bias ( | |||||
| gf_448_t a, | gf_448_t a, | ||||
| int amt | int amt | ||||
| ) { | ) { | ||||
| @@ -151,7 +151,7 @@ p448_bias ( | |||||
| } | } | ||||
| void | void | ||||
| p448_weak_reduce ( | |||||
| gf_448_weak_reduce ( | |||||
| gf_448_t a | gf_448_t a | ||||
| ) { | ) { | ||||
| uint64_t mask = (1ull<<28) - 1; | uint64_t mask = (1ull<<28) - 1; | ||||
| @@ -99,7 +99,7 @@ smull2 ( | |||||
| } | } | ||||
| void | void | ||||
| p448_mul ( | |||||
| gf_448_mul ( | |||||
| gf_448_s *__restrict__ cs, | gf_448_s *__restrict__ cs, | ||||
| const gf_448_t as, | const gf_448_t as, | ||||
| const gf_448_t bs | const gf_448_t bs | ||||
| @@ -450,7 +450,7 @@ p448_mul ( | |||||
| } | } | ||||
| void | void | ||||
| p448_sqr ( | |||||
| gf_448_sqr ( | |||||
| gf_448_s *__restrict__ cs, | gf_448_s *__restrict__ cs, | ||||
| const gf_448_t as | const gf_448_t as | ||||
| ) { | ) { | ||||
| @@ -748,7 +748,7 @@ p448_sqr ( | |||||
| } | } | ||||
| void | void | ||||
| p448_mulw ( | |||||
| gf_448_mulw ( | |||||
| gf_448_s *__restrict__ cs, | gf_448_s *__restrict__ cs, | ||||
| const gf_448_t as, | const gf_448_t as, | ||||
| uint64_t b | uint64_t b | ||||
| @@ -862,7 +862,7 @@ p448_mulw ( | |||||
| } | } | ||||
| void | void | ||||
| p448_strong_reduce ( | |||||
| gf_448_strong_reduce ( | |||||
| gf_448_t a | gf_448_t a | ||||
| ) { | ) { | ||||
| word_t mask = (1ull<<28)-1; | word_t mask = (1ull<<28)-1; | ||||
| @@ -905,14 +905,14 @@ p448_strong_reduce ( | |||||
| } | } | ||||
| void | void | ||||
| p448_serialize ( | |||||
| gf_448_serialize ( | |||||
| uint8_t *serial, | uint8_t *serial, | ||||
| const gf_448_t x | const gf_448_t x | ||||
| ) { | ) { | ||||
| int i,j; | int i,j; | ||||
| gf_448_t red; | gf_448_t red; | ||||
| p448_copy(red, x); | |||||
| p448_strong_reduce(red); | |||||
| gf_448_copy(red, x); | |||||
| gf_448_strong_reduce(red); | |||||
| for (i=0; i<8; i++) { | for (i=0; i<8; i++) { | ||||
| uint64_t limb = red->limb[2*i] + (((uint64_t)red->limb[2*i+1])<<28); | uint64_t limb = red->limb[2*i] + (((uint64_t)red->limb[2*i+1])<<28); | ||||
| for (j=0; j<7; j++) { | for (j=0; j<7; j++) { | ||||
| @@ -924,7 +924,7 @@ p448_serialize ( | |||||
| } | } | ||||
| mask_t | mask_t | ||||
| p448_deserialize ( | |||||
| gf_448_deserialize ( | |||||
| gf_448_t x, | gf_448_t x, | ||||
| const uint8_t serial[56] | const uint8_t serial[56] | ||||
| ) { | ) { | ||||
| @@ -23,69 +23,69 @@ extern "C" { | |||||
| #endif | #endif | ||||
| static __inline__ void | static __inline__ void | ||||
| p448_add_RAW ( | |||||
| gf_448_add_RAW ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| const gf_448_t b | const gf_448_t b | ||||
| ) __attribute__((unused,always_inline)); | ) __attribute__((unused,always_inline)); | ||||
| static __inline__ void | static __inline__ void | ||||
| p448_sub_RAW ( | |||||
| gf_448_sub_RAW ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| const gf_448_t b | const gf_448_t b | ||||
| ) __attribute__((unused,always_inline)); | ) __attribute__((unused,always_inline)); | ||||
| static __inline__ void | static __inline__ void | ||||
| p448_copy ( | |||||
| gf_448_copy ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a | const gf_448_t a | ||||
| ) __attribute__((unused,always_inline)); | ) __attribute__((unused,always_inline)); | ||||
| static __inline__ void | static __inline__ void | ||||
| p448_weak_reduce ( | |||||
| gf_448_weak_reduce ( | |||||
| gf_448_t inout | gf_448_t inout | ||||
| ) __attribute__((unused,always_inline)); | ) __attribute__((unused,always_inline)); | ||||
| void | void | ||||
| p448_strong_reduce ( | |||||
| gf_448_strong_reduce ( | |||||
| gf_448_t inout | gf_448_t inout | ||||
| ); | ); | ||||
| static __inline__ void | static __inline__ void | ||||
| p448_bias ( | |||||
| gf_448_bias ( | |||||
| gf_448_t inout, | gf_448_t inout, | ||||
| int amount | int amount | ||||
| ) __attribute__((unused,always_inline)); | ) __attribute__((unused,always_inline)); | ||||
| void | void | ||||
| p448_mul ( | |||||
| gf_448_mul ( | |||||
| gf_448_s *__restrict__ out, | gf_448_s *__restrict__ out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| const gf_448_t b | const gf_448_t b | ||||
| ); | ); | ||||
| void | void | ||||
| p448_mulw ( | |||||
| gf_448_mulw ( | |||||
| gf_448_s *__restrict__ out, | gf_448_s *__restrict__ out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| uint64_t b | uint64_t b | ||||
| ); | ); | ||||
| void | void | ||||
| p448_sqr ( | |||||
| gf_448_sqr ( | |||||
| gf_448_s *__restrict__ out, | gf_448_s *__restrict__ out, | ||||
| const gf_448_t a | const gf_448_t a | ||||
| ); | ); | ||||
| void | void | ||||
| p448_serialize ( | |||||
| gf_448_serialize ( | |||||
| uint8_t *serial, | uint8_t *serial, | ||||
| const gf_448_t x | const gf_448_t x | ||||
| ); | ); | ||||
| mask_t | mask_t | ||||
| p448_deserialize ( | |||||
| gf_448_deserialize ( | |||||
| gf_448_t x, | gf_448_t x, | ||||
| const uint8_t serial[56] | const uint8_t serial[56] | ||||
| ); | ); | ||||
| @@ -93,7 +93,7 @@ p448_deserialize ( | |||||
| /* -------------- Inline functions begin here -------------- */ | /* -------------- Inline functions begin here -------------- */ | ||||
| void | void | ||||
| p448_add_RAW ( | |||||
| gf_448_add_RAW ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| const gf_448_t b | const gf_448_t b | ||||
| @@ -111,7 +111,7 @@ p448_add_RAW ( | |||||
| } | } | ||||
| void | void | ||||
| p448_sub_RAW ( | |||||
| gf_448_sub_RAW ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| const gf_448_t b | const gf_448_t b | ||||
| @@ -129,7 +129,7 @@ p448_sub_RAW ( | |||||
| } | } | ||||
| void | void | ||||
| p448_copy ( | |||||
| gf_448_copy ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a | const gf_448_t a | ||||
| ) { | ) { | ||||
| @@ -137,7 +137,7 @@ p448_copy ( | |||||
| } | } | ||||
| void | void | ||||
| p448_bias ( | |||||
| gf_448_bias ( | |||||
| gf_448_t a, | gf_448_t a, | ||||
| int amt | int amt | ||||
| ) { | ) { | ||||
| @@ -151,7 +151,7 @@ p448_bias ( | |||||
| } | } | ||||
| void | void | ||||
| p448_weak_reduce ( | |||||
| gf_448_weak_reduce ( | |||||
| gf_448_t a | gf_448_t a | ||||
| ) { | ) { | ||||
| uint64_t mask = (1ull<<28) - 1; | uint64_t mask = (1ull<<28) - 1; | ||||
| @@ -69,7 +69,7 @@ smull2 ( | |||||
| } | } | ||||
| void | void | ||||
| p448_mul ( | |||||
| gf_448_mul ( | |||||
| gf_448_s *__restrict__ cs, | gf_448_s *__restrict__ cs, | ||||
| const gf_448_t as, | const gf_448_t as, | ||||
| const gf_448_t bs | const gf_448_t bs | ||||
| @@ -368,7 +368,7 @@ p448_mul ( | |||||
| } | } | ||||
| void | void | ||||
| p448_sqr ( | |||||
| gf_448_sqr ( | |||||
| gf_448_s *__restrict__ cs, | gf_448_s *__restrict__ cs, | ||||
| const gf_448_t bs | const gf_448_t bs | ||||
| ) { | ) { | ||||
| @@ -569,7 +569,7 @@ p448_sqr ( | |||||
| } | } | ||||
| void | void | ||||
| p448_mulw ( | |||||
| gf_448_mulw ( | |||||
| gf_448_s *__restrict__ cs, | gf_448_s *__restrict__ cs, | ||||
| const gf_448_t as, | const gf_448_t as, | ||||
| uint64_t b | uint64_t b | ||||
| @@ -620,7 +620,7 @@ p448_mulw ( | |||||
| /* PERF: vectorize? */ | /* PERF: vectorize? */ | ||||
| void | void | ||||
| p448_strong_reduce ( | |||||
| gf_448_strong_reduce ( | |||||
| gf_448_t a | gf_448_t a | ||||
| ) { | ) { | ||||
| word_t mask = (1ull<<28)-1; | word_t mask = (1ull<<28)-1; | ||||
| @@ -663,14 +663,14 @@ p448_strong_reduce ( | |||||
| } | } | ||||
| void | void | ||||
| p448_serialize ( | |||||
| gf_448_serialize ( | |||||
| uint8_t *serial, | uint8_t *serial, | ||||
| const gf_448_t x | const gf_448_t x | ||||
| ) { | ) { | ||||
| int i,j; | int i,j; | ||||
| gf_448_t red; | gf_448_t red; | ||||
| p448_copy(red, x); | |||||
| p448_strong_reduce(red); | |||||
| gf_448_copy(red, x); | |||||
| gf_448_strong_reduce(red); | |||||
| for (i=0; i<8; i++) { | for (i=0; i<8; i++) { | ||||
| uint64_t limb = red->limb[LIMBPERM(2*i)] + (((uint64_t)red->limb[LIMBPERM(2*i+1)])<<28); | uint64_t limb = red->limb[LIMBPERM(2*i)] + (((uint64_t)red->limb[LIMBPERM(2*i+1)])<<28); | ||||
| @@ -683,7 +683,7 @@ p448_serialize ( | |||||
| } | } | ||||
| mask_t | mask_t | ||||
| p448_deserialize ( | |||||
| gf_448_deserialize ( | |||||
| gf_448_t x, | gf_448_t x, | ||||
| const uint8_t serial[56] | const uint8_t serial[56] | ||||
| ) { | ) { | ||||
| @@ -29,69 +29,69 @@ extern "C" { | |||||
| #endif | #endif | ||||
| static __inline__ void | static __inline__ void | ||||
| p448_add_RAW ( | |||||
| gf_448_add_RAW ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| const gf_448_t b | const gf_448_t b | ||||
| ) __attribute__((unused,always_inline)); | ) __attribute__((unused,always_inline)); | ||||
| static __inline__ void | static __inline__ void | ||||
| p448_sub_RAW ( | |||||
| gf_448_sub_RAW ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| const gf_448_t b | const gf_448_t b | ||||
| ) __attribute__((unused,always_inline)); | ) __attribute__((unused,always_inline)); | ||||
| static __inline__ void | static __inline__ void | ||||
| p448_copy ( | |||||
| gf_448_copy ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a | const gf_448_t a | ||||
| ) __attribute__((unused,always_inline)); | ) __attribute__((unused,always_inline)); | ||||
| static __inline__ void | static __inline__ void | ||||
| p448_weak_reduce ( | |||||
| gf_448_weak_reduce ( | |||||
| gf_448_t inout | gf_448_t inout | ||||
| ) __attribute__((unused,always_inline)); | ) __attribute__((unused,always_inline)); | ||||
| void | void | ||||
| p448_strong_reduce ( | |||||
| gf_448_strong_reduce ( | |||||
| gf_448_t inout | gf_448_t inout | ||||
| ); | ); | ||||
| static __inline__ void | static __inline__ void | ||||
| p448_bias ( | |||||
| gf_448_bias ( | |||||
| gf_448_t inout, | gf_448_t inout, | ||||
| int amount | int amount | ||||
| ) __attribute__((unused,always_inline)); | ) __attribute__((unused,always_inline)); | ||||
| void | void | ||||
| p448_mul ( | |||||
| gf_448_mul ( | |||||
| gf_448_s *__restrict__ out, | gf_448_s *__restrict__ out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| const gf_448_t b | const gf_448_t b | ||||
| ); | ); | ||||
| void | void | ||||
| p448_mulw ( | |||||
| gf_448_mulw ( | |||||
| gf_448_s *__restrict__ out, | gf_448_s *__restrict__ out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| uint64_t b | uint64_t b | ||||
| ); | ); | ||||
| void | void | ||||
| p448_sqr ( | |||||
| gf_448_sqr ( | |||||
| gf_448_s *__restrict__ out, | gf_448_s *__restrict__ out, | ||||
| const gf_448_t a | const gf_448_t a | ||||
| ); | ); | ||||
| void | void | ||||
| p448_serialize ( | |||||
| gf_448_serialize ( | |||||
| uint8_t *serial, | uint8_t *serial, | ||||
| const gf_448_t x | const gf_448_t x | ||||
| ); | ); | ||||
| mask_t | mask_t | ||||
| p448_deserialize ( | |||||
| gf_448_deserialize ( | |||||
| gf_448_t x, | gf_448_t x, | ||||
| const uint8_t serial[56] | const uint8_t serial[56] | ||||
| ); | ); | ||||
| @@ -99,7 +99,7 @@ p448_deserialize ( | |||||
| /* -------------- Inline functions begin here -------------- */ | /* -------------- Inline functions begin here -------------- */ | ||||
| void | void | ||||
| p448_add_RAW ( | |||||
| gf_448_add_RAW ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| const gf_448_t b | const gf_448_t b | ||||
| @@ -111,7 +111,7 @@ p448_add_RAW ( | |||||
| } | } | ||||
| void | void | ||||
| p448_sub_RAW ( | |||||
| gf_448_sub_RAW ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| const gf_448_t b | const gf_448_t b | ||||
| @@ -129,7 +129,7 @@ p448_sub_RAW ( | |||||
| } | } | ||||
| void | void | ||||
| p448_copy ( | |||||
| gf_448_copy ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a | const gf_448_t a | ||||
| ) { | ) { | ||||
| @@ -137,7 +137,7 @@ p448_copy ( | |||||
| } | } | ||||
| void | void | ||||
| p448_bias ( | |||||
| gf_448_bias ( | |||||
| gf_448_t a, | gf_448_t a, | ||||
| int amt | int amt | ||||
| ) { | ) { | ||||
| @@ -151,7 +151,7 @@ p448_bias ( | |||||
| } | } | ||||
| void | void | ||||
| p448_weak_reduce ( | |||||
| gf_448_weak_reduce ( | |||||
| gf_448_t a | gf_448_t a | ||||
| ) { | ) { | ||||
| @@ -17,7 +17,7 @@ static __inline__ uint64_t is_zero(uint64_t a) { | |||||
| } | } | ||||
| void | void | ||||
| p448_mul ( | |||||
| gf_448_mul ( | |||||
| gf_448_s *__restrict__ cs, | gf_448_s *__restrict__ cs, | ||||
| const gf_448_t as, | const gf_448_t as, | ||||
| const gf_448_t bs | const gf_448_t bs | ||||
| @@ -183,7 +183,7 @@ p448_mul ( | |||||
| } | } | ||||
| void | void | ||||
| p448_mulw ( | |||||
| gf_448_mulw ( | |||||
| gf_448_s *__restrict__ cs, | gf_448_s *__restrict__ cs, | ||||
| const gf_448_t as, | const gf_448_t as, | ||||
| uint64_t b | uint64_t b | ||||
| @@ -212,7 +212,7 @@ p448_mulw ( | |||||
| } | } | ||||
| void | void | ||||
| p448_sqr ( | |||||
| gf_448_sqr ( | |||||
| gf_448_s *__restrict__ cs, | gf_448_s *__restrict__ cs, | ||||
| const gf_448_t as | const gf_448_t as | ||||
| ) { | ) { | ||||
| @@ -327,7 +327,7 @@ p448_sqr ( | |||||
| } | } | ||||
| void | void | ||||
| p448_strong_reduce ( | |||||
| gf_448_strong_reduce ( | |||||
| gf_448_t a | gf_448_t a | ||||
| ) { | ) { | ||||
| uint64_t mask = (1ull<<56)-1; | uint64_t mask = (1ull<<56)-1; | ||||
| @@ -370,14 +370,14 @@ p448_strong_reduce ( | |||||
| } | } | ||||
| void | void | ||||
| p448_serialize ( | |||||
| gf_448_serialize ( | |||||
| uint8_t *serial, | uint8_t *serial, | ||||
| const gf_448_t x | const gf_448_t x | ||||
| ) { | ) { | ||||
| int i,j; | int i,j; | ||||
| gf_448_t red; | gf_448_t red; | ||||
| p448_copy(red, x); | |||||
| p448_strong_reduce(red); | |||||
| gf_448_copy(red, x); | |||||
| gf_448_strong_reduce(red); | |||||
| for (i=0; i<8; i++) { | for (i=0; i<8; i++) { | ||||
| for (j=0; j<7; j++) { | for (j=0; j<7; j++) { | ||||
| serial[7*i+j] = red->limb[i]; | serial[7*i+j] = red->limb[i]; | ||||
| @@ -388,7 +388,7 @@ p448_serialize ( | |||||
| } | } | ||||
| mask_t | mask_t | ||||
| p448_deserialize ( | |||||
| gf_448_deserialize ( | |||||
| gf_448_t x, | gf_448_t x, | ||||
| const uint8_t serial[56] | const uint8_t serial[56] | ||||
| ) { | ) { | ||||
| @@ -22,69 +22,69 @@ extern "C" { | |||||
| #endif | #endif | ||||
| static __inline__ void | static __inline__ void | ||||
| p448_add_RAW ( | |||||
| gf_448_add_RAW ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| const gf_448_t b | const gf_448_t b | ||||
| ) __attribute__((unused)); | ) __attribute__((unused)); | ||||
| static __inline__ void | static __inline__ void | ||||
| p448_sub_RAW ( | |||||
| gf_448_sub_RAW ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| const gf_448_t b | const gf_448_t b | ||||
| ) __attribute__((unused)); | ) __attribute__((unused)); | ||||
| static __inline__ void | static __inline__ void | ||||
| p448_copy ( | |||||
| gf_448_copy ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a | const gf_448_t a | ||||
| ) __attribute__((unused)); | ) __attribute__((unused)); | ||||
| static __inline__ void | static __inline__ void | ||||
| p448_weak_reduce ( | |||||
| gf_448_weak_reduce ( | |||||
| gf_448_t inout | gf_448_t inout | ||||
| ) __attribute__((unused)); | ) __attribute__((unused)); | ||||
| void | void | ||||
| p448_strong_reduce ( | |||||
| gf_448_strong_reduce ( | |||||
| gf_448_t inout | gf_448_t inout | ||||
| ); | ); | ||||
| static __inline__ void | static __inline__ void | ||||
| p448_bias ( | |||||
| gf_448_bias ( | |||||
| gf_448_t inout, | gf_448_t inout, | ||||
| int amount | int amount | ||||
| ) __attribute__((unused)); | ) __attribute__((unused)); | ||||
| void | void | ||||
| p448_mul ( | |||||
| gf_448_mul ( | |||||
| gf_448_s *__restrict__ out, | gf_448_s *__restrict__ out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| const gf_448_t b | const gf_448_t b | ||||
| ); | ); | ||||
| void | void | ||||
| p448_mulw ( | |||||
| gf_448_mulw ( | |||||
| gf_448_s *__restrict__ out, | gf_448_s *__restrict__ out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| uint64_t b | uint64_t b | ||||
| ); | ); | ||||
| void | void | ||||
| p448_sqr ( | |||||
| gf_448_sqr ( | |||||
| gf_448_s *__restrict__ out, | gf_448_s *__restrict__ out, | ||||
| const gf_448_t a | const gf_448_t a | ||||
| ); | ); | ||||
| void | void | ||||
| p448_serialize ( | |||||
| gf_448_serialize ( | |||||
| uint8_t *serial, | uint8_t *serial, | ||||
| const gf_448_t x | const gf_448_t x | ||||
| ); | ); | ||||
| mask_t | mask_t | ||||
| p448_deserialize ( | |||||
| gf_448_deserialize ( | |||||
| gf_448_t x, | gf_448_t x, | ||||
| const uint8_t serial[56] | const uint8_t serial[56] | ||||
| ); | ); | ||||
| @@ -92,7 +92,7 @@ p448_deserialize ( | |||||
| /* -------------- Inline functions begin here -------------- */ | /* -------------- Inline functions begin here -------------- */ | ||||
| void | void | ||||
| p448_add_RAW ( | |||||
| gf_448_add_RAW ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| const gf_448_t b | const gf_448_t b | ||||
| @@ -101,11 +101,11 @@ p448_add_RAW ( | |||||
| for (i=0; i<8; i++) { | for (i=0; i<8; i++) { | ||||
| out->limb[i] = a->limb[i] + b->limb[i]; | out->limb[i] = a->limb[i] + b->limb[i]; | ||||
| } | } | ||||
| p448_weak_reduce(out); | |||||
| gf_448_weak_reduce(out); | |||||
| } | } | ||||
| void | void | ||||
| p448_sub_RAW ( | |||||
| gf_448_sub_RAW ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| const gf_448_t b | const gf_448_t b | ||||
| @@ -115,11 +115,11 @@ p448_sub_RAW ( | |||||
| for (i=0; i<8; i++) { | for (i=0; i<8; i++) { | ||||
| out->limb[i] = a->limb[i] - b->limb[i] + ((i==4) ? co2 : co1); | out->limb[i] = a->limb[i] - b->limb[i] + ((i==4) ? co2 : co1); | ||||
| } | } | ||||
| p448_weak_reduce(out); | |||||
| gf_448_weak_reduce(out); | |||||
| } | } | ||||
| void | void | ||||
| p448_copy ( | |||||
| gf_448_copy ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a | const gf_448_t a | ||||
| ) { | ) { | ||||
| @@ -127,7 +127,7 @@ p448_copy ( | |||||
| } | } | ||||
| void | void | ||||
| p448_bias ( | |||||
| gf_448_bias ( | |||||
| gf_448_t a, | gf_448_t a, | ||||
| int amt | int amt | ||||
| ) { | ) { | ||||
| @@ -136,7 +136,7 @@ p448_bias ( | |||||
| } | } | ||||
| void | void | ||||
| p448_weak_reduce ( | |||||
| gf_448_weak_reduce ( | |||||
| gf_448_t a | gf_448_t a | ||||
| ) { | ) { | ||||
| uint64_t mask = (1ull<<56) - 1; | uint64_t mask = (1ull<<56) - 1; | ||||
| @@ -6,7 +6,7 @@ | |||||
| #include "x86-64-arith.h" | #include "x86-64-arith.h" | ||||
| void | void | ||||
| p448_mul ( | |||||
| gf_448_mul ( | |||||
| gf_448_s *__restrict__ cs, | gf_448_s *__restrict__ cs, | ||||
| const gf_448_t as, | const gf_448_t as, | ||||
| const gf_448_t bs | const gf_448_t bs | ||||
| @@ -146,7 +146,7 @@ p448_mul ( | |||||
| } | } | ||||
| void | void | ||||
| p448_mulw ( | |||||
| gf_448_mulw ( | |||||
| gf_448_s *__restrict__ cs, | gf_448_s *__restrict__ cs, | ||||
| const gf_448_t as, | const gf_448_t as, | ||||
| uint64_t b | uint64_t b | ||||
| @@ -191,7 +191,7 @@ p448_mulw ( | |||||
| } | } | ||||
| void | void | ||||
| p448_sqr ( | |||||
| gf_448_sqr ( | |||||
| gf_448_s *__restrict__ cs, | gf_448_s *__restrict__ cs, | ||||
| const gf_448_t as | const gf_448_t as | ||||
| ) { | ) { | ||||
| @@ -306,7 +306,7 @@ p448_sqr ( | |||||
| } | } | ||||
| void | void | ||||
| p448_strong_reduce ( | |||||
| gf_448_strong_reduce ( | |||||
| gf_448_t a | gf_448_t a | ||||
| ) { | ) { | ||||
| uint64_t mask = (1ull<<56)-1; | uint64_t mask = (1ull<<56)-1; | ||||
| @@ -349,14 +349,14 @@ p448_strong_reduce ( | |||||
| } | } | ||||
| void | void | ||||
| p448_serialize ( | |||||
| gf_448_serialize ( | |||||
| uint8_t *serial, | uint8_t *serial, | ||||
| const gf_448_t x | const gf_448_t x | ||||
| ) { | ) { | ||||
| int i,j; | int i,j; | ||||
| gf_448_t red; | gf_448_t red; | ||||
| p448_copy(red, x); | |||||
| p448_strong_reduce(red); | |||||
| gf_448_copy(red, x); | |||||
| gf_448_strong_reduce(red); | |||||
| for (i=0; i<8; i++) { | for (i=0; i<8; i++) { | ||||
| for (j=0; j<7; j++) { | for (j=0; j<7; j++) { | ||||
| serial[7*i+j] = red->limb[i]; | serial[7*i+j] = red->limb[i]; | ||||
| @@ -367,7 +367,7 @@ p448_serialize ( | |||||
| } | } | ||||
| mask_t | mask_t | ||||
| p448_deserialize ( | |||||
| gf_448_deserialize ( | |||||
| gf_448_t x, | gf_448_t x, | ||||
| const uint8_t serial[56] | const uint8_t serial[56] | ||||
| ) { | ) { | ||||
| @@ -18,69 +18,69 @@ extern "C" { | |||||
| #endif | #endif | ||||
| static __inline__ void | static __inline__ void | ||||
| p448_add_RAW ( | |||||
| gf_448_add_RAW ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| const gf_448_t b | const gf_448_t b | ||||
| ) __attribute__((unused,always_inline)); | ) __attribute__((unused,always_inline)); | ||||
| static __inline__ void | static __inline__ void | ||||
| p448_sub_RAW ( | |||||
| gf_448_sub_RAW ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| const gf_448_t b | const gf_448_t b | ||||
| ) __attribute__((unused,always_inline)); | ) __attribute__((unused,always_inline)); | ||||
| static __inline__ void | static __inline__ void | ||||
| p448_copy ( | |||||
| gf_448_copy ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a | const gf_448_t a | ||||
| ) __attribute__((unused,always_inline)); | ) __attribute__((unused,always_inline)); | ||||
| static __inline__ void | static __inline__ void | ||||
| p448_weak_reduce ( | |||||
| gf_448_weak_reduce ( | |||||
| gf_448_t inout | gf_448_t inout | ||||
| ) __attribute__((unused,always_inline)); | ) __attribute__((unused,always_inline)); | ||||
| void | void | ||||
| p448_strong_reduce ( | |||||
| gf_448_strong_reduce ( | |||||
| gf_448_t inout | gf_448_t inout | ||||
| ); | ); | ||||
| static __inline__ void | static __inline__ void | ||||
| p448_bias ( | |||||
| gf_448_bias ( | |||||
| gf_448_t inout, | gf_448_t inout, | ||||
| int amount | int amount | ||||
| ) __attribute__((unused,always_inline)); | ) __attribute__((unused,always_inline)); | ||||
| void | void | ||||
| p448_mul ( | |||||
| gf_448_mul ( | |||||
| gf_448_s *__restrict__ out, | gf_448_s *__restrict__ out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| const gf_448_t b | const gf_448_t b | ||||
| ); | ); | ||||
| void | void | ||||
| p448_mulw ( | |||||
| gf_448_mulw ( | |||||
| gf_448_s *__restrict__ out, | gf_448_s *__restrict__ out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| uint64_t b | uint64_t b | ||||
| ); | ); | ||||
| void | void | ||||
| p448_sqr ( | |||||
| gf_448_sqr ( | |||||
| gf_448_s *__restrict__ out, | gf_448_s *__restrict__ out, | ||||
| const gf_448_t a | const gf_448_t a | ||||
| ); | ); | ||||
| void | void | ||||
| p448_serialize ( | |||||
| gf_448_serialize ( | |||||
| uint8_t *serial, | uint8_t *serial, | ||||
| const gf_448_t x | const gf_448_t x | ||||
| ); | ); | ||||
| mask_t | mask_t | ||||
| p448_deserialize ( | |||||
| gf_448_deserialize ( | |||||
| gf_448_t x, | gf_448_t x, | ||||
| const uint8_t serial[56] | const uint8_t serial[56] | ||||
| ); | ); | ||||
| @@ -88,7 +88,7 @@ p448_deserialize ( | |||||
| /* -------------- Inline functions begin here -------------- */ | /* -------------- Inline functions begin here -------------- */ | ||||
| void | void | ||||
| p448_add_RAW ( | |||||
| gf_448_add_RAW ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| const gf_448_t b | const gf_448_t b | ||||
| @@ -106,7 +106,7 @@ p448_add_RAW ( | |||||
| } | } | ||||
| void | void | ||||
| p448_sub_RAW ( | |||||
| gf_448_sub_RAW ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a, | const gf_448_t a, | ||||
| const gf_448_t b | const gf_448_t b | ||||
| @@ -124,7 +124,7 @@ p448_sub_RAW ( | |||||
| } | } | ||||
| void | void | ||||
| p448_copy ( | |||||
| gf_448_copy ( | |||||
| gf_448_t out, | gf_448_t out, | ||||
| const gf_448_t a | const gf_448_t a | ||||
| ) { | ) { | ||||
| @@ -135,7 +135,7 @@ p448_copy ( | |||||
| } | } | ||||
| void | void | ||||
| p448_bias ( | |||||
| gf_448_bias ( | |||||
| gf_448_t a, | gf_448_t a, | ||||
| int amt | int amt | ||||
| ) { | ) { | ||||
| @@ -162,7 +162,7 @@ p448_bias ( | |||||
| } | } | ||||
| void | void | ||||
| p448_weak_reduce ( | |||||
| gf_448_weak_reduce ( | |||||
| gf_448_t a | gf_448_t a | ||||
| ) { | ) { | ||||
| /* PERF: use pshufb/palignr if anyone cares about speed of this */ | /* PERF: use pshufb/palignr if anyone cares about speed of this */ | ||||
| @@ -1,32 +0,0 @@ | |||||
| /** | |||||
| * @file f_field.h | |||||
| * @brief Field-specific code. | |||||
| * @copyright | |||||
| * Copyright (c) 2014 Cryptography Research, Inc. \n | |||||
| * Released under the MIT License. See LICENSE.txt for license information. | |||||
| * @author Mike Hamburg | |||||
| */ | |||||
| #ifndef __F_FIELD_H__ | |||||
| #define __F_FIELD_H__ 1 | |||||
| #include "constant_time.h" | |||||
| #include <string.h> | |||||
| #include "f_impl.h" | |||||
| #define GF_LIT_LIMB_BITS 56 | |||||
| #define GF_BITS 448 | |||||
| #define gf gf_448_t | |||||
| #define gf_s gf_448_s | |||||
| #define gf_mul p448_mul | |||||
| #define gf_sqr p448_sqr | |||||
| #define gf_add_RAW p448_add_RAW | |||||
| #define gf_sub_RAW p448_sub_RAW | |||||
| #define gf_mulw p448_mulw | |||||
| #define gf_bias p448_bias | |||||
| #define gf_isr p448_isr | |||||
| #define gf_weak_reduce p448_weak_reduce | |||||
| #define gf_strong_reduce p448_strong_reduce | |||||
| #define gf_serialize p448_serialize | |||||
| #define gf_deserialize p448_deserialize | |||||
| #endif /* __F_FIELD_H__ */ | |||||
| @@ -1,31 +0,0 @@ | |||||
| /** | |||||
| * @file f_field.h | |||||
| * @brief Field-specific code. | |||||
| * @copyright | |||||
| * Copyright (c) 2014 Cryptography Research, Inc. \n | |||||
| * Released under the MIT License. See LICENSE.txt for license information. | |||||
| * @author Mike Hamburg | |||||
| */ | |||||
| #ifndef __F_FIELD_H__ | |||||
| #define __F_FIELD_H__ 1 | |||||
| #include "constant_time.h" | |||||
| #include <string.h> | |||||
| #include "f_impl.h" | |||||
| #define GF_LIT_LIMB_BITS 60 | |||||
| #define GF_BITS 480 | |||||
| #define gf p480_t | |||||
| #define gf_mul p480_mul | |||||
| #define gf_sqr p480_sqr | |||||
| #define gf_add_RAW p480_add_RAW | |||||
| #define gf_sub_RAW p480_sub_RAW | |||||
| #define gf_mulw p480_mulw | |||||
| #define gf_bias p480_bias | |||||
| #define gf_isr p480_isr | |||||
| #define gf_weak_reduce p480_weak_reduce | |||||
| #define gf_strong_reduce p480_strong_reduce | |||||
| #define gf_serialize p480_serialize | |||||
| #define gf_deserialize p480_deserialize | |||||
| #endif /* __F_FIELD_H__ */ | |||||
| @@ -1,31 +0,0 @@ | |||||
| /** | |||||
| * @file f_field.h | |||||
| * @brief Field-specific code. | |||||
| * @copyright | |||||
| * Copyright (c) 2014 Cryptography Research, Inc. \n | |||||
| * Released under the MIT License. See LICENSE.txt for license information. | |||||
| * @author Mike Hamburg | |||||
| */ | |||||
| #ifndef __F_FIELD_H__ | |||||
| #define __F_FIELD_H__ 1 | |||||
| #include <string.h> | |||||
| #include "constant_time.h" | |||||
| #include "f_impl.h" | |||||
| #define GF_LIT_LIMB_BITS 58 | |||||
| #define GF_BITS 521 | |||||
| #define gf p521_t | |||||
| #define gf_mul p521_mul | |||||
| #define gf_sqr p521_sqr | |||||
| #define gf_add_RAW p521_add_RAW | |||||
| #define gf_sub_RAW p521_sub_RAW | |||||
| #define gf_mulw p521_mulw | |||||
| #define gf_bias p521_bias | |||||
| #define gf_isr p521_isr | |||||
| #define gf_weak_reduce p521_weak_reduce | |||||
| #define gf_strong_reduce p521_strong_reduce | |||||
| #define gf_serialize p521_serialize | |||||
| #define gf_deserialize p521_deserialize | |||||
| #endif /* __F_FIELD_H__ */ | |||||