40 #define PTHREAD_THREADS_MAX 2048
61 "[-c config] -r repository [-i iterations] [-s keysize] [-t threads]\n",
72 unsigned int iterations = 0;
75 ldns_rr *rr, *sig, *dnskey_rr;
85 fprintf(stderr,
"Signer thread #%d started...\n", sign_arg->
id);
88 rrset = ldns_rr_list_new();
89 status = ldns_rr_new_frm_str(&rr,
"regress.opendnssec.se. IN A 123.123.123.123", 0, NULL, NULL);
90 if (status == LDNS_STATUS_OK) ldns_rr_list_push_rr(rrset, rr);
91 status = ldns_rr_new_frm_str(&rr,
"regress.opendnssec.se. IN A 124.124.124.124", 0, NULL, NULL);
92 if (status == LDNS_STATUS_OK) ldns_rr_list_push_rr(rrset, rr);
95 sign_params->
owner = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_DNAME,
"opendnssec.se.");
97 sign_params->
keytag = ldns_calc_keytag(dnskey_rr);
100 for (i=0; i<iterations; i++) {
104 "hsm_sign_rrset() returned error: %s in %s\n",
114 ldns_rr_list_deep_free(rrset);
116 ldns_rr_free(dnskey_rr);
119 fprintf(stderr,
"Signer thread #%d done.\n", sign_arg->
id);
132 unsigned int keysize = 1024;
133 unsigned int iterations = 1;
134 unsigned int threads = 1;
136 static struct timeval start,end;
139 const char *repository = NULL;
144 pthread_attr_t thread_attr;
149 double elapsed, speed;
153 while ((ch = getopt(argc, argv,
"c:i:r:s:t:")) != -1) {
159 iterations = atoi(
optarg);
162 repository = strdup(
optarg);
189 fprintf(stderr,
"Opening HSM Library...\n");
192 fprintf(stderr,
"hsm_open() returned %d\n", result);
199 fprintf(stderr,
"hsm_create_context() returned error\n");
204 fprintf(stderr,
"Generating temporary key...\n");
208 fprintf(stderr,
"Temporary key created: %s\n",
id);
211 fprintf(stderr,
"Could not generate a key pair in repository \"%s\"\n", repository);
216 pthread_attr_init(&thread_attr);
217 pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_JOINABLE);
219 for (n=0; n<threads; n++) {
220 sign_arg_array[n].
id = n;
222 if (! sign_arg_array[n].ctx) {
223 fprintf(stderr,
"hsm_create_context() returned error\n");
226 sign_arg_array[n].
key = key;
230 fprintf(stderr,
"Signing %d RRsets with %s using %d %s...\n",
231 iterations,
algoname, threads, (threads > 1 ?
"threads" :
"thread"));
232 gettimeofday(&start, NULL);
235 for (n=0; n<threads; n++) {
236 result = pthread_create(&thread_array[n], &thread_attr,
237 sign, (
void *) &sign_arg_array[n]);
239 fprintf(stderr,
"pthread_create() returned %d\n", result);
245 for (n=0; n<threads; n++) {
246 result = pthread_join(thread_array[n], &thread_status);
248 fprintf(stderr,
"pthread_join() returned %d\n", result);
253 gettimeofday(&end, NULL);
254 fprintf(stderr,
"Signing done.\n");
257 end.tv_sec -= start.tv_sec;
258 end.tv_usec-= start.tv_usec;
259 elapsed =(double)(end.tv_sec)+(double)(end.tv_usec)*.000001;
260 speed = iterations / elapsed * threads;
261 printf(
"%d %s, %d signatures per thread, %.2f sig/s (RSA %d bits)\n",
262 threads, (threads > 1 ?
"threads" :
"thread"), iterations,
266 fprintf(stderr,
"Deleting temporary key...\n");
269 fprintf(stderr,
"hsm_remove_key() returned %d\n", result);
276 if (config) free(config);
char * hsm_get_key_id(hsm_ctx_t *ctx, const hsm_key_t *key)
char * hsm_prompt_pin(const char *repository, void *data)
const char * error_action
void hsm_sign_params_free(hsm_sign_params_t *params)
#define PTHREAD_THREADS_MAX
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)(const char *repository, void *), void *data)
int main(int argc, char *argv[])
hsm_sign_params_t * hsm_sign_params_new()
char error_message[HSM_ERROR_MSGSIZE]
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)
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)