279 const char *lumps[2];
280 char *databuf_in;
size_t databufsize_in;
281 char *databuf_out;
size_t databufsize_out;
282 char *databuf_sig;
size_t databufsize_sig;
283 char lumps_w0[65536];
284 char lumps_w1[65536];
285 const char *pubkeyfile =
NULL, *privkeyfile =
NULL, *pubidfile =
NULL, *prividfile =
NULL, *idreqfile =
NULL, *idresfile =
NULL, *
outfile =
NULL, *outfile2 =
NULL, *camouflagefile =
NULL, *datafile =
NULL, *sigfile =
NULL;
286 char fp64[513];
size_t fp64size = 512;
292 if(!d0_blind_id_INITIALIZE())
294 fprintf(stderr,
"could not initialize\n");
300 ctx = d0_blind_id_new();
301 while((opt = getopt(argc,
argv,
"d:s:p:P:i:I:j:J:o:O:c:b:x:X:y:Fn:C0")) != -1)
319 privkeyfile = optarg;
347 camouflagefile = optarg;
408 if(!d0_blind_id_read_public_key(ctx, lumps[0], lumpsize[0]))
410 fprintf(stderr,
"could not decode public key\n");
413 if(!d0_blind_id_read_private_id_modulus(ctx, lumps[1], lumpsize[1]))
415 fprintf(stderr,
"could not decode modulus\n");
422 if(!d0_blind_id_read_private_key(ctx, lumps[0], lumpsize[0]))
424 fprintf(stderr,
"could not decode private key\n");
427 if(!d0_blind_id_read_private_id_modulus(ctx, lumps[1], lumpsize[1]))
429 fprintf(stderr,
"could not decode modulus\n");
437 if(!d0_blind_id_read_public_id(ctx, lumps[0], lumpsize[0]))
439 fprintf(stderr,
"could not decode public ID\n");
446 if(!d0_blind_id_read_private_id(ctx, lumps[0], lumpsize[0]))
448 fprintf(stderr,
"could not decode private ID\n");
456 lumpsize[1] =
sizeof(lumps_w1);
458 if(!d0_blind_id_answer_private_id_request(ctx, lumps[0], lumpsize[0], lumps_w1, &lumpsize[1]))
460 fprintf(stderr,
"could not answer private ID request\n");
464 else if((
mask & 0x120) == 0x120)
467 if(!d0_blind_id_read_private_id_request_camouflage(ctx, lumps[0], lumpsize[0]))
469 fprintf(stderr,
"could not decode camouflage\n");
474 if(!d0_blind_id_finish_private_id_request(ctx, lumps[0], lumpsize[0]))
476 fprintf(stderr,
"could not finish private ID request\n");
483 file2buf(datafile, &databuf_in, &databufsize_in);
486 fprintf(stderr,
"could not decode data\n");
493 file2buf(sigfile, &databuf_sig, &databufsize_sig);
496 fprintf(stderr,
"could not decode signature\n");
513 CHECK(d0_blind_id_generate_private_key_fastreject(ctx, bits,
fastreject, d0_blind_id_fingerprint64_public_key));
520 CHECK(d0_blind_id_generate_private_key(ctx, bits));
522 while(
fastreject(ctx, d0_blind_id_fingerprint64_public_key));
525 signal(SIGALRM,
NULL);
526 CHECK(d0_blind_id_generate_private_id_modulus(ctx));
528 lumpsize[0] =
sizeof(lumps_w0);
530 lumpsize[1] =
sizeof(lumps_w1);
531 CHECK(d0_blind_id_write_private_key(ctx, lumps_w0, &lumpsize[0]));
532 CHECK(d0_blind_id_write_private_id_modulus(ctx, lumps_w1, &lumpsize[1]));
538 lumpsize[0] =
sizeof(lumps_w0);
540 lumpsize[1] =
sizeof(lumps_w1);
541 CHECK(d0_blind_id_write_public_key(ctx, lumps_w0, &lumpsize[0]));
542 CHECK(d0_blind_id_write_private_id_modulus(ctx, lumps_w1, &lumpsize[1]));
555 CHECK(d0_blind_id_generate_private_id_start(ctx));
557 while(
fastreject(ctx, d0_blind_id_fingerprint64_public_id));
561 lumpsize[0] =
sizeof(lumps_w0);
562 CHECK(d0_blind_id_write_private_id(ctx, lumps_w0, &lumpsize[0]));
568 lumpsize[0] =
sizeof(lumps_w0);
569 CHECK(d0_blind_id_generate_private_id_request(ctx, lumps_w0, &lumpsize[0]));
571 lumpsize[0] =
sizeof(lumps_w0);
572 CHECK(d0_blind_id_write_private_id_request_camouflage(ctx, lumps_w0, &lumpsize[0]));
582 lumpsize[0] =
sizeof(lumps_w0);
583 CHECK(d0_blind_id_write_private_id(ctx, lumps_w0, &lumpsize[0]));
589 char buf[65536];
size_t bufsize;
590 char buf2[65536];
size_t buf2size;
593 CHECK(d0_blind_id_copy(ctx2, ctx));
594 bufsize =
sizeof(
buf);
595 CHECK(d0_blind_id_authenticate_with_private_id_start(ctx, 1, 1,
"hello world", 11,
buf, &bufsize));
596 buf2size =
sizeof(buf2);
597 CHECK(d0_blind_id_authenticate_with_private_id_challenge(ctx2, 1, 1,
buf, bufsize, buf2, &buf2size, &status));
598 bufsize =
sizeof(
buf);
599 CHECK(d0_blind_id_authenticate_with_private_id_response(ctx, buf2, buf2size,
buf, &bufsize));
600 buf2size =
sizeof(buf2);
601 CHECK(d0_blind_id_authenticate_with_private_id_verify(ctx2,
buf, bufsize, buf2, &buf2size, &status));
603 CHECK(d0_blind_id_authenticate_with_private_id_generate_missing_signature(ctx2));
605 lumpsize[0] =
sizeof(lumps_w0);
606 CHECK(d0_blind_id_write_private_id(ctx2, lumps_w0, &lumpsize[0]));
613 lumpsize[0] =
sizeof(lumps_w0);
614 CHECK(d0_blind_id_write_public_id(ctx, lumps_w0, &lumpsize[0]));
620 CHECK(d0_blind_id_fingerprint64_public_key(ctx, fp64, &fp64size));
621 printf(
"%.*s\n", (
int)fp64size, fp64);
626 CHECK(d0_blind_id_fingerprint64_public_id(ctx, fp64, &fp64size));
627 printf(
"%.*s\n", (
int)fp64size, fp64);
631 databufsize_out = databufsize_in + 8192;
632 databuf_out = malloc(databufsize_out);
633 CHECK(d0_blind_id_sign_with_private_id_sign(ctx, 1, 0, databuf_in, databufsize_in, databuf_out, &databufsize_out));
638 databufsize_out = databufsize_in + 8192;
639 databuf_out = malloc(databufsize_out);
640 CHECK(d0_blind_id_sign_with_private_id_sign_detached(ctx, 1, 0, databuf_in, databufsize_in, databuf_out, &databufsize_out));
641 buf2file(outfile2, databuf_out, databufsize_out);
648 databufsize_out = databufsize_sig;
649 databuf_out = malloc(databufsize_out);
650 CHECK(d0_blind_id_sign_with_private_id_verify(ctx, 1, 0, databuf_sig, databufsize_sig, databuf_out, &databufsize_out, &status));
651 CHECK(d0_blind_id_fingerprint64_public_id(ctx, fp64, &fp64size));
652 printf(
"%d\n", (
int)status);
653 printf(
"%.*s\n", (
int)fp64size, fp64);
659 lumpsize[0] =
sizeof(lumps_w0);
661 lumpsize[1] =
sizeof(lumps_w1);
662 CHECK(d0_blind_id_write_public_key(ctx, lumps_w0, &lumpsize[0]));
663 CHECK(d0_blind_id_write_private_id_modulus(ctx, lumps_w1, &lumpsize[1]));
673 CHECK(d0_blind_id_sign_with_private_id_verify_detached(ctx, 1, 0, databuf_sig, databufsize_sig, databuf_in, databufsize_in, &status));
674 CHECK(d0_blind_id_fingerprint64_public_id(ctx, fp64, &fp64size));
675 printf(
"%d\n", (
int)status);
676 printf(
"%.*s\n", (
int)fp64size, fp64);
681 lumpsize[0] =
sizeof(lumps_w0);
683 lumpsize[1] =
sizeof(lumps_w1);
684 CHECK(d0_blind_id_write_public_key(ctx, lumps_w0, &lumpsize[0]));
685 CHECK(d0_blind_id_write_private_id_modulus(ctx, lumps_w1, &lumpsize[1]));
718 const char hex[] =
"0123456789abcdef";
719 char buf[65536];
size_t bufsize;
720 char buf2[65536];
size_t buf2size;
721 bufsize =
sizeof(
buf);
722 CHECK(d0_blind_id_authenticate_with_private_id_start(ctx, 1, 1,
"hello world", 11,
buf, &bufsize));
723 for(
i = 0;
i < (
int)bufsize; ++
i)
725 printf(
"%s\n", hexbuf);
726 fgets(hexbuf,
sizeof(hexbuf), stdin);
727 buf2size =
strlen(hexbuf) / 2;
728 for(
i = 0;
i < (
int)buf2size; ++
i)
729 buf2[
i] = ((strchr(hex, hexbuf[2*
i]) - hex) << 4) | (strchr(hex, hexbuf[2*
i+1]) - hex);
730 bufsize =
sizeof(
buf);
731 CHECK(d0_blind_id_authenticate_with_private_id_response(ctx, buf2, buf2size,
buf, &bufsize));
732 for(
i = 0;
i < (
int)bufsize; ++
i)
734 printf(
"%s\n", hexbuf);
741 const char hex[] =
"0123456789abcdef";
742 char buf[65536];
size_t bufsize;
743 char buf2[65536];
size_t buf2size;
745 fgets(hexbuf,
sizeof(hexbuf), stdin);
746 buf2size =
strlen(hexbuf) / 2;
747 for(
i = 0;
i < (
int)buf2size; ++
i)
748 buf2[
i] = ((strchr(hex, hexbuf[2*
i]) - hex) << 4) | (strchr(hex, hexbuf[2*
i+1]) - hex);
749 bufsize =
sizeof(
buf);
750 CHECK(d0_blind_id_authenticate_with_private_id_challenge(ctx, 1, 1, buf2, buf2size,
buf, &bufsize, &status));
751 for(
i = 0;
i < (
int)bufsize; ++
i)
753 printf(
"%s\n", hexbuf);
754 fgets(hexbuf,
sizeof(hexbuf), stdin);
755 buf2size =
strlen(hexbuf) / 2;
756 for(
i = 0;
i < (
int)buf2size; ++
i)
757 buf2[
i] = ((strchr(hex, hexbuf[2*
i]) - hex) << 4) | (strchr(hex, hexbuf[2*
i+1]) - hex);
758 bufsize =
sizeof(
buf);
759 CHECK(d0_blind_id_authenticate_with_private_id_verify(ctx, buf2, buf2size,
buf, &bufsize, &status));
760 printf(
"verify status: %d\n", status);
762 CHECK(d0_blind_id_fingerprint64_public_id(ctx, fp64, &fp64size));
763 printf(
"%.*s\n", (
int)fp64size, fp64);
771 d0_blind_id_SHUTDOWN();