1*f0865ec9SKyle Evans /* 2*f0865ec9SKyle Evans * Copyright (C) 2017 - This file is part of libecc project 3*f0865ec9SKyle Evans * 4*f0865ec9SKyle Evans * Authors: 5*f0865ec9SKyle Evans * Ryad BENADJILA <ryadbenadjila@gmail.com> 6*f0865ec9SKyle Evans * Arnaud EBALARD <arnaud.ebalard@ssi.gouv.fr> 7*f0865ec9SKyle Evans * Jean-Pierre FLORI <jean-pierre.flori@ssi.gouv.fr> 8*f0865ec9SKyle Evans * 9*f0865ec9SKyle Evans * Contributors: 10*f0865ec9SKyle Evans * Nicolas VIVET <nicolas.vivet@ssi.gouv.fr> 11*f0865ec9SKyle Evans * Karim KHALFALLAH <karim.khalfallah@ssi.gouv.fr> 12*f0865ec9SKyle Evans * 13*f0865ec9SKyle Evans * This software is licensed under a dual BSD and GPL v2 license. 14*f0865ec9SKyle Evans * See LICENSE file at the root folder of the project. 15*f0865ec9SKyle Evans */ 16*f0865ec9SKyle Evans #include <libecc/utils/print_curves.h> 17*f0865ec9SKyle Evans 18*f0865ec9SKyle Evans /* 19*f0865ec9SKyle Evans * Locally convert given projective point to affine representation and 20*f0865ec9SKyle Evans * print x and y coordinates. 21*f0865ec9SKyle Evans */ 22*f0865ec9SKyle Evans void ec_point_print(const char *msg, prj_pt_src_t pt) 23*f0865ec9SKyle Evans { 24*f0865ec9SKyle Evans aff_pt y_aff; 25*f0865ec9SKyle Evans int ret, iszero; 26*f0865ec9SKyle Evans y_aff.magic = WORD(0); 27*f0865ec9SKyle Evans 28*f0865ec9SKyle Evans MUST_HAVE(msg != NULL, ret, err); 29*f0865ec9SKyle Evans ret = prj_pt_iszero(pt, &iszero); EG(ret, err); 30*f0865ec9SKyle Evans if (iszero) { 31*f0865ec9SKyle Evans ext_printf("%s: infinity\n", msg); 32*f0865ec9SKyle Evans goto err; 33*f0865ec9SKyle Evans } 34*f0865ec9SKyle Evans 35*f0865ec9SKyle Evans ret = prj_pt_to_aff(&y_aff, pt); EG(ret, err); 36*f0865ec9SKyle Evans ext_printf("%s", msg); 37*f0865ec9SKyle Evans nn_print("x", &(y_aff.x.fp_val)); 38*f0865ec9SKyle Evans ext_printf("%s", msg); 39*f0865ec9SKyle Evans nn_print("y", &(y_aff.y.fp_val)); 40*f0865ec9SKyle Evans 41*f0865ec9SKyle Evans err: 42*f0865ec9SKyle Evans aff_pt_uninit(&y_aff); 43*f0865ec9SKyle Evans return; 44*f0865ec9SKyle Evans } 45*f0865ec9SKyle Evans 46*f0865ec9SKyle Evans void ec_montgomery_point_print(const char *msg, aff_pt_montgomery_src_t pt) 47*f0865ec9SKyle Evans { 48*f0865ec9SKyle Evans int ret; 49*f0865ec9SKyle Evans 50*f0865ec9SKyle Evans MUST_HAVE(msg != NULL, ret, err); 51*f0865ec9SKyle Evans ret = aff_pt_montgomery_check_initialized(pt); EG(ret, err); 52*f0865ec9SKyle Evans 53*f0865ec9SKyle Evans ext_printf("%s", msg); 54*f0865ec9SKyle Evans nn_print("u", &(pt->u.fp_val)); 55*f0865ec9SKyle Evans ext_printf("%s", msg); 56*f0865ec9SKyle Evans nn_print("v", &(pt->v.fp_val)); 57*f0865ec9SKyle Evans 58*f0865ec9SKyle Evans err: 59*f0865ec9SKyle Evans return; 60*f0865ec9SKyle Evans } 61*f0865ec9SKyle Evans 62*f0865ec9SKyle Evans void ec_edwards_point_print(const char *msg, aff_pt_edwards_src_t pt) 63*f0865ec9SKyle Evans { 64*f0865ec9SKyle Evans int ret; 65*f0865ec9SKyle Evans 66*f0865ec9SKyle Evans MUST_HAVE(msg != NULL, ret, err); 67*f0865ec9SKyle Evans ret = aff_pt_edwards_check_initialized(pt); EG(ret, err); 68*f0865ec9SKyle Evans 69*f0865ec9SKyle Evans ext_printf("%s", msg); 70*f0865ec9SKyle Evans nn_print("x", &(pt->x.fp_val)); 71*f0865ec9SKyle Evans ext_printf("%s", msg); 72*f0865ec9SKyle Evans nn_print("y", &(pt->y.fp_val)); 73*f0865ec9SKyle Evans 74*f0865ec9SKyle Evans err: 75*f0865ec9SKyle Evans return; 76*f0865ec9SKyle Evans } 77