aboutsummaryrefslogtreecommitdiff
path: root/java/com/google/security/wycheproof/testcases/BigIntegerTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/google/security/wycheproof/testcases/BigIntegerTest.java')
-rw-r--r--java/com/google/security/wycheproof/testcases/BigIntegerTest.java456
1 files changed, 456 insertions, 0 deletions
diff --git a/java/com/google/security/wycheproof/testcases/BigIntegerTest.java b/java/com/google/security/wycheproof/testcases/BigIntegerTest.java
new file mode 100644
index 0000000..8173a89
--- /dev/null
+++ b/java/com/google/security/wycheproof/testcases/BigIntegerTest.java
@@ -0,0 +1,456 @@
+/**
+ * @license
+ * Copyright 2016 Google Inc. All rights reserved.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.security.wycheproof;
+
+import java.math.BigInteger;
+import junit.framework.TestCase;
+
+/**
+ * Test BigInteger class.
+ *
+ * <p>This unit tests focuses on checking security relevant properties.
+ */
+public class BigIntegerTest extends TestCase {
+ public static final BigInteger[] NONPRIMES =
+ new BigInteger[] {
+ // small non prime integers
+ new BigInteger("-1"),
+ new BigInteger("0"),
+ new BigInteger("1"),
+ // If p is prime then the Mersenne number 2^p-1 is pseudoprime for base 2.
+ new BigInteger("147573952589676412927"),
+ new BigInteger("2361183241434822606847"),
+ // pseudoprime squares derived from Wiefrich primes
+ new BigInteger("1194649"),
+ new BigInteger("12327121"),
+ // G. Jaeschke: "On strong pseudoprimes to several bases", Math o. comp. v.61, p 915-926
+ new BigInteger("2152302898747"),
+ new BigInteger("3474749660383"),
+ new BigInteger("341550071728321"),
+ new BigInteger("41234316135705689041"),
+ new BigInteger("1553360566073143205541002401"),
+ new BigInteger("56897193526942024370326972321"),
+ // A list of strong pseudoprimes to 12 or more bases from
+ // https://arxiv.org/pdf/1509.00864v1.pdf
+ new BigInteger("360681321802296925566181"),
+ new BigInteger("164280218643672633986221"),
+ new BigInteger("318665857834031151167461"),
+ new BigInteger("7395010240794120709381"),
+ new BigInteger("2995741773170734841812261"),
+ new BigInteger("667636712015520329618581"),
+ new BigInteger("3317044064679887385961981"),
+ new BigInteger("3110269097300703345712981"),
+ new BigInteger("552727880697763694556181"),
+ new BigInteger("3404730287403079539471001"),
+ // Richarg G.E. Pinch, "Some primality testing algorithms"
+ // Some composites that passed Maple V's primality test.
+ new BigInteger("10710604680091"),
+ new BigInteger("4498414682539051"),
+ new BigInteger("6830509209595831"),
+ // Composites that passed the primality test of Mathematica 2.0
+ new BigInteger("38200901201"),
+ new BigInteger("6646915915638769"),
+ // Composites that passed Axioms primality tests
+ new BigInteger("168790877523676911809192454171451"),
+ new BigInteger("68528663395046912244223605902738356719751082784386681071"),
+ // A composite q that was acceptied by Gnu Crypto. p = 2*q + 1 is prime and could have been
+ // used to break the SRP with that library.
+ // http://www.iacr.org/archive/pkc2005/33860010/33860010.pdf
+ new BigInteger(
+ "2338274894573145273314679073561004052325493799717332496500873981"
+ + "9154269566267911565762670147721173495706686483597956042863296855"
+ + "8985491020031718032728786934761830612407539788738389834804112831"
+ + "0484933712924414264511799715503596253054638290097305254378560604"
+ + "3457282155730383806702845548017315217454390994052035233808454053"
+ + "2209678251"),
+ // I. Damgard, P. Landrock, and C. Pomerance. "Average case error estimates for the strong
+ // probable prime test." Math. of Comp. v.61 (203), pp. 177-194.
+ //
+ // This paper gives bounds for the number of bases necessary to distinguish composites from
+ // primes assuming that the tested integer has been chosen at random.
+ //
+ // The result is sometimes misinterpreted and used for pseudo primality tests. There the
+ // assumption of the paper may not be valid, especially if the integer to test has been
+ // chosen by a potentially malicious party. The following pseudoprimes are 1024 to 1280 bits
+ // long, pass the MR test for about 1/4 of all bases. They may expose pseudo primality tests
+ // that misinterpret the paper above.
+ new BigInteger(
+ "1730626114143993906582329178627391355248485443639984363030847275"
+ + "1308542667309368405802823431259718338553667079600118481458180717"
+ + "8685660312964257923307841168376622412972295432300191118906455596"
+ + "0636099366430317210651098229261736987868487865820945209431391380"
+ + "09108180649097618810676094425505547347369635059151651"),
+ new BigInteger(
+ "1360998858923994584770803056737393786894832450662215840614559215"
+ + "7078401469699701619693552331616875038702785662417391573713804038"
+ + "4334162971247398689854706029275431407028615888533012918610480990"
+ + "0223861487963796923928503972465761214360888693859314270808955367"
+ + "40913457414488449790876563256100025424908640036566991"),
+ new BigInteger(
+ "3166883756083864374213797577792765404121225450334428749136082272"
+ + "6277047033553982548405648549530365358167591776542577633638251648"
+ + "4708794514891794859629545011811469601460428778510574606216627610"
+ + "9305946545256861710197652701722202600572822026157108510694466031"
+ + "21873496655525294839125742517721479483987924741221051"),
+ new BigInteger(
+ "1867856940026786421328012256561867196437042470176831233408635728"
+ + "4012048133274069029642553787088950310027377534718962029124718226"
+ + "6051117402306961193255486702389001315623336948708913938663766675"
+ + "8226042898352219886123870222547007370332879734207273564946511954"
+ + "31833673259400609717994958747847898007198993092012403"),
+ new BigInteger(
+ "1796390661263009677994016718416108866609292079197277387452323006"
+ + "0275054640418696223480642324316099214952402651731083265854610369"
+ + "8224730515713772933976457906751697355710699183284927973990745341"
+ + "2311585789546147810071014069499060003398982340466066800822746698"
+ + "64309065127941774208780103317444828873858305613764441"),
+ new BigInteger(
+ "1971945240855615239359385779848543278459852521629467703761094672"
+ + "8118959477624582999696057042356627216821194209090396598966531204"
+ + "6718418693934025583647341695134065566474352554207810854787929284"
+ + "0150420997586371167811999782663434687606795518115913678131471778"
+ + "75984898571603525952885934025286780854976730638309011"),
+ new BigInteger(
+ "3150008132483461686934076250569912489352161839369648385736587811"
+ + "5997183822673267428826594197361084397177321281419482762875475084"
+ + "9549588421903702315436565970387119142993552663715551586581960248"
+ + "0385985798377103010348982470471826679560834315129605222126122792"
+ + "66245495948831504762364224662571600318327270033084451"),
+ new BigInteger(
+ "1708946102366142320715649564941267111465045510329061281476212740"
+ + "3257341007679575909346478379354045686824680545379443269343860874"
+ + "7656833753674500442989626468892341565281803639470271121897646438"
+ + "0297951614184327979794615696929197488480659590917557764806142256"
+ + "64177795195470929762281195447906351417368682849843661"),
+ new BigInteger(
+ "3440003701993474165051634746793659123122285886429390887874425798"
+ + "0539628797086399700050400512078053335053587477375429177907276765"
+ + "7299212000552180980839328379536622696237474649639004862671352175"
+ + "9289352494669383679530748723706821659664185661303953233767365167"
+ + "67872755699135674189217223109386132423577475778316621"),
+ new BigInteger(
+ "1384489093437226718803143517408309162781203263729355872818628349"
+ + "4469526441585078582037579393159945688413133085030944516305313234"
+ + "8118439725196722488178936032989162127096990828542718648126854836"
+ + "3215014994571003679167792328172868632219526006267874696849394364"
+ + "51238457213158274397103569820623680840515654121967511"),
+ new BigInteger(
+ "3164393868232068713466361644489248900506521258778648162638744470"
+ + "1911965299134147189251276735683301303659631352068168884603764242"
+ + "2058303711027020977731971469313828021385806157441077657252831199"
+ + "5151267291454080409585783805054468065763411635886980943812129069"
+ + "12979884469786023782783106107762632814558326808787771"),
+ new BigInteger(
+ "3429610981008641614862240834440649965306153336087134811684334214"
+ + "2781784784880823158748073620472850986640780368357758806487624898"
+ + "6627917970721407574366482474956464008840562218539437088991213443"
+ + "6865812444686702307687466249240837612849694711488568460832793683"
+ + "75653516879275492605255161494494045951397742913942521"),
+ new BigInteger(
+ "1452625971469501984029833170297844688666257429198467445330023676"
+ + "9656278238192507513913993052034672663086092503841752084104847874"
+ + "8173408690100803386628315407260460724324957380860416531476612359"
+ + "3906755149555321240901275978836270398698785709389076413509994529"
+ + "42901485886289548101644664410043634050840333618736241"),
+ new BigInteger(
+ "1038759703926769528247935492263828939187707228977771863002037516"
+ + "6447956205097712397228992931571755867770661683705025240420111189"
+ + "2868394359927108413461144788316226799790655169187714036057483534"
+ + "1379449940364129845302840193911613461736295410032863048528135257"
+ + "04436628490382188950208123780350213139500089456366841"),
+ new BigInteger(
+ "2092626848347087607813788288260128832160456227715887480495928337"
+ + "8143090879636401536763351823849725734769339835456348322174433133"
+ + "2528919261931329808331753456631473557050588173643619875493912344"
+ + "2621229276297788264420214803881217267094948976676445054939538411"
+ + "22580436721054077839958796624587867034849970594728503"),
+ new BigInteger(
+ "2599619740922490310102276030628575944314398371981276430688469612"
+ + "6677200542107317525516057185980658562393307608335402672015071146"
+ + "4375869967746325500371685760342898099183114419807958654613613854"
+ + "3992594086574371567802232690430810966098771990068625112489903295"
+ + "89067604336669355585402887916288037943709029191674911"),
+ new BigInteger(
+ "1484944124031033226177904474729672080414277081288126930486713099"
+ + "2951571588154552341076434413035940622712601649739964234772603407"
+ + "4857469854866669198948655053082186111410005989963123962723450119"
+ + "6642285521712848015932226566546835102733706632115364632204156914"
+ + "64644614536183219912321808854090915103775109695786903"),
+ new BigInteger(
+ "1989518237873611249304118136102198299910749751063921465712157675"
+ + "0160983808717982713586255483659294934004326549705203383719900307"
+ + "1263871954417468537542759843054899935687365194283002403584007149"
+ + "4878371117610681917576307737065411378178051858121032451282900716"
+ + "73542006653340382017735899123084476453857081318545991"),
+ new BigInteger(
+ "1001516549472529960430483041632117547467775871427023066924341669"
+ + "8403875533009883195522874469432253701609651260735835128759135299"
+ + "5655554893223580483857764100115214746205606713424344869011314868"
+ + "3107942731565140938612794494135227597999675233998980692687287393"
+ + "67463341929936509718884001903262839905032784262429503"),
+ new BigInteger(
+ "9523120659259647017050060990584944204556454726505878376759616021"
+ + "0162649328723702952067039028722189901551617226203049071432575686"
+ + "9121080710327716161595367835528315683397536615084723082551568364"
+ + "5739952184995573677453019127607472426963971562388390300785220049"
+ + "6655144350028488056721467755918814393298596327869403"),
+ new BigInteger(
+ "1132692896131390459872218381686704761578367301590229517271338668"
+ + "7180351798454882497438382954425835621126393661367213143371283272"
+ + "0317909560575328664237540188143415517690966913820407105917871661"
+ + "6365405171372246705778112163771743546945868623307467307997875571"
+ + "40869529264839386342569691698111927128704157615097153"),
+ new BigInteger(
+ "1468478445343635885853097900396288249751127795088868633754583040"
+ + "9902362001013473990040942210829761549194134324343879441927807081"
+ + "4832779046634885071582835688508933384516245429006116427382617949"
+ + "0797131644177507421862332328509904031871287120929769029086074503"
+ + "38866991708762791875618755240139448209180903665732503"),
+ new BigInteger(
+ "3584128102219288461651881096063603237206550481422480899564693370"
+ + "6989198816192527918220789937223699304075118319904981106473056074"
+ + "6022073963857677172123650694187762839204698560127083582857191356"
+ + "7619601857134928125369766912580367127840531257344393938629885107"
+ + "16841734490107828355376447675347185589367615046902903"),
+ new BigInteger(
+ "1364132540730201251194341844655148002850736352953819312409033451"
+ + "0581806956034928961765696532883678319811153534823893271895441595"
+ + "1560405730847235775035340408484490592989244418679611824558459897"
+ + "3970103405588145228028549820125837425523682281669049087481368021"
+ + "33702260393866732616878693744975284760231993354960641"),
+ new BigInteger(
+ "1201213090774136737579735845388953400530787071160074364126728551"
+ + "5147303301856817241515212573079940841340044269783294804816431383"
+ + "8284868252529547559069691488487393115675459439240223181642866729"
+ + "3429931964973711015111163544551414299071832349845971998375812575"
+ + "43510797169400923829329952407436122292964382266031253"),
+ new BigInteger(
+ "2749611624987217008377958765718501619519235049877079452181305657"
+ + "4724564026272242180811435338643866876903591496649439319889570905"
+ + "0358277453956447636555409300854018401232502616530331143658908539"
+ + "1682266093367017969369633046927346949982338985082398103545735993"
+ + "26268702707614772584950389057955691219494031838859791"),
+ new BigInteger(
+ "2472982114742145360236684931488791833991329788857529670921519821"
+ + "2275589064185672494327017904494686810840150314271250166999768972"
+ + "5488277075239138647902134463451436706674384070937644414378922408"
+ + "3974240802538174272534726968041801996779685771019246098603577098"
+ + "48139330190576017582503777009836399771498662905893541"),
+ new BigInteger(
+ "1865347188865809981733701115448160790425846704558108501171803277"
+ + "4616363375301457541345495992357828826645510919897778446537615423"
+ + "0882378024111971510810465276396395657415178370245114122816237302"
+ + "3283933030997110906700611097744954222271394790237582780817507949"
+ + "50528224900273599212004329531461848157373189908642761"),
+ new BigInteger(
+ "2852220663043188088074403487569592065121097371561337653207919689"
+ + "5806125544163953214258963319594971029379263400735515369955250013"
+ + "4028759770788754166339078427645792536001991144766729628117371050"
+ + "3065276544543379585207323093069812639902415298676791716773723086"
+ + "01834079961869281917489638496882679996929360595283091"),
+ new BigInteger(
+ "1812266945737014247808099956042081894034544124660090203840602123"
+ + "8933795306490611245152382127750687774085253618514158494675518742"
+ + "0904863344271961110077635791220319963938065397633608138595169161"
+ + "4365952732191284608496816156732317034130054052863296504407952482"
+ + "70402413500178325587999299003705988651612697260381081"),
+ new BigInteger(
+ "3461478020849089881636057301867459968070516872602987322072552610"
+ + "6122696717667098851127207650635960731479969936151065921604956606"
+ + "9966154794154897232197433347544538725616640069913605417680979153"
+ + "7941663920296351630552463916932109774095427601318332413237900565"
+ + "33380330505490643091283956267491266793755039018149751"),
+ new BigInteger(
+ "2919979800970068658905539811038971051531482233418344434620488229"
+ + "7069955478191515351496193695554391114007400265274653645749899336"
+ + "1682279972987736655018586409178146143048864596533190807270958265"
+ + "8386345811616055097769189859096393752934393213978617302764485594"
+ + "27971296399182413971389773786687947710326691137231821"),
+ new BigInteger(
+ "4145154657949019520090421067892641813006171355169512965016842717"
+ + "9656056083456770700476740539321891137934371895885040718614132068"
+ + "7659642286859932894319946334724710913927915623235424403674960713"
+ + "3015105499354740364264523832014989327244648027567866644179973588"
+ + "6851400410006028767095438327490143741004842299878541824964849824"
+ + "9350463409537126165182086675091928210325509674933575383432172361"
+ + "1"),
+ new BigInteger(
+ "7263570684005586918409651676342477962666063384721447164820162267"
+ + "3637900031379949446961412145104626127789865770334124795558653625"
+ + "0265693033953361779942717984970881106667840356057452866357943677"
+ + "0299187611159071848712668510417692823114550446719084221850233353"
+ + "5448622581084864206413295247972240845959033925761759264503271102"
+ + "8711358281311325650083539770515252900036932499310037595977096965"
+ + "3"),
+ new BigInteger(
+ "3266663369261434628530741133725226939380890029427130078147736465"
+ + "2996576096098663002890375510448427552966457154556853852292297530"
+ + "3748877081504218804805934729044054195328441392083622877088337833"
+ + "3839361634881282676119589334709165541036798092721269225600972531"
+ + "5718770210834831734568895865334347621480511738343920340920819445"
+ + "8602267925535790135884214787193459118783550610652631217006506945"
+ + "3"),
+ new BigInteger(
+ "2714275054823322283846947242758076394288969833351667671546539844"
+ + "8651643040817257191932781992745878593029648459331742640462067216"
+ + "1697889841582474665251728415469605782526629276939159099241968231"
+ + "4563946417035619325266947257091436696492494177352417584114484475"
+ + "6610785746958696759938071286674788996869751533043564234638049802"
+ + "5949514917474176492949501669603402532532836245346872590582496734"
+ + "1"),
+ new BigInteger(
+ "9266983839147571189339684823228253420616685503762301572754412275"
+ + "1127843293258964600702452397526178329259267484695086911638972315"
+ + "4961995491900251718105624646921122900256992784437600453557273835"
+ + "3861591882136393291951512396743267427648075154617935904316277726"
+ + "4493865072538820667287351636308197262473273185496543102226470825"
+ + "6662877019047683511136380480413028925833068997034750517865449915"
+ + "3"),
+ new BigInteger(
+ "6943685859962113005380005918916483733270787990846044283782171250"
+ + "1096851232736318325302320935157976786131666696364333532268184395"
+ + "8665950723719162662956110077840013184726020313880442980629145593"
+ + "2383952066228056762115442513166346145910224582828425403465971492"
+ + "7260150227126350939033438077449255619231502836209591891037493966"
+ + "9366963730251619187615962926310287121840421140621429191345783703"
+ + "1"),
+ new BigInteger(
+ "8697498751458522624235585703214358189002281420472600166267178848"
+ + "9809876665869248037334395420081653868096056103537493131465377226"
+ + "0261527380426559408040456405219848362023445401145511114936506394"
+ + "6240472545398288332411818055040869427951279027405975059749360297"
+ + "5868667379863439430711990295232153128900808256212596912819669440"
+ + "8461633147852596585348243485566178333170181585431955731179108942"
+ + "1"),
+ new BigInteger(
+ "4252141813347264797276096871298065242070358505647997888003056375"
+ + "0053145248543520793105289129514510723624029989029530989695904117"
+ + "1040883775014117200916554841688641022136017868157290925811239787"
+ + "3664014299809018676076741787758620956387796785085878200748397774"
+ + "1000982778291877557074489243525397961477916369196578483491169386"
+ + "2005017885694815977695115290403992818456642027646266206320076800"
+ + "3"),
+ new BigInteger(
+ "3356647398302910967427184201762737607743709740247537918189248572"
+ + "1755339542838026890625250818518527348898974773340867800840791470"
+ + "3182072707032492007084043715576322632015800128489921814932124611"
+ + "2300036417841991332124497348096579076242448857352000771247540736"
+ + "1254949324799638105796121388483225300620211599611028678202393567"
+ + "8095635541751658983704832859578366318530922805928053806070359946"
+ + "1"),
+ new BigInteger(
+ "3687125575229624930459923973437509789116885700012081850445193578"
+ + "4486423768425089350932846437401841871613673810991112360643320652"
+ + "0225782089986669258803208183278659152741552450801685341843048568"
+ + "1125008729650000322084879372381541270180139663134377177885154388"
+ + "9558281508372272794193460069397070875763691455289959733530070186"
+ + "0360525342531389354962332229432027179470095997955180502375530175"
+ + "3"),
+ new BigInteger(
+ "6088560764944279853795552546797623009536823218028533977947580608"
+ + "2015023514992395624319060987001625566234648211868300524182306472"
+ + "7026872385780533326083682960047644674758988927136149502626557718"
+ + "2561494515318563339483672950711193945073071458843901227339418284"
+ + "3084182493461642555372639047162641075337152622892862251731700231"
+ + "6672547426448574167370804559242233207791080547486632014153528258"
+ + "1"),
+ new BigInteger(
+ "6081766267938901970682791123502557184373300073506187731779846380"
+ + "4083193288475152882563422230130613717216469536080649276981712202"
+ + "8895707724700107471391574673087393411637415445150131834443587280"
+ + "4243131225731630921851260690656608624225797294197741881140769183"
+ + "0474230365914155543155728342161658185646742117306992051014301383"
+ + "8040790841165308968256142923362988225719340573836171022480960175"
+ + "3"),
+ new BigInteger(
+ "5000879164859908887599881582814678322611278734193303790540199067"
+ + "6946804876309491380295619810590406766227048051997595053442615914"
+ + "2677702465219525342790323338314172797422380779526016709102650201"
+ + "6058553529785304239405043134061167377896985489252957729348463979"
+ + "6066933483020351454994081895283883114206539208013308687170796286"
+ + "8268752695525736731805658439398227370325903928664994918343915975"
+ + "3"),
+ new BigInteger(
+ "5033660524073962747735388920230339629907033897027296197974576730"
+ + "5654422857706257645566447425553553516325935964234373316093019314"
+ + "9125347663842235853602126989737378697014753612431648011618832921"
+ + "3881347704723060451053853932258315572365588301231482715348124261"
+ + "9244292433503547002496906691530720882968955274299548904791181715"
+ + "4190217453383503386985567684902027707247767653326442247588135031"
+ + "1"),
+ new BigInteger(
+ "7656692474335471169217545128846872228367812415627865759181393395"
+ + "8241618825828371173259648247363305034462523584509943049089351382"
+ + "5433879053475325827330864407124355159557574919864955631956757119"
+ + "9044097578241324151657090338112756973390540016908863938814598847"
+ + "5396824620980380695503598397306050849284639259137342875066075738"
+ + "4060141031090753207116787791385102134328808638802350088507846845"
+ + "1"),
+ new BigInteger(
+ "6916552449605114038869281931877716049700938960849845402874660241"
+ + "3416574115770967736955518993475194932835724065347138687353620520"
+ + "8331524408574865319265572656228099650675609929009824224767253657"
+ + "5459382651810818256784829505942965567114371502731619372511210627"
+ + "1610362520274480185346478545007812850057950851029848830710521787"
+ + "8356932374617076535457900683468313279449103472700012568700849319"
+ + "1"),
+ // F. Arnault, "Rabin-Miller primality test: composite numbers which pass it", Math. comp.
+ // v.64, n.209, p 355-361.
+ //
+ // A strong pseudoprime for the first 46 primes
+ new BigInteger(
+ "8038374574536394912570796143419421081388376882875581458374889175"
+ + "2229742737653336521865023361639600454579150420236032087665699667"
+ + "6098728404396540823292873879185086916685732826776177102938969773"
+ + "9470167082304286871099974399765441448453411558724506334092790222"
+ + "7529622941498423068816854043264575340183297861112989606448452161"
+ + "91652872597534901"),
+ // Richard G.E. Pinch, Absolute quadratic pseudorprimes
+ // http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.210.6783&rep=rep1&type=pdf
+ // Lucas-Charmichael-(-) numbers
+ new BigInteger("28295303263921"),
+ new BigInteger("443372888629441"),
+ new BigInteger("582920080863121"),
+ new BigInteger("894221105778001"),
+ new BigInteger("2013745337604001"),
+ // Lucas-Charmichael-(+) numbers
+ new BigInteger("6479"),
+ new BigInteger("84419"),
+ new BigInteger("1930499"),
+ new BigInteger("7110179"),
+ new BigInteger("15857855"),
+ new BigInteger("63278892599"),
+ new BigInteger("79397009999"),
+ };
+
+ /**
+ * Tests BigInteger.isProbablePrime with a list of composite integers. The integers have been
+ * chosen to check for weak pseudoprimality tests. E.g., they are counterexamples to weak
+ * implementations. The implementation in jdk uses a combination of a Miller-Rabin test and a
+ * Lucas test. This is similar to the Baillie-PSW test
+ * https://en.wikipedia.org/wiki/Baillie%E2%80%93PSW_primality_test
+ */
+ public void testIsProbablePrime() throws Exception {
+ // The probability that a non-prime passes should be at most 1-2^{-certainty}.
+ int certainty = 80;
+ for (BigInteger n : NONPRIMES) {
+ if (n.isProbablePrime(certainty)) {
+ fail("Composite number " + n.toString() + " passed as probable prime test");
+ }
+ }
+ }
+}