- 8293DE5FE325F0499D3FC0B882E94B3E8E297911D2C9AA83ECDCBCAA13914273DB14ED6A077CA24F75B34D9258224E72806F917DEF17D5CF7762B06D5A54F008
+ 01945E4CAD02CCC3811194A69CB62904B862F6A07E6EF4C7801E4D702A9C076AB3CE0056349E7121D64212B73511400C5D28580C400FFAD7E71014F753E4295A
eucrypt/smg_rsa/tests/tests.c
(6 . 6)(6 . 9)
790 #include <time.h>
791 #include <stdio.h>
792
793 extern void adainit(void);
794 extern void adafinal(void);
795
796 void err(char *msg)
797 {
798 fprintf(stderr, "%s\n", msg);
(406 . 6)(409 . 198)
800 mpi_free(sk.u);
801 }
802
803 void test_oaep_encr_decr( int nruns ) {
804 /* a set of RSA keys previously generated with eucrypt */
805 RSA_public_key pk;
806 pk.n = mpi_alloc(0);
807 pk.e = mpi_alloc(0);
808
809 RSA_secret_key sk;
810 sk.n = mpi_alloc(0);
811 sk.e = mpi_alloc(0);
812 sk.d = mpi_alloc(0);
813 sk.p = mpi_alloc(0);
814 sk.q = mpi_alloc(0);
815 sk.u = mpi_alloc(0);
816
817 mpi_fromstr(sk.n, "0x\
818 CD2C025323BEA46FFF2FA8D7A9D39817EA713421F4AE03FA8120641193892A70BFECF5\
819 83101635A432110D3DDE6339E3CC7ECC0AD91C026FCACE832DD3888A6FCA7BCE56C390\
820 5A5AC8C7BC921DA675E4B62489B254EB34659D547D71165BC998983A81937BD251AEE1\
821 2D985EC387D5376F5DCC5EF7EC530FBD6FD2AA7285EE1AF3335EA73163F0954F30402E\
822 D7B374EE84A97B1849B0674B0DA0A2050BD79B71ABB1559F3A9CFDB8557DED7BC90CF2\
823 09E8A847E9C226140845B7D03842162E7DA5DD16326CB1F71A248D841FE9076A09911F\
824 2F4F5E3EA44EA8DE40332BF00406990BCCF61C322A03C456EF3A98B341E0BDBC1088CE\
825 683E78510E76B72C2BCC1EE9AEDD80FFF18ABFC5923B2F36B581C25114AB2DF9F6C2B1\
826 9481703FD19E313DCD7ACE15FA11B27D25BCE5388C180A7E21167FB87750599E1ED7C7\
827 50F4A844E1DC2270C62D19671CF8F4C25B81E366B09FC850AE642136D204A9160AEECE\
828 575B57378AA439E9DD46DC990288CD54BAA35EEE1C02456CD39458A6F1CBF012DCEDF4\
829 27CCF3F3F53645658FC49C9C9D7F2856DB571D92B967AB5845514E0054DDB49099F5DD\
830 04A6F6F5C5CE642276834B932881AEB648D1F25E9223971F56E249EF40CF7D80F22621\
831 CDD0260E9E7D23746960ADB52CF2987584FB1DE95A69A39E5CB12B76E0F5C1A0529C0C\
832 065D2E35720810F7C7983180B9A9EA0E00C11B79DC3D");
833
834 mpi_fromstr(sk.e, "0x\
835 DD4856B4EE3D099A8604AE392D8EFEC094CDF01546A28BE87CB484F999E8E75CDFCD01\
836 D04D455A6A9254C60BD28C0B03611FC3E751CC27EF768C0B401C4FD2B27C092834A6F2\
837 49A145C4EDC47A3B3D363EC352462C945334D160AF9AA72202862912493AC6190AA3A6\
838 149D4D8B9996BA7927D3D0D2AD00D30FD630CF464E6CAF9CF49355B9A70E05DB7AE915\
839 F9F602772F8D11E5FCDFC7709210F248052615967090CC1F43D410C83724AA5912B2F0\
840 52E6B39449A89A97C79C92DC8CB8DEEFCF248C1E1D2FC5BFE85165ECA31839CAA9CEB3\
841 3A92EBDC0EB3BAC0F810938BB173C7DA21DCBB2220D44CBA0FD40A2C868FC93AC5243E\
842 C137C27B0A76D65634EBB3");
843
844 mpi_fromstr(sk.d, "0x\
845 7C8A6FA1199D99DCA45E9BDF567CA49D02B237340D7E999150BC4883AE29DEC5158521\
846 B338F35DC883792356BDDBB3C8B3030A6DD4C6522599A3254E751F9BA1CB1061C5633C\
847 81BBFACF6FCD64502614102DFED3F3FA284066C342D5E00953B415915331E30812E5FB\
848 CD6680ADCCDEE40B8376A3A225F2E160EA59C7566804526D73BB660A648A3EF9802313\
849 B2F841E8458B2AAACE7AACF31083E8F3F630298138393BC88BBD7D4AA4334949651D25\
850 365B10DBF4A4A08E20A6CC74BFDD37C1C38E2ADC2A283DF06590DF06B46F67F6ACA67F\
851 AC464C795261659A2F9558802D0BBAA05FD1E1AF2CDC70654723DF7EFAEA148B8CDBEB\
852 C89EA2320AB9BBB1BC4311475DF3D91446F02EF192368DFEBAC598CCFD4407DEC58FDC\
853 1A94CCDD6E5FBA9C52164ACEA8AEE633E557BCCEACB7A1AF656C379482D784A120A725\
854 32F9B2B35173D505F21D5AD4CB9511BC836DC923730B70291B70290A216CA3B21CFF79\
855 E895C35F4F7AF80E1BD9ED2773BD26919A76E4298D169160593E0335BE2A2A2D2E8516\
856 948F657E1B1260E18808A9D463C108535FB60B3B28F711C81E5DE24F40214134A53CE5\
857 9A952C8970A1D771EBEFFA2F4359DCF157995B3F1950DE3C6EC41B7FF837148F55F323\
858 372AF3F20CE8B8038E750C23D8F5041FA951327859B0E47483F0A47103EF808C72C251\
859 006FA526245291C8C84C12D2EF63FB2301EA3EEDA42B");
860
861 mpi_fromstr(sk.p, "0x\
862 E236732452039C14EC1D3B8095BDDCFB7625CE27B1EA5394CF4ED09D3CEECAA4FC0BF6\
863 2F7CE975E0C8929CE84B0259D773EA038396479BF15DA065BA70E549B248D77B4B23ED\
864 A267308510DBEE2FD44E35D880EE7CFB81E0646AA8630165BD8988C3A8776D9E704C20\
865 AA25CA0A3C32F27F592D5FD363B04DD57D8C61FFDCDFCCC59E2913DE0EE47769180340\
866 E1EA5A803AA2301A010FF553A380F002601F0853FCACDB82D76FE2FACBCD6E5F294439\
867 0799EA5AE9D7880D4E1D4AE146DC1D4E8495B9DD30E57E883923C5FC26682B7142D35C\
868 D8A0FC561FE725A6CF419B15341F40FE0C31132CBD81DD8E50697BD1EBFFA16B522E16\
869 F5B49A03B707218C7DA60B");
870
871 mpi_fromstr(sk.q, "0x\
872 E830482A3C4F5C3A7E59C10FF8BA760DB1C6D55880B796FFDA4A82E0B60E974E81D04B\
873 2A4AD417823EBFB4E8EFB13782943562B19B6C4A680E3BA0C8E37B5023470F4F1AC1F8\
874 A0B10672EF75CD58BCD45E6B14503B8A6A70AFE79F6201AF56E7364A1C742BE1453FD2\
875 24FDC9D66522EAF4466A084BCB9E46D455A2946E94CBF028770F38D0B741C2CC59308F\
876 71D8C2B4B9C928E0AE8D68DEB48A3E9EFD84A10301EBD55F8221CA32FC567B306B2A8E\
877 116350AFB995859FDF4378C5CFD06901494E8CFA5D8FAC564D6531FA8A2E4761F5EFBA\
878 F78750B6F4662BE9EA4C2FAD67AF73EEB36B41FC15CB678810C19A51DF23555695C4C1\
879 546F3FACA39CAA7BB8DBD7");
880
881 mpi_fromstr(sk.u, "0x\
882 846232322775C1CD7D5569DC59E2F3E61A885AE2E9C4A4F8CB3ACBE8C3A5441E5FE348\
883 A2A8AC9C2998FBF282222BF508AA1ECF66A76AEDD2D9C97028BFD3F6CA0542E38A5312\
884 603C70B95650CE73F80FDD729988FBDB5595A5BF8A007EA34E54994A697906CE56354C\
885 E00DF10EB711DEC274A62494E3D350D88736CF67A477FB600AC9F1D6580727585092BF\
886 5EBC092CC4D6CF75769051033A1197103BE269942F372168A53771746FBA18ED6972D5\
887 0B935A9B1D6B5B3DD50CD89A27FE93C10924E9103FACF7B4C5724A046C3D3B50CC1C78\
888 5F5C8E00DBE1D6561F120F5294C170914BC10F978ED4356EED67A9F3A60D70AFE540FC\
889 5373CBAE3D0A7FD1C87273");
890
891 /* copy the public key components */
892 pk.n = mpi_copy( sk.n );
893 pk.e = mpi_copy( sk.e );
894
895 /* some plain text message */
896 MPI msg = mpi_alloc(0);
897 mpi_fromstr(msg, "0x\
898 5B6A8A0ACF4F4DB3F82EAC2D20255E4DF3E4B7C799603210766F26EF87C8980E737579\
899 EC08E6505A51D19654C26D806BAF1B62F9C032E0B13D02AF99F7313BFCFD68DA46836E\
900 CA529D7360948550F982C6476C054A97FD01635AB44BFBDBE2A90BE06F7984AC8534C3\
901 28097EF92F6E78CAE0CB97");
902
903 /* actual testing */
904 printf("TEST verify oaep_encr_decr on message: \n");
905 mpi_print( stdout, msg, 1);
906 printf("\n");
907
908 int nlimbs_n = mpi_nlimb_hint_from_nbytes( KEY_LENGTH_OCTETS);
909 MPI encr = mpi_alloc( nlimbs_n );
910 MPI decr = mpi_alloc( nlimbs_n );
911 int success;
912
913 adainit();
914 rsa_oaep_encrypt( encr, msg, &pk );
915 rsa_oaep_decrypt( decr, encr, &sk, &success );
916
917 if (success <= 0 ||
918 mpi_cmp(encr, msg) == 0 ||
919 mpi_cmp(msg, decr) != 0)
920 printf("FAILED: success flag is %d\n", success);
921 else
922 printf("PASSED\n");
923
924 /* attempt to decrypt corrupted block */
925 mpi_clear( decr );
926 rsa_oaep_decrypt( decr, pk.n, &sk, &success);
927 if (success > 0)
928 printf("FAILED: attempt to decrypt non-/corrupted oaep block\n");
929 else
930 printf("PASSED: attempt to decrypt non-/corrupted oaep block\n");
931 adafinal();
932
933 /* clean up */
934 mpi_free( sk.n );
935 mpi_free( sk.e );
936 mpi_free( sk.d );
937 mpi_free( sk.p );
938 mpi_free( sk.q );
939 mpi_free( sk.u );
940
941 mpi_free( pk.n );
942 mpi_free( pk.e );
943
944 mpi_free( msg );
945 mpi_free( encr );
946 mpi_free( decr );
947 }
948
949 void test_mpi_buffer() {
950 unsigned int noctets = 10;
951 int nlimbs = mpi_nlimb_hint_from_nbytes( noctets );
952 MPI m = mpi_alloc( nlimbs );
953 unsigned char *setbuffer = xmalloc( noctets );
954 unsigned char *getbuffer;
955 unsigned int i, sign, mpilen, nerrors;
956
957 for (i=0; i< noctets; i++)
958 setbuffer[i] = i;
959
960 mpi_set_buffer( m, setbuffer, noctets, 0);
961
962 getbuffer = mpi_get_buffer( m, &mpilen, &sign );
963
964 if (mpilen == noctets -1 ) {
965 nerrors = 0;
966 for (i=0;i<noctets-1;i++)
967 if (setbuffer[i+1] != getbuffer[i])
968 nerrors = nerrors + 1;
969 if (nerrors == 0) {
970 printf("WARNING: 0-led octet discarded by mpi_set_buffer!\n");
971 printf("Value ret by mpi_get_buffer != value given to set_buffer!\n");
972 }
973 else
974 printf("FAIL: got different lengths and %d different values!\n", nerrors);
975 }
976 else if (mpilen != noctets)
977 printf("FAIL: mpilen is %d; noctets is %d\n", mpilen, noctets);
978 else
979 {
980 nerrors = 0;
981 for (i=0;i<noctets-1;i++) {
982 if (setbuffer[i]!=getbuffer[i])
983 nerrors= nerrors+1;
984 }
985 if (nerrors>0)
986 printf("FAIL: got %d different values!\n", nerrors);
987 else printf("PASSED: mpi_get/set_buffer\n");
988 }
989
990 mpi_free(m);
991 xfree(setbuffer);
992 xfree(getbuffer);
993 }
994
995 int main(int ac, char **av)
996 {
997 int nruns;
(479 . 6)(674 . 12)
999 case 8:
1000 time_rsa_gen(nruns);
1001 break;
1002 case 9:
1003 test_oaep_encr_decr(nruns);
1004 break;
1005 case 10:
1006 test_mpi_buffer();
1007 break;
1008 default:
1009 printf("Current test ids:\n");
1010 printf("0 for timing entropy source\n");
(491 . 6)(692 . 8)
1012 writes to keys.asc and check_keys.asc\n");
1013 printf("7 for testing rsa exponentiation (fixed data)\n");
1014 printf("8 for timing rsa key pair generator\n");
1015 printf("9 for oaep encrypt/decrypt\n");
1016 printf("10 for testing mpi_set/get_buffer\n");
1017 }
1018
1019 return 0;