/* ecrypt-frogbit-prng.c */ #define TEST (0) /* setting this to non-zero creates a Berlekamp-Massey validation of PRNGs -- requires source files from another project*/ #include #if !TEST #include "ecrypt-sync-ae.h" #else #include #include #include "longpoly.h" #include "lfsr.h" #endif #include "ecrypt-frogbit-prng.h" /**************** Start of parameters that can be modified ****************/ #define FROGBIT_KEYSCHED_C1 (03333333) #define FROGBIT_KEYSCHED_C2 (02626262) /* PRNG design made of equally spaced selection of polynomials among the list */ static int prng_design[FROGBIT10][2]= {{ 9%MTGFSR_N13, 2%MTGFSR_N11} ,{ 7%MTGFSR_N11, 26%MTGFSR_N13} ,{ 44%MTGFSR_N13, 12%MTGFSR_N11} ,{ 17%MTGFSR_N11, 62%MTGFSR_N13} ,{ 79%MTGFSR_N13, 22%MTGFSR_N11} ,{ 27%MTGFSR_N11, 97%MTGFSR_N13} ,{114%MTGFSR_N13, 32%MTGFSR_N11} ,{ 37%MTGFSR_N11,132%MTGFSR_N13} ,{150%MTGFSR_N13, 42%MTGFSR_N11} ,{ 47%MTGFSR_N11,167%MTGFSR_N13} }; #if 3!=(((FROGBIT_KEYSCHED_C1>>20)\ |(FROGBIT_KEYSCHED_C1>>18)\ |(FROGBIT_KEYSCHED_C1>>16)\ |(FROGBIT_KEYSCHED_C1>>14)\ |(FROGBIT_KEYSCHED_C1>>12)\ |(FROGBIT_KEYSCHED_C1>>10)\ |(FROGBIT_KEYSCHED_C1>> 8)\ |(FROGBIT_KEYSCHED_C1>> 6)\ |(FROGBIT_KEYSCHED_C1>> 4)\ |(FROGBIT_KEYSCHED_C1>> 2)\ | FROGBIT_KEYSCHED_C1 \ )&3) #error "The modified key schedule must somehow preclude an all-zero state." #endif #if FROGBIT_KEYSCHED_C2&~((1<<(MTGFSR_T-1))-1) #error "The key schedule must prevent a state with non-zero unused bits." #endif /**************** End of parameters that can be modified ****************/ /**************** Polynoms for TGFSR algorithm ****************/ /* The data tables below were generated by a separate program according to the TGFSR theory. Only 20 values are actually used from the tables, according to the indices found in the array prng_design (initialized above). */ struct lfsr_polynom_str { unsigned long Aj; #if TEST unsigned long Bj[2]; #endif }; #if TEST #define DAT(wj,n,m,Aj,Bj_1,Bj_0,terms) {Aj,{Bj_0,Bj_1}}, #else #define DAT(wj,n,m,Aj,Bj_1,Bj_0,terms) {Aj}, #endif static const struct lfsr_polynom_str poly_table_11[MTGFSR_N11]={ #if (1==MTGFSR_M) DAT(11,3,1,0x817,0x2,0xA802B85F,15) DAT(11,3,1,0x82B,0x2,0xA8020A03,9) DAT(11,3,1,0x863,0x2,0xA8064CEB,15) DAT(11,3,1,0x89F,0x2,0xA8281077,13) DAT(11,3,1,0x8E7,0x2,0xA82CE62F,17) DAT(11,3,1,0x913,0x2,0xA902B91B,15) DAT(11,3,1,0x95B,0x2,0xA906FFF3,21) DAT(11,3,1,0x97F,0x2,0xA9065F17,17) DAT(11,3,1,0x983,0x2,0xA928038B,13) DAT(11,3,1,0x9C7,0x2,0xA92C478F,17) DAT(11,3,1,0xA07,0x2,0xA202A24F,13) DAT(11,3,1,0xA13,0x2,0xA202B21B,13) DAT(11,3,1,0xA7F,0x2,0xA2065417,13) DAT(11,3,1,0xAA7,0x2,0xA228A86F,15) DAT(11,3,1,0xAB3,0x2,0xA228B83B,15) DAT(11,3,1,0xADF,0x2,0xA22C5E37,17) DAT(11,3,1,0xAEF,0x2,0xA22CEE87,17) DAT(11,3,1,0xB33,0x2,0xA30213BB,15) DAT(11,3,1,0xB5F,0x2,0xA306F5B7,19) DAT(11,3,1,0xB6F,0x2,0xA3064507,13) DAT(11,3,1,0xB93,0x2,0xA328199B,15) DAT(11,3,1,0xBAF,0x2,0xA328ABC7,17) DAT(11,3,1,0xBE7,0x2,0xA32CED2F,19) DAT(11,3,1,0xC1F,0x2,0xEC02FEF7,21) DAT(11,3,1,0xC57,0x2,0xEC06B81F,17) DAT(11,3,1,0xC6B,0x2,0xEC060A43,13) DAT(11,3,1,0xC73,0x2,0xEC0618FB,17) DAT(11,3,1,0xC9B,0x2,0xEC285433,15) DAT(11,3,1,0xCBF,0x2,0xEC28F4D7,19) DAT(11,3,1,0xCD3,0x2,0xEC2C12DB,17) DAT(11,3,1,0xCE3,0x2,0xEC2CA26B,17) DAT(11,3,1,0xD03,0x2,0xED02ED0B,17) DAT(11,3,1,0xD63,0x2,0xED0609EB,17) DAT(11,3,1,0xDBB,0x2,0xED28F593,19) DAT(11,3,1,0xDD7,0x2,0xED2C139F,19) DAT(11,3,1,0xDE7,0x2,0xED2CA32F,19) DAT(11,3,1,0xE27,0x2,0xE60246EF,17) DAT(11,3,1,0xE2B,0x2,0xE6024403,11) DAT(11,3,1,0xE47,0x2,0xE606A20F,15) DAT(11,3,1,0xE5F,0x2,0xE606B0B7,17) DAT(11,3,1,0xEA3,0x2,0xE628EC2B,17) DAT(11,3,1,0xEBB,0x2,0xE628FE93,19) DAT(11,3,1,0xECF,0x2,0xE62C0A27,15) DAT(11,3,1,0xF0B,0x2,0xE702E5A3,17) DAT(11,3,1,0xF37,0x2,0xE70257FF,21) DAT(11,3,1,0xF6B,0x2,0xE7060143,13) DAT(11,3,1,0xF83,0x2,0xE7284D8B,17) DAT(11,3,1,0xF9B,0x2,0xE7285F33,19) DAT(11,3,1,0xFD3,0x2,0xE72C19DB,19) #else DAT(11,3,2,0x817,0x3,0xC3C0115D,15) DAT(11,3,2,0x82B,0x3,0xC3C0CFCD,19) DAT(11,3,2,0x863,0x3,0xC3C59C0D,17) DAT(11,3,2,0x89F,0x3,0xC3FFD29D,23) DAT(11,3,2,0x8E7,0x3,0xC3FA5C5D,21) DAT(11,3,2,0x913,0x3,0xC2C1110D,13) DAT(11,3,2,0x95B,0x3,0xC2C442CD,15) DAT(11,3,2,0x97F,0x3,0xC2C48E9D,17) DAT(11,3,2,0x983,0x3,0xC2FEC00D,17) DAT(11,3,2,0x9C7,0x3,0xC2FB905D,19) DAT(11,3,2,0xA07,0x3,0xCFCC005D,17) DAT(11,3,2,0xA13,0x3,0xCFCC110D,17) DAT(11,3,2,0xA7F,0x3,0xCFC98E9D,21) DAT(11,3,2,0xAA7,0x3,0xCFF30C5D,21) DAT(11,3,2,0xAB3,0x3,0xCFF31D0D,21) DAT(11,3,2,0xADF,0x3,0xCFF6829D,21) DAT(11,3,2,0xAEF,0x3,0xCFF65F9D,25) DAT(11,3,2,0xB33,0x3,0xCECDDD0D,21) DAT(11,3,2,0xB5F,0x3,0xCEC8429D,17) DAT(11,3,2,0xB6F,0x3,0xCEC89F9D,21) DAT(11,3,2,0xB93,0x3,0xCEF2D10D,19) DAT(11,3,2,0xBAF,0x3,0xCEF20F9D,21) DAT(11,3,2,0xBE7,0x3,0xCEF75C5D,23) DAT(11,3,2,0xC1F,0x3,0x9390129D,15) DAT(11,3,2,0xC57,0x3,0x9395415D,17) DAT(11,3,2,0xC6B,0x3,0x93959FCD,21) DAT(11,3,2,0xC73,0x3,0x93958D0D,17) DAT(11,3,2,0xC9B,0x3,0x93AFD2CD,21) DAT(11,3,2,0xCBF,0x3,0x93AF1E9D,21) DAT(11,3,2,0xCD3,0x3,0x93AA810D,15) DAT(11,3,2,0xCE3,0x3,0x93AA5C0D,17) DAT(11,3,2,0xD03,0x3,0x9291000D,11) DAT(11,3,2,0xD63,0x3,0x92949C0D,15) DAT(11,3,2,0xDBB,0x3,0x92AE1ECD,19) DAT(11,3,2,0xDD7,0x3,0x92AB815D,17) DAT(11,3,2,0xDE7,0x3,0x92AB5C5D,19) DAT(11,3,2,0xE27,0x3,0x9F9CCC5D,21) DAT(11,3,2,0xE2B,0x3,0x9F9CCFCD,23) DAT(11,3,2,0xE47,0x3,0x9F99505D,19) DAT(11,3,2,0xE5F,0x3,0x9F99429D,19) DAT(11,3,2,0xEA3,0x3,0x9FA30C0D,17) DAT(11,3,2,0xEBB,0x3,0x9FA31ECD,21) DAT(11,3,2,0xECF,0x3,0x9FA6939D,21) DAT(11,3,2,0xF0B,0x3,0x9E9D03CD,19) DAT(11,3,2,0xF37,0x3,0x9E9DDD5D,23) DAT(11,3,2,0xF6B,0x3,0x9E989FCD,21) DAT(11,3,2,0xF83,0x3,0x9EA2C00D,15) DAT(11,3,2,0xF9B,0x3,0x9EA2D2CD,19) DAT(11,3,2,0xFD3,0x3,0x9EA7810D,17) #endif }; static const struct lfsr_polynom_str poly_table_13[MTGFSR_N13]={ #if (1==MTGFSR_M) DAT(13,3,1,0x2053,0xA0,0xA0A4F45B,17) DAT(13,3,1,0x206F,0xA0,0xA0A44607,13) DAT(13,3,1,0x208B,0xA0,0xA08A0823,11) DAT(13,3,1,0x20AF,0xA0,0xA08AA8C7,15) DAT(13,3,1,0x20F3,0xA0,0xA08EFE7B,21) DAT(13,3,1,0x212F,0xA0,0xA1A00347,13) DAT(13,3,1,0x2143,0xA0,0xA1A4E54B,17) DAT(13,3,1,0x216B,0xA0,0xA1A44743,15) DAT(13,3,1,0x2197,0xA0,0xA18A1BDF,19) DAT(13,3,1,0x21C7,0xA0,0xA18E4F8F,19) DAT(13,3,1,0x21DF,0xA0,0xA18E5D37,19) DAT(13,3,1,0x21E3,0xA0,0xA18EEF6B,21) DAT(13,3,1,0x21FB,0xA0,0xA18EFDD3,21) DAT(13,3,1,0x2237,0xA0,0xAAA01AFF,19) DAT(13,3,1,0x2243,0xA0,0xAAA4EE4B,19) DAT(13,3,1,0x2297,0xA0,0xAA8A10DF,17) DAT(13,3,1,0x229B,0xA0,0xAA8A1233,15) DAT(13,3,1,0x22EF,0xA0,0xAA8EE687,19) DAT(13,3,1,0x22F7,0xA0,0xAA8EF43F,21) DAT(13,3,1,0x232B,0xA0,0xABA00903,13) DAT(13,3,1,0x2347,0xA0,0xABA4EF0F,21) DAT(13,3,1,0x236F,0xA0,0xABA44D07,17) DAT(13,3,1,0x2387,0xA0,0xAB8A01CF,17) DAT(13,3,1,0x23A3,0xA0,0xAB8AA12B,17) DAT(13,3,1,0x23B7,0xA0,0xAB8AB17F,21) DAT(13,3,1,0x23BB,0xA0,0xAB8AB393,19) DAT(13,3,1,0x2413,0xA0,0xE4A0F41B,17) DAT(13,3,1,0x241F,0xA0,0xE4A0F6F7,21) DAT(13,3,1,0x2457,0xA0,0xE4A4B01F,17) DAT(13,3,1,0x24BF,0xA0,0xE48AFCD7,21) DAT(13,3,1,0x24CB,0xA0,0xE48E0863,15) DAT(13,3,1,0x24E3,0xA0,0xE48EAA6B,19) DAT(13,3,1,0x2517,0xA0,0xE5A0F55F,21) DAT(13,3,1,0x2563,0xA0,0xE5A401EB,17) DAT(13,3,1,0x2577,0xA0,0xE5A411BF,19) DAT(13,3,1,0x2587,0xA0,0xE58A4FCF,21) DAT(13,3,1,0x25AF,0xA0,0xE58AEDC7,21) DAT(13,3,1,0x25D7,0xA0,0xE58E1B9F,21) DAT(13,3,1,0x25EB,0xA0,0xE58EA9C3,19) DAT(13,3,1,0x2603,0xA0,0xEEA0EE0B,19) DAT(13,3,1,0x267B,0xA0,0xEEA41853,17) DAT(13,3,1,0x2693,0xA0,0xEE8A549B,19) DAT(13,3,1,0x26C3,0xA0,0xEE8E00CB,17) DAT(13,3,1,0x26EB,0xA0,0xEE8EA2C3,19) DAT(13,3,1,0x2783,0xA0,0xEF8A458B,19) DAT(13,3,1,0x27C7,0xA0,0xEF8E018F,19) DAT(13,3,1,0x27CB,0xA0,0xEF8E0363,19) DAT(13,3,1,0x27DF,0xA0,0xEF8E1337,21) DAT(13,3,1,0x2807,0xA2,0x08A2084F,13) DAT(13,3,1,0x281F,0xA2,0x08A21AF7,17) DAT(13,3,1,0x2823,0xA2,0x08A2A8AB,15) DAT(13,3,1,0x283B,0xA2,0x08A2BA13,15) DAT(13,3,1,0x2867,0xA2,0x08A6ECAF,19) DAT(13,3,1,0x28AB,0xA2,0x08880083,9) DAT(13,3,1,0x28DF,0xA2,0x088CF437,17) DAT(13,3,1,0x28FB,0xA2,0x088C54D3,15) DAT(13,3,1,0x290F,0xA2,0x09A20BE7,17) DAT(13,3,1,0x292B,0xA2,0x09A2AB03,15) DAT(13,3,1,0x2993,0xA2,0x0988B39B,17) DAT(13,3,1,0x29B7,0xA2,0x0988137F,17) DAT(13,3,1,0x29F3,0xA2,0x098C577B,19) DAT(13,3,1,0x2A03,0xA2,0x02A2020B,11) DAT(13,3,1,0x2A0F,0xA2,0x02A200E7,13) DAT(13,3,1,0x2A6F,0xA2,0x02A6E407,15) DAT(13,3,1,0x2A7B,0xA2,0x02A6F453,17) DAT(13,3,1,0x2ADB,0xA2,0x028CFE73,19) DAT(13,3,1,0x2AEB,0xA2,0x028C4EC3,15) DAT(13,3,1,0x2AF3,0xA2,0x028C5C7B,17) DAT(13,3,1,0x2B43,0xA2,0x03A6474B,17) DAT(13,3,1,0x2B7F,0xA2,0x03A6F517,19) DAT(13,3,1,0x2B97,0xA2,0x0388B9DF,19) DAT(13,3,1,0x2C0F,0xA2,0x4CA24EE7,19) DAT(13,3,1,0x2C2B,0xA2,0x4CA2EE03,17) DAT(13,3,1,0x2C3F,0xA2,0x4CA2FE57,21) DAT(13,3,1,0x2CD7,0xA2,0x4C8CB29F,19) DAT(13,3,1,0x2D2F,0xA2,0x4DA2EF47,21) DAT(13,3,1,0x2D3B,0xA2,0x4DA2FF13,21) DAT(13,3,1,0x2D8F,0xA2,0x4D88E567,19) DAT(13,3,1,0x2DA7,0xA2,0x4D88476F,19) DAT(13,3,1,0x2DAB,0xA2,0x4D884583,15) DAT(13,3,1,0x2DE3,0xA2,0x4D8C036B,17) DAT(13,3,1,0x2E07,0xA2,0x46A2464F,17) DAT(13,3,1,0x2E5B,0xA2,0x46A610F3,17) DAT(13,3,1,0x2E8F,0xA2,0x4688EE67,19) DAT(13,3,1,0x2E97,0xA2,0x4688FCDF,21) DAT(13,3,1,0x2EAB,0xA2,0x46884E83,15) DAT(13,3,1,0x2EB3,0xA2,0x46885C3B,17) DAT(13,3,1,0x2EFB,0xA2,0x468C1AD3,17) DAT(13,3,1,0x2F17,0xA2,0x47A2575F,21) DAT(13,3,1,0x2FAF,0xA2,0x47884FC7,19) DAT(13,3,1,0x2FCF,0xA2,0x478CAB27,19) DAT(13,3,1,0x2FE7,0xA2,0x478C092F,17) DAT(13,3,1,0x2FFF,0xA2,0x478C1B97,19) DAT(13,3,1,0x3007,0xB0,0xB0B0B04F,17) DAT(13,3,1,0x304F,0xB0,0xB0B4F6A7,21) DAT(13,3,1,0x3067,0xB0,0xB0B454AF,19) DAT(13,3,1,0x30D3,0xB0,0xB09E4EDB,21) DAT(13,3,1,0x30EF,0xB0,0xB09EFC87,21) DAT(13,3,1,0x310F,0xB0,0xB1B0B3E7,21) DAT(13,3,1,0x3163,0xB0,0xB1B455EB,21) DAT(13,3,1,0x31A3,0xB0,0xB19ABB2B,21) DAT(13,3,1,0x31B7,0xB0,0xB19AAB7F,23) DAT(13,3,1,0x31EB,0xB0,0xB19EFDC3,23) DAT(13,3,1,0x31F3,0xB0,0xB19EEF7B,25) DAT(13,3,1,0x320F,0xB0,0xBAB0B8E7,21) DAT(13,3,1,0x3227,0xB0,0xBAB01AEF,21) DAT(13,3,1,0x324B,0xB0,0xBAB4FCE3,23) DAT(13,3,1,0x3253,0xB0,0xBAB4EE5B,23) DAT(13,3,1,0x3293,0xB0,0xBA9A009B,17) DAT(13,3,1,0x329F,0xB0,0xBA9A0277,19) DAT(13,3,1,0x32B7,0xB0,0xBA9AA07F,21) DAT(13,3,1,0x32BB,0xB0,0xBA9AA293,19) DAT(13,3,1,0x32E7,0xB0,0xBA9EF42F,23) DAT(13,3,1,0x332F,0xB0,0xBBB01947,19) DAT(13,3,1,0x33AB,0xB0,0xBB9AB383,21) DAT(13,3,1,0x33C7,0xB0,0xBB9E558F,23) DAT(13,3,1,0x33E3,0xB0,0xBB9EF56B,25) DAT(13,3,1,0x341B,0xB0,0xF4B0E6B3,21) DAT(13,3,1,0x345F,0xB0,0xF4B4A2B7,21) DAT(13,3,1,0x347B,0xB0,0xF4B40253,17) DAT(13,3,1,0x3493,0xB0,0xF49A4E9B,21) DAT(13,3,1,0x34DB,0xB0,0xF49E0873,19) DAT(13,3,1,0x351F,0xB0,0xF5B0E7F7,25) DAT(13,3,1,0x354F,0xB0,0xF5B4B3A7,23) DAT(13,3,1,0x357F,0xB0,0xF5B40317,19) DAT(13,3,1,0x363B,0xB0,0xFEB04C13,19) DAT(13,3,1,0x365B,0xB0,0xFEB4A8F3,23) DAT(13,3,1,0x36CB,0xB0,0xFE9E1263,21) DAT(13,3,1,0x36D3,0xB0,0xFE9E00DB,21) DAT(13,3,1,0x36E3,0xB0,0xFE9EB06B,23) DAT(13,3,1,0x371B,0xB0,0xFFB0EDB3,25) DAT(13,3,1,0x3747,0xB0,0xFFB4BB0F,25) DAT(13,3,1,0x3777,0xB0,0xFFB40BBF,25) DAT(13,3,1,0x37A3,0xB0,0xFF9AF52B,25) DAT(13,3,1,0x37CF,0xB0,0xFF9E1327,23) DAT(13,3,1,0x37D7,0xB0,0xFF9E019F,23) DAT(13,3,1,0x3803,0xB2,0x18B2180B,15) DAT(13,3,1,0x3817,0xB2,0x18B2085F,17) DAT(13,3,1,0x3827,0xB2,0x18B2B8EF,21) DAT(13,3,1,0x384B,0xB2,0x18B65EE3,21) DAT(13,3,1,0x38A3,0xB2,0x1898122B,15) DAT(13,3,1,0x38BB,0xB2,0x18980093,13) DAT(13,3,1,0x38CF,0xB2,0x189CF427,19) DAT(13,3,1,0x38F3,0xB2,0x189C467B,19) DAT(13,3,1,0x3907,0xB2,0x19B2194F,19) DAT(13,3,1,0x390B,0xB2,0x19B21BA3,19) DAT(13,3,1,0x3967,0xB2,0x19B6FDAF,25) DAT(13,3,1,0x3983,0xB2,0x1998B38B,19) DAT(13,3,1,0x39A7,0xB2,0x1998136F,19) DAT(13,3,1,0x39D3,0xB2,0x199CE7DB,23) DAT(13,3,1,0x39EF,0xB2,0x199C5587,19) DAT(13,3,1,0x39F7,0xB2,0x199C473F,21) DAT(13,3,1,0x3A67,0xB2,0x12B6F6AF,23) DAT(13,3,1,0x3ABF,0xB2,0x12980AD7,17) DAT(13,3,1,0x3AD3,0xB2,0x129CECDB,21) DAT(13,3,1,0x3ADF,0xB2,0x129CEE37,21) DAT(13,3,1,0x3B3F,0xB2,0x13B2A157,19) DAT(13,3,1,0x3B53,0xB2,0x13B6475B,21) DAT(13,3,1,0x3BB7,0xB2,0x1398097F,19) DAT(13,3,1,0x3BBB,0xB2,0x13980B93,17) DAT(13,3,1,0x3BE7,0xB2,0x139C5D2F,21) DAT(13,3,1,0x3BFF,0xB2,0x139C4F97,21) DAT(13,3,1,0x3C13,0xB2,0x5CB24C1B,19) DAT(13,3,1,0x3C23,0xB2,0x5CB2FCAB,23) DAT(13,3,1,0x3C3B,0xB2,0x5CB2EE13,21) DAT(13,3,1,0x3CA7,0xB2,0x5C98566F,21) DAT(13,3,1,0x3CC7,0xB2,0x5C9CB28F,21) DAT(13,3,1,0x3CFB,0xB2,0x5C9C00D3,17) DAT(13,3,1,0x3D17,0xB2,0x5DB24D5F,23) DAT(13,3,1,0x3D1B,0xB2,0x5DB24FB3,23) DAT(13,3,1,0x3E2B,0xB2,0x56B2F403,19) DAT(13,3,1,0x3E3F,0xB2,0x56B2E457,21) DAT(13,3,1,0x3ED7,0xB2,0x569CA89F,21) DAT(13,3,1,0x3F43,0xB2,0x57B6134B,21) DAT(13,3,1,0x3FAB,0xB2,0x57985F83,21) DAT(13,3,1,0x3FE3,0xB2,0x579C196B,21) #else DAT(13,3,2,0x2053,0xCC,0xCC05410D,15) DAT(13,3,2,0x206F,0xCC,0xCC059F9D,21) DAT(13,3,2,0x208B,0xCC,0xCC3FC3CD,23) DAT(13,3,2,0x20AF,0xCC,0xCC3F0F9D,23) DAT(13,3,2,0x20F3,0xCC,0xCC3A4D0D,19) DAT(13,3,2,0x212F,0xCC,0xCD01CF9D,21) DAT(13,3,2,0x2143,0xCC,0xCD04500D,15) DAT(13,3,2,0x216B,0xCC,0xCD049FCD,21) DAT(13,3,2,0x2197,0xCC,0xCD3ED15D,23) DAT(13,3,2,0x21C7,0xCC,0xCD3B905D,21) DAT(13,3,2,0x21DF,0xCC,0xCD3B829D,21) DAT(13,3,2,0x21E3,0xCC,0xCD3B5C0D,21) DAT(13,3,2,0x21FB,0xCC,0xCD3B4ECD,23) DAT(13,3,2,0x2237,0xCC,0xC00CDD5D,19) DAT(13,3,2,0x2243,0xCC,0xC009500D,13) DAT(13,3,2,0x2297,0xCC,0xC033D15D,19) DAT(13,3,2,0x229B,0xCC,0xC033D2CD,19) DAT(13,3,2,0x22EF,0xCC,0xC0365F9D,21) DAT(13,3,2,0x22F7,0xCC,0xC0364D5D,19) DAT(13,3,2,0x232B,0xCC,0xC10DCFCD,21) DAT(13,3,2,0x2347,0xCC,0xC108505D,15) DAT(13,3,2,0x236F,0xCC,0xC1089F9D,19) DAT(13,3,2,0x2387,0xCC,0xC132C05D,17) DAT(13,3,2,0x23A3,0xCC,0xC1320C0D,15) DAT(13,3,2,0x23B7,0xCC,0xC1321D5D,19) DAT(13,3,2,0x23BB,0xCC,0xC1321ECD,19) DAT(13,3,2,0x2413,0xCC,0x9C50110D,15) DAT(13,3,2,0x241F,0xCC,0x9C50129D,17) DAT(13,3,2,0x2457,0xCC,0x9C55415D,19) DAT(13,3,2,0x24BF,0xCC,0x9C6F1E9D,23) DAT(13,3,2,0x24CB,0xCC,0x9C6A93CD,21) DAT(13,3,2,0x24E3,0xCC,0x9C6A5C0D,19) DAT(13,3,2,0x2517,0xCC,0x9D51115D,19) DAT(13,3,2,0x2563,0xCC,0x9D549C0D,19) DAT(13,3,2,0x2577,0xCC,0x9D548D5D,21) DAT(13,3,2,0x2587,0xCC,0x9D6EC05D,21) DAT(13,3,2,0x25AF,0xCC,0x9D6E0F9D,23) DAT(13,3,2,0x25D7,0xCC,0x9D6B815D,21) DAT(13,3,2,0x25EB,0xCC,0x9D6B5FCD,25) DAT(13,3,2,0x2603,0xCC,0x905C000D,13) DAT(13,3,2,0x267B,0xCC,0x90598ECD,19) DAT(13,3,2,0x2693,0xCC,0x9063D10D,17) DAT(13,3,2,0x26C3,0xCC,0x9066900D,15) DAT(13,3,2,0x26EB,0xCC,0x90665FCD,21) DAT(13,3,2,0x2783,0xCC,0x9162C00D,15) DAT(13,3,2,0x27C7,0xCC,0x9167905D,19) DAT(13,3,2,0x27CB,0xCC,0x916793CD,21) DAT(13,3,2,0x27DF,0xCC,0x9167829D,19) DAT(13,3,2,0x2807,0xCF,0x0FC0005D,17) DAT(13,3,2,0x281F,0xCF,0x0FC0129D,19) DAT(13,3,2,0x2823,0xCF,0x0FC0CC0D,19) DAT(13,3,2,0x283B,0xCF,0x0FC0DECD,23) DAT(13,3,2,0x2867,0xCF,0x0FC59C5D,23) DAT(13,3,2,0x28AB,0xCF,0x0FFF0FCD,27) DAT(13,3,2,0x28DF,0xCF,0x0FFA829D,23) DAT(13,3,2,0x28FB,0xCF,0x0FFA4ECD,25) DAT(13,3,2,0x290F,0xCF,0x0EC1039D,19) DAT(13,3,2,0x292B,0xCF,0x0EC1CFCD,23) DAT(13,3,2,0x2993,0xCF,0x0EFED10D,23) DAT(13,3,2,0x29B7,0xCF,0x0EFE1D5D,25) DAT(13,3,2,0x29F3,0xCF,0x0EFB4D0D,23) DAT(13,3,2,0x2A03,0xCF,0x03CC000D,15) DAT(13,3,2,0x2A0F,0xCF,0x03CC039D,19) DAT(13,3,2,0x2A6F,0xCF,0x03C99F9D,23) DAT(13,3,2,0x2A7B,0xCF,0x03C98ECD,21) DAT(13,3,2,0x2ADB,0xCF,0x03F682CD,21) DAT(13,3,2,0x2AEB,0xCF,0x03F65FCD,25) DAT(13,3,2,0x2AF3,0xCF,0x03F64D0D,21) DAT(13,3,2,0x2B43,0xCF,0x02C8500D,15) DAT(13,3,2,0x2B7F,0xCF,0x02C88E9D,19) DAT(13,3,2,0x2B97,0xCF,0x02F2D15D,21) DAT(13,3,2,0x2C0F,0xCF,0x5F90039D,21) DAT(13,3,2,0x2C2B,0xCF,0x5F90CFCD,25) DAT(13,3,2,0x2C3F,0xCF,0x5F90DE9D,25) DAT(13,3,2,0x2CD7,0xCF,0x5FAA815D,23) DAT(13,3,2,0x2D2F,0xCF,0x5E91CF9D,25) DAT(13,3,2,0x2D3B,0xCF,0x5E91DECD,25) DAT(13,3,2,0x2D8F,0xCF,0x5EAEC39D,25) DAT(13,3,2,0x2DA7,0xCF,0x5EAE0C5D,23) DAT(13,3,2,0x2DAB,0xCF,0x5EAE0FCD,25) DAT(13,3,2,0x2DE3,0xCF,0x5EAB5C0D,23) DAT(13,3,2,0x2E07,0xCF,0x539C005D,19) DAT(13,3,2,0x2E5B,0xCF,0x539942CD,21) DAT(13,3,2,0x2E8F,0xCF,0x53A3C39D,23) DAT(13,3,2,0x2E97,0xCF,0x53A3D15D,23) DAT(13,3,2,0x2EAB,0xCF,0x53A30FCD,23) DAT(13,3,2,0x2EB3,0xCF,0x53A31D0D,21) DAT(13,3,2,0x2EFB,0xCF,0x53A64ECD,23) DAT(13,3,2,0x2F17,0xCF,0x529D115D,21) DAT(13,3,2,0x2FAF,0xCF,0x52A20F9D,21) DAT(13,3,2,0x2FCF,0xCF,0x52A7939D,23) DAT(13,3,2,0x2FE7,0xCF,0x52A75C5D,23) DAT(13,3,2,0x2FFF,0xCF,0x52A74E9D,23) DAT(13,3,2,0x3007,0xDD,0xDD00005D,17) DAT(13,3,2,0x304F,0xDD,0xDD05539D,23) DAT(13,3,2,0x3067,0xDD,0xDD059C5D,23) DAT(13,3,2,0x30D3,0xDD,0xDD3A810D,21) DAT(13,3,2,0x30EF,0xDD,0xDD3A5F9D,27) DAT(13,3,2,0x310F,0xDD,0xDC01039D,19) DAT(13,3,2,0x3163,0xDD,0xDC049C0D,19) DAT(13,3,2,0x31A3,0xDD,0xDC3E0C0D,21) DAT(13,3,2,0x31B7,0xDD,0xDC3E1D5D,25) DAT(13,3,2,0x31EB,0xDD,0xDC3B5FCD,27) DAT(13,3,2,0x31F3,0xDD,0xDC3B4D0D,23) DAT(13,3,2,0x320F,0xDD,0xD10C039D,19) DAT(13,3,2,0x3227,0xDD,0xD10CCC5D,21) DAT(13,3,2,0x324B,0xDD,0xD10953CD,21) DAT(13,3,2,0x3253,0xDD,0xD109410D,17) DAT(13,3,2,0x3293,0xDD,0xD133D10D,21) DAT(13,3,2,0x329F,0xDD,0xD133D29D,23) DAT(13,3,2,0x32B7,0xDD,0xD1331D5D,23) DAT(13,3,2,0x32BB,0xDD,0xD1331ECD,23) DAT(13,3,2,0x32E7,0xDD,0xD1365C5D,23) DAT(13,3,2,0x332F,0xDD,0xD00DCF9D,23) DAT(13,3,2,0x33AB,0xDD,0xD0320FCD,21) DAT(13,3,2,0x33C7,0xDD,0xD037905D,21) DAT(13,3,2,0x33E3,0xDD,0xD0375C0D,21) DAT(13,3,2,0x341B,0xDD,0x8D5012CD,19) DAT(13,3,2,0x345F,0xDD,0x8D55429D,21) DAT(13,3,2,0x347B,0xDD,0x8D558ECD,23) DAT(13,3,2,0x3493,0xDD,0x8D6FD10D,23) DAT(13,3,2,0x34DB,0xDD,0x8D6A82CD,21) DAT(13,3,2,0x351F,0xDD,0x8C51129D,19) DAT(13,3,2,0x354F,0xDD,0x8C54539D,21) DAT(13,3,2,0x357F,0xDD,0x8C548E9D,21) DAT(13,3,2,0x363B,0xDD,0x815CDECD,23) DAT(13,3,2,0x365B,0xDD,0x815942CD,19) DAT(13,3,2,0x36CB,0xDD,0x816693CD,21) DAT(13,3,2,0x36D3,0xDD,0x8166810D,17) DAT(13,3,2,0x36E3,0xDD,0x81665C0D,19) DAT(13,3,2,0x371B,0xDD,0x805D12CD,19) DAT(13,3,2,0x3747,0xDD,0x8058505D,17) DAT(13,3,2,0x3777,0xDD,0x80588D5D,19) DAT(13,3,2,0x37A3,0xDD,0x80620C0D,15) DAT(13,3,2,0x37CF,0xDD,0x8067939D,21) DAT(13,3,2,0x37D7,0xDD,0x8067815D,19) DAT(13,3,2,0x3803,0xDE,0x1EC0000D,15) DAT(13,3,2,0x3817,0xDE,0x1EC0115D,19) DAT(13,3,2,0x3827,0xDE,0x1EC0CC5D,21) DAT(13,3,2,0x384B,0xDE,0x1EC553CD,23) DAT(13,3,2,0x38A3,0xDE,0x1EFF0C0D,23) DAT(13,3,2,0x38BB,0xDE,0x1EFF1ECD,27) DAT(13,3,2,0x38CF,0xDE,0x1EFA939D,25) DAT(13,3,2,0x38F3,0xDE,0x1EFA4D0D,23) DAT(13,3,2,0x3907,0xDE,0x1FC1005D,19) DAT(13,3,2,0x390B,0xDE,0x1FC103CD,21) DAT(13,3,2,0x3967,0xDE,0x1FC49C5D,23) DAT(13,3,2,0x3983,0xDE,0x1FFEC00D,23) DAT(13,3,2,0x39A7,0xDE,0x1FFE0C5D,25) DAT(13,3,2,0x39D3,0xDE,0x1FFB810D,23) DAT(13,3,2,0x39EF,0xDE,0x1FFB5F9D,29) DAT(13,3,2,0x39F7,0xDE,0x1FFB4D5D,27) DAT(13,3,2,0x3A67,0xDE,0x12C99C5D,21) DAT(13,3,2,0x3ABF,0xDE,0x12F31E9D,23) DAT(13,3,2,0x3AD3,0xDE,0x12F6810D,19) DAT(13,3,2,0x3ADF,0xDE,0x12F6829D,21) DAT(13,3,2,0x3B3F,0xDE,0x13CDDE9D,25) DAT(13,3,2,0x3B53,0xDE,0x13C8410D,17) DAT(13,3,2,0x3BB7,0xDE,0x13F21D5D,23) DAT(13,3,2,0x3BBB,0xDE,0x13F21ECD,23) DAT(13,3,2,0x3BE7,0xDE,0x13F75C5D,25) DAT(13,3,2,0x3BFF,0xDE,0x13F74E9D,25) DAT(13,3,2,0x3C13,0xDE,0x4E90110D,17) DAT(13,3,2,0x3C23,0xDE,0x4E90CC0D,19) DAT(13,3,2,0x3C3B,0xDE,0x4E90DECD,23) DAT(13,3,2,0x3CA7,0xDE,0x4EAF0C5D,23) DAT(13,3,2,0x3CC7,0xDE,0x4EAA905D,21) DAT(13,3,2,0x3CFB,0xDE,0x4EAA4ECD,23) DAT(13,3,2,0x3D17,0xDE,0x4F91115D,21) DAT(13,3,2,0x3D1B,0xDE,0x4F9112CD,21) DAT(13,3,2,0x3E2B,0xDE,0x429CCFCD,23) DAT(13,3,2,0x3E3F,0xDE,0x429CDE9D,23) DAT(13,3,2,0x3ED7,0xDE,0x42A6815D,19) DAT(13,3,2,0x3F43,0xDE,0x4398500D,17) DAT(13,3,2,0x3FAB,0xDE,0x43A20FCD,21) DAT(13,3,2,0x3FE3,0xDE,0x43A75C0D,21) #endif }; /**************** Frogbit key schedule ****************/ /* * A static table is used as a blueprint for PRNG state initialization. * Polynom constants will be ANDed to the hexadecima constants below * according to the MTGFSR principles, see ECRYPT_init function. */ static ECRYPT_AE_frogbit_prng def_prng[FROGBIT10]= {{MTGFSR_N-1,{0,0,0},{0,0x01555555,0x002AAAAA,0x017FFFFF}} ,{MTGFSR_N-1,{0,0,0},{0,0x00155555,0x02AAAAAA,0x02BFFFFF}} ,{MTGFSR_N-1,{0,0,0},{0,0x01555555,0x002AAAAA,0x017FFFFF}} ,{MTGFSR_N-1,{0,0,0},{0,0x00155555,0x02AAAAAA,0x02BFFFFF}} ,{MTGFSR_N-1,{0,0,0},{0,0x01555555,0x002AAAAA,0x017FFFFF}} ,{MTGFSR_N-1,{0,0,0},{0,0x00155555,0x02AAAAAA,0x02BFFFFF}} ,{MTGFSR_N-1,{0,0,0},{0,0x01555555,0x002AAAAA,0x017FFFFF}} ,{MTGFSR_N-1,{0,0,0},{0,0x00155555,0x02AAAAAA,0x02BFFFFF}} ,{MTGFSR_N-1,{0,0,0},{0,0x01555555,0x002AAAAA,0x017FFFFF}} ,{MTGFSR_N-1,{0,0,0},{0,0x00155555,0x02AAAAAA,0x02BFFFFF}} }; /* * Key and message independent initialization. According to ECRYPT NoE * API requirements. */ void ECRYPT_init(void) { int ik; for (ik=0;ik>4); } ik=5*FROGBIT10/2; break; } /* "Other State Words in Each PRNG" */ for (i=0;i>ib))<>1))<<(2*iii+1); } } /* 6) pass such output sequence to the Berlekamp-Massey algorithm */ bit.berlekamp_massey(data,1000*CHAR_BIT); /* 7) report the recovered polynomial (informative only) */ bit.fprintf(stdout);fprintf(stdout,"\n"); /* Try the Berlekamp-Massey algo on the "exclusive or" of the two-bit generator output */ for (i=0;i<1000;i++) { data[i]=0; for (iii=0;iii>1)))<