40 #define HSMSPEED_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);
133 unsigned int keysize = 1024;
134 unsigned int iterations = 1;
135 unsigned int threads = 1;
137 static struct timeval start,end;
140 const char *repository = NULL;
145 pthread_attr_t thread_attr;
150 double elapsed, speed;
154 while ((ch = getopt(argc, argv,
"c:i:r:s:t:")) != -1) {
160 iterations = atoi(
optarg);
163 repository = strdup(
optarg);
183 fprintf(stderr,
"Number of threads specified over max, force using %d threads!\n",
HSMSPEED_THREADS_MAX);
195 fprintf(stderr,
"Opening HSM Library...\n");
200 fprintf(stderr,
"%s\n", error);
209 fprintf(stderr,
"hsm_create_context() returned error\n");
214 fprintf(stderr,
"Generating temporary key...\n");
218 fprintf(stderr,
"Temporary key created: %s\n",
id);
221 fprintf(stderr,
"Could not generate a key pair in repository \"%s\"\n", repository);
226 pthread_attr_init(&thread_attr);
227 pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_JOINABLE);
229 for (n=0; n<threads; n++) {
230 sign_arg_array[n].
id = n;
232 if (! sign_arg_array[n].
ctx) {
233 fprintf(stderr,
"hsm_create_context() returned error\n");
236 sign_arg_array[n].
key = key;
240 fprintf(stderr,
"Signing %d RRsets with %s using %d %s...\n",
241 iterations,
algoname, threads, (threads > 1 ?
"threads" :
"thread"));
242 gettimeofday(&start, NULL);
245 for (n=0; n<threads; n++) {
246 result = pthread_create(&thread_array[n], &thread_attr,
247 sign, (
void *) &sign_arg_array[n]);
249 fprintf(stderr,
"pthread_create() returned %d\n", result);
255 for (n=0; n<threads; n++) {
256 result = pthread_join(thread_array[n], &thread_status);
258 fprintf(stderr,
"pthread_join() returned %d\n", result);
263 gettimeofday(&end, NULL);
264 fprintf(stderr,
"Signing done.\n");
267 end.tv_sec -= start.tv_sec;
268 end.tv_usec-= start.tv_usec;
269 elapsed =(double)(end.tv_sec)+(double)(end.tv_usec)*.000001;
270 speed = iterations / elapsed * threads;
271 printf(
"%d %s, %d signatures per thread, %.2f sig/s (RSA %d bits)\n",
272 threads, (threads > 1 ?
"threads" :
"thread"), iterations,
276 fprintf(stderr,
"Deleting temporary key...\n");
279 fprintf(stderr,
"hsm_remove_key() returned %d\n", result);
286 if (config) free(config);
int main(int argc, char *argv[])
hsm_repository_t * parse_conf_repositories(const char *cfgfile)
#define HSMSPEED_THREADS_MAX
char * hsm_get_error(hsm_ctx_t *gctx)
char * hsm_get_key_id(hsm_ctx_t *ctx, const libhsm_key_t *key)
hsm_ctx_t * hsm_create_context()
ldns_rr * hsm_get_dnskey(hsm_ctx_t *ctx, const libhsm_key_t *key, const hsm_sign_params_t *sign_params)
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)
libhsm_key_t * hsm_generate_rsa_key(hsm_ctx_t *ctx, const char *repository, unsigned long keysize)
int hsm_open2(hsm_repository_t *rlist, char *(pin_callback)(unsigned int, const char *, unsigned int))
int hsm_remove_key(hsm_ctx_t *ctx, libhsm_key_t *key)
void hsm_destroy_context(hsm_ctx_t *ctx)
hsm_sign_params_t * hsm_sign_params_new()
void hsm_sign_params_free(hsm_sign_params_t *params)
char * hsm_prompt_pin(unsigned int id, const char *repository, unsigned int mode)
char error_message[HSM_ERROR_MSGSIZE]
const char * error_action