aboutsummaryrefslogtreecommitdiffstats
path: root/src/tests
diff options
context:
space:
mode:
authorJack Lloyd <[email protected]>2016-02-21 11:44:50 -0500
committerJack Lloyd <[email protected]>2016-02-21 11:44:50 -0500
commit410474253fd491c21c4a69d1352325136416d675 (patch)
treea1f678e06a3cbdeabf0b826f2184ff5977d36478 /src/tests
parent30edf16ca6fabc22f47e10b18cb1fafb62ad5a82 (diff)
Add more tests for modular inverse
The result of fuzzing with AFL for a while, then running cmin on the result.
Diffstat (limited to 'src/tests')
-rw-r--r--src/tests/data/bn/invmod.vec468
-rw-r--r--src/tests/test_bigint.cpp11
2 files changed, 475 insertions, 4 deletions
diff --git a/src/tests/data/bn/invmod.vec b/src/tests/data/bn/invmod.vec
index f97049583..99900b30b 100644
--- a/src/tests/data/bn/invmod.vec
+++ b/src/tests/data/bn/invmod.vec
@@ -19,3 +19,471 @@ Input = 2
Modulus = 0x1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Output = 0x10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Input = 3
+Modulus = 8
+Output = 3
+
+Input = 46
+Modulus = 207
+Output = 0
+
+Input = 2
+Modulus = 2
+Output = 0
+
+Input = 0
+Modulus = 2
+Output = 0
+
+Input = 46
+Modulus = 46
+Output = 0
+
+Input = 1
+Modulus = 7
+Output = 1
+
+Input = 35
+Modulus = 118
+Output = 27
+
+Input = 37
+Modulus = 37
+Output = 0
+
+Input = 32
+Modulus = 247
+Output = 193
+
+Input = 3
+Modulus = 232
+Output = 155
+
+Input = 4
+Modulus = 49
+Output = 37
+
+Input = 13
+Modulus = 32
+Output = 5
+
+Input = 0
+Modulus = 128
+Output = 0
+
+Input = 9
+Modulus = 30
+Output = 0
+
+Input = 72
+Modulus = 209
+Output = 90
+
+Input = 128
+Modulus = 128
+Output = 0
+
+Input = 186
+Modulus = 196
+Output = 0
+
+Input = 244
+Modulus = 255
+Output = 139
+
+Input = 30
+Modulus = 4
+Output = 0
+
+Input = 137
+Modulus = 255
+Output = 188
+
+Input = 1
+Modulus = 2
+Output = 1
+
+Input = 4096
+Modulus = 4096
+Output = 0
+
+Input = 1024
+Modulus = 47680
+Output = 0
+
+Input = 2559
+Modulus = 32768
+Output = 30207
+
+Input = 1140
+Modulus = 30291
+Output = 0
+
+Input = 65407
+Modulus = 65535
+Output = 65023
+
+Input = 114
+Modulus = 58099
+Output = 45358
+
+Input = 32133
+Modulus = 63186
+Output = 0
+
+Input = 74872531
+Modulus = 81122052
+Output = 30251239
+
+Input = 138512891904
+Modulus = 274928246166
+Output = 0
+
+Input = 19155854819583
+Modulus = 132457537501314
+Output = 0
+
+Input = 321702216162685863
+Modulus = 14351210277666964779
+Output = 0
+
+Input = 5702088828586291675473844
+Modulus = 120659954327758016144051200
+Output = 0
+
+Input = 1381154561843139772565402723
+Modulus = 12938817738268038125359303680
+Output = 10831558789389249705155777867
+
+Input = 1381154561843139888563074147
+Modulus = 12938817738268038125359303680
+Output = 7483361061048530345279266123
+
+Input = 353575671723906404908937929663
+Modulus = 16379577634673855538078375747588
+Output = 5424925150363389436398213907807
+
+Input = 353575567831843781776743228351
+Modulus = 16379577634673855538078392516612
+Output = 14507030634574599508195160259031
+
+Input = 5932013609900586720416866717974463606
+Modulus = 157985104902351897599664760919956858813
+Output = 137384145053796253507992509511633346213
+
+Input = 5934358449498290280944615319455483461
+Modulus = 57179984906444735091851033144201922117
+Output = 0
+
+Input = 5934358449498290225604383098326828613
+Modulus = 57179984906444735091851033144201922117
+Output = 22697271185327139532492607909525549995
+
+Input = 5337771685919167754137485072704672701
+Modulus = 91798092946582745705792136535843674047
+Output = 59431059125715532913707527689895128976
+
+Input = 1518595342835455146359363196561036567315
+Modulus = 1519074226426779905418220868297910704851
+Output = 216491286795930710742743091756865590062
+
+Input = 1518595484134550200412310463687399691719
+Modulus = 17407187612354188700325529915223044339062
+Output = 1050533998594910199482332672766948626657
+
+Input = 388760448127871507875122837108613066470355
+Modulus = 1205204643250808245658101759109363337082125
+Output = 0
+
+Input = 1669713237405268049741347488485456028639902377366485
+Modulus = 1669713237405268049741347488485456051491443372861914
+Output = 0
+
+Input = 398637512861752899234215521190349285850377557036019453
+Modulus = 16913607322884231003972700698661394372993528197172294202
+Output = 0
+
+Input = 427446633136819657617260277185660440274378810199477422
+Modulus = 22277341715914872633639938175673308140803023434155684410
+Output = 0
+
+Input = 427446633136819657617260277185660440274378810199477422
+Modulus = 22287254121160404973555300255783629234241223241182435826
+Output = 0
+
+Input = 501745196544693333667845974244235246008943272210392616196
+Modulus = 2904735607707890026261611817935915992469970191014850947972
+Output = 0
+
+Input = 109426338083025832350018630959529072710240976222272457902
+Modulus = 5705537055017063673485368640671312931563284105316529730301
+Output = 5695753835642879025591354374573295050013429342942614892889
+
+Input = 109426338083025832350018630959529072710240976222004022446
+Modulus = 5705537055017063673230156865480609083965753149742703571514
+Output = 0
+
+Input = 109426338083025832350018630901655375873649448370738400256
+Modulus = 4288754839891794986644564190212897590922742990432574752754
+Output = 0
+
+Input = 109426338083025832350018630901655375873649448370746788864
+Modulus = 4288754839891794986644564190212897590922742990431244999154
+Output = 0
+
+Input = 429747653614002181966414089209712982200249648235674175114240
+Modulus = 1097921239012299516581200498361588539641167746809967002778365
+Output = 0
+
+Input = 128446770315441505302296835548258594011134896122159507189900
+Modulus = 1097921239012299516581008432694501783276222205555137183216381
+Output = 219986048331980802027209140807303911225451864530554188903277
+
+Input = 447584410955856452287246880854680494947482540748015423869816571904
+Modulus = 18419847922728001223206182587888235679730764835068434316526345646845
+Output = 16386496642885036091412630273282093035304875618431351485989854789299
+
+Input = 120315531212506540057801504581627182706278848112115921099023419126567
+Modulus = 4917144330588045510247020374629314082052158446827629926348911518083253
+Output = 3030994927256014025585180874866267837614610672488319046753359416923727
+
+Input = 120315531212506540151337609370804969471314677405958034357003101877031
+Modulus = 4917144330588045510247020374629314082052158446827629926348911518083253
+Output = 1978340046947507049724294929115365995519252306444332739172815061269905
+
+Input = 30800775689904259978366003646549413560882720299856084749809937678542774
+Modulus = 683805059752202575388582136495557799968573023717901967390987274718734517
+Output = 240370388046193083071523850481338147926965153332870744069927460655307604
+
+Input = 30800775689904259978366003646549413560882720299853494522153407396128694
+Modulus = 683805059752202575388582136495557799968573023717901967390987274718734517
+Output = 0
+
+Input = 2018553874361367298145675409666425880684412740908097248429230021370327373523
+Modulus = 6257666956854245571156623954291389062506272145414502920943420771994563664370
+Output = 0
+
+Input = 516749791828359856733133733624844442703531546106337463854768039123921209956051
+Modulus = 1601962740954792178511279624863457282526760780831042080841950423849414971486890
+Output = 230856667976269565713982212321537105076636815227442434506602290800184534213641
+
+Input = 516749791836510028325292904874605025455209661672472895597882885470803807621901
+Modulus = 24746388702611539381672292566441357946089217895509840464189771861463679375110909
+Output = 17482785185421985832903984836155740711949111142021976010578203746370663639655032
+
+Input = 516575657702705444731828386286990358576255653930522141564916289533307771382064
+Modulus = 603181592709262078391140809535865498758742038698079163361470567680606867977769
+Output = 105419531729149402170799132522495848121272857883374311753321274212623545604949
+
+Input = 132288324028608818260037095126080946034233855342093709875606820327738110818023086
+Modulus = 6897521130957919784109871897567803339329188714187867447487427052852736664272961540
+Output = 0
+
+Input = 132288324028608818256735679253395542641946101624833780903489523173168169220732590
+Modulus = 6897521130957919784109871897567803339306887968988951458563421952842033304992546820
+Output = 0
+
+Input = 33865810951323857474248200236739055225453272871677899054758364817644205578097438440
+Modulus = 1336761842089086518109402297011132364678426286505650097463614087821831304082721080409
+Output = 680666261615799093246158924451816069866890139937374621105160904708555004808872202064
+
+Input = 2219429786505960323453386512955361468569996645477400738428081850052714778763400741660596
+Modulus = 74644623621998485568522014429595573410825194841129784518044354291189647009980996806247513
+Output = 44980859362445889697874871437022415086249938228081799228533960589115470984822921835420815
+
+Input = 2219429812369474322430006541114271756689646905654694692874967400462416146465741367015669
+Modulus = 118092432322492914932166433872615993294711576417113721780743884693098072952657666087829496
+Output = 0
+
+Input = 2219429812369474322430006541114271756689646905654694692874967400462416146465741367015669
+Modulus = 118092432322492914932166433872615993486273519025328051004054323025225064930124423195246584
+Output = 45554954757410401208183175617376407821900801172665808021586586851454842588833978502168381
+
+Input = 2440288857295708594745377736385929488579489395798787318892313085465840721878121394228126672333164055
+Modulus = 104970984129146665904184575634746492964433139288576813336730565768174676479178423783477659219299550507
+Output = 14671453223764321804593410809299055027442412830061447237871472648065404002626509643617206325928242157
+
+Input = 2440288857295708594743071234232271526631042852992193925231356433333781999635808984537840067696377294
+Modulus = 12986734574256797728830108804499551338924248129086953933619255599680620873522117850067270334882334277
+Output = 6554368278035291249140934335351561402189972344559266201163693625171000098909390791642663612309462516
+
+Input = 624713947467701400254226235682127135775643248943076541731739846015600641875659168554387910069460385230
+Modulus = 3324604051009740218580507853960719378088499442694176694510244026097376363106040264407829236736340673835
+Output = 0
+
+Input = 624713947467701400260173945111908685932360782177717690976575045326828454951882043159509843243856609813
+Modulus = 7776049929827457451467496338135650250962349341177051611687883759673088834047281293954394577019598147015
+Output = 895035322328725504836539011082424952178122994196309825247180108627498779687317427001231304898218276652
+
+Input = 174344864248944721489958363894350825562866724078548959857881058699744850016662729466417206099821693688531
+Modulus = 7661023828498798868556002291749556932049635612657205994496375464376857552595554625487435582985529312359172
+Output = 5806684388544048054125065739585226489316822423636709060201946836231324705392016785107101386413247098745119
+
+Input = 40941253261243278965931697730351927594382506715029209939426764755460358380477075894159326884619186448292356
+Modulus = 1086765801118506491796991686050760953569583839419629831222695852915818100252554264051906135666050956354901366
+Output = 0
+
+Input = 40941253738340902553376751414201639531564244122970842592205881780688821929846131679632199139828789928988117
+Modulus = 1827457991855811955608734510184894757331810307756991048284972553624554653552789759060220911277882659102730166
+Output = 1331087776473769984814382583670464156187083826442474849062893066109367982063099320751011417022384993153415825
+
+Input = 10480960948068504396786706826959925758002177063712953571288012560541553307760359175828116110276727516707361725
+Modulus = 162193201041305370619623369415020258472052982947477384875437355642168759791173509808267455016478387343904290061
+Output = 125488009689869893055514052704882236567346149973601535779502954396698947032027865786265777615854760770492993503
+
+Input = 10480960941706184992684052656026024263059955258137042998736844699782705389874823178306919324842189179921022277
+Modulus = 36800733063304504947530639673895045066268010254690970457128754056241144976366275410605967734997426817889804553
+Output = 33991242570706707667236447768169953772356195464917699049157480345156600208304903373255110451365189326397706940
+
+Input = 10480960948068504396786706826959925758002177063712953571000669646629199146818169108237433123940798550253134611
+Modulus = 444508115338009329899869791332552066699503593957693859395799275928077740507526172912896740812150716216612361525
+Output = 229422040019717816724385415959976143888072276766483681458489278087868059152678335062896497134334948877411270716
+
+Input = 2683125973728839530410853301807034138280004443466549776569040186904529414653869226507070116307346296826701462843
+Modulus = 9420987747486698640753167661409834276396286467108085298166099145382701362524685042206451251623166080499314590809
+Output = 0
+
+Input = 2683123638565830462460506169221826092145216215896529855147200521854078452067928158614878658280170139562030818067
+Modulus = 113794077526530388454366666581133329075072913151423281214760827202832039292901247814592593477524028188928540751117
+Output = 3181486834656041655145545362874773634212349894644732034073302286025476172065758951953852478418188291211797486275
+
+Input = 175841343814293227463337396549876322236244208719130555573598557313362842128874981016665540944889785822973085152081626
+Modulus = 175841345716725740901266386006418580327847298194448328832436829433160509229071929085803614947045047568175391540184369
+Output = 103159671532181294917126266681690917401639083406905320864457007930136703451131595164838824937123885993273545750347887
+
+Input = 12670704167654052015845325422070891900662783414983596587592474314149877175763413155061623761411194025613895820745242772234057580726020
+Modulus = 606221634145623926473919998643879129750919828439756826073755496676782745487925171120694260293421283243727657829432340823463542485798589
+Output = 325119450519985844425909572170305791701047266400642711471239149199438072162899305362050335737076107753276444743032360627349555423787931
+
+Input = 12670704167654052015845325422070891900662783414984719693045792313769002489678295501929526402863659914306935770940769577844214769043204
+Modulus = 606221634145623926473919998643879129750919828439756826073755496676782745487925171120694260293421283243727657829432340823463542485798589
+Output = 162543323075020638720519638197497742575019900954984468715810309041120093594867545829236446866300288119285790744320542764125135244156981
+
+Input = 12670704167654052015965536579770034324541704455061660429923794460460341071193665713413983606963240760597816072507527959641663504516214
+Modulus = 337454135939991025440974553646717829281524882790617748764239353742205007300592705472124431326524609819324355028428975161808528390037849
+Output = 191711558709124308853092629503802489439994943269065022875433763199809530621552208486996585886323969976100835646879332044251700256326309
+
+Input = 12670704167654052015965536579770034324541704455061660429923794460460341071193665713413983606963240760602067816258079825863938137261174
+Modulus = 337454135939991025440974553646717829281524882790617748764239353742205007300592705472124431326524609819324355028428975161808528390037849
+Output = 163693130905945285938988905228226250828273725899357147098175833065878084985776552043008740885736315718974779741438948154794721438148333
+
+Input = 12670702989237218183341572262206915647533368853924924421167416877400766157633821648558382651553829793446525243175304655977987577597629
+Modulus = 167687398787919443409866707360476378449752341914087357427971443623903047452096448980661191233382697808852666283644507610837240047040000
+Output = 26198363272887968265940405540523842553509526493465790830756895829780101651098509764093686156106754698233652421236390724215879994168469
+
+Input = 12670704167654052015965536570667711692322764443998551364056934060872219934893776122673632570190222085724697272254755827205369260066564
+Modulus = 606221637803025680493984397679069247334976533760816329195168119804134985845650008885036440742774482985029824942508972670651152886527301
+Output = 297930981346508308077060079178174886176222582315143236987824758631343982491425412096700368075441527214462789116899500434073448626618530
+
+Input = 12670704167654052015965538056854719708558076267706352788692116955286879648768407539809619705633212182437317125252278993694382910550276
+Modulus = 336342546698155082654269384583033370776885134193636605638177346446051485806771236878044696175041955889906264146135604515316441509737229
+Output = 29710044402085162860891499731695053324316818348984827944724119676181685719272546131255090112316139702050062657510519937889997921906159
+
+Input = 3243699965244727854935442499124970405768542426604780651818858720614596136354258342030945958797780427122310462252877991930364819864993083
+Modulus = 11389275204242166570296397818219070268029184759653233506843010684964215946998864293695607841302097194516968066020196084347787198871240922
+Output = 483591083989379416679317068734053688860281901954527928305263453528993668286833500291846735116390084353318216960908267093197048470036743
+
+Input = 3243700266919437316087177360191581473604369293032148978313282628288335262565236947493270196986858243706779730869259692618751754378228181
+Modulus = 3243700266919437316087177362090931103399581068991671456033441152428988454889605507406578036965997831201809880401632845937544163420585976
+Output = 449060048386417315556394965326128672171631836284095117350216923675237728024398263909109484579299678269625591699229336450872865194323637
+
+Input = 3243700266919437316087177339054698228639870242026823607209249381907192322390358111127651453196977017675303739695968707155833427090813397
+Modulus = 3243700266919437316087177362090931103399581590472881397645358650534558602876696054665220994381953359355747865910186032576092817744795392
+Output = 0
+
+Input = 3243700266919437316087177360191581473604369293032148978313282628288335262565236947493270196986858243706779730869259692618751754378228181
+Modulus = 3243700266919437316087177362090931103399581068991671456016920565812462370075886825489312215902273196503792806639937478375291357746364607
+Output = 3157041632843012029465702023283791371264148713411255488074811690511564911257807788682362419224137866030050138559022401908183637088122824
+
+Input = 212579143170064736106724466048066242405299697436791465656542089487055881314661687430341292684130268725793673549873700992745674410838458676835
+Modulus = 844997306004696299163250002830100139030348530362999974488110411361897392393441731673049146104379650124523380126570415543028845994017541884951
+Output = 90042235909796313403246556199691336938493895751400881926820715389171546316664666331065524557220306769957141954034246936126593423009778492097
+
+Input = 212579140692832243947089255477514437600310826182873368129100406886016368038146703549104757192658331666470621286035437743508249620000677901269
+Modulus = 212579140692832243947089255601991260792394944937438180541524906201085533885293318995267565381371376206072565375985272109043219755131134277633
+Output = 0
+
+Input = 54420254956103292083468584863399439491211255648989633569523402232939245802500760498455401325139167651579119489900155965029176878846320571736851
+Modulus = 54420260603921895262307603061793317526979980494932414591353666780735468654003386549760438780834180108541862023256313090099416246305693809014390
+Output = 0
+
+Input = 54420254956103292083468584863399439491211255648989633569523402232939245802500760498455401325210906825850012340319437994540483733755046361000753
+Modulus = 256336217163667176926876972997634287983241265237416297039263798452300641972142161771275190851121822113753466891563172055516236664423544493913672
+Output = 249639626948404897201823460023898793153629336460540363030077448597026689603245693346932367321470555276067421656053664922053243876390131473446873
+
+Input = 54420254956103292083468584863399439491186482296317701382448707730966199154858999157632326082911261173810376293488399909176234857795870840810288
+Modulus = 256336217163667176926876972997634287983241265237416297039265741121192867701221637856880084641447670360341817253710334094427270183998162469336648
+Output = 0
+
+Input = 13931585268762442773367957725030256509743739467857331553906869179127346983643903784353875477225282860495475568307972621209572000974690624264170288
+Modulus = 65622071593898797293280505087394377723709763900778572042052029727025374131512739291361301668210603612247505216949845528173381167103529592150181892
+Output = 0
+
+Input = 13931585268762442773367957725030256509743739467856013249408136742435868806184627263908144120527890863864023878565644844972566761885223327351139120
+Modulus = 65622071593898797293280505087394377723709763900778572042052029727025374131512739291361301668210603612247505216949845528173381167103529592150181892
+Output = 0
+
+Input = 13931585268762442773367957725030256509743739467857331553906869179127346983643903784353875477225282860495475568307972621209572000974690624264168240
+Modulus = 65622071593898797293280505087394377723709763900778572042052029727025374131512739291361301668210603612247505216949845528173381167103529592150181892
+Output = 0
+
+Input = 13931585268762442773367957725030256509750081446141346193797990971632446925440194687604582739253992147417603159121776126602363835841291868416192789
+Modulus = 16730121539317871172342595004898637565235943632429535746364480423976404391809513119844122219725846478363671751446058715749646063015087460587030532
+Output = 8368839406516452903756209946387051915318092352613260941427082358204889953591454325300261134875605405619265486617635344461020949591704829610078857
+
+Input = 13931585268762442773367957725030256509743739467856013249408136742406226031339874317879709948365666759453586762491240860578465620379197566163315504
+Modulus = 65622071593898797293280505087394377723709763900778572042052029727025374131512739291361301668210603612247505216949845528173381167103529592150181892
+Output = 0
+
+Input = 13931585268762442773367957725030256509743739467856013249408136742406226031339874317879709948365666759453586762491240860578465620379197566163315504
+Modulus = 66678074992355212492972477291024620123383756538597841786987539665612484157508055762732736048062074482866560403796977768634854512109825703485523972
+Output = 0
+
+Input = 13931585268762442773367957725030256509743739467856013216815561121084091425885398337464686646455607178915816884525004809350238618063087562247596848
+Modulus = 65622071593898797293280505087394377723709466380015330877919971303570420327685353316309565046385115573376824350924295230220650294110007404242875976
+Output = 0
+
+Input = 3565274158390580065942252346975669440938570360129990072320275485940842272191709980043975960127547030171850555745080176460848825984881566457811907367
+Modulus = 145688282393878974430665689139064885117858316327080109277467955124143504677560965946882000623252634720746281075244998531385210785658090895818056194564
+Output = 43438737258420936317490294961909303833113784064184692921563182443635630254111925849114347993545550274938073634834329985553660946703546560573655654007
+
+Input = 912710184547988496881216600825771376880274012193277458513990524400855621681077754891257845792652039723993742270740525173977299452129681013199848286134
+Modulus = 15713824771687342809698206255786485333683596080267863418114080029798682342046700396218545307354345786371389163105225982679575627140243491932139431789762
+Output = 0
+
+Input = 233733237014399300369188485549408548707200621216984258931687413984830484753821051332657625023527910057464522415960516664867757108351270781191467590883202
+Modulus = 10054298972755544659485066725967268548008616514652163326495271260864146681036310799605073854973249929469361057842044668698454869002271645012663132873907133
+Output = 620882166792703801524880332577262430527517439863282425521418541021955396481806289566340355534315491854438786044236069081190778891233315424075315757454073
+
+Input = 59835708675686221045238484644891074710234144677552744580679785722661736462389632942830849948755169642469193170273341697814434896098588685326909548863140963
+Modulus = 560548058342384653516138841752073907202772434357101785120224583491028267040408881144439370757006310834756188600910656519013411465381139862670982471083144537
+Output = 0
+
+Input = 59835708675686221045238484644891074710234144677552744580679785722661736462389632942830849948755169642469193170273341697814434896098588685326909548863140963
+Modulus = 560548058342384653516138841752073907202772434375890125782415249314144111814723577363444831148272869800414516373168328719930279013090731849749132095338624345
+Output = 288023766490940907070774297709765545835695374314184667906398931065048827967212438748434110695077482481115046757153955195126855193182401539977598570719366082
+
+Input = 59835708675686221045238484644891074710234144677552744580679785722661736462389632942830849948755169642469193170273341697814434896098588685326909548863133620
+Modulus = 1329562625917217052910625892172972805320468046060354367470357100999393164351121456188872082076817065193809999859517335386441451745128184853985391399246542169
+Output = 381713838721853045446210203844423377670324724248927516157282410794719510877064196966980704814908957683956798786487518153099133074885711884655550527759550430
+
+Input = 59835708675686221045238484644891074710234144677552744580679785722661736462389632942830849948755169423386450887295030158247968377858059093320263472532799412
+Modulus = 1329562625917217052910625892172972805320468046060354373242758460207716468145407747895356021810542995243011420322184426286549030536919355502285489776879994037
+Output = 429120447050565987746412325409285848633834383862848647673075659002103958346518394681058275344884177230216756280389240460261076822349464793777793710991503298
+
+Input = 1003876608965061678699711946147886654583641732725152055443736136924435209627532864239270914864015791089404522769082846488734344028870871147591294567957336933874447
+Modulus = 38559908546177557097721887170920227103445446555000857278913354277871570496513672104938789008277024176040539351265087009160346781667312151853605764324217740094077027
+Output = 22021865938391910485941892422896656563178490407870702806681467808543133124575786358977213033733395001560210688051383463281574121289968876209220866045352476996915155
+
+Input = 1003876608965061678699711946147886654583641732725152055443736136924435209627532864239270914864015791089404522769082846488734344028870871147591257674469189514771215
+Modulus = 38559908546177557097721887170920227103445446555000857278913354277871570496448935788684380892123429716176828299867412807353949428457861805829557796944238651899902051
+Output = 14368357982601202000692544778087762210345344180879650981792676369928984774193668445375836726390068568445200182203560018327610606626783407610687993223051460237027758
+
+Input = 256992387993922882115519242002267204163958280694902854777438773165028812741820300742384101620467227297951260702776745365693102268609333941403372929142489383748076291
+Modulus = 3105560673298506328472089385746585896322911006740772751605160752499227148385424850362140158165019680645739648726058090243814223511639161631852729287604717869259565828
+Output = 2322484593360248972803085811686365806060063797313230509497970163285203519904646342173323688226147654544918783691327115436052292182385106099615339567513136063879840431
+
+Input = 65790051326444257821572925952580404270899173102825542663868894627884582709571518677209748416019817305674876843604308670298295897660589296995641401495105646770364032950
+Modulus = 1460598742727828605836860681156746006166272494387112693708892744343548055514972863039476201659720247220048664250204314648520085411164461712526657028588699682983099362771
+Output = 370134468809235355809931021496418560257927761651782631431723120822241707286126622619231228275210678415132318220494260963802381448709723310690465171935975287188943190781
+
diff --git a/src/tests/test_bigint.cpp b/src/tests/test_bigint.cpp
index 1a615c374..95ce8be08 100644
--- a/src/tests/test_bigint.cpp
+++ b/src/tests/test_bigint.cpp
@@ -453,15 +453,18 @@ class BigInt_InvMod_Test : public Text_Based_Test
if(mod.is_odd())
{
- result.test_eq("normalized_montgomery_inverse",
- normalized_montgomery_inverse(a, mod),
- expected);
-
result.test_eq("ct_inverse_odd_modulus",
ct_inverse_mod_odd_modulus(a, mod),
expected);
}
+ if(mod.is_odd() && a_inv != 0)
+ {
+ result.test_eq("normalized_montgomery_inverse",
+ normalized_montgomery_inverse(a, mod),
+ expected);
+ }
+
return result;
}
};