Mercurial > dropbear
comparison demos/tv_gen.c @ 192:9cc34777b479 libtomcrypt
propagate from branch 'au.asn.ucc.matt.ltc-orig' (head 9ba8f01f44320e9cb9f19881105ae84f84a43ea9)
to branch 'au.asn.ucc.matt.dropbear.ltc' (head dbf51c569bc34956ad948e4cc87a0eeb2170b768)
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Sun, 08 May 2005 06:36:47 +0000 |
parents | 1c15b283127b |
children | 39d5d58461d6 |
comparison
equal
deleted
inserted
replaced
164:cd1143579f00 | 192:9cc34777b479 |
---|---|
1 #include <mycrypt.h> | 1 #include <tomcrypt.h> |
2 | 2 |
3 void reg_algs(void) | 3 void reg_algs(void) |
4 { | 4 { |
5 int err; | 5 int err; |
6 | 6 |
44 #ifdef NOEKEON | 44 #ifdef NOEKEON |
45 register_cipher (&noekeon_desc); | 45 register_cipher (&noekeon_desc); |
46 #endif | 46 #endif |
47 #ifdef SKIPJACK | 47 #ifdef SKIPJACK |
48 register_cipher (&skipjack_desc); | 48 register_cipher (&skipjack_desc); |
49 #endif | |
50 #ifdef ANUBIS | |
51 register_cipher (&anubis_desc); | |
52 #endif | |
53 #ifdef KHAZAD | |
54 register_cipher (&khazad_desc); | |
49 #endif | 55 #endif |
50 | 56 |
51 #ifdef TIGER | 57 #ifdef TIGER |
52 register_hash (&tiger_desc); | 58 register_hash (&tiger_desc); |
53 #endif | 59 #endif |
471 plaintext[z] = (unsigned char)(z & 255); | 477 plaintext[z] = (unsigned char)(z & 255); |
472 } | 478 } |
473 len = sizeof(tag); | 479 len = sizeof(tag); |
474 if ((err = ocb_encrypt_authenticate_memory(x, key, kl, nonce, plaintext, y1, plaintext, tag, &len)) != CRYPT_OK) { | 480 if ((err = ocb_encrypt_authenticate_memory(x, key, kl, nonce, plaintext, y1, plaintext, tag, &len)) != CRYPT_OK) { |
475 printf("Error OCB'ing: %s\n", error_to_string(err)); | 481 printf("Error OCB'ing: %s\n", error_to_string(err)); |
482 exit(EXIT_FAILURE); | |
483 } | |
484 fprintf(out, "%3d: ", y1); | |
485 for (z = 0; z < y1; z++) { | |
486 fprintf(out, "%02X", plaintext[z]); | |
487 } | |
488 fprintf(out, ", "); | |
489 for (z = 0; z <(int)len; z++) { | |
490 fprintf(out, "%02X", tag[z]); | |
491 } | |
492 fprintf(out, "\n"); | |
493 | |
494 /* forward the key */ | |
495 for (z = 0; z < kl; z++) { | |
496 key[z] = tag[z % len]; | |
497 } | |
498 } | |
499 fprintf(out, "\n"); | |
500 } | |
501 fclose(out); | |
502 } | |
503 | |
504 | |
505 void ccm_gen(void) | |
506 { | |
507 int err, kl, x, y1, z; | |
508 FILE *out; | |
509 unsigned char key[MAXBLOCKSIZE], nonce[MAXBLOCKSIZE*2], | |
510 plaintext[MAXBLOCKSIZE*2], tag[MAXBLOCKSIZE]; | |
511 unsigned long len; | |
512 | |
513 out = fopen("ccm_tv.txt", "w"); | |
514 fprintf(out, "CCM Test Vectors. Uses the 00010203...NN-1 pattern for nonce/header/plaintext/key. The outputs\n" | |
515 "are of the form ciphertext,tag for a given NN. The key for step N>1 is the tag of the previous\n" | |
516 "step repeated sufficiently. The nonce is fixed throughout at 13 bytes 000102...\n\n"); | |
517 | |
518 for (x = 0; cipher_descriptor[x].name != NULL; x++) { | |
519 kl = cipher_descriptor[x].block_length; | |
520 | |
521 /* skip ciphers which do not have 128 bit block sizes */ | |
522 if (kl != 16) continue; | |
523 | |
524 if (cipher_descriptor[x].keysize(&kl) != CRYPT_OK) { | |
525 kl = cipher_descriptor[x].max_key_length; | |
526 } | |
527 fprintf(out, "CCM-%s (%d byte key)\n", cipher_descriptor[x].name, kl); | |
528 | |
529 /* the key */ | |
530 for (z = 0; z < kl; z++) { | |
531 key[z] = (z & 255); | |
532 } | |
533 | |
534 /* fixed nonce */ | |
535 for (z = 0; z < cipher_descriptor[x].block_length; z++) { | |
536 nonce[z] = z; | |
537 } | |
538 | |
539 for (y1 = 0; y1 <= (int)(cipher_descriptor[x].block_length*2); y1++){ | |
540 for (z = 0; z < y1; z++) { | |
541 plaintext[z] = (unsigned char)(z & 255); | |
542 } | |
543 len = sizeof(tag); | |
544 if ((err = ccm_memory(x, key, kl, nonce, 13, plaintext, y1, plaintext, y1, plaintext, tag, &len, CCM_ENCRYPT)) != CRYPT_OK) { | |
545 printf("Error CCM'ing: %s\n", error_to_string(err)); | |
546 exit(EXIT_FAILURE); | |
547 } | |
548 fprintf(out, "%3d: ", y1); | |
549 for (z = 0; z < y1; z++) { | |
550 fprintf(out, "%02X", plaintext[z]); | |
551 } | |
552 fprintf(out, ", "); | |
553 for (z = 0; z <(int)len; z++) { | |
554 fprintf(out, "%02X", tag[z]); | |
555 } | |
556 fprintf(out, "\n"); | |
557 | |
558 /* forward the key */ | |
559 for (z = 0; z < kl; z++) { | |
560 key[z] = tag[z % len]; | |
561 } | |
562 } | |
563 fprintf(out, "\n"); | |
564 } | |
565 fclose(out); | |
566 } | |
567 | |
568 void gcm_gen(void) | |
569 { | |
570 int err, kl, x, y1, z; | |
571 FILE *out; | |
572 unsigned char key[MAXBLOCKSIZE], plaintext[MAXBLOCKSIZE*2], tag[MAXBLOCKSIZE]; | |
573 unsigned long len; | |
574 | |
575 out = fopen("gcm_tv.txt", "w"); | |
576 fprintf(out, "GCM Test Vectors. Uses the 00010203...NN-1 pattern for nonce/header/plaintext/key. The outputs\n" | |
577 "are of the form ciphertext,tag for a given NN. The key for step N>1 is the tag of the previous\n" | |
578 "step repeated sufficiently. The nonce is fixed throughout at 13 bytes 000102...\n\n"); | |
579 | |
580 for (x = 0; cipher_descriptor[x].name != NULL; x++) { | |
581 kl = cipher_descriptor[x].block_length; | |
582 | |
583 /* skip ciphers which do not have 128 bit block sizes */ | |
584 if (kl != 16) continue; | |
585 | |
586 if (cipher_descriptor[x].keysize(&kl) != CRYPT_OK) { | |
587 kl = cipher_descriptor[x].max_key_length; | |
588 } | |
589 fprintf(out, "GCM-%s (%d byte key)\n", cipher_descriptor[x].name, kl); | |
590 | |
591 /* the key */ | |
592 for (z = 0; z < kl; z++) { | |
593 key[z] = (z & 255); | |
594 } | |
595 | |
596 for (y1 = 0; y1 <= (int)(cipher_descriptor[x].block_length*2); y1++){ | |
597 for (z = 0; z < y1; z++) { | |
598 plaintext[z] = (unsigned char)(z & 255); | |
599 } | |
600 len = sizeof(tag); | |
601 if ((err = gcm_memory(x, key, kl, plaintext, y1, plaintext, y1, plaintext, y1, plaintext, tag, &len, GCM_ENCRYPT)) != CRYPT_OK) { | |
602 printf("Error GCM'ing: %s\n", error_to_string(err)); | |
476 exit(EXIT_FAILURE); | 603 exit(EXIT_FAILURE); |
477 } | 604 } |
478 fprintf(out, "%3d: ", y1); | 605 fprintf(out, "%3d: ", y1); |
479 for (z = 0; z < y1; z++) { | 606 for (z = 0; z < y1; z++) { |
480 fprintf(out, "%02X", plaintext[z]); | 607 fprintf(out, "%02X", plaintext[z]); |
522 printf("Generating HMAC vectors..."); fflush(stdout); hmac_gen(); printf("done\n"); | 649 printf("Generating HMAC vectors..."); fflush(stdout); hmac_gen(); printf("done\n"); |
523 printf("Generating OMAC vectors..."); fflush(stdout); omac_gen(); printf("done\n"); | 650 printf("Generating OMAC vectors..."); fflush(stdout); omac_gen(); printf("done\n"); |
524 printf("Generating PMAC vectors..."); fflush(stdout); pmac_gen(); printf("done\n"); | 651 printf("Generating PMAC vectors..."); fflush(stdout); pmac_gen(); printf("done\n"); |
525 printf("Generating EAX vectors..."); fflush(stdout); eax_gen(); printf("done\n"); | 652 printf("Generating EAX vectors..."); fflush(stdout); eax_gen(); printf("done\n"); |
526 printf("Generating OCB vectors..."); fflush(stdout); ocb_gen(); printf("done\n"); | 653 printf("Generating OCB vectors..."); fflush(stdout); ocb_gen(); printf("done\n"); |
654 printf("Generating CCM vectors..."); fflush(stdout); ccm_gen(); printf("done\n"); | |
655 printf("Generating GCM vectors..."); fflush(stdout); gcm_gen(); printf("done\n"); | |
527 printf("Generating BASE64 vectors..."); fflush(stdout); base64_gen(); printf("done\n"); | 656 printf("Generating BASE64 vectors..."); fflush(stdout); base64_gen(); printf("done\n"); |
528 return 0; | 657 return 0; |
529 } | 658 } |
530 | 659 |
531 | 660 |