xref: /freebsd/crypto/libecc/src/wycheproof_tests/libecc_wycheproof.h (revision f0865ec9906d5a18fa2a3b61381f22ce16e606ad)
1*f0865ec9SKyle Evans /*
2*f0865ec9SKyle Evans  *  Copyright (C) 2021 - 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  *
8*f0865ec9SKyle Evans  *  This software is licensed under a dual BSD and GPL v2 license.
9*f0865ec9SKyle Evans  *  See LICENSE file at the root folder of the project.
10*f0865ec9SKyle Evans  */
11*f0865ec9SKyle Evans 
12*f0865ec9SKyle Evans /*
13*f0865ec9SKyle Evans  * Source code for handling tests imported from the wycheproof project:
14*f0865ec9SKyle Evans  *     https://github.com/google/wycheproof
15*f0865ec9SKyle Evans  *
16*f0865ec9SKyle Evans  * As this project primarily targets java cryptographic libraries, the
17*f0865ec9SKyle Evans  * json test files have been parsed to generate libecc friendly test cases.
18*f0865ec9SKyle Evans  *
19*f0865ec9SKyle Evans  * NOTE: we skip here all the tests related to ASN.1 format errors as libecc
20*f0865ec9SKyle Evans  * does not handle ASN.1 parsing at all. This explains the "skipped" tests from
21*f0865ec9SKyle Evans  * the wycheproof project.
22*f0865ec9SKyle Evans  *
23*f0865ec9SKyle Evans  */
24*f0865ec9SKyle Evans 
25*f0865ec9SKyle Evans #include <libecc/libsig.h>
26*f0865ec9SKyle Evans 
27*f0865ec9SKyle Evans typedef struct {
28*f0865ec9SKyle Evans 	/* Test case name */
29*f0865ec9SKyle Evans 	const char *name;
30*f0865ec9SKyle Evans 
31*f0865ec9SKyle Evans 	ec_alg_type sig_alg;
32*f0865ec9SKyle Evans 
33*f0865ec9SKyle Evans 	hash_alg_type hash;
34*f0865ec9SKyle Evans 
35*f0865ec9SKyle Evans 	/* Curve params */
36*f0865ec9SKyle Evans 	const ec_str_params *curve;
37*f0865ec9SKyle Evans 
38*f0865ec9SKyle Evans 	const unsigned char *pubkey;
39*f0865ec9SKyle Evans 	unsigned int pubkeylen;
40*f0865ec9SKyle Evans 
41*f0865ec9SKyle Evans 	const unsigned char *msg;
42*f0865ec9SKyle Evans 	unsigned int msglen;
43*f0865ec9SKyle Evans 
44*f0865ec9SKyle Evans 	const unsigned char *sig;
45*f0865ec9SKyle Evans 	unsigned int siglen;
46*f0865ec9SKyle Evans 
47*f0865ec9SKyle Evans 	int result;
48*f0865ec9SKyle Evans 
49*f0865ec9SKyle Evans 	const char *comment;
50*f0865ec9SKyle Evans } wycheproof_ecdsa_test;
51*f0865ec9SKyle Evans 
52*f0865ec9SKyle Evans typedef struct {
53*f0865ec9SKyle Evans 	/* Test case name */
54*f0865ec9SKyle Evans 	const char *name;
55*f0865ec9SKyle Evans 
56*f0865ec9SKyle Evans 	ec_alg_type sig_alg;
57*f0865ec9SKyle Evans 
58*f0865ec9SKyle Evans 	hash_alg_type hash;
59*f0865ec9SKyle Evans 
60*f0865ec9SKyle Evans 	/* Curve params */
61*f0865ec9SKyle Evans 	const ec_str_params *curve;
62*f0865ec9SKyle Evans 
63*f0865ec9SKyle Evans 	const unsigned char *pubkey;
64*f0865ec9SKyle Evans 	unsigned int pubkeylen;
65*f0865ec9SKyle Evans 
66*f0865ec9SKyle Evans 	const unsigned char *privkey;
67*f0865ec9SKyle Evans 	unsigned int privkeylen;
68*f0865ec9SKyle Evans 
69*f0865ec9SKyle Evans 	const unsigned char *msg;
70*f0865ec9SKyle Evans 	unsigned int msglen;
71*f0865ec9SKyle Evans 
72*f0865ec9SKyle Evans 	const unsigned char *sig;
73*f0865ec9SKyle Evans 	unsigned int siglen;
74*f0865ec9SKyle Evans 
75*f0865ec9SKyle Evans 	int result;
76*f0865ec9SKyle Evans 
77*f0865ec9SKyle Evans 	const char *comment;
78*f0865ec9SKyle Evans } wycheproof_eddsa_test;
79*f0865ec9SKyle Evans 
80*f0865ec9SKyle Evans typedef struct {
81*f0865ec9SKyle Evans 	/* Test case name */
82*f0865ec9SKyle Evans 	const char *name;
83*f0865ec9SKyle Evans 
84*f0865ec9SKyle Evans 	ec_alg_type xdh_alg;
85*f0865ec9SKyle Evans 
86*f0865ec9SKyle Evans 	/* Curve params */
87*f0865ec9SKyle Evans 	const ec_str_params *curve;
88*f0865ec9SKyle Evans 
89*f0865ec9SKyle Evans 	const unsigned char *peerpubkey;
90*f0865ec9SKyle Evans 	unsigned int peerpubkeylen;
91*f0865ec9SKyle Evans 
92*f0865ec9SKyle Evans 	const unsigned char *ourpubkey;
93*f0865ec9SKyle Evans 	unsigned int ourpubkeylen;
94*f0865ec9SKyle Evans 
95*f0865ec9SKyle Evans 	const unsigned char *privkey;
96*f0865ec9SKyle Evans 	unsigned int privkeylen;
97*f0865ec9SKyle Evans 
98*f0865ec9SKyle Evans 	const unsigned char *sharedsecret;
99*f0865ec9SKyle Evans 	unsigned int sharedsecretlen;
100*f0865ec9SKyle Evans 
101*f0865ec9SKyle Evans 	int result;
102*f0865ec9SKyle Evans 
103*f0865ec9SKyle Evans 	const char *comment;
104*f0865ec9SKyle Evans } wycheproof_xdh_test;
105*f0865ec9SKyle Evans 
106*f0865ec9SKyle Evans typedef struct {
107*f0865ec9SKyle Evans 	/* Test case name */
108*f0865ec9SKyle Evans 	const char *name;
109*f0865ec9SKyle Evans 
110*f0865ec9SKyle Evans 	ec_alg_type ecdh_alg;
111*f0865ec9SKyle Evans 
112*f0865ec9SKyle Evans 	/* Curve params */
113*f0865ec9SKyle Evans 	const ec_str_params *curve;
114*f0865ec9SKyle Evans 
115*f0865ec9SKyle Evans 	const unsigned char *peerpubkey;
116*f0865ec9SKyle Evans 	unsigned int peerpubkeylen;
117*f0865ec9SKyle Evans 	int compressed;
118*f0865ec9SKyle Evans 
119*f0865ec9SKyle Evans 	const unsigned char *ourpubkey;
120*f0865ec9SKyle Evans 	unsigned int ourpubkeylen;
121*f0865ec9SKyle Evans 
122*f0865ec9SKyle Evans 	const unsigned char *privkey;
123*f0865ec9SKyle Evans 	unsigned int privkeylen;
124*f0865ec9SKyle Evans 
125*f0865ec9SKyle Evans 	const unsigned char *sharedsecret;
126*f0865ec9SKyle Evans 	unsigned int sharedsecretlen;
127*f0865ec9SKyle Evans 
128*f0865ec9SKyle Evans 	int result;
129*f0865ec9SKyle Evans 
130*f0865ec9SKyle Evans 	const char *comment;
131*f0865ec9SKyle Evans } wycheproof_ecdh_test;
132*f0865ec9SKyle Evans 
133*f0865ec9SKyle Evans typedef struct {
134*f0865ec9SKyle Evans 	/* Test case name */
135*f0865ec9SKyle Evans 	const char *name;
136*f0865ec9SKyle Evans 
137*f0865ec9SKyle Evans 	hash_alg_type hash;
138*f0865ec9SKyle Evans 
139*f0865ec9SKyle Evans 	const unsigned char *key;
140*f0865ec9SKyle Evans 	unsigned int keylen;
141*f0865ec9SKyle Evans 
142*f0865ec9SKyle Evans 	const unsigned char *msg;
143*f0865ec9SKyle Evans 	unsigned int msglen;
144*f0865ec9SKyle Evans 
145*f0865ec9SKyle Evans 	const unsigned char *tag;
146*f0865ec9SKyle Evans 	unsigned int taglen;
147*f0865ec9SKyle Evans 
148*f0865ec9SKyle Evans 	int result;
149*f0865ec9SKyle Evans 
150*f0865ec9SKyle Evans 	const char *comment;
151*f0865ec9SKyle Evans } wycheproof_hmac_test;
152