3 This file is part of the AVR-Crypto-Lib.
4 Copyright (C) 2012 Daniel Otte (daniel.otte@rub.de)
6 This program is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>.
31 } ecc_chudnovsky_point_t;
38 typedef union __attribute__((packed)){
39 ecc_affine_point_t affine;
40 ecc_chudnovsky_point_t chudnovsky;
47 int (*reduce_p)(bigint_t*);
51 uint8_t ecc_chudnovsky_point_alloc(ecc_chudnovsky_point_t *p, size_t length_B);
53 void ecc_chudnovsky_point_free(ecc_chudnovsky_point_t *p);
55 void ecc_chudnovsky_point_print(const ecc_chudnovsky_point_t *p);
58 uint8_t ecc_affine_to_chudnovsky_point(ecc_chudnovsky_point_t *dest,
59 const ecc_affine_point_t *src);
60 uint8_t ecc_chudnovsky_to_affine_point(ecc_affine_point_t *dest,
61 const ecc_chudnovsky_point_t *src,
62 const ecc_curve_sp_t *curve);
63 uint8_t ecc_chudnovsky_point_double_sp(ecc_chudnovsky_point_t *dest,
64 const ecc_chudnovsky_point_t *a,
65 const ecc_curve_sp_t *curve);
66 void ecc_chudnovsky_point_copy(ecc_chudnovsky_point_t *dest,
67 const ecc_chudnovsky_point_t *src);
68 uint8_t ecc_chudnovsky_point_add_sp(ecc_chudnovsky_point_t *dest,
69 const ecc_chudnovsky_point_t *a,
70 const ecc_chudnovsky_point_t *b,
71 const ecc_curve_sp_t *curve);
72 uint8_t ecc_chudnovsky_double_and_add(ecc_chudnovsky_point_t *dest,
74 const ecc_chudnovsky_point_t *p,
75 const ecc_curve_sp_t *curve);
76 uint8_t bigint_to_naf(uint8_t *dest, uint16_t *length, const bigint_t *src);
77 uint8_t ecc_chudnovsky_naf_multiplication(ecc_chudnovsky_point_t *dest,
79 const ecc_chudnovsky_point_t *p,
80 const ecc_curve_sp_t *curve);
81 uint8_t ecc_chudnovsky_multiplication(ecc_chudnovsky_point_t *dest,
83 const ecc_chudnovsky_point_t *p,
84 const ecc_curve_sp_t *curve);