Path: blob/main/crypto/libecc/src/curves/ec_edwards.c
34878 views
/*1* Copyright (C) 2017 - This file is part of libecc project2*3* Authors:4* Ryad BENADJILA <[email protected]>5* Arnaud EBALARD <[email protected]>6* Jean-Pierre FLORI <[email protected]>7*8* Contributors:9* Nicolas VIVET <[email protected]>10* Karim KHALFALLAH <[email protected]>11*12* This software is licensed under a dual BSD and GPL v2 license.13* See LICENSE file at the root folder of the project.14*/15#include <libecc/curves/ec_edwards.h>1617#define EC_EDWARDS_CRV_MAGIC ((word_t)(0x9c7349a1837c6794ULL))1819/*20* Check pointed Edwards curve structure has already been21* initialized.22*23* Returns 0 on success, -1 on error.24*/25int ec_edwards_crv_check_initialized(ec_edwards_crv_src_t crv)26{27int ret;2829MUST_HAVE((crv != NULL) && (crv->magic == EC_EDWARDS_CRV_MAGIC), ret, err);30ret = 0;3132err:33return ret;34}3536/*37* Initialize pointed Edwards curve structure using given a and d38* Fp elements representing curve equation (a x^2 + y^2 = 1 + d x^2 y^2) parameters.39*40* Returns 0 on success, -1 on error.41*/42int ec_edwards_crv_init(ec_edwards_crv_t crv, fp_src_t a, fp_src_t d, nn_src_t order)43{44int ret, iszero, cmp;4546ret = nn_check_initialized(order); EG(ret, err);47ret = fp_check_initialized(a); EG(ret, err);48ret = fp_check_initialized(d); EG(ret, err);49MUST_HAVE((a->ctx == d->ctx), ret, err);50MUST_HAVE((crv != NULL), ret, err);5152/* a and d in Fp, must be distinct and non zero */53MUST_HAVE((!fp_iszero(a, &iszero)) && (!iszero), ret, err);54MUST_HAVE((!fp_iszero(d, &iszero)) && (!iszero), ret, err);55MUST_HAVE((!fp_cmp(a, d, &cmp)) && cmp, ret, err);5657ret = fp_init(&(crv->a), a->ctx); EG(ret, err);58ret = fp_init(&(crv->d), d->ctx); EG(ret, err);59ret = fp_copy(&(crv->a), a); EG(ret, err);60ret = fp_copy(&(crv->d), d); EG(ret, err);61ret = nn_copy(&(crv->order), order); EG(ret, err);6263crv->magic = EC_EDWARDS_CRV_MAGIC;6465err:66return ret;67}686970/* Uninitialize curve */71void ec_edwards_crv_uninit(ec_edwards_crv_t crv)72{73if ((crv != NULL) && (crv->magic == EC_EDWARDS_CRV_MAGIC)) {74crv->magic = WORD(0);75}7677return;78}798081