// clear

// e = prime_gen( 10 )

// start    = timer

// generate rsa_keypair 20000, $e, n, d, p, q, dp, dq, qinv

// endx = timer

// time = int( ( 0x$endx - 0x$start ) / 1000 )

// ? $n
// ? $d
// ? $p
// ? $q
// ? $dp
// ? $dq
// ? $qinv


// plain    = dup( int( 20000 / 8 ), 0f )

// xx       = rsa_pub_encode( 20000, $e, $n, $plain )
// yy1      = rsa_crt_decode( 20000, $p, $q, $dp, $dq, $qinv, $xx )
// if $yy1 != $plain
//  ?
//  pause
// endif

// yy2      = rsa_nd_decode( 20000, $n, $d, $xx )
// if $yy2 != $plain
//  ?
//  pause
// endif




e       = CCC729206EF61887354576D86E643601

n       = A5605A2512507BC0367BE6AA81E74E0530963D7E346FB564B9E8453917D2608303BB0EDA52479053A1C943571769B2D85F1F8599AA6B7A81E7565C4BE51DCC530E4CB6089D6B9C3E89B0D7ECF5C3C130929D1765EDCE9EC87CA9998362A6DC82D38B4B0E1D71DDA655157733196D5CE45E36958CE839B4C8A391FD600C0D4666AC3EE60AFE25D13FDF522542863BF1FFACF4C227EECD0276FA0050CE0FEB6133196D9FA11BE085F39F405CE0E709CCB3CC21A6D61C7149C48D632BBFADB513F32845FA29DFCEAE6828A464C67233BA49C076F2FEEE270D2BF0BBEAEFED2D412E5DFF00B5C31B383F6FB862120CAC6E96EB55C5AF91C65C94B74951D1080591A22367CC6C755C22545055B1B73999D69CA5AF1344AA33BE7C022774AB94E5F533F5427991449C4E088364513AFDD55FB3613E68D09B202571B687C7D3C2D4DB39A21C996095D2AEBB381171C31CC931EDCA48D3AB0B11C5A80D44DA71F8392436FC7DCED2099993FA7EDDF0ECD84E62CA4CF4020DE6221B02CE5020A2B4836A97C4C8F21A36752527882356CDF0096FF9635F556A020B940B2085A64BBF0F1210BC88271299409A025D89D4B30FD6069A8EE62E259D6C9C012DCD5DC804CB6267C22947258278B995E6C1275825C8BDEBEAB4F1F00FD581930B98D9896D5681FC23677856ED2F301697A6CEAF62265B11FA677116231C9F894549D046896F07C7DECF946D88373554789842D8E3C360E9BA1AA9BE653910A55F309B39E1813F7AA6326A5951C93D222F7A1FF00B82EC59923E4F06E37C2DF94613BBE812B8417C183C4A9267D7A4577C3A7637245D2C7C6C035481182B73A4470BB3134ACCB38CF52B1D86F70A39821ED865369FC61DCA66A8909ADA1F8CC11E43E8B358F753B8F2A604590FF00E9B997056F90375EC1272D1BBF5A504978EF90390E75560DDE458CE5728707B2E4C25EEB974E15A37D57ED6D9F66BB9FC9514822AC3AC912AF718CA4E1BA9D25C941256E7D004EA879726ECF2CBC8327274FF973B502855349B963D2123ED39272E5406C92B3512DFD74501610E8D1517C67B1CB17F3624BC24B3CAFC3960FA2767B0C6336F8AD1A818C58F4198D9830B714FEBAA15130F21064FAA4CC612F363F1AC66EB5C3F80E73724B6B0ABDF0DAEF851FCFCE24CCEFF63EE6099F6E528B4330819F03D2C01EDA2DF6CE8DB1FCED971B1A01742A096361902FE98EC7C30EC93E1B05D04603EB07FAB9F0097CAF1395A8B829C850E3E8ABC0D47B172E7F2061694C19DBC3A5F8D1BCE0ECB13F62D1189560111C906BEED297CCB1FE20D69225533D541B0C132C830CF6075C063FBD0931257790AF915418666165BCDD4BB5B2271D3FB18011A54D75B5A844512485971F0BA8176553DA211EBE536C85E266A2F24B2FC1CD39213D52230FE10757DF5643F34745490848239C8E6A8951EAA0DA24D2273ED766F6257E2A30783CF9875F2779D5759FB9D973C9E4FEE4622AE68293107AEDE7CF1B69A73773CCA00C9B4509E2B5FC5813A2E7BA5AEBEE05103C6D0692360945CFC046407DEB7D0F180C4876F27C6B2B722459DAD7BAC279BC938B3F157BAB406C23756299E309380D48220D03FFA40A824E133206818B2D22F12672B5D409E59521F2C87CD33BB8BF4B2EB14DED217B1710CAE6FDF94B1EFB16433E11C7B6BF3A61B5A73306B53B87521666AA9A5093758E2007C50126F44B05D30C730650CECD634C8719D550D4FF8B1994FFD0313DD1BA52BCC0627BDB80775CD37E1D7301F56A861BD0960FEFD3E5A3AC1FAE7F2A308F3F1DC552C6FE8FD8206E848FAEF245E89A75EF1C7DFC622E5327AE7888D49839D7E94D3EEFA5D8E3C74E05428C1D71459D58001E5143B2DD8EC2CCE1E99774FE4FCB81815BB7504A92B3CC170847799BEF92A164DC1FBAF346F505069734CEF93F38431803576AB36330E895D06FA31F50A510D0CF4C9C49D6F95E5A36E27600041E795ADCEEA42A7E3E9B21F98E7439AB357A2BFB54AF91354028EB737A1995236A8603D04D3764096CDD67A8DB1C575BCE05E8C82C53087775890C661BB075242B2962FAE60D9BD03B1C744356565E7169D3AB20C0E154319B33EE178ADD5454A4679287336BF0C099FA8B5BB1FA41D218DDA63F058D85E01D5E759636D6EC3A1EE11877C95D883E402C0E6C3DA35F53AF906311175A8FF37348036C1FB23460F7A120DE6803A46C186C3A8E91576C1B49A13941EB13C7CE39DE2FA5EF6EFA4E6EAF844DF8BA03743CD8F7CC6E3D8BF27DD6F7727D629195B688DBC628EA0F0E4D1B88FBF018FE0D8A9B829F14E3172798B914FF1374330140CB825EB3122DCF918432CFAAD8C4A093BB5A7C8ED1B8B9832228C0159EEAEEE8EEA592028BAE0D231500A91D1FB068A88487A9FF60F6F428824563F3936BB3052ED691E2BC59E738FA7747D9EE02B4CC53ACB82A4F5CE83385506D3DA06EA9E4BF35304AAF46183890C0CD9799A9C72F47EC9558FF53A17DCEEBF30EECC1B10F9449BA267863FEF4DD3FB4D7B23330BB72F2CD01E58242C1ADCD8EDAC2C3BFEA46F1A5472B0CD88F3AF6CD6096B1184E8C923617E0902D5BB37555658FC185C47BFF72C558D9FD646F082F8FD5896C6E0802BAB4B532A2D2C4E1726876CE1EAB0A0F27638658EC9B1A443511D88BD8A58E682955C4A8AAC249F2375639209ECF64B11D41C87EB5784503CBA12761F978B961500DB104D66565C4196FA1F22F63D80BC13DA6C9FF3A58DD347CB7A2267D7EC346AE3DDAF592E99A02EE9EAF56F49A87413706E7B98AB33D833D08C41E5256EED3A2611160D80B8277DA11447DF0D9E42E9AB848A24FC58CF38228D46D199F0514A76A4635FB27B7CBE8FFAA5834C467625EFAF3C1FB101B40145AED9586C52C648256A17417D6F8CCDDE3298E18804EB119B37D9EE2BACE64070C6F606736D53AEE886CEB0C5B9A0F4D0CD5676D69C8ABFB3AE17AC3E7016AD41F498F0B33B30084D0499782D5F38AF3FFB7BB12B2D5E80D29DDE36A8422CC6B20303B271186B9467D73C6C4FAF15A6778C255DA91C51EE3F4737BEC242079ACF440365560ACFB74FC8BAB8CE640F95325F0B54C2802C84D102293A36784308D71511C57BCE7D3F2434898477F207CA1DF431046E810455F4A3932A42B18078E1C1166303FBD80F20798E7BBDB8910A770DC2ABA9272B1A663242FB099D3290B971B345EA882B3F41AF79E1B296493FAE114F16366D1236E0D47103EAF8A6871EC375297BC6FB1BE6EBA187B0529F1EBF127EA831D64C5D230BF06971080777975F2B3814E354A5A3CAC6E85A94CF02B2CE1FA9307835F651EF41AE766C6FCC0FD2E47970046362F703A320BD445E0D01B0560769DA1E112F50D16607C2DBDD9DDB860501922D80F3F85D0A5C6FD303A9DDA8C59EBAF231C73B6D3B051ED7585574153B40BDB1F2ECEFC1AF22E970B7D2593A0F5BA557A1EB707183A362992AA675AF4E2D509AB43393320D8B9A00EFF72D23841EC727CE7F6AE1206193918D
d       = 657A714C2F7B57DC0A4913B1CA61BEC020A6D3951B0CC28D2CAC63942E53681D83F9B563BDE7314AE6B20515A008AC7944187534AFDD599BD99F261CA23F61CF13603CD800B20788E0F5910980626D832D45406823DE106F44E06A6F635ABA89572C3BE78A61F6659D245778BDD66779A81619395D96FE85041585A6A055F5A0BAF2B81D38D01914ADF54A186F72DA6DAD0519F59120F7F36F87F8B6F71D4504624EEBE70777DE0C901CD42D42F1FABC4984823E126F4CAB8DC086AA0B7B43FCA26B0F98797A97BE782D85EC87DAC6301047AB4C6AE5E3C9D16D55C0931A5D0D808C5FA5C586ACEFF53A481F0DE13C824EE60718AEAA9F3082E846C92055ED694DAA5E33B30F0C38F9CE6BDC7BDD20937CCB3514A64AA84ED3AAFBC337A3A4AD56091C1AF1D004FF705E15C91D54FD9DB95B08B84AD82C4D0C9E17AA4A603A7E1A4738DA76F65278E6D3DF899EBBD65B3C99D6D5609B2941DD6D0B09583F3C19A3901B87E86621896B28C741E627D8D8006842B28CF90EC543EF0318515F8245057A4550B79071C1D4CDDB06CFCCA4B5720AAF5A78FFACF0A1AD9BA87236EB92D8131062701EF72E18290B16347F8D0554A1D9D40CDD244E420F4B32EFE1CB1D34D42D959D3834675F99552059AB778B160958FF40E2C794BBAAEED565E074D38BBC55357FAB081F445125138B4DB514154E56229DA9AFADE3613B7B75B814361EC8B1127E51393D686F8BCE1B80BB11DC75E4CF9FBC083A65B9D7362729E8E196E101473A08174DE11E26203017A3B502CD395DFE0FC18BA0166AED5D46C88B7A84862EB888D15065A91ADA231176D044834EBAB5DA2294D3F41B0487D5CC5F71B2C6F11436014317A5D1B17E04ED24F6C618002850FA27B5C22A78EE515F0AC1D12518056315DEA33DFA8ADCF9A110B3170626EC2C3F83DE80CAFD70EA36DBD89AE99D05B1869ED08E5AA091C81CF440B74FE3AA355CC3E6D94BE33AC17AF02A55FEB173775D5A921A238B807545D0179A128A28F5AE1E4758A6F038C8815DAFC04B5F62AF95BB2EB545FD2B67A71C7DB7AC1B959E356315B3EDFE1C8F46AF26EB41D64B115526C13EACE57141526C498475B63269F5001852C4202D98C8CCABE1511EF636B5416211D31F4081C5BEE7DCA882AAF13F2D9898BF2FDC308AA79A0EE0A417B05B5A7FF0E9FD152EA950C024B385EF06B2E0A9089701A4D22CF6EC6F1C05F00D60F669052B4405E921A1CF9E82105F0E7969D6629E39CDD3F1E85273C371AAEE8EAC2E223319F7FC3237266AD9A821A7E76FD7EF7865AB1E6D23142D9FD20E0506C0494284C4E25DD03C756AD710B256C69CBFFFC0AE125F20D51509C60628816B497D18A19BC8ABBEFC95180803C90D29A8A69240C62BB4C958357DF67E76784C9A636D46E6D61B25ABB749D96A446ACC5A06953DE0EB7C786B1EE4C41CDC1C21AB9213F3B3C6400B5D221B93DFA4F4E401B1DCB4323F866FA181CC139E8E86980D4ACB60B5EE8BBDFA4557142E9FB0608B184B6D14823E9CB271E2F3D04C44775D4B28AAD7FD638EF1F94475A141A84944367258FD93A02673235BA737799B9273A81E60BCDFE27F971DB67E21D777C2A5AEA46C017D561B20751AD2EAAC8A91EC38D515021A19E666575731C7512BD03A6D35004AEA8FEB5ADEA2C9539419115E10F3A14B4D9753268739C67736CD94DDB9841C7D2CC011EFBC6D2E36B9D12CE2AF22D25464D03A1C5596E45DA394074B6026B25CF56116301406E560945E702A559CED8A274947476987FC3D83D4E662FCB0FD2C15F478123A0E8D6083E2F9EBA240FB024B879A72A86C74D54AC2E00B3EE82F2FB77647B0625C8F9E929EBAF43602C3C6FBDD7DFDC2449F19ACFDCF26A5469A43DBC8233D8754BE7E272764BF361C4A0605CCFAAFB7B57FA3A819E874A0A2FA4EA16614E9BA3FC1EA37480FBEC2A4B5160DBFE88D050BEB78D03D9F78166490E682675F462D73D4A279BEC3636198AEBA625CE71E5C952E203873E7FB920937DF1DE7ACAF7EBAD320B5C34527172E7A4764131EE7FA20A50A47166E61F2C9D60D7A1C08457443AC7B112757A89EFE303CABB5FFBDAFCAD83F43AAFC85B1BA7C16632BFFCA8B1CDE31BE46E891BEC763C22630608900B6C9A1074394CE907F6F47DB42B355F88821FE3BF676B377773994F6566B6BD125BDFDA45DAD3E2496C59D3DE2AD5D320D331A7732B644A5CC0B9C36D0AB608A5715CF59C5EB544F3656A7DD912ADA636360C3DEACA66B4023512D4A7A7F802B267326562C2480C195335F62B3829764A34FF51265B33F9DF7897AE0467766A9B3CD6F55EE6A90262ABED5210326A4AF61A389D061A29CC0C6C7C6E20EA40E762C75ECB1D4572CC917EAD1FADEC599BA419C4E6FD0936BE4828E764D49B3D8EB932FB46F11634F2556F79C9BA6F4D815F8A185EB596B97C9F9072D35DB8AE95E680F6B91ACE27E074FB707A0016869D92E2E00E80ED3C32A45904561FFAD37098B73A4AF0A58D96E232802494ECD654745DF6407FEFE62770CB3BA0DEB078B0C4170D0E825B35E9BAF40362E5440BFE783C355AFF9F87264F2ED686B9CCA2028477C4E75B92B806D9298ED28B98AFA337ECED621FECAFCFFF6EABC0D6EEC3EBF42F610839964615FBEB45E657C2AB5C4F7E064AF9CAB9DB979899A9B55F65E418EC2B631CD475A94D747DAC62AD7EE09EA02CF24A868CC4FC16C80B28121BDA1C73982CCE9E2E7E961E794C5E5B015E7B0D059A86134AA0434EFDC82382CFC41AC6BEE509D7970C456765D34732CD19E0B7D574AA1FBE979184E7EC296805F3AF5FD54B4D8C97CDC981568A857F49136E0DB1DB56B448169FE052DCBA5B5FC980807ED76C121ED6F53D0B6CEF55B48993F4F69496219B92B1C3A24D915285B62B72D46CB6090F2E23CE11F59F38D374D70FBCCEF7B0F639662462E35D4E0047A46AA6AF7C1BB2CE08F633319132F173DC6DEE2250342204A0375EAD12CFFBC1A656C3C910AD7932C94EC42EEDFDAB3F2B4C71B284997C16B5AAE10B6864389201E95CCEA25FB9A9B531CB15FB30FDA38E27A084D14EDE2C6374D41E0A97A42B84545AF9D46BF077290EF69AFCDBB0DCF0BB3DDA05CBBE9AE7444EC995C7ED4B58168419237825A4284FF3E8CBE5E359ACC1433B427CDD1C8A990C3C3FD5E960DA85033E0FE39FB89FD5CA0284856600724AEC9AD64E32AAF9BAAB21BD2668B35CE203C08E8690A6FA4E4F813C9479A5BB6D8772A30D60A999CA632FF673B3439137DE8EAA9FD5D547D1CA7B8D7D7A0B6C592314F0AA986088D3CC33690FD784E57534A50DC14B90929EBD28EFAAE4EED1195B53E2A89095594AC90309565B0E7B0DE251E57B43EE6297AF925337645BEAAE25745BD1969ED576402F64FBAF9522EB94CD6255B7D642C09CDB7990E52F9DA793A170A3FEDB2B41B48F049DB1B259E9CF2B9FBE80B299F41F927B28EEA99117EE4D4350DE363A42ACE94E28C94C04C08E99F27F0F3AEBE96B0B4FA5987FD6C1901
p       = DB3652793498670360876B7007C5714D2E630F0903CA24AD282F2C0613883E927F4D07950FAC13204A0062F57DA47880718027683BDD1666735F645A374105E1321D2BD205EE6D6951091917033A052557590DA548E62F7B168B705221A011DC0FFC7ABB50BD59CF55C860F24B361A3E22E45F6C3DE26CFF26787B277CF444A53E81001A38B61A871DA609E11386650F185822A875110246152F445636CD029E5C8347FC05BA000143480F7E155B6D1A6D2D75827FF208E221F64F986FFA626C72180EAA6EE818F3269649A57523442338193E67174330A6495514EA6C895CF1609970B10A9E624F5CB61C71328E362C61145C020B056FA53511308603CA7D50529C1ADA3E7B77472010283C188979791154553C327532332C3312E7104B10EB2BF77A312F5E414F404B79A22D445E8C235109435C130AE2030030C95FDC576779C36C0131672819124E397D222E002912C15F7F3D9E62850B013325238B32A662556DD537F4419A603F5CE943F773536C9C779D6415283002FD27385FA856CB15454D7845A40203598655416A8C774C3F18598823B6013406F92E7B5BC27A383B6B58F45C566BC802CA4020691E259709AC256908027927003E2EAB12A7059266DC0E966D2A3F9C25F117607E1B21F82D1043AE43B631D9155201C2226743BB02F04CE8487F2C714223611C43314A715B3A14FF20D2135E19FC25FB3C5111D6443F02B40DF27F7C7BC75FB11D5167460762224970957C0A7F436DD214F30F46189E5F061C64542E0C8341B82CA95AFA55FE4CB67B7E706F436F3000541C4DAE1725012901F4443B3340520C3CA8524F0CC67DB2714B4B616205778104DC00F0702B28A86BFF1795242227C933FD744802B056E758FD6DF143CE339105822F315D47654E172674717893564A0497122A0FF4624100D16F742ED067AA779C60D3115047263F470F401F381D2A1BA557757E0841EA6E474D7C36525B872FFA5079285D0E7B0F825AB64BF91843519779EE77A3604D4E1E1BDD2ADC4B2326AB1B0617C55BD7123537C567FD6FB15A1A699878BD2016645534A80A3416B966FD6F9D1E1F600720FF25A201AA07CE341E00B53E8D0C2F7C2A68326F6172C57F7F3FA133410C1454C071BE3CA9313619D333C8378907C3581E2D0E02AA180072016EB57844414B759667CD41DE58C470A6419673687E3E21EE500D69967367239202BC277E01356AE001C22F7337923948631F1322134A5A9A244436EC56344C8053D904851D9E2B3E17CF08CD02FC7FA77BA838ED52D34A6133055AB425E2685B3C6F4C3268912C8E106926941C9D4AF248B47841610370C26BE312340C2C25F24921249B645953EF104126AF424F0D98120545D42A45747B54B257F3270D575368D20D16738065C02A4A5C443E2E1548599F679E1345138C398353B838C061CE1CA64E3C08D375A10FB93FBB16957AF10BC464D528ED13355CAC4A8B57C12DF127FE69E2575B56703FFF5EBB3E1E12C22EF875F050692FF326BD0EB21EC9178C407E0B2002650A4D38D04C2A43A55C2A13FD74A777230D85568B6FB45CD55DAD3E09764E4D7A3296261F1030024471D805D74BF142C626EC31272A58451F12A44AC279014C667FEA121F1834515779BC79C86803413E3E6631E758A51F220BFF130C5A1113342229154226DD347915033F54265718B54D713A5B61E37699528F758A4995662F3870063D44110B85501E303D45A2379774CD42586A974B80126033206ABF
q       = C1212A002CF8429512BA608755DB048E6C7907F0448A42100AC41EEF4296531809D863C143F902040FC84E75283A0E8573B43F765EC252C67E474E5B2A8016DC1F7664F200BA5E6F357612893F353CA840FC437D35877A5C22BB49073DBA1A783E195D45602308AF1D330F863E837E61721244D9425E69CD112D38D74A9B637941212AAE545B7DDF7BAD22705B1C7B5B7BF37A9C6C10365435EC19EC28B947A8132B096034C9375B10D552894B3743821ADF521976A3096C40896AAA28ED1D111E1943CD2E135ABE17DA0155364A7F0042551EE4735E50D013D05BB5054D69FF3B0762A9322169E337291A97250C1E410D144ACF30C96E7C35D37FEE513014FD22565CE7681972E470724451717509EF2D1B05ED2AA968A93FDF7C79692D14D65BA447BA1C63401D10A40EC636BB52F55BA876917A0719D44E8338BA631A20952DD0069530A608281FEF247A4156627F493B694F452960B7718F0E527E105F840EFA7B2A0BC91DE151C07A307EFC29F80D9300F82F96504D1C127925126419301480356D09F3206374C87EEA6EA5530917AF66A14A155FD1145A475701AF6562630223916C8A2B0862F44BEB10876F9F1DCE799D02AE1ABE63F7494926C65C271E5E42094A35056D717554B7561A29E50D6F7F7E14A750D047B701A045C245C859B34B877EDD536A60B91711121474447B505416788746011FAA553D7BF84AD1076068FF1BA7451C4C6F4AFB686C396A1371197B5415628B5F1E3B453001240D690561A456FB46DE1B8612B83E5A0C3F091167FD6A5862EB7CA46D1901B24A877F804AE97C80314B702D2ACD2A5557F006AF7E310B9807DB6208165E3A23278A7AF038815D1C793D17D319FA64120FE71E0A70E9055B46565C5C04F53BAB44A02AB56C5E3EF75FD07B276144348B5FD038205B38126877980BEC590371E17B966D6D06B44D78225F0E182BEE65F45B9505320E724AC6091A544A34E9419D267520F835F609452A843FD57F7A33C72F626CBD422813BC2C994C436D4C78F44F8A127366D638463E1A6ACE6BAC3AB84FA17D81442F0FD2080E2DE6390D3F3E615E6E3F744855A22F3E44B03A8668C028FD5D7D289A0ECE65B646836151051256BD2FFB578001C00C494E6C204C6D16506239EF79BA7DB7640B66A9717974466AB2128457EE72464FD7442F6B80283032FA3758682456D425C85227672A5FF348887FFB3B48621C10C20D6A34E61BC5463061757AAA11AD01E9300A6246346F3BCA01BF757F016932262CCB0F805ACD37B01B463E60130733A77AA454EF67516043306E58C76593135E30413892797F1D640F0A76971CEB0A7F6F82338A677051FD23E745937942400420FB479E7D5125781E404CE43E9F1A2A7F7324B90CE25D4563495A966C5D1FF473685E684CFA465651A7011944AA6AA53E88315E09002EA454F424C2240A2748773758F220726EA9493D194A28D4282A540D749E566002E62E864F4C2AB1065D47577D8070EF355D2C4311C8022253346A944BDB28D8571664DE53A51FF959CB39F72C9568E8099D19360D2874DD707F1FEA06B85D81187F1C1C298028C95A70508710F2541562D215D6043D228B3904751E17176AB054AC179E76D25F470D6527B44F9D0F6D70A97F21761819F34A003E80411D4FFD69682A033FCC42DB7406676F37D779264B0C7958180E471D54EC139F4B2C064034BE252B16E2282C3BED32E5732360B722275FF805B1634F4F853F492DE76F8E44F892B3
dp      = 412C1B78DB36CE0829CA9AA66C78FD49E55494350449BD4CF062AC0E5D2A1189395F7ED59D79F1A6C68FE8BD8AAC074D7C927611BB63958C52F4DFF2BB8D339CB530790DCC7451B5E3E4FC38EA243867604F9719F6DE692E9CB6DB9BC91DA8847E7BDDDF878E6F14880D67B49E83BB11BB164C1AB1F7719F777FAD9FC0C1D9DFBC0C6D833F8D5EB98BC962BECE4ACE003BA3933DC8390DB753E8F6519B416E2D84EE8039EF791041BABB0E9B62431A6A0CC171A33C3901C773CE63E853275DAE36B412302A69814FB04532A0C3DDD908618044B88FB392C3585F776767B523AC98DD2161BD8BDCADBED84EA6F3A0D9376C0BD5564B11D5073B9C2364F1DF77C0AAB9C84759BFE8EDCC8546806278D08E057CAF16EE445C2E2CA0748CE019070DACEB9B2EE7C77B1144202665373EDB7F26DAA64CF21C32DFC7DE275E1ED07FDE1BB1AF7BC82ABDE527917B3CE1925419264EB756B53D6EF95F00E1574C111E36711E6A6D0EF1F57BC970886C5BA52C8A2606F8B743E50AC13D7604B7E742FAAE582884F34FC37233F3FAC01B55154A425923905FF56AA7AE72B9A6FF9B28675D7C3AA9D5AF620E329C34906328E2F0B2C1E1649D4547F272D102AC16C28663BCBE3F5D8166F9081EE88142C80D407B1B2B9BE312209EAC4711D268EC1BF7CF24605D940B4A2DEB6D0D3C52D7F19B6D7C1F06154EDB984AAAEBB1122614DB5144CCC29D0FDB7B61F17EF70914CE205EE174654561C1A601ED4D5F8A69BD2E2CD5DEEBA4F5ADF1FFCCC33F2E8277A0BDCAA86B19A9707E744FBC712590C3592AB986239973110B67AB7D1E7631D80AB22341F82936D4C5411C0ADB03BE5BBB0D93D777A34646C8C544C6F476BAC11AD1A7522E278FC6B0F50C12408EACFF0833523EE0F77DBD990818190D019E6E9DB385BACFC1C3CB8786EC75BEDB25C1CE4FC2EE59D177F316D9BCB5E92C945ABD8E29CD0C95217180305F5F5C7DB93DE0B3F02AB495E07212EC143A10BAAB7902B68F8F42162AB27B4D622E960233FE208206EAEDEE182B85EF52E83BECA86EB50EE2A9941CFEA0F133359FC226A81E462B841B5F6EBCD7A29D833184FECBF841F5A4EB3F456E92049365B429D76AF4D68C527B3434D2E071D2F395F73F1D2E2B24776C2B6666F724B57E84FEA8182045A59A469AF1A9A35D8D7EA08CFC5A0D4FC1B5D2D29918AA46AE36B49503705FD9DAEEE7A61674A314BF97734AC5A5B796BF3D2B25B21C0234B7D4C306971B9939DE0F0E66DD61939C515707F1E028A563DDEACCE0D93904D802709064FE14862F9E74839D1CB14BEF29B4693D94145AFC05D98B2A59A51699F2F6A07B5B6E34FAF306CADFBD8092167F043472389317DF5A6473410E6848785E5CDCACC17D5A4F3D60DEB6E908AF31ED698CA5C0E8A150C2A3AB777F34AB625381EB7F1E273224C7FAF6DBB8267392D562FD241C88F1E79FC5FA8561A2D3AC35C607D4A03246664F9E7E31D1BD5E3FA8824D34FA2B26D0DE1C91BAD672E3F5726B230EF3062452E587352A150E9E9D55A1BF92BF1DFAF13ED6A55DFBB4E7F284B0B83149EBC8988E837E72B36419F9DB99F2D087E0DC242E0E99647DDA92581E85480269A1F5956615EDFF0717D04713EF765117A21F8D3AEB0E9543A78C0B2569FD89907CC3C06A68D9B3E745BCF4716F208CCE2121AEAE96C32005251CBEA2DC2A4566659EDA3B25B3881E894D321E25362CE8F1D10C9202202107B715AC406CE2247747C8BCC6E6F037
dq      = AE26DE6F1A73D583855567EFF014D7DDC00F929D393EB1449F90ABA93ED913F4CA4C6168447EE51CEA70CE038A4017EF829D0FA6360125CB2367CDBD5D7D1444131A37AA653FA7CD9AA04127FDD16C13879075141465BA39E19CD702269D57FA0A451C5A8456E25BF010A860487B9B1689639B8F324AA53527058AF87F1318A63A1A8EC511293150BD98F92A44E61CE2656D50D84BEFE55268F124BC150D9AE16D47A482C8FDB35D4D505A329A402DA89990ABA3775DD4103EB46859EE34E004B656A1E0903493396CD86F6D3B73649FCDBF11E78D4A953EEB6CEE78705B6672DF32E93CF343943D51B9AC78E95B943D41C5A78D6FBBAADEB7E4152B404C03E72939EDD6516056C61949C0B2691C031BC7A78F764B6CBBB33A7E9B2427E3D4F04F3DAFC3E246CF5519B64385DBBC4F7CC3FA7C3149BB3820B63D9719323A1297F5F7D5EA1863DA7B8549EFF7050B4BADC2581586165BD7ACBD1D98577D97AEDC56B7537545E7FDF3532E0DBF440A069A72EC206D060BB8C4EA68AAC417171C9343D6927B707A725D90E396CD3C7AC58649312F9E8C8338AEBFA5A1F903D44B79A8B42F6027A8F0902B868AE33B833999AEBEA627E3200876AD9A427DDDC3F93D59731D6F7946C82C94B7C349B23ADDB4D779F28AEBBD213034CEAE7B5F5B037DC931595D07E6669054A3FB68A219E28E9DA73779A0567CABCB0FEDC9023A1303F91CF1378116789CA13190C7BE64B1FB30F8B7847DB4E227CB010193E147C8F52442DDDE6FC5C11D22D4CC68A0A82A5AFA3EDA9D5745FAF2B122CE72CBB2963B813E2E5A890CCE89C67345C6A60C8111E818A49B89490E55D79C0683D140FD71439B9EF63EDA5D1AE0E5F276AC370058783C6756C05F8B7DC208B7BC4284DED144BFB94F8AA0EEC8791114A14D21B2D5D73AC91F072E74D52E42A986E13825364B001BA917604E27B3BC0BF3B15FFBCAAA32F498D8C818F7ACE74D1DDED881D7FCD1A3D8F05388940D07DF7BD6350B3F7A391B7C709EE455893A847BB1B6B0226F9B67A477A416DD987D7945C52810B59E78FE10ACFB4FE9156714125357DEBB30A6AE0A551B9C61067F7C7A71A91C7614880391169EE8EAA94C75350D618BAF08210BA6A9EDAA2B1F1F21BD22F66DBF22620138CA28A01EA7A30C8B3293DAF407D999BF0A9DFB094245D7D014328E1487B91D940465EBD09C12288D23AE379D4E9050350E72D233B25317F972C73D411B94E6D6AB565C6EF24FAB2B2E6F5B09875BDB7ECFF19A8F6E326CD350E11D0C0DB87E580A7290022F8D5560BCEF61BBF02069462D9D8516CA2B5E0EB6AE23D2E79C029FE9A0C5BB7862FE38E54F4A2C49C271F78F68B879D2E0852003C68E3819E68C4A69406B431C1661F9032A55CA0A21C9F80DB95C119EA7CE4C45766BD0C19D2C26EA020151361868F211588B92F98AE3941511F4D96EB0A384A7EAF4515AAEB6C782025C8458E4D2C1A263AE3E25B551855F2694FF51DC847B0D8D3376EC5F268FEEC97E7E42CC41F4B39A7D79D979AB006596A8BE670974ABCE103AE8B752736EA634EE13E115B2B95994C7B5DF7AF64F43CF8B8A052A086F29BF5C048578832E653BC421DB444CBFB7D5D47533823196D7398F132CBEE70BA640FBDF2ED92AE0058855321E7D6D4940F55A852C59AE3619C047F7E8F7A5985DEB606DD4FDAD0D904E2A3A8244C63B37138CBF0D19B580D29C3FCD1957DEEEE980A26D0763C89C01DD73772D8F2D29898D85EE88F9
qinv    = 062FD8B438856B18C54BD0F24DE770E366E3DF871F287B4B7438FB52FF3BE0CAD8BBCA03C34F0715949E3553E3F8AED6BCA53E7E3B96FEEF12C62D5FFA8B6EA3FDF2E148AD0F68DF81DF3E361DE9441ED9A9278E644E740D57E4F44F45C3D6C37B113EA193A9BAF7CE2ED80855B318A1F847106AE81ACF0C63DE7E7DD6D7E728437BA3A4A4FF47AF7824255308302C456F66D31121FD73ED5B071BC81CA53E7B84AC33BC6D4B78935B32D1A999A8949F9D08D044B63DD97956E57F75543EED903D447EA232A48F5BD108C48668E429376D24ADA32A3D68C89DFEDB926A121B783D047FD4B52893CFEE6F783C7BD6FFF550745E93D51A026905F39BDC385FF3292C03BA87C2B3CD13CB3B627A77BB34F445342972FCF244D5851D8DBFB6899E35E09E70A132F3015FC5C2181F3041289E7C6E80E6C66FC58FB570929E28F8E438F4EB101B0315352D3C7014BAD3E97A2256024CDD92FBCE49E3C4BC41953F424D0BFAEC40284EC134B4317634AECEA3A476F39BFEDD0A1E545FB7752600E30EEAC7CFD0141E69BE62879CE96BC76632AA0EF04AE2328F8555EACDA4E094C3196F43AAEBAA1FB1A66E3BA6EA15840FA5BD1A093DAFF5CDEE6046F5C7AC304387B839009C1674C117959B813A4F8EF1E91755EC21B0FF3246326661C8EAF1F033B36D5DD1C51CAE3084FE9644A09510BE78EBD4CC9964900517E796DE47B62E4E86F8BEE5115A195E0FDF3BF2E9CB11802C604C7697E60CC519B63ED233906EBB6994BFCD7F9D523E199494A237C4C4AC60BA4709556F21FC9C15B82023E67BC84AE375FFDC875FAA9B58AD37E74AA4836430888D78B3DF18A4772901D3FCE11AAE24D6EB01395B30FD91C004B0AFEA31B44E1989877805CA8CDCAF7601BD5B78ACA2298111FD369DC74C727A0AFE5F64DB2DD62665CBC028EB97A7CD56375B99860B0C0A4A3BEE108C294D722CF1749AACCB19D1E96297ED3681DD433B9C7FF307EEFA1AB12800EBA02F3A7C25DB1163037836BF52CACA91FC0977398668EB3095366748CA601A4AFD296DB475171091C5D7E452C55549B8657335F75C53D3EED76F4AD17F183D44C475839C82B9731A98D029EBEBECB18DC702CC3296F5E06609A2946DBCAFD0BC6BB507087A6816EF0CFF3D2F3F1B03B6B270567E866AA8171192EAACE8CC67198D87F3E1835B849E7E548D6136B2CB89BA530EE2DA2824D6C286CA4537A5D10FBE154D21766BE14A1CC37C8CAA3053F324AA108D1A5270C3EAA0768A76C4CF789A016CA40EAFCB5C764F854E678C560E7C5B98A80B1A9EC3F3BCF245438D4ACF580B5E03869C3EDE9BFE4E966966E791CC6210D11B49D592E5EA02928BC0383ABE1714D2C03A28C1000DC307506F07B2885FD2B3EE6CBAB414B6E96A3D1AAF531490DC585D44E59C05FCC7D5F069AA53441C4BF5E307C3A92914A20D40170545B8C93BB72BA35BDCDF22C0C0DB83F7E9CC30779118E051D1E56E2A110A916D45886D363D1CBC8DD8FA106EE20E8AFF3BE2F7BD40A870F175F789970FA7A063B68CDD7CB7DFFBFFEEAA1B397C0EB2CBF380C010158153DA039196A5F9FC12B3FE994EE785FA27E46008902A8F7C62A766E7E43503C9735BF4409E08393FE294AAB3D31DC9F3781092443F19D35B69052B228F74526A3BD385D49C2673F9829A6B1B23FD84FD078CA316AB4E743FBA1166EEA5EADDC8D8A9EF186D575B7B6D92E353204D69188FB239410BDBA00A3C2C73B74700CE58E63B8C020526

x       = new_rsa_calculate_other_by_pqe( hex( 20000 ), $e, $p, $q )
len     = hex( 20000 / 16 )
nn      = hmid( $x, hex( 0 * 0x$len ), hex( 2 * 0x$len ) )
dd      = hmid( $x, hex( 2 * 0x$len ), hex( 2 * 0x$len ) )
if $nn != $n
    
?
    
pause
endif
if $dd != $d
    
?
    
pause
endif

plain   = hdup( hex( 2 * 0x$len ), 7e )

xx      = rsa_pub_encode( 20000, $e, $n, $plain )
yy1     = rsa_crt_decode( 20000, $p, $q, $dp, $dq, $qinv, $xx )
if $yy1 != $plain
    
?
    
pause
endif
yy2     = rsa_nd_decode( 20000, $n, $d, $xx )
if $yy2 != $plain
    
?
    
pause
endif