comparison libpurple/tests/test_cipher.c @ 21908:f786e478e08b

HMAC digest support from Elliott Sales de Andrade committer: Gary Kramlich <grim@reaperworld.com>
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Thu, 20 Dec 2007 03:44:01 +0000
parents 03463c52b9d7
children fae699fece1f
comparison
equal deleted inserted replaced
21907:03463c52b9d7 21908:f786e478e08b
402 "\x6b\x22\xc1\x37\x9c\x00\xe4\x8f", 402 "\x6b\x22\xc1\x37\x9c\x00\xe4\x8f",
403 "\x01\x19\x0D\x2c\x40\x67\x89\x67", 403 "\x01\x19\x0D\x2c\x40\x67\x89\x67",
404 "\xa7\xc1\x10\xbe\x9b\xd5\x8a\x67", 404 "\xa7\xc1\x10\xbe\x9b\xd5\x8a\x67",
405 8, 405 8,
406 PURPLE_CIPHER_BATCH_MODE_CBC); 406 PURPLE_CIPHER_BATCH_MODE_CBC);
407 }
408 END_TEST
409
410 /******************************************************************************
411 * HMAC Tests
412 * See RFC2202 and some other NULL tests I made up
413 *****************************************************************************/
414
415 #define HMAC_TEST(data, data_len, key, key_len, type, digest) { \
416 PurpleCipher *cipher = NULL; \
417 PurpleCipherContext *context = NULL; \
418 gchar cdigest[41]; \
419 gboolean ret = FALSE; \
420 \
421 cipher = purple_ciphers_find_cipher("hmac"); \
422 context = purple_cipher_context_new(cipher, NULL); \
423 purple_cipher_context_set_option(context, "hash", type); \
424 purple_cipher_context_set_key_with_len(context, (guchar *)key, (key_len)); \
425 \
426 purple_cipher_context_append(context, (guchar *)(data), (data_len)); \
427 ret = purple_cipher_context_digest_to_str(context, sizeof(cdigest), cdigest, \
428 NULL); \
429 \
430 fail_unless(ret == TRUE, NULL); \
431 fail_unless(strcmp((digest), cdigest) == 0, NULL); \
432 \
433 purple_cipher_context_destroy(context); \
434 }
435
436 /* HMAC MD5 */
437
438 START_TEST(test_hmac_md5_Hi) {
439 HMAC_TEST("Hi There",
440 8,
441 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
442 16,
443 "md5",
444 "9294727a3638bb1c13f48ef8158bfc9d");
445 }
446 END_TEST
447
448 START_TEST(test_hmac_md5_what) {
449 HMAC_TEST("what do ya want for nothing?",
450 28,
451 "Jefe",
452 4,
453 "md5",
454 "750c783e6ab0b503eaa86e310a5db738");
455 }
456 END_TEST
457
458 START_TEST(test_hmac_md5_dd) {
459 HMAC_TEST("\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
460 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
461 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
462 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
463 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
464 50,
465 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
466 16,
467 "md5",
468 "56be34521d144c88dbb8c733f0e8b3f6");
469 }
470 END_TEST
471
472 START_TEST(test_hmac_md5_cd) {
473 HMAC_TEST("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
474 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
475 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
476 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
477 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
478 50,
479 "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a"
480 "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14"
481 "\x15\x16\x17\x18\x19",
482 25,
483 "md5",
484 "697eaf0aca3a3aea3a75164746ffaa79");
485 }
486 END_TEST
487
488 START_TEST(test_hmac_md5_truncation) {
489 HMAC_TEST("Test With Truncation",
490 20,
491 "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
492 16,
493 "md5",
494 "56461ef2342edc00f9bab995690efd4c");
495 }
496 END_TEST
497
498 START_TEST(test_hmac_md5_large_key) {
499 HMAC_TEST("Test Using Larger Than Block-Size Key - Hash Key First",
500 54,
501 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
502 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
503 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
504 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
505 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
506 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
507 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
508 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
509 80,
510 "md5",
511 "6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd");
512 }
513 END_TEST
514
515 START_TEST(test_hmac_md5_large_key_and_data) {
516 HMAC_TEST("Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data",
517 73,
518 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
519 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
520 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
521 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
522 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
523 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
524 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
525 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
526 80,
527 "md5",
528 "6f630fad67cda0ee1fb1f562db3aa53e");
529 }
530 END_TEST
531
532 START_TEST(test_hmac_md5_null_key) {
533 HMAC_TEST("Hi There",
534 8,
535 "\x0a\x0b\x00\x0d\x0e\x0f\x1a\x2f\x0b\x0b"
536 "\x0b\x00\x00\x0b\x0b\x49\x5f\x6e\x0b\x0b",
537 20,
538 "md5",
539 "597bfd644b797a985561eeb03a169e59");
540 }
541 END_TEST
542
543 START_TEST(test_hmac_md5_null_text) {
544 HMAC_TEST("Hi\x00There",
545 8,
546 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
547 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
548 20,
549 "md5",
550 "70be8e1b7b50dfcc335d6cd7992c564f");
551 }
552 END_TEST
553
554 START_TEST(test_hmac_md5_null_key_and_text) {
555 HMAC_TEST("Hi\x00Th\x00re",
556 8,
557 "\x0c\x0d\x00\x0f\x10\x1a\x3a\x3a\xe6\x34"
558 "\x0b\x00\x00\x0b\x0b\x49\x5f\x6e\x0b\x0b",
559 20,
560 "md5",
561 "b31bcbba35a33a067cbba9131cba4889");
562 }
563 END_TEST
564
565 /* HMAC SHA1 */
566
567 START_TEST(test_hmac_sha1_Hi) {
568 HMAC_TEST("Hi There",
569 8,
570 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
571 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
572 20,
573 "sha1",
574 "b617318655057264e28bc0b6fb378c8ef146be00");
575 }
576 END_TEST
577
578 START_TEST(test_hmac_sha1_what) {
579 HMAC_TEST("what do ya want for nothing?",
580 28,
581 "Jefe",
582 4,
583 "sha1",
584 "effcdf6ae5eb2fa2d27416d5f184df9c259a7c79");
585 }
586 END_TEST
587
588 START_TEST(test_hmac_sha1_dd) {
589 HMAC_TEST("\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
590 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
591 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
592 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
593 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
594 50,
595 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
596 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
597 20,
598 "sha1",
599 "125d7342b9ac11cd91a39af48aa17b4f63f175d3");
600 }
601 END_TEST
602
603 START_TEST(test_hmac_sha1_cd) {
604 HMAC_TEST("\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
605 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
606 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
607 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
608 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
609 50,
610 "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a"
611 "\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14"
612 "\x15\x16\x17\x18\x19",
613 25,
614 "sha1",
615 "4c9007f4026250c6bc8414f9bf50c86c2d7235da");
616 }
617 END_TEST
618
619 START_TEST(test_hmac_sha1_truncation) {
620 HMAC_TEST("Test With Truncation",
621 20,
622 "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"
623 "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
624 20,
625 "sha1",
626 "4c1a03424b55e07fe7f27be1d58bb9324a9a5a04");
627 }
628 END_TEST
629
630 START_TEST(test_hmac_sha1_large_key) {
631 HMAC_TEST("Test Using Larger Than Block-Size Key - Hash Key First",
632 54,
633 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
634 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
635 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
636 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
637 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
638 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
639 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
640 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
641 80,
642 "sha1",
643 "aa4ae5e15272d00e95705637ce8a3b55ed402112");
644 }
645 END_TEST
646
647 START_TEST(test_hmac_sha1_large_key_and_data) {
648 HMAC_TEST("Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data",
649 73,
650 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
651 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
652 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
653 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
654 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
655 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
656 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
657 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
658 80,
659 "sha1",
660 "e8e99d0f45237d786d6bbaa7965c7808bbff1a91");
661 }
662 END_TEST
663
664 START_TEST(test_hmac_sha1_null_key) {
665 HMAC_TEST("Hi There",
666 8,
667 "\x0a\x0b\x00\x0d\x0e\x0f\x1a\x2f\x0b\x0b"
668 "\x0b\x00\x00\x0b\x0b\x49\x5f\x6e\x0b\x0b",
669 20,
670 "sha1",
671 "eb62a2e0e33d300be669c52aab3f591bc960aac5");
672 }
673 END_TEST
674
675 START_TEST(test_hmac_sha1_null_text) {
676 HMAC_TEST("Hi\x00There",
677 8,
678 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
679 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
680 20,
681 "sha1",
682 "31ca58d849e971e418e3439de2c6f83144b6abb7");
683 }
684 END_TEST
685
686 START_TEST(test_hmac_sha1_null_key_and_text) {
687 HMAC_TEST("Hi\x00Th\x00re",
688 8,
689 "\x0c\x0d\x00\x0f\x10\x1a\x3a\x3a\xe6\x34"
690 "\x0b\x00\x00\x0b\x0b\x49\x5f\x6e\x0b\x0b",
691 20,
692 "sha1",
693 "e6b8e2fede87aa09dcb13e554df1435e056eae36");
407 } 694 }
408 END_TEST 695 END_TEST
409 696
410 /****************************************************************************** 697 /******************************************************************************
411 * Suite 698 * Suite
466 tcase_add_test(tc, test_des3_cbc_null_key); 753 tcase_add_test(tc, test_des3_cbc_null_key);
467 tcase_add_test(tc, test_des3_cbc_null_text); 754 tcase_add_test(tc, test_des3_cbc_null_text);
468 tcase_add_test(tc, test_des3_cbc_null_key_and_text); 755 tcase_add_test(tc, test_des3_cbc_null_key_and_text);
469 suite_add_tcase(s, tc); 756 suite_add_tcase(s, tc);
470 757
758 /* hmac tests */
759 tc = tcase_create("HMAC");
760 tcase_add_test(tc, test_hmac_md5_Hi);
761 tcase_add_test(tc, test_hmac_md5_what);
762 tcase_add_test(tc, test_hmac_md5_dd);
763 tcase_add_test(tc, test_hmac_md5_cd);
764 tcase_add_test(tc, test_hmac_md5_truncation);
765 tcase_add_test(tc, test_hmac_md5_large_key);
766 tcase_add_test(tc, test_hmac_md5_large_key_and_data);
767 tcase_add_test(tc, test_hmac_md5_null_key);
768 tcase_add_test(tc, test_hmac_md5_null_text);
769 tcase_add_test(tc, test_hmac_md5_null_key_and_text);
770 tcase_add_test(tc, test_hmac_sha1_Hi);
771 tcase_add_test(tc, test_hmac_sha1_what);
772 tcase_add_test(tc, test_hmac_sha1_dd);
773 tcase_add_test(tc, test_hmac_sha1_cd);
774 tcase_add_test(tc, test_hmac_sha1_truncation);
775 tcase_add_test(tc, test_hmac_sha1_large_key);
776 tcase_add_test(tc, test_hmac_sha1_large_key_and_data);
777 tcase_add_test(tc, test_hmac_sha1_null_key);
778 tcase_add_test(tc, test_hmac_sha1_null_text);
779 tcase_add_test(tc, test_hmac_sha1_null_key_and_text);
780 suite_add_tcase(s, tc);
781
471 return s; 782 return s;
472 } 783 }
473 784
474 785