@@ -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__ */ |