mqv.c

来自「ECC的C++源码」· C语言 代码 · 共 90 行

C
90
字号
/*  Test Menezes-Qu-Vanstone scheme for normal basis  */#include <stdio.h>#include "bigint.h"#include "eliptic.h"#include "protocols.h"extern unsigned long random_seed;extern void sha_memory();main(){	EC_PARAMETER	Base;	EC_KEYPAIR		side1_perm, side2_perm;	EC_KEYPAIR		side1_ephem, side2_ephem;	BIGINT			prime_order;	POINT			temp;	FIELD2N			side1_secret, side2_secret;		char string1[MAXSTRING] = "5192296858534827627896703833467507"; /*N 113  *//*	char string1[MAXSTRING] = "680564733841876926932320129493409985129";*/ /*N~ 131 *//*	char string1[MAXSTRING] = "5444517870735015415344659586094410599059";*/ /*N 134 (g^2 = g+1)	*//*	char string1[MAXSTRING] = "19822884620916109459140767798279811163792081";*/ /*N~ 148 GF(16) *//*	char string1[MAXSTRING] = "91343852333181432387730573045979447452365303319";*/  /* N 158 */	#ifdef TYPE2	genlambda2();#else	genlambda();#endif	random_seed = 0xFEEDFACE;/*  compute curve order from Koblitz data  */	ascii_to_bigint(&string1, &prime_order);	int_to_field( &prime_order, &Base.pnt_order);	null( &Base.cofactor);	Base.cofactor.e[NUMWORD] = 2;/*  create Koblitz curve  */	Base.crv.form = 1;	one(&Base.crv.a2);	one(&Base.crv.a6);	print_curve("Koblitz 113", &Base.crv);/*  create base point of known order with no cofactor  */	rand_point( &temp, &Base.crv);	edbl( &temp, &Base.pnt, &Base.crv);	print_point(" Base point ",&Base.pnt);	/*  Create each sides public keys.  These are the permenent	versions which can be saved in a data base.*/	printf("permenent keys\n");	ECKGP( &Base, &side1_perm);	print_field("side 1 secret key", &side1_perm.prvt_key);	print_point("side 1 public key", &side1_perm.pblc_key);	ECKGP( &Base, &side2_perm);	print_field("side 2 secret key", &side2_perm.prvt_key);	print_point("side 2 public key", &side2_perm.pblc_key);/*  Create each sides ephemeral keys.  These are destroyed	after each link is established.*/	printf("ephemeral keys\n");	ECKGP( &Base, &side1_ephem);	print_field("side 1 secret key", &side1_ephem.prvt_key);	print_point("side 1 public key", &side1_ephem.pblc_key);	ECKGP( &Base, &side2_ephem);	print_field("side 2 secret key", &side2_ephem.prvt_key);	print_point("side 2 public key", &side2_ephem.pblc_key);/*  Each side exchanges both sets of public keys.  Then they	both perform the same calculations with the other sides	data to find the same shared secret.*/	onb_mqv( &Base, &side1_perm, &side1_ephem, &side2_perm.pblc_key,				&side2_ephem.pblc_key, &side1_secret);	print_field("side 1 secret value", &side1_secret);	onb_mqv( &Base, &side2_perm, &side2_ephem, &side1_perm.pblc_key,				&side1_ephem.pblc_key, &side2_secret);	print_field("side 2 secret value", &side2_secret);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?