2 This file is part of GNUnet.
3 Copyright (C) 2014 GNUnet e.V.
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
17 * @author Christian Grothoff
18 * @file util/perf_crypto_rsa.c
19 * @brief measure performance of RSA signing
22 #include "gnunet_util_lib.h"
27 * Evaluate RSA performance.
29 * @param len keylength to evaluate with
32 eval (unsigned int len)
34 struct GNUNET_TIME_Absolute start;
35 struct GNUNET_CRYPTO_RsaSignature *sig;
36 struct GNUNET_CRYPTO_RsaSignature *rsig;
37 struct GNUNET_CRYPTO_RsaPublicKey *public_key;
38 struct GNUNET_CRYPTO_RsaPrivateKey *private_key;
39 struct GNUNET_CRYPTO_RsaBlindingKeySecret bsec[10];
44 struct GNUNET_HashCode hc;
46 start = GNUNET_TIME_absolute_get ();
49 private_key = GNUNET_CRYPTO_rsa_private_key_create (len);
50 GNUNET_CRYPTO_rsa_private_key_free (private_key);
52 printf ("10x %u-key generation took %s\n",
54 GNUNET_STRINGS_relative_time_to_string (GNUNET_TIME_absolute_get_duration (start),
56 GNUNET_snprintf (sbuf,
58 "RSA %u-key generation",
62 GNUNET_TIME_absolute_get_duration
63 (start).rel_value_us / 1000LL), "keys/ms");
64 private_key = GNUNET_CRYPTO_rsa_private_key_create (len);
65 public_key = GNUNET_CRYPTO_rsa_private_key_get_public (private_key);
67 GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK,
68 &bsec[i], sizeof (bsec[0]));
70 start = GNUNET_TIME_absolute_get ();
72 rsa_blinding_key_derive(public_key, &bsec[i]);
73 printf ("10x %u-blinding key generation took %s\n",
75 GNUNET_STRINGS_relative_time_to_string (GNUNET_TIME_absolute_get_duration (start),
77 GNUNET_snprintf (sbuf,
79 "RSA %u-blinding key generation",
83 GNUNET_TIME_absolute_get_duration
84 (start).rel_value_us / 1000LL), "keys/ms");
86 start = GNUNET_TIME_absolute_get ();
87 GNUNET_CRYPTO_hash ("test", 4, &hc);
90 GNUNET_CRYPTO_rsa_blind (&hc,
96 printf ("10x %u-blinding took %s\n",
98 GNUNET_STRINGS_relative_time_to_string (GNUNET_TIME_absolute_get_duration (start),
100 GNUNET_snprintf (sbuf,
107 GNUNET_TIME_absolute_get_duration
108 (start).rel_value_us / 1000LL), "ops/ms");
109 GNUNET_CRYPTO_rsa_blind (&hc,
113 start = GNUNET_TIME_absolute_get ();
116 sig = GNUNET_CRYPTO_rsa_sign_blinded (private_key,
118 GNUNET_CRYPTO_rsa_signature_free (sig);
120 printf ("10x %u-signing took %s\n",
122 GNUNET_STRINGS_relative_time_to_string (GNUNET_TIME_absolute_get_duration (start),
124 GNUNET_snprintf (sbuf,
131 GNUNET_TIME_absolute_get_duration
132 (start).rel_value_us / 1000LL), "ops/ms");
133 sig = GNUNET_CRYPTO_rsa_sign_blinded (private_key,
136 start = GNUNET_TIME_absolute_get ();
139 rsig = GNUNET_CRYPTO_rsa_unblind (sig,
142 GNUNET_CRYPTO_rsa_signature_free (rsig);
144 printf ("10x %u-unblinding took %s\n",
146 GNUNET_STRINGS_relative_time_to_string (GNUNET_TIME_absolute_get_duration (start),
148 GNUNET_snprintf (sbuf,
155 GNUNET_TIME_absolute_get_duration
156 (start).rel_value_us / 1000LL), "ops/ms");
157 rsig = GNUNET_CRYPTO_rsa_unblind (sig,
160 start = GNUNET_TIME_absolute_get ();
163 GNUNET_assert (GNUNET_OK ==
164 GNUNET_CRYPTO_rsa_verify (&hc,
168 printf ("10x %u-verifying took %s\n",
170 GNUNET_STRINGS_relative_time_to_string (GNUNET_TIME_absolute_get_duration (start),
172 GNUNET_snprintf (sbuf,
174 "RSA %u-verification",
179 GNUNET_TIME_absolute_get_duration
180 (start).rel_value_us / 1000LL), "ops/ms");
181 GNUNET_CRYPTO_rsa_signature_free (sig);
182 GNUNET_CRYPTO_rsa_public_key_free (public_key);
183 GNUNET_CRYPTO_rsa_private_key_free (private_key);
189 main (int argc, char *argv[])
198 /* end of perf_crypto_rsa.c */