ssl-opt.sh 316 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539
  1. #!/bin/sh
  2. # ssl-opt.sh
  3. #
  4. # Copyright The Mbed TLS Contributors
  5. # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
  6. #
  7. # This file is provided under the Apache License 2.0, or the
  8. # GNU General Public License v2.0 or later.
  9. #
  10. # **********
  11. # Apache License 2.0:
  12. #
  13. # Licensed under the Apache License, Version 2.0 (the "License"); you may
  14. # not use this file except in compliance with the License.
  15. # You may obtain a copy of the License at
  16. #
  17. # http://www.apache.org/licenses/LICENSE-2.0
  18. #
  19. # Unless required by applicable law or agreed to in writing, software
  20. # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  21. # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  22. # See the License for the specific language governing permissions and
  23. # limitations under the License.
  24. #
  25. # **********
  26. #
  27. # **********
  28. # GNU General Public License v2.0 or later:
  29. #
  30. # This program is free software; you can redistribute it and/or modify
  31. # it under the terms of the GNU General Public License as published by
  32. # the Free Software Foundation; either version 2 of the License, or
  33. # (at your option) any later version.
  34. #
  35. # This program is distributed in the hope that it will be useful,
  36. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  37. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  38. # GNU General Public License for more details.
  39. #
  40. # You should have received a copy of the GNU General Public License along
  41. # with this program; if not, write to the Free Software Foundation, Inc.,
  42. # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  43. #
  44. # **********
  45. #
  46. # Purpose
  47. #
  48. # Executes tests to prove various TLS/SSL options and extensions.
  49. #
  50. # The goal is not to cover every ciphersuite/version, but instead to cover
  51. # specific options (max fragment length, truncated hmac, etc) or procedures
  52. # (session resumption from cache or ticket, renego, etc).
  53. #
  54. # The tests assume a build with default options, with exceptions expressed
  55. # with a dependency. The tests focus on functionality and do not consider
  56. # performance.
  57. #
  58. set -u
  59. # Limit the size of each log to 10 GiB, in case of failures with this script
  60. # where it may output seemingly unlimited length error logs.
  61. ulimit -f 20971520
  62. if cd $( dirname $0 ); then :; else
  63. echo "cd $( dirname $0 ) failed" >&2
  64. exit 1
  65. fi
  66. # default values, can be overridden by the environment
  67. : ${P_SRV:=../programs/ssl/ssl_server2}
  68. : ${P_CLI:=../programs/ssl/ssl_client2}
  69. : ${P_PXY:=../programs/test/udp_proxy}
  70. : ${OPENSSL_CMD:=openssl} # OPENSSL would conflict with the build system
  71. : ${GNUTLS_CLI:=gnutls-cli}
  72. : ${GNUTLS_SERV:=gnutls-serv}
  73. : ${PERL:=perl}
  74. O_SRV="$OPENSSL_CMD s_server -www -cert data_files/server5.crt -key data_files/server5.key"
  75. O_CLI="echo 'GET / HTTP/1.0' | $OPENSSL_CMD s_client"
  76. G_SRV="$GNUTLS_SERV --x509certfile data_files/server5.crt --x509keyfile data_files/server5.key"
  77. G_CLI="echo 'GET / HTTP/1.0' | $GNUTLS_CLI --x509cafile data_files/test-ca_cat12.crt"
  78. TCP_CLIENT="$PERL scripts/tcp_client.pl"
  79. # alternative versions of OpenSSL and GnuTLS (no default path)
  80. if [ -n "${OPENSSL_LEGACY:-}" ]; then
  81. O_LEGACY_SRV="$OPENSSL_LEGACY s_server -www -cert data_files/server5.crt -key data_files/server5.key"
  82. O_LEGACY_CLI="echo 'GET / HTTP/1.0' | $OPENSSL_LEGACY s_client"
  83. else
  84. O_LEGACY_SRV=false
  85. O_LEGACY_CLI=false
  86. fi
  87. if [ -n "${GNUTLS_NEXT_SERV:-}" ]; then
  88. G_NEXT_SRV="$GNUTLS_NEXT_SERV --x509certfile data_files/server5.crt --x509keyfile data_files/server5.key"
  89. else
  90. G_NEXT_SRV=false
  91. fi
  92. if [ -n "${GNUTLS_NEXT_CLI:-}" ]; then
  93. G_NEXT_CLI="echo 'GET / HTTP/1.0' | $GNUTLS_NEXT_CLI --x509cafile data_files/test-ca_cat12.crt"
  94. else
  95. G_NEXT_CLI=false
  96. fi
  97. TESTS=0
  98. FAILS=0
  99. SKIPS=0
  100. CONFIG_H='../include/mbedtls/config.h'
  101. MEMCHECK=0
  102. FILTER='.*'
  103. EXCLUDE='^$'
  104. SHOW_TEST_NUMBER=0
  105. RUN_TEST_NUMBER=''
  106. PRESERVE_LOGS=0
  107. # Pick a "unique" server port in the range 10000-19999, and a proxy
  108. # port which is this plus 10000. Each port number may be independently
  109. # overridden by a command line option.
  110. SRV_PORT=$(($$ % 10000 + 10000))
  111. PXY_PORT=$((SRV_PORT + 10000))
  112. print_usage() {
  113. echo "Usage: $0 [options]"
  114. printf " -h|--help\tPrint this help.\n"
  115. printf " -m|--memcheck\tCheck memory leaks and errors.\n"
  116. printf " -f|--filter\tOnly matching tests are executed (substring or BRE)\n"
  117. printf " -e|--exclude\tMatching tests are excluded (substring or BRE)\n"
  118. printf " -n|--number\tExecute only numbered test (comma-separated, e.g. '245,256')\n"
  119. printf " -s|--show-numbers\tShow test numbers in front of test names\n"
  120. printf " -p|--preserve-logs\tPreserve logs of successful tests as well\n"
  121. printf " --port\tTCP/UDP port (default: randomish 1xxxx)\n"
  122. printf " --proxy-port\tTCP/UDP proxy port (default: randomish 2xxxx)\n"
  123. printf " --seed\tInteger seed value to use for this test run\n"
  124. }
  125. get_options() {
  126. while [ $# -gt 0 ]; do
  127. case "$1" in
  128. -f|--filter)
  129. shift; FILTER=$1
  130. ;;
  131. -e|--exclude)
  132. shift; EXCLUDE=$1
  133. ;;
  134. -m|--memcheck)
  135. MEMCHECK=1
  136. ;;
  137. -n|--number)
  138. shift; RUN_TEST_NUMBER=$1
  139. ;;
  140. -s|--show-numbers)
  141. SHOW_TEST_NUMBER=1
  142. ;;
  143. -p|--preserve-logs)
  144. PRESERVE_LOGS=1
  145. ;;
  146. --port)
  147. shift; SRV_PORT=$1
  148. ;;
  149. --proxy-port)
  150. shift; PXY_PORT=$1
  151. ;;
  152. --seed)
  153. shift; SEED="$1"
  154. ;;
  155. -h|--help)
  156. print_usage
  157. exit 0
  158. ;;
  159. *)
  160. echo "Unknown argument: '$1'"
  161. print_usage
  162. exit 1
  163. ;;
  164. esac
  165. shift
  166. done
  167. }
  168. # Read boolean configuration options from config.h for easy and quick
  169. # testing. Skip non-boolean options (with something other than spaces
  170. # and a comment after "#define SYMBOL"). The variable contains a
  171. # space-separated list of symbols.
  172. CONFIGS_ENABLED=" $(<"$CONFIG_H" \
  173. sed -n 's!^ *#define *\([A-Za-z][0-9A-Z_a-z]*\) *\(/*\)*!\1!p' |
  174. tr '\n' ' ')"
  175. # Skip next test; use this macro to skip tests which are legitimate
  176. # in theory and expected to be re-introduced at some point, but
  177. # aren't expected to succeed at the moment due to problems outside
  178. # our control (such as bugs in other TLS implementations).
  179. skip_next_test() {
  180. SKIP_NEXT="YES"
  181. }
  182. # skip next test if the flag is not enabled in config.h
  183. requires_config_enabled() {
  184. case $CONFIGS_ENABLED in
  185. *" $1 "*) :;;
  186. *) SKIP_NEXT="YES";;
  187. esac
  188. }
  189. # skip next test if the flag is enabled in config.h
  190. requires_config_disabled() {
  191. case $CONFIGS_ENABLED in
  192. *" $1 "*) SKIP_NEXT="YES";;
  193. esac
  194. }
  195. get_config_value_or_default() {
  196. # This function uses the query_config command line option to query the
  197. # required Mbed TLS compile time configuration from the ssl_server2
  198. # program. The command will always return a success value if the
  199. # configuration is defined and the value will be printed to stdout.
  200. #
  201. # Note that if the configuration is not defined or is defined to nothing,
  202. # the output of this function will be an empty string.
  203. ${P_SRV} "query_config=${1}"
  204. }
  205. requires_config_value_at_least() {
  206. VAL="$( get_config_value_or_default "$1" )"
  207. if [ -z "$VAL" ]; then
  208. # Should never happen
  209. echo "Mbed TLS configuration $1 is not defined"
  210. exit 1
  211. elif [ "$VAL" -lt "$2" ]; then
  212. SKIP_NEXT="YES"
  213. fi
  214. }
  215. requires_config_value_at_most() {
  216. VAL=$( get_config_value_or_default "$1" )
  217. if [ -z "$VAL" ]; then
  218. # Should never happen
  219. echo "Mbed TLS configuration $1 is not defined"
  220. exit 1
  221. elif [ "$VAL" -gt "$2" ]; then
  222. SKIP_NEXT="YES"
  223. fi
  224. }
  225. # skip next test if OpenSSL doesn't support FALLBACK_SCSV
  226. requires_openssl_with_fallback_scsv() {
  227. if [ -z "${OPENSSL_HAS_FBSCSV:-}" ]; then
  228. if $OPENSSL_CMD s_client -help 2>&1 | grep fallback_scsv >/dev/null
  229. then
  230. OPENSSL_HAS_FBSCSV="YES"
  231. else
  232. OPENSSL_HAS_FBSCSV="NO"
  233. fi
  234. fi
  235. if [ "$OPENSSL_HAS_FBSCSV" = "NO" ]; then
  236. SKIP_NEXT="YES"
  237. fi
  238. }
  239. # skip next test if GnuTLS isn't available
  240. requires_gnutls() {
  241. if [ -z "${GNUTLS_AVAILABLE:-}" ]; then
  242. if ( which "$GNUTLS_CLI" && which "$GNUTLS_SERV" ) >/dev/null 2>&1; then
  243. GNUTLS_AVAILABLE="YES"
  244. else
  245. GNUTLS_AVAILABLE="NO"
  246. fi
  247. fi
  248. if [ "$GNUTLS_AVAILABLE" = "NO" ]; then
  249. SKIP_NEXT="YES"
  250. fi
  251. }
  252. # skip next test if GnuTLS-next isn't available
  253. requires_gnutls_next() {
  254. if [ -z "${GNUTLS_NEXT_AVAILABLE:-}" ]; then
  255. if ( which "${GNUTLS_NEXT_CLI:-}" && which "${GNUTLS_NEXT_SERV:-}" ) >/dev/null 2>&1; then
  256. GNUTLS_NEXT_AVAILABLE="YES"
  257. else
  258. GNUTLS_NEXT_AVAILABLE="NO"
  259. fi
  260. fi
  261. if [ "$GNUTLS_NEXT_AVAILABLE" = "NO" ]; then
  262. SKIP_NEXT="YES"
  263. fi
  264. }
  265. # skip next test if OpenSSL-legacy isn't available
  266. requires_openssl_legacy() {
  267. if [ -z "${OPENSSL_LEGACY_AVAILABLE:-}" ]; then
  268. if which "${OPENSSL_LEGACY:-}" >/dev/null 2>&1; then
  269. OPENSSL_LEGACY_AVAILABLE="YES"
  270. else
  271. OPENSSL_LEGACY_AVAILABLE="NO"
  272. fi
  273. fi
  274. if [ "$OPENSSL_LEGACY_AVAILABLE" = "NO" ]; then
  275. SKIP_NEXT="YES"
  276. fi
  277. }
  278. # skip next test if IPv6 isn't available on this host
  279. requires_ipv6() {
  280. if [ -z "${HAS_IPV6:-}" ]; then
  281. $P_SRV server_addr='::1' > $SRV_OUT 2>&1 &
  282. SRV_PID=$!
  283. sleep 1
  284. kill $SRV_PID >/dev/null 2>&1
  285. if grep "NET - Binding of the socket failed" $SRV_OUT >/dev/null; then
  286. HAS_IPV6="NO"
  287. else
  288. HAS_IPV6="YES"
  289. fi
  290. rm -r $SRV_OUT
  291. fi
  292. if [ "$HAS_IPV6" = "NO" ]; then
  293. SKIP_NEXT="YES"
  294. fi
  295. }
  296. # skip next test if it's i686 or uname is not available
  297. requires_not_i686() {
  298. if [ -z "${IS_I686:-}" ]; then
  299. IS_I686="YES"
  300. if which "uname" >/dev/null 2>&1; then
  301. if [ -z "$(uname -a | grep i686)" ]; then
  302. IS_I686="NO"
  303. fi
  304. fi
  305. fi
  306. if [ "$IS_I686" = "YES" ]; then
  307. SKIP_NEXT="YES"
  308. fi
  309. }
  310. # Calculate the input & output maximum content lengths set in the config
  311. MAX_CONTENT_LEN=$( ../scripts/config.pl get MBEDTLS_SSL_MAX_CONTENT_LEN || echo "16384")
  312. MAX_IN_LEN=$( ../scripts/config.pl get MBEDTLS_SSL_IN_CONTENT_LEN || echo "$MAX_CONTENT_LEN")
  313. MAX_OUT_LEN=$( ../scripts/config.pl get MBEDTLS_SSL_OUT_CONTENT_LEN || echo "$MAX_CONTENT_LEN")
  314. if [ "$MAX_IN_LEN" -lt "$MAX_CONTENT_LEN" ]; then
  315. MAX_CONTENT_LEN="$MAX_IN_LEN"
  316. fi
  317. if [ "$MAX_OUT_LEN" -lt "$MAX_CONTENT_LEN" ]; then
  318. MAX_CONTENT_LEN="$MAX_OUT_LEN"
  319. fi
  320. # skip the next test if the SSL output buffer is less than 16KB
  321. requires_full_size_output_buffer() {
  322. if [ "$MAX_OUT_LEN" -ne 16384 ]; then
  323. SKIP_NEXT="YES"
  324. fi
  325. }
  326. # skip the next test if valgrind is in use
  327. not_with_valgrind() {
  328. if [ "$MEMCHECK" -gt 0 ]; then
  329. SKIP_NEXT="YES"
  330. fi
  331. }
  332. # skip the next test if valgrind is NOT in use
  333. only_with_valgrind() {
  334. if [ "$MEMCHECK" -eq 0 ]; then
  335. SKIP_NEXT="YES"
  336. fi
  337. }
  338. # multiply the client timeout delay by the given factor for the next test
  339. client_needs_more_time() {
  340. CLI_DELAY_FACTOR=$1
  341. }
  342. # wait for the given seconds after the client finished in the next test
  343. server_needs_more_time() {
  344. SRV_DELAY_SECONDS=$1
  345. }
  346. # print_name <name>
  347. print_name() {
  348. TESTS=$(( $TESTS + 1 ))
  349. LINE=""
  350. if [ "$SHOW_TEST_NUMBER" -gt 0 ]; then
  351. LINE="$TESTS "
  352. fi
  353. LINE="$LINE$1"
  354. printf "%s " "$LINE"
  355. LEN=$(( 72 - `echo "$LINE" | wc -c` ))
  356. for i in `seq 1 $LEN`; do printf '.'; done
  357. printf ' '
  358. }
  359. # fail <message>
  360. fail() {
  361. echo "FAIL"
  362. echo " ! $1"
  363. mv $SRV_OUT o-srv-${TESTS}.log
  364. mv $CLI_OUT o-cli-${TESTS}.log
  365. if [ -n "$PXY_CMD" ]; then
  366. mv $PXY_OUT o-pxy-${TESTS}.log
  367. fi
  368. echo " ! outputs saved to o-XXX-${TESTS}.log"
  369. if [ "${LOG_FAILURE_ON_STDOUT:-0}" != 0 ]; then
  370. echo " ! server output:"
  371. cat o-srv-${TESTS}.log
  372. echo " ! ========================================================"
  373. echo " ! client output:"
  374. cat o-cli-${TESTS}.log
  375. if [ -n "$PXY_CMD" ]; then
  376. echo " ! ========================================================"
  377. echo " ! proxy output:"
  378. cat o-pxy-${TESTS}.log
  379. fi
  380. echo ""
  381. fi
  382. FAILS=$(( $FAILS + 1 ))
  383. }
  384. # is_polar <cmd_line>
  385. is_polar() {
  386. case "$1" in
  387. *ssl_client2*) true;;
  388. *ssl_server2*) true;;
  389. *) false;;
  390. esac
  391. }
  392. # openssl s_server doesn't have -www with DTLS
  393. check_osrv_dtls() {
  394. case "$SRV_CMD" in
  395. *s_server*-dtls*)
  396. NEEDS_INPUT=1
  397. SRV_CMD="$( echo $SRV_CMD | sed s/-www// )";;
  398. *) NEEDS_INPUT=0;;
  399. esac
  400. }
  401. # provide input to commands that need it
  402. provide_input() {
  403. if [ $NEEDS_INPUT -eq 0 ]; then
  404. return
  405. fi
  406. while true; do
  407. echo "HTTP/1.0 200 OK"
  408. sleep 1
  409. done
  410. }
  411. # has_mem_err <log_file_name>
  412. has_mem_err() {
  413. if ( grep -F 'All heap blocks were freed -- no leaks are possible' "$1" &&
  414. grep -F 'ERROR SUMMARY: 0 errors from 0 contexts' "$1" ) > /dev/null
  415. then
  416. return 1 # false: does not have errors
  417. else
  418. return 0 # true: has errors
  419. fi
  420. }
  421. # Wait for process $2 named $3 to be listening on port $1. Print error to $4.
  422. if type lsof >/dev/null 2>/dev/null; then
  423. wait_app_start() {
  424. START_TIME=$(date +%s)
  425. if [ "$DTLS" -eq 1 ]; then
  426. proto=UDP
  427. else
  428. proto=TCP
  429. fi
  430. # Make a tight loop, server normally takes less than 1s to start.
  431. while ! lsof -a -n -b -i "$proto:$1" -p "$2" >/dev/null 2>/dev/null; do
  432. if [ $(( $(date +%s) - $START_TIME )) -gt $DOG_DELAY ]; then
  433. echo "$3 START TIMEOUT"
  434. echo "$3 START TIMEOUT" >> $4
  435. break
  436. fi
  437. # Linux and *BSD support decimal arguments to sleep. On other
  438. # OSes this may be a tight loop.
  439. sleep 0.1 2>/dev/null || true
  440. done
  441. }
  442. else
  443. echo "Warning: lsof not available, wait_app_start = sleep"
  444. wait_app_start() {
  445. sleep "$START_DELAY"
  446. }
  447. fi
  448. # Wait for server process $2 to be listening on port $1.
  449. wait_server_start() {
  450. wait_app_start $1 $2 "SERVER" $SRV_OUT
  451. }
  452. # Wait for proxy process $2 to be listening on port $1.
  453. wait_proxy_start() {
  454. wait_app_start $1 $2 "PROXY" $PXY_OUT
  455. }
  456. # Given the client or server debug output, parse the unix timestamp that is
  457. # included in the first 4 bytes of the random bytes and check that it's within
  458. # acceptable bounds
  459. check_server_hello_time() {
  460. # Extract the time from the debug (lvl 3) output of the client
  461. SERVER_HELLO_TIME="$(sed -n 's/.*server hello, current time: //p' < "$1")"
  462. # Get the Unix timestamp for now
  463. CUR_TIME=$(date +'%s')
  464. THRESHOLD_IN_SECS=300
  465. # Check if the ServerHello time was printed
  466. if [ -z "$SERVER_HELLO_TIME" ]; then
  467. return 1
  468. fi
  469. # Check the time in ServerHello is within acceptable bounds
  470. if [ $SERVER_HELLO_TIME -lt $(( $CUR_TIME - $THRESHOLD_IN_SECS )) ]; then
  471. # The time in ServerHello is at least 5 minutes before now
  472. return 1
  473. elif [ $SERVER_HELLO_TIME -gt $(( $CUR_TIME + $THRESHOLD_IN_SECS )) ]; then
  474. # The time in ServerHello is at least 5 minutes later than now
  475. return 1
  476. else
  477. return 0
  478. fi
  479. }
  480. # wait for client to terminate and set CLI_EXIT
  481. # must be called right after starting the client
  482. wait_client_done() {
  483. CLI_PID=$!
  484. CLI_DELAY=$(( $DOG_DELAY * $CLI_DELAY_FACTOR ))
  485. CLI_DELAY_FACTOR=1
  486. ( sleep $CLI_DELAY; echo "===CLIENT_TIMEOUT===" >> $CLI_OUT; kill $CLI_PID ) &
  487. DOG_PID=$!
  488. wait $CLI_PID
  489. CLI_EXIT=$?
  490. kill $DOG_PID >/dev/null 2>&1
  491. wait $DOG_PID
  492. echo "EXIT: $CLI_EXIT" >> $CLI_OUT
  493. sleep $SRV_DELAY_SECONDS
  494. SRV_DELAY_SECONDS=0
  495. }
  496. # check if the given command uses dtls and sets global variable DTLS
  497. detect_dtls() {
  498. case "$1" in
  499. *dtls=1*|-dtls|-u) DTLS=1;;
  500. *) DTLS=0;;
  501. esac
  502. }
  503. # Usage: run_test name [-p proxy_cmd] srv_cmd cli_cmd cli_exit [option [...]]
  504. # Options: -s pattern pattern that must be present in server output
  505. # -c pattern pattern that must be present in client output
  506. # -u pattern lines after pattern must be unique in client output
  507. # -f call shell function on client output
  508. # -S pattern pattern that must be absent in server output
  509. # -C pattern pattern that must be absent in client output
  510. # -U pattern lines after pattern must be unique in server output
  511. # -F call shell function on server output
  512. run_test() {
  513. NAME="$1"
  514. shift 1
  515. if is_excluded "$NAME"; then
  516. SKIP_NEXT="NO"
  517. return
  518. fi
  519. print_name "$NAME"
  520. # Do we only run numbered tests?
  521. if [ -n "$RUN_TEST_NUMBER" ]; then
  522. case ",$RUN_TEST_NUMBER," in
  523. *",$TESTS,"*) :;;
  524. *) SKIP_NEXT="YES";;
  525. esac
  526. fi
  527. # should we skip?
  528. if [ "X$SKIP_NEXT" = "XYES" ]; then
  529. SKIP_NEXT="NO"
  530. echo "SKIP"
  531. SKIPS=$(( $SKIPS + 1 ))
  532. return
  533. fi
  534. # does this test use a proxy?
  535. if [ "X$1" = "X-p" ]; then
  536. PXY_CMD="$2"
  537. shift 2
  538. else
  539. PXY_CMD=""
  540. fi
  541. # get commands and client output
  542. SRV_CMD="$1"
  543. CLI_CMD="$2"
  544. CLI_EXPECT="$3"
  545. shift 3
  546. # Check if test uses files
  547. case "$SRV_CMD $CLI_CMD" in
  548. *data_files/*)
  549. requires_config_enabled MBEDTLS_FS_IO;;
  550. esac
  551. # should we skip?
  552. if [ "X$SKIP_NEXT" = "XYES" ]; then
  553. SKIP_NEXT="NO"
  554. echo "SKIP"
  555. SKIPS=$(( $SKIPS + 1 ))
  556. return
  557. fi
  558. # update DTLS variable
  559. detect_dtls "$SRV_CMD"
  560. # if the test uses DTLS but no custom proxy, add a simple proxy
  561. # as it provides timing info that's useful to debug failures
  562. if [ -z "$PXY_CMD" ] && [ "$DTLS" -eq 1 ]; then
  563. PXY_CMD="$P_PXY"
  564. case " $SRV_CMD " in
  565. *' server_addr=::1 '*)
  566. PXY_CMD="$PXY_CMD server_addr=::1 listen_addr=::1";;
  567. esac
  568. fi
  569. # fix client port
  570. if [ -n "$PXY_CMD" ]; then
  571. CLI_CMD=$( echo "$CLI_CMD" | sed s/+SRV_PORT/$PXY_PORT/g )
  572. else
  573. CLI_CMD=$( echo "$CLI_CMD" | sed s/+SRV_PORT/$SRV_PORT/g )
  574. fi
  575. # prepend valgrind to our commands if active
  576. if [ "$MEMCHECK" -gt 0 ]; then
  577. if is_polar "$SRV_CMD"; then
  578. SRV_CMD="valgrind --leak-check=full $SRV_CMD"
  579. fi
  580. if is_polar "$CLI_CMD"; then
  581. CLI_CMD="valgrind --leak-check=full $CLI_CMD"
  582. fi
  583. fi
  584. TIMES_LEFT=2
  585. while [ $TIMES_LEFT -gt 0 ]; do
  586. TIMES_LEFT=$(( $TIMES_LEFT - 1 ))
  587. # run the commands
  588. if [ -n "$PXY_CMD" ]; then
  589. printf "# %s\n%s\n" "$NAME" "$PXY_CMD" > $PXY_OUT
  590. $PXY_CMD >> $PXY_OUT 2>&1 &
  591. PXY_PID=$!
  592. wait_proxy_start "$PXY_PORT" "$PXY_PID"
  593. fi
  594. check_osrv_dtls
  595. printf '# %s\n%s\n' "$NAME" "$SRV_CMD" > $SRV_OUT
  596. provide_input | $SRV_CMD >> $SRV_OUT 2>&1 &
  597. SRV_PID=$!
  598. wait_server_start "$SRV_PORT" "$SRV_PID"
  599. printf '# %s\n%s\n' "$NAME" "$CLI_CMD" > $CLI_OUT
  600. eval "$CLI_CMD" >> $CLI_OUT 2>&1 &
  601. wait_client_done
  602. sleep 0.05
  603. # terminate the server (and the proxy)
  604. kill $SRV_PID
  605. wait $SRV_PID
  606. SRV_RET=$?
  607. if [ -n "$PXY_CMD" ]; then
  608. kill $PXY_PID >/dev/null 2>&1
  609. wait $PXY_PID
  610. fi
  611. # retry only on timeouts
  612. if grep '===CLIENT_TIMEOUT===' $CLI_OUT >/dev/null; then
  613. printf "RETRY "
  614. else
  615. TIMES_LEFT=0
  616. fi
  617. done
  618. # check if the client and server went at least to the handshake stage
  619. # (useful to avoid tests with only negative assertions and non-zero
  620. # expected client exit to incorrectly succeed in case of catastrophic
  621. # failure)
  622. if is_polar "$SRV_CMD"; then
  623. if grep "Performing the SSL/TLS handshake" $SRV_OUT >/dev/null; then :;
  624. else
  625. fail "server or client failed to reach handshake stage"
  626. return
  627. fi
  628. fi
  629. if is_polar "$CLI_CMD"; then
  630. if grep "Performing the SSL/TLS handshake" $CLI_OUT >/dev/null; then :;
  631. else
  632. fail "server or client failed to reach handshake stage"
  633. return
  634. fi
  635. fi
  636. # Check server exit code (only for Mbed TLS: GnuTLS and OpenSSL don't
  637. # exit with status 0 when interrupted by a signal, and we don't really
  638. # care anyway), in case e.g. the server reports a memory leak.
  639. if [ $SRV_RET != 0 ] && is_polar "$SRV_CMD"; then
  640. fail "Server exited with status $SRV_RET"
  641. return
  642. fi
  643. # check client exit code
  644. if [ \( "$CLI_EXPECT" = 0 -a "$CLI_EXIT" != 0 \) -o \
  645. \( "$CLI_EXPECT" != 0 -a "$CLI_EXIT" = 0 \) ]
  646. then
  647. fail "bad client exit code (expected $CLI_EXPECT, got $CLI_EXIT)"
  648. return
  649. fi
  650. # check other assertions
  651. # lines beginning with == are added by valgrind, ignore them
  652. # lines with 'Serious error when reading debug info', are valgrind issues as well
  653. while [ $# -gt 0 ]
  654. do
  655. case $1 in
  656. "-s")
  657. if grep -v '^==' $SRV_OUT | grep -v 'Serious error when reading debug info' | grep "$2" >/dev/null; then :; else
  658. fail "pattern '$2' MUST be present in the Server output"
  659. return
  660. fi
  661. ;;
  662. "-c")
  663. if grep -v '^==' $CLI_OUT | grep -v 'Serious error when reading debug info' | grep "$2" >/dev/null; then :; else
  664. fail "pattern '$2' MUST be present in the Client output"
  665. return
  666. fi
  667. ;;
  668. "-S")
  669. if grep -v '^==' $SRV_OUT | grep -v 'Serious error when reading debug info' | grep "$2" >/dev/null; then
  670. fail "pattern '$2' MUST NOT be present in the Server output"
  671. return
  672. fi
  673. ;;
  674. "-C")
  675. if grep -v '^==' $CLI_OUT | grep -v 'Serious error when reading debug info' | grep "$2" >/dev/null; then
  676. fail "pattern '$2' MUST NOT be present in the Client output"
  677. return
  678. fi
  679. ;;
  680. # The filtering in the following two options (-u and -U) do the following
  681. # - ignore valgrind output
  682. # - filter out everything but lines right after the pattern occurrences
  683. # - keep one of each non-unique line
  684. # - count how many lines remain
  685. # A line with '--' will remain in the result from previous outputs, so the number of lines in the result will be 1
  686. # if there were no duplicates.
  687. "-U")
  688. if [ $(grep -v '^==' $SRV_OUT | grep -v 'Serious error when reading debug info' | grep -A1 "$2" | grep -v "$2" | sort | uniq -d | wc -l) -gt 1 ]; then
  689. fail "lines following pattern '$2' must be unique in Server output"
  690. return
  691. fi
  692. ;;
  693. "-u")
  694. if [ $(grep -v '^==' $CLI_OUT | grep -v 'Serious error when reading debug info' | grep -A1 "$2" | grep -v "$2" | sort | uniq -d | wc -l) -gt 1 ]; then
  695. fail "lines following pattern '$2' must be unique in Client output"
  696. return
  697. fi
  698. ;;
  699. "-F")
  700. if ! $2 "$SRV_OUT"; then
  701. fail "function call to '$2' failed on Server output"
  702. return
  703. fi
  704. ;;
  705. "-f")
  706. if ! $2 "$CLI_OUT"; then
  707. fail "function call to '$2' failed on Client output"
  708. return
  709. fi
  710. ;;
  711. *)
  712. echo "Unknown test: $1" >&2
  713. exit 1
  714. esac
  715. shift 2
  716. done
  717. # check valgrind's results
  718. if [ "$MEMCHECK" -gt 0 ]; then
  719. if is_polar "$SRV_CMD" && has_mem_err $SRV_OUT; then
  720. fail "Server has memory errors"
  721. return
  722. fi
  723. if is_polar "$CLI_CMD" && has_mem_err $CLI_OUT; then
  724. fail "Client has memory errors"
  725. return
  726. fi
  727. fi
  728. # if we're here, everything is ok
  729. echo "PASS"
  730. if [ "$PRESERVE_LOGS" -gt 0 ]; then
  731. mv $SRV_OUT o-srv-${TESTS}.log
  732. mv $CLI_OUT o-cli-${TESTS}.log
  733. if [ -n "$PXY_CMD" ]; then
  734. mv $PXY_OUT o-pxy-${TESTS}.log
  735. fi
  736. fi
  737. rm -f $SRV_OUT $CLI_OUT $PXY_OUT
  738. }
  739. cleanup() {
  740. rm -f $CLI_OUT $SRV_OUT $PXY_OUT $SESSION
  741. test -n "${SRV_PID:-}" && kill $SRV_PID >/dev/null 2>&1
  742. test -n "${PXY_PID:-}" && kill $PXY_PID >/dev/null 2>&1
  743. test -n "${CLI_PID:-}" && kill $CLI_PID >/dev/null 2>&1
  744. test -n "${DOG_PID:-}" && kill $DOG_PID >/dev/null 2>&1
  745. exit 1
  746. }
  747. #
  748. # MAIN
  749. #
  750. get_options "$@"
  751. # Optimize filters: if $FILTER and $EXCLUDE can be expressed as shell
  752. # patterns rather than regular expressions, use a case statement instead
  753. # of calling grep. To keep the optimizer simple, it is incomplete and only
  754. # detects simple cases: plain substring, everything, nothing.
  755. #
  756. # As an exception, the character '.' is treated as an ordinary character
  757. # if it is the only special character in the string. This is because it's
  758. # rare to need "any one character", but needing a literal '.' is common
  759. # (e.g. '-f "DTLS 1.2"').
  760. need_grep=
  761. case "$FILTER" in
  762. '^$') simple_filter=;;
  763. '.*') simple_filter='*';;
  764. *[][$+*?\\^{\|}]*) # Regexp special characters (other than .), we need grep
  765. need_grep=1;;
  766. *) # No regexp or shell-pattern special character
  767. simple_filter="*$FILTER*";;
  768. esac
  769. case "$EXCLUDE" in
  770. '^$') simple_exclude=;;
  771. '.*') simple_exclude='*';;
  772. *[][$+*?\\^{\|}]*) # Regexp special characters (other than .), we need grep
  773. need_grep=1;;
  774. *) # No regexp or shell-pattern special character
  775. simple_exclude="*$EXCLUDE*";;
  776. esac
  777. if [ -n "$need_grep" ]; then
  778. is_excluded () {
  779. ! echo "$1" | grep "$FILTER" | grep -q -v "$EXCLUDE"
  780. }
  781. else
  782. is_excluded () {
  783. case "$1" in
  784. $simple_exclude) true;;
  785. $simple_filter) false;;
  786. *) true;;
  787. esac
  788. }
  789. fi
  790. # sanity checks, avoid an avalanche of errors
  791. P_SRV_BIN="${P_SRV%%[ ]*}"
  792. P_CLI_BIN="${P_CLI%%[ ]*}"
  793. P_PXY_BIN="${P_PXY%%[ ]*}"
  794. if [ ! -x "$P_SRV_BIN" ]; then
  795. echo "Command '$P_SRV_BIN' is not an executable file"
  796. exit 1
  797. fi
  798. if [ ! -x "$P_CLI_BIN" ]; then
  799. echo "Command '$P_CLI_BIN' is not an executable file"
  800. exit 1
  801. fi
  802. if [ ! -x "$P_PXY_BIN" ]; then
  803. echo "Command '$P_PXY_BIN' is not an executable file"
  804. exit 1
  805. fi
  806. if [ "$MEMCHECK" -gt 0 ]; then
  807. if which valgrind >/dev/null 2>&1; then :; else
  808. echo "Memcheck not possible. Valgrind not found"
  809. exit 1
  810. fi
  811. fi
  812. if which $OPENSSL_CMD >/dev/null 2>&1; then :; else
  813. echo "Command '$OPENSSL_CMD' not found"
  814. exit 1
  815. fi
  816. # used by watchdog
  817. MAIN_PID="$$"
  818. # We use somewhat arbitrary delays for tests:
  819. # - how long do we wait for the server to start (when lsof not available)?
  820. # - how long do we allow for the client to finish?
  821. # (not to check performance, just to avoid waiting indefinitely)
  822. # Things are slower with valgrind, so give extra time here.
  823. #
  824. # Note: without lsof, there is a trade-off between the running time of this
  825. # script and the risk of spurious errors because we didn't wait long enough.
  826. # The watchdog delay on the other hand doesn't affect normal running time of
  827. # the script, only the case where a client or server gets stuck.
  828. if [ "$MEMCHECK" -gt 0 ]; then
  829. START_DELAY=6
  830. DOG_DELAY=60
  831. else
  832. START_DELAY=2
  833. DOG_DELAY=20
  834. fi
  835. # some particular tests need more time:
  836. # - for the client, we multiply the usual watchdog limit by a factor
  837. # - for the server, we sleep for a number of seconds after the client exits
  838. # see client_need_more_time() and server_needs_more_time()
  839. CLI_DELAY_FACTOR=1
  840. SRV_DELAY_SECONDS=0
  841. # fix commands to use this port, force IPv4 while at it
  842. # +SRV_PORT will be replaced by either $SRV_PORT or $PXY_PORT later
  843. P_SRV="$P_SRV server_addr=127.0.0.1 server_port=$SRV_PORT"
  844. P_CLI="$P_CLI server_addr=127.0.0.1 server_port=+SRV_PORT"
  845. P_PXY="$P_PXY server_addr=127.0.0.1 server_port=$SRV_PORT listen_addr=127.0.0.1 listen_port=$PXY_PORT ${SEED:+"seed=$SEED"}"
  846. O_SRV="$O_SRV -accept $SRV_PORT -dhparam data_files/dhparams.pem"
  847. O_CLI="$O_CLI -connect localhost:+SRV_PORT"
  848. G_SRV="$G_SRV -p $SRV_PORT"
  849. G_CLI="$G_CLI -p +SRV_PORT"
  850. if [ -n "${OPENSSL_LEGACY:-}" ]; then
  851. O_LEGACY_SRV="$O_LEGACY_SRV -accept $SRV_PORT -dhparam data_files/dhparams.pem"
  852. O_LEGACY_CLI="$O_LEGACY_CLI -connect localhost:+SRV_PORT"
  853. fi
  854. if [ -n "${GNUTLS_NEXT_SERV:-}" ]; then
  855. G_NEXT_SRV="$G_NEXT_SRV -p $SRV_PORT"
  856. fi
  857. if [ -n "${GNUTLS_NEXT_CLI:-}" ]; then
  858. G_NEXT_CLI="$G_NEXT_CLI -p +SRV_PORT"
  859. fi
  860. # Allow SHA-1, because many of our test certificates use it
  861. P_SRV="$P_SRV allow_sha1=1"
  862. P_CLI="$P_CLI allow_sha1=1"
  863. # Also pick a unique name for intermediate files
  864. SRV_OUT="srv_out.$$"
  865. CLI_OUT="cli_out.$$"
  866. PXY_OUT="pxy_out.$$"
  867. SESSION="session.$$"
  868. SKIP_NEXT="NO"
  869. trap cleanup INT TERM HUP
  870. # Basic test
  871. # Checks that:
  872. # - things work with all ciphersuites active (used with config-full in all.sh)
  873. # - the expected (highest security) parameters are selected
  874. # ("signature_algorithm ext: 6" means SHA-512 (highest common hash))
  875. run_test "Default" \
  876. "$P_SRV debug_level=3" \
  877. "$P_CLI" \
  878. 0 \
  879. -s "Protocol is TLSv1.2" \
  880. -s "Ciphersuite is TLS-ECDHE-RSA-WITH-CHACHA20-POLY1305-SHA256" \
  881. -s "client hello v3, signature_algorithm ext: 6" \
  882. -s "ECDHE curve: secp521r1" \
  883. -S "error" \
  884. -C "error"
  885. run_test "Default, DTLS" \
  886. "$P_SRV dtls=1" \
  887. "$P_CLI dtls=1" \
  888. 0 \
  889. -s "Protocol is DTLSv1.2" \
  890. -s "Ciphersuite is TLS-ECDHE-RSA-WITH-CHACHA20-POLY1305-SHA256"
  891. requires_config_enabled MBEDTLS_ZLIB_SUPPORT
  892. run_test "Default (compression enabled)" \
  893. "$P_SRV debug_level=3" \
  894. "$P_CLI debug_level=3" \
  895. 0 \
  896. -s "Allocating compression buffer" \
  897. -c "Allocating compression buffer" \
  898. -s "Record expansion is unknown (compression)" \
  899. -c "Record expansion is unknown (compression)" \
  900. -S "error" \
  901. -C "error"
  902. # Test current time in ServerHello
  903. requires_config_enabled MBEDTLS_HAVE_TIME
  904. run_test "ServerHello contains gmt_unix_time" \
  905. "$P_SRV debug_level=3" \
  906. "$P_CLI debug_level=3" \
  907. 0 \
  908. -f "check_server_hello_time" \
  909. -F "check_server_hello_time"
  910. # Test for uniqueness of IVs in AEAD ciphersuites
  911. run_test "Unique IV in GCM" \
  912. "$P_SRV exchanges=20 debug_level=4" \
  913. "$P_CLI exchanges=20 debug_level=4 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384" \
  914. 0 \
  915. -u "IV used" \
  916. -U "IV used"
  917. # Tests for rc4 option
  918. requires_config_enabled MBEDTLS_REMOVE_ARC4_CIPHERSUITES
  919. run_test "RC4: server disabled, client enabled" \
  920. "$P_SRV" \
  921. "$P_CLI force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  922. 1 \
  923. -s "SSL - The server has no ciphersuites in common"
  924. requires_config_enabled MBEDTLS_REMOVE_ARC4_CIPHERSUITES
  925. run_test "RC4: server half, client enabled" \
  926. "$P_SRV arc4=1" \
  927. "$P_CLI force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  928. 1 \
  929. -s "SSL - The server has no ciphersuites in common"
  930. run_test "RC4: server enabled, client disabled" \
  931. "$P_SRV force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  932. "$P_CLI" \
  933. 1 \
  934. -s "SSL - The server has no ciphersuites in common"
  935. run_test "RC4: both enabled" \
  936. "$P_SRV force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  937. "$P_CLI force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  938. 0 \
  939. -S "SSL - None of the common ciphersuites is usable" \
  940. -S "SSL - The server has no ciphersuites in common"
  941. # Test empty CA list in CertificateRequest in TLS 1.1 and earlier
  942. requires_gnutls
  943. requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_1
  944. run_test "CertificateRequest with empty CA list, TLS 1.1 (GnuTLS server)" \
  945. "$G_SRV"\
  946. "$P_CLI force_version=tls1_1" \
  947. 0
  948. requires_gnutls
  949. requires_config_enabled MBEDTLS_SSL_PROTO_TLS1
  950. run_test "CertificateRequest with empty CA list, TLS 1.0 (GnuTLS server)" \
  951. "$G_SRV"\
  952. "$P_CLI force_version=tls1" \
  953. 0
  954. # Tests for SHA-1 support
  955. requires_config_disabled MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_CERTIFICATES
  956. run_test "SHA-1 forbidden by default in server certificate" \
  957. "$P_SRV key_file=data_files/server2.key crt_file=data_files/server2.crt" \
  958. "$P_CLI debug_level=2 allow_sha1=0" \
  959. 1 \
  960. -c "The certificate is signed with an unacceptable hash"
  961. requires_config_enabled MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_CERTIFICATES
  962. run_test "SHA-1 forbidden by default in server certificate" \
  963. "$P_SRV key_file=data_files/server2.key crt_file=data_files/server2.crt" \
  964. "$P_CLI debug_level=2 allow_sha1=0" \
  965. 0
  966. run_test "SHA-1 explicitly allowed in server certificate" \
  967. "$P_SRV key_file=data_files/server2.key crt_file=data_files/server2.crt" \
  968. "$P_CLI allow_sha1=1" \
  969. 0
  970. run_test "SHA-256 allowed by default in server certificate" \
  971. "$P_SRV key_file=data_files/server2.key crt_file=data_files/server2-sha256.crt" \
  972. "$P_CLI allow_sha1=0" \
  973. 0
  974. requires_config_disabled MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_CERTIFICATES
  975. run_test "SHA-1 forbidden by default in client certificate" \
  976. "$P_SRV auth_mode=required allow_sha1=0" \
  977. "$P_CLI key_file=data_files/cli-rsa.key crt_file=data_files/cli-rsa-sha1.crt" \
  978. 1 \
  979. -s "The certificate is signed with an unacceptable hash"
  980. requires_config_enabled MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_CERTIFICATES
  981. run_test "SHA-1 forbidden by default in client certificate" \
  982. "$P_SRV auth_mode=required allow_sha1=0" \
  983. "$P_CLI key_file=data_files/cli-rsa.key crt_file=data_files/cli-rsa-sha1.crt" \
  984. 0
  985. run_test "SHA-1 explicitly allowed in client certificate" \
  986. "$P_SRV auth_mode=required allow_sha1=1" \
  987. "$P_CLI key_file=data_files/cli-rsa.key crt_file=data_files/cli-rsa-sha1.crt" \
  988. 0
  989. run_test "SHA-256 allowed by default in client certificate" \
  990. "$P_SRV auth_mode=required allow_sha1=0" \
  991. "$P_CLI key_file=data_files/cli-rsa.key crt_file=data_files/cli-rsa-sha256.crt" \
  992. 0
  993. # Tests for datagram packing
  994. run_test "DTLS: multiple records in same datagram, client and server" \
  995. "$P_SRV dtls=1 dgram_packing=1 debug_level=2" \
  996. "$P_CLI dtls=1 dgram_packing=1 debug_level=2" \
  997. 0 \
  998. -c "next record in same datagram" \
  999. -s "next record in same datagram"
  1000. run_test "DTLS: multiple records in same datagram, client only" \
  1001. "$P_SRV dtls=1 dgram_packing=0 debug_level=2" \
  1002. "$P_CLI dtls=1 dgram_packing=1 debug_level=2" \
  1003. 0 \
  1004. -s "next record in same datagram" \
  1005. -C "next record in same datagram"
  1006. run_test "DTLS: multiple records in same datagram, server only" \
  1007. "$P_SRV dtls=1 dgram_packing=1 debug_level=2" \
  1008. "$P_CLI dtls=1 dgram_packing=0 debug_level=2" \
  1009. 0 \
  1010. -S "next record in same datagram" \
  1011. -c "next record in same datagram"
  1012. run_test "DTLS: multiple records in same datagram, neither client nor server" \
  1013. "$P_SRV dtls=1 dgram_packing=0 debug_level=2" \
  1014. "$P_CLI dtls=1 dgram_packing=0 debug_level=2" \
  1015. 0 \
  1016. -S "next record in same datagram" \
  1017. -C "next record in same datagram"
  1018. # Tests for Truncated HMAC extension
  1019. run_test "Truncated HMAC: client default, server default" \
  1020. "$P_SRV debug_level=4" \
  1021. "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
  1022. 0 \
  1023. -s "dumping 'expected mac' (20 bytes)" \
  1024. -S "dumping 'expected mac' (10 bytes)"
  1025. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  1026. run_test "Truncated HMAC: client disabled, server default" \
  1027. "$P_SRV debug_level=4" \
  1028. "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA trunc_hmac=0" \
  1029. 0 \
  1030. -s "dumping 'expected mac' (20 bytes)" \
  1031. -S "dumping 'expected mac' (10 bytes)"
  1032. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  1033. run_test "Truncated HMAC: client enabled, server default" \
  1034. "$P_SRV debug_level=4" \
  1035. "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA trunc_hmac=1" \
  1036. 0 \
  1037. -s "dumping 'expected mac' (20 bytes)" \
  1038. -S "dumping 'expected mac' (10 bytes)"
  1039. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  1040. run_test "Truncated HMAC: client enabled, server disabled" \
  1041. "$P_SRV debug_level=4 trunc_hmac=0" \
  1042. "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA trunc_hmac=1" \
  1043. 0 \
  1044. -s "dumping 'expected mac' (20 bytes)" \
  1045. -S "dumping 'expected mac' (10 bytes)"
  1046. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  1047. run_test "Truncated HMAC: client disabled, server enabled" \
  1048. "$P_SRV debug_level=4 trunc_hmac=1" \
  1049. "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA trunc_hmac=0" \
  1050. 0 \
  1051. -s "dumping 'expected mac' (20 bytes)" \
  1052. -S "dumping 'expected mac' (10 bytes)"
  1053. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  1054. run_test "Truncated HMAC: client enabled, server enabled" \
  1055. "$P_SRV debug_level=4 trunc_hmac=1" \
  1056. "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA trunc_hmac=1" \
  1057. 0 \
  1058. -S "dumping 'expected mac' (20 bytes)" \
  1059. -s "dumping 'expected mac' (10 bytes)"
  1060. run_test "Truncated HMAC, DTLS: client default, server default" \
  1061. "$P_SRV dtls=1 debug_level=4" \
  1062. "$P_CLI dtls=1 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
  1063. 0 \
  1064. -s "dumping 'expected mac' (20 bytes)" \
  1065. -S "dumping 'expected mac' (10 bytes)"
  1066. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  1067. run_test "Truncated HMAC, DTLS: client disabled, server default" \
  1068. "$P_SRV dtls=1 debug_level=4" \
  1069. "$P_CLI dtls=1 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA trunc_hmac=0" \
  1070. 0 \
  1071. -s "dumping 'expected mac' (20 bytes)" \
  1072. -S "dumping 'expected mac' (10 bytes)"
  1073. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  1074. run_test "Truncated HMAC, DTLS: client enabled, server default" \
  1075. "$P_SRV dtls=1 debug_level=4" \
  1076. "$P_CLI dtls=1 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA trunc_hmac=1" \
  1077. 0 \
  1078. -s "dumping 'expected mac' (20 bytes)" \
  1079. -S "dumping 'expected mac' (10 bytes)"
  1080. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  1081. run_test "Truncated HMAC, DTLS: client enabled, server disabled" \
  1082. "$P_SRV dtls=1 debug_level=4 trunc_hmac=0" \
  1083. "$P_CLI dtls=1 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA trunc_hmac=1" \
  1084. 0 \
  1085. -s "dumping 'expected mac' (20 bytes)" \
  1086. -S "dumping 'expected mac' (10 bytes)"
  1087. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  1088. run_test "Truncated HMAC, DTLS: client disabled, server enabled" \
  1089. "$P_SRV dtls=1 debug_level=4 trunc_hmac=1" \
  1090. "$P_CLI dtls=1 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA trunc_hmac=0" \
  1091. 0 \
  1092. -s "dumping 'expected mac' (20 bytes)" \
  1093. -S "dumping 'expected mac' (10 bytes)"
  1094. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  1095. run_test "Truncated HMAC, DTLS: client enabled, server enabled" \
  1096. "$P_SRV dtls=1 debug_level=4 trunc_hmac=1" \
  1097. "$P_CLI dtls=1 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA trunc_hmac=1" \
  1098. 0 \
  1099. -S "dumping 'expected mac' (20 bytes)" \
  1100. -s "dumping 'expected mac' (10 bytes)"
  1101. # Tests for Encrypt-then-MAC extension
  1102. run_test "Encrypt then MAC: default" \
  1103. "$P_SRV debug_level=3 \
  1104. force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
  1105. "$P_CLI debug_level=3" \
  1106. 0 \
  1107. -c "client hello, adding encrypt_then_mac extension" \
  1108. -s "found encrypt then mac extension" \
  1109. -s "server hello, adding encrypt then mac extension" \
  1110. -c "found encrypt_then_mac extension" \
  1111. -c "using encrypt then mac" \
  1112. -s "using encrypt then mac"
  1113. run_test "Encrypt then MAC: client enabled, server disabled" \
  1114. "$P_SRV debug_level=3 etm=0 \
  1115. force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
  1116. "$P_CLI debug_level=3 etm=1" \
  1117. 0 \
  1118. -c "client hello, adding encrypt_then_mac extension" \
  1119. -s "found encrypt then mac extension" \
  1120. -S "server hello, adding encrypt then mac extension" \
  1121. -C "found encrypt_then_mac extension" \
  1122. -C "using encrypt then mac" \
  1123. -S "using encrypt then mac"
  1124. run_test "Encrypt then MAC: client enabled, aead cipher" \
  1125. "$P_SRV debug_level=3 etm=1 \
  1126. force_ciphersuite=TLS-RSA-WITH-AES-128-GCM-SHA256" \
  1127. "$P_CLI debug_level=3 etm=1" \
  1128. 0 \
  1129. -c "client hello, adding encrypt_then_mac extension" \
  1130. -s "found encrypt then mac extension" \
  1131. -S "server hello, adding encrypt then mac extension" \
  1132. -C "found encrypt_then_mac extension" \
  1133. -C "using encrypt then mac" \
  1134. -S "using encrypt then mac"
  1135. run_test "Encrypt then MAC: client enabled, stream cipher" \
  1136. "$P_SRV debug_level=3 etm=1 \
  1137. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  1138. "$P_CLI debug_level=3 etm=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  1139. 0 \
  1140. -c "client hello, adding encrypt_then_mac extension" \
  1141. -s "found encrypt then mac extension" \
  1142. -S "server hello, adding encrypt then mac extension" \
  1143. -C "found encrypt_then_mac extension" \
  1144. -C "using encrypt then mac" \
  1145. -S "using encrypt then mac"
  1146. run_test "Encrypt then MAC: client disabled, server enabled" \
  1147. "$P_SRV debug_level=3 etm=1 \
  1148. force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
  1149. "$P_CLI debug_level=3 etm=0" \
  1150. 0 \
  1151. -C "client hello, adding encrypt_then_mac extension" \
  1152. -S "found encrypt then mac extension" \
  1153. -S "server hello, adding encrypt then mac extension" \
  1154. -C "found encrypt_then_mac extension" \
  1155. -C "using encrypt then mac" \
  1156. -S "using encrypt then mac"
  1157. requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
  1158. run_test "Encrypt then MAC: client SSLv3, server enabled" \
  1159. "$P_SRV debug_level=3 min_version=ssl3 \
  1160. force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
  1161. "$P_CLI debug_level=3 force_version=ssl3" \
  1162. 0 \
  1163. -C "client hello, adding encrypt_then_mac extension" \
  1164. -S "found encrypt then mac extension" \
  1165. -S "server hello, adding encrypt then mac extension" \
  1166. -C "found encrypt_then_mac extension" \
  1167. -C "using encrypt then mac" \
  1168. -S "using encrypt then mac"
  1169. requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
  1170. run_test "Encrypt then MAC: client enabled, server SSLv3" \
  1171. "$P_SRV debug_level=3 force_version=ssl3 \
  1172. force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
  1173. "$P_CLI debug_level=3 min_version=ssl3" \
  1174. 0 \
  1175. -c "client hello, adding encrypt_then_mac extension" \
  1176. -S "found encrypt then mac extension" \
  1177. -S "server hello, adding encrypt then mac extension" \
  1178. -C "found encrypt_then_mac extension" \
  1179. -C "using encrypt then mac" \
  1180. -S "using encrypt then mac"
  1181. # Tests for Extended Master Secret extension
  1182. run_test "Extended Master Secret: default" \
  1183. "$P_SRV debug_level=3" \
  1184. "$P_CLI debug_level=3" \
  1185. 0 \
  1186. -c "client hello, adding extended_master_secret extension" \
  1187. -s "found extended master secret extension" \
  1188. -s "server hello, adding extended master secret extension" \
  1189. -c "found extended_master_secret extension" \
  1190. -c "using extended master secret" \
  1191. -s "using extended master secret"
  1192. run_test "Extended Master Secret: client enabled, server disabled" \
  1193. "$P_SRV debug_level=3 extended_ms=0" \
  1194. "$P_CLI debug_level=3 extended_ms=1" \
  1195. 0 \
  1196. -c "client hello, adding extended_master_secret extension" \
  1197. -s "found extended master secret extension" \
  1198. -S "server hello, adding extended master secret extension" \
  1199. -C "found extended_master_secret extension" \
  1200. -C "using extended master secret" \
  1201. -S "using extended master secret"
  1202. run_test "Extended Master Secret: client disabled, server enabled" \
  1203. "$P_SRV debug_level=3 extended_ms=1" \
  1204. "$P_CLI debug_level=3 extended_ms=0" \
  1205. 0 \
  1206. -C "client hello, adding extended_master_secret extension" \
  1207. -S "found extended master secret extension" \
  1208. -S "server hello, adding extended master secret extension" \
  1209. -C "found extended_master_secret extension" \
  1210. -C "using extended master secret" \
  1211. -S "using extended master secret"
  1212. requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
  1213. run_test "Extended Master Secret: client SSLv3, server enabled" \
  1214. "$P_SRV debug_level=3 min_version=ssl3" \
  1215. "$P_CLI debug_level=3 force_version=ssl3" \
  1216. 0 \
  1217. -C "client hello, adding extended_master_secret extension" \
  1218. -S "found extended master secret extension" \
  1219. -S "server hello, adding extended master secret extension" \
  1220. -C "found extended_master_secret extension" \
  1221. -C "using extended master secret" \
  1222. -S "using extended master secret"
  1223. requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
  1224. run_test "Extended Master Secret: client enabled, server SSLv3" \
  1225. "$P_SRV debug_level=3 force_version=ssl3" \
  1226. "$P_CLI debug_level=3 min_version=ssl3" \
  1227. 0 \
  1228. -c "client hello, adding extended_master_secret extension" \
  1229. -S "found extended master secret extension" \
  1230. -S "server hello, adding extended master secret extension" \
  1231. -C "found extended_master_secret extension" \
  1232. -C "using extended master secret" \
  1233. -S "using extended master secret"
  1234. # Tests for FALLBACK_SCSV
  1235. run_test "Fallback SCSV: default" \
  1236. "$P_SRV debug_level=2" \
  1237. "$P_CLI debug_level=3 force_version=tls1_1" \
  1238. 0 \
  1239. -C "adding FALLBACK_SCSV" \
  1240. -S "received FALLBACK_SCSV" \
  1241. -S "inapropriate fallback" \
  1242. -C "is a fatal alert message (msg 86)"
  1243. run_test "Fallback SCSV: explicitly disabled" \
  1244. "$P_SRV debug_level=2" \
  1245. "$P_CLI debug_level=3 force_version=tls1_1 fallback=0" \
  1246. 0 \
  1247. -C "adding FALLBACK_SCSV" \
  1248. -S "received FALLBACK_SCSV" \
  1249. -S "inapropriate fallback" \
  1250. -C "is a fatal alert message (msg 86)"
  1251. run_test "Fallback SCSV: enabled" \
  1252. "$P_SRV debug_level=2" \
  1253. "$P_CLI debug_level=3 force_version=tls1_1 fallback=1" \
  1254. 1 \
  1255. -c "adding FALLBACK_SCSV" \
  1256. -s "received FALLBACK_SCSV" \
  1257. -s "inapropriate fallback" \
  1258. -c "is a fatal alert message (msg 86)"
  1259. run_test "Fallback SCSV: enabled, max version" \
  1260. "$P_SRV debug_level=2" \
  1261. "$P_CLI debug_level=3 fallback=1" \
  1262. 0 \
  1263. -c "adding FALLBACK_SCSV" \
  1264. -s "received FALLBACK_SCSV" \
  1265. -S "inapropriate fallback" \
  1266. -C "is a fatal alert message (msg 86)"
  1267. requires_openssl_with_fallback_scsv
  1268. run_test "Fallback SCSV: default, openssl server" \
  1269. "$O_SRV" \
  1270. "$P_CLI debug_level=3 force_version=tls1_1 fallback=0" \
  1271. 0 \
  1272. -C "adding FALLBACK_SCSV" \
  1273. -C "is a fatal alert message (msg 86)"
  1274. requires_openssl_with_fallback_scsv
  1275. run_test "Fallback SCSV: enabled, openssl server" \
  1276. "$O_SRV" \
  1277. "$P_CLI debug_level=3 force_version=tls1_1 fallback=1" \
  1278. 1 \
  1279. -c "adding FALLBACK_SCSV" \
  1280. -c "is a fatal alert message (msg 86)"
  1281. requires_openssl_with_fallback_scsv
  1282. run_test "Fallback SCSV: disabled, openssl client" \
  1283. "$P_SRV debug_level=2" \
  1284. "$O_CLI -tls1_1" \
  1285. 0 \
  1286. -S "received FALLBACK_SCSV" \
  1287. -S "inapropriate fallback"
  1288. requires_openssl_with_fallback_scsv
  1289. run_test "Fallback SCSV: enabled, openssl client" \
  1290. "$P_SRV debug_level=2" \
  1291. "$O_CLI -tls1_1 -fallback_scsv" \
  1292. 1 \
  1293. -s "received FALLBACK_SCSV" \
  1294. -s "inapropriate fallback"
  1295. requires_openssl_with_fallback_scsv
  1296. run_test "Fallback SCSV: enabled, max version, openssl client" \
  1297. "$P_SRV debug_level=2" \
  1298. "$O_CLI -fallback_scsv" \
  1299. 0 \
  1300. -s "received FALLBACK_SCSV" \
  1301. -S "inapropriate fallback"
  1302. # Test sending and receiving empty application data records
  1303. run_test "Encrypt then MAC: empty application data record" \
  1304. "$P_SRV auth_mode=none debug_level=4 etm=1" \
  1305. "$P_CLI auth_mode=none etm=1 request_size=0 force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA" \
  1306. 0 \
  1307. -S "0000: 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f" \
  1308. -s "dumping 'input payload after decrypt' (0 bytes)" \
  1309. -c "0 bytes written in 1 fragments"
  1310. run_test "Encrypt then MAC: disabled, empty application data record" \
  1311. "$P_SRV auth_mode=none debug_level=4 etm=0" \
  1312. "$P_CLI auth_mode=none etm=0 request_size=0" \
  1313. 0 \
  1314. -s "dumping 'input payload after decrypt' (0 bytes)" \
  1315. -c "0 bytes written in 1 fragments"
  1316. run_test "Encrypt then MAC, DTLS: empty application data record" \
  1317. "$P_SRV auth_mode=none debug_level=4 etm=1 dtls=1" \
  1318. "$P_CLI auth_mode=none etm=1 request_size=0 force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA dtls=1" \
  1319. 0 \
  1320. -S "0000: 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f" \
  1321. -s "dumping 'input payload after decrypt' (0 bytes)" \
  1322. -c "0 bytes written in 1 fragments"
  1323. run_test "Encrypt then MAC, DTLS: disabled, empty application data record" \
  1324. "$P_SRV auth_mode=none debug_level=4 etm=0 dtls=1" \
  1325. "$P_CLI auth_mode=none etm=0 request_size=0 dtls=1" \
  1326. 0 \
  1327. -s "dumping 'input payload after decrypt' (0 bytes)" \
  1328. -c "0 bytes written in 1 fragments"
  1329. ## ClientHello generated with
  1330. ## "openssl s_client -CAfile tests/data_files/test-ca.crt -tls1_1 -connect localhost:4433 -cipher ..."
  1331. ## then manually twiddling the ciphersuite list.
  1332. ## The ClientHello content is spelled out below as a hex string as
  1333. ## "prefix ciphersuite1 ciphersuite2 ciphersuite3 ciphersuite4 suffix".
  1334. ## The expected response is an inappropriate_fallback alert.
  1335. requires_openssl_with_fallback_scsv
  1336. run_test "Fallback SCSV: beginning of list" \
  1337. "$P_SRV debug_level=2" \
  1338. "$TCP_CLIENT localhost $SRV_PORT '160301003e0100003a03022aafb94308dc22ca1086c65acc00e414384d76b61ecab37df1633b1ae1034dbe000008 5600 0031 0032 0033 0100000900230000000f000101' '15030200020256'" \
  1339. 0 \
  1340. -s "received FALLBACK_SCSV" \
  1341. -s "inapropriate fallback"
  1342. requires_openssl_with_fallback_scsv
  1343. run_test "Fallback SCSV: end of list" \
  1344. "$P_SRV debug_level=2" \
  1345. "$TCP_CLIENT localhost $SRV_PORT '160301003e0100003a03022aafb94308dc22ca1086c65acc00e414384d76b61ecab37df1633b1ae1034dbe000008 0031 0032 0033 5600 0100000900230000000f000101' '15030200020256'" \
  1346. 0 \
  1347. -s "received FALLBACK_SCSV" \
  1348. -s "inapropriate fallback"
  1349. ## Here the expected response is a valid ServerHello prefix, up to the random.
  1350. requires_openssl_with_fallback_scsv
  1351. run_test "Fallback SCSV: not in list" \
  1352. "$P_SRV debug_level=2" \
  1353. "$TCP_CLIENT localhost $SRV_PORT '160301003e0100003a03022aafb94308dc22ca1086c65acc00e414384d76b61ecab37df1633b1ae1034dbe000008 0056 0031 0032 0033 0100000900230000000f000101' '16030200300200002c0302'" \
  1354. 0 \
  1355. -S "received FALLBACK_SCSV" \
  1356. -S "inapropriate fallback"
  1357. # Tests for CBC 1/n-1 record splitting
  1358. run_test "CBC Record splitting: TLS 1.2, no splitting" \
  1359. "$P_SRV" \
  1360. "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \
  1361. request_size=123 force_version=tls1_2" \
  1362. 0 \
  1363. -s "Read from client: 123 bytes read" \
  1364. -S "Read from client: 1 bytes read" \
  1365. -S "122 bytes read"
  1366. run_test "CBC Record splitting: TLS 1.1, no splitting" \
  1367. "$P_SRV" \
  1368. "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \
  1369. request_size=123 force_version=tls1_1" \
  1370. 0 \
  1371. -s "Read from client: 123 bytes read" \
  1372. -S "Read from client: 1 bytes read" \
  1373. -S "122 bytes read"
  1374. run_test "CBC Record splitting: TLS 1.0, splitting" \
  1375. "$P_SRV" \
  1376. "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \
  1377. request_size=123 force_version=tls1" \
  1378. 0 \
  1379. -S "Read from client: 123 bytes read" \
  1380. -s "Read from client: 1 bytes read" \
  1381. -s "122 bytes read"
  1382. requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
  1383. run_test "CBC Record splitting: SSLv3, splitting" \
  1384. "$P_SRV min_version=ssl3" \
  1385. "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \
  1386. request_size=123 force_version=ssl3" \
  1387. 0 \
  1388. -S "Read from client: 123 bytes read" \
  1389. -s "Read from client: 1 bytes read" \
  1390. -s "122 bytes read"
  1391. run_test "CBC Record splitting: TLS 1.0 RC4, no splitting" \
  1392. "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  1393. "$P_CLI force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \
  1394. request_size=123 force_version=tls1" \
  1395. 0 \
  1396. -s "Read from client: 123 bytes read" \
  1397. -S "Read from client: 1 bytes read" \
  1398. -S "122 bytes read"
  1399. run_test "CBC Record splitting: TLS 1.0, splitting disabled" \
  1400. "$P_SRV" \
  1401. "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \
  1402. request_size=123 force_version=tls1 recsplit=0" \
  1403. 0 \
  1404. -s "Read from client: 123 bytes read" \
  1405. -S "Read from client: 1 bytes read" \
  1406. -S "122 bytes read"
  1407. run_test "CBC Record splitting: TLS 1.0, splitting, nbio" \
  1408. "$P_SRV nbio=2" \
  1409. "$P_CLI nbio=2 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \
  1410. request_size=123 force_version=tls1" \
  1411. 0 \
  1412. -S "Read from client: 123 bytes read" \
  1413. -s "Read from client: 1 bytes read" \
  1414. -s "122 bytes read"
  1415. # Tests for Session Tickets
  1416. run_test "Session resume using tickets: basic" \
  1417. "$P_SRV debug_level=3 tickets=1" \
  1418. "$P_CLI debug_level=3 tickets=1 reconnect=1" \
  1419. 0 \
  1420. -c "client hello, adding session ticket extension" \
  1421. -s "found session ticket extension" \
  1422. -s "server hello, adding session ticket extension" \
  1423. -c "found session_ticket extension" \
  1424. -c "parse new session ticket" \
  1425. -S "session successfully restored from cache" \
  1426. -s "session successfully restored from ticket" \
  1427. -s "a session has been resumed" \
  1428. -c "a session has been resumed"
  1429. run_test "Session resume using tickets: cache disabled" \
  1430. "$P_SRV debug_level=3 tickets=1 cache_max=0" \
  1431. "$P_CLI debug_level=3 tickets=1 reconnect=1" \
  1432. 0 \
  1433. -c "client hello, adding session ticket extension" \
  1434. -s "found session ticket extension" \
  1435. -s "server hello, adding session ticket extension" \
  1436. -c "found session_ticket extension" \
  1437. -c "parse new session ticket" \
  1438. -S "session successfully restored from cache" \
  1439. -s "session successfully restored from ticket" \
  1440. -s "a session has been resumed" \
  1441. -c "a session has been resumed"
  1442. run_test "Session resume using tickets: timeout" \
  1443. "$P_SRV debug_level=3 tickets=1 cache_max=0 ticket_timeout=1" \
  1444. "$P_CLI debug_level=3 tickets=1 reconnect=1 reco_delay=2" \
  1445. 0 \
  1446. -c "client hello, adding session ticket extension" \
  1447. -s "found session ticket extension" \
  1448. -s "server hello, adding session ticket extension" \
  1449. -c "found session_ticket extension" \
  1450. -c "parse new session ticket" \
  1451. -S "session successfully restored from cache" \
  1452. -S "session successfully restored from ticket" \
  1453. -S "a session has been resumed" \
  1454. -C "a session has been resumed"
  1455. run_test "Session resume using tickets: openssl server" \
  1456. "$O_SRV" \
  1457. "$P_CLI debug_level=3 tickets=1 reconnect=1" \
  1458. 0 \
  1459. -c "client hello, adding session ticket extension" \
  1460. -c "found session_ticket extension" \
  1461. -c "parse new session ticket" \
  1462. -c "a session has been resumed"
  1463. run_test "Session resume using tickets: openssl client" \
  1464. "$P_SRV debug_level=3 tickets=1" \
  1465. "( $O_CLI -sess_out $SESSION; \
  1466. $O_CLI -sess_in $SESSION; \
  1467. rm -f $SESSION )" \
  1468. 0 \
  1469. -s "found session ticket extension" \
  1470. -s "server hello, adding session ticket extension" \
  1471. -S "session successfully restored from cache" \
  1472. -s "session successfully restored from ticket" \
  1473. -s "a session has been resumed"
  1474. # Tests for Session Tickets with DTLS
  1475. run_test "Session resume using tickets, DTLS: basic" \
  1476. "$P_SRV debug_level=3 dtls=1 tickets=1" \
  1477. "$P_CLI debug_level=3 dtls=1 tickets=1 reconnect=1 skip_close_notify=1" \
  1478. 0 \
  1479. -c "client hello, adding session ticket extension" \
  1480. -s "found session ticket extension" \
  1481. -s "server hello, adding session ticket extension" \
  1482. -c "found session_ticket extension" \
  1483. -c "parse new session ticket" \
  1484. -S "session successfully restored from cache" \
  1485. -s "session successfully restored from ticket" \
  1486. -s "a session has been resumed" \
  1487. -c "a session has been resumed"
  1488. run_test "Session resume using tickets, DTLS: cache disabled" \
  1489. "$P_SRV debug_level=3 dtls=1 tickets=1 cache_max=0" \
  1490. "$P_CLI debug_level=3 dtls=1 tickets=1 reconnect=1 skip_close_notify=1" \
  1491. 0 \
  1492. -c "client hello, adding session ticket extension" \
  1493. -s "found session ticket extension" \
  1494. -s "server hello, adding session ticket extension" \
  1495. -c "found session_ticket extension" \
  1496. -c "parse new session ticket" \
  1497. -S "session successfully restored from cache" \
  1498. -s "session successfully restored from ticket" \
  1499. -s "a session has been resumed" \
  1500. -c "a session has been resumed"
  1501. run_test "Session resume using tickets, DTLS: timeout" \
  1502. "$P_SRV debug_level=3 dtls=1 tickets=1 cache_max=0 ticket_timeout=1" \
  1503. "$P_CLI debug_level=3 dtls=1 tickets=1 reconnect=1 skip_close_notify=1 reco_delay=2" \
  1504. 0 \
  1505. -c "client hello, adding session ticket extension" \
  1506. -s "found session ticket extension" \
  1507. -s "server hello, adding session ticket extension" \
  1508. -c "found session_ticket extension" \
  1509. -c "parse new session ticket" \
  1510. -S "session successfully restored from cache" \
  1511. -S "session successfully restored from ticket" \
  1512. -S "a session has been resumed" \
  1513. -C "a session has been resumed"
  1514. run_test "Session resume using tickets, DTLS: openssl server" \
  1515. "$O_SRV -dtls1" \
  1516. "$P_CLI dtls=1 debug_level=3 tickets=1 reconnect=1" \
  1517. 0 \
  1518. -c "client hello, adding session ticket extension" \
  1519. -c "found session_ticket extension" \
  1520. -c "parse new session ticket" \
  1521. -c "a session has been resumed"
  1522. run_test "Session resume using tickets, DTLS: openssl client" \
  1523. "$P_SRV dtls=1 debug_level=3 tickets=1" \
  1524. "( $O_CLI -dtls1 -sess_out $SESSION; \
  1525. $O_CLI -dtls1 -sess_in $SESSION; \
  1526. rm -f $SESSION )" \
  1527. 0 \
  1528. -s "found session ticket extension" \
  1529. -s "server hello, adding session ticket extension" \
  1530. -S "session successfully restored from cache" \
  1531. -s "session successfully restored from ticket" \
  1532. -s "a session has been resumed"
  1533. # Tests for Session Resume based on session-ID and cache
  1534. run_test "Session resume using cache: tickets enabled on client" \
  1535. "$P_SRV debug_level=3 tickets=0" \
  1536. "$P_CLI debug_level=3 tickets=1 reconnect=1" \
  1537. 0 \
  1538. -c "client hello, adding session ticket extension" \
  1539. -s "found session ticket extension" \
  1540. -S "server hello, adding session ticket extension" \
  1541. -C "found session_ticket extension" \
  1542. -C "parse new session ticket" \
  1543. -s "session successfully restored from cache" \
  1544. -S "session successfully restored from ticket" \
  1545. -s "a session has been resumed" \
  1546. -c "a session has been resumed"
  1547. run_test "Session resume using cache: tickets enabled on server" \
  1548. "$P_SRV debug_level=3 tickets=1" \
  1549. "$P_CLI debug_level=3 tickets=0 reconnect=1" \
  1550. 0 \
  1551. -C "client hello, adding session ticket extension" \
  1552. -S "found session ticket extension" \
  1553. -S "server hello, adding session ticket extension" \
  1554. -C "found session_ticket extension" \
  1555. -C "parse new session ticket" \
  1556. -s "session successfully restored from cache" \
  1557. -S "session successfully restored from ticket" \
  1558. -s "a session has been resumed" \
  1559. -c "a session has been resumed"
  1560. run_test "Session resume using cache: cache_max=0" \
  1561. "$P_SRV debug_level=3 tickets=0 cache_max=0" \
  1562. "$P_CLI debug_level=3 tickets=0 reconnect=1" \
  1563. 0 \
  1564. -S "session successfully restored from cache" \
  1565. -S "session successfully restored from ticket" \
  1566. -S "a session has been resumed" \
  1567. -C "a session has been resumed"
  1568. run_test "Session resume using cache: cache_max=1" \
  1569. "$P_SRV debug_level=3 tickets=0 cache_max=1" \
  1570. "$P_CLI debug_level=3 tickets=0 reconnect=1" \
  1571. 0 \
  1572. -s "session successfully restored from cache" \
  1573. -S "session successfully restored from ticket" \
  1574. -s "a session has been resumed" \
  1575. -c "a session has been resumed"
  1576. run_test "Session resume using cache: timeout > delay" \
  1577. "$P_SRV debug_level=3 tickets=0" \
  1578. "$P_CLI debug_level=3 tickets=0 reconnect=1 reco_delay=0" \
  1579. 0 \
  1580. -s "session successfully restored from cache" \
  1581. -S "session successfully restored from ticket" \
  1582. -s "a session has been resumed" \
  1583. -c "a session has been resumed"
  1584. run_test "Session resume using cache: timeout < delay" \
  1585. "$P_SRV debug_level=3 tickets=0 cache_timeout=1" \
  1586. "$P_CLI debug_level=3 tickets=0 reconnect=1 reco_delay=2" \
  1587. 0 \
  1588. -S "session successfully restored from cache" \
  1589. -S "session successfully restored from ticket" \
  1590. -S "a session has been resumed" \
  1591. -C "a session has been resumed"
  1592. run_test "Session resume using cache: no timeout" \
  1593. "$P_SRV debug_level=3 tickets=0 cache_timeout=0" \
  1594. "$P_CLI debug_level=3 tickets=0 reconnect=1 reco_delay=2" \
  1595. 0 \
  1596. -s "session successfully restored from cache" \
  1597. -S "session successfully restored from ticket" \
  1598. -s "a session has been resumed" \
  1599. -c "a session has been resumed"
  1600. run_test "Session resume using cache: openssl client" \
  1601. "$P_SRV debug_level=3 tickets=0" \
  1602. "( $O_CLI -sess_out $SESSION; \
  1603. $O_CLI -sess_in $SESSION; \
  1604. rm -f $SESSION )" \
  1605. 0 \
  1606. -s "found session ticket extension" \
  1607. -S "server hello, adding session ticket extension" \
  1608. -s "session successfully restored from cache" \
  1609. -S "session successfully restored from ticket" \
  1610. -s "a session has been resumed"
  1611. run_test "Session resume using cache: openssl server" \
  1612. "$O_SRV" \
  1613. "$P_CLI debug_level=3 tickets=0 reconnect=1" \
  1614. 0 \
  1615. -C "found session_ticket extension" \
  1616. -C "parse new session ticket" \
  1617. -c "a session has been resumed"
  1618. # Tests for Session Resume based on session-ID and cache, DTLS
  1619. run_test "Session resume using cache, DTLS: tickets enabled on client" \
  1620. "$P_SRV dtls=1 debug_level=3 tickets=0" \
  1621. "$P_CLI dtls=1 debug_level=3 tickets=1 reconnect=1 skip_close_notify=1" \
  1622. 0 \
  1623. -c "client hello, adding session ticket extension" \
  1624. -s "found session ticket extension" \
  1625. -S "server hello, adding session ticket extension" \
  1626. -C "found session_ticket extension" \
  1627. -C "parse new session ticket" \
  1628. -s "session successfully restored from cache" \
  1629. -S "session successfully restored from ticket" \
  1630. -s "a session has been resumed" \
  1631. -c "a session has been resumed"
  1632. run_test "Session resume using cache, DTLS: tickets enabled on server" \
  1633. "$P_SRV dtls=1 debug_level=3 tickets=1" \
  1634. "$P_CLI dtls=1 debug_level=3 tickets=0 reconnect=1 skip_close_notify=1" \
  1635. 0 \
  1636. -C "client hello, adding session ticket extension" \
  1637. -S "found session ticket extension" \
  1638. -S "server hello, adding session ticket extension" \
  1639. -C "found session_ticket extension" \
  1640. -C "parse new session ticket" \
  1641. -s "session successfully restored from cache" \
  1642. -S "session successfully restored from ticket" \
  1643. -s "a session has been resumed" \
  1644. -c "a session has been resumed"
  1645. run_test "Session resume using cache, DTLS: cache_max=0" \
  1646. "$P_SRV dtls=1 debug_level=3 tickets=0 cache_max=0" \
  1647. "$P_CLI dtls=1 debug_level=3 tickets=0 reconnect=1 skip_close_notify=1" \
  1648. 0 \
  1649. -S "session successfully restored from cache" \
  1650. -S "session successfully restored from ticket" \
  1651. -S "a session has been resumed" \
  1652. -C "a session has been resumed"
  1653. run_test "Session resume using cache, DTLS: cache_max=1" \
  1654. "$P_SRV dtls=1 debug_level=3 tickets=0 cache_max=1" \
  1655. "$P_CLI dtls=1 debug_level=3 tickets=0 reconnect=1 skip_close_notify=1" \
  1656. 0 \
  1657. -s "session successfully restored from cache" \
  1658. -S "session successfully restored from ticket" \
  1659. -s "a session has been resumed" \
  1660. -c "a session has been resumed"
  1661. run_test "Session resume using cache, DTLS: timeout > delay" \
  1662. "$P_SRV dtls=1 debug_level=3 tickets=0" \
  1663. "$P_CLI dtls=1 debug_level=3 tickets=0 reconnect=1 skip_close_notify=1 reco_delay=0" \
  1664. 0 \
  1665. -s "session successfully restored from cache" \
  1666. -S "session successfully restored from ticket" \
  1667. -s "a session has been resumed" \
  1668. -c "a session has been resumed"
  1669. run_test "Session resume using cache, DTLS: timeout < delay" \
  1670. "$P_SRV dtls=1 debug_level=3 tickets=0 cache_timeout=1" \
  1671. "$P_CLI dtls=1 debug_level=3 tickets=0 reconnect=1 skip_close_notify=1 reco_delay=2" \
  1672. 0 \
  1673. -S "session successfully restored from cache" \
  1674. -S "session successfully restored from ticket" \
  1675. -S "a session has been resumed" \
  1676. -C "a session has been resumed"
  1677. run_test "Session resume using cache, DTLS: no timeout" \
  1678. "$P_SRV dtls=1 debug_level=3 tickets=0 cache_timeout=0" \
  1679. "$P_CLI dtls=1 debug_level=3 tickets=0 reconnect=1 skip_close_notify=1 reco_delay=2" \
  1680. 0 \
  1681. -s "session successfully restored from cache" \
  1682. -S "session successfully restored from ticket" \
  1683. -s "a session has been resumed" \
  1684. -c "a session has been resumed"
  1685. run_test "Session resume using cache, DTLS: openssl client" \
  1686. "$P_SRV dtls=1 debug_level=3 tickets=0" \
  1687. "( $O_CLI -dtls1 -sess_out $SESSION; \
  1688. $O_CLI -dtls1 -sess_in $SESSION; \
  1689. rm -f $SESSION )" \
  1690. 0 \
  1691. -s "found session ticket extension" \
  1692. -S "server hello, adding session ticket extension" \
  1693. -s "session successfully restored from cache" \
  1694. -S "session successfully restored from ticket" \
  1695. -s "a session has been resumed"
  1696. run_test "Session resume using cache, DTLS: openssl server" \
  1697. "$O_SRV -dtls1" \
  1698. "$P_CLI dtls=1 debug_level=3 tickets=0 reconnect=1" \
  1699. 0 \
  1700. -C "found session_ticket extension" \
  1701. -C "parse new session ticket" \
  1702. -c "a session has been resumed"
  1703. # Tests for Max Fragment Length extension
  1704. if [ "$MAX_CONTENT_LEN" -lt "4096" ]; then
  1705. printf '%s defines MBEDTLS_SSL_MAX_CONTENT_LEN to be less than 4096. Fragment length tests will fail.\n' "${CONFIG_H}"
  1706. exit 1
  1707. fi
  1708. if [ $MAX_CONTENT_LEN -ne 16384 ]; then
  1709. echo "Using non-default maximum content length $MAX_CONTENT_LEN"
  1710. fi
  1711. requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
  1712. run_test "Max fragment length: enabled, default" \
  1713. "$P_SRV debug_level=3" \
  1714. "$P_CLI debug_level=3" \
  1715. 0 \
  1716. -c "Maximum fragment length is $MAX_CONTENT_LEN" \
  1717. -s "Maximum fragment length is $MAX_CONTENT_LEN" \
  1718. -C "client hello, adding max_fragment_length extension" \
  1719. -S "found max fragment length extension" \
  1720. -S "server hello, max_fragment_length extension" \
  1721. -C "found max_fragment_length extension"
  1722. requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
  1723. run_test "Max fragment length: enabled, default, larger message" \
  1724. "$P_SRV debug_level=3" \
  1725. "$P_CLI debug_level=3 request_size=$(( $MAX_CONTENT_LEN + 1))" \
  1726. 0 \
  1727. -c "Maximum fragment length is $MAX_CONTENT_LEN" \
  1728. -s "Maximum fragment length is $MAX_CONTENT_LEN" \
  1729. -C "client hello, adding max_fragment_length extension" \
  1730. -S "found max fragment length extension" \
  1731. -S "server hello, max_fragment_length extension" \
  1732. -C "found max_fragment_length extension" \
  1733. -c "$(( $MAX_CONTENT_LEN + 1)) bytes written in 2 fragments" \
  1734. -s "$MAX_CONTENT_LEN bytes read" \
  1735. -s "1 bytes read"
  1736. requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
  1737. run_test "Max fragment length, DTLS: enabled, default, larger message" \
  1738. "$P_SRV debug_level=3 dtls=1" \
  1739. "$P_CLI debug_level=3 dtls=1 request_size=$(( $MAX_CONTENT_LEN + 1))" \
  1740. 1 \
  1741. -c "Maximum fragment length is $MAX_CONTENT_LEN" \
  1742. -s "Maximum fragment length is $MAX_CONTENT_LEN" \
  1743. -C "client hello, adding max_fragment_length extension" \
  1744. -S "found max fragment length extension" \
  1745. -S "server hello, max_fragment_length extension" \
  1746. -C "found max_fragment_length extension" \
  1747. -c "fragment larger than.*maximum "
  1748. # Run some tests with MBEDTLS_SSL_MAX_FRAGMENT_LENGTH disabled
  1749. # (session fragment length will be 16384 regardless of mbedtls
  1750. # content length configuration.)
  1751. requires_config_disabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
  1752. run_test "Max fragment length: disabled, larger message" \
  1753. "$P_SRV debug_level=3" \
  1754. "$P_CLI debug_level=3 request_size=$(( $MAX_CONTENT_LEN + 1))" \
  1755. 0 \
  1756. -C "Maximum fragment length is 16384" \
  1757. -S "Maximum fragment length is 16384" \
  1758. -c "$(( $MAX_CONTENT_LEN + 1)) bytes written in 2 fragments" \
  1759. -s "$MAX_CONTENT_LEN bytes read" \
  1760. -s "1 bytes read"
  1761. requires_config_disabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
  1762. run_test "Max fragment length DTLS: disabled, larger message" \
  1763. "$P_SRV debug_level=3 dtls=1" \
  1764. "$P_CLI debug_level=3 dtls=1 request_size=$(( $MAX_CONTENT_LEN + 1))" \
  1765. 1 \
  1766. -C "Maximum fragment length is 16384" \
  1767. -S "Maximum fragment length is 16384" \
  1768. -c "fragment larger than.*maximum "
  1769. requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
  1770. run_test "Max fragment length: used by client" \
  1771. "$P_SRV debug_level=3" \
  1772. "$P_CLI debug_level=3 max_frag_len=4096" \
  1773. 0 \
  1774. -c "Maximum fragment length is 4096" \
  1775. -s "Maximum fragment length is 4096" \
  1776. -c "client hello, adding max_fragment_length extension" \
  1777. -s "found max fragment length extension" \
  1778. -s "server hello, max_fragment_length extension" \
  1779. -c "found max_fragment_length extension"
  1780. requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
  1781. run_test "Max fragment length: used by server" \
  1782. "$P_SRV debug_level=3 max_frag_len=4096" \
  1783. "$P_CLI debug_level=3" \
  1784. 0 \
  1785. -c "Maximum fragment length is $MAX_CONTENT_LEN" \
  1786. -s "Maximum fragment length is 4096" \
  1787. -C "client hello, adding max_fragment_length extension" \
  1788. -S "found max fragment length extension" \
  1789. -S "server hello, max_fragment_length extension" \
  1790. -C "found max_fragment_length extension"
  1791. requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
  1792. requires_gnutls
  1793. run_test "Max fragment length: gnutls server" \
  1794. "$G_SRV" \
  1795. "$P_CLI debug_level=3 max_frag_len=4096" \
  1796. 0 \
  1797. -c "Maximum fragment length is 4096" \
  1798. -c "client hello, adding max_fragment_length extension" \
  1799. -c "found max_fragment_length extension"
  1800. requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
  1801. run_test "Max fragment length: client, message just fits" \
  1802. "$P_SRV debug_level=3" \
  1803. "$P_CLI debug_level=3 max_frag_len=2048 request_size=2048" \
  1804. 0 \
  1805. -c "Maximum fragment length is 2048" \
  1806. -s "Maximum fragment length is 2048" \
  1807. -c "client hello, adding max_fragment_length extension" \
  1808. -s "found max fragment length extension" \
  1809. -s "server hello, max_fragment_length extension" \
  1810. -c "found max_fragment_length extension" \
  1811. -c "2048 bytes written in 1 fragments" \
  1812. -s "2048 bytes read"
  1813. requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
  1814. run_test "Max fragment length: client, larger message" \
  1815. "$P_SRV debug_level=3" \
  1816. "$P_CLI debug_level=3 max_frag_len=2048 request_size=2345" \
  1817. 0 \
  1818. -c "Maximum fragment length is 2048" \
  1819. -s "Maximum fragment length is 2048" \
  1820. -c "client hello, adding max_fragment_length extension" \
  1821. -s "found max fragment length extension" \
  1822. -s "server hello, max_fragment_length extension" \
  1823. -c "found max_fragment_length extension" \
  1824. -c "2345 bytes written in 2 fragments" \
  1825. -s "2048 bytes read" \
  1826. -s "297 bytes read"
  1827. requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
  1828. run_test "Max fragment length: DTLS client, larger message" \
  1829. "$P_SRV debug_level=3 dtls=1" \
  1830. "$P_CLI debug_level=3 dtls=1 max_frag_len=2048 request_size=2345" \
  1831. 1 \
  1832. -c "Maximum fragment length is 2048" \
  1833. -s "Maximum fragment length is 2048" \
  1834. -c "client hello, adding max_fragment_length extension" \
  1835. -s "found max fragment length extension" \
  1836. -s "server hello, max_fragment_length extension" \
  1837. -c "found max_fragment_length extension" \
  1838. -c "fragment larger than.*maximum"
  1839. # Tests for renegotiation
  1840. # Renegotiation SCSV always added, regardless of SSL_RENEGOTIATION
  1841. run_test "Renegotiation: none, for reference" \
  1842. "$P_SRV debug_level=3 exchanges=2 auth_mode=optional" \
  1843. "$P_CLI debug_level=3 exchanges=2" \
  1844. 0 \
  1845. -C "client hello, adding renegotiation extension" \
  1846. -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
  1847. -S "found renegotiation extension" \
  1848. -s "server hello, secure renegotiation extension" \
  1849. -c "found renegotiation extension" \
  1850. -C "=> renegotiate" \
  1851. -S "=> renegotiate" \
  1852. -S "write hello request"
  1853. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  1854. run_test "Renegotiation: client-initiated" \
  1855. "$P_SRV debug_level=3 exchanges=2 renegotiation=1 auth_mode=optional" \
  1856. "$P_CLI debug_level=3 exchanges=2 renegotiation=1 renegotiate=1" \
  1857. 0 \
  1858. -c "client hello, adding renegotiation extension" \
  1859. -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
  1860. -s "found renegotiation extension" \
  1861. -s "server hello, secure renegotiation extension" \
  1862. -c "found renegotiation extension" \
  1863. -c "=> renegotiate" \
  1864. -s "=> renegotiate" \
  1865. -S "write hello request"
  1866. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  1867. run_test "Renegotiation: server-initiated" \
  1868. "$P_SRV debug_level=3 exchanges=2 renegotiation=1 auth_mode=optional renegotiate=1" \
  1869. "$P_CLI debug_level=3 exchanges=2 renegotiation=1" \
  1870. 0 \
  1871. -c "client hello, adding renegotiation extension" \
  1872. -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
  1873. -s "found renegotiation extension" \
  1874. -s "server hello, secure renegotiation extension" \
  1875. -c "found renegotiation extension" \
  1876. -c "=> renegotiate" \
  1877. -s "=> renegotiate" \
  1878. -s "write hello request"
  1879. # Checks that no Signature Algorithm with SHA-1 gets negotiated. Negotiating SHA-1 would mean that
  1880. # the server did not parse the Signature Algorithm extension. This test is valid only if an MD
  1881. # algorithm stronger than SHA-1 is enabled in config.h
  1882. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  1883. run_test "Renegotiation: Signature Algorithms parsing, client-initiated" \
  1884. "$P_SRV debug_level=3 exchanges=2 renegotiation=1 auth_mode=optional" \
  1885. "$P_CLI debug_level=3 exchanges=2 renegotiation=1 renegotiate=1" \
  1886. 0 \
  1887. -c "client hello, adding renegotiation extension" \
  1888. -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
  1889. -s "found renegotiation extension" \
  1890. -s "server hello, secure renegotiation extension" \
  1891. -c "found renegotiation extension" \
  1892. -c "=> renegotiate" \
  1893. -s "=> renegotiate" \
  1894. -S "write hello request" \
  1895. -S "client hello v3, signature_algorithm ext: 2" # Is SHA-1 negotiated?
  1896. # Checks that no Signature Algorithm with SHA-1 gets negotiated. Negotiating SHA-1 would mean that
  1897. # the server did not parse the Signature Algorithm extension. This test is valid only if an MD
  1898. # algorithm stronger than SHA-1 is enabled in config.h
  1899. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  1900. run_test "Renegotiation: Signature Algorithms parsing, server-initiated" \
  1901. "$P_SRV debug_level=3 exchanges=2 renegotiation=1 auth_mode=optional renegotiate=1" \
  1902. "$P_CLI debug_level=3 exchanges=2 renegotiation=1" \
  1903. 0 \
  1904. -c "client hello, adding renegotiation extension" \
  1905. -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
  1906. -s "found renegotiation extension" \
  1907. -s "server hello, secure renegotiation extension" \
  1908. -c "found renegotiation extension" \
  1909. -c "=> renegotiate" \
  1910. -s "=> renegotiate" \
  1911. -s "write hello request" \
  1912. -S "client hello v3, signature_algorithm ext: 2" # Is SHA-1 negotiated?
  1913. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  1914. run_test "Renegotiation: double" \
  1915. "$P_SRV debug_level=3 exchanges=2 renegotiation=1 auth_mode=optional renegotiate=1" \
  1916. "$P_CLI debug_level=3 exchanges=2 renegotiation=1 renegotiate=1" \
  1917. 0 \
  1918. -c "client hello, adding renegotiation extension" \
  1919. -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
  1920. -s "found renegotiation extension" \
  1921. -s "server hello, secure renegotiation extension" \
  1922. -c "found renegotiation extension" \
  1923. -c "=> renegotiate" \
  1924. -s "=> renegotiate" \
  1925. -s "write hello request"
  1926. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  1927. run_test "Renegotiation: client-initiated, server-rejected" \
  1928. "$P_SRV debug_level=3 exchanges=2 renegotiation=0 auth_mode=optional" \
  1929. "$P_CLI debug_level=3 exchanges=2 renegotiation=1 renegotiate=1" \
  1930. 1 \
  1931. -c "client hello, adding renegotiation extension" \
  1932. -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
  1933. -S "found renegotiation extension" \
  1934. -s "server hello, secure renegotiation extension" \
  1935. -c "found renegotiation extension" \
  1936. -c "=> renegotiate" \
  1937. -S "=> renegotiate" \
  1938. -S "write hello request" \
  1939. -c "SSL - Unexpected message at ServerHello in renegotiation" \
  1940. -c "failed"
  1941. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  1942. run_test "Renegotiation: server-initiated, client-rejected, default" \
  1943. "$P_SRV debug_level=3 exchanges=2 renegotiation=1 renegotiate=1 auth_mode=optional" \
  1944. "$P_CLI debug_level=3 exchanges=2 renegotiation=0" \
  1945. 0 \
  1946. -C "client hello, adding renegotiation extension" \
  1947. -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
  1948. -S "found renegotiation extension" \
  1949. -s "server hello, secure renegotiation extension" \
  1950. -c "found renegotiation extension" \
  1951. -C "=> renegotiate" \
  1952. -S "=> renegotiate" \
  1953. -s "write hello request" \
  1954. -S "SSL - An unexpected message was received from our peer" \
  1955. -S "failed"
  1956. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  1957. run_test "Renegotiation: server-initiated, client-rejected, not enforced" \
  1958. "$P_SRV debug_level=3 exchanges=2 renegotiation=1 renegotiate=1 \
  1959. renego_delay=-1 auth_mode=optional" \
  1960. "$P_CLI debug_level=3 exchanges=2 renegotiation=0" \
  1961. 0 \
  1962. -C "client hello, adding renegotiation extension" \
  1963. -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
  1964. -S "found renegotiation extension" \
  1965. -s "server hello, secure renegotiation extension" \
  1966. -c "found renegotiation extension" \
  1967. -C "=> renegotiate" \
  1968. -S "=> renegotiate" \
  1969. -s "write hello request" \
  1970. -S "SSL - An unexpected message was received from our peer" \
  1971. -S "failed"
  1972. # delay 2 for 1 alert record + 1 application data record
  1973. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  1974. run_test "Renegotiation: server-initiated, client-rejected, delay 2" \
  1975. "$P_SRV debug_level=3 exchanges=2 renegotiation=1 renegotiate=1 \
  1976. renego_delay=2 auth_mode=optional" \
  1977. "$P_CLI debug_level=3 exchanges=2 renegotiation=0" \
  1978. 0 \
  1979. -C "client hello, adding renegotiation extension" \
  1980. -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
  1981. -S "found renegotiation extension" \
  1982. -s "server hello, secure renegotiation extension" \
  1983. -c "found renegotiation extension" \
  1984. -C "=> renegotiate" \
  1985. -S "=> renegotiate" \
  1986. -s "write hello request" \
  1987. -S "SSL - An unexpected message was received from our peer" \
  1988. -S "failed"
  1989. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  1990. run_test "Renegotiation: server-initiated, client-rejected, delay 0" \
  1991. "$P_SRV debug_level=3 exchanges=2 renegotiation=1 renegotiate=1 \
  1992. renego_delay=0 auth_mode=optional" \
  1993. "$P_CLI debug_level=3 exchanges=2 renegotiation=0" \
  1994. 0 \
  1995. -C "client hello, adding renegotiation extension" \
  1996. -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
  1997. -S "found renegotiation extension" \
  1998. -s "server hello, secure renegotiation extension" \
  1999. -c "found renegotiation extension" \
  2000. -C "=> renegotiate" \
  2001. -S "=> renegotiate" \
  2002. -s "write hello request" \
  2003. -s "SSL - An unexpected message was received from our peer"
  2004. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  2005. run_test "Renegotiation: server-initiated, client-accepted, delay 0" \
  2006. "$P_SRV debug_level=3 exchanges=2 renegotiation=1 renegotiate=1 \
  2007. renego_delay=0 auth_mode=optional" \
  2008. "$P_CLI debug_level=3 exchanges=2 renegotiation=1" \
  2009. 0 \
  2010. -c "client hello, adding renegotiation extension" \
  2011. -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
  2012. -s "found renegotiation extension" \
  2013. -s "server hello, secure renegotiation extension" \
  2014. -c "found renegotiation extension" \
  2015. -c "=> renegotiate" \
  2016. -s "=> renegotiate" \
  2017. -s "write hello request" \
  2018. -S "SSL - An unexpected message was received from our peer" \
  2019. -S "failed"
  2020. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  2021. run_test "Renegotiation: periodic, just below period" \
  2022. "$P_SRV debug_level=3 exchanges=9 renegotiation=1 renego_period=3 auth_mode=optional" \
  2023. "$P_CLI debug_level=3 exchanges=2 renegotiation=1" \
  2024. 0 \
  2025. -C "client hello, adding renegotiation extension" \
  2026. -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
  2027. -S "found renegotiation extension" \
  2028. -s "server hello, secure renegotiation extension" \
  2029. -c "found renegotiation extension" \
  2030. -S "record counter limit reached: renegotiate" \
  2031. -C "=> renegotiate" \
  2032. -S "=> renegotiate" \
  2033. -S "write hello request" \
  2034. -S "SSL - An unexpected message was received from our peer" \
  2035. -S "failed"
  2036. # one extra exchange to be able to complete renego
  2037. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  2038. run_test "Renegotiation: periodic, just above period" \
  2039. "$P_SRV debug_level=3 exchanges=9 renegotiation=1 renego_period=3 auth_mode=optional" \
  2040. "$P_CLI debug_level=3 exchanges=4 renegotiation=1" \
  2041. 0 \
  2042. -c "client hello, adding renegotiation extension" \
  2043. -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
  2044. -s "found renegotiation extension" \
  2045. -s "server hello, secure renegotiation extension" \
  2046. -c "found renegotiation extension" \
  2047. -s "record counter limit reached: renegotiate" \
  2048. -c "=> renegotiate" \
  2049. -s "=> renegotiate" \
  2050. -s "write hello request" \
  2051. -S "SSL - An unexpected message was received from our peer" \
  2052. -S "failed"
  2053. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  2054. run_test "Renegotiation: periodic, two times period" \
  2055. "$P_SRV debug_level=3 exchanges=9 renegotiation=1 renego_period=3 auth_mode=optional" \
  2056. "$P_CLI debug_level=3 exchanges=7 renegotiation=1" \
  2057. 0 \
  2058. -c "client hello, adding renegotiation extension" \
  2059. -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
  2060. -s "found renegotiation extension" \
  2061. -s "server hello, secure renegotiation extension" \
  2062. -c "found renegotiation extension" \
  2063. -s "record counter limit reached: renegotiate" \
  2064. -c "=> renegotiate" \
  2065. -s "=> renegotiate" \
  2066. -s "write hello request" \
  2067. -S "SSL - An unexpected message was received from our peer" \
  2068. -S "failed"
  2069. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  2070. run_test "Renegotiation: periodic, above period, disabled" \
  2071. "$P_SRV debug_level=3 exchanges=9 renegotiation=0 renego_period=3 auth_mode=optional" \
  2072. "$P_CLI debug_level=3 exchanges=4 renegotiation=1" \
  2073. 0 \
  2074. -C "client hello, adding renegotiation extension" \
  2075. -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
  2076. -S "found renegotiation extension" \
  2077. -s "server hello, secure renegotiation extension" \
  2078. -c "found renegotiation extension" \
  2079. -S "record counter limit reached: renegotiate" \
  2080. -C "=> renegotiate" \
  2081. -S "=> renegotiate" \
  2082. -S "write hello request" \
  2083. -S "SSL - An unexpected message was received from our peer" \
  2084. -S "failed"
  2085. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  2086. run_test "Renegotiation: nbio, client-initiated" \
  2087. "$P_SRV debug_level=3 nbio=2 exchanges=2 renegotiation=1 auth_mode=optional" \
  2088. "$P_CLI debug_level=3 nbio=2 exchanges=2 renegotiation=1 renegotiate=1" \
  2089. 0 \
  2090. -c "client hello, adding renegotiation extension" \
  2091. -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
  2092. -s "found renegotiation extension" \
  2093. -s "server hello, secure renegotiation extension" \
  2094. -c "found renegotiation extension" \
  2095. -c "=> renegotiate" \
  2096. -s "=> renegotiate" \
  2097. -S "write hello request"
  2098. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  2099. run_test "Renegotiation: nbio, server-initiated" \
  2100. "$P_SRV debug_level=3 nbio=2 exchanges=2 renegotiation=1 renegotiate=1 auth_mode=optional" \
  2101. "$P_CLI debug_level=3 nbio=2 exchanges=2 renegotiation=1" \
  2102. 0 \
  2103. -c "client hello, adding renegotiation extension" \
  2104. -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
  2105. -s "found renegotiation extension" \
  2106. -s "server hello, secure renegotiation extension" \
  2107. -c "found renegotiation extension" \
  2108. -c "=> renegotiate" \
  2109. -s "=> renegotiate" \
  2110. -s "write hello request"
  2111. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  2112. run_test "Renegotiation: openssl server, client-initiated" \
  2113. "$O_SRV -www" \
  2114. "$P_CLI debug_level=3 exchanges=1 renegotiation=1 renegotiate=1" \
  2115. 0 \
  2116. -c "client hello, adding renegotiation extension" \
  2117. -c "found renegotiation extension" \
  2118. -c "=> renegotiate" \
  2119. -C "ssl_hanshake() returned" \
  2120. -C "error" \
  2121. -c "HTTP/1.0 200 [Oo][Kk]"
  2122. requires_gnutls
  2123. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  2124. run_test "Renegotiation: gnutls server strict, client-initiated" \
  2125. "$G_SRV --priority=NORMAL:%SAFE_RENEGOTIATION" \
  2126. "$P_CLI debug_level=3 exchanges=1 renegotiation=1 renegotiate=1" \
  2127. 0 \
  2128. -c "client hello, adding renegotiation extension" \
  2129. -c "found renegotiation extension" \
  2130. -c "=> renegotiate" \
  2131. -C "ssl_hanshake() returned" \
  2132. -C "error" \
  2133. -c "HTTP/1.0 200 [Oo][Kk]"
  2134. requires_gnutls
  2135. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  2136. run_test "Renegotiation: gnutls server unsafe, client-initiated default" \
  2137. "$G_SRV --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION" \
  2138. "$P_CLI debug_level=3 exchanges=1 renegotiation=1 renegotiate=1" \
  2139. 1 \
  2140. -c "client hello, adding renegotiation extension" \
  2141. -C "found renegotiation extension" \
  2142. -c "=> renegotiate" \
  2143. -c "mbedtls_ssl_handshake() returned" \
  2144. -c "error" \
  2145. -C "HTTP/1.0 200 [Oo][Kk]"
  2146. requires_gnutls
  2147. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  2148. run_test "Renegotiation: gnutls server unsafe, client-inititated no legacy" \
  2149. "$G_SRV --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION" \
  2150. "$P_CLI debug_level=3 exchanges=1 renegotiation=1 renegotiate=1 \
  2151. allow_legacy=0" \
  2152. 1 \
  2153. -c "client hello, adding renegotiation extension" \
  2154. -C "found renegotiation extension" \
  2155. -c "=> renegotiate" \
  2156. -c "mbedtls_ssl_handshake() returned" \
  2157. -c "error" \
  2158. -C "HTTP/1.0 200 [Oo][Kk]"
  2159. requires_gnutls
  2160. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  2161. run_test "Renegotiation: gnutls server unsafe, client-inititated legacy" \
  2162. "$G_SRV --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION" \
  2163. "$P_CLI debug_level=3 exchanges=1 renegotiation=1 renegotiate=1 \
  2164. allow_legacy=1" \
  2165. 0 \
  2166. -c "client hello, adding renegotiation extension" \
  2167. -C "found renegotiation extension" \
  2168. -c "=> renegotiate" \
  2169. -C "ssl_hanshake() returned" \
  2170. -C "error" \
  2171. -c "HTTP/1.0 200 [Oo][Kk]"
  2172. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  2173. run_test "Renegotiation: DTLS, client-initiated" \
  2174. "$P_SRV debug_level=3 dtls=1 exchanges=2 renegotiation=1" \
  2175. "$P_CLI debug_level=3 dtls=1 exchanges=2 renegotiation=1 renegotiate=1" \
  2176. 0 \
  2177. -c "client hello, adding renegotiation extension" \
  2178. -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
  2179. -s "found renegotiation extension" \
  2180. -s "server hello, secure renegotiation extension" \
  2181. -c "found renegotiation extension" \
  2182. -c "=> renegotiate" \
  2183. -s "=> renegotiate" \
  2184. -S "write hello request"
  2185. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  2186. run_test "Renegotiation: DTLS, server-initiated" \
  2187. "$P_SRV debug_level=3 dtls=1 exchanges=2 renegotiation=1 renegotiate=1" \
  2188. "$P_CLI debug_level=3 dtls=1 exchanges=2 renegotiation=1 \
  2189. read_timeout=1000 max_resend=2" \
  2190. 0 \
  2191. -c "client hello, adding renegotiation extension" \
  2192. -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
  2193. -s "found renegotiation extension" \
  2194. -s "server hello, secure renegotiation extension" \
  2195. -c "found renegotiation extension" \
  2196. -c "=> renegotiate" \
  2197. -s "=> renegotiate" \
  2198. -s "write hello request"
  2199. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  2200. run_test "Renegotiation: DTLS, renego_period overflow" \
  2201. "$P_SRV debug_level=3 dtls=1 exchanges=4 renegotiation=1 renego_period=18446462598732840962 auth_mode=optional" \
  2202. "$P_CLI debug_level=3 dtls=1 exchanges=4 renegotiation=1" \
  2203. 0 \
  2204. -c "client hello, adding renegotiation extension" \
  2205. -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
  2206. -s "found renegotiation extension" \
  2207. -s "server hello, secure renegotiation extension" \
  2208. -s "record counter limit reached: renegotiate" \
  2209. -c "=> renegotiate" \
  2210. -s "=> renegotiate" \
  2211. -s "write hello request"
  2212. requires_gnutls
  2213. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  2214. run_test "Renegotiation: DTLS, gnutls server, client-initiated" \
  2215. "$G_SRV -u --mtu 4096" \
  2216. "$P_CLI debug_level=3 dtls=1 exchanges=1 renegotiation=1 renegotiate=1" \
  2217. 0 \
  2218. -c "client hello, adding renegotiation extension" \
  2219. -c "found renegotiation extension" \
  2220. -c "=> renegotiate" \
  2221. -C "mbedtls_ssl_handshake returned" \
  2222. -C "error" \
  2223. -s "Extra-header:"
  2224. # Test for the "secure renegotation" extension only (no actual renegotiation)
  2225. requires_gnutls
  2226. run_test "Renego ext: gnutls server strict, client default" \
  2227. "$G_SRV --priority=NORMAL:%SAFE_RENEGOTIATION" \
  2228. "$P_CLI debug_level=3" \
  2229. 0 \
  2230. -c "found renegotiation extension" \
  2231. -C "error" \
  2232. -c "HTTP/1.0 200 [Oo][Kk]"
  2233. requires_gnutls
  2234. run_test "Renego ext: gnutls server unsafe, client default" \
  2235. "$G_SRV --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION" \
  2236. "$P_CLI debug_level=3" \
  2237. 0 \
  2238. -C "found renegotiation extension" \
  2239. -C "error" \
  2240. -c "HTTP/1.0 200 [Oo][Kk]"
  2241. requires_gnutls
  2242. run_test "Renego ext: gnutls server unsafe, client break legacy" \
  2243. "$G_SRV --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION" \
  2244. "$P_CLI debug_level=3 allow_legacy=-1" \
  2245. 1 \
  2246. -C "found renegotiation extension" \
  2247. -c "error" \
  2248. -C "HTTP/1.0 200 [Oo][Kk]"
  2249. requires_gnutls
  2250. run_test "Renego ext: gnutls client strict, server default" \
  2251. "$P_SRV debug_level=3" \
  2252. "$G_CLI --priority=NORMAL:%SAFE_RENEGOTIATION localhost" \
  2253. 0 \
  2254. -s "received TLS_EMPTY_RENEGOTIATION_INFO\|found renegotiation extension" \
  2255. -s "server hello, secure renegotiation extension"
  2256. requires_gnutls
  2257. run_test "Renego ext: gnutls client unsafe, server default" \
  2258. "$P_SRV debug_level=3" \
  2259. "$G_CLI --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION localhost" \
  2260. 0 \
  2261. -S "received TLS_EMPTY_RENEGOTIATION_INFO\|found renegotiation extension" \
  2262. -S "server hello, secure renegotiation extension"
  2263. requires_gnutls
  2264. run_test "Renego ext: gnutls client unsafe, server break legacy" \
  2265. "$P_SRV debug_level=3 allow_legacy=-1" \
  2266. "$G_CLI --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION localhost" \
  2267. 1 \
  2268. -S "received TLS_EMPTY_RENEGOTIATION_INFO\|found renegotiation extension" \
  2269. -S "server hello, secure renegotiation extension"
  2270. # Tests for silently dropping trailing extra bytes in .der certificates
  2271. requires_gnutls
  2272. run_test "DER format: no trailing bytes" \
  2273. "$P_SRV crt_file=data_files/server5-der0.crt \
  2274. key_file=data_files/server5.key" \
  2275. "$G_CLI localhost" \
  2276. 0 \
  2277. -c "Handshake was completed" \
  2278. requires_gnutls
  2279. run_test "DER format: with a trailing zero byte" \
  2280. "$P_SRV crt_file=data_files/server5-der1a.crt \
  2281. key_file=data_files/server5.key" \
  2282. "$G_CLI localhost" \
  2283. 0 \
  2284. -c "Handshake was completed" \
  2285. requires_gnutls
  2286. run_test "DER format: with a trailing random byte" \
  2287. "$P_SRV crt_file=data_files/server5-der1b.crt \
  2288. key_file=data_files/server5.key" \
  2289. "$G_CLI localhost" \
  2290. 0 \
  2291. -c "Handshake was completed" \
  2292. requires_gnutls
  2293. run_test "DER format: with 2 trailing random bytes" \
  2294. "$P_SRV crt_file=data_files/server5-der2.crt \
  2295. key_file=data_files/server5.key" \
  2296. "$G_CLI localhost" \
  2297. 0 \
  2298. -c "Handshake was completed" \
  2299. requires_gnutls
  2300. run_test "DER format: with 4 trailing random bytes" \
  2301. "$P_SRV crt_file=data_files/server5-der4.crt \
  2302. key_file=data_files/server5.key" \
  2303. "$G_CLI localhost" \
  2304. 0 \
  2305. -c "Handshake was completed" \
  2306. requires_gnutls
  2307. run_test "DER format: with 8 trailing random bytes" \
  2308. "$P_SRV crt_file=data_files/server5-der8.crt \
  2309. key_file=data_files/server5.key" \
  2310. "$G_CLI localhost" \
  2311. 0 \
  2312. -c "Handshake was completed" \
  2313. requires_gnutls
  2314. run_test "DER format: with 9 trailing random bytes" \
  2315. "$P_SRV crt_file=data_files/server5-der9.crt \
  2316. key_file=data_files/server5.key" \
  2317. "$G_CLI localhost" \
  2318. 0 \
  2319. -c "Handshake was completed" \
  2320. # Tests for auth_mode
  2321. run_test "Authentication: server badcert, client required" \
  2322. "$P_SRV crt_file=data_files/server5-badsign.crt \
  2323. key_file=data_files/server5.key" \
  2324. "$P_CLI debug_level=1 auth_mode=required" \
  2325. 1 \
  2326. -c "x509_verify_cert() returned" \
  2327. -c "! The certificate is not correctly signed by the trusted CA" \
  2328. -c "! mbedtls_ssl_handshake returned" \
  2329. -c "X509 - Certificate verification failed"
  2330. run_test "Authentication: server badcert, client optional" \
  2331. "$P_SRV crt_file=data_files/server5-badsign.crt \
  2332. key_file=data_files/server5.key" \
  2333. "$P_CLI debug_level=1 auth_mode=optional" \
  2334. 0 \
  2335. -c "x509_verify_cert() returned" \
  2336. -c "! The certificate is not correctly signed by the trusted CA" \
  2337. -C "! mbedtls_ssl_handshake returned" \
  2338. -C "X509 - Certificate verification failed"
  2339. run_test "Authentication: server goodcert, client optional, no trusted CA" \
  2340. "$P_SRV" \
  2341. "$P_CLI debug_level=3 auth_mode=optional ca_file=none ca_path=none" \
  2342. 0 \
  2343. -c "x509_verify_cert() returned" \
  2344. -c "! The certificate is not correctly signed by the trusted CA" \
  2345. -c "! Certificate verification flags"\
  2346. -C "! mbedtls_ssl_handshake returned" \
  2347. -C "X509 - Certificate verification failed" \
  2348. -C "SSL - No CA Chain is set, but required to operate"
  2349. run_test "Authentication: server goodcert, client required, no trusted CA" \
  2350. "$P_SRV" \
  2351. "$P_CLI debug_level=3 auth_mode=required ca_file=none ca_path=none" \
  2352. 1 \
  2353. -c "x509_verify_cert() returned" \
  2354. -c "! The certificate is not correctly signed by the trusted CA" \
  2355. -c "! Certificate verification flags"\
  2356. -c "! mbedtls_ssl_handshake returned" \
  2357. -c "SSL - No CA Chain is set, but required to operate"
  2358. # The purpose of the next two tests is to test the client's behaviour when receiving a server
  2359. # certificate with an unsupported elliptic curve. This should usually not happen because
  2360. # the client informs the server about the supported curves - it does, though, in the
  2361. # corner case of a static ECDH suite, because the server doesn't check the curve on that
  2362. # occasion (to be fixed). If that bug's fixed, the test needs to be altered to use a
  2363. # different means to have the server ignoring the client's supported curve list.
  2364. requires_config_enabled MBEDTLS_ECP_C
  2365. run_test "Authentication: server ECDH p256v1, client required, p256v1 unsupported" \
  2366. "$P_SRV debug_level=1 key_file=data_files/server5.key \
  2367. crt_file=data_files/server5.ku-ka.crt" \
  2368. "$P_CLI debug_level=3 auth_mode=required curves=secp521r1" \
  2369. 1 \
  2370. -c "bad certificate (EC key curve)"\
  2371. -c "! Certificate verification flags"\
  2372. -C "bad server certificate (ECDH curve)" # Expect failure at earlier verification stage
  2373. requires_config_enabled MBEDTLS_ECP_C
  2374. run_test "Authentication: server ECDH p256v1, client optional, p256v1 unsupported" \
  2375. "$P_SRV debug_level=1 key_file=data_files/server5.key \
  2376. crt_file=data_files/server5.ku-ka.crt" \
  2377. "$P_CLI debug_level=3 auth_mode=optional curves=secp521r1" \
  2378. 1 \
  2379. -c "bad certificate (EC key curve)"\
  2380. -c "! Certificate verification flags"\
  2381. -c "bad server certificate (ECDH curve)" # Expect failure only at ECDH params check
  2382. run_test "Authentication: server badcert, client none" \
  2383. "$P_SRV crt_file=data_files/server5-badsign.crt \
  2384. key_file=data_files/server5.key" \
  2385. "$P_CLI debug_level=1 auth_mode=none" \
  2386. 0 \
  2387. -C "x509_verify_cert() returned" \
  2388. -C "! The certificate is not correctly signed by the trusted CA" \
  2389. -C "! mbedtls_ssl_handshake returned" \
  2390. -C "X509 - Certificate verification failed"
  2391. run_test "Authentication: client SHA256, server required" \
  2392. "$P_SRV auth_mode=required" \
  2393. "$P_CLI debug_level=3 crt_file=data_files/server6.crt \
  2394. key_file=data_files/server6.key \
  2395. force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384" \
  2396. 0 \
  2397. -c "Supported Signature Algorithm found: 4," \
  2398. -c "Supported Signature Algorithm found: 5,"
  2399. run_test "Authentication: client SHA384, server required" \
  2400. "$P_SRV auth_mode=required" \
  2401. "$P_CLI debug_level=3 crt_file=data_files/server6.crt \
  2402. key_file=data_files/server6.key \
  2403. force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256" \
  2404. 0 \
  2405. -c "Supported Signature Algorithm found: 4," \
  2406. -c "Supported Signature Algorithm found: 5,"
  2407. requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
  2408. run_test "Authentication: client has no cert, server required (SSLv3)" \
  2409. "$P_SRV debug_level=3 min_version=ssl3 auth_mode=required" \
  2410. "$P_CLI debug_level=3 force_version=ssl3 crt_file=none \
  2411. key_file=data_files/server5.key" \
  2412. 1 \
  2413. -S "skip write certificate request" \
  2414. -C "skip parse certificate request" \
  2415. -c "got a certificate request" \
  2416. -c "got no certificate to send" \
  2417. -S "x509_verify_cert() returned" \
  2418. -s "client has no certificate" \
  2419. -s "! mbedtls_ssl_handshake returned" \
  2420. -c "! mbedtls_ssl_handshake returned" \
  2421. -s "No client certification received from the client, but required by the authentication mode"
  2422. run_test "Authentication: client has no cert, server required (TLS)" \
  2423. "$P_SRV debug_level=3 auth_mode=required" \
  2424. "$P_CLI debug_level=3 crt_file=none \
  2425. key_file=data_files/server5.key" \
  2426. 1 \
  2427. -S "skip write certificate request" \
  2428. -C "skip parse certificate request" \
  2429. -c "got a certificate request" \
  2430. -c "= write certificate$" \
  2431. -C "skip write certificate$" \
  2432. -S "x509_verify_cert() returned" \
  2433. -s "client has no certificate" \
  2434. -s "! mbedtls_ssl_handshake returned" \
  2435. -c "! mbedtls_ssl_handshake returned" \
  2436. -s "No client certification received from the client, but required by the authentication mode"
  2437. run_test "Authentication: client badcert, server required" \
  2438. "$P_SRV debug_level=3 auth_mode=required" \
  2439. "$P_CLI debug_level=3 crt_file=data_files/server5-badsign.crt \
  2440. key_file=data_files/server5.key" \
  2441. 1 \
  2442. -S "skip write certificate request" \
  2443. -C "skip parse certificate request" \
  2444. -c "got a certificate request" \
  2445. -C "skip write certificate" \
  2446. -C "skip write certificate verify" \
  2447. -S "skip parse certificate verify" \
  2448. -s "x509_verify_cert() returned" \
  2449. -s "! The certificate is not correctly signed by the trusted CA" \
  2450. -s "! mbedtls_ssl_handshake returned" \
  2451. -s "send alert level=2 message=48" \
  2452. -c "! mbedtls_ssl_handshake returned" \
  2453. -s "X509 - Certificate verification failed"
  2454. # We don't check that the client receives the alert because it might
  2455. # detect that its write end of the connection is closed and abort
  2456. # before reading the alert message.
  2457. run_test "Authentication: client cert not trusted, server required" \
  2458. "$P_SRV debug_level=3 auth_mode=required" \
  2459. "$P_CLI debug_level=3 crt_file=data_files/server5-selfsigned.crt \
  2460. key_file=data_files/server5.key" \
  2461. 1 \
  2462. -S "skip write certificate request" \
  2463. -C "skip parse certificate request" \
  2464. -c "got a certificate request" \
  2465. -C "skip write certificate" \
  2466. -C "skip write certificate verify" \
  2467. -S "skip parse certificate verify" \
  2468. -s "x509_verify_cert() returned" \
  2469. -s "! The certificate is not correctly signed by the trusted CA" \
  2470. -s "! mbedtls_ssl_handshake returned" \
  2471. -c "! mbedtls_ssl_handshake returned" \
  2472. -s "X509 - Certificate verification failed"
  2473. run_test "Authentication: client badcert, server optional" \
  2474. "$P_SRV debug_level=3 auth_mode=optional" \
  2475. "$P_CLI debug_level=3 crt_file=data_files/server5-badsign.crt \
  2476. key_file=data_files/server5.key" \
  2477. 0 \
  2478. -S "skip write certificate request" \
  2479. -C "skip parse certificate request" \
  2480. -c "got a certificate request" \
  2481. -C "skip write certificate" \
  2482. -C "skip write certificate verify" \
  2483. -S "skip parse certificate verify" \
  2484. -s "x509_verify_cert() returned" \
  2485. -s "! The certificate is not correctly signed by the trusted CA" \
  2486. -S "! mbedtls_ssl_handshake returned" \
  2487. -C "! mbedtls_ssl_handshake returned" \
  2488. -S "X509 - Certificate verification failed"
  2489. run_test "Authentication: client badcert, server none" \
  2490. "$P_SRV debug_level=3 auth_mode=none" \
  2491. "$P_CLI debug_level=3 crt_file=data_files/server5-badsign.crt \
  2492. key_file=data_files/server5.key" \
  2493. 0 \
  2494. -s "skip write certificate request" \
  2495. -C "skip parse certificate request" \
  2496. -c "got no certificate request" \
  2497. -c "skip write certificate" \
  2498. -c "skip write certificate verify" \
  2499. -s "skip parse certificate verify" \
  2500. -S "x509_verify_cert() returned" \
  2501. -S "! The certificate is not correctly signed by the trusted CA" \
  2502. -S "! mbedtls_ssl_handshake returned" \
  2503. -C "! mbedtls_ssl_handshake returned" \
  2504. -S "X509 - Certificate verification failed"
  2505. run_test "Authentication: client no cert, server optional" \
  2506. "$P_SRV debug_level=3 auth_mode=optional" \
  2507. "$P_CLI debug_level=3 crt_file=none key_file=none" \
  2508. 0 \
  2509. -S "skip write certificate request" \
  2510. -C "skip parse certificate request" \
  2511. -c "got a certificate request" \
  2512. -C "skip write certificate$" \
  2513. -C "got no certificate to send" \
  2514. -S "SSLv3 client has no certificate" \
  2515. -c "skip write certificate verify" \
  2516. -s "skip parse certificate verify" \
  2517. -s "! Certificate was missing" \
  2518. -S "! mbedtls_ssl_handshake returned" \
  2519. -C "! mbedtls_ssl_handshake returned" \
  2520. -S "X509 - Certificate verification failed"
  2521. run_test "Authentication: openssl client no cert, server optional" \
  2522. "$P_SRV debug_level=3 auth_mode=optional" \
  2523. "$O_CLI" \
  2524. 0 \
  2525. -S "skip write certificate request" \
  2526. -s "skip parse certificate verify" \
  2527. -s "! Certificate was missing" \
  2528. -S "! mbedtls_ssl_handshake returned" \
  2529. -S "X509 - Certificate verification failed"
  2530. run_test "Authentication: client no cert, openssl server optional" \
  2531. "$O_SRV -verify 10" \
  2532. "$P_CLI debug_level=3 crt_file=none key_file=none" \
  2533. 0 \
  2534. -C "skip parse certificate request" \
  2535. -c "got a certificate request" \
  2536. -C "skip write certificate$" \
  2537. -c "skip write certificate verify" \
  2538. -C "! mbedtls_ssl_handshake returned"
  2539. run_test "Authentication: client no cert, openssl server required" \
  2540. "$O_SRV -Verify 10" \
  2541. "$P_CLI debug_level=3 crt_file=none key_file=none" \
  2542. 1 \
  2543. -C "skip parse certificate request" \
  2544. -c "got a certificate request" \
  2545. -C "skip write certificate$" \
  2546. -c "skip write certificate verify" \
  2547. -c "! mbedtls_ssl_handshake returned"
  2548. requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
  2549. run_test "Authentication: client no cert, ssl3" \
  2550. "$P_SRV debug_level=3 auth_mode=optional force_version=ssl3" \
  2551. "$P_CLI debug_level=3 crt_file=none key_file=none min_version=ssl3" \
  2552. 0 \
  2553. -S "skip write certificate request" \
  2554. -C "skip parse certificate request" \
  2555. -c "got a certificate request" \
  2556. -C "skip write certificate$" \
  2557. -c "skip write certificate verify" \
  2558. -c "got no certificate to send" \
  2559. -s "SSLv3 client has no certificate" \
  2560. -s "skip parse certificate verify" \
  2561. -s "! Certificate was missing" \
  2562. -S "! mbedtls_ssl_handshake returned" \
  2563. -C "! mbedtls_ssl_handshake returned" \
  2564. -S "X509 - Certificate verification failed"
  2565. # The "max_int chain" tests assume that MAX_INTERMEDIATE_CA is set to its
  2566. # default value (8)
  2567. MAX_IM_CA='8'
  2568. MAX_IM_CA_CONFIG=$( ../scripts/config.pl get MBEDTLS_X509_MAX_INTERMEDIATE_CA)
  2569. if [ -n "$MAX_IM_CA_CONFIG" ] && [ "$MAX_IM_CA_CONFIG" -ne "$MAX_IM_CA" ]; then
  2570. cat <<EOF
  2571. ${CONFIG_H} contains a value for the configuration of
  2572. MBEDTLS_X509_MAX_INTERMEDIATE_CA that is different from the script's
  2573. test value of ${MAX_IM_CA}.
  2574. The tests assume this value and if it changes, the tests in this
  2575. script should also be adjusted.
  2576. EOF
  2577. exit 1
  2578. fi
  2579. requires_full_size_output_buffer
  2580. run_test "Authentication: server max_int chain, client default" \
  2581. "$P_SRV crt_file=data_files/dir-maxpath/c09.pem \
  2582. key_file=data_files/dir-maxpath/09.key" \
  2583. "$P_CLI server_name=CA09 ca_file=data_files/dir-maxpath/00.crt" \
  2584. 0 \
  2585. -C "X509 - A fatal error occurred"
  2586. requires_full_size_output_buffer
  2587. run_test "Authentication: server max_int+1 chain, client default" \
  2588. "$P_SRV crt_file=data_files/dir-maxpath/c10.pem \
  2589. key_file=data_files/dir-maxpath/10.key" \
  2590. "$P_CLI server_name=CA10 ca_file=data_files/dir-maxpath/00.crt" \
  2591. 1 \
  2592. -c "X509 - A fatal error occurred"
  2593. requires_full_size_output_buffer
  2594. run_test "Authentication: server max_int+1 chain, client optional" \
  2595. "$P_SRV crt_file=data_files/dir-maxpath/c10.pem \
  2596. key_file=data_files/dir-maxpath/10.key" \
  2597. "$P_CLI server_name=CA10 ca_file=data_files/dir-maxpath/00.crt \
  2598. auth_mode=optional" \
  2599. 1 \
  2600. -c "X509 - A fatal error occurred"
  2601. requires_full_size_output_buffer
  2602. run_test "Authentication: server max_int+1 chain, client none" \
  2603. "$P_SRV crt_file=data_files/dir-maxpath/c10.pem \
  2604. key_file=data_files/dir-maxpath/10.key" \
  2605. "$P_CLI server_name=CA10 ca_file=data_files/dir-maxpath/00.crt \
  2606. auth_mode=none" \
  2607. 0 \
  2608. -C "X509 - A fatal error occurred"
  2609. requires_full_size_output_buffer
  2610. run_test "Authentication: client max_int+1 chain, server default" \
  2611. "$P_SRV ca_file=data_files/dir-maxpath/00.crt" \
  2612. "$P_CLI crt_file=data_files/dir-maxpath/c10.pem \
  2613. key_file=data_files/dir-maxpath/10.key" \
  2614. 0 \
  2615. -S "X509 - A fatal error occurred"
  2616. requires_full_size_output_buffer
  2617. run_test "Authentication: client max_int+1 chain, server optional" \
  2618. "$P_SRV ca_file=data_files/dir-maxpath/00.crt auth_mode=optional" \
  2619. "$P_CLI crt_file=data_files/dir-maxpath/c10.pem \
  2620. key_file=data_files/dir-maxpath/10.key" \
  2621. 1 \
  2622. -s "X509 - A fatal error occurred"
  2623. requires_full_size_output_buffer
  2624. run_test "Authentication: client max_int+1 chain, server required" \
  2625. "$P_SRV ca_file=data_files/dir-maxpath/00.crt auth_mode=required" \
  2626. "$P_CLI crt_file=data_files/dir-maxpath/c10.pem \
  2627. key_file=data_files/dir-maxpath/10.key" \
  2628. 1 \
  2629. -s "X509 - A fatal error occurred"
  2630. requires_full_size_output_buffer
  2631. run_test "Authentication: client max_int chain, server required" \
  2632. "$P_SRV ca_file=data_files/dir-maxpath/00.crt auth_mode=required" \
  2633. "$P_CLI crt_file=data_files/dir-maxpath/c09.pem \
  2634. key_file=data_files/dir-maxpath/09.key" \
  2635. 0 \
  2636. -S "X509 - A fatal error occurred"
  2637. # Tests for CA list in CertificateRequest messages
  2638. run_test "Authentication: send CA list in CertificateRequest (default)" \
  2639. "$P_SRV debug_level=3 auth_mode=required" \
  2640. "$P_CLI crt_file=data_files/server6.crt \
  2641. key_file=data_files/server6.key" \
  2642. 0 \
  2643. -s "requested DN"
  2644. run_test "Authentication: do not send CA list in CertificateRequest" \
  2645. "$P_SRV debug_level=3 auth_mode=required cert_req_ca_list=0" \
  2646. "$P_CLI crt_file=data_files/server6.crt \
  2647. key_file=data_files/server6.key" \
  2648. 0 \
  2649. -S "requested DN"
  2650. run_test "Authentication: send CA list in CertificateRequest, client self signed" \
  2651. "$P_SRV debug_level=3 auth_mode=required cert_req_ca_list=0" \
  2652. "$P_CLI debug_level=3 crt_file=data_files/server5-selfsigned.crt \
  2653. key_file=data_files/server5.key" \
  2654. 1 \
  2655. -S "requested DN" \
  2656. -s "x509_verify_cert() returned" \
  2657. -s "! The certificate is not correctly signed by the trusted CA" \
  2658. -s "! mbedtls_ssl_handshake returned" \
  2659. -c "! mbedtls_ssl_handshake returned" \
  2660. -s "X509 - Certificate verification failed"
  2661. # Tests for certificate selection based on SHA verson
  2662. run_test "Certificate hash: client TLS 1.2 -> SHA-2" \
  2663. "$P_SRV crt_file=data_files/server5.crt \
  2664. key_file=data_files/server5.key \
  2665. crt_file2=data_files/server5-sha1.crt \
  2666. key_file2=data_files/server5.key" \
  2667. "$P_CLI force_version=tls1_2" \
  2668. 0 \
  2669. -c "signed using.*ECDSA with SHA256" \
  2670. -C "signed using.*ECDSA with SHA1"
  2671. run_test "Certificate hash: client TLS 1.1 -> SHA-1" \
  2672. "$P_SRV crt_file=data_files/server5.crt \
  2673. key_file=data_files/server5.key \
  2674. crt_file2=data_files/server5-sha1.crt \
  2675. key_file2=data_files/server5.key" \
  2676. "$P_CLI force_version=tls1_1" \
  2677. 0 \
  2678. -C "signed using.*ECDSA with SHA256" \
  2679. -c "signed using.*ECDSA with SHA1"
  2680. run_test "Certificate hash: client TLS 1.0 -> SHA-1" \
  2681. "$P_SRV crt_file=data_files/server5.crt \
  2682. key_file=data_files/server5.key \
  2683. crt_file2=data_files/server5-sha1.crt \
  2684. key_file2=data_files/server5.key" \
  2685. "$P_CLI force_version=tls1" \
  2686. 0 \
  2687. -C "signed using.*ECDSA with SHA256" \
  2688. -c "signed using.*ECDSA with SHA1"
  2689. run_test "Certificate hash: client TLS 1.1, no SHA-1 -> SHA-2 (order 1)" \
  2690. "$P_SRV crt_file=data_files/server5.crt \
  2691. key_file=data_files/server5.key \
  2692. crt_file2=data_files/server6.crt \
  2693. key_file2=data_files/server6.key" \
  2694. "$P_CLI force_version=tls1_1" \
  2695. 0 \
  2696. -c "serial number.*09" \
  2697. -c "signed using.*ECDSA with SHA256" \
  2698. -C "signed using.*ECDSA with SHA1"
  2699. run_test "Certificate hash: client TLS 1.1, no SHA-1 -> SHA-2 (order 2)" \
  2700. "$P_SRV crt_file=data_files/server6.crt \
  2701. key_file=data_files/server6.key \
  2702. crt_file2=data_files/server5.crt \
  2703. key_file2=data_files/server5.key" \
  2704. "$P_CLI force_version=tls1_1" \
  2705. 0 \
  2706. -c "serial number.*0A" \
  2707. -c "signed using.*ECDSA with SHA256" \
  2708. -C "signed using.*ECDSA with SHA1"
  2709. # tests for SNI
  2710. run_test "SNI: no SNI callback" \
  2711. "$P_SRV debug_level=3 \
  2712. crt_file=data_files/server5.crt key_file=data_files/server5.key" \
  2713. "$P_CLI server_name=localhost" \
  2714. 0 \
  2715. -S "parse ServerName extension" \
  2716. -c "issuer name *: C=NL, O=PolarSSL, CN=Polarssl Test EC CA" \
  2717. -c "subject name *: C=NL, O=PolarSSL, CN=localhost"
  2718. run_test "SNI: matching cert 1" \
  2719. "$P_SRV debug_level=3 \
  2720. crt_file=data_files/server5.crt key_file=data_files/server5.key \
  2721. sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-,polarssl.example,data_files/server1-nospace.crt,data_files/server1.key,-,-,-" \
  2722. "$P_CLI server_name=localhost" \
  2723. 0 \
  2724. -s "parse ServerName extension" \
  2725. -c "issuer name *: C=NL, O=PolarSSL, CN=PolarSSL Test CA" \
  2726. -c "subject name *: C=NL, O=PolarSSL, CN=localhost"
  2727. run_test "SNI: matching cert 2" \
  2728. "$P_SRV debug_level=3 \
  2729. crt_file=data_files/server5.crt key_file=data_files/server5.key \
  2730. sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-,polarssl.example,data_files/server1-nospace.crt,data_files/server1.key,-,-,-" \
  2731. "$P_CLI server_name=polarssl.example" \
  2732. 0 \
  2733. -s "parse ServerName extension" \
  2734. -c "issuer name *: C=NL, O=PolarSSL, CN=PolarSSL Test CA" \
  2735. -c "subject name *: C=NL, O=PolarSSL, CN=polarssl.example"
  2736. run_test "SNI: no matching cert" \
  2737. "$P_SRV debug_level=3 \
  2738. crt_file=data_files/server5.crt key_file=data_files/server5.key \
  2739. sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-,polarssl.example,data_files/server1-nospace.crt,data_files/server1.key,-,-,-" \
  2740. "$P_CLI server_name=nonesuch.example" \
  2741. 1 \
  2742. -s "parse ServerName extension" \
  2743. -s "ssl_sni_wrapper() returned" \
  2744. -s "mbedtls_ssl_handshake returned" \
  2745. -c "mbedtls_ssl_handshake returned" \
  2746. -c "SSL - A fatal alert message was received from our peer"
  2747. run_test "SNI: client auth no override: optional" \
  2748. "$P_SRV debug_level=3 auth_mode=optional \
  2749. crt_file=data_files/server5.crt key_file=data_files/server5.key \
  2750. sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-" \
  2751. "$P_CLI debug_level=3 server_name=localhost" \
  2752. 0 \
  2753. -S "skip write certificate request" \
  2754. -C "skip parse certificate request" \
  2755. -c "got a certificate request" \
  2756. -C "skip write certificate" \
  2757. -C "skip write certificate verify" \
  2758. -S "skip parse certificate verify"
  2759. run_test "SNI: client auth override: none -> optional" \
  2760. "$P_SRV debug_level=3 auth_mode=none \
  2761. crt_file=data_files/server5.crt key_file=data_files/server5.key \
  2762. sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,optional" \
  2763. "$P_CLI debug_level=3 server_name=localhost" \
  2764. 0 \
  2765. -S "skip write certificate request" \
  2766. -C "skip parse certificate request" \
  2767. -c "got a certificate request" \
  2768. -C "skip write certificate" \
  2769. -C "skip write certificate verify" \
  2770. -S "skip parse certificate verify"
  2771. run_test "SNI: client auth override: optional -> none" \
  2772. "$P_SRV debug_level=3 auth_mode=optional \
  2773. crt_file=data_files/server5.crt key_file=data_files/server5.key \
  2774. sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,none" \
  2775. "$P_CLI debug_level=3 server_name=localhost" \
  2776. 0 \
  2777. -s "skip write certificate request" \
  2778. -C "skip parse certificate request" \
  2779. -c "got no certificate request" \
  2780. -c "skip write certificate" \
  2781. -c "skip write certificate verify" \
  2782. -s "skip parse certificate verify"
  2783. run_test "SNI: CA no override" \
  2784. "$P_SRV debug_level=3 auth_mode=optional \
  2785. crt_file=data_files/server5.crt key_file=data_files/server5.key \
  2786. ca_file=data_files/test-ca.crt \
  2787. sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,required" \
  2788. "$P_CLI debug_level=3 server_name=localhost \
  2789. crt_file=data_files/server6.crt key_file=data_files/server6.key" \
  2790. 1 \
  2791. -S "skip write certificate request" \
  2792. -C "skip parse certificate request" \
  2793. -c "got a certificate request" \
  2794. -C "skip write certificate" \
  2795. -C "skip write certificate verify" \
  2796. -S "skip parse certificate verify" \
  2797. -s "x509_verify_cert() returned" \
  2798. -s "! The certificate is not correctly signed by the trusted CA" \
  2799. -S "The certificate has been revoked (is on a CRL)"
  2800. run_test "SNI: CA override" \
  2801. "$P_SRV debug_level=3 auth_mode=optional \
  2802. crt_file=data_files/server5.crt key_file=data_files/server5.key \
  2803. ca_file=data_files/test-ca.crt \
  2804. sni=localhost,data_files/server2.crt,data_files/server2.key,data_files/test-ca2.crt,-,required" \
  2805. "$P_CLI debug_level=3 server_name=localhost \
  2806. crt_file=data_files/server6.crt key_file=data_files/server6.key" \
  2807. 0 \
  2808. -S "skip write certificate request" \
  2809. -C "skip parse certificate request" \
  2810. -c "got a certificate request" \
  2811. -C "skip write certificate" \
  2812. -C "skip write certificate verify" \
  2813. -S "skip parse certificate verify" \
  2814. -S "x509_verify_cert() returned" \
  2815. -S "! The certificate is not correctly signed by the trusted CA" \
  2816. -S "The certificate has been revoked (is on a CRL)"
  2817. run_test "SNI: CA override with CRL" \
  2818. "$P_SRV debug_level=3 auth_mode=optional \
  2819. crt_file=data_files/server5.crt key_file=data_files/server5.key \
  2820. ca_file=data_files/test-ca.crt \
  2821. sni=localhost,data_files/server2.crt,data_files/server2.key,data_files/test-ca2.crt,data_files/crl-ec-sha256.pem,required" \
  2822. "$P_CLI debug_level=3 server_name=localhost \
  2823. crt_file=data_files/server6.crt key_file=data_files/server6.key" \
  2824. 1 \
  2825. -S "skip write certificate request" \
  2826. -C "skip parse certificate request" \
  2827. -c "got a certificate request" \
  2828. -C "skip write certificate" \
  2829. -C "skip write certificate verify" \
  2830. -S "skip parse certificate verify" \
  2831. -s "x509_verify_cert() returned" \
  2832. -S "! The certificate is not correctly signed by the trusted CA" \
  2833. -s "The certificate has been revoked (is on a CRL)"
  2834. # Tests for SNI and DTLS
  2835. run_test "SNI: DTLS, no SNI callback" \
  2836. "$P_SRV debug_level=3 dtls=1 \
  2837. crt_file=data_files/server5.crt key_file=data_files/server5.key" \
  2838. "$P_CLI server_name=localhost dtls=1" \
  2839. 0 \
  2840. -S "parse ServerName extension" \
  2841. -c "issuer name *: C=NL, O=PolarSSL, CN=Polarssl Test EC CA" \
  2842. -c "subject name *: C=NL, O=PolarSSL, CN=localhost"
  2843. run_test "SNI: DTLS, matching cert 1" \
  2844. "$P_SRV debug_level=3 dtls=1 \
  2845. crt_file=data_files/server5.crt key_file=data_files/server5.key \
  2846. sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-,polarssl.example,data_files/server1-nospace.crt,data_files/server1.key,-,-,-" \
  2847. "$P_CLI server_name=localhost dtls=1" \
  2848. 0 \
  2849. -s "parse ServerName extension" \
  2850. -c "issuer name *: C=NL, O=PolarSSL, CN=PolarSSL Test CA" \
  2851. -c "subject name *: C=NL, O=PolarSSL, CN=localhost"
  2852. run_test "SNI: DTLS, matching cert 2" \
  2853. "$P_SRV debug_level=3 dtls=1 \
  2854. crt_file=data_files/server5.crt key_file=data_files/server5.key \
  2855. sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-,polarssl.example,data_files/server1-nospace.crt,data_files/server1.key,-,-,-" \
  2856. "$P_CLI server_name=polarssl.example dtls=1" \
  2857. 0 \
  2858. -s "parse ServerName extension" \
  2859. -c "issuer name *: C=NL, O=PolarSSL, CN=PolarSSL Test CA" \
  2860. -c "subject name *: C=NL, O=PolarSSL, CN=polarssl.example"
  2861. run_test "SNI: DTLS, no matching cert" \
  2862. "$P_SRV debug_level=3 dtls=1 \
  2863. crt_file=data_files/server5.crt key_file=data_files/server5.key \
  2864. sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-,polarssl.example,data_files/server1-nospace.crt,data_files/server1.key,-,-,-" \
  2865. "$P_CLI server_name=nonesuch.example dtls=1" \
  2866. 1 \
  2867. -s "parse ServerName extension" \
  2868. -s "ssl_sni_wrapper() returned" \
  2869. -s "mbedtls_ssl_handshake returned" \
  2870. -c "mbedtls_ssl_handshake returned" \
  2871. -c "SSL - A fatal alert message was received from our peer"
  2872. run_test "SNI: DTLS, client auth no override: optional" \
  2873. "$P_SRV debug_level=3 auth_mode=optional dtls=1 \
  2874. crt_file=data_files/server5.crt key_file=data_files/server5.key \
  2875. sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-" \
  2876. "$P_CLI debug_level=3 server_name=localhost dtls=1" \
  2877. 0 \
  2878. -S "skip write certificate request" \
  2879. -C "skip parse certificate request" \
  2880. -c "got a certificate request" \
  2881. -C "skip write certificate" \
  2882. -C "skip write certificate verify" \
  2883. -S "skip parse certificate verify"
  2884. run_test "SNI: DTLS, client auth override: none -> optional" \
  2885. "$P_SRV debug_level=3 auth_mode=none dtls=1 \
  2886. crt_file=data_files/server5.crt key_file=data_files/server5.key \
  2887. sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,optional" \
  2888. "$P_CLI debug_level=3 server_name=localhost dtls=1" \
  2889. 0 \
  2890. -S "skip write certificate request" \
  2891. -C "skip parse certificate request" \
  2892. -c "got a certificate request" \
  2893. -C "skip write certificate" \
  2894. -C "skip write certificate verify" \
  2895. -S "skip parse certificate verify"
  2896. run_test "SNI: DTLS, client auth override: optional -> none" \
  2897. "$P_SRV debug_level=3 auth_mode=optional dtls=1 \
  2898. crt_file=data_files/server5.crt key_file=data_files/server5.key \
  2899. sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,none" \
  2900. "$P_CLI debug_level=3 server_name=localhost dtls=1" \
  2901. 0 \
  2902. -s "skip write certificate request" \
  2903. -C "skip parse certificate request" \
  2904. -c "got no certificate request" \
  2905. -c "skip write certificate" \
  2906. -c "skip write certificate verify" \
  2907. -s "skip parse certificate verify"
  2908. run_test "SNI: DTLS, CA no override" \
  2909. "$P_SRV debug_level=3 auth_mode=optional dtls=1 \
  2910. crt_file=data_files/server5.crt key_file=data_files/server5.key \
  2911. ca_file=data_files/test-ca.crt \
  2912. sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,required" \
  2913. "$P_CLI debug_level=3 server_name=localhost dtls=1 \
  2914. crt_file=data_files/server6.crt key_file=data_files/server6.key" \
  2915. 1 \
  2916. -S "skip write certificate request" \
  2917. -C "skip parse certificate request" \
  2918. -c "got a certificate request" \
  2919. -C "skip write certificate" \
  2920. -C "skip write certificate verify" \
  2921. -S "skip parse certificate verify" \
  2922. -s "x509_verify_cert() returned" \
  2923. -s "! The certificate is not correctly signed by the trusted CA" \
  2924. -S "The certificate has been revoked (is on a CRL)"
  2925. run_test "SNI: DTLS, CA override" \
  2926. "$P_SRV debug_level=3 auth_mode=optional dtls=1 \
  2927. crt_file=data_files/server5.crt key_file=data_files/server5.key \
  2928. ca_file=data_files/test-ca.crt \
  2929. sni=localhost,data_files/server2.crt,data_files/server2.key,data_files/test-ca2.crt,-,required" \
  2930. "$P_CLI debug_level=3 server_name=localhost dtls=1 \
  2931. crt_file=data_files/server6.crt key_file=data_files/server6.key" \
  2932. 0 \
  2933. -S "skip write certificate request" \
  2934. -C "skip parse certificate request" \
  2935. -c "got a certificate request" \
  2936. -C "skip write certificate" \
  2937. -C "skip write certificate verify" \
  2938. -S "skip parse certificate verify" \
  2939. -S "x509_verify_cert() returned" \
  2940. -S "! The certificate is not correctly signed by the trusted CA" \
  2941. -S "The certificate has been revoked (is on a CRL)"
  2942. run_test "SNI: DTLS, CA override with CRL" \
  2943. "$P_SRV debug_level=3 auth_mode=optional \
  2944. crt_file=data_files/server5.crt key_file=data_files/server5.key dtls=1 \
  2945. ca_file=data_files/test-ca.crt \
  2946. sni=localhost,data_files/server2.crt,data_files/server2.key,data_files/test-ca2.crt,data_files/crl-ec-sha256.pem,required" \
  2947. "$P_CLI debug_level=3 server_name=localhost dtls=1 \
  2948. crt_file=data_files/server6.crt key_file=data_files/server6.key" \
  2949. 1 \
  2950. -S "skip write certificate request" \
  2951. -C "skip parse certificate request" \
  2952. -c "got a certificate request" \
  2953. -C "skip write certificate" \
  2954. -C "skip write certificate verify" \
  2955. -S "skip parse certificate verify" \
  2956. -s "x509_verify_cert() returned" \
  2957. -S "! The certificate is not correctly signed by the trusted CA" \
  2958. -s "The certificate has been revoked (is on a CRL)"
  2959. # Tests for non-blocking I/O: exercise a variety of handshake flows
  2960. run_test "Non-blocking I/O: basic handshake" \
  2961. "$P_SRV nbio=2 tickets=0 auth_mode=none" \
  2962. "$P_CLI nbio=2 tickets=0" \
  2963. 0 \
  2964. -S "mbedtls_ssl_handshake returned" \
  2965. -C "mbedtls_ssl_handshake returned" \
  2966. -c "Read from server: .* bytes read"
  2967. run_test "Non-blocking I/O: client auth" \
  2968. "$P_SRV nbio=2 tickets=0 auth_mode=required" \
  2969. "$P_CLI nbio=2 tickets=0" \
  2970. 0 \
  2971. -S "mbedtls_ssl_handshake returned" \
  2972. -C "mbedtls_ssl_handshake returned" \
  2973. -c "Read from server: .* bytes read"
  2974. run_test "Non-blocking I/O: ticket" \
  2975. "$P_SRV nbio=2 tickets=1 auth_mode=none" \
  2976. "$P_CLI nbio=2 tickets=1" \
  2977. 0 \
  2978. -S "mbedtls_ssl_handshake returned" \
  2979. -C "mbedtls_ssl_handshake returned" \
  2980. -c "Read from server: .* bytes read"
  2981. run_test "Non-blocking I/O: ticket + client auth" \
  2982. "$P_SRV nbio=2 tickets=1 auth_mode=required" \
  2983. "$P_CLI nbio=2 tickets=1" \
  2984. 0 \
  2985. -S "mbedtls_ssl_handshake returned" \
  2986. -C "mbedtls_ssl_handshake returned" \
  2987. -c "Read from server: .* bytes read"
  2988. run_test "Non-blocking I/O: ticket + client auth + resume" \
  2989. "$P_SRV nbio=2 tickets=1 auth_mode=required" \
  2990. "$P_CLI nbio=2 tickets=1 reconnect=1" \
  2991. 0 \
  2992. -S "mbedtls_ssl_handshake returned" \
  2993. -C "mbedtls_ssl_handshake returned" \
  2994. -c "Read from server: .* bytes read"
  2995. run_test "Non-blocking I/O: ticket + resume" \
  2996. "$P_SRV nbio=2 tickets=1 auth_mode=none" \
  2997. "$P_CLI nbio=2 tickets=1 reconnect=1" \
  2998. 0 \
  2999. -S "mbedtls_ssl_handshake returned" \
  3000. -C "mbedtls_ssl_handshake returned" \
  3001. -c "Read from server: .* bytes read"
  3002. run_test "Non-blocking I/O: session-id resume" \
  3003. "$P_SRV nbio=2 tickets=0 auth_mode=none" \
  3004. "$P_CLI nbio=2 tickets=0 reconnect=1" \
  3005. 0 \
  3006. -S "mbedtls_ssl_handshake returned" \
  3007. -C "mbedtls_ssl_handshake returned" \
  3008. -c "Read from server: .* bytes read"
  3009. # Tests for event-driven I/O: exercise a variety of handshake flows
  3010. run_test "Event-driven I/O: basic handshake" \
  3011. "$P_SRV event=1 tickets=0 auth_mode=none" \
  3012. "$P_CLI event=1 tickets=0" \
  3013. 0 \
  3014. -S "mbedtls_ssl_handshake returned" \
  3015. -C "mbedtls_ssl_handshake returned" \
  3016. -c "Read from server: .* bytes read"
  3017. run_test "Event-driven I/O: client auth" \
  3018. "$P_SRV event=1 tickets=0 auth_mode=required" \
  3019. "$P_CLI event=1 tickets=0" \
  3020. 0 \
  3021. -S "mbedtls_ssl_handshake returned" \
  3022. -C "mbedtls_ssl_handshake returned" \
  3023. -c "Read from server: .* bytes read"
  3024. run_test "Event-driven I/O: ticket" \
  3025. "$P_SRV event=1 tickets=1 auth_mode=none" \
  3026. "$P_CLI event=1 tickets=1" \
  3027. 0 \
  3028. -S "mbedtls_ssl_handshake returned" \
  3029. -C "mbedtls_ssl_handshake returned" \
  3030. -c "Read from server: .* bytes read"
  3031. run_test "Event-driven I/O: ticket + client auth" \
  3032. "$P_SRV event=1 tickets=1 auth_mode=required" \
  3033. "$P_CLI event=1 tickets=1" \
  3034. 0 \
  3035. -S "mbedtls_ssl_handshake returned" \
  3036. -C "mbedtls_ssl_handshake returned" \
  3037. -c "Read from server: .* bytes read"
  3038. run_test "Event-driven I/O: ticket + client auth + resume" \
  3039. "$P_SRV event=1 tickets=1 auth_mode=required" \
  3040. "$P_CLI event=1 tickets=1 reconnect=1" \
  3041. 0 \
  3042. -S "mbedtls_ssl_handshake returned" \
  3043. -C "mbedtls_ssl_handshake returned" \
  3044. -c "Read from server: .* bytes read"
  3045. run_test "Event-driven I/O: ticket + resume" \
  3046. "$P_SRV event=1 tickets=1 auth_mode=none" \
  3047. "$P_CLI event=1 tickets=1 reconnect=1" \
  3048. 0 \
  3049. -S "mbedtls_ssl_handshake returned" \
  3050. -C "mbedtls_ssl_handshake returned" \
  3051. -c "Read from server: .* bytes read"
  3052. run_test "Event-driven I/O: session-id resume" \
  3053. "$P_SRV event=1 tickets=0 auth_mode=none" \
  3054. "$P_CLI event=1 tickets=0 reconnect=1" \
  3055. 0 \
  3056. -S "mbedtls_ssl_handshake returned" \
  3057. -C "mbedtls_ssl_handshake returned" \
  3058. -c "Read from server: .* bytes read"
  3059. run_test "Event-driven I/O, DTLS: basic handshake" \
  3060. "$P_SRV dtls=1 event=1 tickets=0 auth_mode=none" \
  3061. "$P_CLI dtls=1 event=1 tickets=0" \
  3062. 0 \
  3063. -c "Read from server: .* bytes read"
  3064. run_test "Event-driven I/O, DTLS: client auth" \
  3065. "$P_SRV dtls=1 event=1 tickets=0 auth_mode=required" \
  3066. "$P_CLI dtls=1 event=1 tickets=0" \
  3067. 0 \
  3068. -c "Read from server: .* bytes read"
  3069. run_test "Event-driven I/O, DTLS: ticket" \
  3070. "$P_SRV dtls=1 event=1 tickets=1 auth_mode=none" \
  3071. "$P_CLI dtls=1 event=1 tickets=1" \
  3072. 0 \
  3073. -c "Read from server: .* bytes read"
  3074. run_test "Event-driven I/O, DTLS: ticket + client auth" \
  3075. "$P_SRV dtls=1 event=1 tickets=1 auth_mode=required" \
  3076. "$P_CLI dtls=1 event=1 tickets=1" \
  3077. 0 \
  3078. -c "Read from server: .* bytes read"
  3079. run_test "Event-driven I/O, DTLS: ticket + client auth + resume" \
  3080. "$P_SRV dtls=1 event=1 tickets=1 auth_mode=required" \
  3081. "$P_CLI dtls=1 event=1 tickets=1 reconnect=1 skip_close_notify=1" \
  3082. 0 \
  3083. -c "Read from server: .* bytes read"
  3084. run_test "Event-driven I/O, DTLS: ticket + resume" \
  3085. "$P_SRV dtls=1 event=1 tickets=1 auth_mode=none" \
  3086. "$P_CLI dtls=1 event=1 tickets=1 reconnect=1 skip_close_notify=1" \
  3087. 0 \
  3088. -c "Read from server: .* bytes read"
  3089. run_test "Event-driven I/O, DTLS: session-id resume" \
  3090. "$P_SRV dtls=1 event=1 tickets=0 auth_mode=none" \
  3091. "$P_CLI dtls=1 event=1 tickets=0 reconnect=1 skip_close_notify=1" \
  3092. 0 \
  3093. -c "Read from server: .* bytes read"
  3094. # This test demonstrates the need for the mbedtls_ssl_check_pending function.
  3095. # During session resumption, the client will send its ApplicationData record
  3096. # within the same datagram as the Finished messages. In this situation, the
  3097. # server MUST NOT idle on the underlying transport after handshake completion,
  3098. # because the ApplicationData request has already been queued internally.
  3099. run_test "Event-driven I/O, DTLS: session-id resume, UDP packing" \
  3100. -p "$P_PXY pack=50" \
  3101. "$P_SRV dtls=1 event=1 tickets=0 auth_mode=required" \
  3102. "$P_CLI dtls=1 event=1 tickets=0 reconnect=1 skip_close_notify=1" \
  3103. 0 \
  3104. -c "Read from server: .* bytes read"
  3105. # Tests for version negotiation
  3106. run_test "Version check: all -> 1.2" \
  3107. "$P_SRV" \
  3108. "$P_CLI" \
  3109. 0 \
  3110. -S "mbedtls_ssl_handshake returned" \
  3111. -C "mbedtls_ssl_handshake returned" \
  3112. -s "Protocol is TLSv1.2" \
  3113. -c "Protocol is TLSv1.2"
  3114. run_test "Version check: cli max 1.1 -> 1.1" \
  3115. "$P_SRV" \
  3116. "$P_CLI max_version=tls1_1" \
  3117. 0 \
  3118. -S "mbedtls_ssl_handshake returned" \
  3119. -C "mbedtls_ssl_handshake returned" \
  3120. -s "Protocol is TLSv1.1" \
  3121. -c "Protocol is TLSv1.1"
  3122. run_test "Version check: srv max 1.1 -> 1.1" \
  3123. "$P_SRV max_version=tls1_1" \
  3124. "$P_CLI" \
  3125. 0 \
  3126. -S "mbedtls_ssl_handshake returned" \
  3127. -C "mbedtls_ssl_handshake returned" \
  3128. -s "Protocol is TLSv1.1" \
  3129. -c "Protocol is TLSv1.1"
  3130. run_test "Version check: cli+srv max 1.1 -> 1.1" \
  3131. "$P_SRV max_version=tls1_1" \
  3132. "$P_CLI max_version=tls1_1" \
  3133. 0 \
  3134. -S "mbedtls_ssl_handshake returned" \
  3135. -C "mbedtls_ssl_handshake returned" \
  3136. -s "Protocol is TLSv1.1" \
  3137. -c "Protocol is TLSv1.1"
  3138. run_test "Version check: cli max 1.1, srv min 1.1 -> 1.1" \
  3139. "$P_SRV min_version=tls1_1" \
  3140. "$P_CLI max_version=tls1_1" \
  3141. 0 \
  3142. -S "mbedtls_ssl_handshake returned" \
  3143. -C "mbedtls_ssl_handshake returned" \
  3144. -s "Protocol is TLSv1.1" \
  3145. -c "Protocol is TLSv1.1"
  3146. run_test "Version check: cli min 1.1, srv max 1.1 -> 1.1" \
  3147. "$P_SRV max_version=tls1_1" \
  3148. "$P_CLI min_version=tls1_1" \
  3149. 0 \
  3150. -S "mbedtls_ssl_handshake returned" \
  3151. -C "mbedtls_ssl_handshake returned" \
  3152. -s "Protocol is TLSv1.1" \
  3153. -c "Protocol is TLSv1.1"
  3154. run_test "Version check: cli min 1.2, srv max 1.1 -> fail" \
  3155. "$P_SRV max_version=tls1_1" \
  3156. "$P_CLI min_version=tls1_2" \
  3157. 1 \
  3158. -s "mbedtls_ssl_handshake returned" \
  3159. -c "mbedtls_ssl_handshake returned" \
  3160. -c "SSL - Handshake protocol not within min/max boundaries"
  3161. run_test "Version check: srv min 1.2, cli max 1.1 -> fail" \
  3162. "$P_SRV min_version=tls1_2" \
  3163. "$P_CLI max_version=tls1_1" \
  3164. 1 \
  3165. -s "mbedtls_ssl_handshake returned" \
  3166. -c "mbedtls_ssl_handshake returned" \
  3167. -s "SSL - Handshake protocol not within min/max boundaries"
  3168. # Tests for ALPN extension
  3169. run_test "ALPN: none" \
  3170. "$P_SRV debug_level=3" \
  3171. "$P_CLI debug_level=3" \
  3172. 0 \
  3173. -C "client hello, adding alpn extension" \
  3174. -S "found alpn extension" \
  3175. -C "got an alert message, type: \\[2:120]" \
  3176. -S "server hello, adding alpn extension" \
  3177. -C "found alpn extension " \
  3178. -C "Application Layer Protocol is" \
  3179. -S "Application Layer Protocol is"
  3180. run_test "ALPN: client only" \
  3181. "$P_SRV debug_level=3" \
  3182. "$P_CLI debug_level=3 alpn=abc,1234" \
  3183. 0 \
  3184. -c "client hello, adding alpn extension" \
  3185. -s "found alpn extension" \
  3186. -C "got an alert message, type: \\[2:120]" \
  3187. -S "server hello, adding alpn extension" \
  3188. -C "found alpn extension " \
  3189. -c "Application Layer Protocol is (none)" \
  3190. -S "Application Layer Protocol is"
  3191. run_test "ALPN: server only" \
  3192. "$P_SRV debug_level=3 alpn=abc,1234" \
  3193. "$P_CLI debug_level=3" \
  3194. 0 \
  3195. -C "client hello, adding alpn extension" \
  3196. -S "found alpn extension" \
  3197. -C "got an alert message, type: \\[2:120]" \
  3198. -S "server hello, adding alpn extension" \
  3199. -C "found alpn extension " \
  3200. -C "Application Layer Protocol is" \
  3201. -s "Application Layer Protocol is (none)"
  3202. run_test "ALPN: both, common cli1-srv1" \
  3203. "$P_SRV debug_level=3 alpn=abc,1234" \
  3204. "$P_CLI debug_level=3 alpn=abc,1234" \
  3205. 0 \
  3206. -c "client hello, adding alpn extension" \
  3207. -s "found alpn extension" \
  3208. -C "got an alert message, type: \\[2:120]" \
  3209. -s "server hello, adding alpn extension" \
  3210. -c "found alpn extension" \
  3211. -c "Application Layer Protocol is abc" \
  3212. -s "Application Layer Protocol is abc"
  3213. run_test "ALPN: both, common cli2-srv1" \
  3214. "$P_SRV debug_level=3 alpn=abc,1234" \
  3215. "$P_CLI debug_level=3 alpn=1234,abc" \
  3216. 0 \
  3217. -c "client hello, adding alpn extension" \
  3218. -s "found alpn extension" \
  3219. -C "got an alert message, type: \\[2:120]" \
  3220. -s "server hello, adding alpn extension" \
  3221. -c "found alpn extension" \
  3222. -c "Application Layer Protocol is abc" \
  3223. -s "Application Layer Protocol is abc"
  3224. run_test "ALPN: both, common cli1-srv2" \
  3225. "$P_SRV debug_level=3 alpn=abc,1234" \
  3226. "$P_CLI debug_level=3 alpn=1234,abcde" \
  3227. 0 \
  3228. -c "client hello, adding alpn extension" \
  3229. -s "found alpn extension" \
  3230. -C "got an alert message, type: \\[2:120]" \
  3231. -s "server hello, adding alpn extension" \
  3232. -c "found alpn extension" \
  3233. -c "Application Layer Protocol is 1234" \
  3234. -s "Application Layer Protocol is 1234"
  3235. run_test "ALPN: both, no common" \
  3236. "$P_SRV debug_level=3 alpn=abc,123" \
  3237. "$P_CLI debug_level=3 alpn=1234,abcde" \
  3238. 1 \
  3239. -c "client hello, adding alpn extension" \
  3240. -s "found alpn extension" \
  3241. -c "got an alert message, type: \\[2:120]" \
  3242. -S "server hello, adding alpn extension" \
  3243. -C "found alpn extension" \
  3244. -C "Application Layer Protocol is 1234" \
  3245. -S "Application Layer Protocol is 1234"
  3246. # Tests for keyUsage in leaf certificates, part 1:
  3247. # server-side certificate/suite selection
  3248. run_test "keyUsage srv: RSA, digitalSignature -> (EC)DHE-RSA" \
  3249. "$P_SRV key_file=data_files/server2.key \
  3250. crt_file=data_files/server2.ku-ds.crt" \
  3251. "$P_CLI" \
  3252. 0 \
  3253. -c "Ciphersuite is TLS-[EC]*DHE-RSA-WITH-"
  3254. run_test "keyUsage srv: RSA, keyEncipherment -> RSA" \
  3255. "$P_SRV key_file=data_files/server2.key \
  3256. crt_file=data_files/server2.ku-ke.crt" \
  3257. "$P_CLI" \
  3258. 0 \
  3259. -c "Ciphersuite is TLS-RSA-WITH-"
  3260. run_test "keyUsage srv: RSA, keyAgreement -> fail" \
  3261. "$P_SRV key_file=data_files/server2.key \
  3262. crt_file=data_files/server2.ku-ka.crt" \
  3263. "$P_CLI" \
  3264. 1 \
  3265. -C "Ciphersuite is "
  3266. run_test "keyUsage srv: ECDSA, digitalSignature -> ECDHE-ECDSA" \
  3267. "$P_SRV key_file=data_files/server5.key \
  3268. crt_file=data_files/server5.ku-ds.crt" \
  3269. "$P_CLI" \
  3270. 0 \
  3271. -c "Ciphersuite is TLS-ECDHE-ECDSA-WITH-"
  3272. run_test "keyUsage srv: ECDSA, keyAgreement -> ECDH-" \
  3273. "$P_SRV key_file=data_files/server5.key \
  3274. crt_file=data_files/server5.ku-ka.crt" \
  3275. "$P_CLI" \
  3276. 0 \
  3277. -c "Ciphersuite is TLS-ECDH-"
  3278. run_test "keyUsage srv: ECDSA, keyEncipherment -> fail" \
  3279. "$P_SRV key_file=data_files/server5.key \
  3280. crt_file=data_files/server5.ku-ke.crt" \
  3281. "$P_CLI" \
  3282. 1 \
  3283. -C "Ciphersuite is "
  3284. # Tests for keyUsage in leaf certificates, part 2:
  3285. # client-side checking of server cert
  3286. run_test "keyUsage cli: DigitalSignature+KeyEncipherment, RSA: OK" \
  3287. "$O_SRV -key data_files/server2.key \
  3288. -cert data_files/server2.ku-ds_ke.crt" \
  3289. "$P_CLI debug_level=1 \
  3290. force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
  3291. 0 \
  3292. -C "bad certificate (usage extensions)" \
  3293. -C "Processing of the Certificate handshake message failed" \
  3294. -c "Ciphersuite is TLS-"
  3295. run_test "keyUsage cli: DigitalSignature+KeyEncipherment, DHE-RSA: OK" \
  3296. "$O_SRV -key data_files/server2.key \
  3297. -cert data_files/server2.ku-ds_ke.crt" \
  3298. "$P_CLI debug_level=1 \
  3299. force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA" \
  3300. 0 \
  3301. -C "bad certificate (usage extensions)" \
  3302. -C "Processing of the Certificate handshake message failed" \
  3303. -c "Ciphersuite is TLS-"
  3304. run_test "keyUsage cli: KeyEncipherment, RSA: OK" \
  3305. "$O_SRV -key data_files/server2.key \
  3306. -cert data_files/server2.ku-ke.crt" \
  3307. "$P_CLI debug_level=1 \
  3308. force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
  3309. 0 \
  3310. -C "bad certificate (usage extensions)" \
  3311. -C "Processing of the Certificate handshake message failed" \
  3312. -c "Ciphersuite is TLS-"
  3313. run_test "keyUsage cli: KeyEncipherment, DHE-RSA: fail" \
  3314. "$O_SRV -key data_files/server2.key \
  3315. -cert data_files/server2.ku-ke.crt" \
  3316. "$P_CLI debug_level=1 \
  3317. force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA" \
  3318. 1 \
  3319. -c "bad certificate (usage extensions)" \
  3320. -c "Processing of the Certificate handshake message failed" \
  3321. -C "Ciphersuite is TLS-"
  3322. run_test "keyUsage cli: KeyEncipherment, DHE-RSA: fail, soft" \
  3323. "$O_SRV -key data_files/server2.key \
  3324. -cert data_files/server2.ku-ke.crt" \
  3325. "$P_CLI debug_level=1 auth_mode=optional \
  3326. force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA" \
  3327. 0 \
  3328. -c "bad certificate (usage extensions)" \
  3329. -C "Processing of the Certificate handshake message failed" \
  3330. -c "Ciphersuite is TLS-" \
  3331. -c "! Usage does not match the keyUsage extension"
  3332. run_test "keyUsage cli: DigitalSignature, DHE-RSA: OK" \
  3333. "$O_SRV -key data_files/server2.key \
  3334. -cert data_files/server2.ku-ds.crt" \
  3335. "$P_CLI debug_level=1 \
  3336. force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA" \
  3337. 0 \
  3338. -C "bad certificate (usage extensions)" \
  3339. -C "Processing of the Certificate handshake message failed" \
  3340. -c "Ciphersuite is TLS-"
  3341. run_test "keyUsage cli: DigitalSignature, RSA: fail" \
  3342. "$O_SRV -key data_files/server2.key \
  3343. -cert data_files/server2.ku-ds.crt" \
  3344. "$P_CLI debug_level=1 \
  3345. force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
  3346. 1 \
  3347. -c "bad certificate (usage extensions)" \
  3348. -c "Processing of the Certificate handshake message failed" \
  3349. -C "Ciphersuite is TLS-"
  3350. run_test "keyUsage cli: DigitalSignature, RSA: fail, soft" \
  3351. "$O_SRV -key data_files/server2.key \
  3352. -cert data_files/server2.ku-ds.crt" \
  3353. "$P_CLI debug_level=1 auth_mode=optional \
  3354. force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
  3355. 0 \
  3356. -c "bad certificate (usage extensions)" \
  3357. -C "Processing of the Certificate handshake message failed" \
  3358. -c "Ciphersuite is TLS-" \
  3359. -c "! Usage does not match the keyUsage extension"
  3360. # Tests for keyUsage in leaf certificates, part 3:
  3361. # server-side checking of client cert
  3362. run_test "keyUsage cli-auth: RSA, DigitalSignature: OK" \
  3363. "$P_SRV debug_level=1 auth_mode=optional" \
  3364. "$O_CLI -key data_files/server2.key \
  3365. -cert data_files/server2.ku-ds.crt" \
  3366. 0 \
  3367. -S "bad certificate (usage extensions)" \
  3368. -S "Processing of the Certificate handshake message failed"
  3369. run_test "keyUsage cli-auth: RSA, KeyEncipherment: fail (soft)" \
  3370. "$P_SRV debug_level=1 auth_mode=optional" \
  3371. "$O_CLI -key data_files/server2.key \
  3372. -cert data_files/server2.ku-ke.crt" \
  3373. 0 \
  3374. -s "bad certificate (usage extensions)" \
  3375. -S "Processing of the Certificate handshake message failed"
  3376. run_test "keyUsage cli-auth: RSA, KeyEncipherment: fail (hard)" \
  3377. "$P_SRV debug_level=1 auth_mode=required" \
  3378. "$O_CLI -key data_files/server2.key \
  3379. -cert data_files/server2.ku-ke.crt" \
  3380. 1 \
  3381. -s "bad certificate (usage extensions)" \
  3382. -s "Processing of the Certificate handshake message failed"
  3383. run_test "keyUsage cli-auth: ECDSA, DigitalSignature: OK" \
  3384. "$P_SRV debug_level=1 auth_mode=optional" \
  3385. "$O_CLI -key data_files/server5.key \
  3386. -cert data_files/server5.ku-ds.crt" \
  3387. 0 \
  3388. -S "bad certificate (usage extensions)" \
  3389. -S "Processing of the Certificate handshake message failed"
  3390. run_test "keyUsage cli-auth: ECDSA, KeyAgreement: fail (soft)" \
  3391. "$P_SRV debug_level=1 auth_mode=optional" \
  3392. "$O_CLI -key data_files/server5.key \
  3393. -cert data_files/server5.ku-ka.crt" \
  3394. 0 \
  3395. -s "bad certificate (usage extensions)" \
  3396. -S "Processing of the Certificate handshake message failed"
  3397. # Tests for extendedKeyUsage, part 1: server-side certificate/suite selection
  3398. run_test "extKeyUsage srv: serverAuth -> OK" \
  3399. "$P_SRV key_file=data_files/server5.key \
  3400. crt_file=data_files/server5.eku-srv.crt" \
  3401. "$P_CLI" \
  3402. 0
  3403. run_test "extKeyUsage srv: serverAuth,clientAuth -> OK" \
  3404. "$P_SRV key_file=data_files/server5.key \
  3405. crt_file=data_files/server5.eku-srv.crt" \
  3406. "$P_CLI" \
  3407. 0
  3408. run_test "extKeyUsage srv: codeSign,anyEKU -> OK" \
  3409. "$P_SRV key_file=data_files/server5.key \
  3410. crt_file=data_files/server5.eku-cs_any.crt" \
  3411. "$P_CLI" \
  3412. 0
  3413. run_test "extKeyUsage srv: codeSign -> fail" \
  3414. "$P_SRV key_file=data_files/server5.key \
  3415. crt_file=data_files/server5.eku-cli.crt" \
  3416. "$P_CLI" \
  3417. 1
  3418. # Tests for extendedKeyUsage, part 2: client-side checking of server cert
  3419. run_test "extKeyUsage cli: serverAuth -> OK" \
  3420. "$O_SRV -key data_files/server5.key \
  3421. -cert data_files/server5.eku-srv.crt" \
  3422. "$P_CLI debug_level=1" \
  3423. 0 \
  3424. -C "bad certificate (usage extensions)" \
  3425. -C "Processing of the Certificate handshake message failed" \
  3426. -c "Ciphersuite is TLS-"
  3427. run_test "extKeyUsage cli: serverAuth,clientAuth -> OK" \
  3428. "$O_SRV -key data_files/server5.key \
  3429. -cert data_files/server5.eku-srv_cli.crt" \
  3430. "$P_CLI debug_level=1" \
  3431. 0 \
  3432. -C "bad certificate (usage extensions)" \
  3433. -C "Processing of the Certificate handshake message failed" \
  3434. -c "Ciphersuite is TLS-"
  3435. run_test "extKeyUsage cli: codeSign,anyEKU -> OK" \
  3436. "$O_SRV -key data_files/server5.key \
  3437. -cert data_files/server5.eku-cs_any.crt" \
  3438. "$P_CLI debug_level=1" \
  3439. 0 \
  3440. -C "bad certificate (usage extensions)" \
  3441. -C "Processing of the Certificate handshake message failed" \
  3442. -c "Ciphersuite is TLS-"
  3443. run_test "extKeyUsage cli: codeSign -> fail" \
  3444. "$O_SRV -key data_files/server5.key \
  3445. -cert data_files/server5.eku-cs.crt" \
  3446. "$P_CLI debug_level=1" \
  3447. 1 \
  3448. -c "bad certificate (usage extensions)" \
  3449. -c "Processing of the Certificate handshake message failed" \
  3450. -C "Ciphersuite is TLS-"
  3451. # Tests for extendedKeyUsage, part 3: server-side checking of client cert
  3452. run_test "extKeyUsage cli-auth: clientAuth -> OK" \
  3453. "$P_SRV debug_level=1 auth_mode=optional" \
  3454. "$O_CLI -key data_files/server5.key \
  3455. -cert data_files/server5.eku-cli.crt" \
  3456. 0 \
  3457. -S "bad certificate (usage extensions)" \
  3458. -S "Processing of the Certificate handshake message failed"
  3459. run_test "extKeyUsage cli-auth: serverAuth,clientAuth -> OK" \
  3460. "$P_SRV debug_level=1 auth_mode=optional" \
  3461. "$O_CLI -key data_files/server5.key \
  3462. -cert data_files/server5.eku-srv_cli.crt" \
  3463. 0 \
  3464. -S "bad certificate (usage extensions)" \
  3465. -S "Processing of the Certificate handshake message failed"
  3466. run_test "extKeyUsage cli-auth: codeSign,anyEKU -> OK" \
  3467. "$P_SRV debug_level=1 auth_mode=optional" \
  3468. "$O_CLI -key data_files/server5.key \
  3469. -cert data_files/server5.eku-cs_any.crt" \
  3470. 0 \
  3471. -S "bad certificate (usage extensions)" \
  3472. -S "Processing of the Certificate handshake message failed"
  3473. run_test "extKeyUsage cli-auth: codeSign -> fail (soft)" \
  3474. "$P_SRV debug_level=1 auth_mode=optional" \
  3475. "$O_CLI -key data_files/server5.key \
  3476. -cert data_files/server5.eku-cs.crt" \
  3477. 0 \
  3478. -s "bad certificate (usage extensions)" \
  3479. -S "Processing of the Certificate handshake message failed"
  3480. run_test "extKeyUsage cli-auth: codeSign -> fail (hard)" \
  3481. "$P_SRV debug_level=1 auth_mode=required" \
  3482. "$O_CLI -key data_files/server5.key \
  3483. -cert data_files/server5.eku-cs.crt" \
  3484. 1 \
  3485. -s "bad certificate (usage extensions)" \
  3486. -s "Processing of the Certificate handshake message failed"
  3487. # Tests for DHM parameters loading
  3488. run_test "DHM parameters: reference" \
  3489. "$P_SRV" \
  3490. "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \
  3491. debug_level=3" \
  3492. 0 \
  3493. -c "value of 'DHM: P ' (2048 bits)" \
  3494. -c "value of 'DHM: G ' (2 bits)"
  3495. run_test "DHM parameters: other parameters" \
  3496. "$P_SRV dhm_file=data_files/dhparams.pem" \
  3497. "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \
  3498. debug_level=3" \
  3499. 0 \
  3500. -c "value of 'DHM: P ' (1024 bits)" \
  3501. -c "value of 'DHM: G ' (2 bits)"
  3502. # Tests for DHM client-side size checking
  3503. run_test "DHM size: server default, client default, OK" \
  3504. "$P_SRV" \
  3505. "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \
  3506. debug_level=1" \
  3507. 0 \
  3508. -C "DHM prime too short:"
  3509. run_test "DHM size: server default, client 2048, OK" \
  3510. "$P_SRV" \
  3511. "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \
  3512. debug_level=1 dhmlen=2048" \
  3513. 0 \
  3514. -C "DHM prime too short:"
  3515. run_test "DHM size: server 1024, client default, OK" \
  3516. "$P_SRV dhm_file=data_files/dhparams.pem" \
  3517. "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \
  3518. debug_level=1" \
  3519. 0 \
  3520. -C "DHM prime too short:"
  3521. run_test "DHM size: server 999, client 999, OK" \
  3522. "$P_SRV dhm_file=data_files/dh.999.pem" \
  3523. "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \
  3524. debug_level=1 dhmlen=999" \
  3525. 0 \
  3526. -C "DHM prime too short:"
  3527. run_test "DHM size: server 1000, client 1000, OK" \
  3528. "$P_SRV dhm_file=data_files/dh.1000.pem" \
  3529. "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \
  3530. debug_level=1 dhmlen=1000" \
  3531. 0 \
  3532. -C "DHM prime too short:"
  3533. run_test "DHM size: server 1000, client default, rejected" \
  3534. "$P_SRV dhm_file=data_files/dh.1000.pem" \
  3535. "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \
  3536. debug_level=1" \
  3537. 1 \
  3538. -c "DHM prime too short:"
  3539. run_test "DHM size: server 1000, client 1001, rejected" \
  3540. "$P_SRV dhm_file=data_files/dh.1000.pem" \
  3541. "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \
  3542. debug_level=1 dhmlen=1001" \
  3543. 1 \
  3544. -c "DHM prime too short:"
  3545. run_test "DHM size: server 999, client 1000, rejected" \
  3546. "$P_SRV dhm_file=data_files/dh.999.pem" \
  3547. "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \
  3548. debug_level=1 dhmlen=1000" \
  3549. 1 \
  3550. -c "DHM prime too short:"
  3551. run_test "DHM size: server 998, client 999, rejected" \
  3552. "$P_SRV dhm_file=data_files/dh.998.pem" \
  3553. "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \
  3554. debug_level=1 dhmlen=999" \
  3555. 1 \
  3556. -c "DHM prime too short:"
  3557. run_test "DHM size: server default, client 2049, rejected" \
  3558. "$P_SRV" \
  3559. "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \
  3560. debug_level=1 dhmlen=2049" \
  3561. 1 \
  3562. -c "DHM prime too short:"
  3563. # Tests for PSK callback
  3564. run_test "PSK callback: psk, no callback" \
  3565. "$P_SRV psk=abc123 psk_identity=foo" \
  3566. "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \
  3567. psk_identity=foo psk=abc123" \
  3568. 0 \
  3569. -S "SSL - None of the common ciphersuites is usable" \
  3570. -S "SSL - Unknown identity received" \
  3571. -S "SSL - Verification of the message MAC failed"
  3572. run_test "PSK callback: no psk, no callback" \
  3573. "$P_SRV" \
  3574. "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \
  3575. psk_identity=foo psk=abc123" \
  3576. 1 \
  3577. -s "SSL - None of the common ciphersuites is usable" \
  3578. -S "SSL - Unknown identity received" \
  3579. -S "SSL - Verification of the message MAC failed"
  3580. run_test "PSK callback: callback overrides other settings" \
  3581. "$P_SRV psk=abc123 psk_identity=foo psk_list=abc,dead,def,beef" \
  3582. "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \
  3583. psk_identity=foo psk=abc123" \
  3584. 1 \
  3585. -S "SSL - None of the common ciphersuites is usable" \
  3586. -s "SSL - Unknown identity received" \
  3587. -S "SSL - Verification of the message MAC failed"
  3588. run_test "PSK callback: first id matches" \
  3589. "$P_SRV psk_list=abc,dead,def,beef" \
  3590. "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \
  3591. psk_identity=abc psk=dead" \
  3592. 0 \
  3593. -S "SSL - None of the common ciphersuites is usable" \
  3594. -S "SSL - Unknown identity received" \
  3595. -S "SSL - Verification of the message MAC failed"
  3596. run_test "PSK callback: second id matches" \
  3597. "$P_SRV psk_list=abc,dead,def,beef" \
  3598. "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \
  3599. psk_identity=def psk=beef" \
  3600. 0 \
  3601. -S "SSL - None of the common ciphersuites is usable" \
  3602. -S "SSL - Unknown identity received" \
  3603. -S "SSL - Verification of the message MAC failed"
  3604. run_test "PSK callback: no match" \
  3605. "$P_SRV psk_list=abc,dead,def,beef" \
  3606. "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \
  3607. psk_identity=ghi psk=beef" \
  3608. 1 \
  3609. -S "SSL - None of the common ciphersuites is usable" \
  3610. -s "SSL - Unknown identity received" \
  3611. -S "SSL - Verification of the message MAC failed"
  3612. run_test "PSK callback: wrong key" \
  3613. "$P_SRV psk_list=abc,dead,def,beef" \
  3614. "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \
  3615. psk_identity=abc psk=beef" \
  3616. 1 \
  3617. -S "SSL - None of the common ciphersuites is usable" \
  3618. -S "SSL - Unknown identity received" \
  3619. -s "SSL - Verification of the message MAC failed"
  3620. # Tests for EC J-PAKE
  3621. requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKE
  3622. run_test "ECJPAKE: client not configured" \
  3623. "$P_SRV debug_level=3" \
  3624. "$P_CLI debug_level=3" \
  3625. 0 \
  3626. -C "add ciphersuite: c0ff" \
  3627. -C "adding ecjpake_kkpp extension" \
  3628. -S "found ecjpake kkpp extension" \
  3629. -S "skip ecjpake kkpp extension" \
  3630. -S "ciphersuite mismatch: ecjpake not configured" \
  3631. -S "server hello, ecjpake kkpp extension" \
  3632. -C "found ecjpake_kkpp extension" \
  3633. -S "None of the common ciphersuites is usable"
  3634. requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKE
  3635. run_test "ECJPAKE: server not configured" \
  3636. "$P_SRV debug_level=3" \
  3637. "$P_CLI debug_level=3 ecjpake_pw=bla \
  3638. force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \
  3639. 1 \
  3640. -c "add ciphersuite: c0ff" \
  3641. -c "adding ecjpake_kkpp extension" \
  3642. -s "found ecjpake kkpp extension" \
  3643. -s "skip ecjpake kkpp extension" \
  3644. -s "ciphersuite mismatch: ecjpake not configured" \
  3645. -S "server hello, ecjpake kkpp extension" \
  3646. -C "found ecjpake_kkpp extension" \
  3647. -s "None of the common ciphersuites is usable"
  3648. requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKE
  3649. run_test "ECJPAKE: working, TLS" \
  3650. "$P_SRV debug_level=3 ecjpake_pw=bla" \
  3651. "$P_CLI debug_level=3 ecjpake_pw=bla \
  3652. force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \
  3653. 0 \
  3654. -c "add ciphersuite: c0ff" \
  3655. -c "adding ecjpake_kkpp extension" \
  3656. -C "re-using cached ecjpake parameters" \
  3657. -s "found ecjpake kkpp extension" \
  3658. -S "skip ecjpake kkpp extension" \
  3659. -S "ciphersuite mismatch: ecjpake not configured" \
  3660. -s "server hello, ecjpake kkpp extension" \
  3661. -c "found ecjpake_kkpp extension" \
  3662. -S "None of the common ciphersuites is usable" \
  3663. -S "SSL - Verification of the message MAC failed"
  3664. server_needs_more_time 1
  3665. requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKE
  3666. run_test "ECJPAKE: password mismatch, TLS" \
  3667. "$P_SRV debug_level=3 ecjpake_pw=bla" \
  3668. "$P_CLI debug_level=3 ecjpake_pw=bad \
  3669. force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \
  3670. 1 \
  3671. -C "re-using cached ecjpake parameters" \
  3672. -s "SSL - Verification of the message MAC failed"
  3673. requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKE
  3674. run_test "ECJPAKE: working, DTLS" \
  3675. "$P_SRV debug_level=3 dtls=1 ecjpake_pw=bla" \
  3676. "$P_CLI debug_level=3 dtls=1 ecjpake_pw=bla \
  3677. force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \
  3678. 0 \
  3679. -c "re-using cached ecjpake parameters" \
  3680. -S "SSL - Verification of the message MAC failed"
  3681. requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKE
  3682. run_test "ECJPAKE: working, DTLS, no cookie" \
  3683. "$P_SRV debug_level=3 dtls=1 ecjpake_pw=bla cookies=0" \
  3684. "$P_CLI debug_level=3 dtls=1 ecjpake_pw=bla \
  3685. force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \
  3686. 0 \
  3687. -C "re-using cached ecjpake parameters" \
  3688. -S "SSL - Verification of the message MAC failed"
  3689. server_needs_more_time 1
  3690. requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKE
  3691. run_test "ECJPAKE: password mismatch, DTLS" \
  3692. "$P_SRV debug_level=3 dtls=1 ecjpake_pw=bla" \
  3693. "$P_CLI debug_level=3 dtls=1 ecjpake_pw=bad \
  3694. force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \
  3695. 1 \
  3696. -c "re-using cached ecjpake parameters" \
  3697. -s "SSL - Verification of the message MAC failed"
  3698. # for tests with configs/config-thread.h
  3699. requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKE
  3700. run_test "ECJPAKE: working, DTLS, nolog" \
  3701. "$P_SRV dtls=1 ecjpake_pw=bla" \
  3702. "$P_CLI dtls=1 ecjpake_pw=bla \
  3703. force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \
  3704. 0
  3705. # Tests for ciphersuites per version
  3706. requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
  3707. requires_config_enabled MBEDTLS_CAMELLIA_C
  3708. requires_config_enabled MBEDTLS_AES_C
  3709. run_test "Per-version suites: SSL3" \
  3710. "$P_SRV min_version=ssl3 version_suites=TLS-RSA-WITH-CAMELLIA-128-CBC-SHA,TLS-RSA-WITH-AES-256-CBC-SHA,TLS-RSA-WITH-AES-128-CBC-SHA,TLS-RSA-WITH-AES-128-GCM-SHA256" \
  3711. "$P_CLI force_version=ssl3" \
  3712. 0 \
  3713. -c "Ciphersuite is TLS-RSA-WITH-CAMELLIA-128-CBC-SHA"
  3714. requires_config_enabled MBEDTLS_SSL_PROTO_TLS1
  3715. requires_config_enabled MBEDTLS_CAMELLIA_C
  3716. requires_config_enabled MBEDTLS_AES_C
  3717. run_test "Per-version suites: TLS 1.0" \
  3718. "$P_SRV version_suites=TLS-RSA-WITH-CAMELLIA-128-CBC-SHA,TLS-RSA-WITH-AES-256-CBC-SHA,TLS-RSA-WITH-AES-128-CBC-SHA,TLS-RSA-WITH-AES-128-GCM-SHA256" \
  3719. "$P_CLI force_version=tls1 arc4=1" \
  3720. 0 \
  3721. -c "Ciphersuite is TLS-RSA-WITH-AES-256-CBC-SHA"
  3722. requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_1
  3723. requires_config_enabled MBEDTLS_CAMELLIA_C
  3724. requires_config_enabled MBEDTLS_AES_C
  3725. run_test "Per-version suites: TLS 1.1" \
  3726. "$P_SRV version_suites=TLS-RSA-WITH-CAMELLIA-128-CBC-SHA,TLS-RSA-WITH-AES-256-CBC-SHA,TLS-RSA-WITH-AES-128-CBC-SHA,TLS-RSA-WITH-AES-128-GCM-SHA256" \
  3727. "$P_CLI force_version=tls1_1" \
  3728. 0 \
  3729. -c "Ciphersuite is TLS-RSA-WITH-AES-128-CBC-SHA"
  3730. requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_2
  3731. requires_config_enabled MBEDTLS_CAMELLIA_C
  3732. requires_config_enabled MBEDTLS_AES_C
  3733. run_test "Per-version suites: TLS 1.2" \
  3734. "$P_SRV version_suites=TLS-RSA-WITH-CAMELLIA-128-CBC-SHA,TLS-RSA-WITH-AES-256-CBC-SHA,TLS-RSA-WITH-AES-128-CBC-SHA,TLS-RSA-WITH-AES-128-GCM-SHA256" \
  3735. "$P_CLI force_version=tls1_2" \
  3736. 0 \
  3737. -c "Ciphersuite is TLS-RSA-WITH-AES-128-GCM-SHA256"
  3738. # Test for ClientHello without extensions
  3739. requires_gnutls
  3740. run_test "ClientHello without extensions" \
  3741. "$P_SRV debug_level=3" \
  3742. "$G_CLI --priority=NORMAL:%NO_EXTENSIONS:%DISABLE_SAFE_RENEGOTIATION localhost" \
  3743. 0 \
  3744. -s "dumping 'client hello extensions' (0 bytes)"
  3745. # Tests for mbedtls_ssl_get_bytes_avail()
  3746. run_test "mbedtls_ssl_get_bytes_avail: no extra data" \
  3747. "$P_SRV" \
  3748. "$P_CLI request_size=100" \
  3749. 0 \
  3750. -s "Read from client: 100 bytes read$"
  3751. run_test "mbedtls_ssl_get_bytes_avail: extra data" \
  3752. "$P_SRV" \
  3753. "$P_CLI request_size=500" \
  3754. 0 \
  3755. -s "Read from client: 500 bytes read (.*+.*)"
  3756. # Tests for small client packets
  3757. requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
  3758. run_test "Small client packet SSLv3 BlockCipher" \
  3759. "$P_SRV min_version=ssl3" \
  3760. "$P_CLI request_size=1 force_version=ssl3 \
  3761. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  3762. 0 \
  3763. -s "Read from client: 1 bytes read"
  3764. requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
  3765. run_test "Small client packet SSLv3 StreamCipher" \
  3766. "$P_SRV min_version=ssl3 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  3767. "$P_CLI request_size=1 force_version=ssl3 \
  3768. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  3769. 0 \
  3770. -s "Read from client: 1 bytes read"
  3771. run_test "Small client packet TLS 1.0 BlockCipher" \
  3772. "$P_SRV" \
  3773. "$P_CLI request_size=1 force_version=tls1 \
  3774. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  3775. 0 \
  3776. -s "Read from client: 1 bytes read"
  3777. run_test "Small client packet TLS 1.0 BlockCipher, without EtM" \
  3778. "$P_SRV" \
  3779. "$P_CLI request_size=1 force_version=tls1 etm=0 \
  3780. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  3781. 0 \
  3782. -s "Read from client: 1 bytes read"
  3783. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  3784. run_test "Small client packet TLS 1.0 BlockCipher, truncated MAC" \
  3785. "$P_SRV trunc_hmac=1" \
  3786. "$P_CLI request_size=1 force_version=tls1 \
  3787. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1" \
  3788. 0 \
  3789. -s "Read from client: 1 bytes read"
  3790. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  3791. run_test "Small client packet TLS 1.0 BlockCipher, without EtM, truncated MAC" \
  3792. "$P_SRV trunc_hmac=1" \
  3793. "$P_CLI request_size=1 force_version=tls1 \
  3794. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1 etm=0" \
  3795. 0 \
  3796. -s "Read from client: 1 bytes read"
  3797. run_test "Small client packet TLS 1.0 StreamCipher" \
  3798. "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  3799. "$P_CLI request_size=1 force_version=tls1 \
  3800. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  3801. 0 \
  3802. -s "Read from client: 1 bytes read"
  3803. run_test "Small client packet TLS 1.0 StreamCipher, without EtM" \
  3804. "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  3805. "$P_CLI request_size=1 force_version=tls1 \
  3806. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA etm=0" \
  3807. 0 \
  3808. -s "Read from client: 1 bytes read"
  3809. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  3810. run_test "Small client packet TLS 1.0 StreamCipher, truncated MAC" \
  3811. "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  3812. "$P_CLI request_size=1 force_version=tls1 \
  3813. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  3814. 0 \
  3815. -s "Read from client: 1 bytes read"
  3816. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  3817. run_test "Small client packet TLS 1.0 StreamCipher, without EtM, truncated MAC" \
  3818. "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  3819. "$P_CLI request_size=1 force_version=tls1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \
  3820. trunc_hmac=1 etm=0" \
  3821. 0 \
  3822. -s "Read from client: 1 bytes read"
  3823. run_test "Small client packet TLS 1.1 BlockCipher" \
  3824. "$P_SRV" \
  3825. "$P_CLI request_size=1 force_version=tls1_1 \
  3826. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  3827. 0 \
  3828. -s "Read from client: 1 bytes read"
  3829. run_test "Small client packet TLS 1.1 BlockCipher, without EtM" \
  3830. "$P_SRV" \
  3831. "$P_CLI request_size=1 force_version=tls1_1 \
  3832. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA etm=0" \
  3833. 0 \
  3834. -s "Read from client: 1 bytes read"
  3835. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  3836. run_test "Small client packet TLS 1.1 BlockCipher, truncated MAC" \
  3837. "$P_SRV trunc_hmac=1" \
  3838. "$P_CLI request_size=1 force_version=tls1_1 \
  3839. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1" \
  3840. 0 \
  3841. -s "Read from client: 1 bytes read"
  3842. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  3843. run_test "Small client packet TLS 1.1 BlockCipher, without EtM, truncated MAC" \
  3844. "$P_SRV trunc_hmac=1" \
  3845. "$P_CLI request_size=1 force_version=tls1_1 \
  3846. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1 etm=0" \
  3847. 0 \
  3848. -s "Read from client: 1 bytes read"
  3849. run_test "Small client packet TLS 1.1 StreamCipher" \
  3850. "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  3851. "$P_CLI request_size=1 force_version=tls1_1 \
  3852. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  3853. 0 \
  3854. -s "Read from client: 1 bytes read"
  3855. run_test "Small client packet TLS 1.1 StreamCipher, without EtM" \
  3856. "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  3857. "$P_CLI request_size=1 force_version=tls1_1 \
  3858. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA etm=0" \
  3859. 0 \
  3860. -s "Read from client: 1 bytes read"
  3861. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  3862. run_test "Small client packet TLS 1.1 StreamCipher, truncated MAC" \
  3863. "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  3864. "$P_CLI request_size=1 force_version=tls1_1 \
  3865. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  3866. 0 \
  3867. -s "Read from client: 1 bytes read"
  3868. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  3869. run_test "Small client packet TLS 1.1 StreamCipher, without EtM, truncated MAC" \
  3870. "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  3871. "$P_CLI request_size=1 force_version=tls1_1 \
  3872. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1 etm=0" \
  3873. 0 \
  3874. -s "Read from client: 1 bytes read"
  3875. run_test "Small client packet TLS 1.2 BlockCipher" \
  3876. "$P_SRV" \
  3877. "$P_CLI request_size=1 force_version=tls1_2 \
  3878. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  3879. 0 \
  3880. -s "Read from client: 1 bytes read"
  3881. run_test "Small client packet TLS 1.2 BlockCipher, without EtM" \
  3882. "$P_SRV" \
  3883. "$P_CLI request_size=1 force_version=tls1_2 \
  3884. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA etm=0" \
  3885. 0 \
  3886. -s "Read from client: 1 bytes read"
  3887. run_test "Small client packet TLS 1.2 BlockCipher larger MAC" \
  3888. "$P_SRV" \
  3889. "$P_CLI request_size=1 force_version=tls1_2 \
  3890. force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384" \
  3891. 0 \
  3892. -s "Read from client: 1 bytes read"
  3893. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  3894. run_test "Small client packet TLS 1.2 BlockCipher, truncated MAC" \
  3895. "$P_SRV trunc_hmac=1" \
  3896. "$P_CLI request_size=1 force_version=tls1_2 \
  3897. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1" \
  3898. 0 \
  3899. -s "Read from client: 1 bytes read"
  3900. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  3901. run_test "Small client packet TLS 1.2 BlockCipher, without EtM, truncated MAC" \
  3902. "$P_SRV trunc_hmac=1" \
  3903. "$P_CLI request_size=1 force_version=tls1_2 \
  3904. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1 etm=0" \
  3905. 0 \
  3906. -s "Read from client: 1 bytes read"
  3907. run_test "Small client packet TLS 1.2 StreamCipher" \
  3908. "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  3909. "$P_CLI request_size=1 force_version=tls1_2 \
  3910. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  3911. 0 \
  3912. -s "Read from client: 1 bytes read"
  3913. run_test "Small client packet TLS 1.2 StreamCipher, without EtM" \
  3914. "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  3915. "$P_CLI request_size=1 force_version=tls1_2 \
  3916. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA etm=0" \
  3917. 0 \
  3918. -s "Read from client: 1 bytes read"
  3919. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  3920. run_test "Small client packet TLS 1.2 StreamCipher, truncated MAC" \
  3921. "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  3922. "$P_CLI request_size=1 force_version=tls1_2 \
  3923. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  3924. 0 \
  3925. -s "Read from client: 1 bytes read"
  3926. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  3927. run_test "Small client packet TLS 1.2 StreamCipher, without EtM, truncated MAC" \
  3928. "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  3929. "$P_CLI request_size=1 force_version=tls1_2 \
  3930. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1 etm=0" \
  3931. 0 \
  3932. -s "Read from client: 1 bytes read"
  3933. run_test "Small client packet TLS 1.2 AEAD" \
  3934. "$P_SRV" \
  3935. "$P_CLI request_size=1 force_version=tls1_2 \
  3936. force_ciphersuite=TLS-RSA-WITH-AES-256-CCM" \
  3937. 0 \
  3938. -s "Read from client: 1 bytes read"
  3939. run_test "Small client packet TLS 1.2 AEAD shorter tag" \
  3940. "$P_SRV" \
  3941. "$P_CLI request_size=1 force_version=tls1_2 \
  3942. force_ciphersuite=TLS-RSA-WITH-AES-256-CCM-8" \
  3943. 0 \
  3944. -s "Read from client: 1 bytes read"
  3945. # Tests for small client packets in DTLS
  3946. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  3947. run_test "Small client packet DTLS 1.0" \
  3948. "$P_SRV dtls=1 force_version=dtls1" \
  3949. "$P_CLI dtls=1 request_size=1 \
  3950. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  3951. 0 \
  3952. -s "Read from client: 1 bytes read"
  3953. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  3954. run_test "Small client packet DTLS 1.0, without EtM" \
  3955. "$P_SRV dtls=1 force_version=dtls1 etm=0" \
  3956. "$P_CLI dtls=1 request_size=1 \
  3957. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  3958. 0 \
  3959. -s "Read from client: 1 bytes read"
  3960. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  3961. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  3962. run_test "Small client packet DTLS 1.0, truncated hmac" \
  3963. "$P_SRV dtls=1 force_version=dtls1 trunc_hmac=1" \
  3964. "$P_CLI dtls=1 request_size=1 trunc_hmac=1 \
  3965. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  3966. 0 \
  3967. -s "Read from client: 1 bytes read"
  3968. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  3969. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  3970. run_test "Small client packet DTLS 1.0, without EtM, truncated MAC" \
  3971. "$P_SRV dtls=1 force_version=dtls1 trunc_hmac=1 etm=0" \
  3972. "$P_CLI dtls=1 request_size=1 \
  3973. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1"\
  3974. 0 \
  3975. -s "Read from client: 1 bytes read"
  3976. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  3977. run_test "Small client packet DTLS 1.2" \
  3978. "$P_SRV dtls=1 force_version=dtls1_2" \
  3979. "$P_CLI dtls=1 request_size=1 \
  3980. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  3981. 0 \
  3982. -s "Read from client: 1 bytes read"
  3983. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  3984. run_test "Small client packet DTLS 1.2, without EtM" \
  3985. "$P_SRV dtls=1 force_version=dtls1_2 etm=0" \
  3986. "$P_CLI dtls=1 request_size=1 \
  3987. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  3988. 0 \
  3989. -s "Read from client: 1 bytes read"
  3990. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  3991. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  3992. run_test "Small client packet DTLS 1.2, truncated hmac" \
  3993. "$P_SRV dtls=1 force_version=dtls1_2 trunc_hmac=1" \
  3994. "$P_CLI dtls=1 request_size=1 \
  3995. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1" \
  3996. 0 \
  3997. -s "Read from client: 1 bytes read"
  3998. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  3999. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4000. run_test "Small client packet DTLS 1.2, without EtM, truncated MAC" \
  4001. "$P_SRV dtls=1 force_version=dtls1_2 trunc_hmac=1 etm=0" \
  4002. "$P_CLI dtls=1 request_size=1 \
  4003. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1"\
  4004. 0 \
  4005. -s "Read from client: 1 bytes read"
  4006. # Tests for small server packets
  4007. requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
  4008. run_test "Small server packet SSLv3 BlockCipher" \
  4009. "$P_SRV response_size=1 min_version=ssl3" \
  4010. "$P_CLI force_version=ssl3 \
  4011. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  4012. 0 \
  4013. -c "Read from server: 1 bytes read"
  4014. requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
  4015. run_test "Small server packet SSLv3 StreamCipher" \
  4016. "$P_SRV response_size=1 min_version=ssl3 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4017. "$P_CLI force_version=ssl3 \
  4018. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4019. 0 \
  4020. -c "Read from server: 1 bytes read"
  4021. run_test "Small server packet TLS 1.0 BlockCipher" \
  4022. "$P_SRV response_size=1" \
  4023. "$P_CLI force_version=tls1 \
  4024. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  4025. 0 \
  4026. -c "Read from server: 1 bytes read"
  4027. run_test "Small server packet TLS 1.0 BlockCipher, without EtM" \
  4028. "$P_SRV response_size=1" \
  4029. "$P_CLI force_version=tls1 etm=0 \
  4030. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  4031. 0 \
  4032. -c "Read from server: 1 bytes read"
  4033. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4034. run_test "Small server packet TLS 1.0 BlockCipher, truncated MAC" \
  4035. "$P_SRV response_size=1 trunc_hmac=1" \
  4036. "$P_CLI force_version=tls1 \
  4037. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1" \
  4038. 0 \
  4039. -c "Read from server: 1 bytes read"
  4040. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4041. run_test "Small server packet TLS 1.0 BlockCipher, without EtM, truncated MAC" \
  4042. "$P_SRV response_size=1 trunc_hmac=1" \
  4043. "$P_CLI force_version=tls1 \
  4044. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1 etm=0" \
  4045. 0 \
  4046. -c "Read from server: 1 bytes read"
  4047. run_test "Small server packet TLS 1.0 StreamCipher" \
  4048. "$P_SRV response_size=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4049. "$P_CLI force_version=tls1 \
  4050. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4051. 0 \
  4052. -c "Read from server: 1 bytes read"
  4053. run_test "Small server packet TLS 1.0 StreamCipher, without EtM" \
  4054. "$P_SRV response_size=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4055. "$P_CLI force_version=tls1 \
  4056. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA etm=0" \
  4057. 0 \
  4058. -c "Read from server: 1 bytes read"
  4059. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4060. run_test "Small server packet TLS 1.0 StreamCipher, truncated MAC" \
  4061. "$P_SRV response_size=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  4062. "$P_CLI force_version=tls1 \
  4063. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  4064. 0 \
  4065. -c "Read from server: 1 bytes read"
  4066. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4067. run_test "Small server packet TLS 1.0 StreamCipher, without EtM, truncated MAC" \
  4068. "$P_SRV response_size=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  4069. "$P_CLI force_version=tls1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \
  4070. trunc_hmac=1 etm=0" \
  4071. 0 \
  4072. -c "Read from server: 1 bytes read"
  4073. run_test "Small server packet TLS 1.1 BlockCipher" \
  4074. "$P_SRV response_size=1" \
  4075. "$P_CLI force_version=tls1_1 \
  4076. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  4077. 0 \
  4078. -c "Read from server: 1 bytes read"
  4079. run_test "Small server packet TLS 1.1 BlockCipher, without EtM" \
  4080. "$P_SRV response_size=1" \
  4081. "$P_CLI force_version=tls1_1 \
  4082. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA etm=0" \
  4083. 0 \
  4084. -c "Read from server: 1 bytes read"
  4085. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4086. run_test "Small server packet TLS 1.1 BlockCipher, truncated MAC" \
  4087. "$P_SRV response_size=1 trunc_hmac=1" \
  4088. "$P_CLI force_version=tls1_1 \
  4089. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1" \
  4090. 0 \
  4091. -c "Read from server: 1 bytes read"
  4092. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4093. run_test "Small server packet TLS 1.1 BlockCipher, without EtM, truncated MAC" \
  4094. "$P_SRV response_size=1 trunc_hmac=1" \
  4095. "$P_CLI force_version=tls1_1 \
  4096. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1 etm=0" \
  4097. 0 \
  4098. -c "Read from server: 1 bytes read"
  4099. run_test "Small server packet TLS 1.1 StreamCipher" \
  4100. "$P_SRV response_size=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4101. "$P_CLI force_version=tls1_1 \
  4102. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4103. 0 \
  4104. -c "Read from server: 1 bytes read"
  4105. run_test "Small server packet TLS 1.1 StreamCipher, without EtM" \
  4106. "$P_SRV response_size=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4107. "$P_CLI force_version=tls1_1 \
  4108. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA etm=0" \
  4109. 0 \
  4110. -c "Read from server: 1 bytes read"
  4111. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4112. run_test "Small server packet TLS 1.1 StreamCipher, truncated MAC" \
  4113. "$P_SRV response_size=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  4114. "$P_CLI force_version=tls1_1 \
  4115. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  4116. 0 \
  4117. -c "Read from server: 1 bytes read"
  4118. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4119. run_test "Small server packet TLS 1.1 StreamCipher, without EtM, truncated MAC" \
  4120. "$P_SRV response_size=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  4121. "$P_CLI force_version=tls1_1 \
  4122. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1 etm=0" \
  4123. 0 \
  4124. -c "Read from server: 1 bytes read"
  4125. run_test "Small server packet TLS 1.2 BlockCipher" \
  4126. "$P_SRV response_size=1" \
  4127. "$P_CLI force_version=tls1_2 \
  4128. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  4129. 0 \
  4130. -c "Read from server: 1 bytes read"
  4131. run_test "Small server packet TLS 1.2 BlockCipher, without EtM" \
  4132. "$P_SRV response_size=1" \
  4133. "$P_CLI force_version=tls1_2 \
  4134. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA etm=0" \
  4135. 0 \
  4136. -c "Read from server: 1 bytes read"
  4137. run_test "Small server packet TLS 1.2 BlockCipher larger MAC" \
  4138. "$P_SRV response_size=1" \
  4139. "$P_CLI force_version=tls1_2 \
  4140. force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384" \
  4141. 0 \
  4142. -c "Read from server: 1 bytes read"
  4143. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4144. run_test "Small server packet TLS 1.2 BlockCipher, truncated MAC" \
  4145. "$P_SRV response_size=1 trunc_hmac=1" \
  4146. "$P_CLI force_version=tls1_2 \
  4147. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1" \
  4148. 0 \
  4149. -c "Read from server: 1 bytes read"
  4150. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4151. run_test "Small server packet TLS 1.2 BlockCipher, without EtM, truncated MAC" \
  4152. "$P_SRV response_size=1 trunc_hmac=1" \
  4153. "$P_CLI force_version=tls1_2 \
  4154. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1 etm=0" \
  4155. 0 \
  4156. -c "Read from server: 1 bytes read"
  4157. run_test "Small server packet TLS 1.2 StreamCipher" \
  4158. "$P_SRV response_size=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4159. "$P_CLI force_version=tls1_2 \
  4160. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4161. 0 \
  4162. -c "Read from server: 1 bytes read"
  4163. run_test "Small server packet TLS 1.2 StreamCipher, without EtM" \
  4164. "$P_SRV response_size=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4165. "$P_CLI force_version=tls1_2 \
  4166. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA etm=0" \
  4167. 0 \
  4168. -c "Read from server: 1 bytes read"
  4169. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4170. run_test "Small server packet TLS 1.2 StreamCipher, truncated MAC" \
  4171. "$P_SRV response_size=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  4172. "$P_CLI force_version=tls1_2 \
  4173. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  4174. 0 \
  4175. -c "Read from server: 1 bytes read"
  4176. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4177. run_test "Small server packet TLS 1.2 StreamCipher, without EtM, truncated MAC" \
  4178. "$P_SRV response_size=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  4179. "$P_CLI force_version=tls1_2 \
  4180. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1 etm=0" \
  4181. 0 \
  4182. -c "Read from server: 1 bytes read"
  4183. run_test "Small server packet TLS 1.2 AEAD" \
  4184. "$P_SRV response_size=1" \
  4185. "$P_CLI force_version=tls1_2 \
  4186. force_ciphersuite=TLS-RSA-WITH-AES-256-CCM" \
  4187. 0 \
  4188. -c "Read from server: 1 bytes read"
  4189. run_test "Small server packet TLS 1.2 AEAD shorter tag" \
  4190. "$P_SRV response_size=1" \
  4191. "$P_CLI force_version=tls1_2 \
  4192. force_ciphersuite=TLS-RSA-WITH-AES-256-CCM-8" \
  4193. 0 \
  4194. -c "Read from server: 1 bytes read"
  4195. # Tests for small server packets in DTLS
  4196. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  4197. run_test "Small server packet DTLS 1.0" \
  4198. "$P_SRV dtls=1 response_size=1 force_version=dtls1" \
  4199. "$P_CLI dtls=1 \
  4200. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  4201. 0 \
  4202. -c "Read from server: 1 bytes read"
  4203. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  4204. run_test "Small server packet DTLS 1.0, without EtM" \
  4205. "$P_SRV dtls=1 response_size=1 force_version=dtls1 etm=0" \
  4206. "$P_CLI dtls=1 \
  4207. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  4208. 0 \
  4209. -c "Read from server: 1 bytes read"
  4210. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  4211. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4212. run_test "Small server packet DTLS 1.0, truncated hmac" \
  4213. "$P_SRV dtls=1 response_size=1 force_version=dtls1 trunc_hmac=1" \
  4214. "$P_CLI dtls=1 trunc_hmac=1 \
  4215. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  4216. 0 \
  4217. -c "Read from server: 1 bytes read"
  4218. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  4219. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4220. run_test "Small server packet DTLS 1.0, without EtM, truncated MAC" \
  4221. "$P_SRV dtls=1 response_size=1 force_version=dtls1 trunc_hmac=1 etm=0" \
  4222. "$P_CLI dtls=1 \
  4223. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1"\
  4224. 0 \
  4225. -c "Read from server: 1 bytes read"
  4226. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  4227. run_test "Small server packet DTLS 1.2" \
  4228. "$P_SRV dtls=1 response_size=1 force_version=dtls1_2" \
  4229. "$P_CLI dtls=1 \
  4230. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  4231. 0 \
  4232. -c "Read from server: 1 bytes read"
  4233. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  4234. run_test "Small server packet DTLS 1.2, without EtM" \
  4235. "$P_SRV dtls=1 response_size=1 force_version=dtls1_2 etm=0" \
  4236. "$P_CLI dtls=1 \
  4237. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  4238. 0 \
  4239. -c "Read from server: 1 bytes read"
  4240. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  4241. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4242. run_test "Small server packet DTLS 1.2, truncated hmac" \
  4243. "$P_SRV dtls=1 response_size=1 force_version=dtls1_2 trunc_hmac=1" \
  4244. "$P_CLI dtls=1 \
  4245. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1" \
  4246. 0 \
  4247. -c "Read from server: 1 bytes read"
  4248. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  4249. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4250. run_test "Small server packet DTLS 1.2, without EtM, truncated MAC" \
  4251. "$P_SRV dtls=1 response_size=1 force_version=dtls1_2 trunc_hmac=1 etm=0" \
  4252. "$P_CLI dtls=1 \
  4253. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1"\
  4254. 0 \
  4255. -c "Read from server: 1 bytes read"
  4256. # A test for extensions in SSLv3
  4257. requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
  4258. run_test "SSLv3 with extensions, server side" \
  4259. "$P_SRV min_version=ssl3 debug_level=3" \
  4260. "$P_CLI force_version=ssl3 tickets=1 max_frag_len=4096 alpn=abc,1234" \
  4261. 0 \
  4262. -S "dumping 'client hello extensions'" \
  4263. -S "server hello, total extension length:"
  4264. # Test for large client packets
  4265. # How many fragments do we expect to write $1 bytes?
  4266. fragments_for_write() {
  4267. echo "$(( ( $1 + $MAX_OUT_LEN - 1 ) / $MAX_OUT_LEN ))"
  4268. }
  4269. requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
  4270. run_test "Large client packet SSLv3 BlockCipher" \
  4271. "$P_SRV min_version=ssl3" \
  4272. "$P_CLI request_size=16384 force_version=ssl3 recsplit=0 \
  4273. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  4274. 0 \
  4275. -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
  4276. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4277. requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
  4278. run_test "Large client packet SSLv3 StreamCipher" \
  4279. "$P_SRV min_version=ssl3 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4280. "$P_CLI request_size=16384 force_version=ssl3 \
  4281. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4282. 0 \
  4283. -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
  4284. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4285. run_test "Large client packet TLS 1.0 BlockCipher" \
  4286. "$P_SRV" \
  4287. "$P_CLI request_size=16384 force_version=tls1 recsplit=0 \
  4288. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  4289. 0 \
  4290. -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
  4291. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4292. run_test "Large client packet TLS 1.0 BlockCipher, without EtM" \
  4293. "$P_SRV" \
  4294. "$P_CLI request_size=16384 force_version=tls1 etm=0 recsplit=0 \
  4295. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  4296. 0 \
  4297. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4298. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4299. run_test "Large client packet TLS 1.0 BlockCipher, truncated MAC" \
  4300. "$P_SRV trunc_hmac=1" \
  4301. "$P_CLI request_size=16384 force_version=tls1 recsplit=0 \
  4302. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1" \
  4303. 0 \
  4304. -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
  4305. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4306. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4307. run_test "Large client packet TLS 1.0 BlockCipher, without EtM, truncated MAC" \
  4308. "$P_SRV trunc_hmac=1" \
  4309. "$P_CLI request_size=16384 force_version=tls1 etm=0 recsplit=0 \
  4310. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1" \
  4311. 0 \
  4312. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4313. run_test "Large client packet TLS 1.0 StreamCipher" \
  4314. "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4315. "$P_CLI request_size=16384 force_version=tls1 \
  4316. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4317. 0 \
  4318. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4319. run_test "Large client packet TLS 1.0 StreamCipher, without EtM" \
  4320. "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4321. "$P_CLI request_size=16384 force_version=tls1 \
  4322. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA etm=0" \
  4323. 0 \
  4324. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4325. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4326. run_test "Large client packet TLS 1.0 StreamCipher, truncated MAC" \
  4327. "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  4328. "$P_CLI request_size=16384 force_version=tls1 \
  4329. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  4330. 0 \
  4331. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4332. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4333. run_test "Large client packet TLS 1.0 StreamCipher, without EtM, truncated MAC" \
  4334. "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  4335. "$P_CLI request_size=16384 force_version=tls1 \
  4336. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1 etm=0" \
  4337. 0 \
  4338. -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
  4339. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4340. run_test "Large client packet TLS 1.1 BlockCipher" \
  4341. "$P_SRV" \
  4342. "$P_CLI request_size=16384 force_version=tls1_1 \
  4343. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  4344. 0 \
  4345. -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
  4346. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4347. run_test "Large client packet TLS 1.1 BlockCipher, without EtM" \
  4348. "$P_SRV" \
  4349. "$P_CLI request_size=16384 force_version=tls1_1 etm=0 \
  4350. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  4351. 0 \
  4352. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4353. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4354. run_test "Large client packet TLS 1.1 BlockCipher, truncated MAC" \
  4355. "$P_SRV trunc_hmac=1" \
  4356. "$P_CLI request_size=16384 force_version=tls1_1 \
  4357. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1" \
  4358. 0 \
  4359. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4360. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4361. run_test "Large client packet TLS 1.1 BlockCipher, without EtM, truncated MAC" \
  4362. "$P_SRV trunc_hmac=1" \
  4363. "$P_CLI request_size=16384 force_version=tls1_1 \
  4364. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1 etm=0" \
  4365. 0 \
  4366. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4367. run_test "Large client packet TLS 1.1 StreamCipher" \
  4368. "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4369. "$P_CLI request_size=16384 force_version=tls1_1 \
  4370. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4371. 0 \
  4372. -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
  4373. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4374. run_test "Large client packet TLS 1.1 StreamCipher, without EtM" \
  4375. "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4376. "$P_CLI request_size=16384 force_version=tls1_1 \
  4377. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA etm=0" \
  4378. 0 \
  4379. -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
  4380. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4381. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4382. run_test "Large client packet TLS 1.1 StreamCipher, truncated MAC" \
  4383. "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  4384. "$P_CLI request_size=16384 force_version=tls1_1 \
  4385. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  4386. 0 \
  4387. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4388. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4389. run_test "Large client packet TLS 1.1 StreamCipher, without EtM, truncated MAC" \
  4390. "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  4391. "$P_CLI request_size=16384 force_version=tls1_1 \
  4392. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1 etm=0" \
  4393. 0 \
  4394. -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
  4395. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4396. run_test "Large client packet TLS 1.2 BlockCipher" \
  4397. "$P_SRV" \
  4398. "$P_CLI request_size=16384 force_version=tls1_2 \
  4399. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  4400. 0 \
  4401. -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
  4402. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4403. run_test "Large client packet TLS 1.2 BlockCipher, without EtM" \
  4404. "$P_SRV" \
  4405. "$P_CLI request_size=16384 force_version=tls1_2 etm=0 \
  4406. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  4407. 0 \
  4408. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4409. run_test "Large client packet TLS 1.2 BlockCipher larger MAC" \
  4410. "$P_SRV" \
  4411. "$P_CLI request_size=16384 force_version=tls1_2 \
  4412. force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384" \
  4413. 0 \
  4414. -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
  4415. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4416. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4417. run_test "Large client packet TLS 1.2 BlockCipher, truncated MAC" \
  4418. "$P_SRV trunc_hmac=1" \
  4419. "$P_CLI request_size=16384 force_version=tls1_2 \
  4420. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1" \
  4421. 0 \
  4422. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4423. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4424. run_test "Large client packet TLS 1.2 BlockCipher, without EtM, truncated MAC" \
  4425. "$P_SRV trunc_hmac=1" \
  4426. "$P_CLI request_size=16384 force_version=tls1_2 \
  4427. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1 etm=0" \
  4428. 0 \
  4429. -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
  4430. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4431. run_test "Large client packet TLS 1.2 StreamCipher" \
  4432. "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4433. "$P_CLI request_size=16384 force_version=tls1_2 \
  4434. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4435. 0 \
  4436. -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
  4437. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4438. run_test "Large client packet TLS 1.2 StreamCipher, without EtM" \
  4439. "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4440. "$P_CLI request_size=16384 force_version=tls1_2 \
  4441. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA etm=0" \
  4442. 0 \
  4443. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4444. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4445. run_test "Large client packet TLS 1.2 StreamCipher, truncated MAC" \
  4446. "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  4447. "$P_CLI request_size=16384 force_version=tls1_2 \
  4448. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  4449. 0 \
  4450. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4451. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4452. run_test "Large client packet TLS 1.2 StreamCipher, without EtM, truncated MAC" \
  4453. "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  4454. "$P_CLI request_size=16384 force_version=tls1_2 \
  4455. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1 etm=0" \
  4456. 0 \
  4457. -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
  4458. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4459. run_test "Large client packet TLS 1.2 AEAD" \
  4460. "$P_SRV" \
  4461. "$P_CLI request_size=16384 force_version=tls1_2 \
  4462. force_ciphersuite=TLS-RSA-WITH-AES-256-CCM" \
  4463. 0 \
  4464. -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
  4465. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4466. run_test "Large client packet TLS 1.2 AEAD shorter tag" \
  4467. "$P_SRV" \
  4468. "$P_CLI request_size=16384 force_version=tls1_2 \
  4469. force_ciphersuite=TLS-RSA-WITH-AES-256-CCM-8" \
  4470. 0 \
  4471. -c "16384 bytes written in $(fragments_for_write 16384) fragments" \
  4472. -s "Read from client: $MAX_CONTENT_LEN bytes read"
  4473. # Test for large server packets
  4474. requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
  4475. run_test "Large server packet SSLv3 StreamCipher" \
  4476. "$P_SRV response_size=16384 min_version=ssl3 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4477. "$P_CLI force_version=ssl3 \
  4478. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4479. 0 \
  4480. -c "Read from server: 16384 bytes read"
  4481. # Checking next 4 tests logs for 1n-1 split against BEAST too
  4482. requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
  4483. run_test "Large server packet SSLv3 BlockCipher" \
  4484. "$P_SRV response_size=16384 min_version=ssl3" \
  4485. "$P_CLI force_version=ssl3 recsplit=0 \
  4486. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  4487. 0 \
  4488. -c "Read from server: 1 bytes read"\
  4489. -c "16383 bytes read"\
  4490. -C "Read from server: 16384 bytes read"
  4491. run_test "Large server packet TLS 1.0 BlockCipher" \
  4492. "$P_SRV response_size=16384" \
  4493. "$P_CLI force_version=tls1 recsplit=0 \
  4494. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  4495. 0 \
  4496. -c "Read from server: 1 bytes read"\
  4497. -c "16383 bytes read"\
  4498. -C "Read from server: 16384 bytes read"
  4499. run_test "Large server packet TLS 1.0 BlockCipher, without EtM" \
  4500. "$P_SRV response_size=16384" \
  4501. "$P_CLI force_version=tls1 etm=0 recsplit=0 \
  4502. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  4503. 0 \
  4504. -c "Read from server: 1 bytes read"\
  4505. -c "16383 bytes read"\
  4506. -C "Read from server: 16384 bytes read"
  4507. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4508. run_test "Large server packet TLS 1.0 BlockCipher truncated MAC" \
  4509. "$P_SRV response_size=16384" \
  4510. "$P_CLI force_version=tls1 recsplit=0 \
  4511. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA \
  4512. trunc_hmac=1" \
  4513. 0 \
  4514. -c "Read from server: 1 bytes read"\
  4515. -c "16383 bytes read"\
  4516. -C "Read from server: 16384 bytes read"
  4517. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4518. run_test "Large server packet TLS 1.0 StreamCipher truncated MAC" \
  4519. "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4520. "$P_CLI force_version=tls1 \
  4521. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \
  4522. trunc_hmac=1" \
  4523. 0 \
  4524. -s "16384 bytes written in 1 fragments" \
  4525. -c "Read from server: 16384 bytes read"
  4526. run_test "Large server packet TLS 1.0 StreamCipher" \
  4527. "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4528. "$P_CLI force_version=tls1 \
  4529. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4530. 0 \
  4531. -s "16384 bytes written in 1 fragments" \
  4532. -c "Read from server: 16384 bytes read"
  4533. run_test "Large server packet TLS 1.0 StreamCipher, without EtM" \
  4534. "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4535. "$P_CLI force_version=tls1 \
  4536. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA etm=0" \
  4537. 0 \
  4538. -s "16384 bytes written in 1 fragments" \
  4539. -c "Read from server: 16384 bytes read"
  4540. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4541. run_test "Large server packet TLS 1.0 StreamCipher, truncated MAC" \
  4542. "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  4543. "$P_CLI force_version=tls1 \
  4544. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  4545. 0 \
  4546. -s "16384 bytes written in 1 fragments" \
  4547. -c "Read from server: 16384 bytes read"
  4548. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4549. run_test "Large server packet TLS 1.0 StreamCipher, without EtM, truncated MAC" \
  4550. "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  4551. "$P_CLI force_version=tls1 \
  4552. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1 etm=0" \
  4553. 0 \
  4554. -s "16384 bytes written in 1 fragments" \
  4555. -c "Read from server: 16384 bytes read"
  4556. run_test "Large server packet TLS 1.1 BlockCipher" \
  4557. "$P_SRV response_size=16384" \
  4558. "$P_CLI force_version=tls1_1 \
  4559. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  4560. 0 \
  4561. -c "Read from server: 16384 bytes read"
  4562. run_test "Large server packet TLS 1.1 BlockCipher, without EtM" \
  4563. "$P_SRV response_size=16384" \
  4564. "$P_CLI force_version=tls1_1 etm=0 \
  4565. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  4566. 0 \
  4567. -s "16384 bytes written in 1 fragments" \
  4568. -c "Read from server: 16384 bytes read"
  4569. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4570. run_test "Large server packet TLS 1.1 BlockCipher truncated MAC" \
  4571. "$P_SRV response_size=16384" \
  4572. "$P_CLI force_version=tls1_1 \
  4573. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA \
  4574. trunc_hmac=1" \
  4575. 0 \
  4576. -c "Read from server: 16384 bytes read"
  4577. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4578. run_test "Large server packet TLS 1.1 BlockCipher, without EtM, truncated MAC" \
  4579. "$P_SRV response_size=16384 trunc_hmac=1" \
  4580. "$P_CLI force_version=tls1_1 \
  4581. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1 etm=0" \
  4582. 0 \
  4583. -s "16384 bytes written in 1 fragments" \
  4584. -c "Read from server: 16384 bytes read"
  4585. run_test "Large server packet TLS 1.1 StreamCipher" \
  4586. "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4587. "$P_CLI force_version=tls1_1 \
  4588. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4589. 0 \
  4590. -c "Read from server: 16384 bytes read"
  4591. run_test "Large server packet TLS 1.1 StreamCipher, without EtM" \
  4592. "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4593. "$P_CLI force_version=tls1_1 \
  4594. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA etm=0" \
  4595. 0 \
  4596. -s "16384 bytes written in 1 fragments" \
  4597. -c "Read from server: 16384 bytes read"
  4598. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4599. run_test "Large server packet TLS 1.1 StreamCipher truncated MAC" \
  4600. "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4601. "$P_CLI force_version=tls1_1 \
  4602. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \
  4603. trunc_hmac=1" \
  4604. 0 \
  4605. -c "Read from server: 16384 bytes read"
  4606. run_test "Large server packet TLS 1.1 StreamCipher, without EtM, truncated MAC" \
  4607. "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  4608. "$P_CLI force_version=tls1_1 \
  4609. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1 etm=0" \
  4610. 0 \
  4611. -s "16384 bytes written in 1 fragments" \
  4612. -c "Read from server: 16384 bytes read"
  4613. run_test "Large server packet TLS 1.2 BlockCipher" \
  4614. "$P_SRV response_size=16384" \
  4615. "$P_CLI force_version=tls1_2 \
  4616. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  4617. 0 \
  4618. -c "Read from server: 16384 bytes read"
  4619. run_test "Large server packet TLS 1.2 BlockCipher, without EtM" \
  4620. "$P_SRV response_size=16384" \
  4621. "$P_CLI force_version=tls1_2 etm=0 \
  4622. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \
  4623. 0 \
  4624. -s "16384 bytes written in 1 fragments" \
  4625. -c "Read from server: 16384 bytes read"
  4626. run_test "Large server packet TLS 1.2 BlockCipher larger MAC" \
  4627. "$P_SRV response_size=16384" \
  4628. "$P_CLI force_version=tls1_2 \
  4629. force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384" \
  4630. 0 \
  4631. -c "Read from server: 16384 bytes read"
  4632. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4633. run_test "Large server packet TLS 1.2 BlockCipher truncated MAC" \
  4634. "$P_SRV response_size=16384" \
  4635. "$P_CLI force_version=tls1_2 \
  4636. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA \
  4637. trunc_hmac=1" \
  4638. 0 \
  4639. -c "Read from server: 16384 bytes read"
  4640. run_test "Large server packet TLS 1.2 BlockCipher, without EtM, truncated MAC" \
  4641. "$P_SRV response_size=16384 trunc_hmac=1" \
  4642. "$P_CLI force_version=tls1_2 \
  4643. force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA trunc_hmac=1 etm=0" \
  4644. 0 \
  4645. -s "16384 bytes written in 1 fragments" \
  4646. -c "Read from server: 16384 bytes read"
  4647. run_test "Large server packet TLS 1.2 StreamCipher" \
  4648. "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4649. "$P_CLI force_version=tls1_2 \
  4650. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4651. 0 \
  4652. -s "16384 bytes written in 1 fragments" \
  4653. -c "Read from server: 16384 bytes read"
  4654. run_test "Large server packet TLS 1.2 StreamCipher, without EtM" \
  4655. "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4656. "$P_CLI force_version=tls1_2 \
  4657. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA etm=0" \
  4658. 0 \
  4659. -s "16384 bytes written in 1 fragments" \
  4660. -c "Read from server: 16384 bytes read"
  4661. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4662. run_test "Large server packet TLS 1.2 StreamCipher truncated MAC" \
  4663. "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \
  4664. "$P_CLI force_version=tls1_2 \
  4665. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \
  4666. trunc_hmac=1" \
  4667. 0 \
  4668. -c "Read from server: 16384 bytes read"
  4669. requires_config_enabled MBEDTLS_SSL_TRUNCATED_HMAC
  4670. run_test "Large server packet TLS 1.2 StreamCipher, without EtM, truncated MAC" \
  4671. "$P_SRV response_size=16384 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1" \
  4672. "$P_CLI force_version=tls1_2 \
  4673. force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA trunc_hmac=1 etm=0" \
  4674. 0 \
  4675. -s "16384 bytes written in 1 fragments" \
  4676. -c "Read from server: 16384 bytes read"
  4677. run_test "Large server packet TLS 1.2 AEAD" \
  4678. "$P_SRV response_size=16384" \
  4679. "$P_CLI force_version=tls1_2 \
  4680. force_ciphersuite=TLS-RSA-WITH-AES-256-CCM" \
  4681. 0 \
  4682. -c "Read from server: 16384 bytes read"
  4683. run_test "Large server packet TLS 1.2 AEAD shorter tag" \
  4684. "$P_SRV response_size=16384" \
  4685. "$P_CLI force_version=tls1_2 \
  4686. force_ciphersuite=TLS-RSA-WITH-AES-256-CCM-8" \
  4687. 0 \
  4688. -c "Read from server: 16384 bytes read"
  4689. # Tests for restartable ECC
  4690. requires_config_enabled MBEDTLS_ECP_RESTARTABLE
  4691. run_test "EC restart: TLS, default" \
  4692. "$P_SRV auth_mode=required" \
  4693. "$P_CLI force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
  4694. key_file=data_files/server5.key crt_file=data_files/server5.crt \
  4695. debug_level=1" \
  4696. 0 \
  4697. -C "x509_verify_cert.*4b00" \
  4698. -C "mbedtls_pk_verify.*4b00" \
  4699. -C "mbedtls_ecdh_make_public.*4b00" \
  4700. -C "mbedtls_pk_sign.*4b00"
  4701. requires_config_enabled MBEDTLS_ECP_RESTARTABLE
  4702. run_test "EC restart: TLS, max_ops=0" \
  4703. "$P_SRV auth_mode=required" \
  4704. "$P_CLI force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
  4705. key_file=data_files/server5.key crt_file=data_files/server5.crt \
  4706. debug_level=1 ec_max_ops=0" \
  4707. 0 \
  4708. -C "x509_verify_cert.*4b00" \
  4709. -C "mbedtls_pk_verify.*4b00" \
  4710. -C "mbedtls_ecdh_make_public.*4b00" \
  4711. -C "mbedtls_pk_sign.*4b00"
  4712. requires_config_enabled MBEDTLS_ECP_RESTARTABLE
  4713. run_test "EC restart: TLS, max_ops=65535" \
  4714. "$P_SRV auth_mode=required" \
  4715. "$P_CLI force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
  4716. key_file=data_files/server5.key crt_file=data_files/server5.crt \
  4717. debug_level=1 ec_max_ops=65535" \
  4718. 0 \
  4719. -C "x509_verify_cert.*4b00" \
  4720. -C "mbedtls_pk_verify.*4b00" \
  4721. -C "mbedtls_ecdh_make_public.*4b00" \
  4722. -C "mbedtls_pk_sign.*4b00"
  4723. requires_config_enabled MBEDTLS_ECP_RESTARTABLE
  4724. run_test "EC restart: TLS, max_ops=1000" \
  4725. "$P_SRV auth_mode=required" \
  4726. "$P_CLI force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
  4727. key_file=data_files/server5.key crt_file=data_files/server5.crt \
  4728. debug_level=1 ec_max_ops=1000" \
  4729. 0 \
  4730. -c "x509_verify_cert.*4b00" \
  4731. -c "mbedtls_pk_verify.*4b00" \
  4732. -c "mbedtls_ecdh_make_public.*4b00" \
  4733. -c "mbedtls_pk_sign.*4b00"
  4734. requires_config_enabled MBEDTLS_ECP_RESTARTABLE
  4735. run_test "EC restart: TLS, max_ops=1000, badsign" \
  4736. "$P_SRV auth_mode=required \
  4737. crt_file=data_files/server5-badsign.crt \
  4738. key_file=data_files/server5.key" \
  4739. "$P_CLI force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
  4740. key_file=data_files/server5.key crt_file=data_files/server5.crt \
  4741. debug_level=1 ec_max_ops=1000" \
  4742. 1 \
  4743. -c "x509_verify_cert.*4b00" \
  4744. -C "mbedtls_pk_verify.*4b00" \
  4745. -C "mbedtls_ecdh_make_public.*4b00" \
  4746. -C "mbedtls_pk_sign.*4b00" \
  4747. -c "! The certificate is not correctly signed by the trusted CA" \
  4748. -c "! mbedtls_ssl_handshake returned" \
  4749. -c "X509 - Certificate verification failed"
  4750. requires_config_enabled MBEDTLS_ECP_RESTARTABLE
  4751. run_test "EC restart: TLS, max_ops=1000, auth_mode=optional badsign" \
  4752. "$P_SRV auth_mode=required \
  4753. crt_file=data_files/server5-badsign.crt \
  4754. key_file=data_files/server5.key" \
  4755. "$P_CLI force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
  4756. key_file=data_files/server5.key crt_file=data_files/server5.crt \
  4757. debug_level=1 ec_max_ops=1000 auth_mode=optional" \
  4758. 0 \
  4759. -c "x509_verify_cert.*4b00" \
  4760. -c "mbedtls_pk_verify.*4b00" \
  4761. -c "mbedtls_ecdh_make_public.*4b00" \
  4762. -c "mbedtls_pk_sign.*4b00" \
  4763. -c "! The certificate is not correctly signed by the trusted CA" \
  4764. -C "! mbedtls_ssl_handshake returned" \
  4765. -C "X509 - Certificate verification failed"
  4766. requires_config_enabled MBEDTLS_ECP_RESTARTABLE
  4767. run_test "EC restart: TLS, max_ops=1000, auth_mode=none badsign" \
  4768. "$P_SRV auth_mode=required \
  4769. crt_file=data_files/server5-badsign.crt \
  4770. key_file=data_files/server5.key" \
  4771. "$P_CLI force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
  4772. key_file=data_files/server5.key crt_file=data_files/server5.crt \
  4773. debug_level=1 ec_max_ops=1000 auth_mode=none" \
  4774. 0 \
  4775. -C "x509_verify_cert.*4b00" \
  4776. -c "mbedtls_pk_verify.*4b00" \
  4777. -c "mbedtls_ecdh_make_public.*4b00" \
  4778. -c "mbedtls_pk_sign.*4b00" \
  4779. -C "! The certificate is not correctly signed by the trusted CA" \
  4780. -C "! mbedtls_ssl_handshake returned" \
  4781. -C "X509 - Certificate verification failed"
  4782. requires_config_enabled MBEDTLS_ECP_RESTARTABLE
  4783. run_test "EC restart: DTLS, max_ops=1000" \
  4784. "$P_SRV auth_mode=required dtls=1" \
  4785. "$P_CLI force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
  4786. key_file=data_files/server5.key crt_file=data_files/server5.crt \
  4787. dtls=1 debug_level=1 ec_max_ops=1000" \
  4788. 0 \
  4789. -c "x509_verify_cert.*4b00" \
  4790. -c "mbedtls_pk_verify.*4b00" \
  4791. -c "mbedtls_ecdh_make_public.*4b00" \
  4792. -c "mbedtls_pk_sign.*4b00"
  4793. requires_config_enabled MBEDTLS_ECP_RESTARTABLE
  4794. run_test "EC restart: TLS, max_ops=1000 no client auth" \
  4795. "$P_SRV" \
  4796. "$P_CLI force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
  4797. debug_level=1 ec_max_ops=1000" \
  4798. 0 \
  4799. -c "x509_verify_cert.*4b00" \
  4800. -c "mbedtls_pk_verify.*4b00" \
  4801. -c "mbedtls_ecdh_make_public.*4b00" \
  4802. -C "mbedtls_pk_sign.*4b00"
  4803. requires_config_enabled MBEDTLS_ECP_RESTARTABLE
  4804. run_test "EC restart: TLS, max_ops=1000, ECDHE-PSK" \
  4805. "$P_SRV psk=abc123" \
  4806. "$P_CLI force_ciphersuite=TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA256 \
  4807. psk=abc123 debug_level=1 ec_max_ops=1000" \
  4808. 0 \
  4809. -C "x509_verify_cert.*4b00" \
  4810. -C "mbedtls_pk_verify.*4b00" \
  4811. -C "mbedtls_ecdh_make_public.*4b00" \
  4812. -C "mbedtls_pk_sign.*4b00"
  4813. # Tests of asynchronous private key support in SSL
  4814. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  4815. run_test "SSL async private: sign, delay=0" \
  4816. "$P_SRV \
  4817. async_operations=s async_private_delay1=0 async_private_delay2=0" \
  4818. "$P_CLI" \
  4819. 0 \
  4820. -s "Async sign callback: using key slot " \
  4821. -s "Async resume (slot [0-9]): sign done, status=0"
  4822. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  4823. run_test "SSL async private: sign, delay=1" \
  4824. "$P_SRV \
  4825. async_operations=s async_private_delay1=1 async_private_delay2=1" \
  4826. "$P_CLI" \
  4827. 0 \
  4828. -s "Async sign callback: using key slot " \
  4829. -s "Async resume (slot [0-9]): call 0 more times." \
  4830. -s "Async resume (slot [0-9]): sign done, status=0"
  4831. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  4832. run_test "SSL async private: sign, delay=2" \
  4833. "$P_SRV \
  4834. async_operations=s async_private_delay1=2 async_private_delay2=2" \
  4835. "$P_CLI" \
  4836. 0 \
  4837. -s "Async sign callback: using key slot " \
  4838. -U "Async sign callback: using key slot " \
  4839. -s "Async resume (slot [0-9]): call 1 more times." \
  4840. -s "Async resume (slot [0-9]): call 0 more times." \
  4841. -s "Async resume (slot [0-9]): sign done, status=0"
  4842. # Test that the async callback correctly signs the 36-byte hash of TLS 1.0/1.1
  4843. # with RSA PKCS#1v1.5 as used in TLS 1.0/1.1.
  4844. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  4845. requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_1
  4846. run_test "SSL async private: sign, RSA, TLS 1.1" \
  4847. "$P_SRV key_file=data_files/server2.key crt_file=data_files/server2.crt \
  4848. async_operations=s async_private_delay1=0 async_private_delay2=0" \
  4849. "$P_CLI force_version=tls1_1" \
  4850. 0 \
  4851. -s "Async sign callback: using key slot " \
  4852. -s "Async resume (slot [0-9]): sign done, status=0"
  4853. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  4854. run_test "SSL async private: sign, SNI" \
  4855. "$P_SRV debug_level=3 \
  4856. async_operations=s async_private_delay1=0 async_private_delay2=0 \
  4857. crt_file=data_files/server5.crt key_file=data_files/server5.key \
  4858. sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-,polarssl.example,data_files/server1-nospace.crt,data_files/server1.key,-,-,-" \
  4859. "$P_CLI server_name=polarssl.example" \
  4860. 0 \
  4861. -s "Async sign callback: using key slot " \
  4862. -s "Async resume (slot [0-9]): sign done, status=0" \
  4863. -s "parse ServerName extension" \
  4864. -c "issuer name *: C=NL, O=PolarSSL, CN=PolarSSL Test CA" \
  4865. -c "subject name *: C=NL, O=PolarSSL, CN=polarssl.example"
  4866. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  4867. run_test "SSL async private: decrypt, delay=0" \
  4868. "$P_SRV \
  4869. async_operations=d async_private_delay1=0 async_private_delay2=0" \
  4870. "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
  4871. 0 \
  4872. -s "Async decrypt callback: using key slot " \
  4873. -s "Async resume (slot [0-9]): decrypt done, status=0"
  4874. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  4875. run_test "SSL async private: decrypt, delay=1" \
  4876. "$P_SRV \
  4877. async_operations=d async_private_delay1=1 async_private_delay2=1" \
  4878. "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
  4879. 0 \
  4880. -s "Async decrypt callback: using key slot " \
  4881. -s "Async resume (slot [0-9]): call 0 more times." \
  4882. -s "Async resume (slot [0-9]): decrypt done, status=0"
  4883. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  4884. run_test "SSL async private: decrypt RSA-PSK, delay=0" \
  4885. "$P_SRV psk=abc123 \
  4886. async_operations=d async_private_delay1=0 async_private_delay2=0" \
  4887. "$P_CLI psk=abc123 \
  4888. force_ciphersuite=TLS-RSA-PSK-WITH-AES-128-CBC-SHA256" \
  4889. 0 \
  4890. -s "Async decrypt callback: using key slot " \
  4891. -s "Async resume (slot [0-9]): decrypt done, status=0"
  4892. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  4893. run_test "SSL async private: decrypt RSA-PSK, delay=1" \
  4894. "$P_SRV psk=abc123 \
  4895. async_operations=d async_private_delay1=1 async_private_delay2=1" \
  4896. "$P_CLI psk=abc123 \
  4897. force_ciphersuite=TLS-RSA-PSK-WITH-AES-128-CBC-SHA256" \
  4898. 0 \
  4899. -s "Async decrypt callback: using key slot " \
  4900. -s "Async resume (slot [0-9]): call 0 more times." \
  4901. -s "Async resume (slot [0-9]): decrypt done, status=0"
  4902. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  4903. run_test "SSL async private: sign callback not present" \
  4904. "$P_SRV \
  4905. async_operations=d async_private_delay1=1 async_private_delay2=1" \
  4906. "$P_CLI; [ \$? -eq 1 ] &&
  4907. $P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
  4908. 0 \
  4909. -S "Async sign callback" \
  4910. -s "! mbedtls_ssl_handshake returned" \
  4911. -s "The own private key or pre-shared key is not set, but needed" \
  4912. -s "Async resume (slot [0-9]): decrypt done, status=0" \
  4913. -s "Successful connection"
  4914. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  4915. run_test "SSL async private: decrypt callback not present" \
  4916. "$P_SRV debug_level=1 \
  4917. async_operations=s async_private_delay1=1 async_private_delay2=1" \
  4918. "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA;
  4919. [ \$? -eq 1 ] && $P_CLI" \
  4920. 0 \
  4921. -S "Async decrypt callback" \
  4922. -s "! mbedtls_ssl_handshake returned" \
  4923. -s "got no RSA private key" \
  4924. -s "Async resume (slot [0-9]): sign done, status=0" \
  4925. -s "Successful connection"
  4926. # key1: ECDSA, key2: RSA; use key1 from slot 0
  4927. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  4928. run_test "SSL async private: slot 0 used with key1" \
  4929. "$P_SRV \
  4930. async_operations=s async_private_delay1=1 \
  4931. key_file=data_files/server5.key crt_file=data_files/server5.crt \
  4932. key_file2=data_files/server2.key crt_file2=data_files/server2.crt" \
  4933. "$P_CLI force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256" \
  4934. 0 \
  4935. -s "Async sign callback: using key slot 0," \
  4936. -s "Async resume (slot 0): call 0 more times." \
  4937. -s "Async resume (slot 0): sign done, status=0"
  4938. # key1: ECDSA, key2: RSA; use key2 from slot 0
  4939. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  4940. run_test "SSL async private: slot 0 used with key2" \
  4941. "$P_SRV \
  4942. async_operations=s async_private_delay2=1 \
  4943. key_file=data_files/server5.key crt_file=data_files/server5.crt \
  4944. key_file2=data_files/server2.key crt_file2=data_files/server2.crt" \
  4945. "$P_CLI force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256" \
  4946. 0 \
  4947. -s "Async sign callback: using key slot 0," \
  4948. -s "Async resume (slot 0): call 0 more times." \
  4949. -s "Async resume (slot 0): sign done, status=0"
  4950. # key1: ECDSA, key2: RSA; use key2 from slot 1
  4951. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  4952. run_test "SSL async private: slot 1 used with key2" \
  4953. "$P_SRV \
  4954. async_operations=s async_private_delay1=1 async_private_delay2=1 \
  4955. key_file=data_files/server5.key crt_file=data_files/server5.crt \
  4956. key_file2=data_files/server2.key crt_file2=data_files/server2.crt" \
  4957. "$P_CLI force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256" \
  4958. 0 \
  4959. -s "Async sign callback: using key slot 1," \
  4960. -s "Async resume (slot 1): call 0 more times." \
  4961. -s "Async resume (slot 1): sign done, status=0"
  4962. # key1: ECDSA, key2: RSA; use key2 directly
  4963. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  4964. run_test "SSL async private: fall back to transparent key" \
  4965. "$P_SRV \
  4966. async_operations=s async_private_delay1=1 \
  4967. key_file=data_files/server5.key crt_file=data_files/server5.crt \
  4968. key_file2=data_files/server2.key crt_file2=data_files/server2.crt " \
  4969. "$P_CLI force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256" \
  4970. 0 \
  4971. -s "Async sign callback: no key matches this certificate."
  4972. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  4973. run_test "SSL async private: sign, error in start" \
  4974. "$P_SRV \
  4975. async_operations=s async_private_delay1=1 async_private_delay2=1 \
  4976. async_private_error=1" \
  4977. "$P_CLI" \
  4978. 1 \
  4979. -s "Async sign callback: injected error" \
  4980. -S "Async resume" \
  4981. -S "Async cancel" \
  4982. -s "! mbedtls_ssl_handshake returned"
  4983. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  4984. run_test "SSL async private: sign, cancel after start" \
  4985. "$P_SRV \
  4986. async_operations=s async_private_delay1=1 async_private_delay2=1 \
  4987. async_private_error=2" \
  4988. "$P_CLI" \
  4989. 1 \
  4990. -s "Async sign callback: using key slot " \
  4991. -S "Async resume" \
  4992. -s "Async cancel"
  4993. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  4994. run_test "SSL async private: sign, error in resume" \
  4995. "$P_SRV \
  4996. async_operations=s async_private_delay1=1 async_private_delay2=1 \
  4997. async_private_error=3" \
  4998. "$P_CLI" \
  4999. 1 \
  5000. -s "Async sign callback: using key slot " \
  5001. -s "Async resume callback: sign done but injected error" \
  5002. -S "Async cancel" \
  5003. -s "! mbedtls_ssl_handshake returned"
  5004. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  5005. run_test "SSL async private: decrypt, error in start" \
  5006. "$P_SRV \
  5007. async_operations=d async_private_delay1=1 async_private_delay2=1 \
  5008. async_private_error=1" \
  5009. "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
  5010. 1 \
  5011. -s "Async decrypt callback: injected error" \
  5012. -S "Async resume" \
  5013. -S "Async cancel" \
  5014. -s "! mbedtls_ssl_handshake returned"
  5015. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  5016. run_test "SSL async private: decrypt, cancel after start" \
  5017. "$P_SRV \
  5018. async_operations=d async_private_delay1=1 async_private_delay2=1 \
  5019. async_private_error=2" \
  5020. "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
  5021. 1 \
  5022. -s "Async decrypt callback: using key slot " \
  5023. -S "Async resume" \
  5024. -s "Async cancel"
  5025. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  5026. run_test "SSL async private: decrypt, error in resume" \
  5027. "$P_SRV \
  5028. async_operations=d async_private_delay1=1 async_private_delay2=1 \
  5029. async_private_error=3" \
  5030. "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
  5031. 1 \
  5032. -s "Async decrypt callback: using key slot " \
  5033. -s "Async resume callback: decrypt done but injected error" \
  5034. -S "Async cancel" \
  5035. -s "! mbedtls_ssl_handshake returned"
  5036. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  5037. run_test "SSL async private: cancel after start then operate correctly" \
  5038. "$P_SRV \
  5039. async_operations=s async_private_delay1=1 async_private_delay2=1 \
  5040. async_private_error=-2" \
  5041. "$P_CLI; [ \$? -eq 1 ] && $P_CLI" \
  5042. 0 \
  5043. -s "Async cancel" \
  5044. -s "! mbedtls_ssl_handshake returned" \
  5045. -s "Async resume" \
  5046. -s "Successful connection"
  5047. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  5048. run_test "SSL async private: error in resume then operate correctly" \
  5049. "$P_SRV \
  5050. async_operations=s async_private_delay1=1 async_private_delay2=1 \
  5051. async_private_error=-3" \
  5052. "$P_CLI; [ \$? -eq 1 ] && $P_CLI" \
  5053. 0 \
  5054. -s "! mbedtls_ssl_handshake returned" \
  5055. -s "Async resume" \
  5056. -s "Successful connection"
  5057. # key1: ECDSA, key2: RSA; use key1 through async, then key2 directly
  5058. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  5059. run_test "SSL async private: cancel after start then fall back to transparent key" \
  5060. "$P_SRV \
  5061. async_operations=s async_private_delay1=1 async_private_error=-2 \
  5062. key_file=data_files/server5.key crt_file=data_files/server5.crt \
  5063. key_file2=data_files/server2.key crt_file2=data_files/server2.crt" \
  5064. "$P_CLI force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256;
  5065. [ \$? -eq 1 ] &&
  5066. $P_CLI force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256" \
  5067. 0 \
  5068. -s "Async sign callback: using key slot 0" \
  5069. -S "Async resume" \
  5070. -s "Async cancel" \
  5071. -s "! mbedtls_ssl_handshake returned" \
  5072. -s "Async sign callback: no key matches this certificate." \
  5073. -s "Successful connection"
  5074. # key1: ECDSA, key2: RSA; use key1 through async, then key2 directly
  5075. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  5076. run_test "SSL async private: sign, error in resume then fall back to transparent key" \
  5077. "$P_SRV \
  5078. async_operations=s async_private_delay1=1 async_private_error=-3 \
  5079. key_file=data_files/server5.key crt_file=data_files/server5.crt \
  5080. key_file2=data_files/server2.key crt_file2=data_files/server2.crt" \
  5081. "$P_CLI force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256;
  5082. [ \$? -eq 1 ] &&
  5083. $P_CLI force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256" \
  5084. 0 \
  5085. -s "Async resume" \
  5086. -s "! mbedtls_ssl_handshake returned" \
  5087. -s "Async sign callback: no key matches this certificate." \
  5088. -s "Successful connection"
  5089. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  5090. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  5091. run_test "SSL async private: renegotiation: client-initiated; sign" \
  5092. "$P_SRV \
  5093. async_operations=s async_private_delay1=1 async_private_delay2=1 \
  5094. exchanges=2 renegotiation=1" \
  5095. "$P_CLI exchanges=2 renegotiation=1 renegotiate=1" \
  5096. 0 \
  5097. -s "Async sign callback: using key slot " \
  5098. -s "Async resume (slot [0-9]): sign done, status=0"
  5099. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  5100. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  5101. run_test "SSL async private: renegotiation: server-initiated; sign" \
  5102. "$P_SRV \
  5103. async_operations=s async_private_delay1=1 async_private_delay2=1 \
  5104. exchanges=2 renegotiation=1 renegotiate=1" \
  5105. "$P_CLI exchanges=2 renegotiation=1" \
  5106. 0 \
  5107. -s "Async sign callback: using key slot " \
  5108. -s "Async resume (slot [0-9]): sign done, status=0"
  5109. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  5110. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  5111. run_test "SSL async private: renegotiation: client-initiated; decrypt" \
  5112. "$P_SRV \
  5113. async_operations=d async_private_delay1=1 async_private_delay2=1 \
  5114. exchanges=2 renegotiation=1" \
  5115. "$P_CLI exchanges=2 renegotiation=1 renegotiate=1 \
  5116. force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
  5117. 0 \
  5118. -s "Async decrypt callback: using key slot " \
  5119. -s "Async resume (slot [0-9]): decrypt done, status=0"
  5120. requires_config_enabled MBEDTLS_SSL_ASYNC_PRIVATE
  5121. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  5122. run_test "SSL async private: renegotiation: server-initiated; decrypt" \
  5123. "$P_SRV \
  5124. async_operations=d async_private_delay1=1 async_private_delay2=1 \
  5125. exchanges=2 renegotiation=1 renegotiate=1" \
  5126. "$P_CLI exchanges=2 renegotiation=1 \
  5127. force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
  5128. 0 \
  5129. -s "Async decrypt callback: using key slot " \
  5130. -s "Async resume (slot [0-9]): decrypt done, status=0"
  5131. # Tests for ECC extensions (rfc 4492)
  5132. requires_config_enabled MBEDTLS_AES_C
  5133. requires_config_enabled MBEDTLS_CIPHER_MODE_CBC
  5134. requires_config_enabled MBEDTLS_SHA256_C
  5135. requires_config_enabled MBEDTLS_KEY_EXCHANGE_RSA_ENABLED
  5136. run_test "Force a non ECC ciphersuite in the client side" \
  5137. "$P_SRV debug_level=3" \
  5138. "$P_CLI debug_level=3 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA256" \
  5139. 0 \
  5140. -C "client hello, adding supported_elliptic_curves extension" \
  5141. -C "client hello, adding supported_point_formats extension" \
  5142. -S "found supported elliptic curves extension" \
  5143. -S "found supported point formats extension"
  5144. requires_config_enabled MBEDTLS_AES_C
  5145. requires_config_enabled MBEDTLS_CIPHER_MODE_CBC
  5146. requires_config_enabled MBEDTLS_SHA256_C
  5147. requires_config_enabled MBEDTLS_KEY_EXCHANGE_RSA_ENABLED
  5148. run_test "Force a non ECC ciphersuite in the server side" \
  5149. "$P_SRV debug_level=3 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA256" \
  5150. "$P_CLI debug_level=3" \
  5151. 0 \
  5152. -C "found supported_point_formats extension" \
  5153. -S "server hello, supported_point_formats extension"
  5154. requires_config_enabled MBEDTLS_AES_C
  5155. requires_config_enabled MBEDTLS_CIPHER_MODE_CBC
  5156. requires_config_enabled MBEDTLS_SHA256_C
  5157. requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
  5158. run_test "Force an ECC ciphersuite in the client side" \
  5159. "$P_SRV debug_level=3" \
  5160. "$P_CLI debug_level=3 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256" \
  5161. 0 \
  5162. -c "client hello, adding supported_elliptic_curves extension" \
  5163. -c "client hello, adding supported_point_formats extension" \
  5164. -s "found supported elliptic curves extension" \
  5165. -s "found supported point formats extension"
  5166. requires_config_enabled MBEDTLS_AES_C
  5167. requires_config_enabled MBEDTLS_CIPHER_MODE_CBC
  5168. requires_config_enabled MBEDTLS_SHA256_C
  5169. requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
  5170. run_test "Force an ECC ciphersuite in the server side" \
  5171. "$P_SRV debug_level=3 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256" \
  5172. "$P_CLI debug_level=3" \
  5173. 0 \
  5174. -c "found supported_point_formats extension" \
  5175. -s "server hello, supported_point_formats extension"
  5176. # Tests for DTLS HelloVerifyRequest
  5177. run_test "DTLS cookie: enabled" \
  5178. "$P_SRV dtls=1 debug_level=2" \
  5179. "$P_CLI dtls=1 debug_level=2" \
  5180. 0 \
  5181. -s "cookie verification failed" \
  5182. -s "cookie verification passed" \
  5183. -S "cookie verification skipped" \
  5184. -c "received hello verify request" \
  5185. -s "hello verification requested" \
  5186. -S "SSL - The requested feature is not available"
  5187. run_test "DTLS cookie: disabled" \
  5188. "$P_SRV dtls=1 debug_level=2 cookies=0" \
  5189. "$P_CLI dtls=1 debug_level=2" \
  5190. 0 \
  5191. -S "cookie verification failed" \
  5192. -S "cookie verification passed" \
  5193. -s "cookie verification skipped" \
  5194. -C "received hello verify request" \
  5195. -S "hello verification requested" \
  5196. -S "SSL - The requested feature is not available"
  5197. run_test "DTLS cookie: default (failing)" \
  5198. "$P_SRV dtls=1 debug_level=2 cookies=-1" \
  5199. "$P_CLI dtls=1 debug_level=2 hs_timeout=100-400" \
  5200. 1 \
  5201. -s "cookie verification failed" \
  5202. -S "cookie verification passed" \
  5203. -S "cookie verification skipped" \
  5204. -C "received hello verify request" \
  5205. -S "hello verification requested" \
  5206. -s "SSL - The requested feature is not available"
  5207. requires_ipv6
  5208. run_test "DTLS cookie: enabled, IPv6" \
  5209. "$P_SRV dtls=1 debug_level=2 server_addr=::1" \
  5210. "$P_CLI dtls=1 debug_level=2 server_addr=::1" \
  5211. 0 \
  5212. -s "cookie verification failed" \
  5213. -s "cookie verification passed" \
  5214. -S "cookie verification skipped" \
  5215. -c "received hello verify request" \
  5216. -s "hello verification requested" \
  5217. -S "SSL - The requested feature is not available"
  5218. run_test "DTLS cookie: enabled, nbio" \
  5219. "$P_SRV dtls=1 nbio=2 debug_level=2" \
  5220. "$P_CLI dtls=1 nbio=2 debug_level=2" \
  5221. 0 \
  5222. -s "cookie verification failed" \
  5223. -s "cookie verification passed" \
  5224. -S "cookie verification skipped" \
  5225. -c "received hello verify request" \
  5226. -s "hello verification requested" \
  5227. -S "SSL - The requested feature is not available"
  5228. # Tests for client reconnecting from the same port with DTLS
  5229. not_with_valgrind # spurious resend
  5230. run_test "DTLS client reconnect from same port: reference" \
  5231. "$P_SRV dtls=1 exchanges=2 read_timeout=20000 hs_timeout=10000-20000" \
  5232. "$P_CLI dtls=1 exchanges=2 debug_level=2 hs_timeout=10000-20000" \
  5233. 0 \
  5234. -C "resend" \
  5235. -S "The operation timed out" \
  5236. -S "Client initiated reconnection from same port"
  5237. not_with_valgrind # spurious resend
  5238. run_test "DTLS client reconnect from same port: reconnect" \
  5239. "$P_SRV dtls=1 exchanges=2 read_timeout=20000 hs_timeout=10000-20000" \
  5240. "$P_CLI dtls=1 exchanges=2 debug_level=2 hs_timeout=10000-20000 reconnect_hard=1" \
  5241. 0 \
  5242. -C "resend" \
  5243. -S "The operation timed out" \
  5244. -s "Client initiated reconnection from same port"
  5245. not_with_valgrind # server/client too slow to respond in time (next test has higher timeouts)
  5246. run_test "DTLS client reconnect from same port: reconnect, nbio, no valgrind" \
  5247. "$P_SRV dtls=1 exchanges=2 read_timeout=1000 nbio=2" \
  5248. "$P_CLI dtls=1 exchanges=2 debug_level=2 hs_timeout=500-1000 reconnect_hard=1" \
  5249. 0 \
  5250. -S "The operation timed out" \
  5251. -s "Client initiated reconnection from same port"
  5252. only_with_valgrind # Only with valgrind, do previous test but with higher read_timeout and hs_timeout
  5253. run_test "DTLS client reconnect from same port: reconnect, nbio, valgrind" \
  5254. "$P_SRV dtls=1 exchanges=2 read_timeout=2000 nbio=2 hs_timeout=1500-6000" \
  5255. "$P_CLI dtls=1 exchanges=2 debug_level=2 hs_timeout=1500-3000 reconnect_hard=1" \
  5256. 0 \
  5257. -S "The operation timed out" \
  5258. -s "Client initiated reconnection from same port"
  5259. run_test "DTLS client reconnect from same port: no cookies" \
  5260. "$P_SRV dtls=1 exchanges=2 read_timeout=1000 cookies=0" \
  5261. "$P_CLI dtls=1 exchanges=2 debug_level=2 hs_timeout=500-8000 reconnect_hard=1" \
  5262. 0 \
  5263. -s "The operation timed out" \
  5264. -S "Client initiated reconnection from same port"
  5265. run_test "DTLS client reconnect from same port: attacker-injected" \
  5266. -p "$P_PXY inject_clihlo=1" \
  5267. "$P_SRV dtls=1 exchanges=2 debug_level=1" \
  5268. "$P_CLI dtls=1 exchanges=2" \
  5269. 0 \
  5270. -s "possible client reconnect from the same port" \
  5271. -S "Client initiated reconnection from same port"
  5272. # Tests for various cases of client authentication with DTLS
  5273. # (focused on handshake flows and message parsing)
  5274. run_test "DTLS client auth: required" \
  5275. "$P_SRV dtls=1 auth_mode=required" \
  5276. "$P_CLI dtls=1" \
  5277. 0 \
  5278. -s "Verifying peer X.509 certificate... ok"
  5279. run_test "DTLS client auth: optional, client has no cert" \
  5280. "$P_SRV dtls=1 auth_mode=optional" \
  5281. "$P_CLI dtls=1 crt_file=none key_file=none" \
  5282. 0 \
  5283. -s "! Certificate was missing"
  5284. run_test "DTLS client auth: none, client has no cert" \
  5285. "$P_SRV dtls=1 auth_mode=none" \
  5286. "$P_CLI dtls=1 crt_file=none key_file=none debug_level=2" \
  5287. 0 \
  5288. -c "skip write certificate$" \
  5289. -s "! Certificate verification was skipped"
  5290. run_test "DTLS wrong PSK: badmac alert" \
  5291. "$P_SRV dtls=1 psk=abc123 force_ciphersuite=TLS-PSK-WITH-AES-128-GCM-SHA256" \
  5292. "$P_CLI dtls=1 psk=abc124" \
  5293. 1 \
  5294. -s "SSL - Verification of the message MAC failed" \
  5295. -c "SSL - A fatal alert message was received from our peer"
  5296. # Tests for receiving fragmented handshake messages with DTLS
  5297. requires_gnutls
  5298. run_test "DTLS reassembly: no fragmentation (gnutls server)" \
  5299. "$G_SRV -u --mtu 2048 -a" \
  5300. "$P_CLI dtls=1 debug_level=2" \
  5301. 0 \
  5302. -C "found fragmented DTLS handshake message" \
  5303. -C "error"
  5304. requires_gnutls
  5305. run_test "DTLS reassembly: some fragmentation (gnutls server)" \
  5306. "$G_SRV -u --mtu 512" \
  5307. "$P_CLI dtls=1 debug_level=2" \
  5308. 0 \
  5309. -c "found fragmented DTLS handshake message" \
  5310. -C "error"
  5311. requires_gnutls
  5312. run_test "DTLS reassembly: more fragmentation (gnutls server)" \
  5313. "$G_SRV -u --mtu 128" \
  5314. "$P_CLI dtls=1 debug_level=2" \
  5315. 0 \
  5316. -c "found fragmented DTLS handshake message" \
  5317. -C "error"
  5318. requires_gnutls
  5319. run_test "DTLS reassembly: more fragmentation, nbio (gnutls server)" \
  5320. "$G_SRV -u --mtu 128" \
  5321. "$P_CLI dtls=1 nbio=2 debug_level=2" \
  5322. 0 \
  5323. -c "found fragmented DTLS handshake message" \
  5324. -C "error"
  5325. requires_gnutls
  5326. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  5327. run_test "DTLS reassembly: fragmentation, renego (gnutls server)" \
  5328. "$G_SRV -u --mtu 256" \
  5329. "$P_CLI debug_level=3 dtls=1 renegotiation=1 renegotiate=1" \
  5330. 0 \
  5331. -c "found fragmented DTLS handshake message" \
  5332. -c "client hello, adding renegotiation extension" \
  5333. -c "found renegotiation extension" \
  5334. -c "=> renegotiate" \
  5335. -C "mbedtls_ssl_handshake returned" \
  5336. -C "error" \
  5337. -s "Extra-header:"
  5338. requires_gnutls
  5339. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  5340. run_test "DTLS reassembly: fragmentation, nbio, renego (gnutls server)" \
  5341. "$G_SRV -u --mtu 256" \
  5342. "$P_CLI debug_level=3 nbio=2 dtls=1 renegotiation=1 renegotiate=1" \
  5343. 0 \
  5344. -c "found fragmented DTLS handshake message" \
  5345. -c "client hello, adding renegotiation extension" \
  5346. -c "found renegotiation extension" \
  5347. -c "=> renegotiate" \
  5348. -C "mbedtls_ssl_handshake returned" \
  5349. -C "error" \
  5350. -s "Extra-header:"
  5351. run_test "DTLS reassembly: no fragmentation (openssl server)" \
  5352. "$O_SRV -dtls1 -mtu 2048" \
  5353. "$P_CLI dtls=1 debug_level=2" \
  5354. 0 \
  5355. -C "found fragmented DTLS handshake message" \
  5356. -C "error"
  5357. run_test "DTLS reassembly: some fragmentation (openssl server)" \
  5358. "$O_SRV -dtls1 -mtu 768" \
  5359. "$P_CLI dtls=1 debug_level=2" \
  5360. 0 \
  5361. -c "found fragmented DTLS handshake message" \
  5362. -C "error"
  5363. run_test "DTLS reassembly: more fragmentation (openssl server)" \
  5364. "$O_SRV -dtls1 -mtu 256" \
  5365. "$P_CLI dtls=1 debug_level=2" \
  5366. 0 \
  5367. -c "found fragmented DTLS handshake message" \
  5368. -C "error"
  5369. run_test "DTLS reassembly: fragmentation, nbio (openssl server)" \
  5370. "$O_SRV -dtls1 -mtu 256" \
  5371. "$P_CLI dtls=1 nbio=2 debug_level=2" \
  5372. 0 \
  5373. -c "found fragmented DTLS handshake message" \
  5374. -C "error"
  5375. # Tests for sending fragmented handshake messages with DTLS
  5376. #
  5377. # Use client auth when we need the client to send large messages,
  5378. # and use large cert chains on both sides too (the long chains we have all use
  5379. # both RSA and ECDSA, but ideally we should have long chains with either).
  5380. # Sizes reached (UDP payload):
  5381. # - 2037B for server certificate
  5382. # - 1542B for client certificate
  5383. # - 1013B for newsessionticket
  5384. # - all others below 512B
  5385. # All those tests assume MAX_CONTENT_LEN is at least 2048
  5386. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  5387. requires_config_enabled MBEDTLS_RSA_C
  5388. requires_config_enabled MBEDTLS_ECDSA_C
  5389. requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
  5390. run_test "DTLS fragmenting: none (for reference)" \
  5391. "$P_SRV dtls=1 debug_level=2 auth_mode=required \
  5392. crt_file=data_files/server7_int-ca.crt \
  5393. key_file=data_files/server7.key \
  5394. hs_timeout=2500-60000 \
  5395. max_frag_len=4096" \
  5396. "$P_CLI dtls=1 debug_level=2 \
  5397. crt_file=data_files/server8_int-ca2.crt \
  5398. key_file=data_files/server8.key \
  5399. hs_timeout=2500-60000 \
  5400. max_frag_len=4096" \
  5401. 0 \
  5402. -S "found fragmented DTLS handshake message" \
  5403. -C "found fragmented DTLS handshake message" \
  5404. -C "error"
  5405. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  5406. requires_config_enabled MBEDTLS_RSA_C
  5407. requires_config_enabled MBEDTLS_ECDSA_C
  5408. requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
  5409. run_test "DTLS fragmenting: server only (max_frag_len)" \
  5410. "$P_SRV dtls=1 debug_level=2 auth_mode=required \
  5411. crt_file=data_files/server7_int-ca.crt \
  5412. key_file=data_files/server7.key \
  5413. hs_timeout=2500-60000 \
  5414. max_frag_len=1024" \
  5415. "$P_CLI dtls=1 debug_level=2 \
  5416. crt_file=data_files/server8_int-ca2.crt \
  5417. key_file=data_files/server8.key \
  5418. hs_timeout=2500-60000 \
  5419. max_frag_len=2048" \
  5420. 0 \
  5421. -S "found fragmented DTLS handshake message" \
  5422. -c "found fragmented DTLS handshake message" \
  5423. -C "error"
  5424. # With the MFL extension, the server has no way of forcing
  5425. # the client to not exceed a certain MTU; hence, the following
  5426. # test can't be replicated with an MTU proxy such as the one
  5427. # `client-initiated, server only (max_frag_len)` below.
  5428. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  5429. requires_config_enabled MBEDTLS_RSA_C
  5430. requires_config_enabled MBEDTLS_ECDSA_C
  5431. requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
  5432. run_test "DTLS fragmenting: server only (more) (max_frag_len)" \
  5433. "$P_SRV dtls=1 debug_level=2 auth_mode=required \
  5434. crt_file=data_files/server7_int-ca.crt \
  5435. key_file=data_files/server7.key \
  5436. hs_timeout=2500-60000 \
  5437. max_frag_len=512" \
  5438. "$P_CLI dtls=1 debug_level=2 \
  5439. crt_file=data_files/server8_int-ca2.crt \
  5440. key_file=data_files/server8.key \
  5441. hs_timeout=2500-60000 \
  5442. max_frag_len=4096" \
  5443. 0 \
  5444. -S "found fragmented DTLS handshake message" \
  5445. -c "found fragmented DTLS handshake message" \
  5446. -C "error"
  5447. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  5448. requires_config_enabled MBEDTLS_RSA_C
  5449. requires_config_enabled MBEDTLS_ECDSA_C
  5450. requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
  5451. run_test "DTLS fragmenting: client-initiated, server only (max_frag_len)" \
  5452. "$P_SRV dtls=1 debug_level=2 auth_mode=none \
  5453. crt_file=data_files/server7_int-ca.crt \
  5454. key_file=data_files/server7.key \
  5455. hs_timeout=2500-60000 \
  5456. max_frag_len=2048" \
  5457. "$P_CLI dtls=1 debug_level=2 \
  5458. crt_file=data_files/server8_int-ca2.crt \
  5459. key_file=data_files/server8.key \
  5460. hs_timeout=2500-60000 \
  5461. max_frag_len=1024" \
  5462. 0 \
  5463. -S "found fragmented DTLS handshake message" \
  5464. -c "found fragmented DTLS handshake message" \
  5465. -C "error"
  5466. # While not required by the standard defining the MFL extension
  5467. # (according to which it only applies to records, not to datagrams),
  5468. # Mbed TLS will never send datagrams larger than MFL + { Max record expansion },
  5469. # as otherwise there wouldn't be any means to communicate MTU restrictions
  5470. # to the peer.
  5471. # The next test checks that no datagrams significantly larger than the
  5472. # negotiated MFL are sent.
  5473. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  5474. requires_config_enabled MBEDTLS_RSA_C
  5475. requires_config_enabled MBEDTLS_ECDSA_C
  5476. requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
  5477. run_test "DTLS fragmenting: client-initiated, server only (max_frag_len), proxy MTU" \
  5478. -p "$P_PXY mtu=1110" \
  5479. "$P_SRV dtls=1 debug_level=2 auth_mode=none \
  5480. crt_file=data_files/server7_int-ca.crt \
  5481. key_file=data_files/server7.key \
  5482. hs_timeout=2500-60000 \
  5483. max_frag_len=2048" \
  5484. "$P_CLI dtls=1 debug_level=2 \
  5485. crt_file=data_files/server8_int-ca2.crt \
  5486. key_file=data_files/server8.key \
  5487. hs_timeout=2500-60000 \
  5488. max_frag_len=1024" \
  5489. 0 \
  5490. -S "found fragmented DTLS handshake message" \
  5491. -c "found fragmented DTLS handshake message" \
  5492. -C "error"
  5493. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  5494. requires_config_enabled MBEDTLS_RSA_C
  5495. requires_config_enabled MBEDTLS_ECDSA_C
  5496. requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
  5497. run_test "DTLS fragmenting: client-initiated, both (max_frag_len)" \
  5498. "$P_SRV dtls=1 debug_level=2 auth_mode=required \
  5499. crt_file=data_files/server7_int-ca.crt \
  5500. key_file=data_files/server7.key \
  5501. hs_timeout=2500-60000 \
  5502. max_frag_len=2048" \
  5503. "$P_CLI dtls=1 debug_level=2 \
  5504. crt_file=data_files/server8_int-ca2.crt \
  5505. key_file=data_files/server8.key \
  5506. hs_timeout=2500-60000 \
  5507. max_frag_len=1024" \
  5508. 0 \
  5509. -s "found fragmented DTLS handshake message" \
  5510. -c "found fragmented DTLS handshake message" \
  5511. -C "error"
  5512. # While not required by the standard defining the MFL extension
  5513. # (according to which it only applies to records, not to datagrams),
  5514. # Mbed TLS will never send datagrams larger than MFL + { Max record expansion },
  5515. # as otherwise there wouldn't be any means to communicate MTU restrictions
  5516. # to the peer.
  5517. # The next test checks that no datagrams significantly larger than the
  5518. # negotiated MFL are sent.
  5519. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  5520. requires_config_enabled MBEDTLS_RSA_C
  5521. requires_config_enabled MBEDTLS_ECDSA_C
  5522. requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
  5523. run_test "DTLS fragmenting: client-initiated, both (max_frag_len), proxy MTU" \
  5524. -p "$P_PXY mtu=1110" \
  5525. "$P_SRV dtls=1 debug_level=2 auth_mode=required \
  5526. crt_file=data_files/server7_int-ca.crt \
  5527. key_file=data_files/server7.key \
  5528. hs_timeout=2500-60000 \
  5529. max_frag_len=2048" \
  5530. "$P_CLI dtls=1 debug_level=2 \
  5531. crt_file=data_files/server8_int-ca2.crt \
  5532. key_file=data_files/server8.key \
  5533. hs_timeout=2500-60000 \
  5534. max_frag_len=1024" \
  5535. 0 \
  5536. -s "found fragmented DTLS handshake message" \
  5537. -c "found fragmented DTLS handshake message" \
  5538. -C "error"
  5539. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  5540. requires_config_enabled MBEDTLS_RSA_C
  5541. requires_config_enabled MBEDTLS_ECDSA_C
  5542. run_test "DTLS fragmenting: none (for reference) (MTU)" \
  5543. "$P_SRV dtls=1 debug_level=2 auth_mode=required \
  5544. crt_file=data_files/server7_int-ca.crt \
  5545. key_file=data_files/server7.key \
  5546. hs_timeout=2500-60000 \
  5547. mtu=4096" \
  5548. "$P_CLI dtls=1 debug_level=2 \
  5549. crt_file=data_files/server8_int-ca2.crt \
  5550. key_file=data_files/server8.key \
  5551. hs_timeout=2500-60000 \
  5552. mtu=4096" \
  5553. 0 \
  5554. -S "found fragmented DTLS handshake message" \
  5555. -C "found fragmented DTLS handshake message" \
  5556. -C "error"
  5557. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  5558. requires_config_enabled MBEDTLS_RSA_C
  5559. requires_config_enabled MBEDTLS_ECDSA_C
  5560. run_test "DTLS fragmenting: client (MTU)" \
  5561. "$P_SRV dtls=1 debug_level=2 auth_mode=required \
  5562. crt_file=data_files/server7_int-ca.crt \
  5563. key_file=data_files/server7.key \
  5564. hs_timeout=3500-60000 \
  5565. mtu=4096" \
  5566. "$P_CLI dtls=1 debug_level=2 \
  5567. crt_file=data_files/server8_int-ca2.crt \
  5568. key_file=data_files/server8.key \
  5569. hs_timeout=3500-60000 \
  5570. mtu=1024" \
  5571. 0 \
  5572. -s "found fragmented DTLS handshake message" \
  5573. -C "found fragmented DTLS handshake message" \
  5574. -C "error"
  5575. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  5576. requires_config_enabled MBEDTLS_RSA_C
  5577. requires_config_enabled MBEDTLS_ECDSA_C
  5578. run_test "DTLS fragmenting: server (MTU)" \
  5579. "$P_SRV dtls=1 debug_level=2 auth_mode=required \
  5580. crt_file=data_files/server7_int-ca.crt \
  5581. key_file=data_files/server7.key \
  5582. hs_timeout=2500-60000 \
  5583. mtu=512" \
  5584. "$P_CLI dtls=1 debug_level=2 \
  5585. crt_file=data_files/server8_int-ca2.crt \
  5586. key_file=data_files/server8.key \
  5587. hs_timeout=2500-60000 \
  5588. mtu=2048" \
  5589. 0 \
  5590. -S "found fragmented DTLS handshake message" \
  5591. -c "found fragmented DTLS handshake message" \
  5592. -C "error"
  5593. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  5594. requires_config_enabled MBEDTLS_RSA_C
  5595. requires_config_enabled MBEDTLS_ECDSA_C
  5596. run_test "DTLS fragmenting: both (MTU=1024)" \
  5597. -p "$P_PXY mtu=1024" \
  5598. "$P_SRV dtls=1 debug_level=2 auth_mode=required \
  5599. crt_file=data_files/server7_int-ca.crt \
  5600. key_file=data_files/server7.key \
  5601. hs_timeout=2500-60000 \
  5602. mtu=1024" \
  5603. "$P_CLI dtls=1 debug_level=2 \
  5604. crt_file=data_files/server8_int-ca2.crt \
  5605. key_file=data_files/server8.key \
  5606. hs_timeout=2500-60000 \
  5607. mtu=1024" \
  5608. 0 \
  5609. -s "found fragmented DTLS handshake message" \
  5610. -c "found fragmented DTLS handshake message" \
  5611. -C "error"
  5612. # Forcing ciphersuite for this test to fit the MTU of 512 with full config.
  5613. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  5614. requires_config_enabled MBEDTLS_RSA_C
  5615. requires_config_enabled MBEDTLS_ECDSA_C
  5616. requires_config_enabled MBEDTLS_SHA256_C
  5617. requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA
  5618. requires_config_enabled MBEDTLS_AES_C
  5619. requires_config_enabled MBEDTLS_GCM_C
  5620. run_test "DTLS fragmenting: both (MTU=512)" \
  5621. -p "$P_PXY mtu=512" \
  5622. "$P_SRV dtls=1 debug_level=2 auth_mode=required \
  5623. crt_file=data_files/server7_int-ca.crt \
  5624. key_file=data_files/server7.key \
  5625. hs_timeout=2500-60000 \
  5626. mtu=512" \
  5627. "$P_CLI dtls=1 debug_level=2 \
  5628. crt_file=data_files/server8_int-ca2.crt \
  5629. key_file=data_files/server8.key \
  5630. force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
  5631. hs_timeout=2500-60000 \
  5632. mtu=512" \
  5633. 0 \
  5634. -s "found fragmented DTLS handshake message" \
  5635. -c "found fragmented DTLS handshake message" \
  5636. -C "error"
  5637. # Test for automatic MTU reduction on repeated resend.
  5638. # Forcing ciphersuite for this test to fit the MTU of 508 with full config.
  5639. # The ratio of max/min timeout should ideally equal 4 to accept two
  5640. # retransmissions, but in some cases (like both the server and client using
  5641. # fragmentation and auto-reduction) an extra retransmission might occur,
  5642. # hence the ratio of 8.
  5643. not_with_valgrind
  5644. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  5645. requires_config_enabled MBEDTLS_RSA_C
  5646. requires_config_enabled MBEDTLS_ECDSA_C
  5647. requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA
  5648. requires_config_enabled MBEDTLS_AES_C
  5649. requires_config_enabled MBEDTLS_GCM_C
  5650. run_test "DTLS fragmenting: proxy MTU: auto-reduction" \
  5651. -p "$P_PXY mtu=508" \
  5652. "$P_SRV dtls=1 debug_level=2 auth_mode=required \
  5653. crt_file=data_files/server7_int-ca.crt \
  5654. key_file=data_files/server7.key \
  5655. hs_timeout=400-3200" \
  5656. "$P_CLI dtls=1 debug_level=2 \
  5657. crt_file=data_files/server8_int-ca2.crt \
  5658. key_file=data_files/server8.key \
  5659. force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
  5660. hs_timeout=400-3200" \
  5661. 0 \
  5662. -s "found fragmented DTLS handshake message" \
  5663. -c "found fragmented DTLS handshake message" \
  5664. -C "error"
  5665. # Forcing ciphersuite for this test to fit the MTU of 508 with full config.
  5666. only_with_valgrind
  5667. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  5668. requires_config_enabled MBEDTLS_RSA_C
  5669. requires_config_enabled MBEDTLS_ECDSA_C
  5670. requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA
  5671. requires_config_enabled MBEDTLS_AES_C
  5672. requires_config_enabled MBEDTLS_GCM_C
  5673. run_test "DTLS fragmenting: proxy MTU: auto-reduction" \
  5674. -p "$P_PXY mtu=508" \
  5675. "$P_SRV dtls=1 debug_level=2 auth_mode=required \
  5676. crt_file=data_files/server7_int-ca.crt \
  5677. key_file=data_files/server7.key \
  5678. hs_timeout=250-10000" \
  5679. "$P_CLI dtls=1 debug_level=2 \
  5680. crt_file=data_files/server8_int-ca2.crt \
  5681. key_file=data_files/server8.key \
  5682. force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
  5683. hs_timeout=250-10000" \
  5684. 0 \
  5685. -s "found fragmented DTLS handshake message" \
  5686. -c "found fragmented DTLS handshake message" \
  5687. -C "error"
  5688. # the proxy shouldn't drop or mess up anything, so we shouldn't need to resend
  5689. # OTOH the client might resend if the server is to slow to reset after sending
  5690. # a HelloVerifyRequest, so only check for no retransmission server-side
  5691. not_with_valgrind # spurious autoreduction due to timeout
  5692. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  5693. requires_config_enabled MBEDTLS_RSA_C
  5694. requires_config_enabled MBEDTLS_ECDSA_C
  5695. run_test "DTLS fragmenting: proxy MTU, simple handshake (MTU=1024)" \
  5696. -p "$P_PXY mtu=1024" \
  5697. "$P_SRV dtls=1 debug_level=2 auth_mode=required \
  5698. crt_file=data_files/server7_int-ca.crt \
  5699. key_file=data_files/server7.key \
  5700. hs_timeout=10000-60000 \
  5701. mtu=1024" \
  5702. "$P_CLI dtls=1 debug_level=2 \
  5703. crt_file=data_files/server8_int-ca2.crt \
  5704. key_file=data_files/server8.key \
  5705. hs_timeout=10000-60000 \
  5706. mtu=1024" \
  5707. 0 \
  5708. -S "autoreduction" \
  5709. -s "found fragmented DTLS handshake message" \
  5710. -c "found fragmented DTLS handshake message" \
  5711. -C "error"
  5712. # Forcing ciphersuite for this test to fit the MTU of 512 with full config.
  5713. # the proxy shouldn't drop or mess up anything, so we shouldn't need to resend
  5714. # OTOH the client might resend if the server is to slow to reset after sending
  5715. # a HelloVerifyRequest, so only check for no retransmission server-side
  5716. not_with_valgrind # spurious autoreduction due to timeout
  5717. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  5718. requires_config_enabled MBEDTLS_RSA_C
  5719. requires_config_enabled MBEDTLS_ECDSA_C
  5720. requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA
  5721. requires_config_enabled MBEDTLS_AES_C
  5722. requires_config_enabled MBEDTLS_GCM_C
  5723. run_test "DTLS fragmenting: proxy MTU, simple handshake (MTU=512)" \
  5724. -p "$P_PXY mtu=512" \
  5725. "$P_SRV dtls=1 debug_level=2 auth_mode=required \
  5726. crt_file=data_files/server7_int-ca.crt \
  5727. key_file=data_files/server7.key \
  5728. hs_timeout=10000-60000 \
  5729. mtu=512" \
  5730. "$P_CLI dtls=1 debug_level=2 \
  5731. crt_file=data_files/server8_int-ca2.crt \
  5732. key_file=data_files/server8.key \
  5733. force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
  5734. hs_timeout=10000-60000 \
  5735. mtu=512" \
  5736. 0 \
  5737. -S "autoreduction" \
  5738. -s "found fragmented DTLS handshake message" \
  5739. -c "found fragmented DTLS handshake message" \
  5740. -C "error"
  5741. not_with_valgrind # spurious autoreduction due to timeout
  5742. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  5743. requires_config_enabled MBEDTLS_RSA_C
  5744. requires_config_enabled MBEDTLS_ECDSA_C
  5745. run_test "DTLS fragmenting: proxy MTU, simple handshake, nbio (MTU=1024)" \
  5746. -p "$P_PXY mtu=1024" \
  5747. "$P_SRV dtls=1 debug_level=2 auth_mode=required \
  5748. crt_file=data_files/server7_int-ca.crt \
  5749. key_file=data_files/server7.key \
  5750. hs_timeout=10000-60000 \
  5751. mtu=1024 nbio=2" \
  5752. "$P_CLI dtls=1 debug_level=2 \
  5753. crt_file=data_files/server8_int-ca2.crt \
  5754. key_file=data_files/server8.key \
  5755. hs_timeout=10000-60000 \
  5756. mtu=1024 nbio=2" \
  5757. 0 \
  5758. -S "autoreduction" \
  5759. -s "found fragmented DTLS handshake message" \
  5760. -c "found fragmented DTLS handshake message" \
  5761. -C "error"
  5762. # Forcing ciphersuite for this test to fit the MTU of 512 with full config.
  5763. not_with_valgrind # spurious autoreduction due to timeout
  5764. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  5765. requires_config_enabled MBEDTLS_RSA_C
  5766. requires_config_enabled MBEDTLS_ECDSA_C
  5767. requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA
  5768. requires_config_enabled MBEDTLS_AES_C
  5769. requires_config_enabled MBEDTLS_GCM_C
  5770. run_test "DTLS fragmenting: proxy MTU, simple handshake, nbio (MTU=512)" \
  5771. -p "$P_PXY mtu=512" \
  5772. "$P_SRV dtls=1 debug_level=2 auth_mode=required \
  5773. crt_file=data_files/server7_int-ca.crt \
  5774. key_file=data_files/server7.key \
  5775. hs_timeout=10000-60000 \
  5776. mtu=512 nbio=2" \
  5777. "$P_CLI dtls=1 debug_level=2 \
  5778. crt_file=data_files/server8_int-ca2.crt \
  5779. key_file=data_files/server8.key \
  5780. force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
  5781. hs_timeout=10000-60000 \
  5782. mtu=512 nbio=2" \
  5783. 0 \
  5784. -S "autoreduction" \
  5785. -s "found fragmented DTLS handshake message" \
  5786. -c "found fragmented DTLS handshake message" \
  5787. -C "error"
  5788. # Forcing ciphersuite for this test to fit the MTU of 1450 with full config.
  5789. # This ensures things still work after session_reset().
  5790. # It also exercises the "resumed handshake" flow.
  5791. # Since we don't support reading fragmented ClientHello yet,
  5792. # up the MTU to 1450 (larger than ClientHello with session ticket,
  5793. # but still smaller than client's Certificate to ensure fragmentation).
  5794. # An autoreduction on the client-side might happen if the server is
  5795. # slow to reset, therefore omitting '-C "autoreduction"' below.
  5796. # reco_delay avoids races where the client reconnects before the server has
  5797. # resumed listening, which would result in a spurious autoreduction.
  5798. not_with_valgrind # spurious autoreduction due to timeout
  5799. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  5800. requires_config_enabled MBEDTLS_RSA_C
  5801. requires_config_enabled MBEDTLS_ECDSA_C
  5802. requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA
  5803. requires_config_enabled MBEDTLS_AES_C
  5804. requires_config_enabled MBEDTLS_GCM_C
  5805. run_test "DTLS fragmenting: proxy MTU, resumed handshake" \
  5806. -p "$P_PXY mtu=1450" \
  5807. "$P_SRV dtls=1 debug_level=2 auth_mode=required \
  5808. crt_file=data_files/server7_int-ca.crt \
  5809. key_file=data_files/server7.key \
  5810. hs_timeout=10000-60000 \
  5811. mtu=1450" \
  5812. "$P_CLI dtls=1 debug_level=2 \
  5813. crt_file=data_files/server8_int-ca2.crt \
  5814. key_file=data_files/server8.key \
  5815. hs_timeout=10000-60000 \
  5816. force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
  5817. mtu=1450 reconnect=1 skip_close_notify=1 reco_delay=1" \
  5818. 0 \
  5819. -S "autoreduction" \
  5820. -s "found fragmented DTLS handshake message" \
  5821. -c "found fragmented DTLS handshake message" \
  5822. -C "error"
  5823. # An autoreduction on the client-side might happen if the server is
  5824. # slow to reset, therefore omitting '-C "autoreduction"' below.
  5825. not_with_valgrind # spurious autoreduction due to timeout
  5826. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  5827. requires_config_enabled MBEDTLS_RSA_C
  5828. requires_config_enabled MBEDTLS_ECDSA_C
  5829. requires_config_enabled MBEDTLS_SHA256_C
  5830. requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA
  5831. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  5832. requires_config_enabled MBEDTLS_CHACHAPOLY_C
  5833. run_test "DTLS fragmenting: proxy MTU, ChachaPoly renego" \
  5834. -p "$P_PXY mtu=512" \
  5835. "$P_SRV dtls=1 debug_level=2 auth_mode=required \
  5836. crt_file=data_files/server7_int-ca.crt \
  5837. key_file=data_files/server7.key \
  5838. exchanges=2 renegotiation=1 \
  5839. hs_timeout=10000-60000 \
  5840. mtu=512" \
  5841. "$P_CLI dtls=1 debug_level=2 \
  5842. crt_file=data_files/server8_int-ca2.crt \
  5843. key_file=data_files/server8.key \
  5844. exchanges=2 renegotiation=1 renegotiate=1 \
  5845. force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
  5846. hs_timeout=10000-60000 \
  5847. mtu=512" \
  5848. 0 \
  5849. -S "autoreduction" \
  5850. -s "found fragmented DTLS handshake message" \
  5851. -c "found fragmented DTLS handshake message" \
  5852. -C "error"
  5853. # An autoreduction on the client-side might happen if the server is
  5854. # slow to reset, therefore omitting '-C "autoreduction"' below.
  5855. not_with_valgrind # spurious autoreduction due to timeout
  5856. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  5857. requires_config_enabled MBEDTLS_RSA_C
  5858. requires_config_enabled MBEDTLS_ECDSA_C
  5859. requires_config_enabled MBEDTLS_SHA256_C
  5860. requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA
  5861. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  5862. requires_config_enabled MBEDTLS_AES_C
  5863. requires_config_enabled MBEDTLS_GCM_C
  5864. run_test "DTLS fragmenting: proxy MTU, AES-GCM renego" \
  5865. -p "$P_PXY mtu=512" \
  5866. "$P_SRV dtls=1 debug_level=2 auth_mode=required \
  5867. crt_file=data_files/server7_int-ca.crt \
  5868. key_file=data_files/server7.key \
  5869. exchanges=2 renegotiation=1 \
  5870. hs_timeout=10000-60000 \
  5871. mtu=512" \
  5872. "$P_CLI dtls=1 debug_level=2 \
  5873. crt_file=data_files/server8_int-ca2.crt \
  5874. key_file=data_files/server8.key \
  5875. exchanges=2 renegotiation=1 renegotiate=1 \
  5876. force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
  5877. hs_timeout=10000-60000 \
  5878. mtu=512" \
  5879. 0 \
  5880. -S "autoreduction" \
  5881. -s "found fragmented DTLS handshake message" \
  5882. -c "found fragmented DTLS handshake message" \
  5883. -C "error"
  5884. # An autoreduction on the client-side might happen if the server is
  5885. # slow to reset, therefore omitting '-C "autoreduction"' below.
  5886. not_with_valgrind # spurious autoreduction due to timeout
  5887. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  5888. requires_config_enabled MBEDTLS_RSA_C
  5889. requires_config_enabled MBEDTLS_ECDSA_C
  5890. requires_config_enabled MBEDTLS_SHA256_C
  5891. requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA
  5892. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  5893. requires_config_enabled MBEDTLS_AES_C
  5894. requires_config_enabled MBEDTLS_CCM_C
  5895. run_test "DTLS fragmenting: proxy MTU, AES-CCM renego" \
  5896. -p "$P_PXY mtu=1024" \
  5897. "$P_SRV dtls=1 debug_level=2 auth_mode=required \
  5898. crt_file=data_files/server7_int-ca.crt \
  5899. key_file=data_files/server7.key \
  5900. exchanges=2 renegotiation=1 \
  5901. force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-CCM-8 \
  5902. hs_timeout=10000-60000 \
  5903. mtu=1024" \
  5904. "$P_CLI dtls=1 debug_level=2 \
  5905. crt_file=data_files/server8_int-ca2.crt \
  5906. key_file=data_files/server8.key \
  5907. exchanges=2 renegotiation=1 renegotiate=1 \
  5908. hs_timeout=10000-60000 \
  5909. mtu=1024" \
  5910. 0 \
  5911. -S "autoreduction" \
  5912. -s "found fragmented DTLS handshake message" \
  5913. -c "found fragmented DTLS handshake message" \
  5914. -C "error"
  5915. # An autoreduction on the client-side might happen if the server is
  5916. # slow to reset, therefore omitting '-C "autoreduction"' below.
  5917. not_with_valgrind # spurious autoreduction due to timeout
  5918. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  5919. requires_config_enabled MBEDTLS_RSA_C
  5920. requires_config_enabled MBEDTLS_ECDSA_C
  5921. requires_config_enabled MBEDTLS_SHA256_C
  5922. requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA
  5923. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  5924. requires_config_enabled MBEDTLS_AES_C
  5925. requires_config_enabled MBEDTLS_CIPHER_MODE_CBC
  5926. requires_config_enabled MBEDTLS_SSL_ENCRYPT_THEN_MAC
  5927. run_test "DTLS fragmenting: proxy MTU, AES-CBC EtM renego" \
  5928. -p "$P_PXY mtu=1024" \
  5929. "$P_SRV dtls=1 debug_level=2 auth_mode=required \
  5930. crt_file=data_files/server7_int-ca.crt \
  5931. key_file=data_files/server7.key \
  5932. exchanges=2 renegotiation=1 \
  5933. force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256 \
  5934. hs_timeout=10000-60000 \
  5935. mtu=1024" \
  5936. "$P_CLI dtls=1 debug_level=2 \
  5937. crt_file=data_files/server8_int-ca2.crt \
  5938. key_file=data_files/server8.key \
  5939. exchanges=2 renegotiation=1 renegotiate=1 \
  5940. hs_timeout=10000-60000 \
  5941. mtu=1024" \
  5942. 0 \
  5943. -S "autoreduction" \
  5944. -s "found fragmented DTLS handshake message" \
  5945. -c "found fragmented DTLS handshake message" \
  5946. -C "error"
  5947. # An autoreduction on the client-side might happen if the server is
  5948. # slow to reset, therefore omitting '-C "autoreduction"' below.
  5949. not_with_valgrind # spurious autoreduction due to timeout
  5950. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  5951. requires_config_enabled MBEDTLS_RSA_C
  5952. requires_config_enabled MBEDTLS_ECDSA_C
  5953. requires_config_enabled MBEDTLS_SHA256_C
  5954. requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA
  5955. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  5956. requires_config_enabled MBEDTLS_AES_C
  5957. requires_config_enabled MBEDTLS_CIPHER_MODE_CBC
  5958. run_test "DTLS fragmenting: proxy MTU, AES-CBC non-EtM renego" \
  5959. -p "$P_PXY mtu=1024" \
  5960. "$P_SRV dtls=1 debug_level=2 auth_mode=required \
  5961. crt_file=data_files/server7_int-ca.crt \
  5962. key_file=data_files/server7.key \
  5963. exchanges=2 renegotiation=1 \
  5964. force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256 etm=0 \
  5965. hs_timeout=10000-60000 \
  5966. mtu=1024" \
  5967. "$P_CLI dtls=1 debug_level=2 \
  5968. crt_file=data_files/server8_int-ca2.crt \
  5969. key_file=data_files/server8.key \
  5970. exchanges=2 renegotiation=1 renegotiate=1 \
  5971. hs_timeout=10000-60000 \
  5972. mtu=1024" \
  5973. 0 \
  5974. -S "autoreduction" \
  5975. -s "found fragmented DTLS handshake message" \
  5976. -c "found fragmented DTLS handshake message" \
  5977. -C "error"
  5978. # Forcing ciphersuite for this test to fit the MTU of 512 with full config.
  5979. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  5980. requires_config_enabled MBEDTLS_RSA_C
  5981. requires_config_enabled MBEDTLS_ECDSA_C
  5982. requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA
  5983. requires_config_enabled MBEDTLS_AES_C
  5984. requires_config_enabled MBEDTLS_GCM_C
  5985. client_needs_more_time 2
  5986. run_test "DTLS fragmenting: proxy MTU + 3d" \
  5987. -p "$P_PXY mtu=512 drop=8 delay=8 duplicate=8" \
  5988. "$P_SRV dgram_packing=0 dtls=1 debug_level=2 auth_mode=required \
  5989. crt_file=data_files/server7_int-ca.crt \
  5990. key_file=data_files/server7.key \
  5991. hs_timeout=250-10000 mtu=512" \
  5992. "$P_CLI dgram_packing=0 dtls=1 debug_level=2 \
  5993. crt_file=data_files/server8_int-ca2.crt \
  5994. key_file=data_files/server8.key \
  5995. force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
  5996. hs_timeout=250-10000 mtu=512" \
  5997. 0 \
  5998. -s "found fragmented DTLS handshake message" \
  5999. -c "found fragmented DTLS handshake message" \
  6000. -C "error"
  6001. # Forcing ciphersuite for this test to fit the MTU of 512 with full config.
  6002. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  6003. requires_config_enabled MBEDTLS_RSA_C
  6004. requires_config_enabled MBEDTLS_ECDSA_C
  6005. requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA
  6006. requires_config_enabled MBEDTLS_AES_C
  6007. requires_config_enabled MBEDTLS_GCM_C
  6008. client_needs_more_time 2
  6009. run_test "DTLS fragmenting: proxy MTU + 3d, nbio" \
  6010. -p "$P_PXY mtu=512 drop=8 delay=8 duplicate=8" \
  6011. "$P_SRV dtls=1 debug_level=2 auth_mode=required \
  6012. crt_file=data_files/server7_int-ca.crt \
  6013. key_file=data_files/server7.key \
  6014. hs_timeout=250-10000 mtu=512 nbio=2" \
  6015. "$P_CLI dtls=1 debug_level=2 \
  6016. crt_file=data_files/server8_int-ca2.crt \
  6017. key_file=data_files/server8.key \
  6018. force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 \
  6019. hs_timeout=250-10000 mtu=512 nbio=2" \
  6020. 0 \
  6021. -s "found fragmented DTLS handshake message" \
  6022. -c "found fragmented DTLS handshake message" \
  6023. -C "error"
  6024. # interop tests for DTLS fragmentating with reliable connection
  6025. #
  6026. # here and below we just want to test that the we fragment in a way that
  6027. # pleases other implementations, so we don't need the peer to fragment
  6028. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  6029. requires_config_enabled MBEDTLS_RSA_C
  6030. requires_config_enabled MBEDTLS_ECDSA_C
  6031. requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_2
  6032. requires_gnutls
  6033. run_test "DTLS fragmenting: gnutls server, DTLS 1.2" \
  6034. "$G_SRV -u" \
  6035. "$P_CLI dtls=1 debug_level=2 \
  6036. crt_file=data_files/server8_int-ca2.crt \
  6037. key_file=data_files/server8.key \
  6038. mtu=512 force_version=dtls1_2" \
  6039. 0 \
  6040. -c "fragmenting handshake message" \
  6041. -C "error"
  6042. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  6043. requires_config_enabled MBEDTLS_RSA_C
  6044. requires_config_enabled MBEDTLS_ECDSA_C
  6045. requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_1
  6046. requires_gnutls
  6047. run_test "DTLS fragmenting: gnutls server, DTLS 1.0" \
  6048. "$G_SRV -u" \
  6049. "$P_CLI dtls=1 debug_level=2 \
  6050. crt_file=data_files/server8_int-ca2.crt \
  6051. key_file=data_files/server8.key \
  6052. mtu=512 force_version=dtls1" \
  6053. 0 \
  6054. -c "fragmenting handshake message" \
  6055. -C "error"
  6056. # We use --insecure for the GnuTLS client because it expects
  6057. # the hostname / IP it connects to to be the name used in the
  6058. # certificate obtained from the server. Here, however, it
  6059. # connects to 127.0.0.1 while our test certificates use 'localhost'
  6060. # as the server name in the certificate. This will make the
  6061. # certifiate validation fail, but passing --insecure makes
  6062. # GnuTLS continue the connection nonetheless.
  6063. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  6064. requires_config_enabled MBEDTLS_RSA_C
  6065. requires_config_enabled MBEDTLS_ECDSA_C
  6066. requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_2
  6067. requires_gnutls
  6068. requires_not_i686
  6069. run_test "DTLS fragmenting: gnutls client, DTLS 1.2" \
  6070. "$P_SRV dtls=1 debug_level=2 \
  6071. crt_file=data_files/server7_int-ca.crt \
  6072. key_file=data_files/server7.key \
  6073. mtu=512 force_version=dtls1_2" \
  6074. "$G_CLI -u --insecure 127.0.0.1" \
  6075. 0 \
  6076. -s "fragmenting handshake message"
  6077. # See previous test for the reason to use --insecure
  6078. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  6079. requires_config_enabled MBEDTLS_RSA_C
  6080. requires_config_enabled MBEDTLS_ECDSA_C
  6081. requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_1
  6082. requires_gnutls
  6083. requires_not_i686
  6084. run_test "DTLS fragmenting: gnutls client, DTLS 1.0" \
  6085. "$P_SRV dtls=1 debug_level=2 \
  6086. crt_file=data_files/server7_int-ca.crt \
  6087. key_file=data_files/server7.key \
  6088. mtu=512 force_version=dtls1" \
  6089. "$G_CLI -u --insecure 127.0.0.1" \
  6090. 0 \
  6091. -s "fragmenting handshake message"
  6092. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  6093. requires_config_enabled MBEDTLS_RSA_C
  6094. requires_config_enabled MBEDTLS_ECDSA_C
  6095. requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_2
  6096. run_test "DTLS fragmenting: openssl server, DTLS 1.2" \
  6097. "$O_SRV -dtls1_2 -verify 10" \
  6098. "$P_CLI dtls=1 debug_level=2 \
  6099. crt_file=data_files/server8_int-ca2.crt \
  6100. key_file=data_files/server8.key \
  6101. mtu=512 force_version=dtls1_2" \
  6102. 0 \
  6103. -c "fragmenting handshake message" \
  6104. -C "error"
  6105. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  6106. requires_config_enabled MBEDTLS_RSA_C
  6107. requires_config_enabled MBEDTLS_ECDSA_C
  6108. requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_1
  6109. run_test "DTLS fragmenting: openssl server, DTLS 1.0" \
  6110. "$O_SRV -dtls1 -verify 10" \
  6111. "$P_CLI dtls=1 debug_level=2 \
  6112. crt_file=data_files/server8_int-ca2.crt \
  6113. key_file=data_files/server8.key \
  6114. mtu=512 force_version=dtls1" \
  6115. 0 \
  6116. -c "fragmenting handshake message" \
  6117. -C "error"
  6118. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  6119. requires_config_enabled MBEDTLS_RSA_C
  6120. requires_config_enabled MBEDTLS_ECDSA_C
  6121. requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_2
  6122. run_test "DTLS fragmenting: openssl client, DTLS 1.2" \
  6123. "$P_SRV dtls=1 debug_level=2 \
  6124. crt_file=data_files/server7_int-ca.crt \
  6125. key_file=data_files/server7.key \
  6126. mtu=512 force_version=dtls1_2" \
  6127. "$O_CLI -dtls1_2" \
  6128. 0 \
  6129. -s "fragmenting handshake message"
  6130. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  6131. requires_config_enabled MBEDTLS_RSA_C
  6132. requires_config_enabled MBEDTLS_ECDSA_C
  6133. requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_1
  6134. run_test "DTLS fragmenting: openssl client, DTLS 1.0" \
  6135. "$P_SRV dtls=1 debug_level=2 \
  6136. crt_file=data_files/server7_int-ca.crt \
  6137. key_file=data_files/server7.key \
  6138. mtu=512 force_version=dtls1" \
  6139. "$O_CLI -dtls1" \
  6140. 0 \
  6141. -s "fragmenting handshake message"
  6142. # interop tests for DTLS fragmentating with unreliable connection
  6143. #
  6144. # again we just want to test that the we fragment in a way that
  6145. # pleases other implementations, so we don't need the peer to fragment
  6146. requires_gnutls_next
  6147. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  6148. requires_config_enabled MBEDTLS_RSA_C
  6149. requires_config_enabled MBEDTLS_ECDSA_C
  6150. requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_2
  6151. client_needs_more_time 4
  6152. run_test "DTLS fragmenting: 3d, gnutls server, DTLS 1.2" \
  6153. -p "$P_PXY drop=8 delay=8 duplicate=8" \
  6154. "$G_NEXT_SRV -u" \
  6155. "$P_CLI dgram_packing=0 dtls=1 debug_level=2 \
  6156. crt_file=data_files/server8_int-ca2.crt \
  6157. key_file=data_files/server8.key \
  6158. hs_timeout=250-60000 mtu=512 force_version=dtls1_2" \
  6159. 0 \
  6160. -c "fragmenting handshake message" \
  6161. -C "error"
  6162. requires_gnutls_next
  6163. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  6164. requires_config_enabled MBEDTLS_RSA_C
  6165. requires_config_enabled MBEDTLS_ECDSA_C
  6166. requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_1
  6167. client_needs_more_time 4
  6168. run_test "DTLS fragmenting: 3d, gnutls server, DTLS 1.0" \
  6169. -p "$P_PXY drop=8 delay=8 duplicate=8" \
  6170. "$G_NEXT_SRV -u" \
  6171. "$P_CLI dgram_packing=0 dtls=1 debug_level=2 \
  6172. crt_file=data_files/server8_int-ca2.crt \
  6173. key_file=data_files/server8.key \
  6174. hs_timeout=250-60000 mtu=512 force_version=dtls1" \
  6175. 0 \
  6176. -c "fragmenting handshake message" \
  6177. -C "error"
  6178. requires_gnutls_next
  6179. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  6180. requires_config_enabled MBEDTLS_RSA_C
  6181. requires_config_enabled MBEDTLS_ECDSA_C
  6182. requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_2
  6183. client_needs_more_time 4
  6184. run_test "DTLS fragmenting: 3d, gnutls client, DTLS 1.2" \
  6185. -p "$P_PXY drop=8 delay=8 duplicate=8" \
  6186. "$P_SRV dtls=1 debug_level=2 \
  6187. crt_file=data_files/server7_int-ca.crt \
  6188. key_file=data_files/server7.key \
  6189. hs_timeout=250-60000 mtu=512 force_version=dtls1_2" \
  6190. "$G_NEXT_CLI -u --insecure 127.0.0.1" \
  6191. 0 \
  6192. -s "fragmenting handshake message"
  6193. requires_gnutls_next
  6194. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  6195. requires_config_enabled MBEDTLS_RSA_C
  6196. requires_config_enabled MBEDTLS_ECDSA_C
  6197. requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_1
  6198. client_needs_more_time 4
  6199. run_test "DTLS fragmenting: 3d, gnutls client, DTLS 1.0" \
  6200. -p "$P_PXY drop=8 delay=8 duplicate=8" \
  6201. "$P_SRV dtls=1 debug_level=2 \
  6202. crt_file=data_files/server7_int-ca.crt \
  6203. key_file=data_files/server7.key \
  6204. hs_timeout=250-60000 mtu=512 force_version=dtls1" \
  6205. "$G_NEXT_CLI -u --insecure 127.0.0.1" \
  6206. 0 \
  6207. -s "fragmenting handshake message"
  6208. ## Interop test with OpenSSL might trigger a bug in recent versions (including
  6209. ## all versions installed on the CI machines), reported here:
  6210. ## Bug report: https://github.com/openssl/openssl/issues/6902
  6211. ## They should be re-enabled once a fixed version of OpenSSL is available
  6212. ## (this should happen in some 1.1.1_ release according to the ticket).
  6213. skip_next_test
  6214. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  6215. requires_config_enabled MBEDTLS_RSA_C
  6216. requires_config_enabled MBEDTLS_ECDSA_C
  6217. requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_2
  6218. client_needs_more_time 4
  6219. run_test "DTLS fragmenting: 3d, openssl server, DTLS 1.2" \
  6220. -p "$P_PXY drop=8 delay=8 duplicate=8" \
  6221. "$O_SRV -dtls1_2 -verify 10" \
  6222. "$P_CLI dtls=1 debug_level=2 \
  6223. crt_file=data_files/server8_int-ca2.crt \
  6224. key_file=data_files/server8.key \
  6225. hs_timeout=250-60000 mtu=512 force_version=dtls1_2" \
  6226. 0 \
  6227. -c "fragmenting handshake message" \
  6228. -C "error"
  6229. skip_next_test
  6230. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  6231. requires_config_enabled MBEDTLS_RSA_C
  6232. requires_config_enabled MBEDTLS_ECDSA_C
  6233. requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_1
  6234. client_needs_more_time 4
  6235. run_test "DTLS fragmenting: 3d, openssl server, DTLS 1.0" \
  6236. -p "$P_PXY drop=8 delay=8 duplicate=8" \
  6237. "$O_SRV -dtls1 -verify 10" \
  6238. "$P_CLI dgram_packing=0 dtls=1 debug_level=2 \
  6239. crt_file=data_files/server8_int-ca2.crt \
  6240. key_file=data_files/server8.key \
  6241. hs_timeout=250-60000 mtu=512 force_version=dtls1" \
  6242. 0 \
  6243. -c "fragmenting handshake message" \
  6244. -C "error"
  6245. skip_next_test
  6246. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  6247. requires_config_enabled MBEDTLS_RSA_C
  6248. requires_config_enabled MBEDTLS_ECDSA_C
  6249. requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_2
  6250. client_needs_more_time 4
  6251. run_test "DTLS fragmenting: 3d, openssl client, DTLS 1.2" \
  6252. -p "$P_PXY drop=8 delay=8 duplicate=8" \
  6253. "$P_SRV dtls=1 debug_level=2 \
  6254. crt_file=data_files/server7_int-ca.crt \
  6255. key_file=data_files/server7.key \
  6256. hs_timeout=250-60000 mtu=512 force_version=dtls1_2" \
  6257. "$O_CLI -dtls1_2" \
  6258. 0 \
  6259. -s "fragmenting handshake message"
  6260. # -nbio is added to prevent s_client from blocking in case of duplicated
  6261. # messages at the end of the handshake
  6262. skip_next_test
  6263. requires_config_enabled MBEDTLS_SSL_PROTO_DTLS
  6264. requires_config_enabled MBEDTLS_RSA_C
  6265. requires_config_enabled MBEDTLS_ECDSA_C
  6266. requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_1
  6267. client_needs_more_time 4
  6268. run_test "DTLS fragmenting: 3d, openssl client, DTLS 1.0" \
  6269. -p "$P_PXY drop=8 delay=8 duplicate=8" \
  6270. "$P_SRV dgram_packing=0 dtls=1 debug_level=2 \
  6271. crt_file=data_files/server7_int-ca.crt \
  6272. key_file=data_files/server7.key \
  6273. hs_timeout=250-60000 mtu=512 force_version=dtls1" \
  6274. "$O_CLI -nbio -dtls1" \
  6275. 0 \
  6276. -s "fragmenting handshake message"
  6277. # Tests for specific things with "unreliable" UDP connection
  6278. not_with_valgrind # spurious resend due to timeout
  6279. run_test "DTLS proxy: reference" \
  6280. -p "$P_PXY" \
  6281. "$P_SRV dtls=1 debug_level=2 hs_timeout=10000-20000" \
  6282. "$P_CLI dtls=1 debug_level=2 hs_timeout=10000-20000" \
  6283. 0 \
  6284. -C "replayed record" \
  6285. -S "replayed record" \
  6286. -C "record from another epoch" \
  6287. -S "record from another epoch" \
  6288. -C "discarding invalid record" \
  6289. -S "discarding invalid record" \
  6290. -S "resend" \
  6291. -s "Extra-header:" \
  6292. -c "HTTP/1.0 200 OK"
  6293. not_with_valgrind # spurious resend due to timeout
  6294. run_test "DTLS proxy: duplicate every packet" \
  6295. -p "$P_PXY duplicate=1" \
  6296. "$P_SRV dtls=1 dgram_packing=0 debug_level=2 hs_timeout=10000-20000" \
  6297. "$P_CLI dtls=1 dgram_packing=0 debug_level=2 hs_timeout=10000-20000" \
  6298. 0 \
  6299. -c "replayed record" \
  6300. -s "replayed record" \
  6301. -c "record from another epoch" \
  6302. -s "record from another epoch" \
  6303. -S "resend" \
  6304. -s "Extra-header:" \
  6305. -c "HTTP/1.0 200 OK"
  6306. run_test "DTLS proxy: duplicate every packet, server anti-replay off" \
  6307. -p "$P_PXY duplicate=1" \
  6308. "$P_SRV dtls=1 dgram_packing=0 debug_level=2 anti_replay=0" \
  6309. "$P_CLI dtls=1 dgram_packing=0 debug_level=2" \
  6310. 0 \
  6311. -c "replayed record" \
  6312. -S "replayed record" \
  6313. -c "record from another epoch" \
  6314. -s "record from another epoch" \
  6315. -c "resend" \
  6316. -s "resend" \
  6317. -s "Extra-header:" \
  6318. -c "HTTP/1.0 200 OK"
  6319. run_test "DTLS proxy: multiple records in same datagram" \
  6320. -p "$P_PXY pack=50" \
  6321. "$P_SRV dtls=1 dgram_packing=0 debug_level=2" \
  6322. "$P_CLI dtls=1 dgram_packing=0 debug_level=2" \
  6323. 0 \
  6324. -c "next record in same datagram" \
  6325. -s "next record in same datagram"
  6326. run_test "DTLS proxy: multiple records in same datagram, duplicate every packet" \
  6327. -p "$P_PXY pack=50 duplicate=1" \
  6328. "$P_SRV dtls=1 dgram_packing=0 debug_level=2" \
  6329. "$P_CLI dtls=1 dgram_packing=0 debug_level=2" \
  6330. 0 \
  6331. -c "next record in same datagram" \
  6332. -s "next record in same datagram"
  6333. run_test "DTLS proxy: inject invalid AD record, default badmac_limit" \
  6334. -p "$P_PXY bad_ad=1" \
  6335. "$P_SRV dtls=1 dgram_packing=0 debug_level=1" \
  6336. "$P_CLI dtls=1 dgram_packing=0 debug_level=1 read_timeout=100" \
  6337. 0 \
  6338. -c "discarding invalid record (mac)" \
  6339. -s "discarding invalid record (mac)" \
  6340. -s "Extra-header:" \
  6341. -c "HTTP/1.0 200 OK" \
  6342. -S "too many records with bad MAC" \
  6343. -S "Verification of the message MAC failed"
  6344. run_test "DTLS proxy: inject invalid AD record, badmac_limit 1" \
  6345. -p "$P_PXY bad_ad=1" \
  6346. "$P_SRV dtls=1 dgram_packing=0 debug_level=1 badmac_limit=1" \
  6347. "$P_CLI dtls=1 dgram_packing=0 debug_level=1 read_timeout=100" \
  6348. 1 \
  6349. -C "discarding invalid record (mac)" \
  6350. -S "discarding invalid record (mac)" \
  6351. -S "Extra-header:" \
  6352. -C "HTTP/1.0 200 OK" \
  6353. -s "too many records with bad MAC" \
  6354. -s "Verification of the message MAC failed"
  6355. run_test "DTLS proxy: inject invalid AD record, badmac_limit 2" \
  6356. -p "$P_PXY bad_ad=1" \
  6357. "$P_SRV dtls=1 dgram_packing=0 debug_level=1 badmac_limit=2" \
  6358. "$P_CLI dtls=1 dgram_packing=0 debug_level=1 read_timeout=100" \
  6359. 0 \
  6360. -c "discarding invalid record (mac)" \
  6361. -s "discarding invalid record (mac)" \
  6362. -s "Extra-header:" \
  6363. -c "HTTP/1.0 200 OK" \
  6364. -S "too many records with bad MAC" \
  6365. -S "Verification of the message MAC failed"
  6366. run_test "DTLS proxy: inject invalid AD record, badmac_limit 2, exchanges 2"\
  6367. -p "$P_PXY bad_ad=1" \
  6368. "$P_SRV dtls=1 dgram_packing=0 debug_level=1 badmac_limit=2 exchanges=2" \
  6369. "$P_CLI dtls=1 dgram_packing=0 debug_level=1 read_timeout=100 exchanges=2" \
  6370. 1 \
  6371. -c "discarding invalid record (mac)" \
  6372. -s "discarding invalid record (mac)" \
  6373. -s "Extra-header:" \
  6374. -c "HTTP/1.0 200 OK" \
  6375. -s "too many records with bad MAC" \
  6376. -s "Verification of the message MAC failed"
  6377. run_test "DTLS proxy: delay ChangeCipherSpec" \
  6378. -p "$P_PXY delay_ccs=1" \
  6379. "$P_SRV dtls=1 debug_level=1 dgram_packing=0" \
  6380. "$P_CLI dtls=1 debug_level=1 dgram_packing=0" \
  6381. 0 \
  6382. -c "record from another epoch" \
  6383. -s "record from another epoch" \
  6384. -s "Extra-header:" \
  6385. -c "HTTP/1.0 200 OK"
  6386. # Tests for reordering support with DTLS
  6387. run_test "DTLS reordering: Buffer out-of-order handshake message on client" \
  6388. -p "$P_PXY delay_srv=ServerHello" \
  6389. "$P_SRV dgram_packing=0 cookies=0 dtls=1 debug_level=2 \
  6390. hs_timeout=2500-60000" \
  6391. "$P_CLI dgram_packing=0 dtls=1 debug_level=2 \
  6392. hs_timeout=2500-60000" \
  6393. 0 \
  6394. -c "Buffering HS message" \
  6395. -c "Next handshake message has been buffered - load"\
  6396. -S "Buffering HS message" \
  6397. -S "Next handshake message has been buffered - load"\
  6398. -C "Injecting buffered CCS message" \
  6399. -C "Remember CCS message" \
  6400. -S "Injecting buffered CCS message" \
  6401. -S "Remember CCS message"
  6402. run_test "DTLS reordering: Buffer out-of-order handshake message fragment on client" \
  6403. -p "$P_PXY delay_srv=ServerHello" \
  6404. "$P_SRV mtu=512 dgram_packing=0 cookies=0 dtls=1 debug_level=2 \
  6405. hs_timeout=2500-60000" \
  6406. "$P_CLI dgram_packing=0 dtls=1 debug_level=2 \
  6407. hs_timeout=2500-60000" \
  6408. 0 \
  6409. -c "Buffering HS message" \
  6410. -c "found fragmented DTLS handshake message"\
  6411. -c "Next handshake message 1 not or only partially bufffered" \
  6412. -c "Next handshake message has been buffered - load"\
  6413. -S "Buffering HS message" \
  6414. -S "Next handshake message has been buffered - load"\
  6415. -C "Injecting buffered CCS message" \
  6416. -C "Remember CCS message" \
  6417. -S "Injecting buffered CCS message" \
  6418. -S "Remember CCS message"
  6419. # The client buffers the ServerKeyExchange before receiving the fragmented
  6420. # Certificate message; at the time of writing, together these are aroudn 1200b
  6421. # in size, so that the bound below ensures that the certificate can be reassembled
  6422. # while keeping the ServerKeyExchange.
  6423. requires_config_value_at_least "MBEDTLS_SSL_DTLS_MAX_BUFFERING" 1300
  6424. run_test "DTLS reordering: Buffer out-of-order hs msg before reassembling next" \
  6425. -p "$P_PXY delay_srv=Certificate delay_srv=Certificate" \
  6426. "$P_SRV mtu=512 dgram_packing=0 cookies=0 dtls=1 debug_level=2 \
  6427. hs_timeout=2500-60000" \
  6428. "$P_CLI dgram_packing=0 dtls=1 debug_level=2 \
  6429. hs_timeout=2500-60000" \
  6430. 0 \
  6431. -c "Buffering HS message" \
  6432. -c "Next handshake message has been buffered - load"\
  6433. -C "attempt to make space by freeing buffered messages" \
  6434. -S "Buffering HS message" \
  6435. -S "Next handshake message has been buffered - load"\
  6436. -C "Injecting buffered CCS message" \
  6437. -C "Remember CCS message" \
  6438. -S "Injecting buffered CCS message" \
  6439. -S "Remember CCS message"
  6440. # The size constraints ensure that the delayed certificate message can't
  6441. # be reassembled while keeping the ServerKeyExchange message, but it can
  6442. # when dropping it first.
  6443. requires_config_value_at_least "MBEDTLS_SSL_DTLS_MAX_BUFFERING" 900
  6444. requires_config_value_at_most "MBEDTLS_SSL_DTLS_MAX_BUFFERING" 1299
  6445. run_test "DTLS reordering: Buffer out-of-order hs msg before reassembling next, free buffered msg" \
  6446. -p "$P_PXY delay_srv=Certificate delay_srv=Certificate" \
  6447. "$P_SRV mtu=512 dgram_packing=0 cookies=0 dtls=1 debug_level=2 \
  6448. hs_timeout=2500-60000" \
  6449. "$P_CLI dgram_packing=0 dtls=1 debug_level=2 \
  6450. hs_timeout=2500-60000" \
  6451. 0 \
  6452. -c "Buffering HS message" \
  6453. -c "attempt to make space by freeing buffered future messages" \
  6454. -c "Enough space available after freeing buffered HS messages" \
  6455. -S "Buffering HS message" \
  6456. -S "Next handshake message has been buffered - load"\
  6457. -C "Injecting buffered CCS message" \
  6458. -C "Remember CCS message" \
  6459. -S "Injecting buffered CCS message" \
  6460. -S "Remember CCS message"
  6461. run_test "DTLS reordering: Buffer out-of-order handshake message on server" \
  6462. -p "$P_PXY delay_cli=Certificate" \
  6463. "$P_SRV dgram_packing=0 auth_mode=required cookies=0 dtls=1 debug_level=2 \
  6464. hs_timeout=2500-60000" \
  6465. "$P_CLI dgram_packing=0 dtls=1 debug_level=2 \
  6466. hs_timeout=2500-60000" \
  6467. 0 \
  6468. -C "Buffering HS message" \
  6469. -C "Next handshake message has been buffered - load"\
  6470. -s "Buffering HS message" \
  6471. -s "Next handshake message has been buffered - load" \
  6472. -C "Injecting buffered CCS message" \
  6473. -C "Remember CCS message" \
  6474. -S "Injecting buffered CCS message" \
  6475. -S "Remember CCS message"
  6476. run_test "DTLS reordering: Buffer out-of-order CCS message on client"\
  6477. -p "$P_PXY delay_srv=NewSessionTicket" \
  6478. "$P_SRV dgram_packing=0 cookies=0 dtls=1 debug_level=2 \
  6479. hs_timeout=2500-60000" \
  6480. "$P_CLI dgram_packing=0 dtls=1 debug_level=2 \
  6481. hs_timeout=2500-60000" \
  6482. 0 \
  6483. -C "Buffering HS message" \
  6484. -C "Next handshake message has been buffered - load"\
  6485. -S "Buffering HS message" \
  6486. -S "Next handshake message has been buffered - load" \
  6487. -c "Injecting buffered CCS message" \
  6488. -c "Remember CCS message" \
  6489. -S "Injecting buffered CCS message" \
  6490. -S "Remember CCS message"
  6491. run_test "DTLS reordering: Buffer out-of-order CCS message on server"\
  6492. -p "$P_PXY delay_cli=ClientKeyExchange" \
  6493. "$P_SRV dgram_packing=0 cookies=0 dtls=1 debug_level=2 \
  6494. hs_timeout=2500-60000" \
  6495. "$P_CLI dgram_packing=0 dtls=1 debug_level=2 \
  6496. hs_timeout=2500-60000" \
  6497. 0 \
  6498. -C "Buffering HS message" \
  6499. -C "Next handshake message has been buffered - load"\
  6500. -S "Buffering HS message" \
  6501. -S "Next handshake message has been buffered - load" \
  6502. -C "Injecting buffered CCS message" \
  6503. -C "Remember CCS message" \
  6504. -s "Injecting buffered CCS message" \
  6505. -s "Remember CCS message"
  6506. run_test "DTLS reordering: Buffer encrypted Finished message" \
  6507. -p "$P_PXY delay_ccs=1" \
  6508. "$P_SRV dgram_packing=0 cookies=0 dtls=1 debug_level=2 \
  6509. hs_timeout=2500-60000" \
  6510. "$P_CLI dgram_packing=0 dtls=1 debug_level=2 \
  6511. hs_timeout=2500-60000" \
  6512. 0 \
  6513. -s "Buffer record from epoch 1" \
  6514. -s "Found buffered record from current epoch - load" \
  6515. -c "Buffer record from epoch 1" \
  6516. -c "Found buffered record from current epoch - load"
  6517. # In this test, both the fragmented NewSessionTicket and the ChangeCipherSpec
  6518. # from the server are delayed, so that the encrypted Finished message
  6519. # is received and buffered. When the fragmented NewSessionTicket comes
  6520. # in afterwards, the encrypted Finished message must be freed in order
  6521. # to make space for the NewSessionTicket to be reassembled.
  6522. # This works only in very particular circumstances:
  6523. # - MBEDTLS_SSL_DTLS_MAX_BUFFERING must be large enough to allow buffering
  6524. # of the NewSessionTicket, but small enough to also allow buffering of
  6525. # the encrypted Finished message.
  6526. # - The MTU setting on the server must be so small that the NewSessionTicket
  6527. # needs to be fragmented.
  6528. # - All messages sent by the server must be small enough to be either sent
  6529. # without fragmentation or be reassembled within the bounds of
  6530. # MBEDTLS_SSL_DTLS_MAX_BUFFERING. Achieve this by testing with a PSK-based
  6531. # handshake, omitting CRTs.
  6532. requires_config_value_at_least "MBEDTLS_SSL_DTLS_MAX_BUFFERING" 240
  6533. requires_config_value_at_most "MBEDTLS_SSL_DTLS_MAX_BUFFERING" 280
  6534. run_test "DTLS reordering: Buffer encrypted Finished message, drop for fragmented NewSessionTicket" \
  6535. -p "$P_PXY delay_srv=NewSessionTicket delay_srv=NewSessionTicket delay_ccs=1" \
  6536. "$P_SRV mtu=190 dgram_packing=0 psk=abc123 psk_identity=foo cookies=0 dtls=1 debug_level=2" \
  6537. "$P_CLI dgram_packing=0 dtls=1 debug_level=2 force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8 psk=abc123 psk_identity=foo" \
  6538. 0 \
  6539. -s "Buffer record from epoch 1" \
  6540. -s "Found buffered record from current epoch - load" \
  6541. -c "Buffer record from epoch 1" \
  6542. -C "Found buffered record from current epoch - load" \
  6543. -c "Enough space available after freeing future epoch record"
  6544. # Tests for "randomly unreliable connection": try a variety of flows and peers
  6545. client_needs_more_time 2
  6546. run_test "DTLS proxy: 3d (drop, delay, duplicate), \"short\" PSK handshake" \
  6547. -p "$P_PXY drop=5 delay=5 duplicate=5" \
  6548. "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 auth_mode=none \
  6549. psk=abc123" \
  6550. "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 psk=abc123 \
  6551. force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8" \
  6552. 0 \
  6553. -s "Extra-header:" \
  6554. -c "HTTP/1.0 200 OK"
  6555. client_needs_more_time 2
  6556. run_test "DTLS proxy: 3d, \"short\" RSA handshake" \
  6557. -p "$P_PXY drop=5 delay=5 duplicate=5" \
  6558. "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 auth_mode=none" \
  6559. "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 \
  6560. force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
  6561. 0 \
  6562. -s "Extra-header:" \
  6563. -c "HTTP/1.0 200 OK"
  6564. client_needs_more_time 2
  6565. run_test "DTLS proxy: 3d, \"short\" (no ticket, no cli_auth) FS handshake" \
  6566. -p "$P_PXY drop=5 delay=5 duplicate=5" \
  6567. "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 auth_mode=none" \
  6568. "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0" \
  6569. 0 \
  6570. -s "Extra-header:" \
  6571. -c "HTTP/1.0 200 OK"
  6572. client_needs_more_time 2
  6573. run_test "DTLS proxy: 3d, FS, client auth" \
  6574. -p "$P_PXY drop=5 delay=5 duplicate=5" \
  6575. "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 auth_mode=required" \
  6576. "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0" \
  6577. 0 \
  6578. -s "Extra-header:" \
  6579. -c "HTTP/1.0 200 OK"
  6580. client_needs_more_time 2
  6581. run_test "DTLS proxy: 3d, FS, ticket" \
  6582. -p "$P_PXY drop=5 delay=5 duplicate=5" \
  6583. "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=1 auth_mode=none" \
  6584. "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=1" \
  6585. 0 \
  6586. -s "Extra-header:" \
  6587. -c "HTTP/1.0 200 OK"
  6588. client_needs_more_time 2
  6589. run_test "DTLS proxy: 3d, max handshake (FS, ticket + client auth)" \
  6590. -p "$P_PXY drop=5 delay=5 duplicate=5" \
  6591. "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=1 auth_mode=required" \
  6592. "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=1" \
  6593. 0 \
  6594. -s "Extra-header:" \
  6595. -c "HTTP/1.0 200 OK"
  6596. client_needs_more_time 2
  6597. run_test "DTLS proxy: 3d, max handshake, nbio" \
  6598. -p "$P_PXY drop=5 delay=5 duplicate=5" \
  6599. "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 nbio=2 tickets=1 \
  6600. auth_mode=required" \
  6601. "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 nbio=2 tickets=1" \
  6602. 0 \
  6603. -s "Extra-header:" \
  6604. -c "HTTP/1.0 200 OK"
  6605. client_needs_more_time 4
  6606. run_test "DTLS proxy: 3d, min handshake, resumption" \
  6607. -p "$P_PXY drop=5 delay=5 duplicate=5" \
  6608. "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 auth_mode=none \
  6609. psk=abc123 debug_level=3" \
  6610. "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 psk=abc123 \
  6611. debug_level=3 reconnect=1 skip_close_notify=1 read_timeout=1000 max_resend=10 \
  6612. force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8" \
  6613. 0 \
  6614. -s "a session has been resumed" \
  6615. -c "a session has been resumed" \
  6616. -s "Extra-header:" \
  6617. -c "HTTP/1.0 200 OK"
  6618. client_needs_more_time 4
  6619. run_test "DTLS proxy: 3d, min handshake, resumption, nbio" \
  6620. -p "$P_PXY drop=5 delay=5 duplicate=5" \
  6621. "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 auth_mode=none \
  6622. psk=abc123 debug_level=3 nbio=2" \
  6623. "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 psk=abc123 \
  6624. debug_level=3 reconnect=1 skip_close_notify=1 read_timeout=1000 max_resend=10 \
  6625. force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8 nbio=2" \
  6626. 0 \
  6627. -s "a session has been resumed" \
  6628. -c "a session has been resumed" \
  6629. -s "Extra-header:" \
  6630. -c "HTTP/1.0 200 OK"
  6631. client_needs_more_time 4
  6632. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  6633. run_test "DTLS proxy: 3d, min handshake, client-initiated renego" \
  6634. -p "$P_PXY drop=5 delay=5 duplicate=5" \
  6635. "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 auth_mode=none \
  6636. psk=abc123 renegotiation=1 debug_level=2" \
  6637. "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 psk=abc123 \
  6638. renegotiate=1 debug_level=2 \
  6639. force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8" \
  6640. 0 \
  6641. -c "=> renegotiate" \
  6642. -s "=> renegotiate" \
  6643. -s "Extra-header:" \
  6644. -c "HTTP/1.0 200 OK"
  6645. client_needs_more_time 4
  6646. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  6647. run_test "DTLS proxy: 3d, min handshake, client-initiated renego, nbio" \
  6648. -p "$P_PXY drop=5 delay=5 duplicate=5" \
  6649. "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 auth_mode=none \
  6650. psk=abc123 renegotiation=1 debug_level=2" \
  6651. "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 psk=abc123 \
  6652. renegotiate=1 debug_level=2 \
  6653. force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8" \
  6654. 0 \
  6655. -c "=> renegotiate" \
  6656. -s "=> renegotiate" \
  6657. -s "Extra-header:" \
  6658. -c "HTTP/1.0 200 OK"
  6659. client_needs_more_time 4
  6660. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  6661. run_test "DTLS proxy: 3d, min handshake, server-initiated renego" \
  6662. -p "$P_PXY drop=5 delay=5 duplicate=5" \
  6663. "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 auth_mode=none \
  6664. psk=abc123 renegotiate=1 renegotiation=1 exchanges=4 \
  6665. debug_level=2" \
  6666. "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 psk=abc123 \
  6667. renegotiation=1 exchanges=4 debug_level=2 \
  6668. force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8" \
  6669. 0 \
  6670. -c "=> renegotiate" \
  6671. -s "=> renegotiate" \
  6672. -s "Extra-header:" \
  6673. -c "HTTP/1.0 200 OK"
  6674. client_needs_more_time 4
  6675. requires_config_enabled MBEDTLS_SSL_RENEGOTIATION
  6676. run_test "DTLS proxy: 3d, min handshake, server-initiated renego, nbio" \
  6677. -p "$P_PXY drop=5 delay=5 duplicate=5" \
  6678. "$P_SRV dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 auth_mode=none \
  6679. psk=abc123 renegotiate=1 renegotiation=1 exchanges=4 \
  6680. debug_level=2 nbio=2" \
  6681. "$P_CLI dtls=1 dgram_packing=0 hs_timeout=500-10000 tickets=0 psk=abc123 \
  6682. renegotiation=1 exchanges=4 debug_level=2 nbio=2 \
  6683. force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8" \
  6684. 0 \
  6685. -c "=> renegotiate" \
  6686. -s "=> renegotiate" \
  6687. -s "Extra-header:" \
  6688. -c "HTTP/1.0 200 OK"
  6689. ## Interop tests with OpenSSL might trigger a bug in recent versions (including
  6690. ## all versions installed on the CI machines), reported here:
  6691. ## Bug report: https://github.com/openssl/openssl/issues/6902
  6692. ## They should be re-enabled once a fixed version of OpenSSL is available
  6693. ## (this should happen in some 1.1.1_ release according to the ticket).
  6694. skip_next_test
  6695. client_needs_more_time 6
  6696. not_with_valgrind # risk of non-mbedtls peer timing out
  6697. run_test "DTLS proxy: 3d, openssl server" \
  6698. -p "$P_PXY drop=5 delay=5 duplicate=5 protect_hvr=1" \
  6699. "$O_SRV -dtls1 -mtu 2048" \
  6700. "$P_CLI dgram_packing=0 dtls=1 hs_timeout=500-60000 tickets=0" \
  6701. 0 \
  6702. -c "HTTP/1.0 200 OK"
  6703. skip_next_test # see above
  6704. client_needs_more_time 8
  6705. not_with_valgrind # risk of non-mbedtls peer timing out
  6706. run_test "DTLS proxy: 3d, openssl server, fragmentation" \
  6707. -p "$P_PXY drop=5 delay=5 duplicate=5 protect_hvr=1" \
  6708. "$O_SRV -dtls1 -mtu 768" \
  6709. "$P_CLI dgram_packing=0 dtls=1 hs_timeout=500-60000 tickets=0" \
  6710. 0 \
  6711. -c "HTTP/1.0 200 OK"
  6712. skip_next_test # see above
  6713. client_needs_more_time 8
  6714. not_with_valgrind # risk of non-mbedtls peer timing out
  6715. run_test "DTLS proxy: 3d, openssl server, fragmentation, nbio" \
  6716. -p "$P_PXY drop=5 delay=5 duplicate=5 protect_hvr=1" \
  6717. "$O_SRV -dtls1 -mtu 768" \
  6718. "$P_CLI dgram_packing=0 dtls=1 hs_timeout=500-60000 nbio=2 tickets=0" \
  6719. 0 \
  6720. -c "HTTP/1.0 200 OK"
  6721. requires_gnutls
  6722. client_needs_more_time 6
  6723. not_with_valgrind # risk of non-mbedtls peer timing out
  6724. run_test "DTLS proxy: 3d, gnutls server" \
  6725. -p "$P_PXY drop=5 delay=5 duplicate=5" \
  6726. "$G_SRV -u --mtu 2048 -a" \
  6727. "$P_CLI dgram_packing=0 dtls=1 hs_timeout=500-60000" \
  6728. 0 \
  6729. -s "Extra-header:" \
  6730. -c "Extra-header:"
  6731. requires_gnutls_next
  6732. client_needs_more_time 8
  6733. not_with_valgrind # risk of non-mbedtls peer timing out
  6734. run_test "DTLS proxy: 3d, gnutls server, fragmentation" \
  6735. -p "$P_PXY drop=5 delay=5 duplicate=5" \
  6736. "$G_NEXT_SRV -u --mtu 512" \
  6737. "$P_CLI dgram_packing=0 dtls=1 hs_timeout=500-60000" \
  6738. 0 \
  6739. -s "Extra-header:" \
  6740. -c "Extra-header:"
  6741. requires_gnutls_next
  6742. client_needs_more_time 8
  6743. not_with_valgrind # risk of non-mbedtls peer timing out
  6744. run_test "DTLS proxy: 3d, gnutls server, fragmentation, nbio" \
  6745. -p "$P_PXY drop=5 delay=5 duplicate=5" \
  6746. "$G_NEXT_SRV -u --mtu 512" \
  6747. "$P_CLI dgram_packing=0 dtls=1 hs_timeout=500-60000 nbio=2" \
  6748. 0 \
  6749. -s "Extra-header:" \
  6750. -c "Extra-header:"
  6751. # Final report
  6752. echo "------------------------------------------------------------------------"
  6753. if [ $FAILS = 0 ]; then
  6754. printf "PASSED"
  6755. else
  6756. printf "FAILED"
  6757. fi
  6758. PASSES=$(( $TESTS - $FAILS ))
  6759. echo " ($PASSES / $TESTS tests ($SKIPS skipped))"
  6760. exit $FAILS