40#define HSMSPEED_THREADS_MAX 2048
60 "[-c config] -r repository [-i iterations] [-s keysize] [-t threads]\n",
71 unsigned int iterations = 0;
74 ldns_rr *rr, *sig, *dnskey_rr;
84 fprintf(stderr,
"Signer thread #%d started...\n", sign_arg->
id);
87 rrset = ldns_rr_list_new();
88 status = ldns_rr_new_frm_str(&rr,
"regress.opendnssec.se. IN A 123.123.123.123", 0, NULL, NULL);
89 if (status == LDNS_STATUS_OK) ldns_rr_list_push_rr(rrset, rr);
90 status = ldns_rr_new_frm_str(&rr,
"regress.opendnssec.se. IN A 124.124.124.124", 0, NULL, NULL);
91 if (status == LDNS_STATUS_OK) ldns_rr_list_push_rr(rrset, rr);
94 sign_params->
owner = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_DNAME,
"opendnssec.se.");
96 sign_params->
keytag = ldns_calc_keytag(dnskey_rr);
99 for (i=0; i<iterations; i++) {
103 "hsm_sign_rrset() returned error: %s in %s\n",
113 ldns_rr_list_deep_free(rrset);
115 ldns_rr_free(dnskey_rr);
118 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);
182 fprintf(stderr,
"Number of threads specified over max, force using %d threads!\n",
HSMSPEED_THREADS_MAX);
194 fprintf(stderr,
"Opening HSM Library...\n");
199 fprintf(stderr,
"%s\n", error);
208 fprintf(stderr,
"hsm_create_context() returned error\n");
213 fprintf(stderr,
"Generating temporary key...\n");
217 fprintf(stderr,
"Temporary key created: %s\n",
id);
220 fprintf(stderr,
"Could not generate a key pair in repository \"%s\"\n", repository);
225 pthread_attr_init(&thread_attr);
226 pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_JOINABLE);
228 for (n=0; n<threads; n++) {
229 sign_arg_array[n].
id = n;
231 if (! sign_arg_array[n].
ctx) {
232 fprintf(stderr,
"hsm_create_context() returned error\n");
235 sign_arg_array[n].
key = key;
239 fprintf(stderr,
"Signing %d RRsets with %s using %d %s...\n",
240 iterations,
algoname, threads, (threads > 1 ?
"threads" :
"thread"));
241 gettimeofday(&start, NULL);
244 for (n=0; n<threads; n++) {
245 result = pthread_create(&thread_array[n], &thread_attr,
246 sign, (
void *) &sign_arg_array[n]);
248 fprintf(stderr,
"pthread_create() returned %d\n", result);
254 for (n=0; n<threads; n++) {
255 result = pthread_join(thread_array[n], &thread_status);
257 fprintf(stderr,
"pthread_join() returned %d\n", result);
262 gettimeofday(&end, NULL);
263 fprintf(stderr,
"Signing done.\n");
266 end.tv_sec -= start.tv_sec;
267 end.tv_usec-= start.tv_usec;
268 elapsed =(double)(end.tv_sec)+(double)(end.tv_usec)*.000001;
269 speed = iterations / elapsed * threads;
270 printf(
"%d %s, %d signatures per thread, %.2f sig/s (RSA %d bits)\n",
271 threads, (threads > 1 ?
"threads" :
"thread"), iterations,
275 fprintf(stderr,
"Deleting temporary key...\n");
278 fprintf(stderr,
"hsm_remove_key() returned %d\n", result);
285 if (config) free(config);
int main(int argc, char *argv[])
hsm_repository_t * parse_conf_repositories(const char *cfgfile)
#define HSMSPEED_THREADS_MAX
ldns_rr * hsm_sign_rrset(hsm_ctx_t *ctx, const ldns_rr_list *rrset, const libhsm_key_t *key, const hsm_sign_params_t *sign_params)
char * hsm_get_error(hsm_ctx_t *gctx)
libhsm_key_t * hsm_generate_rsa_key(hsm_ctx_t *ctx, const char *repository, unsigned long keysize)
hsm_sign_params_t * hsm_sign_params_new()
char * hsm_get_key_id(hsm_ctx_t *ctx, const libhsm_key_t *key)
int hsm_open2(hsm_repository_t *rlist, char *(pin_callback)(unsigned int, const char *, unsigned int))
ldns_rr * hsm_get_dnskey(hsm_ctx_t *ctx, const libhsm_key_t *key, const hsm_sign_params_t *sign_params)
int hsm_remove_key(hsm_ctx_t *ctx, libhsm_key_t *key)
void hsm_destroy_context(hsm_ctx_t *ctx)
void hsm_sign_params_free(hsm_sign_params_t *params)
hsm_ctx_t * hsm_create_context()
char * hsm_prompt_pin(unsigned int id, const char *repository, unsigned int mode)
char error_message[HSM_ERROR_MSGSIZE]
const char * error_action