38 #define HSMSPEED_THREADS_MAX 2048 59 "[-c config] -r repository [-i iterations] [-s keysize] [-t threads]\n",
70 unsigned int iterations = 0;
73 ldns_rr *rr, *sig, *dnskey_rr;
83 fprintf(stderr,
"Signer thread #%d started...\n", sign_arg->
id);
86 rrset = ldns_rr_list_new();
87 status = ldns_rr_new_frm_str(&rr,
"regress.opendnssec.se. IN A 123.123.123.123", 0, NULL, NULL);
88 if (status == LDNS_STATUS_OK) ldns_rr_list_push_rr(rrset, rr);
89 status = ldns_rr_new_frm_str(&rr,
"regress.opendnssec.se. IN A 124.124.124.124", 0, NULL, NULL);
90 if (status == LDNS_STATUS_OK) ldns_rr_list_push_rr(rrset, rr);
93 sign_params->
owner = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_DNAME,
"opendnssec.se.");
95 sign_params->
keytag = ldns_calc_keytag(dnskey_rr);
98 for (i=0; i<iterations; i++) {
102 "hsm_sign_rrset() returned error: %s in %s\n",
112 ldns_rr_list_deep_free(rrset);
114 ldns_rr_free(dnskey_rr);
117 fprintf(stderr,
"Signer thread #%d done.\n", sign_arg->
id);
131 unsigned int keysize = 1024;
132 unsigned int iterations = 1;
133 unsigned int threads = 1;
135 static struct timeval start,end;
138 const char *repository = NULL;
143 pthread_attr_t thread_attr;
148 double elapsed, speed;
152 while ((ch = getopt(argc, argv,
"c:i:r:s:t:")) != -1) {
158 iterations = atoi(
optarg);
161 repository = strdup(
optarg);
181 fprintf(stderr,
"Number of threads specified over max, force using %d threads!\n",
HSMSPEED_THREADS_MAX);
193 fprintf(stderr,
"Opening HSM Library...\n");
196 fprintf(stderr,
"hsm_open() returned %d\n", result);
203 fprintf(stderr,
"hsm_create_context() returned error\n");
208 fprintf(stderr,
"Generating temporary key...\n");
212 fprintf(stderr,
"Temporary key created: %s\n",
id);
215 fprintf(stderr,
"Could not generate a key pair in repository \"%s\"\n", repository);
220 pthread_attr_init(&thread_attr);
221 pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_JOINABLE);
223 for (n=0; n<threads; n++) {
224 sign_arg_array[n].
id = n;
226 if (! sign_arg_array[n].ctx) {
227 fprintf(stderr,
"hsm_create_context() returned error\n");
230 sign_arg_array[n].
key = key;
234 fprintf(stderr,
"Signing %d RRsets with %s using %d %s...\n",
235 iterations,
algoname, threads, (threads > 1 ?
"threads" :
"thread"));
236 gettimeofday(&start, NULL);
239 for (n=0; n<threads; n++) {
240 result = pthread_create(&thread_array[n], &thread_attr,
241 sign, (
void *) &sign_arg_array[n]);
243 fprintf(stderr,
"pthread_create() returned %d\n", result);
249 for (n=0; n<threads; n++) {
250 result = pthread_join(thread_array[n], &thread_status);
252 fprintf(stderr,
"pthread_join() returned %d\n", result);
257 gettimeofday(&end, NULL);
258 fprintf(stderr,
"Signing done.\n");
261 end.tv_sec -= start.tv_sec;
262 end.tv_usec-= start.tv_usec;
263 elapsed =(double)(end.tv_sec)+(double)(end.tv_usec)*.000001;
264 speed = iterations / elapsed * threads;
265 printf(
"%d %s, %d signatures per thread, %.2f sig/s (RSA %d bits)\n",
266 threads, (threads > 1 ?
"threads" :
"thread"), iterations,
270 fprintf(stderr,
"Deleting temporary key...\n");
273 fprintf(stderr,
"hsm_remove_key() returned %d\n", result);
280 if (config) free(config);
char * hsm_get_key_id(hsm_ctx_t *ctx, const hsm_key_t *key)
const char * error_action
void hsm_sign_params_free(hsm_sign_params_t *params)
ldns_rr * hsm_get_dnskey(hsm_ctx_t *ctx, const hsm_key_t *key, const hsm_sign_params_t *sign_params)
void hsm_destroy_context(hsm_ctx_t *ctx)
int hsm_open(const char *config, char *(pin_callback)(unsigned int, const char *, unsigned int))
int main(int argc, char *argv[])
hsm_sign_params_t * hsm_sign_params_new()
char error_message[HSM_ERROR_MSGSIZE]
#define HSMSPEED_THREADS_MAX
int hsm_remove_key(hsm_ctx_t *ctx, hsm_key_t *key)
hsm_ctx_t * hsm_create_context()
hsm_key_t * hsm_generate_rsa_key(hsm_ctx_t *ctx, const char *repository, unsigned long keysize)
char * hsm_prompt_pin(unsigned int id, const char *repository, unsigned int mode)
ldns_rr * hsm_sign_rrset(hsm_ctx_t *ctx, const ldns_rr_list *rrset, const hsm_key_t *key, const hsm_sign_params_t *sign_params)