Mercurial > pidgin
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 |