11
11
#include "util.h"
12
12
#include "bench.h"
13
13
14
+ #ifdef ENABLE_OPENSSL_TESTS
15
+ #include <openssl/bn.h>
16
+ #include <openssl/ecdsa.h>
17
+ #include <openssl/obj_mac.h>
18
+ #endif
19
+
14
20
typedef struct {
15
21
secp256k1_context * ctx ;
16
22
unsigned char msg [32 ];
@@ -19,6 +25,9 @@ typedef struct {
19
25
size_t siglen ;
20
26
unsigned char pubkey [33 ];
21
27
size_t pubkeylen ;
28
+ #ifdef ENABLE_OPENSSL_TESTS
29
+ EC_GROUP * ec_group ;
30
+ #endif
22
31
} benchmark_verify_t ;
23
32
24
33
static void benchmark_verify (void * arg ) {
@@ -40,6 +49,36 @@ static void benchmark_verify(void* arg) {
40
49
}
41
50
}
42
51
52
+ #ifdef ENABLE_OPENSSL_TESTS
53
+ static void benchmark_verify_openssl (void * arg ) {
54
+ int i ;
55
+ benchmark_verify_t * data = (benchmark_verify_t * )arg ;
56
+
57
+ for (i = 0 ; i < 20000 ; i ++ ) {
58
+ data -> sig [data -> siglen - 1 ] ^= (i & 0xFF );
59
+ data -> sig [data -> siglen - 2 ] ^= ((i >> 8 ) & 0xFF );
60
+ data -> sig [data -> siglen - 3 ] ^= ((i >> 16 ) & 0xFF );
61
+ {
62
+ EC_KEY * pkey = EC_KEY_new ();
63
+ const unsigned char * pubkey = & data -> pubkey [0 ];
64
+ int result ;
65
+
66
+ CHECK (pkey != NULL );
67
+ result = EC_KEY_set_group (pkey , data -> ec_group );
68
+ CHECK (result );
69
+ result = (o2i_ECPublicKey (& pkey , & pubkey , data -> pubkeylen )) != NULL ;
70
+ CHECK (result );
71
+ result = ECDSA_verify (0 , & data -> msg [0 ], sizeof (data -> msg ), & data -> sig [0 ], data -> siglen , pkey ) == (i == 0 );
72
+ CHECK (result );
73
+ EC_KEY_free (pkey );
74
+ }
75
+ data -> sig [data -> siglen - 1 ] ^= (i & 0xFF );
76
+ data -> sig [data -> siglen - 2 ] ^= ((i >> 8 ) & 0xFF );
77
+ data -> sig [data -> siglen - 3 ] ^= ((i >> 16 ) & 0xFF );
78
+ }
79
+ }
80
+ #endif
81
+
43
82
int main (void ) {
44
83
int i ;
45
84
secp256k1_pubkey pubkey ;
@@ -62,6 +101,11 @@ int main(void) {
62
101
CHECK (secp256k1_ec_pubkey_serialize (data .ctx , data .pubkey , & data .pubkeylen , & pubkey , SECP256K1_EC_COMPRESSED ) == 1 );
63
102
64
103
run_benchmark ("ecdsa_verify" , benchmark_verify , NULL , NULL , & data , 10 , 20000 );
104
+ #ifdef ENABLE_OPENSSL_TESTS
105
+ data .ec_group = EC_GROUP_new_by_curve_name (NID_secp256k1 );
106
+ run_benchmark ("ecdsa_verify_openssl" , benchmark_verify_openssl , NULL , NULL , & data , 10 , 20000 );
107
+ EC_GROUP_free (data .ec_group );
108
+ #endif
65
109
66
110
secp256k1_context_destroy (data .ctx );
67
111
return 0 ;
0 commit comments