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