From de491a6191b465edb7bd9a01a5177ac9bf836747 Mon Sep 17 00:00:00 2001 From: J08nY Date: Mon, 25 Nov 2019 21:25:29 +0100 Subject: Start Python codegen impl. --- pyecsca/codegen/templates/__init__.py | 0 pyecsca/codegen/templates/coords.c | 33 +++++++++++++++++++++++++++++++++ pyecsca/codegen/templates/coords.h | 5 +++++ pyecsca/codegen/templates/curve.c | 28 ++++++++++++++++++++++++++++ pyecsca/codegen/templates/curve.h | 8 ++++++++ 5 files changed, 74 insertions(+) create mode 100644 pyecsca/codegen/templates/__init__.py create mode 100644 pyecsca/codegen/templates/coords.c create mode 100644 pyecsca/codegen/templates/coords.h create mode 100644 pyecsca/codegen/templates/curve.c create mode 100644 pyecsca/codegen/templates/curve.h (limited to 'pyecsca/codegen/templates') diff --git a/pyecsca/codegen/templates/__init__.py b/pyecsca/codegen/templates/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pyecsca/codegen/templates/coords.c b/pyecsca/codegen/templates/coords.c new file mode 100644 index 0000000..00f6086 --- /dev/null +++ b/pyecsca/codegen/templates/coords.c @@ -0,0 +1,33 @@ +point_t *point_new(void) { + point_t *result = malloc(sizeof(point_t)); + {%- for variable in variables %} + bn_init(&result->{{ variable }}); + {%- endfor %} + + return result; +} + +point_t *point_copy(const point_t *from) { + point_t *result = point_new(); + point_set(from, result); + return result; +} + +void point_set(const point_t *from, point_t *out) { + {%- for variable in variables %} + bn_copy(&from->{{ variable }}, &out->{{ variable }}); + {%- endfor %} +} + +void point_free(point_t *point) { + {%- for variable in variables %} + bn_clear(&point->{{ variable }}); + {%- endfor %} + free(point); +} + +int point_to_affine(point_t *point, const char coord, curve_t *curve, bn_t *out) { + +} + +int point_from_affine(bn_t *x, bn_t *y, curve_t *curve, point_t *out); diff --git a/pyecsca/codegen/templates/coords.h b/pyecsca/codegen/templates/coords.h new file mode 100644 index 0000000..6890c11 --- /dev/null +++ b/pyecsca/codegen/templates/coords.h @@ -0,0 +1,5 @@ +typedef struct { + {%- for variable in variables %} + bn_t {{ variable }}; + {%- endfor %} +} point_t; \ No newline at end of file diff --git a/pyecsca/codegen/templates/curve.c b/pyecsca/codegen/templates/curve.c new file mode 100644 index 0000000..a49adde --- /dev/null +++ b/pyecsca/codegen/templates/curve.c @@ -0,0 +1,28 @@ +curve_t* curve_new(const named_bn_t **params, int num_params) { + curve_t *result = malloc(sizeof(curve_t)); + {%- for param in params %} + bn_init(&result->{{ param }}); + {%- endfor %} + bn_init(&result->n); + + for (int i = 0; i < num_params; ++i) { + switch (params[i]->name) { + {%- for param in params %} + case '{{ param }}': bn_copy(params[i]->value, result->{{ param }}); + break; + {%- endfor %} + default: + curve_free(result); + return NULL; + } + } + return result; +} + +void curve_free(curve_t *curve) { + {%- for param in params %} + bn_clear(&curve->{{ param }}); + {%- endfor %} + bn_clear(&curve->n); + free(curve); +} \ No newline at end of file diff --git a/pyecsca/codegen/templates/curve.h b/pyecsca/codegen/templates/curve.h new file mode 100644 index 0000000..ff4a078 --- /dev/null +++ b/pyecsca/codegen/templates/curve.h @@ -0,0 +1,8 @@ +typedef struct { + {%- for param in params %} + bn_t {{ param }}; + {%- endfor %} + bn_t n; + bn_t h; + point_t neutral; +} curve_t; \ No newline at end of file -- cgit v1.3.1