ssl.h 488 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314
  1. /*!
  2. \brief この関数はDTLS v1.2 クライアントメソッドを初期化します。
  3. \return 作成に成功した場合は、WOLFSSL_METHODポインタを返します。
  4. \return メモリ割り当てエラーまたはメソッドの作成の失敗の場合はNULLを返します。
  5. _Example_
  6. \code
  7. wolfSSL_Init();
  8. WOLFSSL_CTX* ctx = wolfSSL_CTX_new(wolfDTLSv1_2_client_method());
  9. WOLFSSL* ssl = wolfSSL_new(ctx);
  10. \endcode
  11. \sa wolfSSL_Init
  12. \sa wolfSSL_CTX_new
  13. */
  14. WOLFSSL_METHOD *wolfDTLSv1_2_client_method_ex(void* heap);
  15. /*!
  16. \ingroup Setup
  17. \brief この関数は、wolfSSLv23_client_methodと同様にWOLFSSL_METHODを返します(サーバー/クライアント)。
  18. \return 作成に成功した場合は、WOLFSSL_METHODポインタを返します。
  19. \return メモリ割り当てエラーまたはメソッドの作成の失敗の場合はNULLを返します。
  20. _Example_
  21. \code
  22. WOLFSSL* ctx;
  23. ctx = wolfSSL_CTX_new(wolfSSLv23_method());
  24. // check ret value
  25. \endcode
  26. \sa wolfSSL_new
  27. \sa wolfSSL_free
  28. */
  29. WOLFSSL_METHOD *wolfSSLv23_method(void);
  30. /*!
  31. \ingroup Setup
  32. \brief wolfSSLv3_server_method()関数は、アプリケーションがサーバーであることを示すために使用され、SSL3.0プロトコルのみをサポートします。
  33. この関数は、wolfSSL_CTX_new()を使用してSSL/TLSコンテキストを作成するときに使用される新しいWOLFSSL_METHOD構造体のメモリを割り当てて初期化します。
  34. \return 成功した場合、新しく作成されたWOLFSSL_METHOD構造体へのポインタを返します。
  35. \return XMALLOCを呼び出すときにメモリ割り当てが失敗した場合、基礎となるMalloc()実装の失敗値が返されます(通常はerrnoがENOMEMに設定されます)。
  36. _Example_
  37. \code
  38. #include <wolfssl/ssl.h>
  39. WOLFSSL_METHOD* method;
  40. WOLFSSL_CTX* ctx;
  41. method = wolfSSLv3_server_method();
  42. if (method == NULL) {
  43. unable to get method
  44. }
  45. ctx = wolfSSL_CTX_new(method);
  46. ...
  47. \endcode
  48. \sa wolfTLSv1_server_method
  49. \sa wolfTLSv1_1_server_method
  50. \sa wolfTLSv1_2_server_method
  51. \sa wolfTLSv1_3_server_method
  52. \sa wolfDTLSv1_server_method
  53. \sa wolfSSLv23_server_method
  54. \sa wolfSSL_CTX_new
  55. */
  56. WOLFSSL_METHOD *wolfSSLv3_server_method(void);
  57. /*!
  58. \ingroup Setup
  59. \brief wolfSSLv3_client_method()関数は、アプリケーションがクライアントであり、SSL 3.0プロトコルのみをサポートすることを示すために使用されます。
  60. この関数は、wolfSSL_CTX_new()を使用してSSL/TLSコンテキストを作成するときに使用される新しいWOLFSSL_METHOD構造体のメモリを割り当てて初期化します。
  61. \return 成功した場合、新しく作成されたWOLFSSL_METHOD構造体へのポインタを返します。
  62. \return XMALLOCを呼び出すときにメモリ割り当てが失敗した場合、基礎となるMalloc()実装の失敗値が返されます(通常はerrnoがENOMEMに設定されます)。
  63. _Example_
  64. \code
  65. #include <wolfssl/ssl.h>
  66. WOLFSSL_METHOD* method;
  67. WOLFSSL_CTX* ctx;
  68. method = wolfSSLv3_client_method();
  69. if (method == NULL) {
  70. unable to get method
  71. }
  72. ctx = wolfSSL_CTX_new(method);
  73. ...
  74. \endcode
  75. \sa wolfTLSv1_client_method
  76. \sa wolfTLSv1_1_client_method
  77. \sa wolfTLSv1_2_client_method
  78. \sa wolfTLSv1_3_client_method
  79. \sa wolfDTLSv1_client_method
  80. \sa wolfSSLv23_client_method
  81. \sa wolfSSL_CTX_new
  82. */
  83. WOLFSSL_METHOD *wolfSSLv3_client_method(void);
  84. /*!
  85. \ingroup Setup
  86. \brief wolfTLSv1_server_method()関数は、アプリケーションがサーバーであることを示すために使用され、TLS 1.0プロトコルのみをサポートします。
  87. この関数は、wolfSSL_ctx_new()を使用してSSL/TLSコンテキストを作成するときに使用される新しいWOLFSSL_METHOD構造体のメモリを割り当てて初期化します。
  88. \return 成功した場合、新しく作成されたWOLFSSL_METHOD構造体へのポインタを返します。
  89. \return XMALLOCを呼び出すときにメモリ割り当てが失敗した場合、基礎となるMalloc()実装の失敗値が返されます(通常はerrnoがENOMEMに設定されます)。
  90. _Example_
  91. \code
  92. #include <wolfssl/ssl.h>
  93. WOLFSSL_METHOD* method;
  94. WOLFSSL_CTX* ctx;
  95. method = wolfTLSv1_server_method();
  96. if (method == NULL) {
  97. unable to get method
  98. }
  99. ctx = wolfSSL_CTX_new(method);
  100. ...
  101. \endcode
  102. \sa wolfSSLv3_server_method
  103. \sa wolfTLSv1_1_server_method
  104. \sa wolfTLSv1_2_server_method
  105. \sa wolfTLSv1_3_server_method
  106. \sa wolfDTLSv1_server_method
  107. \sa wolfSSLv23_server_method
  108. \sa wolfSSL_CTX_new
  109. */
  110. WOLFSSL_METHOD *wolfTLSv1_server_method(void);
  111. /*!
  112. \ingroup Setup
  113. \brief wolftlsv1_client_method()関数は、アプリケーションがクライアントであり、TLS 1.0プロトコルのみをサポートすることを示すために使用されます。
  114. この関数は、wolfSSL_ctx_new()を使用してSSL/TLSコンテキストを作成するときに使用される新しいWOLFSSL_METHOD構造体のメモリを割り当てて初期化します。
  115. \return 成功した場合、新しく作成されたWOLFSSL_METHOD構造体へのポインタを返します。
  116. \return XMALLOCを呼び出すときにメモリ割り当てが失敗した場合、基礎となるMalloc()実装の失敗値が返されます(通常はerrnoがENOMEMに設定されます)。
  117. _Example_
  118. \code
  119. #include <wolfssl/ssl.h>
  120. WOLFSSL_METHOD* method;
  121. WOLFSSL_CTX* ctx;
  122. method = wolfTLSv1_client_method();
  123. if (method == NULL) {
  124. unable to get method
  125. }
  126. ctx = wolfSSL_CTX_new(method);
  127. ...
  128. \endcode
  129. \sa wolfSSLv3_client_method
  130. \sa wolfTLSv1_1_client_method
  131. \sa wolfTLSv1_2_client_method
  132. \sa wolfTLSv1_3_client_method
  133. \sa wolfDTLSv1_client_method
  134. \sa wolfSSLv23_client_method
  135. \sa wolfSSL_CTX_new
  136. */
  137. WOLFSSL_METHOD *wolfTLSv1_client_method(void);
  138. /*!
  139. \ingroup Setup
  140. \brief wolfTLSv1_1_server_method()関数は、アプリケーションがサーバーであることを示すために使用され、TLS 1.1プロトコルのみをサポートします。
  141. この関数は、wolfSSL_ctx_new()を使用してSSL/TLSコンテキストを作成するときに使用される新しいWOLFSSL_METHOD構造体のメモリを割り当てて初期化します。
  142. \return 成功した場合、新しく作成されたWOLFSSL_METHOD構造体へのポインタを返します。
  143. \return XMALLOCを呼び出すときにメモリ割り当てが失敗した場合、基礎となるMalloc()実装の失敗値が返されます(通常はerrnoがENOMEMに設定されます)。
  144. _Example_
  145. \code
  146. #include <wolfssl/ssl.h>
  147. WOLFSSL_METHOD* method;
  148. WOLFSSL_CTX* ctx;
  149. method = wolfTLSv1_1_server_method();
  150. if (method == NULL) {
  151. // unable to get method
  152. }
  153. ctx = wolfSSL_CTX_new(method);
  154. ...
  155. \endcode
  156. \sa wolfSSLv3_server_method
  157. \sa wolfTLSv1_server_method
  158. \sa wolfTLSv1_2_server_method
  159. \sa wolfTLSv1_3_server_method
  160. \sa wolfDTLSv1_server_method
  161. \sa wolfSSLv23_server_method
  162. \sa wolfSSL_CTX_new
  163. */
  164. WOLFSSL_METHOD *wolfTLSv1_1_server_method(void);
  165. /*!
  166. \ingroup Setup
  167. \brief wolfTLSv1_1_client_method()関数は、アプリケーションがクライアントであり、TLS 1.0プロトコルのみをサポートすることを示すために使用されます。
  168. この関数は、wolfSSL_ctx_new()を使用してSSL/TLSコンテキストを作成するときに使用される新しいWOLFSSL_METHOD構造体のメモリを割り当てて初期化します。
  169. \return 成功した場合、新しく作成されたWOLFSSL_METHOD構造体へのポインタを返します。
  170. \return XMALLOCを呼び出すときにメモリ割り当てが失敗した場合、基礎となるMalloc()実装の失敗値が返されます(通常はerrnoがENOMEMに設定されます)。
  171. _Example_
  172. \code
  173. #include <wolfssl/ssl.h>
  174. WOLFSSL_METHOD* method;
  175. WOLFSSL_CTX* ctx;
  176. method = wolfTLSv1_1_client_method();
  177. if (method == NULL) {
  178. // unable to get method
  179. }
  180. ctx = wolfSSL_CTX_new(method);
  181. ...
  182. \endcode
  183. \sa wolfSSLv3_client_method
  184. \sa wolfTLSv1_client_method
  185. \sa wolfTLSv1_2_client_method
  186. \sa wolfTLSv1_3_client_method
  187. \sa wolfDTLSv1_client_method
  188. \sa wolfSSLv23_client_method
  189. \sa wolfSSL_CTX_new
  190. */
  191. WOLFSSL_METHOD *wolfTLSv1_1_client_method(void);
  192. /*!
  193. \ingroup Setup
  194. \brief wolfTLSv1_2_server_method()関数は、アプリケーションがサーバーであることを示すために使用され、TLS 1.2プロトコルのみをサポートします。
  195. この関数は、wolfSSL_ctx_new()を使用してSSL/TLSコンテキストを作成するときに使用される新しいWOLFSSL_METHOD構造体のメモリを割り当てて初期化します。
  196. \return 成功した場合、新しく作成されたWOLFSSL_METHOD構造体へのポインタを返します。
  197. \return XMALLOCを呼び出すときにメモリ割り当てが失敗した場合、基礎となるMalloc()実装の失敗値が返されます(通常はerrnoがENOMEMに設定されます)。
  198. _Example_
  199. \code
  200. #include <wolfssl/ssl.h>
  201. WOLFSSL_METHOD* method;
  202. WOLFSSL_CTX* ctx;
  203. method = wolfTLSv1_2_server_method();
  204. if (method == NULL) {
  205. // unable to get method
  206. }
  207. ctx = wolfSSL_CTX_new(method);
  208. ...
  209. \endcode
  210. \sa wolfSSLv3_server_method
  211. \sa wolfTLSv1_server_method
  212. \sa wolfTLSv1_1_server_method
  213. \sa wolfTLSv1_3_server_method
  214. \sa wolfDTLSv1_server_method
  215. \sa wolfSSLv23_server_method
  216. \sa wolfSSL_CTX_new
  217. */
  218. WOLFSSL_METHOD *wolfTLSv1_2_server_method(void);
  219. /*!
  220. \ingroup Setup
  221. \brief wolfTLSv1_2_client_method()関数は、アプリケーションがクライアントであり、TLS 1.2プロトコルのみをサポートすることを示すために使用されます。
  222. この関数は、wolfSSL_ctx_new()を使用してSSL/TLSコンテキストを作成するときに使用される新しいWolfssl_method構造体のメモリを割り当てて初期化します。
  223. \return 成功した場合、新しく作成されたWOLFSSL_METHOD構造体へのポインタを返します。
  224. \return XMALLOCを呼び出すときにメモリ割り当てが失敗した場合、基礎となるMalloc()実装の失敗値が返されます(通常はerrnoがENOMEMに設定されます)。
  225. _Example_
  226. \code
  227. #include <wolfssl/ssl.h>
  228. WOLFSSL_METHOD* method;
  229. WOLFSSL_CTX* ctx;
  230. method = wolfTLSv1_2_client_method();
  231. if (method == NULL) {
  232. // unable to get method
  233. }
  234. ctx = wolfSSL_CTX_new(method);
  235. ...
  236. \endcode
  237. \sa wolfSSLv3_client_method
  238. \sa wolfTLSv1_client_method
  239. \sa wolfTLSv1_1_client_method
  240. \sa wolfTLSv1_3_client_method
  241. \sa wolfDTLSv1_client_method
  242. \sa wolfSSLv23_client_method
  243. \sa wolfSSL_CTX_new
  244. */
  245. WOLFSSL_METHOD *wolfTLSv1_2_client_method(void);
  246. /*!
  247. \ingroup Setup
  248. \brief wolfdtlsv1_client_method()関数は、アプリケーションがクライアントであり、DTLS 1.0プロトコルのみをサポートすることを示すために使用されます。
  249. この関数は、wolfSSL_ctx_new()を使用してSSL/TLSコンテキストを作成するときに使用される新しいWOLFSSL_METHOD構造体のメモリを割り当てて初期化します。
  250. この関数は、WolfSSLがDTLSサポート(--enable-dtls、またはWOLFSSL_DTLSを定義することによって)ビルドされている場合にのみ使用できます。
  251. \return 成功した場合、新しく作成されたWOLFSSL_METHOD構造体へのポインタを返します。
  252. \return XMALLOCを呼び出すときにメモリ割り当てが失敗した場合、基礎となるMalloc()実装の失敗値が返されます(通常はerrnoがENOMEMに設定されます)。
  253. _Example_
  254. \code
  255. WOLFSSL_METHOD* method;
  256. WOLFSSL_CTX* ctx;
  257. method = wolfDTLSv1_client_method();
  258. if (method == NULL) {
  259. // unable to get method
  260. }
  261. ctx = wolfSSL_CTX_new(method);
  262. ...
  263. \endcode
  264. \sa wolfSSLv3_client_method
  265. \sa wolfTLSv1_client_method
  266. \sa wolfTLSv1_1_client_method
  267. \sa wolfTLSv1_2_client_method
  268. \sa wolfTLSv1_3_client_method
  269. \sa wolfSSLv23_client_method
  270. \sa wolfSSL_CTX_new
  271. */
  272. WOLFSSL_METHOD *wolfDTLSv1_client_method(void);
  273. /*!
  274. \ingroup Setup
  275. \brief wolfDTLSv1_server_method()関数は、アプリケーションがサーバーであることを示すために使用され、DTLS 1.0プロトコルのみをサポートします。
  276. この関数は、wolfSSL_ctx_new()を使用してSSL/TLSコンテキストを作成するときに使用される新しいWOLFSSL_METHOD構造体のメモリを割り当てて初期化します。
  277. この関数は、WolfSSLがDTLSサポート(--enable-dtls、またはWOLFSSL_DTLSマクロを定義することによって)ビルドされている場合にのみ使用できます。
  278. \return 成功した場合、新しく作成されたWOLFSSL_METHOD構造体へのポインタを返します。
  279. \return XMALLOCを呼び出すときにメモリ割り当てが失敗した場合、基礎となるMalloc()実装の失敗値が返されます(通常はerrnoがENOMEMに設定されます)。
  280. _Example_
  281. \code
  282. WOLFSSL_METHOD* method;
  283. WOLFSSL_CTX* ctx;
  284. method = wolfDTLSv1_server_method();
  285. if (method == NULL) {
  286. // unable to get method
  287. }
  288. ctx = wolfSSL_CTX_new(method);
  289. ...
  290. \endcode
  291. \sa wolfSSLv3_server_method
  292. \sa wolfTLSv1_server_method
  293. \sa wolfTLSv1_1_server_method
  294. \sa wolfTLSv1_2_server_method
  295. \sa wolfTLSv1_3_server_method
  296. \sa wolfSSLv23_server_method
  297. \sa wolfSSL_CTX_new
  298. */
  299. WOLFSSL_METHOD *wolfDTLSv1_server_method(void);
  300. /*!
  301. \brief wolfDTLSv1_2_server_method()関数はサーバ側用にWOLFSSL_METHOD構造体のメモリを割り当てて初期化します。
  302. \return 成功した場合、新しく作成されたWOLFSSL_METHOD構造体へのポインタを返します。
  303. _Example_
  304. \code
  305. WOLFSSL_CTX* ctx = wolfSSL_CTX_new(wolfDTLSv1_2_server_method());
  306. WOLFSSL* ssl = WOLFSSL_new(ctx);
  307. \endcode
  308. \sa wolfSSL_CTX_new
  309. */
  310. WOLFSSL_METHOD *wolfDTLSv1_2_server_method(void);
  311. /*!
  312. \ingroup Setup
  313. \brief wolfDTLSv1_3_server_method()関数はアプリケーションがサーバーであることを示すために使用され、DTLS 1.3プロトコルのみをサポートします。
  314. この関数は、wolfSSL_ctx_new()を使用してSSL/TLSコンテキストを作成するときに使用される新しいWOLFSSL_METHOD構造体のメモリを割り当てて初期化します。
  315. この関数は、WolfSSLがDTLSサポート(--enable-dtls13、またはWOLFSSL_DTLS13を定義することによって)ビルドされている場合にのみ使用できます。
  316. \return 成功した場合、新しく作成されたWOLFSSL_METHOD構造体へのポインタを返します。
  317. \return XMALLOCを呼び出すときにメモリ割り当てが失敗した場合、基礎となるMalloc()実装の失敗値が返されます(通常はerrnoがENOMEMに設定されます)。
  318. \param なし
  319. _Example_
  320. \code
  321. WOLFSSL_METHOD* method;
  322. WOLFSSL_CTX* ctx;
  323. method = wolfDTLSv1_3_server_method();
  324. if (method == NULL) {
  325. // unable to get method
  326. }
  327. ctx = wolfSSL_CTX_new(method);
  328. ...
  329. \endcode
  330. \sa wolfDTLSv1_3_client_method
  331. */
  332. WOLFSSL_METHOD *wolfDTLSv1_3_server_method(void);
  333. /*!
  334. \ingroup Setup
  335. \brief wolfDTLSv1_3_client_method()関数はアプリケーションがクライアントであることを示すために使用され、DTLS 1.3プロトコルのみをサポートします。
  336. この関数は、wolfSSL_ctx_new()を使用してSSL/TLSコンテキストを作成するときに使用される新しいWOLFSSL_METHOD構造体のメモリを割り当てて初期化します。
  337. この関数は、WolfSSLがDTLSサポート(--enable-dtls13、またはWOLFSSL_DTLS13を定義することによって)ビルドされている場合にのみ使用できます。
  338. \return 成功した場合、新しく作成されたWOLFSSL_METHOD構造体へのポインタを返します。
  339. \return XMALLOCを呼び出すときにメモリ割り当てが失敗した場合、基礎となるMalloc()実装の失敗値が返されます(通常はerrnoがENOMEMに設定されます)。
  340. \param なし
  341. _Example_
  342. \code
  343. WOLFSSL_METHOD* method;
  344. WOLFSSL_CTX* ctx;
  345. method = wolfDTLSv1_3_client_method();
  346. if (method == NULL) {
  347. // unable to get method
  348. }
  349. ctx = wolfSSL_CTX_new(method);
  350. ...
  351. \endcode
  352. \sa wolfDTLSv1_3_server_method
  353. */
  354. WOLFSSL_METHOD* wolfDTLSv1_3_client_method(void);
  355. /*!
  356. \ingroup Setup
  357. \brief wolfDTLS_server_method()関数はアプリケーションがサーバーであることを示すために使用され、
  358. 可能な限り高いバージョン最小バージョンのDTLSプロトコルをサポートします。
  359. デフォルトの最小バージョンはWOLFSSL_MIN_DTLS_DOWNGRADEマクロでの指定をもとにしていて、
  360. 実行時にwolfSSL_SetMinVersion()で変更することができます。
  361. この関数は、wolfSSL_ctx_new()を使用してSSL/TLSコンテキストを作成するときに使用される新しいWOLFSSL_METHOD構造体のメモリを割り当てて初期化します。
  362. この関数は、WolfSSLがDTLSサポート(--enable-dtls、またはWOLFSSL_DTLSを定義することによって)ビルドされている場合にのみ使用できます。
  363. \return 成功した場合、新しく作成されたWOLFSSL_METHOD構造体へのポインタを返します。
  364. \return XMALLOCを呼び出すときにメモリ割り当てが失敗した場合、基礎となるMalloc()実装の失敗値が返されます(通常はerrnoがENOMEMに設定されます)。
  365. \param なし
  366. _Example_
  367. \code
  368. WOLFSSL_METHOD* method;
  369. WOLFSSL_CTX* ctx;
  370. method = wolfDTLS_server_method();
  371. if (method == NULL) {
  372. // unable to get method
  373. }
  374. ctx = wolfSSL_CTX_new(method);
  375. ...
  376. \endcode
  377. \sa wolfDTLS_client_method
  378. \sa wolfSSL_SetMinVersion
  379. */
  380. WOLFSSL_METHOD *wolfDTLS_server_method(void);
  381. /*!
  382. \ingroup Setup
  383. \brief wolfDTLS_client_method()関数は アプリケーションがクライアントであることを示すために使用され、
  384. 可能な限り高いバージョン最小バージョンのDTLSプロトコルをサポートします。
  385. デフォルトの最小バージョンはWOLFSSL_MIN_DTLS_DOWNGRADEマクロでの指定をもとにしていて、
  386. 実行時にwolfSSL_SetMinVersion()で変更することができます。
  387. この関数は、wolfSSL_ctx_new()を使用してSSL/TLSコンテキストを作成するときに使用される新しいWOLFSSL_METHOD構造体のメモリを割り当てて初期化します。
  388. この関数は、wolfSSLがDTLSサポート(--enable-dtls、またはWOLFSSL_DTLSを定義することによって)ビルドされている場合にのみ使用できます。
  389. \return 成功した場合、新しく作成されたWOLFSSL_METHOD構造体へのポインタを返します。
  390. \return XMALLOCを呼び出すときにメモリ割り当てが失敗した場合、基礎となるMalloc()実装の失敗値が返されます(通常はerrnoがENOMEMに設定されます)。
  391. \param なし
  392. _Example_
  393. \code
  394. WOLFSSL_METHOD* method;
  395. WOLFSSL_CTX* ctx;
  396. method = wolfDTLS_client_method();
  397. if (method == NULL) {
  398. // unable to get method
  399. }
  400. ctx = wolfSSL_CTX_new(method);
  401. ...
  402. \endcode
  403. \sa wolfDTLS_server_method
  404. \sa wolfSSL_SetMinVersion
  405. */
  406. WOLFSSL_METHOD *wolfDTLS_client_method(void);
  407. /*!
  408. \brief この関数はサーバー側用にWOLFSSL_METHOD構造体を生成して初期化します。
  409. \return 成功した場合、新しく作成されたWOLFSSL_METHOD構造体へのポインタを返します。
  410. \param なし
  411. _Example_
  412. \code
  413. WOLFSSL_CTX* ctx = wolfSSL_CTX_new(wolfDTLSv1_2_server_method());
  414. WOLFSSL* ssl = WOLFSSL_new(ctx);
  415. \endcode
  416. \sa wolfSSL_CTX_new
  417. */
  418. WOLFSSL_METHOD *wolfDTLSv1_2_server_method(void);
  419. /*!
  420. \ingroup Setup
  421. \brief Chacha-Poly Aead Constructionの最初のリリースと新しいバージョンの間にいくつかの違いがあるため、
  422. 古いバージョンを使用してサーバー/クライアントと通信するオプションを追加しました。
  423. デフォルトでは、wolfSSLは新しいバージョンを使用します。
  424. \return 0 成功の場合に返されます。
  425. \param ssl wolfSSL_new()を使用して作成したWOLFSSL構造体へのポインタ。
  426. _Example_
  427. \code
  428. int ret = 0;
  429. WOLFSSL* ssl;
  430. ...
  431. ret = wolfSSL_use_old_poly(ssl, 1);
  432. if (ret != 0) {
  433. // failed to set poly1305 AEAD version
  434. }
  435. \endcode
  436. \sa none
  437. */
  438. int wolfSSL_use_old_poly(WOLFSSL* ssl, int value);
  439. /*!
  440. \brief wolfSSL_dtls_import()関数はシリアライズされたセッション状態を解析するために使われます。
  441. これにより、ハンドシェイクが完了した後に接続をピックアップすることができます。
  442. \return 成功した場合、読み取ったバッファの量が返されます。
  443. \return すべての失敗した戻り値は0未満になります。
  444. \return VERSION_ERROR バージョンの不一致が見つかった場合、(すなわち、DTLS v1とCTXがDTLS v1.2に設定された場合)、Version_Errorが返されます。
  445. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  446. \param buf インポートするシリアル化されたセッション情報を格納するバッファへのポインタ。
  447. \param sz バッファのサイズ
  448. _Example_
  449. \code
  450. WOLFSSL* ssl;
  451. int ret;
  452. unsigned char buf[MAX];
  453. bufSz = MAX;
  454. ...
  455. //get information sent from wc_dtls_export function and place it in buf
  456. fread(buf, 1, bufSz, input);
  457. ret = wolfSSL_dtls_import(ssl, buf, bufSz);
  458. if (ret < 0) {
  459. // handle error case
  460. }
  461. // no wolfSSL_accept needed since handshake was already done
  462. ...
  463. ret = wolfSSL_write(ssl) and wolfSSL_read(ssl);
  464. ...
  465. \endcode
  466. \sa wolfSSL_new
  467. \sa wolfSSL_CTX_new
  468. \sa wolfSSL_CTX_dtls_set_export
  469. */
  470. int wolfSSL_dtls_import(WOLFSSL* ssl, unsigned char* buf,
  471. unsigned int sz);
  472. /*!
  473. \brief シリアライズされたTLSセッションをインポートします。
  474. 警告:bufには、状態に関する機密情報が含まれており、保存されている場合は保存する前に暗号化されるのが最善です。
  475. 追加のデバッグ情報をマクロWOLFSSL_SESSION_EXPORT_DEBUGを定義して表示できます。
  476. \return バッファ'buf'から読み込まれたバイト数を返します。
  477. \param ssl セッションをインポートするためのWOLFSSL構造体へのポインタ
  478. \param buf シリアル化されたセッションを含むバッファへのポインタ
  479. \param sz バッファのサイズ
  480. \sa wolfSSL_dtls_import
  481. \sa wolfSSL_tls_export
  482. */
  483. int wolfSSL_tls_import(WOLFSSL* ssl, const unsigned char* buf,
  484. unsigned int sz);
  485. /*!
  486. \brief wolfSSL_CTX_dtls_set_export()関数はセッションをエクスポートするためのコールバック関数を設定します。
  487. 以前に格納されているエクスポート機能をクリアするためにパラメータfuncにNULLを渡すことが許されます。
  488. サーバー側で使用され、ハンドシェイクが完了した直後に設定したコールバック関数が呼び出されます。
  489. \return SSL_SUCCESS 成功時に返されます。
  490. \return BAD_FUNC_ARG NULLまたは予想されない引数が渡された場合に返されます。
  491. \param ctx wolfSSL_CTX_new()で作成されたWOLFSSL_CTX構造体へのポインタ。
  492. \param func セッションをエクスポートする際に呼び出す関数ポインタ
  493. _Example_
  494. \code
  495. int send_session(WOLFSSL* ssl, byte* buf, word32 sz, void* userCtx);
  496. // body of send session (wc_dtls_export) that passes
  497. // buf (serialized session) to destination
  498. WOLFSSL_CTX* ctx;
  499. int ret;
  500. ...
  501. ret = wolfSSL_CTX_dtls_set_export(ctx, send_session);
  502. if (ret != SSL_SUCCESS) {
  503. // handle error case
  504. }
  505. ...
  506. ret = wolfSSL_accept(ssl);
  507. ...
  508. \endcode
  509. \sa wolfSSL_new
  510. \sa wolfSSL_CTX_new
  511. \sa wolfSSL_dtls_set_export
  512. \sa Static buffer use
  513. */
  514. int wolfSSL_CTX_dtls_set_export(WOLFSSL_CTX* ctx, wc_dtls_export func);
  515. /*!
  516. \brief wolfSSL_dtls_set_export()関数はセッションをエクスポートする際に呼び出すコールバック関数を登録します。
  517. 以前に登録されているエクスポート関数をクリアするために使うこともできます。
  518. サーバー側で使用され、ハンドシェイクが完了した直後に設定したコールバック関数が呼び出されます。
  519. \return SSL_SUCCESS 成功時に返されます。
  520. \return BAD_FUNC_ARG NULLまたは予想されない引数が渡された場合に返されます。
  521. \param ssl wolfssl_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  522. \param func セッションをエクスポートする際に呼び出す関数ポインタ
  523. _Example_
  524. \code
  525. int send_session(WOLFSSL* ssl, byte* buf, word32 sz, void* userCtx);
  526. // body of send session (wc_dtls_export) that passes
  527. // buf (serialized session) to destination
  528. WOLFSSL* ssl;
  529. int ret;
  530. ...
  531. ret = wolfSSL_dtls_set_export(ssl, send_session);
  532. if (ret != SSL_SUCCESS) {
  533. // handle error case
  534. }
  535. ...
  536. ret = wolfSSL_accept(ssl);
  537. ...
  538. \endcode
  539. \sa wolfSSL_new
  540. \sa wolfSSL_CTX_new
  541. \sa wolfSSL_CTX_dtls_set_export
  542. */
  543. int wolfSSL_dtls_set_export(WOLFSSL* ssl, wc_dtls_export func);
  544. /*!
  545. \brief wolfSSL_dtls_export()関数は提供されたバッファへセッションをシリアル化します。
  546. セッションをエクスポートするための関数コールバックを使用するよりもメモリオーバーヘッドを減らすことができます。
  547. 関数に渡された引数bufがNULLの場合、szにはWolfSSLセッションのシリアライズに必要なバッファのサイズが設定されます。
  548. \return 成功した場合、使用されるバッファサイズが返されます。
  549. \return すべての失敗した戻り値は0未満になります。
  550. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  551. \param buf シリアライズしたセッションを保持するためのバッファ。
  552. \param sz バッファのサイズ
  553. _Example_
  554. \code
  555. WOLFSSL* ssl;
  556. int ret;
  557. unsigned char buf[MAX];
  558. bufSz = MAX;
  559. ...
  560. ret = wolfSSL_dtls_export(ssl, buf, bufSz);
  561. if (ret < 0) {
  562. // handle error case
  563. }
  564. ...
  565. \endcode
  566. \sa wolfSSL_new
  567. \sa wolfSSL_CTX_new
  568. \sa wolfSSL_CTX_dtls_set_export
  569. \sa wolfSSL_dtls_import
  570. */
  571. int wolfSSL_dtls_export(WOLFSSL* ssl, unsigned char* buf,
  572. unsigned int* sz);
  573. /*!
  574. \brief シリアライズされたTLSセッションをエクスポートします。
  575. ほとんどの場合、wolfSSL_tls_exportの代わりにwolfssl_get1_sessionを使用する必要があります。
  576. 追加のデバッグ情報をマクロWOLFSSL_SESSION_EXPORT_DEBUGを定義して表示できます。
  577. 警告:bufには、状態に関する機密情報が含まれており、保存する場合は保存する前に暗号化されるのが最善です。
  578. \return バッファ'buf'に書き込まれたバイト数
  579. \param ssl セッションをエクスポートするためのWOLFSSL構造体へのポインタ
  580. \param buf シリアライズされたセッションの出力先バッファへのポインタ
  581. \param sz 出力先バッファのサイズ
  582. \sa wolfSSL_dtls_import
  583. \sa wolfSSL_tls_import
  584. */
  585. int wolfSSL_tls_export(WOLFSSL* ssl, unsigned char* buf,
  586. unsigned int* sz);
  587. /*!
  588. \brief この関数はCTX用に静的メモリ領域を設定する目的に使用されます。
  589. 設定された静的メモリ領域はCTXの有効期間およびCTXから作成された全てのSSLオブジェクトに使用されます。
  590. 引数ctxにNULLを渡し、wolfSSL_method_func関数を渡すことによって、CTX自体の作成も静的メモリを使用します。
  591. wolfssl_method_funcは次のシグネチャとなっています:wolfssl_method *(* wolfssl_method_func)(void *heap)。
  592. 引数maxに0を渡すと、設定されていないものとして動作し、最大の同時使用制限が適用されません。
  593. 引数flagに渡した値によって、メモリの使用方法と動作が決まります。
  594. 利用可能なフラグ値は次のとおりです:
  595. 0 - デフォルトの一般メモリ、
  596. WOLFMEM_IO_POOL - メッセージの受送信の際の入出力バッファとして使用され渡されたバッファ内のすべてのメモリがIOに使用されます、
  597. WOLFMEM_IO_FIXED - WOLFMEM_IO_POOLと同じですが、各SSLは2つのバッファを自分のライフタイムの間保持して使用します。
  598. WOLFMEM_TRACK_STATS - 各SSLは実行中にメモリ使用統計を追跡します。
  599. \return SSL_SUCCESS 成功した場合に返されます。に返されます。
  600. \return SSL_FAILURE 失敗した場合に返されます。
  601. \param ctx WOLFSSL_CTX構造体へのポインタのポインタ
  602. \param method メソッド関数(例えば、wolfSSLv23_server_method_ex)でctxがNULLでない場合はNULLにする必要があります。
  603. \param buf すべての操作に使用するメモリバッファへのポインタ。
  604. \param sz 渡されているメモリバッファのサイズ。
  605. \param flag メモリの使用タイプ
  606. \param max 同時使用の最大値
  607. _Example_
  608. \code
  609. WOLFSSL_CTX* ctx;
  610. WOLFSSL* ssl;
  611. int ret;
  612. unsigned char memory[MAX];
  613. int memorySz = MAX;
  614. unsigned char IO[MAX];
  615. int IOSz = MAX;
  616. int flag = WOLFMEM_IO_FIXED | WOLFMEM_TRACK_STATS;
  617. ...
  618. // create ctx also using static memory, start with general memory to use
  619. ctx = NULL:
  620. ret = wolfSSL_CTX_load_static_memory(&ctx, wolfSSLv23_server_method_ex,
  621. memory, memorySz, 0, MAX_CONCURRENT_HANDSHAKES);
  622. if (ret != SSL_SUCCESS) {
  623. // handle error case
  624. }
  625. // load in memory for use with IO
  626. ret = wolfSSL_CTX_load_static_memory(&ctx, NULL, IO, IOSz, flag,
  627. MAX_CONCURRENT_IO);
  628. if (ret != SSL_SUCCESS) {
  629. // handle error case
  630. }
  631. ...
  632. \endcode
  633. \sa wolfSSL_CTX_new
  634. \sa wolfSSL_CTX_is_static_memory
  635. \sa wolfSSL_is_static_memory
  636. */
  637. int wolfSSL_CTX_load_static_memory(WOLFSSL_CTX** ctx,
  638. wolfSSL_method_func method,
  639. unsigned char* buf, unsigned int sz,
  640. int flag, int max);
  641. /*!
  642. \brief この関数は現時点の接続に関する振る舞いの変更は行いません。
  643. 静的メモリ使用量に関する情報を収集するためにのみ使用されます。
  644. \return 1 CTXの静的メモリを使用している場合に返されます。
  645. \return 0 静的メモリを使用していない場合に返されます。
  646. \param ctx wolfSSL_CTX_new()を使用して作成されたWOLFSSL_CTX構造体へのポインタ。
  647. \param mem_stats 静的メモリの使用量に関する情報を保持するWOLFSSL_MEM_STATS構造体へのポインタ
  648. _Example_
  649. \code
  650. WOLFSSL_CTX* ctx;
  651. int ret;
  652. WOLFSSL_MEM_STATS mem_stats;
  653. ...
  654. //get information about static memory with CTX
  655. ret = wolfSSL_CTX_is_static_memory(ctx, &mem_stats);
  656. if (ret == 1) {
  657. // handle case of is using static memory
  658. // print out or inspect elements of mem_stats
  659. }
  660. if (ret == 0) {
  661. //handle case of ctx not using static memory
  662. }
  663. \endcode
  664. \sa wolfSSL_CTX_new
  665. \sa wolfSSL_CTX_load_static_memory
  666. \sa wolfSSL_is_static_memory
  667. */
  668. int wolfSSL_CTX_is_static_memory(WOLFSSL_CTX* ctx,
  669. WOLFSSL_MEM_STATS* mem_stats);
  670. /*!
  671. \brief wolfSSL_is_static_memory関数はSSLの静的メモリ使用量に関する情報を集めます。
  672. 戻り値は、静的メモリが使用されているかどうかを示します。
  673. 引数sslの上位のWOLFSSL_CTXに静的メモリを使用するように指定してあり、WOLFMEM_TRACK_STATSが定義されている場合に
  674. 引数mem_statsに情報がセットされます。
  675. \return 1 静的メモリを使用している場合に返されます。
  676. \return 0 静的メモリを使用していない場合に返されます。
  677. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  678. \param mem_stats 静的メモリの使用量に関する情報を保持するWOLFSSL_MEM_STATS構造体へのポインタ
  679. _Example_
  680. \code
  681. WOLFSSL* ssl;
  682. int ret;
  683. WOLFSSL_MEM_CONN_STATS mem_stats;
  684. ...
  685. ret = wolfSSL_is_static_memory(ssl, mem_stats);
  686. if (ret == 1) {
  687. // handle case when is static memory
  688. // investigate elements in mem_stats if WOLFMEM_TRACK_STATS flag
  689. }
  690. ...
  691. \endcode
  692. \sa wolfSSL_new
  693. \sa wolfSSL_CTX_is_static_memory
  694. */
  695. int wolfSSL_is_static_memory(WOLFSSL* ssl,
  696. WOLFSSL_MEM_CONN_STATS* mem_stats);
  697. /*!
  698. \ingroup CertsKeys
  699. \brief この関数は証明書ファイルをSSLコンテキスト(WOLFSSL_CTX)にロードします。
  700. ファイルは引数fileによって提供されます。
  701. 引数formatは、ファイルのフォーマットタイプ(SSL_FILETYPE_ASN1またはSSL_FILETYPE_PEM)を指定します。
  702. 適切な使用法の例をご覧ください。
  703. \return SSL_SUCCESS 成功した場合に返されます。に返されます。
  704. \return SSL_FAILURE 失敗時に返されます。失敗した場合の可能な原因としては、
  705. ファイルが誤った形式の場合、または引数formatを使用して誤ったフォーマットが指定されている、
  706. あるいはファイルが存在しない、あるいは読み取ることができない、または破損している、
  707. メモリ不足が発生、Base16のデコードに失敗しているなどの原因が考えられます。
  708. \param ctx wolfSSL_CTX_new()を使用して作成されたWOLFSSL_CTX構造体へのポインタ
  709. \param file ロードする証明書を含むファイルパス文字列。
  710. \param format ロードする証明書のフォーマット:SSL_FILETYPE_ASN1 あるいは SSL_FILETYPE_PEM
  711. _Example_
  712. \code
  713. int ret = 0;
  714. WOLFSSL_CTX* ctx;
  715. ...
  716. ret = wolfSSL_CTX_use_certificate_file(ctx, “./client-cert.pem”,
  717. SSL_FILETYPE_PEM);
  718. if (ret != SSL_SUCCESS) {
  719. // error loading cert file
  720. }
  721. ...
  722. \endcode
  723. \sa wolfSSL_CTX_use_certificate_buffer
  724. \sa wolfSSL_use_certificate_file
  725. \sa wolfSSL_use_certificate_buffer
  726. */
  727. int wolfSSL_CTX_use_certificate_file(WOLFSSL_CTX* ctx, const char* file,
  728. int format);
  729. /*!
  730. \ingroup CertsKeys
  731. \brief この関数は、秘密鍵ファイルをSSLコンテキスト(WOLFSSL_CTX)にロードします。
  732. ファイルは引数fileによって提供されます。
  733. 引数formatは、次のファイルのフォーマットタイプを指定します:SSL_FILETYPE_ASN1 あるいは SSL_FILETYPE_PEM。
  734. 適切な使用法の例をご覧ください。
  735. 外部キーストアを使用し、秘密鍵を持っていない場合は、
  736. 代わりに公開鍵を入力してcryptoコールバックを登録して署名を処理することができます。
  737. このためには、cryptoコールバックまたはPKコールバックを使用したコンフィギュレーションでビルドします。
  738. cryptoコールバックを有効にするには、--enable-cryptocbまたはWOLF_CRYPTO_CBマクロを使用し、
  739. wc_CryptoCb_RegisterDeviceを使用して暗号コールバックを登録し、
  740. wolfSSL_CTX_SetDevIdを使用して関連するdevidを設定します。
  741. \return SSL_SUCCESS 成功した場合に返されます。に返されます。
  742. \return SSL_FAILURE 関数呼び出しが失敗した場合の可能な原因としては、
  743. ファイルが誤った形式の場合、または引数formatを使用して誤ったフォーマットが指定されている、
  744. あるいはファイルが存在しない、あるいは読み取ることができない、または破損している、
  745. メモリ不足が発生、Base16のデコードに失敗しているなどの原因が考えられます
  746. \param なし
  747. _Example_
  748. \code
  749. int ret = 0;
  750. WOLFSSL_CTX* ctx;
  751. ...
  752. ret = wolfSSL_CTX_use_PrivateKey_file(ctx, “./server-key.pem”,
  753. SSL_FILETYPE_PEM);
  754. if (ret != SSL_SUCCESS) {
  755. // error loading key file
  756. }
  757. ...
  758. \endcode
  759. \sa wolfSSL_CTX_use_PrivateKey_buffer
  760. \sa wolfSSL_use_PrivateKey_file
  761. \sa wolfSSL_use_PrivateKey_buffer
  762. \sa wc_CryptoCb_RegisterDevice
  763. \sa wolfSSL_CTX_SetDevId
  764. */
  765. int wolfSSL_CTX_use_PrivateKey_file(WOLFSSL_CTX* ctx, const char* file, int format);
  766. /*!
  767. \ingroup CertsKeys
  768. \brief この関数は、PEM形式のCA証明書ファイルをSSLコンテキスト(WOLFSSL_CTX)にロードします。
  769. これらの証明書は、信頼できるルート証明書として扱われ、SSLハンドシェイク中にピアから受信した証明書を検証するために使用されます。
  770. 引数fileによって提供されるルート証明書ファイルは、単一の証明書または複数の証明書を含むファイルでの場合があります。
  771. 複数のCA証明書が同じファイルに含まれている場合、wolfSSLはファイルに表示されているのと同じ順序でそれらをロードします。
  772. 引数pathは、信頼できるルートCAの証明書を含むディレクトリの名前へのポインタです。
  773. 引数fileがNULLではない場合、パスが必要でない場合はNULLとして指定できます。
  774. 引数pathが指定されていてかつNO_WOLFSSL_DIRが定義されていない場合には、
  775. wolfSSLライブラリは指定されたディレクトリに存在するすべてのCA証明書をロードします。
  776. この関数はディレクトリ内のすべてのファイルをロードしようとします。
  777. この関数は、ヘッダーに "-----BEGIN CERTIFICATE-----"を持つPEMフォーマットされたCERT_TYPEファイルを期待しています。
  778. \return SSL_SUCCESS 成功した場合に返されます。に返されます。
  779. \return SSL_FAILURE CTXがNULLの場合、またはファイルとパスの両方がNULLの場合に返されます。
  780. \return SSL_BAD_FILETYPE ファイルが間違った形式である場合に返されます。
  781. \return SSL_BAD_FILE ファイルが存在しない場合、読み込めない場合、または破損している場合に返されます。
  782. \return MEMORY_E メモリ不足状態が発生した場合に返されます。
  783. \return ASN_INPUT_E base16デコードがファイルに対して失敗した場合に返されます。
  784. \return ASN_BEFORE_DATE_E 現在の日付が使用開始日より前の場合に返されます。
  785. \return ASN_AFTER_DATE_E 現在の日付が使用期限後より後の場合に返されます。
  786. \return BUFFER_E チェーンバッファが受信バッファよりも大きい場合に返されます。
  787. \return BAD_PATH_ERROR opendir()がパスを開こうとして失敗した場合に返されます。
  788. \param ctx wolfSSL_CTX_new()で作成されたSSLコンテキストへのポインタ。
  789. \param file PEM形式のCA証明書を含むファイルの名前へのポインタ。
  790. \param path CA証明書を含んでいるディレクトリのディレクトリの名前へのポインタ。
  791. _Example_
  792. \code
  793. int ret = 0;
  794. WOLFSSL_CTX* ctx;
  795. ...
  796. ret = wolfSSL_CTX_load_verify_locations(ctx, “./ca-cert.pem”, NULL);
  797. if (ret != WOLFSSL_SUCCESS) {
  798. // error loading CA certs
  799. }
  800. ...
  801. \endcode
  802. \sa wolfSSL_CTX_load_verify_locations_ex
  803. \sa wolfSSL_CTX_load_verify_buffer
  804. \sa wolfSSL_CTX_use_certificate_file
  805. \sa wolfSSL_CTX_use_PrivateKey_file
  806. \sa wolfSSL_CTX_use_certificate_chain_file
  807. \sa wolfSSL_use_certificate_file
  808. \sa wolfSSL_use_PrivateKey_file
  809. \sa wolfSSL_use_certificate_chain_file
  810. */
  811. int wolfSSL_CTX_load_verify_locations(WOLFSSL_CTX* ctx, const char* file,
  812. const char* path);
  813. /*!
  814. \brief この関数は、PEM形式のCA証明書ファイルをSSLコンテキスト(WOLFSSL_CTX)にロードします。
  815. これらの証明書は、信頼できるルート証明書として扱われ、SSLハンドシェイク中にピアから受信した証明書を検証するために使用されます。
  816. 引数fileによって提供されるルート証明書ファイルは、単一の証明書または複数の証明書を含むファイルでの場合があります。
  817. 複数のCA証明書が同じファイルに含まれている場合、wolfSSLはファイルに表示されているのと同じ順序でそれらをロードします。
  818. 引数pathは、信頼できるルートCAの証明書を含むディレクトリの名前へのポインタです。
  819. 引数fileがNULLではない場合、パスが必要でない場合はNULLとして指定できます。
  820. 引数pathが指定されていてかつNO_WOLFSSL_DIRが定義されていない場合には、
  821. wolfSSLライブラリは指定されたディレクトリに存在するすべてのCA証明書をロードします。
  822. この関数は引数flagsに基づいてディレクトリ内のすべてのファイルをロードしようとします。
  823. この関数は、ヘッダーに "-----BEGIN CERTIFICATE-----"を持つPEMフォーマットされたCERT_TYPEファイルを期待しています。
  824. \return SSL_SUCCESS 成功した場合に返されます。に返されます。
  825. \return SSL_FAILURE CTXがNULLの場合、またはファイルとパスの両方がNULLの場合に返されます。
  826. \return SSL_BAD_FILETYPE ファイルが間違った形式である場合に返されます。
  827. \return SSL_BAD_FILE ファイルが存在しない場合、読み込めない場合、または破損している場合に返されます。
  828. \return MEMORY_E メモリ不足状態が発生した場合に返されます。
  829. \return ASN_INPUT_E base16デコードがファイルに対して失敗した場合に返されます。
  830. \return ASN_BEFORE_DATE_E 現在の日付が使用開始日より前の場合に返されます。
  831. \return ASN_AFTER_DATE_E 現在の日付が使用期限後より後の場合に返されます。
  832. \return BUFFER_E チェーンバッファが受信バッファよりも大きい場合に返されます。
  833. \return BAD_PATH_ERROR opendir()がパスを開こうとして失敗した場合に返されます。
  834. \param ctx wolfSSL_CTX_new()で作成されたSSLコンテキストへのポインタ。
  835. \param file PEM形式のCA証明書を含むファイルの名前へのポインタ。
  836. \param path CA証明書を含んでいるディレクトリのフォルダーパス
  837. \param flags 指定可能なマスク値: WOLFSSL_LOAD_FLAG_IGNORE_ERR,
  838. WOLFSSL_LOAD_FLAG_DATE_ERR_OKAY, WOLFSSL_LOAD_FLAG_PEM_CA_ONLY
  839. _Example_
  840. \code
  841. int ret = 0;
  842. WOLFSSL_CTX* ctx;
  843. ...
  844. ret = wolfSSL_CTX_load_verify_locations_ex(ctx, NULL, “./certs/external",
  845. WOLFSSL_LOAD_FLAG_PEM_CA_ONLY);
  846. if (ret != WOLFSSL_SUCCESS) {
  847. // error loading CA certs
  848. }
  849. ...
  850. \endcode
  851. \sa wolfSSL_CTX_load_verify_locations
  852. \sa wolfSSL_CTX_load_verify_buffer
  853. \sa wolfSSL_CTX_use_certificate_file
  854. \sa wolfSSL_CTX_use_PrivateKey_file
  855. \sa wolfSSL_CTX_use_certificate_chain_file
  856. \sa wolfSSL_use_certificate_file
  857. \sa wolfSSL_use_PrivateKey_file
  858. \sa wolfSSL_use_certificate_chain_file
  859. */
  860. int wolfSSL_CTX_load_verify_locations_ex(WOLFSSL_CTX* ctx, const char* file,
  861. const char* path, unsigned int flags);
  862. /*!
  863. \ingroup CertsKeys
  864. \brief この関数は、wolfSSL_CTX_load_system_CA_certs が呼び出されたときに、
  865. wolfSSLがシステムCA証明書を検索するディレクトリを表す文字列の配列へのポインタを返します。
  866. \return 成功時には文字列配列へのポインタを返します。
  867. \return NULL 失敗時に返します。
  868. \param num word32型変数へのポインタ。文字列配列の長さを格納します。
  869. _Example_
  870. \code
  871. WOLFSSL_CTX* ctx;
  872. const char** dirs;
  873. word32 numDirs;
  874. dirs = wolfSSL_get_system_CA_dirs(&numDirs);
  875. for (int i = 0; i < numDirs; ++i) {
  876. printf("Potential system CA dir: %s\n", dirs[i]);
  877. }
  878. ...
  879. \endcode
  880. \sa wolfSSL_CTX_load_system_CA_certs
  881. \sa wolfSSL_CTX_load_verify_locations
  882. \sa wolfSSL_CTX_load_verify_locations_ex
  883. */
  884. const char** wolfSSL_get_system_CA_dirs(word32* num);
  885. /*!
  886. \ingroup CertsKeys
  887. \brief この関数は、CA証明書をOS依存のCA証明書ストアからWOLFSSL_CTXにロードしようとします。
  888. ロードされた証明書は信頼されます。
  889. サポートおよびテストされているプラットフォームは、Linux(Debian、Ubuntu、Gentoo、Fedora、RHEL)、
  890. Windows 10/11、Android、Apple OS X、iOSです。
  891. \return WOLFSSL_SUCCESS 成功時に返されます。
  892. \return WOLFSSL_BAD_PATH システムCA証明書がロードできなかった場合に返されます。
  893. \return WOLFSSL_FAILURE そのほかのエラー発生時(Windows証明書ストアが正常にクローズされない等)
  894. \param ctx wolfSSL_CTX_new()で生成されたWOLFSSL_CTX構造体へのポインタ。
  895. _Example_
  896. \code
  897. int ret = 0;
  898. WOLFSSL_CTX* ctx;
  899. ...
  900. ret = wolfSSL_CTX_load_system_CA_certs(ctx,);
  901. if (ret != WOLFSSL_SUCCESS) {
  902. // error loading system CA certs
  903. }
  904. ...
  905. \endcode
  906. \sa wolfSSL_get_system_CA_dirs
  907. \sa wolfSSL_CTX_load_verify_locations
  908. \sa wolfSSL_CTX_load_verify_locations_ex
  909. */
  910. int wolfSSL_CTX_load_system_CA_certs(WOLFSSL_CTX* ctx);
  911. /*!
  912. \ingroup Setup
  913. \brief この関数は、TLS/SSLハンドシェイクを実行するときにピアを検証するために使用する証明書をロードします。
  914. ハンドシェイク中に送信されたピア証明書は、この関数で指定された証明書のSKIDと署名を比較することによって検証されます。
  915. これら2つのことが一致しない場合は、ピア証明書の検証にはロードされたCA証明書が使用されます。
  916. この機能はWOLFSSL_TRUST_PEER_CERTマクロを定義することで機能を有効にできます。
  917. 適切な使用法は例をご覧ください。
  918. \return SSL_SUCCES 成功時に返されます。
  919. \return SSL_FAILURE CTXがNULLの場合、または両方のファイルと種類が無効な場合に返されます。
  920. \return SSL_BAD_FILETYPE ファイルが間違った形式である場合に返されます。
  921. \return SSL_BAD_FILE ファイルが存在しない場合に返されます。読み込め、または破損していません。
  922. \return MEMORY_E メモリ不足状態が発生した場合に返されます。
  923. \return ASN_INPUT_E base16デコードがファイルに対して失敗した場合に返されます。
  924. \param ctx wolfSSL_CTX_new()で生成されたWOLFSSL_CTX構造体へのポインタ。
  925. \param file 証明書を含むファイルの名前へのポインタ
  926. _Example_
  927. \code
  928. int ret = 0;
  929. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
  930. ...
  931. ret = wolfSSL_CTX_trust_peer_cert(ctx, “./peer-cert.pem”,
  932. SSL_FILETYPE_PEM);
  933. if (ret != SSL_SUCCESS) {
  934. // error loading trusted peer cert
  935. }
  936. ...
  937. \endcode
  938. \sa wolfSSL_CTX_load_verify_buffer
  939. \sa wolfSSL_CTX_use_certificate_file
  940. \sa wolfSSL_CTX_use_PrivateKey_file
  941. \sa wolfSSL_CTX_use_certificate_chain_file
  942. \sa wolfSSL_CTX_trust_peer_buffer
  943. \sa wolfSSL_CTX_Unload_trust_peers
  944. \sa wolfSSL_use_certificate_file
  945. \sa wolfSSL_use_PrivateKey_file
  946. \sa wolfSSL_use_certificate_chain_file
  947. */
  948. int wolfSSL_CTX_trust_peer_cert(WOLFSSL_CTX* ctx, const char* file, int type);
  949. /*!
  950. \ingroup CertsKeys
  951. \brief この関数は、証明書チェーンをSSLコンテキスト(WOLFSSL_CTX)にロードします。
  952. 証明書チェーンを含むファイルは引数fileによって提供され、PEM形式の証明書を含める必要があります。
  953. この関数は、最大MAX_CHAIN_DEPTH(既定で9、internal.hで定義されている)数の証明書を処理します。
  954. この数にはサブジェクト証明書を含みます。
  955. \return SSL_SUCCESS 成功時に返されます。
  956. \return SSL_FAILURE 関数呼び出しが失敗した場合、可能な原因としては:誤った形式である場合、
  957. または「format」引数を使用して誤ったフォーマットが指定されている場合、
  958. ファイルが存在しない、読み取れない、または破損している、メモリ枯渇などが考えられます。
  959. \param ctx wolfSSL_CTX_new()で生成されたWOLFSSL_CTX構造体へのポインタ。
  960. _Example_
  961. \code
  962. int ret = 0;
  963. WOLFSSL_CTX* ctx;
  964. ...
  965. ret = wolfSSL_CTX_use_certificate_chain_file(ctx, “./cert-chain.pem”);
  966. if (ret != SSL_SUCCESS) {
  967. // error loading cert file
  968. }
  969. ...
  970. \endcode
  971. \sa wolfSSL_CTX_use_certificate_file
  972. \sa wolfSSL_CTX_use_certificate_buffer
  973. \sa wolfSSL_use_certificate_file
  974. \sa wolfSSL_use_certificate_buffer
  975. */
  976. int wolfSSL_CTX_use_certificate_chain_file(WOLFSSL_CTX *ctx,
  977. const char *file);
  978. /*!
  979. \ingroup openSSL
  980. \brief この関数は、SSL接続で使用されているRSA秘密鍵をSSLコンテキスト(WOLFSSL_CTX)にロードします。
  981. この関数は、wolfSSLがOpenSSL互換APIが有効(--enable-openSSLExtra、#define OPENSSL_EXTRA)でコンパイルされている場合にのみ利用可能で、
  982. より一般的に使用されているwolfSSL_CTX_use_PrivateKey_file()関数と同じです。
  983. ファイル引数には、RSA秘密鍵ファイルへのポインタが、引数formatで指定された形式で含まれています。
  984. \return SSL_SUCCESS 成功時に返されます。
  985. \return SSL_FAILURE 関数呼び出しが失敗した場合に返されます。
  986. 失敗の原因には次が考えられます:入力鍵ファイルが誤った形式である、
  987. または引数formatを使用して誤った形式が与えられている場合、
  988. ファイルが存在しない、読み込めない、または破損してる、メモリ不足状態が発生。
  989. \param ctx wolfSSL_CTX_new()を使用して作成されたWOLFSSL_CTX構造体へのポインタ
  990. \param file フォーマットで指定された形式で、WolfSSL SSLコンテキストにロードされるRSA秘密鍵を含むファイルの名前へのポインタ。
  991. \param format RSA秘密鍵のエンコード形式を指定します。指定可能なフォーマット値は:SSL_FILETYPE_PEM と SSL_FILETYPE_ASN1
  992. _Example_
  993. \code
  994. int ret = 0;
  995. WOLFSSL_CTX* ctx;
  996. ...
  997. ret = wolfSSL_CTX_use_RSAPrivateKey_file(ctx, “./server-key.pem”,
  998. SSL_FILETYPE_PEM);
  999. if (ret != SSL_SUCCESS) {
  1000. // error loading private key file
  1001. }
  1002. ...
  1003. \endcode
  1004. \sa wolfSSL_CTX_use_PrivateKey_buffer
  1005. \sa wolfSSL_CTX_use_PrivateKey_file
  1006. \sa wolfSSL_use_RSAPrivateKey_file
  1007. \sa wolfSSL_use_PrivateKey_buffer
  1008. \sa wolfSSL_use_PrivateKey_file
  1009. */
  1010. int wolfSSL_CTX_use_RSAPrivateKey_file(WOLFSSL_CTX* ctx, const char* file, int format);
  1011. /*!
  1012. \ingroup IO
  1013. \brief この関数は、有効なセッション(NULL以外の引数ssl)が指定された場合に、デフォルトで9の最大チェーン深度を返します。
  1014. \return MAX_CHAIN_DEPTH WOLFSSL構造体がNULLではない場合に返されます。デフォルトでは値は9です。
  1015. \return BAD_FUNC_ARG WOLFSSL構造体がNULLの場合に返されます。
  1016. _Example_
  1017. \code
  1018. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
  1019. WOLFSSL* ssl = wolfSSL_new(ctx);
  1020. ...
  1021. long sslDep = wolfSSL_get_verify_depth(ssl);
  1022. if(sslDep > EXPECTED){
  1023. // The verified depth is greater than what was expected
  1024. } else {
  1025. // The verified depth is smaller or equal to the expected value
  1026. }
  1027. \endcode
  1028. \sa wolfSSL_CTX_get_verify_depth
  1029. */
  1030. long wolfSSL_get_verify_depth(WOLFSSL* ssl);
  1031. /*!
  1032. \ingroup Setup
  1033. \brief この関数は、WOLFSSL_CTX構造体構造を使用して証明書チェーン深度を取得します。
  1034. \return MAX_CHAIN_DEPTH WOLFSSL_CTX構造体がNULLではない場合に返されます。最大証明書チェーンピア深度の定数表現。
  1035. \return BAD_FUNC_ARG WOLFSSL_CTX構造体がNULLの場合に返されます。
  1036. _Example_
  1037. \code
  1038. WOLFSSL_METHOD method; // protocol method
  1039. WOLFSSL_CTX* ctx = WOLFSSL_CTX_new(method);
  1040. long ret = wolfSSL_CTX_get_verify_depth(ctx);
  1041. if(ret == EXPECTED){
  1042. // You have the expected value
  1043. } else {
  1044. // Handle an unexpected depth
  1045. }
  1046. \endcode
  1047. \sa wolfSSL_CTX_use_certificate_chain_file
  1048. \sa wolfSSL_get_verify_depth
  1049. */
  1050. long wolfSSL_CTX_get_verify_depth(WOLFSSL_CTX* ctx);
  1051. /*!
  1052. \ingroup openSSL
  1053. \brief この関数は証明書ファイルをSSLセッション(WOLFSSL構造体)にロードします。
  1054. 証明書ファイルはファイル引数によって提供されます。
  1055. 引数formatは、ファイルのフォーマットタイプ(SSL_FILETYPE_ASN1またはSSL_FILETYPE_PEM)を指定します。
  1056. \return SSL_SUCCESS 成功時に返されます。
  1057. \return SSL_FAILURE 関数呼び出しが失敗した場合に返されます。
  1058. 可能な原因には次のようなものがあります。
  1059. ファイルが誤った形式、または引数formatを使用して誤った形式が与えられた、
  1060. メモリ不足状態が発生した、ファイルでBase16のデコードが失敗した
  1061. \param ssl wolfSSL_new()で作成されたWOLFSSL構造体へのポインタ。
  1062. \param file WOLFSSL構造体にロードされる証明書を含むファイルの名前へのポインタ
  1063. \param format 証明書ファイルのエンコード形式を指定します。指定可能なフォーマット値は:SSL_FILETYPE_PEM と SSL_FILETYPE_ASN1
  1064. _Example_
  1065. \code
  1066. int ret = 0;
  1067. WOLFSSL* ssl;
  1068. ...
  1069. ret = wolfSSL_use_certificate_file(ssl, “./client-cert.pem”,
  1070. SSL_FILETYPE_PEM);
  1071. if (ret != SSL_SUCCESS) {
  1072. // error loading cert file
  1073. }
  1074. ...
  1075. \endcode
  1076. \sa wolfSSL_CTX_use_certificate_buffer
  1077. \sa wolfSSL_CTX_use_certificate_file
  1078. \sa wolfSSL_use_certificate_buffer
  1079. */
  1080. int wolfSSL_use_certificate_file(WOLFSSL* ssl, const char* file, int format);
  1081. /*!
  1082. \ingroup openSSL
  1083. \brief この関数は、秘密鍵ファイルをSSLセッション(WOLFSSL構造体)にロードします。
  1084. 鍵ファイルは引数fileによって提供されます。
  1085. 引数formatは、ファイルのタイプ(SSL_FILETYPE_ASN1またはSSL_FILETYPE_PEMが指定可)を指定します。
  1086. 外部キーストアを使用し、秘密鍵を持っていない場合は、代わりに公開鍵を入力してCryProコールバックを登録して署名を処理することができます。
  1087. このためには、CryptoコールバックまたはPKコールバックを使用したコンフィグレーションでビルドします。
  1088. Cryptoコールバックを有効にするには、--enable-cryptocbまたはWOLF_CRYPTO_CBマクロを使用してビルドし、
  1089. wc_CryptoCb_RegisterDeviceを使用して暗号コールバックを登録し、
  1090. wolfSSL_SetDevIdを使用して関連するdevIdを設定します。
  1091. \return SSL_SUCCESS 成功時に返されます。
  1092. \return SSL_FAILURE 関数呼び出しが失敗した場合に返されます。
  1093. 可能な原因には次のようなものがあります。
  1094. ファイルが誤った形式、または引数formatを使用して誤った形式が与えられた、
  1095. メモリ不足状態が発生した、ファイルでBase16のデコードが失敗した
  1096. \param ssl wolfSSL_new()で作成されたWOLFSSL構造体へのポインタ。
  1097. \param file WOLFSSL構造体にロードされる証明書を含むファイルの名前へのポインタ
  1098. \param format 秘密鍵ファイルのエンコード形式を指定します。指定可能なフォーマット値は:SSL_FILETYPE_PEM と SSL_FILETYPE_ASN1
  1099. _Example_
  1100. \code
  1101. int ret = 0;
  1102. WOLFSSL* ssl;
  1103. ...
  1104. ret = wolfSSL_use_PrivateKey_file(ssl, “./server-key.pem”,
  1105. SSL_FILETYPE_PEM);
  1106. if (ret != SSL_SUCCESS) {
  1107. // error loading key file
  1108. }
  1109. ...
  1110. \endcode
  1111. \sa wolfSSL_CTX_use_PrivateKey_buffer
  1112. \sa wolfSSL_CTX_use_PrivateKey_file
  1113. \sa wolfSSL_use_PrivateKey_buffer
  1114. \sa wc_CryptoCb_RegisterDevice
  1115. \sa wolfSSL_SetDevId
  1116. */
  1117. int wolfSSL_use_PrivateKey_file(WOLFSSL* ssl, const char* file, int format);
  1118. /*!
  1119. \ingroup openSSL
  1120. \brief この関数は、証明書チェーンをSSLセッションWOLFSSL構造体)にロードします。
  1121. 証明書チェーンを含むファイルは引数fileによって提供され、PEM形式の証明書を含める必要があります。
  1122. この関数は、MAX_CHAIN_DEPTH(既定で9、internal.hで定義されている)証明書に加えて、サブジェクト証明書を処理します。
  1123. \return SSL_SUCCESS 成功時に返されます。
  1124. \return SSL_FAILURE 関数呼び出しが失敗した場合に返されます。
  1125. 可能な原因には次のようなものがあります:
  1126. ファイルが誤った形式、または引数formatを使用して誤った形式が与えられた、
  1127. メモリ不足状態が発生した、ファイルでbase16のデコードが失敗した
  1128. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  1129. \param file WOLFSSL構造体にロードされる証明書を含むファイルの名前へのポインタ。
  1130. 証明書はPEM形式でなければなりません。
  1131. _Example_
  1132. \code
  1133. int ret = 0;
  1134. WOLFSSL* ctx;
  1135. ...
  1136. ret = wolfSSL_use_certificate_chain_file(ssl, “./cert-chain.pem”);
  1137. if (ret != SSL_SUCCESS) {
  1138. // error loading cert file
  1139. }
  1140. ...
  1141. \endcode
  1142. \sa wolfSSL_CTX_use_certificate_chain_file
  1143. \sa wolfSSL_CTX_use_certificate_chain_buffer
  1144. \sa wolfSSL_use_certificate_chain_buffer
  1145. */
  1146. int wolfSSL_use_certificate_chain_file(WOLFSSL* ssl, const char *file);
  1147. /*!
  1148. \ingroup openSSL
  1149. \brief この関数は、SSL接続で使用されているRSA秘密鍵をSSLセッション(WOLFSSL構造体)にロードします。
  1150. この関数は、wolfSSLがOpenSSL互換APIを有効(--enable-openSSlExtra、#define OPENSSL_EXTRA)でビルドされている場合にのみ利用可能で、
  1151. より一般的に使用されるwolfSSL_use_PrivateKey_file()関数と同じです。
  1152. 引数fileには、RSA秘密鍵ファイルへのポインタが、フォーマットで指定された形式で含まれています。
  1153. \return SSL_SUCCESS 成功時に返されます。
  1154. \return SSL_FAILURE 関数呼び出しが失敗した場合に返されます。
  1155. 可能な原因には次のようなものがあります:
  1156. ファイルが誤った形式、または引数formatを使用して誤った形式が与えられた、
  1157. メモリ不足状態が発生した、ファイルでBase16のデコードが失敗した
  1158. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  1159. _Example_
  1160. \code
  1161. int ret = 0;
  1162. WOLFSSL* ssl;
  1163. ...
  1164. ret = wolfSSL_use_RSAPrivateKey_file(ssl, “./server-key.pem”,
  1165. SSL_FILETYPE_PEM);
  1166. if (ret != SSL_SUCCESS) {
  1167. // error loading private key file
  1168. }
  1169. ...
  1170. \endcode
  1171. \sa wolfSSL_CTX_use_RSAPrivateKey_file
  1172. \sa wolfSSL_CTX_use_PrivateKey_buffer
  1173. \sa wolfSSL_CTX_use_PrivateKey_file
  1174. \sa wolfSSL_use_PrivateKey_buffer
  1175. \sa wolfSSL_use_PrivateKey_file
  1176. */
  1177. int wolfSSL_use_RSAPrivateKey_file(WOLFSSL* ssl, const char* file, int format);
  1178. /*!
  1179. \ingroup CertsKeys
  1180. \brief この関数はwolfSSL_CTX_load_verify_locationsと似ていますが、
  1181. DERフォーマットされたCAファイルをSSLコンテキスト(WOLFSSL_CTX)にロードすることを許可します。
  1182. それはまだPEM形式のCAファイルをロードするためにも使用されるかもしれません。
  1183. これらの証明書は、信頼できるルート証明書として扱われ、SSLハンドシェイク中にピアから受信した証明書を検証するために使用されます。
  1184. ファイル引数によって提供されるルート証明書ファイルは、単一の証明書または複数の証明書を含むファイルでも可能。
  1185. 複数のCA証明書が同じファイルに含まれている場合、wolfSSLはファイルに表示されているのと同じ順序でそれらをロードします。
  1186. 引数formatは、証明書がSSL_FILETYPE_PEMまたはSSL_FILETYPE_ASN1(DER)のいずれかにある形式を指定します。
  1187. wolfSSL_CTX_load_verify_locationsとは異なり、この関数は特定のディレクトリパスからのCA証明書のロードを許可しません。
  1188. この関数は、wolfSSLライブラリがWOLFSSL_DER_LOADマクロが定義された状態でビルドされたときにのみ利用可能です。
  1189. \return SSL_SUCCESS 成功時に返されます。
  1190. \return SSL_FAILURE 失敗すると返されます。
  1191. \param ctx wolfSSL_CTX_new()を使用して作成されたWOLFSSL_CTX構造体へのポインタ
  1192. \param file wolfssl SSLコンテキストにロードされるCA証明書を含むファイルの名前をフォーマットで指定された形式で指定します。
  1193. _Example_
  1194. \code
  1195. int ret = 0;
  1196. WOLFSSL_CTX* ctx;
  1197. ...
  1198. ret = wolfSSL_CTX_der_load_verify_locations(ctx, “./ca-cert.der”,
  1199. SSL_FILETYPE_ASN1);
  1200. if (ret != SSL_SUCCESS) {
  1201. // error loading CA certs
  1202. }
  1203. ...
  1204. \endcode
  1205. \sa wolfSSL_CTX_load_verify_locations
  1206. \sa wolfSSL_CTX_load_verify_buffer
  1207. */
  1208. int wolfSSL_CTX_der_load_verify_locations(WOLFSSL_CTX* ctx,
  1209. const char* file, int format);
  1210. /*!
  1211. \ingroup Setup
  1212. \brief この関数は、所望のSSL/TLSプロトコル用メソッド構造体を引数に取って、新しいSSLコンテキストを作成します。
  1213. \return pointer 成功した場合、新しく作成されたWOLFSSL_CTX構造体へのポインタを返します。
  1214. \return NULL 失敗時に返されます。
  1215. _Example_
  1216. \code
  1217. WOLFSSL_CTX* ctx = 0;
  1218. WOLFSSL_METHOD* method = 0;
  1219. method = wolfSSLv3_client_method();
  1220. if (method == NULL) {
  1221. // unable to get method
  1222. }
  1223. ctx = wolfSSL_CTX_new(method);
  1224. if (ctx == NULL) {
  1225. // context creation failed
  1226. }
  1227. \endcode
  1228. \sa wolfSSL_new
  1229. */
  1230. WOLFSSL_CTX* wolfSSL_CTX_new(WOLFSSL_METHOD*);
  1231. /*!
  1232. \ingroup Setup
  1233. \brief この関数はすでに作成されたSSLコンテキスト(WOLFSSL_CTX)を入力として、新しいSSLセッション(WOLFSSL)を作成します。
  1234. \return 成功した場合、新しく作成されたWOLFSSL構造体へのポインタを返します。
  1235. \return NULL 失敗時に返されます。
  1236. _Example_
  1237. \code
  1238. #include <wolfssl/ssl.h>
  1239. WOLFSSL* ssl = NULL;
  1240. WOLFSSL_CTX* ctx = 0;
  1241. ctx = wolfSSL_CTX_new(method);
  1242. if (ctx == NULL) {
  1243. // context creation failed
  1244. }
  1245. ssl = wolfSSL_new(ctx);
  1246. if (ssl == NULL) {
  1247. // SSL object creation failed
  1248. }
  1249. \endcode
  1250. \sa wolfSSL_CTX_new
  1251. */
  1252. WOLFSSL* wolfSSL_new(WOLFSSL_CTX*);
  1253. /*!
  1254. \ingroup Setup
  1255. \brief この関数は、SSL接続の入出力機能としてファイル記述子(fd)を割り当てます。通常これはソケットファイル記述子になります。
  1256. \return SSL_SUCCESS 成功時に返されます。
  1257. \return BAD_FUNC_ARG 失敗時に返されます。
  1258. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  1259. \param fd SSL/TLS接続に使用するファイルディスクリプタ
  1260. _Example_
  1261. \code
  1262. int sockfd;
  1263. WOLFSSL* ssl = 0;
  1264. ...
  1265. ret = wolfSSL_set_fd(ssl, sockfd);
  1266. if (ret != SSL_SUCCESS) {
  1267. // failed to set SSL file descriptor
  1268. }
  1269. \endcode
  1270. \sa wolfSSL_CTX_SetIOSend
  1271. \sa wolfSSL_CTX_SetIORecv
  1272. \sa wolfSSL_SetIOReadCtx
  1273. \sa wolfSSL_SetIOWriteCtx
  1274. */
  1275. int wolfSSL_set_fd (WOLFSSL* ssl, int fd);
  1276. /*!
  1277. \ingroup Setup
  1278. \brief この関数はファイルディスクリプタ(fd)をSSLコネクションの入出力手段として設定します。
  1279. 通常はソケットファイルディスクリプタが指定されます。この関数はDTLS専用のAPIであり、ソケットは接続済みとマークされます。
  1280. したがって、与えられたfdに対するrecvfromとsendto呼び出しでのaddrとaddr_lenはNULLに設定されます。
  1281. \return SSL_SUCCESS 成功時に返されます。
  1282. \return BAD_FUNC_ARG 失敗時に返されます。
  1283. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  1284. \param fd SSL/TLSコネクションに使用するファイルディスクリプタ。
  1285. _Example_
  1286. \code
  1287. int sockfd;
  1288. WOLFSSL* ssl = 0;
  1289. ...
  1290. if (connect(sockfd, peer_addr, peer_addr_len) != 0) {
  1291. // handle connect error
  1292. }
  1293. ...
  1294. ret = wolfSSL_set_dtls_fd_connected(ssl, sockfd);
  1295. if (ret != SSL_SUCCESS) {
  1296. // failed to set SSL file descriptor
  1297. }
  1298. \endcode
  1299. \sa wolfSSL_CTX_SetIOSend
  1300. \sa wolfSSL_CTX_SetIORecv
  1301. \sa wolfSSL_SetIOReadCtx
  1302. \sa wolfSSL_SetIOWriteCtx
  1303. \sa wolfDTLS_SetChGoodCb
  1304. */
  1305. int wolfSSL_set_dtls_fd_connected(WOLFSSL* ssl, int fd);
  1306. /*!
  1307. \ingroup Setup
  1308. \brief この関数はDTLS ClientHelloメッセージが正しく処理できた際に呼び出されるコールバック関数を設定します。
  1309. クッキー交換メカニズムを使用する場合(DTLS1.2のHelloVerifyRequest か
  1310. DTLS1.3のクッキー拡張を伴ったHelloRetryRequestのいずれかを使用する場合)には、
  1311. クッキー交換が成功した時点でこのコールバック関数が呼び出されます。
  1312. この機能はひとつのWOLFSSLオブジェクトを新たな接続を待ち受けるリスナーとして使い,
  1313. ClientHelloが検証されたWOLFSSLオブジェクトから絶縁させることができます。
  1314. この場合の検証はクッキー交換かClientHelloが正しいフォーマットになっているかのチェックによってなされます。
  1315. DTLS 1.2:
  1316. https://datatracker.ietf.org/doc/html/rfc6347#section-4.2.1
  1317. DTLS 1.3:
  1318. https://www.rfc-editor.org/rfc/rfc8446#section-4.2.2
  1319. \return SSL_SUCCESS 成功時に返されます。
  1320. \return BAD_FUNC_ARG 失敗時に返されます。
  1321. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  1322. \param fd SSL/TLSコネクションに使用するファイルディスクリプタ。
  1323. _Example_
  1324. \code
  1325. // Called when we have verified a connection
  1326. static int chGoodCb(WOLFSSL* ssl, void* arg)
  1327. {
  1328. // setup peer and file descriptors
  1329. }
  1330. if (wolfDTLS_SetChGoodCb(ssl, chGoodCb, NULL) != WOLFSSL_SUCCESS) {
  1331. // error setting callback
  1332. }
  1333. \endcode
  1334. \sa wolfSSL_set_dtls_fd_connected
  1335. */
  1336. int wolfDTLS_SetChGoodCb(WOLFSSL* ssl, ClientHelloGoodCb cb, void* user_ctx);
  1337. /*!
  1338. \ingroup IO
  1339. \brief この関数は引数で渡された優先順位の暗号名(Cipher)文字列へのポインタを返します。
  1340. \return 成功時には暗号名(Cipher)文字列へのポインタを返します。
  1341. \return 0 引数で渡された優先順位が範囲外かあるいは無効な値であった場合に返されます。
  1342. \param priority 整数値で指定する優先順位
  1343. _Example_
  1344. \code
  1345. printf("The cipher at 1 is %s", wolfSSL_get_cipher_list(1));
  1346. \endcode
  1347. \sa wolfSSL_CIPHER_get_name
  1348. \sa wolfSSL_get_current_cipher
  1349. */
  1350. char* wolfSSL_get_cipher_list(int priority);
  1351. /*!
  1352. \ingroup IO
  1353. \brief この関数はwolfSSで有効化されている暗号名(Cipher)を取得します。
  1354. \return SSL_SUCCESS 関数がエラーなしで実行された場合に返されます。
  1355. \return BAD_FUNC_ARG 引数bufがNULLの場合、または引数lenがゼロ以下の場合に返されます。
  1356. \return BUFFER_E バッファが十分に大きくなく、オーバーフローする可能性がある場合に返されます。
  1357. \param buf 文字列を格納するバッファへのポインタ。
  1358. \param len バッファのサイズ
  1359. _Example_
  1360. \code
  1361. static void ShowCiphers(void){
  1362. char* ciphers;
  1363. int ret = wolfSSL_get_ciphers(ciphers, (int)sizeof(ciphers));
  1364. if(ret == SSL_SUCCES){
  1365. printf(“%s\n”, ciphers);
  1366. }
  1367. }
  1368. \endcode
  1369. \sa GetCipherNames
  1370. \sa wolfSSL_get_cipher_list
  1371. \sa ShowCiphers
  1372. */
  1373. int wolfSSL_get_ciphers(char* buf, int len);
  1374. /*!
  1375. \ingroup IO
  1376. \brief この関数は、引数をwolfSSL_get_cipher_name_internalに渡すことによって、DHE-RSAの形式の暗号名を取得します。
  1377. \return 成功時には一致した暗号スイートの文字列表現を返します。
  1378. \return NULL エラーまたは暗号が見つからない場合に返されます。
  1379. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  1380. _Example_
  1381. \code
  1382. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
  1383. WOLFSSL* ssl = wolfSSL_new(ctx);
  1384. char* cipherS = wolfSSL_get_cipher_name(ssl);
  1385. if(cipher == NULL){
  1386. // There was not a cipher suite matched
  1387. } else {
  1388. // There was a cipher suite matched
  1389. printf(“%s\n”, cipherS);
  1390. }
  1391. \endcode
  1392. \sa wolfSSL_CIPHER_get_name
  1393. \sa wolfSSL_get_current_cipher
  1394. \sa wolfSSL_get_cipher_name_internal
  1395. */
  1396. const char* wolfSSL_get_cipher_name(WOLFSSL* ssl);
  1397. /*!
  1398. \ingroup IO
  1399. \brief この関数は、SSL接続の入出力機能として使用されるファイル記述子(fd)を返します。通常これはソケットファイル記述子になります。
  1400. \return fd 成功時にはSSLセッションに関連つけられているファイル記述子を返します。
  1401. _Example_
  1402. \code
  1403. int sockfd;
  1404. WOLFSSL* ssl = 0;
  1405. ...
  1406. sockfd = wolfSSL_get_fd(ssl);
  1407. ...
  1408. \endcode
  1409. \sa wolfSSL_set_fd
  1410. */
  1411. int wolfSSL_get_fd(const WOLFSSL*);
  1412. /*!
  1413. \ingroup Setup
  1414. \brief この関数は、WOLFSSLオブジェクトに基礎となるI/Oがノンブロックであることを通知します。
  1415. アプリケーションがWOLFSSLオブジェクトを作成した後、ブロッキング以外のソケットで使用する場合は、
  1416. wolfssl_set_using_nonblock()を呼び出します。
  1417. これにより、wolfsslオブジェクトは、EWOULDBLOCKを受信することを意味します。
  1418. \return なし
  1419. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  1420. \param nonblock WOLFSSLオブジェクトにノンブロッキングI/Oを使用することを通知するフラグ。
  1421. 1を指定することでノンブロッキングI/Oを使用することを指定する。
  1422. _Example_
  1423. \code
  1424. WOLFSSL* ssl = 0;
  1425. ...
  1426. wolfSSL_set_using_nonblock(ssl, 1);
  1427. \endcode
  1428. \sa wolfSSL_get_using_nonblock
  1429. \sa wolfSSL_dtls_got_timeout
  1430. \sa wolfSSL_dtls_get_current_timeout
  1431. */
  1432. void wolfSSL_set_using_nonblock(WOLFSSL* ssl, int nonblock);
  1433. /*!
  1434. \ingroup IO
  1435. \brief この機能により、wolfSSLがノンブロッキングI/Oを使用しているかどうかをアプリケーションが判断できます。
  1436. wolfSSLがノンブロッキングI/Oを使用している場合、この関数は1を返します。
  1437. アプリケーションがWOLFSSLオブジェクトを生成した後にwolfSSL_set_using_nonblock()を呼び出してノンブロッキングソケットを使うとこの関数は1を返します。
  1438. これにより、WOLFSSLオブジェクトは、recevfromがタイムアウトせず代わりにEWOULDBLOCKを受信するようになります。
  1439. \return 0 基礎となるI/Oがブロックされています。
  1440. \return 1 基礎となるI/Oは非ブロッキングです。
  1441. _Example_
  1442. \code
  1443. int ret = 0;
  1444. WOLFSSL* ssl = 0;
  1445. ...
  1446. ret = wolfSSL_get_using_nonblock(ssl);
  1447. if (ret == 1) {
  1448. // underlying I/O is non-blocking
  1449. }
  1450. ...
  1451. \endcode
  1452. \sa wolfSSL_set_session
  1453. */
  1454. int wolfSSL_get_using_nonblock(WOLFSSL*);
  1455. /*!
  1456. \ingroup IO
  1457. \brief この関数は、バッファあるいはデータから、SSL接続に対して、szバイトを書き込みます。
  1458. 必要に応じて、wolfSSL_write()の呼び出し時点ではまだwolfSSL_connect()またはwolfSSL_accept()がまだ呼び出されていない場合、SSL/TLSセッションをネゴシエートします。
  1459. wolfSSL_write()は、ブロックとノンブロッキングI/Oの両方で動作します。
  1460. 基礎となる入出力がノンブロッキングに設定されている場合、wolfSSL_write()が要求を満たすことができなかったらwolfSSL_write()は関数呼び出しからすぐに戻ります。
  1461. この場合、wolfSSL_get_error()の呼び出しはSSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEのいずれかを返します。
  1462. その結果、基礎となるI/Oが準備ができたら、呼び出し側プロセスはwolfssl_write()への呼び出しを繰り返す必要があります。
  1463. 基礎となる入出力がブロックされている場合、WolfSSL_WRITE()は、サイズSZのバッファデータが完全に書かれたかエラーが発生したら、戻るだけです。
  1464. \return 成功時には書き込んだバイト数(1以上)を返します。
  1465. \return 0 失敗したときに返されます。特定のエラーコードについてwolfSSL_get_error()を呼び出します。
  1466. \return SSL_FATAL_ERROR エラーが発生したとき、または非ブロッキングソケットを使用するときには、SSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEエラーが受信され、再度WOLFSSL_WRITE()を呼び出す必要がある場合は、障害が発生します。特定のエラーコードを取得するには、wolfSSL_get_error()を使用してください。
  1467. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  1468. \param data ピアに送信されるデータを含んでいるバッファへのポインタ。
  1469. \param sz 送信データを含んでいるバッファのサイズ
  1470. _Example_
  1471. \code
  1472. WOLFSSL* ssl = 0;
  1473. char msg[64] = “hello wolfssl!”;
  1474. int msgSz = (int)strlen(msg);
  1475. int flags;
  1476. int ret;
  1477. ...
  1478. ret = wolfSSL_write(ssl, msg, msgSz);
  1479. if (ret <= 0) {
  1480. // wolfSSL_write() failed, call wolfSSL_get_error()
  1481. }
  1482. \endcode
  1483. \sa wolfSSL_send
  1484. \sa wolfSSL_read
  1485. \sa wolfSSL_recv
  1486. */
  1487. int wolfSSL_write(WOLFSSL* ssl, const void* data, int sz);
  1488. /*!
  1489. \ingroup IO
  1490. \brief この関数は、SSLセッション(ssl)の内部読み取りバッファからszバイトをバッファデータに読み出します。
  1491. 読み取られたバイトは内部受信バッファから削除されます。
  1492. 必要に応じて、wolfSSL_read()の呼び出し時点ではまだwolfSSL_connect()またはwolfSSL_accept()がまだ呼び出されていない場合、SSL/TLSセッションをネゴシエートします。
  1493. SSL/TLSプロトコルは、最大サイズのSSLレコードを使用します(最大レコードサイズは<wolfssl_root> /wolfssl/internal.h)。
  1494. そのため、wolfSSLは、レコードを処理および復号することができる前に、SSLレコード全体を内部的に読み取る必要があります。
  1495. このため、wolfSSL_read()への呼び出しは、呼び出し時に復号された最大バッファサイズを返すことができます。
  1496. 検索され、次回のwolfSSL_read()への呼び出しで復号される内部wolfSSL受信バッファで待機していない追加の復号データがあるかもしれません。
  1497. szが内部読み取りバッファ内のバイト数より大きい場合、wolfSSL_read()は内部読み取りバッファで使用可能なバイトを返します。
  1498. BYTESが内部読み取りバッファにバッファされていない場合は、wolfSSL_read()への呼び出しは次のレコードの処理をトリガーします。
  1499. \return 成功時には読み取られたバイト数(1以上)を返します。
  1500. \return 0 失敗したときに返されます。これは、クリーン(通知アラートを閉じる)シャットダウンまたはピアが接続を閉じただけであることによって発生する可能性があります。
  1501. 特定のエラーコードについてwolfSSL_get_error()を呼び出します。
  1502. \return SSL_FATAL_ERROR エラーが発生したとき、またはノンブロッキングソケットを使用するときに、SSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEエラーが受信され、再度wolfSSL_read()を呼び出す必要がある場合は、障害が発生します。特定のエラーコードを取得するには、wolfSSL_get_error()を使用してください。
  1503. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  1504. \param data wolfSSL_read()が読み取るデータを格納するバッファへのポインタ。
  1505. \param sz バッファに読み取るデータのサイズ
  1506. _Example_
  1507. \code
  1508. WOLFSSL* ssl = 0;
  1509. char reply[1024];
  1510. ...
  1511. input = wolfSSL_read(ssl, reply, sizeof(reply));
  1512. if (input > 0) {
  1513. // “input” number of bytes returned into buffer “reply”
  1514. }
  1515. See wolfSSL examples (client, server, echoclient, echoserver) for more
  1516. complete examples of wolfSSL_read().
  1517. \endcode
  1518. \sa wolfSSL_recv
  1519. \sa wolfSSL_write
  1520. \sa wolfSSL_peek
  1521. \sa wolfSSL_pending
  1522. */
  1523. int wolfSSL_read(WOLFSSL* ssl, void* data, int sz);
  1524. /*!
  1525. \ingroup IO
  1526. \brief この関数はSSLセッション(SSL)内部読み取りバッファからSZバイトをバッファデータにコピーします。この関数は、内部SSLセッション受信バッファ内のデータが削除されていないか変更されていないことを除いて、wolfssl_read()と同じです。必要に応じて、wolfssl_read()のように、wolfssl_peek()はまだwolfssl_connect()またはwolfssl_accept()によってまだ実行されていない場合、wolfssl_peek()はSSL / TLSセッションをネゴシエートします。 SSL/TLSプロトコルは、最大サイズのSSLレコードを使用します(最大レコードサイズは<wolfssl_root> /wolfssl/internal.h)。そのため、WolfSSLは、レコードを処理および復号化することができる前に、SSLレコード全体を内部的に読み取る必要があります。このため、wolfssl_peek()への呼び出しは、呼び出し時に復号化された最大バッファサイズを返すことができます。 wolfssl_peek()/ wolfssl_read()への次の呼び出しで検索および復号化される内部WolfSSL受信バッファ内で待機していない追加の復号化データがあるかもしれません。 SZが内部読み取りバッファ内のバイト数よりも大きい場合、SSL_PEEK()は内部読み取りバッファで使用可能なバイトを返します。バイトが内部読み取りバッファにバッファされていない場合、Wolfssl_peek()への呼び出しは次のレコードの処理をトリガーします。
  1527. \return 成功時には読み取られたバイト数(1以上)を返します。
  1528. \return 0 失敗したときに返されます。これは、クリーン(通知アラートを閉じる)シャットダウンまたはピアが接続を閉じただけであることによって発生する可能性があります。特定のエラーコードについてwolfSSL_get_error()を呼び出します。
  1529. \return SSL_FATAL_ERROR エラーが発生したとき、またはノンブロッキングソケットを使用するときに、SSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEエラーが受信され、再度wolfSSL_peek()を呼び出す必要がある場合は、障害が発生します。特定のエラーコードを取得するには、wolfSSL_get_error()を使用してください。
  1530. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  1531. \param data wolfSSL_peek()がデータを読み取るバッファー。
  1532. \param sz バッファに読み取るデータのサイズ
  1533. _Example_
  1534. \code
  1535. WOLFSSL* ssl = 0;
  1536. char reply[1024];
  1537. ...
  1538. input = wolfSSL_peek(ssl, reply, sizeof(reply));
  1539. if (input > 0) {
  1540. // “input” number of bytes returned into buffer “reply”
  1541. }
  1542. \endcode
  1543. \sa wolfSSL_read
  1544. */
  1545. int wolfSSL_peek(WOLFSSL* ssl, void* data, int sz);
  1546. /*!
  1547. \ingroup IO
  1548. \brief この関数はサーバー側で呼び出され、SSLクライアントがSSL/TLSハンドシェイクを開始するのを待ちます。
  1549. この関数が呼び出されると、基礎となる通信チャネルはすでに設定されています。
  1550. wolfSSL_accept()は、ブロックとノンブロッキングI/Oの両方で動作します。
  1551. 基礎となる入出力がノンブロッキングである場合、wolfSSL_accept()は、基礎となるI/OがwolfSSL_acceptの要求を満たすことができなかったときに戻ります。
  1552. この場合、wolfSSL_get_error()への呼び出しはSSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEのいずれかを生成します。
  1553. 呼び出しプロセスは、読み取り可能なデータが使用可能であり、wolfSSLが停止した場所を拾うときに、wolfSSL_acceptの呼び出しを繰り返す必要があります。
  1554. ノンブロッキングソケットを使用する場合は、何も実行する必要がありますが、select()を使用して必要な条件を確認できます。
  1555. 基礎となるI/Oがブロックされている場合、wolfSSL_accept()はハンドシェイクが終了したら、またはエラーが発生したら戻ります。
  1556. \return SSL_SUCCESS 成功時に返されます。
  1557. \return SSL_FATAL_ERROR エラーが発生した場合に返されます。より詳細なエラーコードを取得するには、wolfSSL_get_error()を呼び出します。
  1558. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  1559. _Example_
  1560. \code
  1561. int ret = 0;
  1562. int err = 0;
  1563. WOLFSSL* ssl;
  1564. char buffer[80];
  1565. ...
  1566. ret = wolfSSL_accept(ssl);
  1567. if (ret != SSL_SUCCESS) {
  1568. err = wolfSSL_get_error(ssl, ret);
  1569. printf(“error = %d, %s\n”, err, wolfSSL_ERR_error_string(err, buffer));
  1570. }
  1571. \endcode
  1572. \sa wolfSSL_get_error
  1573. \sa wolfSSL_connect
  1574. */
  1575. int wolfSSL_accept(WOLFSSL*);
  1576. /*!
  1577. \ingroup Setup
  1578. \brief この関数は、割り当てられたWOLFSSL_CTXオブジェクトを解放します。
  1579. この関数はCTX参照数を減らし、参照カウントが0に達したときにのみコンテキストを解放します。
  1580. \return なし
  1581. \param ctx wolfSSL_CTX_new()を使用して作成されたWOLFSSL_CTX構造体へのポインタ
  1582. _Example_
  1583. \code
  1584. WOLFSSL_CTX* ctx = 0;
  1585. ...
  1586. wolfSSL_CTX_free(ctx);
  1587. \endcode
  1588. \sa wolfSSL_CTX_new
  1589. \sa wolfSSL_new
  1590. \sa wolfSSL_free
  1591. */
  1592. void wolfSSL_CTX_free(WOLFSSL_CTX*);
  1593. /*!
  1594. \ingroup Setup
  1595. \brief この関数は割り当てられたWOLFSSLオブジェクトを解放します。
  1596. \return なし
  1597. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  1598. _Example_
  1599. \code
  1600. #include <wolfssl/ssl.h>
  1601. WOLFSSL* ssl = 0;
  1602. ...
  1603. wolfSSL_free(ssl);
  1604. \endcode
  1605. \sa wolfSSL_CTX_new
  1606. \sa wolfSSL_new
  1607. \sa wolfSSL_CTX_free
  1608. */
  1609. void wolfSSL_free(WOLFSSL*);
  1610. /*!
  1611. \ingroup TLS
  1612. \brief この関数は、引数sslのSSLセッションに対してアクティブなSSL/TLS接続をシャットダウンします。
  1613. この関数は、ピアに"Close Notify"アラートを送信しようとします。
  1614. 呼び出し側アプリケーションは、Peerがその"Close Notify"アラートを応答として送信してくるのを待つか、
  1615. またはwolfSSL_shutdownから呼び出しが戻った時点で(リソースを保存するために)下層の接続を切断するのを待つことができます。
  1616. どちらのオプションもTLS仕様で許されています。シャットダウンした後に下層の接続を再び別のセッションで使用する予定ならば、ピア間で同期を保つために完全な2方向のシャットダウン手順を実行する必要があります。
  1617. wolfSSL_shutdown()は、ブロックとノンブロッキングI/Oの両方で動作します。
  1618. 下層のI/Oがノンブロッキングの場合、wolfSSL_shutdown()が要求を満たすことができなかった場合、wolfSSL_shutdown()はエラーを返します。
  1619. この場合、wolfSSL_get_error()への呼び出しはSSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEのいずれかを生成します。
  1620. その結果、下層のI/Oが準備ができたら、呼び出し側プロセスはwolfSSL_shutdown()への呼び出しを繰り返す必要があります。
  1621. \return SSL_SUCCESS 成功時に返されます。
  1622. \return SSL_SHUTDOWN_NOT_DONE シャットダウンが終了していない場合に返され、関数を再度呼び出す必要があります。
  1623. \return SSL_FATAL_ERROR 失敗したときに返されます。より具体的なエラーコードはwolfSSL_get_error()を呼び出します。
  1624. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  1625. _Example_
  1626. \code
  1627. #include <wolfssl/ssl.h>
  1628. int ret = 0;
  1629. WOLFSSL* ssl = 0;
  1630. ...
  1631. ret = wolfSSL_shutdown(ssl);
  1632. if (ret != 0) {
  1633. // failed to shut down SSL connection
  1634. }
  1635. \endcode
  1636. \sa wolfSSL_free
  1637. \sa wolfSSL_CTX_free
  1638. */
  1639. int wolfSSL_shutdown(WOLFSSL*);
  1640. /*!
  1641. \ingroup IO
  1642. \brief この関数は、書き込み操作のために指定されたフラグを使用してバッファあるいはデータから、SSL接続に対して、szバイトを書き込みます。
  1643. 必要に応じて、wolfSSL_send()の呼び出し時点ではまだwolfSSL_connect()またはwolfSSL_accept()がまだ呼び出されていない場合、SSL/TLSセッションをネゴシエートします。
  1644. wolfSSL_send()は、ブロックとノンブロッキングI/Oの両方で動作します。
  1645. 基礎となる入出力がノンブロッキングに設定されている場合、wolfSSL_send()が要求を満たすことができなかったらwolfSSL_send()は関数呼び出しからすぐに戻ります。
  1646. この場合、wolfSSL_get_error()の呼び出しはSSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEのいずれかを返します。
  1647. その結果、基礎となるI/Oが準備ができたら、呼び出し側プロセスはwolfSSL_send()への呼び出しを繰り返す必要があります。
  1648. 基礎となる入出力がブロックされている場合、wolfSSL_send()は、サイズSZのバッファデータが完全に書かれたかエラーが発生したら、戻るだけです。
  1649. \return 成功時には書き込んだバイト数(1以上)を返します。
  1650. \return 0 失敗したときに返されます。特定のエラーコードについてwolfSSL_get_error()を呼び出します。
  1651. \return SSL_FATAL_ERROR エラーが発生したとき、または非ブロッキングソケットを使用するときには、SSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEエラーが受信され、再度WOLFSSL_WRITE()を呼び出す必要がある場合は、障害が発生します。特定のエラーコードを取得するには、wolfSSL_get_error()を使用してください。
  1652. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  1653. \param data ピアに送信されるデータを含んでいるバッファへのポインタ。
  1654. \param sz 送信データを含んでいるバッファのサイズ
  1655. \param flags 下層のI/Oのsendに対して指定するフラグ
  1656. _Example_
  1657. \code
  1658. WOLFSSL* ssl = 0;
  1659. char msg[64] = “hello wolfssl!”;
  1660. int msgSz = (int)strlen(msg);
  1661. int flags = ... ;
  1662. ...
  1663. input = wolfSSL_send(ssl, msg, msgSz, flags);
  1664. if (input != msgSz) {
  1665. // wolfSSL_send() failed
  1666. }
  1667. \endcode
  1668. \sa wolfSSL_write
  1669. \sa wolfSSL_read
  1670. \sa wolfSSL_recv
  1671. */
  1672. int wolfSSL_send(WOLFSSL* ssl, const void* data, int sz, int flags);
  1673. /*!
  1674. \ingroup IO
  1675. \brief この関数は、基礎となるRECV動作のために指定されたフラグを使用して、SSLセッション(ssl)内部読み取りバッファからszバイトをバッファデータに読み出します。
  1676. 読み取られたバイトは内部受信バッファから削除されます。
  1677. この関数はwolfssl_read()と同じです。
  1678. ただし、アプリケーションが基礎となる読み取り操作のRECVフラグを設定できることを許可します。
  1679. 必要に応じてwolfssl_recv()がwolfssl_connect()またはwolfssl_accept()によってハンドシェイクがまだ実行されていない場合は、SSL/TLSセッションをネゴシエートします。
  1680. SSL/TLSプロトコルは、最大サイズのSSLレコードを使用します(最大レコードサイズは<wolfssl_root> /wolfssl/internal.h)。
  1681. そのため、wolfSSLは、レコードを処理および復号することができる前に、SSLレコード全体を内部的に読み取る必要があります。
  1682. このため、wolfSSL_recv()への呼び出しは、呼び出し時に復号された最大バッファサイズを返すことができるだけです。
  1683. wolfSSL_recv()への次の呼び出しで検索および復号される内部wolfSSL受信バッファで待機していない追加の復号化されたデータがあるかもしれません。
  1684. 引数szが内部読み取りバッファ内のバイト数よりも大きい場合、wolfSSL_recv()は内部読み取りバッファで使用可能なバイトを返します。
  1685. バイトが内部読み取りバッファにバッファされていない場合は、wolfSSL_recv()への呼び出しは次のレコードの処理をトリガーします。
  1686. \return 成功時には読み取られたバイト数(1以上)を返します。
  1687. \return 0 失敗したときに返されます。これは、クリーン(通知アラートを閉じる)シャットダウンまたはピアが接続を閉じただけであることによって発生する可能性があります。特定のエラーコードについてwolfSSL_get_error()を呼び出します。
  1688. \return SSL_FATAL_ERROR エラーが発生した場合、または非ブロッキングソケットを使用するときには、SSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEエラーが発生し、アプリケーションが再びWOLFSSL_RECV()を呼び出す必要があります。特定のエラーコードを取得するには、wolfSSL_get_error()を使用してください。
  1689. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  1690. \param data wolfSSL_recv()がデータを読み取るバッファー。
  1691. \param sz データを読み込むためのバイト数。
  1692. _Example_
  1693. \code
  1694. WOLFSSL* ssl = 0;
  1695. char reply[1024];
  1696. int flags = ... ;
  1697. ...
  1698. input = wolfSSL_recv(ssl, reply, sizeof(reply), flags);
  1699. if (input > 0) {
  1700. // “input” number of bytes returned into buffer “reply”
  1701. }
  1702. \endcode
  1703. \sa wolfSSL_read
  1704. \sa wolfSSL_write
  1705. \sa wolfSSL_peek
  1706. \sa wolfSSL_pending
  1707. */
  1708. int wolfSSL_recv(WOLFSSL* ssl, void* data, int sz, int flags);
  1709. /*!
  1710. \ingroup Debug
  1711. \brief この関数は、直前のAPI関数呼び出し(wolfssl_connect、wolfssl_accept、wolfssl_read、wolfssl_writeなど)がエラーコード(SSL_FAILURE)を呼び出した理由を表す一意のエラーコードを返します。
  1712. 直前の関数の戻り値は、retを介してwolfSSL_get_errorに渡されます。wolfSSL_get_errorは一意のエラーコードを返します。
  1713. wolfSSL_err_error_string()を呼び出して人間が読めるエラー文字列を取得することができます。
  1714. 詳細については、wolfSSL_err_error_string()を参照してください。
  1715. \return 呼び出し成功時、この関数は、直前の関数が失敗した理由を説明する固有のエラーコードを返します。
  1716. \return SSL_ERROR_NONE 引数retが0より大きい場合に返されます。retが0以下の場合、直前のAPIがエラーコードを返すが実際に発生しなかった場合にこの値を返す場合があります。
  1717. 例としては、引数szに0を渡してwolfSSL_read()を呼び出す場合に発生します。
  1718. wolfssl_read()が0を戻した場合は通常エラーを示しますが、この場合はエラーは発生していません。
  1719. 従って、wolfSSL_get_error()がその後呼び出された場合、ssl_error_noneが返されます。
  1720. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  1721. _Example_
  1722. \code
  1723. int err = 0;
  1724. WOLFSSL* ssl;
  1725. char buffer[80];
  1726. ...
  1727. err = wolfSSL_get_error(ssl, 0);
  1728. wolfSSL_ERR_error_string(err, buffer);
  1729. printf(“err = %d, %s\n”, err, buffer);
  1730. \endcode
  1731. \sa wolfSSL_ERR_error_string
  1732. \sa wolfSSL_ERR_error_string_n
  1733. \sa wolfSSL_ERR_print_errors_fp
  1734. \sa wolfSSL_load_error_strings
  1735. */
  1736. int wolfSSL_get_error(WOLFSSL* ssl, int ret);
  1737. /*!
  1738. \ingroup IO
  1739. \brief この関数はアラート履歴を取得します。
  1740. \return SSL_SUCCESS 関数が正常に完了したときに返されます。警告履歴があったか、またはいずれにも、戻り値はSSL_SUCCESSです。
  1741. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  1742. \param h WOLFSSL構造体の"alert_history member" の値が格納される、WOLFSSL_ALERT_HISTORY構造体へのポインタ。
  1743. _Example_
  1744. \code
  1745. WOLFSSL_CTX* ctx = wolfSSL_CTX_new(protocol method);
  1746. WOLFSSL* ssl = wolfSSL_new(ctx);
  1747. WOLFSSL_ALERT_HISTORY* h;
  1748. ...
  1749. wolfSSL_get_alert_history(ssl, h);
  1750. // h now has a copy of the ssl->alert_history contents
  1751. \endcode
  1752. \sa wolfSSL_get_error
  1753. */
  1754. int wolfSSL_get_alert_history(WOLFSSL* ssl, WOLFSSL_ALERT_HISTORY *h);
  1755. /*!
  1756. \ingroup Setup
  1757. \brief この関数は、SSLオブジェクトSSLがSSL/TLS接続を確立する目的で使用するセッションを設定します。
  1758. セッション再開を行う場合、wolfSSL_shutdown()を呼び出す前にwolfSSL_get1_session()を呼び出してセッションオブジェクトを取得し、セッションIDを保存しておく必要があります。
  1759. 後で、アプリケーションは新しいWOLFSSLオブジェクトを作成し、保存したセッションをwolfSSL_set_session()に渡す必要があります。
  1760. その後アプリケーションはwolfSSL_connect()を呼び出し、wolfSSLはセッション再開を試みます。
  1761. wolfSSLサーバーコードでは、デフォルトでセッション再開を許可します。
  1762. wolfSSL_get1_session()によって返されたオブジェクトは、アプリケーションが使用後に解放する必要があります。
  1763. \return SSL_SUCCESS セッションを正常に設定すると返されます。
  1764. \return SSL_FAILURE 失敗した場合に返されます。これはセッションキャッシュが無効になっている、またはセッションがタイムアウトした場合によって発生する可能性があります。
  1765. \return OPENSSL_EXTRAとWOLFSSL_ERROR_CODE_OPENSSLが定義されている場合には、セッションがタイムアウトしていてもSSL_SUCCESSが返されます。
  1766. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  1767. \param session WOLFSSL_SESSION構造体へのポインタ。
  1768. _Example_
  1769. \code
  1770. int ret;
  1771. WOLFSSL* ssl;
  1772. WOLFSSL_SESSION* session;
  1773. ...
  1774. session = wolfSSL_get1_session(ssl);
  1775. if (session == NULL) {
  1776. // failed to get session object from ssl object
  1777. }
  1778. ...
  1779. ret = wolfSSL_set_session(ssl, session);
  1780. if (ret != SSL_SUCCESS) {
  1781. // failed to set the SSL session
  1782. }
  1783. wolfSSL_SESSION_free(session);
  1784. ...
  1785. \endcode
  1786. \sa wolfSSL_get1_session
  1787. */
  1788. int wolfSSL_set_session(WOLFSSL* ssl, WOLFSSL_SESSION* session);
  1789. /*!
  1790. \ingroup IO
  1791. \brief NO_SESSION_CACHE_REFが定義されている場合、この関数はSSLで使用されている現在のセッション(WOLFSSL_SESSION)へのポインタを返します。
  1792. この関数は、WOLFSSL_SESSIONオブジェクトへの永続的なポインタを返します。
  1793. 返されるポインタは、wolfSSL_freeが呼び出されたときに解放されます。
  1794. この呼び出しは、現在のセッションを検査または変更するためにのみ使用されます。
  1795. セッション再開に使用する場合は、wolfSSL_get1_session()を使用することをお勧めします。
  1796. NO_SESSION_CACHE_REFが定義されていない場合の後方互換性のために、この関数はローカルキャッシュに格納されている永続セッションオブジェクトポインタを返します。
  1797. キャッシュサイズは有限であり、アプリケーションがwolfSSL_set_session()を呼び出す時までにセッションオブジェクトが別のSSL接続によって上書きされる危険性があります。
  1798. アプリケーションにNO_SESSION_CACHE_REFを定義し、セッション再開にwolfSSL_get1_session()を使用することをお勧めします。
  1799. \return 現在のSSLセッションオブジェクトへのポインタを返します。
  1800. \return NULL sslがNULLの場合、SSLセッションキャッシュが無効になっている場合、wolfSSLはセッションIDを使用できない、またはミューテックス関数が失敗した場合に返されます。
  1801. _Example_
  1802. \code
  1803. WOLFSSL* ssl;
  1804. WOLFSSL_SESSION* session;
  1805. ...
  1806. session = wolfSSL_get_session(ssl);
  1807. if (session == NULL) {
  1808. // failed to get session pointer
  1809. }
  1810. ...
  1811. \endcode
  1812. \sa wolfSSL_get1_session
  1813. \sa wolfSSL_set_session
  1814. */
  1815. WOLFSSL_SESSION* wolfSSL_get_session(WOLFSSL* ssl);
  1816. /*!
  1817. \ingroup IO
  1818. \brief この機能は、期限切れになったセッションキャッシュからセッションをフラッシュします。
  1819. 時間比較には引数tmが使用されます。
  1820. wolfSSLは現在セッションに静的テーブルを使用しているため、フラッシングは不要です。
  1821. そのため、この機能は現在スタブとして存在しています。
  1822. この関数は、wolfsslがOpenSSL互換層でコンパイルされているときのOpenSSL互換性(ssl_flush_sessions)を提供します。
  1823. \return なし
  1824. \param ctx wolfSSL_CTX_new()を使用して作成されたWOLFSSL_CTX構造体へのポインタ。
  1825. \param tm セッションの有効期限の比較で使用される時間
  1826. _Example_
  1827. \code
  1828. WOLFSSL_CTX* ssl;
  1829. ...
  1830. wolfSSL_flush_sessions(ctx, time(0));
  1831. \endcode
  1832. \sa wolfSSL_get1_session
  1833. \sa wolfSSL_set_session
  1834. */
  1835. void wolfSSL_flush_sessions(WOLFSSL_CTX* ctx, long tm);
  1836. /*!
  1837. \ingroup TLS
  1838. \brief この関数はクライアントセッションをサーバーIDと関連付けます。引数newSessionがオンの場合、既存のセッションは再利用されません。
  1839. \return SSL_SUCCESS 関数がエラーなしで実行された場合に返されます。
  1840. \return BAD_FUNC_ARG 引数sslまたは引数idがNULLの場合、または引数lenがゼロ以下の場合に返されます。
  1841. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  1842. \param id WOLFSSL_SESSION構造体のServerIDメンバーにコピーされるサーバーIDデータへのポインタ。
  1843. \param len サーバーIDデータのサイズ
  1844. \param newSession セッションを再利用するか否かを指定するフラグ。オンの場合、既存のセッションは再利用されません。
  1845. _Example_
  1846. \code
  1847. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol );
  1848. WOLFSSL* ssl = WOLFSSL_new(ctx);
  1849. const byte id[MAX_SIZE]; // or dynamically create space
  1850. int len = 0; // initialize length
  1851. int newSession = 0; // flag to allow
  1852. int ret = wolfSSL_SetServerID(ssl, id, len, newSession);
  1853. if (ret == WOLFSSL_SUCCESS) {
  1854. // The Id was successfully set
  1855. }
  1856. \endcode
  1857. \sa wolfSSL_set_session
  1858. */
  1859. int wolfSSL_SetServerID(WOLFSSL* ssl, const unsigned char* id,
  1860. int len, int newSession);
  1861. /*!
  1862. \ingroup IO
  1863. \brief この関数は、WOLFSSL構造体の指定セッションインデックス値を取得します。
  1864. \return この関数は、WOLFSSL構造体内のSessionIndexを表すint型の値を返します。
  1865. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  1866. _Example_
  1867. \code
  1868. WOLFSSL_CTX_new( protocol method );
  1869. WOLFSSL* ssl = WOLFSSL_new(ctx);
  1870. ...
  1871. int sesIdx = wolfSSL_GetSessionIndex(ssl);
  1872. if(sesIdx < 0 || sesIdx > sizeof(ssl->sessionIndex)/sizeof(int)){
  1873. // You have an out of bounds index number and something is not right.
  1874. }
  1875. \endcode
  1876. \sa wolfSSL_GetSessionAtIndex
  1877. */
  1878. int wolfSSL_GetSessionIndex(WOLFSSL* ssl);
  1879. /*!
  1880. \ingroup IO
  1881. \brief この関数はセッションキャッシュの指定されたインデックスのセッションを取得し、それをメモリにコピーします。
  1882. WOLFSSL_SESSION構造体はセッション情報を保持します。
  1883. \return SSL_SUCCESS 関数が正常に実行され、エラーがスローされなかった場合に返されます。
  1884. \return BAD_MUTEX_E アンロックまたはロックミューテックスエラーが発生した場合に返されます。
  1885. \return SSL_FAILURE 関数が正常に実行されなかった場合に返されます。
  1886. \param idx セッションインデックス値
  1887. \param session WOLFSSL_SESSION構造体へのポインタ
  1888. _Example_
  1889. \code
  1890. int idx; // The index to locate the session.
  1891. WOLFSSL_SESSION* session; // Buffer to copy to.
  1892. ...
  1893. if(wolfSSL_GetSessionAtIndex(idx, session) != SSL_SUCCESS){
  1894. // Failure case.
  1895. }
  1896. \endcode
  1897. \sa UnLockMutex
  1898. \sa LockMutex
  1899. \sa wolfSSL_GetSessionIndex
  1900. */
  1901. int wolfSSL_GetSessionAtIndex(int index, WOLFSSL_SESSION* session);
  1902. /*!
  1903. \ingroup IO
  1904. \brief WOLFSSL_SESSION構造体からピア証明書チェーンを返します。
  1905. \param session WOLFSSL_SESSION構造体へのポインタ
  1906. _Example_
  1907. \code
  1908. WOLFSSL_SESSION* session;
  1909. WOLFSSL_X509_CHAIN* chain;
  1910. ...
  1911. chain = wolfSSL_SESSION_get_peer_chain(session);
  1912. if(!chain){
  1913. // There was no chain. Failure case.
  1914. }
  1915. \endcode
  1916. \sa wolfSSL_GetSessionAtIndex
  1917. \sa wolfSSL_GetSessionIndex
  1918. \sa AddSession
  1919. */
  1920. WOLFSSL_X509_CHAIN* wolfSSL_SESSION_get_peer_chain(WOLFSSL_SESSION* session);
  1921. /*!
  1922. \ingroup Setup
  1923. \brief この関数はリモートピアの検証方法を設定し、また証明書検証コールバック関数をSSLコンテキストに登録することもできます。
  1924. 検証コールバックは、検証障害が発生した場合にのみ呼び出されます。
  1925. 検証コールバックが必要な場合は、NULLポインタをverify_callbackに使用できます。
  1926. ピア証明書の検証モードは、論理的またはフラグのリストです。
  1927. 可能なフラグ値は次のとおりです:<br>
  1928. SSL_VERIFY_NONE<br>
  1929. -クライアントモード:クライアントはサーバーから受信した証明書を検証せず、ハンドシェイクは通常どおり続きます。<br>
  1930. -サーバーモード:サーバーはクライアントに証明書要求を送信しません。そのため、クライアント検証は有効になりません。<br>
  1931. SSL_VERIFY_PEER<br>
  1932. -クライアントモード:クライアントはハンドシェイク中にサーバーから受信した証明書を検証します。これはwolfSSLではデフォルトでオンにされます。したがって、このオプションを使用すると効果がありません。<br>
  1933. -サーバーモード:サーバーは証明書要求をクライアントに送信し、受信したクライアント証明書を確認します。<br>
  1934. SSL_VERIFY_FAIL_IF_NO_PEER_CERT<br>
  1935. -クライアントモード:クライアント側で使用されていない場合は効果がありません。<br>
  1936. -サーバーモード:要求されたときにクライアントが証明書の送信に失敗した場合は、サーバー側で検証が失敗します(SSLサーバーのSSL_VERIFY_PEERを使用する場合)。<br>
  1937. SSL_VERIFY_FAIL_EXCEPT_PSK<br>
  1938. -クライアントモード:クライアント側で使用されていない場合は効果がありません。<br>
  1939. -サーバーモード:PSK接続の場合を除き、検証はSSL_VERIFY_FAIL_IF_NO_PEER_CERTと同じです。 PSK接続が行われている場合、接続はピア証明書なしで通過します。<br>
  1940. \return なし
  1941. \param ctx wolfSSL_CTX_new()で作成されたSSLコンテキストへのポインタ。
  1942. \param mode ピアの証明書をどのように検証するかを示すフラグ値
  1943. \param verify_callback 証明書検証が失敗した際に呼び出されるコールバック関数。必要がないならNULLを指定すること。
  1944. _Example_
  1945. \code
  1946. WOLFSSL_CTX* ctx = 0;
  1947. ...
  1948. wolfSSL_CTX_set_verify(ctx, (WOLFSSL_VERIFY_PEER |
  1949. WOLFSSL_VERIFY_FAIL_IF_NO_PEER_CERT), NULL);
  1950. \endcode
  1951. \sa wolfSSL_set_verify
  1952. */
  1953. void wolfSSL_CTX_set_verify(WOLFSSL_CTX* ctx, int mode,
  1954. VerifyCallback verify_callback);
  1955. /*!
  1956. \ingroup Setup
  1957. \brief この関数はリモートピアの検証方法を設定し、また証明書検証コールバック関数をWOLFSSLオブジェクトに登録することもできます。
  1958. 検証コールバックは、検証障害が発生した場合にのみ呼び出されます。
  1959. 検証コールバックが必要な場合は、NULLポインタをverify_callbackに使用できます。
  1960. ピア証明書の検証モードは、論理的またはフラグのリストです。
  1961. 可能なフラグ値は次のとおりです:<br>
  1962. SSL_VERIFY_NONE<br>
  1963. -クライアントモード:クライアントはサーバーから受信した証明書を検証せず、ハンドシェイクは通常どおり続きます。<br>
  1964. -サーバーモード:サーバーはクライアントに証明書要求を送信しません。そのため、クライアント検証は有効になりません。<br>
  1965. SSL_VERIFY_PEER<br>
  1966. -クライアントモード:クライアントはハンドシェイク中にサーバーから受信した証明書を検証します。これはwolfSSLではデフォルトでオンにされます。したがって、このオプションを使用すると効果がありません。<br>
  1967. -サーバーモード:サーバーは証明書要求をクライアントに送信し、受信したクライアント証明書を確認します。<br>
  1968. SSL_VERIFY_FAIL_IF_NO_PEER_CERT<br>
  1969. -クライアントモード:クライアント側で使用されていない場合は効果がありません。<br>
  1970. -サーバーモード:要求されたときにクライアントが証明書の送信に失敗した場合は、サーバー側で検証が失敗します(SSLサーバーのSSL_VERIFY_PEERを使用する場合)。<br>
  1971. SSL_VERIFY_FAIL_EXCEPT_PSK<br>
  1972. -クライアントモード:クライアント側で使用されていない場合は効果がありません。<br>
  1973. -サーバーモード:PSK接続の場合を除き、検証はSSL_VERIFY_FAIL_IF_NO_PEER_CERTと同じです。 PSK接続が行われている場合、接続はピア証明書なしで通過します。<br>
  1974. \return なし
  1975. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  1976. \param mode ピアの証明書をどのように検証するかを示すフラグ値
  1977. \param verify_callback 証明書検証が失敗した際に呼び出されるコールバック関数。必要がないならNULLを指定すること。
  1978. _Example_
  1979. \code
  1980. WOLFSSL* ssl = 0;
  1981. ...
  1982. wolfSSL_set_verify(ssl, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0);
  1983. \endcode
  1984. \sa wolfSSL_CTX_set_verify
  1985. */
  1986. void wolfSSL_set_verify(WOLFSSL* ssl, int mode, VerifyCallback verify_callback);
  1987. /*!
  1988. \ingroup CertsKeys
  1989. \brief この関数は、検証コールバックのためのユーザーCTXオブジェクト情報を格納します。
  1990. \return なし
  1991. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  1992. \param ctx ボイドポインタ。WOLFSSL構造体のverifyCbCtx メンバーにセットされます。
  1993. _Example_
  1994. \code
  1995. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( method );
  1996. WOLFSSL* ssl = wolfSSL_new(ctx);
  1997. (void*)ctx;
  1998. ...
  1999. if(ssl != NULL){
  2000. wolfSSL_SetCertCbCtx(ssl, ctx);
  2001. } else {
  2002. // Error case, the SSL is not initialized properly.
  2003. }
  2004. \endcode
  2005. \sa wolfSSL_CTX_save_cert_cache
  2006. \sa wolfSSL_CTX_restore_cert_cache
  2007. \sa wolfSSL_CTX_set_verify
  2008. */
  2009. void wolfSSL_SetCertCbCtx(WOLFSSL* ssl, void* ctx);
  2010. /*!
  2011. \ingroup CertsKeys
  2012. \brief この関数は、検証コールバックのためのユーザーCTXオブジェクト情報を格納します。
  2013. \return なし
  2014. \param ctx WOLFSSL_CTX構造体へのポインタ。
  2015. \param ctx ボイドポインタ。WOLFSSL_CTX構造体のverifyCbCtx メンバーにセットされます。
  2016. _Example_
  2017. \code
  2018. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( method );
  2019. void* userCtx = NULL; // Assign some user defined context
  2020. ...
  2021. if(ctx != NULL){
  2022. wolfSSL_SetCertCbCtx(ctx, userCtx);
  2023. } else {
  2024. // Error case, the SSL is not initialized properly.
  2025. }
  2026. \endcode
  2027. \sa wolfSSL_CTX_save_cert_cache
  2028. \sa wolfSSL_CTX_restore_cert_cache
  2029. \sa wolfSSL_CTX_set_verify
  2030. */
  2031. void wolfSSL_CTX_SetCertCbCtx(WOLFSSL_CTX* ctx, void* userCtx);
  2032. /*!
  2033. \ingroup IO
  2034. \brief この関数は、wolfSSL_read()によって読み取られるWOLFSSLオブジェクトでバッファされているバイト数を返します。
  2035. \return この関数は、保留中のバイト数を返します。
  2036. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  2037. _Example_
  2038. \code
  2039. int pending = 0;
  2040. WOLFSSL* ssl = 0;
  2041. ...
  2042. pending = wolfSSL_pending(ssl);
  2043. printf(“There are %d bytes buffered and available for reading”, pending);
  2044. \endcode
  2045. \sa wolfSSL_recv
  2046. \sa wolfSSL_read
  2047. \sa wolfSSL_peek
  2048. */
  2049. int wolfSSL_pending(WOLFSSL*);
  2050. /*!
  2051. \ingroup Debug
  2052. \brief この機能はOpenSSL API(SSL_load_error_string)との互換性の目的みで提供してあり処理は行いません。
  2053. \return なし
  2054. \param なし
  2055. _Example_
  2056. \code
  2057. wolfSSL_load_error_strings();
  2058. \endcode
  2059. \sa wolfSSL_get_error
  2060. \sa wolfSSL_ERR_error_string
  2061. \sa wolfSSL_ERR_error_string_n
  2062. \sa wolfSSL_ERR_print_errors_fp
  2063. \sa wolfSSL_load_error_strings
  2064. */
  2065. void wolfSSL_load_error_strings(void);
  2066. /*!
  2067. \ingroup TLS
  2068. \brief この関数はwolfSSL_CTX_new()内で内部的に呼び出されます。
  2069. この関数はwolfSSL_Init()のラッパーで、wolfSSLがOpenSSL互換層でコンパイルされたときのOpenSSL API(ssl_library_init)との互換性の為に存在します。
  2070. wolfSSL_init()は、より一般的に使用されているwolfSSL初期化機能です。
  2071. \return SSL_SUCCESS 成功した場合に返されます。に返されます。
  2072. \return SSL_FATAL_ERROR 失敗したときに返されます。
  2073. _Example_
  2074. \code
  2075. int ret = 0;
  2076. ret = wolfSSL_library_init();
  2077. if (ret != SSL_SUCCESS) {
  2078. failed to initialize wolfSSL
  2079. }
  2080. ...
  2081. \endcode
  2082. \sa wolfSSL_Init
  2083. \sa wolfSSL_Cleanup
  2084. */
  2085. int wolfSSL_library_init(void);
  2086. /*!
  2087. \brief この関数はWOLFSSLオブジェクトレベルでDevice Idをセットします。
  2088. \return WOLFSSL_SUCCESS 成功時に返されます。
  2089. \return BAD_FUNC_ARG sslがNULLの場合に返されます。
  2090. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  2091. \param devId ハードウエアと共に使用する際に指定するID
  2092. _Example_
  2093. \code
  2094. WOLFSSL* ssl;
  2095. int DevId = -2;
  2096. wolfSSL_SetDevId(ssl, devId);
  2097. \endcode
  2098. \sa wolfSSL_CTX_SetDevId
  2099. \sa wolfSSL_CTX_GetDevId
  2100. */
  2101. int wolfSSL_SetDevId(WOLFSSL* ssl, int devId);
  2102. /*!
  2103. \brief この関数はWOLFSSL_CTXレベルでDevice Idをセットします。
  2104. \return WOLFSSL_SUCCESS 成功時に返されます。
  2105. \return BAD_FUNC_ARG sslがNULLの場合に返されます。
  2106. \param ctx wolfSSL_CTX_new()で作成されたSSLコンテキストへのポインタ。
  2107. \param devId ハードウエアと共に使用する際に指定するID
  2108. _Example_
  2109. \code
  2110. WOLFSSL_CTX* ctx;
  2111. int DevId = -2;
  2112. wolfSSL_CTX_SetDevId(ctx, devId);
  2113. \endcode
  2114. \sa wolfSSL_SetDevId
  2115. \sa wolfSSL_CTX_GetDevId
  2116. */
  2117. int wolfSSL_CTX_SetDevId(WOLFSSL_CTX* ctx, int devId);
  2118. /*!
  2119. \brief この関数はWOLFSSL_CTXレベルでDevice Idを取得します。
  2120. \return devId 成功時に返されます。
  2121. \return INVALID_DEVID SSLとCTXの両方がNULLの場合に返されます。
  2122. \param ctx wolfSSL_CTX_new()で作成されたSSLコンテキストへのポインタ。
  2123. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  2124. _Example_
  2125. \code
  2126. WOLFSSL_CTX* ctx;
  2127. wolfSSL_CTX_GetDevId(ctx, ssl);
  2128. \endcode
  2129. \sa wolfSSL_SetDevId
  2130. \sa wolfSSL_CTX_SetDevId
  2131. */
  2132. int wolfSSL_CTX_GetDevId(WOLFSSL_CTX* ctx, WOLFSSL* ssl);
  2133. /*!
  2134. \ingroup Setup
  2135. \brief この関数はSSLセッションキャッシュ機能を有効または無効にします。
  2136. 動作はモードに使用される値によって異なります。
  2137. モードの値は次のとおりです:
  2138. SSL_SESS_CACHE_OFF - セッションキャッシングを無効にします。デフォルトでセッションキャッシングがオンになっています。
  2139. SSL_SESS_CACHE_NO_AUTO_CLEAR - セッションキャッシュのオートフラッシュを無効にします。デフォルトで自動フラッシングはオンになっています。
  2140. \return SSL_SUCCESS 成功に戻ります。
  2141. \param ctx wolfSSL_CTX_new()で作成されたSSLコンテキストへのポインタ。
  2142. \param mode セッションキャッシュの振る舞いを変更する為に使用します。
  2143. _Example_
  2144. \code
  2145. WOLFSSL_CTX* ctx = 0;
  2146. ...
  2147. ret = wolfSSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF);
  2148. if (ret != SSL_SUCCESS) {
  2149. // failed to turn SSL session caching off
  2150. }
  2151. \endcode
  2152. \sa wolfSSL_flush_sessions
  2153. \sa wolfSSL_get1_session
  2154. \sa wolfSSL_set_session
  2155. \sa wolfSSL_get_sessionID
  2156. \sa wolfSSL_CTX_set_timeout
  2157. */
  2158. long wolfSSL_CTX_set_session_cache_mode(WOLFSSL_CTX* ctx, long mode);
  2159. /*!
  2160. \brief この関数はセッションシークレットコールバック関数をセットします。
  2161. SessionSecretCbタイプは次のシグネチャとなっています:int(* sessioneCretcb)(wolfssl * ssl、void * secret、int * secretsz、void * ctx)。
  2162. WOLFSSL構造体のsessionSecretCbメンバーは引数cbに設定されます。
  2163. \return SSL_SUCCESS 関数の実行がエラーを返されなかった場合に返されます。
  2164. \return SSL_FATAL_ERROR WOLFSSL構造がNULLの場合に返されます。
  2165. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  2166. \param cb セッションシークレットコールバック関数ポインタ。
  2167. \param ctx セッションシークレットコールバック関数に渡されるユーザーコンテキスト。
  2168. _Example_
  2169. \code
  2170. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( method );
  2171. WOLFSSL* ssl = wolfSSL_new(ctx);
  2172. // Signature of SessionSecretCb
  2173. int SessionSecretCB (WOLFSSL* ssl, void* secret, int* secretSz,
  2174. void* ctx) = SessionSecretCb;
  2175. int wolfSSL_set_session_secret_cb(ssl, SessionSecretCB, (void*)ssl->ctx){
  2176. // Function body.
  2177. }
  2178. \endcode
  2179. \sa SessionSecretCb
  2180. */
  2181. int wolfSSL_set_session_secret_cb(WOLFSSL* ssl, SessionSecretCb cb, void* ctx);
  2182. /*!
  2183. \ingroup IO
  2184. \brief この関数はセッションキャッシュをファイルに持続します。追加のメモリ使用のため、memsaveは使用されません。
  2185. \return SSL_SUCCESS 関数がエラーなしで実行された場合に返されます。セッションキャッシュはファイルに書き込まれました。
  2186. \return SSL_BAD_FILE FNAMEを開くことができないか、それ以外の場合は破損した場合に返されます。
  2187. \return FWRITE_ERROR XfWriteがファイルへの書き込みに失敗した場合に返されます。
  2188. \return BAD_MUTEX_E ミューテックスロック障害が発生した場合に返されます。
  2189. \param fname 書き込み対象ファイル名へのポインタ。
  2190. _Example_
  2191. \code
  2192. const char* fname;
  2193. ...
  2194. if(wolfSSL_save_session_cache(fname) != SSL_SUCCESS){
  2195. // Fail to write to file.
  2196. }
  2197. \endcode
  2198. \sa XFWRITE
  2199. \sa wolfSSL_restore_session_cache
  2200. \sa wolfSSL_memrestore_session_cache
  2201. */
  2202. int wolfSSL_save_session_cache(const char* fname);
  2203. /*!
  2204. \ingroup IO
  2205. \brief この関数はファイルから永続セッションキャッシュを復元します。追加のメモリ使用のため、memstoreは使用しません。
  2206. \return SSL_SUCCESS 関数がエラーなしで実行された場合に返されます。
  2207. \return SSL_BAD_FILE 関数に渡されたファイルが破損していてXFOPENによって開くことができなかった場合に返されます。
  2208. \return FREAD_ERROR ファイルにXFREADから読み取りエラーが発生した場合に返されます。
  2209. \return CACHE_MATCH_ERROR セッションキャッシュヘッダの一致が失敗した場合に返されます。
  2210. \return BAD_MUTEX_E ミューテックスロック障害が発生した場合に返されます。
  2211. \param fname キャシュを読み取るためのファイル名へのポインタ。
  2212. _Example_
  2213. \code
  2214. const char *fname;
  2215. ...
  2216. if(wolfSSL_restore_session_cache(fname) != SSL_SUCCESS){
  2217. // Failure case. The function did not return SSL_SUCCESS.
  2218. }
  2219. \endcode
  2220. \sa XFREAD
  2221. \sa XFOPEN
  2222. */
  2223. int wolfSSL_restore_session_cache(const char* fname);
  2224. /*!
  2225. \ingroup IO
  2226. \brief この関数はセッションキャッシュをメモリに保持します。
  2227. \return SSL_SUCCESS 関数がエラーなしで実行された場合に返されます。セッションキャッシュはメモリに正常に永続化されました。
  2228. \return BAD_MUTEX_E ミューテックスロックエラーが発生した場合に返されます。
  2229. \return BUFFER_E バッファサイズが小さすぎると返されます。
  2230. \param mem セッションキャッシュのコピー先バッファへのポインタ
  2231. \param sz コピー先バッファのサイズ
  2232. _Example_
  2233. \code
  2234. void* mem;
  2235. int sz; // Max size of the memory buffer.
  2236. if(wolfSSL_memsave_session_cache(mem, sz) != SSL_SUCCESS){
  2237. // Failure case, you did not persist the session cache to memory
  2238. }
  2239. \endcode
  2240. \sa XMEMCPY
  2241. \sa wolfSSL_get_session_cache_memsize
  2242. */
  2243. int wolfSSL_memsave_session_cache(void* mem, int sz);
  2244. /*!
  2245. \ingroup IO
  2246. \brief この関数はメモリから永続セッションキャッシュを復元します。
  2247. \return SSL_SUCCESS 関数がエラーなしで実行された場合に返されます。
  2248. \return BUFFER_E メモリバッファが小さすぎると返されます。
  2249. \return BAD_MUTEX_E セッションキャッシュミューテックスロックが失敗した場合に返されます。
  2250. \return CACHE_MATCH_ERROR セッションキャッシュヘッダの一致が失敗した場合に返されます。
  2251. \param mem セッションキャッシュを保持しているバッファへのポインタ。
  2252. \param sz バッファのサイズ
  2253. _Example_
  2254. \code
  2255. const void* memoryFile;
  2256. int szMf;
  2257. ...
  2258. if(wolfSSL_memrestore_session_cache(memoryFile, szMf) != SSL_SUCCESS){
  2259. // Failure case. SSL_SUCCESS was not returned.
  2260. }
  2261. \endcode
  2262. \sa wolfSSL_save_session_cache
  2263. */
  2264. int wolfSSL_memrestore_session_cache(const void* mem, int sz);
  2265. /*!
  2266. \ingroup IO
  2267. \brief この関数は、セッションキャッシュ保存バッファをどのように大きくするかを返します。
  2268. \return この関数は、セッションキャッシュ保存バッファのサイズを表す整数を返します。
  2269. _Example_
  2270. \code
  2271. int sz = // Minimum size for error checking;
  2272. ...
  2273. if(sz < wolfSSL_get_session_cache_memsize()){
  2274. // Memory buffer is too small
  2275. }
  2276. \endcode
  2277. \sa wolfSSL_memrestore_session_cache
  2278. */
  2279. int wolfSSL_get_session_cache_memsize(void);
  2280. /*!
  2281. \ingroup CertsKeys
  2282. \brief この関数はCertキャッシュをメモリからファイルに書き込みます。
  2283. \return SSL_SUCCESS CM_SaveCertCacheが正常に終了した場合。
  2284. \return BAD_FUNC_ARG 引数のいずれかの引数がNULLの場合に返されます。
  2285. \return SSL_BAD_FILE 証明書キャッシュ保存ファイルを開くことができなかった場合。
  2286. \return BAD_MUTEX_E ロックミューテックスが失敗した場合
  2287. \return MEMORY_E メモリの割り当てに失敗しました。
  2288. \return FWRITE_ERROR 証明書キャッシュファイルの書き込みに失敗しました。
  2289. \param ctx WOLFSSL_CTX構造体へのポインタ、証明書情報を保持します。
  2290. \param fname 出力先ファイル名へのポインタ
  2291. _Example_
  2292. \code
  2293. WOLFSSL_CTX* ctx = WOLFSSL_CTX_new( protocol def );
  2294. const char* fname;
  2295. ...
  2296. if(wolfSSL_CTX_save_cert_cache(ctx, fname)){
  2297. // file was written.
  2298. }
  2299. \endcode
  2300. \sa CM_SaveCertCache
  2301. \sa DoMemSaveCertCache
  2302. */
  2303. int wolfSSL_CTX_save_cert_cache(WOLFSSL_CTX* ctx, const char* fname);
  2304. /*!
  2305. \ingroup CertsKeys
  2306. \brief この関数はファイルから証明書キャッシュを担当します。
  2307. \return SSL_SUCCESS 正常に実行された場合に返されます。
  2308. \return SSL_BAD_FILE XFOPENがXBADFILEを返すと返されます。ファイルが破損しています。
  2309. \return MEMORY_E TEMPバッファの割り当てられたメモリが失敗した場合に返されます。
  2310. \return BAD_FUNC_ARG 引数fnameまたは引数ctxがNULLである場合に返されます。
  2311. \param ctx WOLFSSL_CTX構造体へのポインタ、証明書情報を保持します。
  2312. \param fname 証明書キャッシュを読み取るファイル名へのポインタ。
  2313. _Example_
  2314. \code
  2315. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
  2316. WOLFSSL* ssl = wolfSSL_new(ctx);
  2317. const char* fname = "path to file";
  2318. ...
  2319. if(wolfSSL_CTX_restore_cert_cache(ctx, fname)){
  2320. // check to see if the execution was successful
  2321. }
  2322. \endcode
  2323. \sa CM_RestoreCertCache
  2324. \sa XFOPEN
  2325. */
  2326. int wolfSSL_CTX_restore_cert_cache(WOLFSSL_CTX* ctx, const char* fname);
  2327. /*!
  2328. \ingroup CertsKeys
  2329. \brief この関数は証明書キャッシュをメモリに持続します。
  2330. \return SSL_SUCCESS 機能の実行に成功したことに戻ります。エラーが投げられていません。
  2331. \return BAD_MUTEX_E WOLFSSL_CERT_MANAGER構造体のcaLockメンバー0(ゼロ)ではなかった。
  2332. \return BAD_FUNC_ARG 引数ctx、memがNULLの場合、またはszが0以下の場合に返されます。
  2333. \return BUFFER_E 出力バッファMEMが小さすぎました。
  2334. \param ctx wolfSSL_CTX_new()を使用して作成されたWOLFSSL_CTX構造体へのポインタ。
  2335. \param mem 宛先へのvoidポインタ(出力バッファ)。
  2336. \param sz 出力バッファのサイズ。
  2337. \param used 証明書キャッシュヘッダーのサイズを格納する変数へのポインタ。
  2338. _Example_
  2339. \code
  2340. WOLFSSL_CTX* ctx = WOLFSSL_CTX_new( protocol );
  2341. void* mem;
  2342. int sz;
  2343. int* used;
  2344. ...
  2345. if(wolfSSL_CTX_memsave_cert_cache(ctx, mem, sz, used) != SSL_SUCCESS){
  2346. // The function returned with an error
  2347. }
  2348. \endcode
  2349. \sa DoMemSaveCertCache
  2350. \sa GetCertCacheMemSize
  2351. \sa CM_MemRestoreCertCache
  2352. \sa CM_GetCertCacheMemSize
  2353. */
  2354. int wolfSSL_CTX_memsave_cert_cache(WOLFSSL_CTX* ctx, void* mem, int sz, int* used);
  2355. /*!
  2356. \ingroup Setup
  2357. \brief この関数は証明書キャッシュをメモリから復元します。
  2358. \return SSL_SUCCESS 関数とサブルーチンがエラーなしで実行された場合に返されます。
  2359. \return BAD_FUNC_ARG CTXまたはMEMパラメータがNULLまたはSZパラメータがゼロ以下の場合に返されます。
  2360. \return BUFFER_E CERTキャッシュメモリバッファが小さすぎると戻ります。
  2361. \return CACHE_MATCH_ERROR CERTキャッシュヘッダーの不一致があった場合に返されます。
  2362. \return BAD_MUTEX_E ロックミューテックスが失敗した場合に返されます。
  2363. \param ctx wolfSSL_CTX_new()を使用して作成されたWOLFSSL_CTX構造体へのポインタ。
  2364. \param mem 証明書キャッシュに復元される値を保持しているバッファへのポインタ。
  2365. \param sz バッファのサイズ
  2366. _Example_
  2367. \code
  2368. WOLFSSL_CTX* ctx = WOLFSSL_CTX_new( protocol method );
  2369. WOLFSSL* ssl = WOLFSSL_new(ctx);
  2370. void* mem;
  2371. int sz = (*int) sizeof(mem);
  2372. if(wolfSSL_CTX_memrestore_cert_cache(ssl->ctx, mem, sz)){
  2373. // The success case
  2374. }
  2375. \endcode
  2376. \sa CM_MemRestoreCertCache
  2377. */
  2378. int wolfSSL_CTX_memrestore_cert_cache(WOLFSSL_CTX* ctx, const void* mem, int sz);
  2379. /*!
  2380. \ingroup CertsKeys
  2381. \brief Certificate Cache Saveバッファが必要なサイズを返します。
  2382. \return メモリサイズを返します。
  2383. \return BAD_FUNC_ARG WOLFSSL_CTX構造体がNULLの場合に返されます。
  2384. \return BAD_MUTEX_E ミューテックスロックエラーが発生した場合に返されます。
  2385. \param ctx wolfSSL_CTX_new()で作成されたSSLコンテキストへのポインタ。
  2386. _Example_
  2387. \code
  2388. WOLFSSL_CTX* ctx = WOLFSSL_CTX_new(protocol);
  2389. ...
  2390. int certCacheSize = wolfSSL_CTX_get_cert_cache_memsize(ctx);
  2391. if(certCacheSize != BAD_FUNC_ARG || certCacheSize != BAD_MUTEX_E){
  2392. // Successfully retrieved the memory size.
  2393. }
  2394. \endcode
  2395. \sa CM_GetCertCacheMemSize
  2396. */
  2397. int wolfSSL_CTX_get_cert_cache_memsize(WOLFSSL_CTX* ctx);
  2398. /*!
  2399. \ingroup Setup
  2400. \brief この関数は、与えられたWOLFSSL_CTXに暗号スイートリストを設定します。
  2401. この暗号スイートリストは、このコンテキストを使用して作成された新しいSSLセッション(WolfSSL)のデフォルトリストになります。
  2402. リスト内の暗号は、優先度の高いものの順に順にソートされるべきです。
  2403. wolfSSL_CTX_set_cipher_list()が呼び出される都度、特定のSSLコンテキストの暗号スイートリストを提供されたリストにリセットします。
  2404. 暗号スイートリストはヌル終端されたコロン区切りリストです。
  2405. たとえば、リストの値が「DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:AES256-SHA256」有効な暗号値は、src/internal.cのcipher_names []配列のフルネーム値です。
  2406. (有効な暗号化値の明確なリストの場合はsrc/internal.cをチェックしてください)
  2407. \return SSL_SUCCESS 成功時に返されます。
  2408. \return SSL_FAILURE 失敗した場合に返されます。
  2409. \param ctx wolfSSL_CTX_new()で作成されたSSLコンテキストへのポインタ。
  2410. \param list ヌル終端されたコロン区切りの暗号スイートリスト文字列へのポインタ。
  2411. _Example_
  2412. \code
  2413. WOLFSSL_CTX* ctx = 0;
  2414. ...
  2415. ret = wolfSSL_CTX_set_cipher_list(ctx,
  2416. “DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:AES256-SHA256”);
  2417. if (ret != SSL_SUCCESS) {
  2418. // failed to set cipher suite list
  2419. }
  2420. \endcode
  2421. \sa wolfSSL_set_cipher_list
  2422. \sa wolfSSL_CTX_new
  2423. */
  2424. int wolfSSL_CTX_set_cipher_list(WOLFSSL_CTX* ctx, const char* list);
  2425. /*!
  2426. \ingroup Setup
  2427. \brief この関数は、特定のWolfSSLオブジェクト(SSLセッション)の暗号スイートリストを設定します。
  2428. この暗号スイートリストは、このコンテキストを使用して作成された新しいSSLセッション(WolfSSL)のデフォルトリストになります。
  2429. リスト内の暗号は、優先度の高いものの順に順にソートされるべきです。
  2430. wolfSSL_CTX_set_cipher_list()が呼び出される都度、特定のSSLコンテキストの暗号スイートリストを提供されたリストにリセットします。
  2431. 暗号スイートリストはヌル終端されたコロン区切りリストです。
  2432. たとえば、リストの値が「DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:AES256-SHA256」有効な暗号値は、src/internal.cのcipher_names []配列のフルネーム値です。
  2433. (有効な暗号化値の明確なリストの場合はsrc/internal.cをチェックしてください)
  2434. \return SSL_SUCCESS 機能完了に成功したときに返されます。
  2435. \return SSL_FAILURE 失敗した場合に返されます。
  2436. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  2437. \param list ヌル終端されたコロン区切りの暗号スイートリスト文字列へのポインタ。
  2438. _Example_
  2439. \code
  2440. int ret = 0;
  2441. WOLFSSL* ssl = 0;
  2442. ...
  2443. ret = wolfSSL_set_cipher_list(ssl,
  2444. “DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:AES256-SHA256”);
  2445. if (ret != SSL_SUCCESS) {
  2446. // failed to set cipher suite list
  2447. }
  2448. \endcode
  2449. \sa wolfSSL_CTX_set_cipher_list
  2450. \sa wolfSSL_new
  2451. */
  2452. int wolfSSL_set_cipher_list(WOLFSSL* ssl, const char* list);
  2453. /*!
  2454. \brief この関数はWOLFSSL DTLSオブジェクトに下層のUDP I/Oはノンブロッキングであることを通知します。
  2455. アプリケーションがWOLFSSLオブジェクトを作成した後、ノンブロッキングUDPソケットを使用する場合は、wolfSSL_dtls_set_using_nonblock()を呼び出します。
  2456. これにより、WOLFSSLオブジェクトは、recvfrom呼び出しがタイムアウトせずにEWOULDBLOCKを受信することを意味します。
  2457. \return なし
  2458. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  2459. \param nonblock WOLFSSL構造体にノンブロッキングI/Oを使用していることを指定するフラグ。ノンブロッキングを使用している場合には1を指定、それ以外は0を指定してください。
  2460. _Example_
  2461. \code
  2462. WOLFSSL* ssl = 0;
  2463. ...
  2464. wolfSSL_dtls_set_using_nonblock(ssl, 1);
  2465. \endcode
  2466. \sa wolfSSL_dtls_get_using_nonblock
  2467. \sa wolfSSL_dtls_got_timeout
  2468. \sa wolfSSL_dtls_get_current_timeout
  2469. */
  2470. void wolfSSL_dtls_set_using_nonblock(WOLFSSL* ssl, int nonblock);
  2471. /*!
  2472. \brief この関数はWOLFSSL DTLSオブジェクトが下層にUDPノンブロッキングI/Oを使用しているか否かを取得します。
  2473. WOLFSSLオブジェクトがノンブロッキングI/Oを使用している場合、この関数は1を返します。
  2474. これにより、WOLFSSLオブジェクトは、EWOULDBLOCKを受信することを意味します。
  2475. この機能はDTLSセッションにとってのみ意味があります。
  2476. \return 0 基礎となるI/Oがブロックされています。
  2477. \return 1 基礎となるI/Oはノンブロッキングです。
  2478. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  2479. _Example_
  2480. \code
  2481. int ret = 0;
  2482. WOLFSSL* ssl = 0;
  2483. ...
  2484. ret = wolfSSL_dtls_get_using_nonblock(ssl);
  2485. if (ret == 1) {
  2486. // underlying I/O is non-blocking
  2487. }
  2488. ...
  2489. \endcode
  2490. \sa wolfSSL_dtls_set_using_nonblock
  2491. \sa wolfSSL_dtls_got_timeout
  2492. \sa wolfSSL_dtls_set_using_nonblock
  2493. */
  2494. int wolfSSL_dtls_get_using_nonblock(WOLFSSL* ssl);
  2495. /*!
  2496. \brief この関数は現在のタイムアウト値を秒単位で返します。
  2497. ノンブロッキングソケットを使用する場合、ユーザーコードでは、利用可能なrecvVデータの到着をチェックするタイミングや待つべき時間を知る必要があります。
  2498. この関数によって返される値は、アプリケーションがどのくらい待機するかを示します。
  2499. \return seconds 現在のDTLSタイムアウト値(秒)
  2500. \return NOT_COMPILED_IN wolfSSLがDTLSサポートで構築されていない場合。
  2501. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  2502. _Example_
  2503. \code
  2504. int timeout = 0;
  2505. WOLFSSL* ssl;
  2506. ...
  2507. timeout = wolfSSL_get_dtls_current_timeout(ssl);
  2508. printf(“DTLS timeout (sec) = %d\n”, timeout);
  2509. \endcode
  2510. \sa wolfSSL_dtls
  2511. \sa wolfSSL_dtls_get_peer
  2512. \sa wolfSSL_dtls_got_timeout
  2513. \sa wolfSSL_dtls_set_peer
  2514. */
  2515. int wolfSSL_dtls_get_current_timeout(WOLFSSL* ssl);
  2516. /*!
  2517. \brief この関数はアプリケーションがより早いタイムアウト時間を設定する必要がある場合にtrueを返します。
  2518. ノンブロッキングソケットを使用する場合でユーザーコードで受信データが到着しているか何時チェックするか、
  2519. あるいはどのくらいの時間待てばよいのかを決める必要があります。
  2520. この関数が true を返した場合、ライブラリはすでに通信の中断を検出しましたが、
  2521. 他のピアからのメッセージがまだ送信中の場合に備えて、もう少し待機する必要があることを意味します。
  2522. このタイマーの値を微調整するのはアプリケーション次第ですが、dtls_get_current_timeout()/4が最適です。
  2523. \return true アプリケーションがより早いタイムアウトを設定する必要がある場合に返されます。
  2524. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  2525. \sa wolfSSL_dtls
  2526. \sa wolfSSL_dtls_get_peer
  2527. \sa wolfSSL_dtls_got_timeout
  2528. \sa wolfSSL_dtls_set_peer
  2529. \sa wolfSSL_dtls13_set_send_more_acks
  2530. */
  2531. int wolfSSL_dtls13_use_quick_timeout(WOLFSSL *ssl);
  2532. /*!
  2533. \ingroup Setup
  2534. \brief この関数は、ライブラリが中断を検出したときにすぐに他のピアにACKを送信するかどうかを設定します。
  2535. ACKをすぐに送信すると、遅延は最小限に抑えられますが、必要以上に多くの帯域幅が消費される可能性があります。
  2536. アプリケーションが独自にタイマーを管理しており、このオプションが0に設定されている場合、
  2537. アプリケーションコードはwolfSSL_dtls13_use_quick_timeout()を使用して、
  2538. 遅延したACKを送信するためにより速いタイムアウトを設定する必要があるかどうかを判断できます。
  2539. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  2540. \param value 設定を行う場合には1を行わない場合には0を設定します。
  2541. \sa wolfSSL_dtls
  2542. \sa wolfSSL_dtls_get_peer
  2543. \sa wolfSSL_dtls_got_timeout
  2544. \sa wolfSSL_dtls_set_peer
  2545. \sa wolfSSL_dtls13_use_quick_timeout
  2546. */
  2547. void wolfSSL_dtls13_set_send_more_acks(WOLFSSL *ssl, int value);
  2548. /*!
  2549. \ingroup Setup
  2550. \brief この関数はDTLSタイムアウトを設定します。
  2551. \return SSL_SUCCESS 関数がエラーなしで実行された場合に返されます。SSLのDTLS_TIMEOUT_INITとDTLS_TIMEOUTメンバーが設定されています。
  2552. \return BAD_FUNC_ARG 引数sslがNULLの場合、またはタイムアウトが0以下の場合に返されます。タイムアウト引数が許可されている最大値を超えている場合にも返されます。
  2553. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  2554. \param value タイムアウトオプションを有効にする場合には1を指定し、無効にする場合には0を指定します。
  2555. _Example_
  2556. \code
  2557. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( method );
  2558. WOLFSSL* ssl = wolfSSL_new(ctx);
  2559. int timeout = TIMEOUT;
  2560. ...
  2561. if(wolfSSL_dtls_set_timeout_init(ssl, timeout)){
  2562. // the dtls timeout was set
  2563. } else {
  2564. // Failed to set DTLS timeout.
  2565. }
  2566. \endcode
  2567. \sa wolfSSL_dtls_set_timeout_max
  2568. \sa wolfSSL_dtls_got_timeout
  2569. */
  2570. int wolfSSL_dtls_set_timeout_init(WOLFSSL* ssl, int);
  2571. /*!
  2572. \brief
  2573. \return SSL_SUCCESS 関数がエラーなしで実行された場合に返されます。
  2574. \return BAD_FUNC_ARG wolfssl構造体がNULLの場合、またはTIMEOUT引数がゼロ以下である場合、またはWolfSSL構造体のDTLS_TIMEOUT_INITメンバーよりも小さい場合に返されます。
  2575. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  2576. \param timeout 最大タイムアウト時間
  2577. _Example_
  2578. \code
  2579. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( method );
  2580. WOLFSSL* ssl = wolfSSL_new(ctx);
  2581. int timeout = TIMEOUTVAL;
  2582. ...
  2583. int ret = wolfSSL_dtls_set_timeout_max(ssl);
  2584. if(!ret){
  2585. // Failed to set the max timeout
  2586. }
  2587. \endcode
  2588. \sa wolfSSL_dtls_set_timeout_init
  2589. \sa wolfSSL_dtls_got_timeout
  2590. */
  2591. int wolfSSL_dtls_set_timeout_max(WOLFSSL* ssl, int);
  2592. /*!
  2593. \brief DTLSでノンブロッキングソケットを使用する場合、この関数は送信がタイムアウトしたと考えられる場合に呼び出される必要があります。
  2594. タイムアウト値の調整など、最後の送信を再試行するために必要なアクションを実行します。 時間がかかりすぎると、失敗が返されます。
  2595. \return SSL_SUCCESS 成功時に戻ります
  2596. \return SSL_FATAL_ERROR ピアからの応答を得ることなく、再送信/タイムアウトが多すぎる場合に返されます。
  2597. \return NOT_COMPILED_IN wolfSSLがDTLSサポートでコンパイルされていない場合に返されます。
  2598. _Example_
  2599. \code
  2600. See the following files for usage examples:
  2601. <wolfssl_root>/examples/client/client.c
  2602. <wolfssl_root>/examples/server/server.c
  2603. \endcode
  2604. \sa wolfSSL_dtls_get_current_timeout
  2605. \sa wolfSSL_dtls_get_peer
  2606. \sa wolfSSL_dtls_set_peer
  2607. \sa wolfSSL_dtls
  2608. */
  2609. int wolfSSL_dtls_got_timeout(WOLFSSL* ssl);
  2610. /*!
  2611. \brief DTLSでノンブロッキングソケットを使用する場合、この関数は予想されるタイムアウト値と再送信回数を無視して最後のハンドシェイクフライトを再送信します。
  2612. これは、DTLSを使用しており、タイムアウトや再試行回数も管理する必要があるアプリケーションに役立ちます。
  2613. \return SSL_SUCCESS 成功時に戻ります
  2614. \return SSL_FATAL_ERROR ピアからの応答が得られないまま再送信/タイムアウトが多すぎる場合に返されます。
  2615. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  2616. _Example_
  2617. \code
  2618. int ret = 0;
  2619. WOLFSSL* ssl;
  2620. ...
  2621. ret = wolfSSL_dtls_retransmit(ssl);
  2622. \endcode
  2623. \sa wolfSSL_dtls_get_current_timeout
  2624. \sa wolfSSL_dtls_got_timeout
  2625. \sa wolfSSL_dtls
  2626. */
  2627. int wolfSSL_dtls_retransmit(WOLFSSL* ssl);
  2628. /*!
  2629. \brief DTLSを使用するように構成されているかどうかを取得します。
  2630. \return 1 SSLセッション(SSL)がDTLSを使用するように設定されている場合、この関数は1を返します。
  2631. \return 0 そうでない場合に返されます。
  2632. _Example_
  2633. \code
  2634. int ret = 0;
  2635. WOLFSSL* ssl;
  2636. ...
  2637. ret = wolfSSL_dtls(ssl);
  2638. if (ret) {
  2639. // SSL session has been configured to use DTLS
  2640. }
  2641. \endcode
  2642. \sa wolfSSL_dtls_get_current_timeout
  2643. \sa wolfSSL_dtls_get_peer
  2644. \sa wolfSSL_dtls_got_timeout
  2645. \sa wolfSSL_dtls_set_peer
  2646. */
  2647. int wolfSSL_dtls(WOLFSSL* ssl);
  2648. /*!
  2649. \brief この関数は引数peerで与えられるアドレスをDTLSのピアとしてセットします。
  2650. \return SSL_SUCCESS 成功時に返されます。
  2651. \return SSL_FAILURE 失敗時に返されます。
  2652. \return SSL_NOT_IMPLEMENTED wolfSSLがDTLSをサポートするようにコンパイルされていない場合に返されます。
  2653. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  2654. \param peer ピアのアドレスを含むsockaddr_in構造体へのポインタ。
  2655. \param peerSz sockaddr_in構造体のサイズ。0が指定された場合にはsslに設定されているピアの情報をクリアします。
  2656. _Example_
  2657. \code
  2658. int ret = 0;
  2659. WOLFSSL* ssl;
  2660. sockaddr_in addr;
  2661. ...
  2662. ret = wolfSSL_dtls_set_peer(ssl, &addr, sizeof(addr));
  2663. if (ret != SSL_SUCCESS) {
  2664. // failed to set DTLS peer
  2665. }
  2666. \endcode
  2667. \sa wolfSSL_dtls_get_current_timeout
  2668. \sa wolfSSL_dtls_get_peer
  2669. \sa wolfSSL_dtls_got_timeout
  2670. \sa wolfSSL_dtls
  2671. */
  2672. int wolfSSL_dtls_set_peer(WOLFSSL* ssl, void* peer, unsigned int peerSz);
  2673. /*!
  2674. \brief この関数は、現在のDTLSピアのsockaddr_in(サイズpeerSz)を取得します。
  2675. この関数は、peerSzをSSLセッションに保存されている実際のDTLSピアサイズと比較します。
  2676. ピアアドレスがpeerに収まる場合は、peerSzがピアのサイズに設定されて、ピアのsockaddr_inがpeerにコピーされます。
  2677. \return SSL_SUCCESS 成功時に返されます。
  2678. \return SSL_FAILURE 失敗時に返されます。
  2679. \return SSL_NOT_IMPLEMENTED wolfSSLがDTLSをサポートするようにコンパイルされていない場合に返されます。
  2680. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  2681. \param peer ピアのsockaddr_in構造体を保存するためのバッファへのポインタ。
  2682. \param peerSz サイズを格納する変数。入力時には引数peerで示されるバッファのサイズを指定してください。出力時には実際のsockaddr_in構造体のサイズを返します。
  2683. _Example_
  2684. \code
  2685. int ret = 0;
  2686. WOLFSSL* ssl;
  2687. sockaddr_in addr;
  2688. ...
  2689. ret = wolfSSL_dtls_get_peer(ssl, &addr, sizeof(addr));
  2690. if (ret != SSL_SUCCESS) {
  2691. // failed to get DTLS peer
  2692. }
  2693. \endcode
  2694. \sa wolfSSL_dtls_get_current_timeout
  2695. \sa wolfSSL_dtls_got_timeout
  2696. \sa wolfSSL_dtls_set_peer
  2697. \sa wolfSSL_dtls
  2698. */
  2699. int wolfSSL_dtls_get_peer(WOLFSSL* ssl, void* peer, unsigned int* peerSz);
  2700. /*!
  2701. \ingroup Debug
  2702. \brief この関数は、wolfSSL_get_error()によって返されたエラーコードをより人間が読めるエラー文字列に変換します。
  2703. 引数errNumberは、wolfSSL_get_error()によって返され、引数dataはエラー文字列が配置されるバッファへのポインタです。
  2704. MAX_ERROR_SZで定義されているように、データの最大長はデフォルトで80文字です。
  2705. これはwolfssl/wolfcrypt/error.hで定義されています。
  2706. \return success 正常に完了すると、この関数はdataに返されるのと同じ文字列を返します。
  2707. \return failure 失敗すると、この関数は適切な障害理由、MSGを持つ文字列を返します。
  2708. \param errNumber wolfSSL_get_error()によって返されたエラーコード。
  2709. \param data 人間が読めるエラー文字列を格納したバッファへのポインタ
  2710. _Example_
  2711. \code
  2712. int err = 0;
  2713. WOLFSSL* ssl;
  2714. char buffer[80];
  2715. ...
  2716. err = wolfSSL_get_error(ssl, 0);
  2717. wolfSSL_ERR_error_string(err, buffer);
  2718. printf(“err = %d, %s\n”, err, buffer);
  2719. \endcode
  2720. \sa wolfSSL_get_error
  2721. \sa wolfSSL_ERR_error_string_n
  2722. \sa wolfSSL_ERR_print_errors_fp
  2723. \sa wolfSSL_load_error_strings
  2724. */
  2725. char* wolfSSL_ERR_error_string(unsigned long errNumber, char* data);
  2726. /*!
  2727. \ingroup Debug
  2728. \brief この関数は、wolfssl_err_error_string()のバッファのサイズを指定するバージョンです。
  2729. ここで、引数lenは引数bufに書き込まれ得る最大文字数を指定します。
  2730. wolfSSL_err_error_string()と同様に、この関数はwolfSSL_get_error()から返されたエラーコードをより人間が読めるエラー文字列に変換します。
  2731. 人間が読める文字列はbufに置かれます。
  2732. \return なし
  2733. \param e wolfSSL_get_error()によって返されたエラーコード。
  2734. \param buff eと一致する人間が読めるエラー文字列を含む出力バッファ。
  2735. \param len 出力バッファのサイズ
  2736. _Example_
  2737. \code
  2738. int err = 0;
  2739. WOLFSSL* ssl;
  2740. char buffer[80];
  2741. ...
  2742. err = wolfSSL_get_error(ssl, 0);
  2743. wolfSSL_ERR_error_string_n(err, buffer, 80);
  2744. printf(“err = %d, %s\n”, err, buffer);
  2745. \endcode
  2746. \sa wolfSSL_get_error
  2747. \sa wolfSSL_ERR_error_string
  2748. \sa wolfSSL_ERR_print_errors_fp
  2749. \sa wolfSSL_load_error_strings
  2750. */
  2751. void wolfSSL_ERR_error_string_n(unsigned long e, char* buf,
  2752. unsigned long sz);
  2753. /*!
  2754. \ingroup TLS
  2755. \brief この関数は、Options構造体のcloseNotifyまたはconnResetまたはsentNotifyメンバーのシャットダウン条件をチェックします。
  2756. Options構造体はWOLFSSL構造体内にあります。
  2757. \return 1 SSL_SENT_SHUTDOWNが返されます。
  2758. \return 2 SSL_RECEIVED_SHUTDOWNが返されます。
  2759. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  2760. _Example_
  2761. \code
  2762. #include <wolfssl/ssl.h>
  2763. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
  2764. WOLFSSL* ssl = WOLFSSL_new(ctx);
  2765. int ret;
  2766. ret = wolfSSL_get_shutdown(ssl);
  2767. if(ret == 1){
  2768. SSL_SENT_SHUTDOWN
  2769. } else if(ret == 2){
  2770. SSL_RECEIVED_SHUTDOWN
  2771. } else {
  2772. Fatal error.
  2773. }
  2774. \endcode
  2775. \sa wolfSSL_SESSION_free
  2776. */
  2777. int wolfSSL_get_shutdown(const WOLFSSL* ssl);
  2778. /*!
  2779. \ingroup IO
  2780. \brief この関数は、オプション構造体の再開メンバを返します。フラグはセッションを再利用するかどうかを示します。そうでなければ、新しいセッションを確立する必要があります。
  2781. \return This 関数セッションの再利用のフラグを表すオプション構造に保持されているint型を返します。
  2782. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  2783. _Example_
  2784. \code
  2785. WOLFSSL* ssl = wolfSSL_new(ctx);
  2786. if(!wolfSSL_session_reused(sslResume)){
  2787. // No session reuse allowed.
  2788. }
  2789. \endcode
  2790. \sa wolfSSL_SESSION_free
  2791. \sa wolfSSL_GetSessionIndex
  2792. \sa wolfSSL_memsave_session_cache
  2793. */
  2794. int wolfSSL_session_reused(WOLFSSL* ssl);
  2795. /*!
  2796. \ingroup TLS
  2797. \brief この関数は、接続が確立されているかどうかを確認します。
  2798. \return 0 接続が確立されていない場合、すなわちWolfSSL構造体がNULLまたはハンドシェイクが行われていない場合に返されます。
  2799. \return 1 接続が確立されていない場合は返されます.WolfSSL構造体はNULLまたはハンドシェイクが行われていません。
  2800. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  2801. _Example_
  2802. \code
  2803. #include <wolfssl/ssl.h>
  2804. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
  2805. WOLFSSL* ssl = wolfSSL_new(ctx);
  2806. ...
  2807. if(wolfSSL_is_init_finished(ssl)){
  2808. Handshake is done and connection is established
  2809. }
  2810. \endcode
  2811. \sa wolfSSL_set_accept_state
  2812. \sa wolfSSL_get_keys
  2813. \sa wolfSSL_set_shutdown
  2814. */
  2815. int wolfSSL_is_init_finished(WOLFSSL* ssl);
  2816. /*!
  2817. \ingroup IO
  2818. \brief 文字列として使用されているSSLバージョンを返します。
  2819. \return "SSLv3" SSLv3を使う
  2820. \return "TLSv1" TLSV1を使用する
  2821. \return "TLSv1.1" TLSV1.1を使用する
  2822. \return "TLSv1.2" TLSV1.2を使用する
  2823. \return "TLSv1.3" TLSV1.3を使用する
  2824. \return "DTLS": DTLSを使う
  2825. \return "DTLSv1.2" DTLSV1.2を使用する
  2826. \return "unknown" どのバージョンのTLSが使用されているかを判断するという問題がありました。
  2827. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  2828. _Example_
  2829. \code
  2830. wolfSSL_Init();
  2831. WOLFSSL_CTX* ctx;
  2832. WOLFSSL* ssl;
  2833. WOLFSSL_METHOD method = // Some wolfSSL method
  2834. ctx = wolfSSL_CTX_new(method);
  2835. ssl = wolfSSL_new(ctx);
  2836. printf(wolfSSL_get_version("Using version: %s", ssl));
  2837. \endcode
  2838. \sa wolfSSL_lib_version
  2839. */
  2840. const char* wolfSSL_get_version(WOLFSSL* ssl);
  2841. /*!
  2842. \ingroup IO
  2843. \brief SSLセッションで現在の暗号スイートを返します。
  2844. \return ssl->options.cipherSuite 現在の暗号スイートを表す整数。
  2845. \return 0 提供されているSSLセッションはNULLです。
  2846. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  2847. _Example_
  2848. \code
  2849. wolfSSL_Init();
  2850. WOLFSSL_CTX* ctx;
  2851. WOLFSSL* ssl;
  2852. WOLFSSL_METHOD method = // Some wolfSSL method
  2853. ctx = wolfSSL_CTX_new(method);
  2854. ssl = wolfSSL_new(ctx);
  2855. if(wolfSSL_get_current_cipher_suite(ssl) == 0)
  2856. {
  2857. // Error getting cipher suite
  2858. }
  2859. \endcode
  2860. \sa wolfSSL_CIPHER_get_name
  2861. \sa wolfSSL_get_current_cipher
  2862. \sa wolfSSL_get_cipher_list
  2863. */
  2864. int wolfSSL_get_current_cipher_suite(WOLFSSL* ssl);
  2865. /*!
  2866. \ingroup IO
  2867. \brief この関数は、SSLセッションの現在の暗号へのポインタを返します。
  2868. \return The 関数WolfSSL構造体の暗号メンバーのアドレスを返します。これはwolfssl_icipher構造へのポインタです。
  2869. \return NULL WolfSSL構造がNULLの場合に返されます。
  2870. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  2871. _Example_
  2872. \code
  2873. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
  2874. WOLFSSL* ssl = wolfSSL_new(ctx);
  2875. WOLFSSL_CIPHER* cipherCurr = wolfSSL_get_current_cipher;
  2876. if(!cipherCurr){
  2877. // Failure case.
  2878. } else {
  2879. // The cipher was returned to cipherCurr
  2880. }
  2881. \endcode
  2882. \sa wolfSSL_get_cipher
  2883. \sa wolfSSL_get_cipher_name_internal
  2884. \sa wolfSSL_get_cipher_name
  2885. */
  2886. WOLFSSL_CIPHER* wolfSSL_get_current_cipher(WOLFSSL* ssl);
  2887. /*!
  2888. \ingroup IO
  2889. \brief この関数は、SSLオブジェクト内のCipher Suiteと使用可能なスイートと一致し、文字列表現を返します。
  2890. \return string この関数は、一致した暗号スイートの文字列表現を返します。
  2891. \return none スイートが一致していない場合は「なし」を返します。
  2892. \param cipher WOLFSSL_CIPHER構造体へのポインタ
  2893. _Example_
  2894. \code
  2895. // gets cipher name in the format DHE_RSA ...
  2896. const char* wolfSSL_get_cipher_name_internal(WOLFSSL* ssl){
  2897. WOLFSSL_CIPHER* cipher;
  2898. const char* fullName;
  2899. cipher = wolfSSL_get_curent_cipher(ssl);
  2900. fullName = wolfSSL_CIPHER_get_name(cipher);
  2901. if(fullName){
  2902. // sanity check on returned cipher
  2903. }
  2904. \endcode
  2905. \sa wolfSSL_get_cipher
  2906. \sa wolfSSL_get_current_cipher
  2907. \sa wolfSSL_get_cipher_name_internal
  2908. \sa wolfSSL_get_cipher_name
  2909. */
  2910. const char* wolfSSL_CIPHER_get_name(const WOLFSSL_CIPHER* cipher);
  2911. /*!
  2912. \ingroup IO
  2913. \brief この関数は、SSLオブジェクト内の暗号スイートと使用可能なスイートと一致します。
  2914. \return This 関数Suiteが一致させたString値を返します。スイートが一致していない場合は「なし」を返します。
  2915. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  2916. _Example_
  2917. \code
  2918. #ifdef WOLFSSL_DTLS
  2919. // make sure a valid suite is used
  2920. if(wolfSSL_get_cipher(ssl) == NULL){
  2921. WOLFSSL_MSG(“Can not match cipher suite imported”);
  2922. return MATCH_SUITE_ERROR;
  2923. }
  2924. #endif // WOLFSSL_DTLS
  2925. \endcode
  2926. \sa wolfSSL_CIPHER_get_name
  2927. \sa wolfSSL_get_current_cipher
  2928. */
  2929. const char* wolfSSL_get_cipher(WOLFSSL* ssl);
  2930. /*!
  2931. \ingroup Setup
  2932. \brief この関数は、WOLFSSL構造体からWOLFSSL_SESSIONを参照型として返します。
  2933. これには、wolfSSL_SESSION_freeを呼び出してセッション参照を解除する必要があります。
  2934. WOLFSSL_SESSIONは、セッションの再開を実行するために必要なすべての必要な情報を含み、新しいハンドシェイクなしで接続を再確立します。
  2935. セッションの再開の場合、wolfSSL_shutdown()をセッションオブジェクトに呼び出す前に、アプリケーションはオブジェクトからwolfssl_get1_session()を呼び出して保存する必要があります。
  2936. これはセッションへのポインタを返します。
  2937. その後、アプリケーションは新しいWOLFSSLオブジェクトを作成し、保存したセッションをwolfssl_set_session()に割り当てる必要があります。
  2938. この時点で、アプリケーションはwolfssl_connect()を呼び出し、WolfSSLはセッションを再開しようとします。
  2939. WolfSSLサーバーコードでは、デフォルトでセッションの再開を許可します。
  2940. wolfssl_get1_session()によって返されたオブジェクトは、アプリケーションが使用後は解放される必要があります。
  2941. \return WOLFSSL_SESSION 成功の場合はセッションポインタを返します。
  2942. \return NULL sslがNULLの場合、SSLセッションキャッシュが無効になっている場合、WolfSSLはセッションIDを使用できない、またはミューテックス関数が失敗します。
  2943. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  2944. _Example_
  2945. \code
  2946. WOLFSSL* ssl;
  2947. WOLFSSL_SESSION* ses;
  2948. // attempt/complete handshake
  2949. wolfSSL_connect(ssl);
  2950. ses = wolfSSL_get1_session(ssl);
  2951. // check ses information
  2952. // disconnect / setup new SSL instance
  2953. wolfSSL_set_session(ssl, ses);
  2954. // attempt/resume handshake
  2955. wolfSSL_SESSION_free(ses);
  2956. \endcode
  2957. \sa wolfSSL_new
  2958. \sa wolfSSL_free
  2959. \sa wolfSSL_SESSION_free
  2960. */
  2961. WOLFSSL_SESSION* wolfSSL_get1_session(WOLFSSL* ssl);
  2962. /*!
  2963. \ingroup Setup
  2964. \brief wolfsslv23_client_method()関数は、アプリケーションがクライアントであることを示すために使用され、SSL 3.0~TLS 1.3の間でサーバーでサポートされている最高のプロトコルバージョンをサポートします。この関数は、wolfSSL_CTX_new()を使用してSSL / TLSコンテキストを作成するときに使用される新しいWolfssl_method構造体のメモリを割り当てて初期化します。WolfSSLクライアントとサーバーの両方が堅牢なバージョンのダウングレード機能を持っています。特定のプロトコルバージョンメソッドがどちらの側で使用されている場合は、そのバージョンのみがネゴシエートされたり、エラーが返されます。たとえば、TLSV1を使用し、SSLv3のみに接続しようとするクライアントは、TLSV1.1に接続しても失敗します。この問題を解決するために、wolfsslv23_client_method()関数を使用するクライアントは、サーバーでサポートされている最高のプロトコルバージョンを使用し、必要に応じてSSLv3にダウングレードします。この場合、クライアントはSSLv3 - TLSv1.3を実行しているサーバーに接続できるようになります。
  2965. \return pointer 成功すると、wolfssl_methodへのポインタが返されます。
  2966. \return Failure xmallocを呼び出すときにメモリ割り当てが失敗した場合、基礎となるMalloc()実装の失敗値が返されます(通常はerrnoがENOMEMに設定されます)。
  2967. _Example_
  2968. \code
  2969. WOLFSSL_METHOD* method;
  2970. WOLFSSL_CTX* ctx;
  2971. method = wolfSSLv23_client_method();
  2972. if (method == NULL) {
  2973. // unable to get method
  2974. }
  2975. ctx = wolfSSL_CTX_new(method);
  2976. ...
  2977. \endcode
  2978. \sa wolfSSLv3_client_method
  2979. \sa wolfTLSv1_client_method
  2980. \sa wolfTLSv1_1_client_method
  2981. \sa wolfTLSv1_2_client_method
  2982. \sa wolfTLSv1_3_client_method
  2983. \sa wolfDTLSv1_client_method
  2984. \sa wolfSSL_CTX_new
  2985. */
  2986. WOLFSSL_METHOD* wolfSSLv23_client_method(void);
  2987. /*!
  2988. \ingroup IO
  2989. \brief この関数は、内部メモリバッファの先頭へのバイトポインタを設定するために使用されます。
  2990. \return size 成功すると、バッファのサイズが返されます
  2991. \return SSL_FATAL_ERROR エラーケースに遭遇した場合
  2992. \param bio のメモリバッファを取得するためのWOLFSSL_BIO構造体。
  2993. \param p メモリバッファへのポインタ。
  2994. _Example_
  2995. \code
  2996. WOLFSSL_BIO* bio;
  2997. const byte* p;
  2998. int ret;
  2999. bio = wolfSSL_BIO_new(wolfSSL_BIO_s_mem());
  3000. ret = wolfSSL_BIO_get_mem_data(bio, &p);
  3001. // check ret value
  3002. \endcode
  3003. \sa wolfSSL_BIO_new
  3004. \sa wolfSSL_BIO_s_mem
  3005. \sa wolfSSL_BIO_set_fp
  3006. \sa wolfSSL_BIO_free
  3007. */
  3008. int wolfSSL_BIO_get_mem_data(WOLFSSL_BIO* bio,void* p);
  3009. /*!
  3010. \ingroup IO
  3011. \brief 使用するBIOのファイル記述子を設定します。
  3012. \return SSL_SUCCESS(1) 成功時に返されます。
  3013. \param bio FDを設定するためのWOLFSSL_BIO構造。
  3014. \param fd 使用するファイル記述子。
  3015. \param closeF fdをクローズする際のふるまいを指定するフラグ
  3016. _Example_
  3017. \code
  3018. WOLFSSL_BIO* bio;
  3019. int fd;
  3020. // setup bio
  3021. wolfSSL_BIO_set_fd(bio, fd, BIO_NOCLOSE);
  3022. \endcode
  3023. \sa wolfSSL_BIO_new
  3024. \sa wolfSSL_BIO_free
  3025. */
  3026. long wolfSSL_BIO_set_fd(WOLFSSL_BIO* b, int fd, int flag);
  3027. /*!
  3028. \ingroup IO
  3029. \brief BIOが解放されたときにI/Oストリームを閉じる必要があることを示すために使用されるクローズフラグを設定します。
  3030. \return SSL_SUCCESS(1) 成功時に返されます。
  3031. \param bio WOLFSSL_BIO構造体。
  3032. \param flag I/Oストリームを閉じる必要があることを示すために使用されるクローズフラグ
  3033. _Example_
  3034. \code
  3035. WOLFSSL_BIO* bio;
  3036. // setup bio
  3037. wolfSSL_BIO_set_close(bio, BIO_NOCLOSE);
  3038. \endcode
  3039. \sa wolfSSL_BIO_new
  3040. \sa wolfSSL_BIO_free
  3041. */
  3042. int wolfSSL_BIO_set_close(WOLFSSL_BIO *b, long flag);
  3043. /*!
  3044. \ingroup IO
  3045. \brief この関数はBIO_SOCKETタイプのWOLFSSL_BIO_METHODを取得するために使用されます。
  3046. \return WOLFSSL_BIO_METHOD ソケットタイプであるWOLFSSL_BIO_METHOD構造体へのポインタ
  3047. _Example_
  3048. \code
  3049. WOLFSSL_BIO* bio;
  3050. bio = wolfSSL_BIO_new(wolfSSL_BIO_s_socket);
  3051. \endcode
  3052. \sa wolfSSL_BIO_new
  3053. \sa wolfSSL_BIO_s_mem
  3054. */
  3055. WOLFSSL_BIO_METHOD *wolfSSL_BIO_s_socket(void);
  3056. /*!
  3057. \ingroup IO
  3058. \brief この関数は、WOLFSSL_BIOのライトバッファのサイズを設定するために使用されます。
  3059. 書き込みバッファが以前に設定されている場合、この関数はサイズをリセットするときに解放されます。
  3060. 読み書きインデックスを0にリセットするという点で、wolfSSL_BIO_resetに似ています。
  3061. \return SSL_SUCCESS 書き込みバッファの設定に成功しました。
  3062. \return SSL_FAILURE エラーケースに遭遇した場合
  3063. \param bio FDを設定するためのWOLFSSL_BIO構造。
  3064. \param size バッファサイズ
  3065. _Example_
  3066. \code
  3067. WOLFSSL_BIO* bio;
  3068. int ret;
  3069. bio = wolfSSL_BIO_new(wolfSSL_BIO_s_mem());
  3070. ret = wolfSSL_BIO_set_write_buf_size(bio, 15000);
  3071. // check return value
  3072. \endcode
  3073. \sa wolfSSL_BIO_new
  3074. \sa wolfSSL_BIO_s_mem
  3075. \sa wolfSSL_BIO_free
  3076. */
  3077. int wolfSSL_BIO_set_write_buf_size(WOLFSSL_BIO *b, long size);
  3078. /*!
  3079. \ingroup IO
  3080. \brief これは2つのBIOSを一緒にペアリングするために使用されます。一対のBIOSは、2つの方法パイプと同様に、他方で読み取られることができ、その逆も同様である。BIOSの両方が同じスレッド内にあることが予想されます。この機能はスレッドセーフではありません。2つのBIOSのうちの1つを解放すると、両方ともペアになっています。書き込みバッファサイズが以前に設定されていない場合、それはペアになる前に17000(wolfssl_bio_size)のデフォルトサイズに設定されます。
  3081. \return SSL_SUCCESS 2つのBIOSをうまくペアリングします。
  3082. \return SSL_FAILURE エラーケースに遭遇した場合
  3083. \param b1 ペアを設定するための第一のWOLFSSL_BIO構造体へのポインタ。
  3084. \param b2 第二ののWOLFSSL_BIO構造体へのポインタ。
  3085. _Example_
  3086. \code
  3087. WOLFSSL_BIO* bio;
  3088. WOLFSSL_BIO* bio2;
  3089. int ret;
  3090. bio = wolfSSL_BIO_new(wolfSSL_BIO_s_bio());
  3091. bio2 = wolfSSL_BIO_new(wolfSSL_BIO_s_bio());
  3092. ret = wolfSSL_BIO_make_bio_pair(bio, bio2);
  3093. // check ret value
  3094. \endcode
  3095. \sa wolfSSL_BIO_new
  3096. \sa wolfSSL_BIO_s_mem
  3097. \sa wolfSSL_BIO_free
  3098. */
  3099. int wolfSSL_BIO_make_bio_pair(WOLFSSL_BIO *b1, WOLFSSL_BIO *b2);
  3100. /*!
  3101. \ingroup IO
  3102. \brief この関数は、読み取り要求フラグを0に戻すために使用されます。
  3103. \return SSL_SUCCESS 値を正常に設定します。
  3104. \return SSL_FAILURE エラーケースに遭遇した場合
  3105. \param bio WOLFSSL_BIO構造体へのポインタ。
  3106. _Example_
  3107. \code
  3108. WOLFSSL_BIO* bio;
  3109. int ret;
  3110. ...
  3111. ret = wolfSSL_BIO_ctrl_reset_read_request(bio);
  3112. // check ret value
  3113. \endcode
  3114. \sa wolfSSL_BIO_new, wolfSSL_BIO_s_mem
  3115. \sa wolfSSL_BIO_new, wolfSSL_BIO_free
  3116. */
  3117. int wolfSSL_BIO_ctrl_reset_read_request(WOLFSSL_BIO * bio);
  3118. /*!
  3119. \ingroup IO
  3120. \bri f この関数は、読み取り用のバッファポインタを取得するために使用されます。
  3121. wolfSSL_BIO_nreadとは異なり、内部読み取りインデックスは関数呼び出しから返されたサイズ分進みません。
  3122. 返される値を超えて読み取ると、アレイの境界から読み出される可能性があります。
  3123. \return >=0 成功すると、読み取るバイト数を返します
  3124. \param bio WOLFSSL_BIO構造体へのポインタ。
  3125. \param buf 読み取り用バッファへのポインタのポインタ
  3126. _Example_
  3127. \code
  3128. WOLFSSL_BIO* bio;
  3129. char* bufPt;
  3130. int ret;
  3131. // set up bio
  3132. ret = wolfSSL_BIO_nread0(bio, &bufPt); // read as many bytes as possible
  3133. // handle negative ret check
  3134. // read ret bytes from bufPt
  3135. \endcode
  3136. \sa wolfSSL_BIO_new
  3137. \sa wolfSSL_BIO_nwrite0
  3138. */
  3139. int wolfSSL_BIO_nread0(WOLFSSL_BIO *bio, char **buf);
  3140. /*!
  3141. \ingroup IO
  3142. \biieれは、この関数は、読み取り用のバッファポインタを取得するために使用されます。
  3143. 内部読み取りインデックスは、読み取り元のバッファの先頭に指されているBUFを使用して、関数呼び出しから返されるサイズ分進みます。
  3144. 数numで要求された値よりもバイトが少ない場合、より少ない値が返されます。
  3145. 返される値を超えて読み取ると、アレイの境界から読み出される可能性があります。
  3146. \return >=0 成功すると、読み取るバイト数を返します
  3147. \return WOLFSSL_BIO_ERROR(-1) Return -1を読むものではないエラーケースについて
  3148. \param bio WOLFSSL_BIO構造体へのポインタ。
  3149. \param buf 読み取り配列の先頭に設定するポインタ。
  3150. \param num 読み取りサイズ
  3151. _Example_
  3152. \code
  3153. WOLFSSL_BIO* bio;
  3154. char* bufPt;
  3155. int ret;
  3156. // set up bio
  3157. ret = wolfSSL_BIO_nread(bio, &bufPt, 10); // try to read 10 bytes
  3158. // handle negative ret check
  3159. // read ret bytes from bufPt
  3160. \endcode
  3161. \sa wolfSSL_BIO_new
  3162. \sa wolfSSL_BIO_nwrite
  3163. */
  3164. int wolfSSL_BIO_nread(WOLFSSL_BIO *bio, char **buf, int num);
  3165. /*!
  3166. \ingroup IO
  3167. \brief 関数によって返される数のバイトを書き込むためにバッファーへのポインタを取得します。
  3168. 返されるポインタに追加のバイトを書き込んだ場合、返された値は範囲外の書き込みにつながる可能性があります。
  3169. \return int 返されたバッファポインタに書き込むことができるバイト数を返します。
  3170. \return WOLFSSL_BIO_UNSET(-2) バイオペアの一部ではない場合
  3171. \return WOLFSSL_BIO_ERROR(-1) に書くべき部屋がこれ以上ない場合
  3172. \param bio WOLFSSL_BIO構造に書き込む構造。
  3173. \param buf 書き込むためのバッファへのポインタ。
  3174. \param num 書き込みたいサイズ
  3175. _Example_
  3176. \code
  3177. WOLFSSL_BIO* bio;
  3178. char* bufPt;
  3179. int ret;
  3180. // set up bio
  3181. ret = wolfSSL_BIO_nwrite(bio, &bufPt, 10); // try to write 10 bytes
  3182. // handle negative ret check
  3183. // write ret bytes to bufPt
  3184. \endcode
  3185. \sa wolfSSL_BIO_new
  3186. \sa wolfSSL_BIO_free
  3187. \sa wolfSSL_BIO_nread
  3188. */
  3189. int wolfSSL_BIO_nwrite(WOLFSSL_BIO *bio, char **buf, int num);
  3190. /*!
  3191. \ingroup IO
  3192. \brief バイオを初期状態にリセットします。タイプBIO_BIOの例として、これは読み書きインデックスをリセットします。
  3193. \return 0 バイオのリセットに成功しました。
  3194. \return WOLFSSL_BIO_ERROR(-1) 不良入力または失敗したリセットで返されます。
  3195. \param bio WOLFSSL_BIO構造体へのポインタ。
  3196. _Example_
  3197. \code
  3198. WOLFSSL_BIO* bio;
  3199. // setup bio
  3200. wolfSSL_BIO_reset(bio);
  3201. //use pt
  3202. \endcode
  3203. \sa wolfSSL_BIO_new
  3204. \sa wolfSSL_BIO_free
  3205. */
  3206. int wolfSSL_BIO_reset(WOLFSSL_BIO *bio);
  3207. /*!
  3208. \ingroup IO
  3209. \brief この関数は、指定されたオフセットへファイルポインタを調整します。これはファイルの先頭からのオフセットです。
  3210. \return 0 正常に探しています。
  3211. \return -1 エラーケースに遭遇した場合
  3212. \param bio 設定するWOLFSSL_BIO構造体へのポインタ。
  3213. \param ofs ファイルの先頭からのオフセット
  3214. _Example_
  3215. \code
  3216. WOLFSSL_BIO* bio;
  3217. XFILE fp;
  3218. int ret;
  3219. bio = wolfSSL_BIO_new(wolfSSL_BIO_s_file());
  3220. ret = wolfSSL_BIO_set_fp(bio, &fp);
  3221. // check ret value
  3222. ret = wolfSSL_BIO_seek(bio, 3);
  3223. // check ret value
  3224. \endcode
  3225. \sa wolfSSL_BIO_new
  3226. \sa wolfSSL_BIO_s_mem
  3227. \sa wolfSSL_BIO_set_fp
  3228. \sa wolfSSL_BIO_free
  3229. */
  3230. int wolfSSL_BIO_seek(WOLFSSL_BIO *bio, int ofs);
  3231. /*!
  3232. \ingroup IO
  3233. \brief これはファイルに設定および書き込むために使用されます。現在ファイル内のデータを上書きし、BIOが解放されたときにファイルを閉じるように設定されます。
  3234. \return SSL_SUCCESS ファイルの開きと設定に成功しました。
  3235. \return SSL_FAILURE エラーケースに遭遇した場合
  3236. \param bio ファイルを設定するWOLFSSL_BIO構造体体。
  3237. \param name 書き込み先ファイル名へのポインタ
  3238. _Example_
  3239. \code
  3240. WOLFSSL_BIO* bio;
  3241. int ret;
  3242. bio = wolfSSL_BIO_new(wolfSSL_BIO_s_file());
  3243. ret = wolfSSL_BIO_write_filename(bio, “test.txt”);
  3244. // check ret value
  3245. \endcode
  3246. \sa wolfSSL_BIO_new
  3247. \sa wolfSSL_BIO_s_file
  3248. \sa wolfSSL_BIO_set_fp
  3249. \sa wolfSSL_BIO_free
  3250. */
  3251. int wolfSSL_BIO_write_filename(WOLFSSL_BIO *bio, char *name);
  3252. /*!
  3253. \ingroup IO
  3254. \brief これはファイル値の終わりを設定するために使用されます。一般的な値は予想される正の値と混同されないように-1です。
  3255. \return 0 完了に戻りました
  3256. \param bio ファイル値の終わりを設定するためのWOLFSSL_BIO構造体体。
  3257. \param v bioにセットする値。
  3258. _Example_
  3259. \code
  3260. WOLFSSL_BIO* bio;
  3261. int ret;
  3262. bio = wolfSSL_BIO_new(wolfSSL_BIO_s_mem());
  3263. ret = wolfSSL_BIO_set_mem_eof_return(bio, -1);
  3264. // check ret value
  3265. \endcode
  3266. \sa wolfSSL_BIO_new
  3267. \sa wolfSSL_BIO_s_mem
  3268. \sa wolfSSL_BIO_set_fp
  3269. \sa wolfSSL_BIO_free
  3270. */
  3271. long wolfSSL_BIO_set_mem_eof_return(WOLFSSL_BIO *bio, int v);
  3272. /*!
  3273. \ingroup IO
  3274. \brief これはWolfSSL_BIOメモリポインタのゲッター関数です。
  3275. \return SSL_SUCCESS ポインタSSL_SUCCESSを返す正常に(現在1の値)。
  3276. \return SSL_FAILURE null引数が渡された場合(現在0の値)に渡された場合に返されます。
  3277. \param bio メモリポインタを取得するためのWOLFSSL_BIO構造体へのポインタ。
  3278. \param ptr WOLFSSL_BUF_MEM構造体へのポインタ(現在はchar*となっている)
  3279. _Example_
  3280. \code
  3281. WOLFSSL_BIO* bio;
  3282. WOLFSSL_BUF_MEM* pt;
  3283. // setup bio
  3284. wolfSSL_BIO_get_mem_ptr(bio, &pt);
  3285. //use pt
  3286. \endcode
  3287. \sa wolfSSL_BIO_new
  3288. \sa wolfSSL_BIO_s_mem
  3289. */
  3290. long wolfSSL_BIO_get_mem_ptr(WOLFSSL_BIO *bio, WOLFSSL_BUF_MEM **m);
  3291. /*!
  3292. \ingroup CertsKeys
  3293. \brief この関数はX509の名前をバッファにコピーします。
  3294. \return A WOLFSSL_X509_NAME構造名メンバーのデータが正常に実行された場合、nameメンバーのデータが返されます。
  3295. \param name wolfssl_x509構造へのポインタ。
  3296. \param in WOLFSSL_X509_NAME構造体からコピーされた名前を保持するためのバッファ。
  3297. \param sz バッファの最大サイズ
  3298. _Example_
  3299. \code
  3300. WOLFSSL_X509 x509;
  3301. char* name;
  3302. ...
  3303. name = wolfSSL_X509_NAME_oneline(wolfSSL_X509_get_issuer_name(x509), 0, 0);
  3304. if(name <= 0){
  3305. // There’s nothing in the buffer.
  3306. }
  3307. \endcode
  3308. \sa wolfSSL_X509_get_subject_name
  3309. \sa wolfSSL_X509_get_issuer_name
  3310. \sa wolfSSL_X509_get_isCA
  3311. \sa wolfSSL_get_peer_certificate
  3312. \sa wolfSSL_X509_version
  3313. */
  3314. char* wolfSSL_X509_NAME_oneline(WOLFSSL_X509_NAME* name, char* in, int sz);
  3315. /*!
  3316. \ingroup CertsKeys
  3317. \brief この関数は証明書発行者の名前を返します。
  3318. \return point WOLFSSL_X509構造体の発行者メンバーへのポインタが返されます。
  3319. \return NULL 渡された証明書がNULLの場合
  3320. \param cert WOLFSSL_X509構造体へのポインタ
  3321. _Example_
  3322. \code
  3323. WOLFSSL_X509* x509;
  3324. WOLFSSL_X509_NAME issuer;
  3325. ...
  3326. issuer = wolfSSL_X509_NAME_oneline(wolfSSL_X509_get_issuer_name(x509), 0, 0);
  3327. if(!issuer){
  3328. // NULL was returned
  3329. } else {
  3330. // issuer hods the name of the certificate issuer.
  3331. }
  3332. \endcode
  3333. \sa wolfSSL_X509_get_subject_name
  3334. \sa wolfSSL_X509_get_isCA
  3335. \sa wolfSSL_get_peer_certificate
  3336. \sa wolfSSL_X509_NAME_oneline
  3337. */
  3338. WOLFSSL_X509_NAME* wolfSSL_X509_get_issuer_name(WOLFSSL_X509* cert);
  3339. /*!
  3340. \ingroup CertsKeys
  3341. \brief この関数は、wolfssl_x509構造の件名メンバーを返します。
  3342. \return pointer wolfssl_x509_name構造へのポインタ。WOLFSSL_X509構造体がNULLの場合、または構造体の件名メンバーがNULLの場合、ポインタはNULLになることがあります。
  3343. \param cert WOLFSSL_X509構造体へのポインタ
  3344. _Example_
  3345. \code
  3346. WOLFSSL_X509* cert;
  3347. WOLFSSL_X509_NAME name;
  3348. name = wolfSSL_X509_get_subject_name(cert);
  3349. if(name == NULL){
  3350. // Deal with the NULL cacse
  3351. }
  3352. \endcode
  3353. \sa wolfSSL_X509_get_issuer_name
  3354. \sa wolfSSL_X509_get_isCA
  3355. \sa wolfSSL_get_peer_certificate
  3356. */
  3357. WOLFSSL_X509_NAME* wolfSSL_X509_get_subject_name(WOLFSSL_X509* cert);
  3358. /*!
  3359. \ingroup CertsKeys
  3360. \brief WOLFSSL_X509構造体のisCaメンバーをチェックして値を返します。
  3361. \return isCA WOLFSSL_X509構造体のisCaメンバーの値を返します。
  3362. \return 0 有効なWOLFSSL_X509構造体が渡されない場合に返されます。
  3363. \param cert WOLFSSL_X509構造体へのポインタ
  3364. _Example_
  3365. \code
  3366. WOLFSSL* ssl;
  3367. ...
  3368. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( method );
  3369. WOLFSSL* ssl = wolfSSL_new(ctx);
  3370. ...
  3371. if(wolfSSL_X509_get_isCA(ssl)){
  3372. // This is the CA
  3373. }else {
  3374. // Failure case
  3375. }
  3376. \endcode
  3377. \sa wolfSSL_X509_get_issuer_name
  3378. \sa wolfSSL_X509_get_isCA
  3379. */
  3380. int wolfSSL_X509_get_isCA(WOLFSSL_X509* cert);
  3381. /*!
  3382. \ingroup CertsKeys
  3383. \brief この関数は、渡されたNID値に関連するテキストを取得します。
  3384. \return int テキストバッファのサイズを返します。
  3385. \param name wolfssl_x509_nameテキストを検索する。
  3386. \param nid 検索するNID。
  3387. \param buf 見つかったときにテキストを保持するためのバッファー。
  3388. \param len バッファのサイズ
  3389. _Example_
  3390. \code
  3391. WOLFSSL_X509_NAME* name;
  3392. char buffer[100];
  3393. int bufferSz;
  3394. int ret;
  3395. // get WOLFSSL_X509_NAME
  3396. ret = wolfSSL_X509_NAME_get_text_by_NID(name, NID_commonName,
  3397. buffer, bufferSz);
  3398. //check ret value
  3399. \endcode
  3400. \sa none
  3401. */
  3402. int wolfSSL_X509_NAME_get_text_by_NID(WOLFSSL_X509_NAME* name, int nid,
  3403. char* buf, int len);
  3404. /*!
  3405. \ingroup CertsKeys
  3406. \brief この関数は、WOLFSSL_X509構造体のsigOIDメンバーに格納されている値を返します。
  3407. \return 0 WOLFSSL_X509構造体がNULLの場合に返されます。
  3408. \return int x509オブジェクトから取得された整数値が返されます。
  3409. \param cert WOLFSSL_X509構造体へのポインタ
  3410. _Example_
  3411. \code
  3412. WOLFSSL_X509 x509 = (WOLFSSL_X509*)XMALLOC(sizeof(WOLFSSL_X509), NULL,
  3413. DYNAMIC_TYPE_X509);
  3414. ...
  3415. int x509SigType = wolfSSL_X509_get_signature_type(x509);
  3416. if(x509SigType != EXPECTED){
  3417. // Deal with an unexpected value
  3418. }
  3419. \endcode
  3420. \sa wolfSSL_X509_get_signature
  3421. \sa wolfSSL_X509_version
  3422. \sa wolfSSL_X509_get_der
  3423. \sa wolfSSL_X509_get_serial_number
  3424. \sa wolfSSL_X509_notBefore
  3425. \sa wolfSSL_X509_notAfter
  3426. \sa wolfSSL_X509_free
  3427. */
  3428. int wolfSSL_X509_get_signature_type(WOLFSSL_X509* cert);
  3429. /*!
  3430. \brief この関数はWOLFSSL_X509構造体を解放します。
  3431. \return なし
  3432. \param x509 WOLFSSL_X509構造体へのポインタ
  3433. _Example_
  3434. \code
  3435. WOLFSSL_X509* x509 = (WOLFSSL_X509*)XMALOC(sizeof(WOLFSSL_X509), NULL,
  3436. DYNAMIC_TYPE_X509) ;
  3437. wolfSSL_X509_free(x509);
  3438. \endcode
  3439. \sa wolfSSL_X509_get_signature
  3440. \sa wolfSSL_X509_version
  3441. \sa wolfSSL_X509_get_der
  3442. \sa wolfSSL_X509_get_serial_number
  3443. \sa wolfSSL_X509_notBefore
  3444. \sa wolfSSL_X509_notAfter
  3445. */
  3446. void wolfSSL_X509_free(WOLFSSL_X509* x509);
  3447. /*!
  3448. \ingroup CertsKeys
  3449. \brief x509署名を取得し、それをバッファに保存します。
  3450. \return SSL_SUCCESS 関数が正常に実行された場合に返されます。署名がバッファにロードされます。
  3451. \return SSL_FATAL_ERRROR X509構造体またはBUFSZメンバーがNULLの場合に返します。SIG構造の長さメンバのチェックもある(SIGはX509のメンバーである)。
  3452. \param x509 wolfssl_x509構造へのポインタ。
  3453. \param buf バッファへの文字ポインタ。
  3454. \param bufSz バッファサイズを格納するint型変数へのポインタ
  3455. _Example_
  3456. \code
  3457. WOLFSSL_X509* x509 = (WOLFSSL_X509)XMALOC(sizeof(WOLFSSL_X509), NULL,
  3458. DYNAMIC_TYPE_X509);
  3459. unsigned char* buf; // Initialize
  3460. int* bufSz = sizeof(buf)/sizeof(unsigned char);
  3461. ...
  3462. if(wolfSSL_X509_get_signature(x509, buf, bufSz) != SSL_SUCCESS){
  3463. // The function did not execute successfully.
  3464. } else{
  3465. // The buffer was written to correctly.
  3466. }
  3467. \endcode
  3468. \sa wolfSSL_X509_get_serial_number
  3469. \sa wolfSSL_X509_get_signature_type
  3470. \sa wolfSSL_X509_get_device_type
  3471. */
  3472. int wolfSSL_X509_get_signature(WOLFSSL_X509* x509, unsigned char* buf, int* bufSz);
  3473. /*!
  3474. \ingroup CertsKeys
  3475. \brief この関数は、WOLFSSL_X509_STRE構造体に証明書を追加します。
  3476. \return SSL_SUCCESS 証明書が正常に追加された場合。
  3477. \return SSL_FATAL_ERROR: 証明書が正常に追加されない場合
  3478. \param str 証明書を追加する証明書ストア。
  3479. \param x509 追加するWOLFSSL_X509構造体へのポインタ
  3480. _Example_
  3481. \code
  3482. WOLFSSL_X509_STORE* str;
  3483. WOLFSSL_X509* x509;
  3484. int ret;
  3485. ret = wolfSSL_X509_STORE_add_cert(str, x509);
  3486. //check ret value
  3487. \endcode
  3488. \sa wolfSSL_X509_free
  3489. */
  3490. int wolfSSL_X509_STORE_add_cert(WOLFSSL_X509_STORE* store, WOLFSSL_X509* x509);
  3491. /*!
  3492. \ingroup CertsKeys
  3493. \brief この関数は、WOLFSSL_X509_STORE_CTX構造体のチェーン変数のgetter関数です。現在チェーンは取り込まれていません。
  3494. \return pointer 成功した場合WOLFSSL_STACK(STACK_OF(WOLFSSL_X509))ポインタと同じ
  3495. \return Null 失敗した場合に返されます。
  3496. \param ctx WOLFSSL_X509_STORE_CTX構造体へのポインタ
  3497. _Example_
  3498. \code
  3499. WOLFSSL_STACK* sk;
  3500. WOLFSSL_X509_STORE_CTX* ctx;
  3501. sk = wolfSSL_X509_STORE_CTX_get_chain(ctx);
  3502. //check sk for NULL and then use it. sk needs freed after done.
  3503. \endcode
  3504. \sa wolfSSL_sk_X509_free
  3505. */
  3506. WOLFSSL_STACK* wolfSSL_X509_STORE_CTX_get_chain(
  3507. WOLFSSL_X509_STORE_CTX* ctx);
  3508. /*!
  3509. \ingroup CertsKeys
  3510. \brief この関数は、渡されたWOLFSSL_X509_STORE構造体の動作を変更するためのフラグを取ります。使用されるフラグの例はWOLFSSL_CRL_CHECKです。
  3511. \return SSL_SUCCESS フラグを設定するときにエラーが発生しなかった場合。
  3512. \return <0 障害の際に負の値が返されます。
  3513. \param str フラグを設定する証明書ストア。
  3514. \param flag フラグ
  3515. _Example_
  3516. \code
  3517. WOLFSSL_X509_STORE* str;
  3518. int ret;
  3519. // create and set up str
  3520. ret = wolfSSL_X509_STORE_set_flags(str, WOLFSSL_CRL_CHECKALL);
  3521. If (ret != SSL_SUCCESS) {
  3522. //check ret value and handle error case
  3523. }
  3524. \endcode
  3525. \sa wolfSSL_X509_STORE_new
  3526. \sa wolfSSL_X509_STORE_free
  3527. */
  3528. int wolfSSL_X509_STORE_set_flags(WOLFSSL_X509_STORE* store,
  3529. unsigned long flag);
  3530. /*!
  3531. \ingroup CertsKeys
  3532. \brief この関数はBYTEアレイとして符号化された"not before"要素を返します。
  3533. \return NULL WOLFSSL_X509構造体がNULLの場合に返されます。
  3534. \return byte NetBeforEdataを含むバッファへのポインタが返されます。
  3535. \param x509 WOLFSSL_X509構造体へのポインタ。
  3536. _Example_
  3537. \code
  3538. WOLFSSL_X509* x509 = (WOLFSSL_X509*)XMALLOC(sizeof(WOLFSSL_X509), NULL,
  3539. DYNAMIC_TYPE_X509);
  3540. ...
  3541. byte* notBeforeData = wolfSSL_X509_notBefore(x509);
  3542. \endcode
  3543. \sa wolfSSL_X509_get_signature
  3544. \sa wolfSSL_X509_version
  3545. \sa wolfSSL_X509_get_der
  3546. \sa wolfSSL_X509_get_serial_number
  3547. \sa wolfSSL_X509_notAfter
  3548. \sa wolfSSL_X509_free
  3549. */
  3550. const byte* wolfSSL_X509_notBefore(WOLFSSL_X509* x509);
  3551. /*!
  3552. \ingroup CertsKeys
  3553. \brief この関数は、BYTE配列として符号化された"not after"要素を返します。
  3554. \return NULL WOLFSSL_X509構造体がNULLの場合に返されます。
  3555. \return byte notAfterDataを含むバッファへのポインタが返されます。
  3556. \param x509 WOLFSSL_X509構造体へのポインタ。
  3557. _Example_
  3558. \code
  3559. WOLFSSL_X509* x509 = (WOLFSSL_X509*)XMALLOC(sizeof(WOLFSSL_X509), NULL,
  3560. DYNAMIC_TYPE_X509);
  3561. ...
  3562. byte* notAfterData = wolfSSL_X509_notAfter(x509);
  3563. \endcode
  3564. \sa wolfSSL_X509_get_signature
  3565. \sa wolfSSL_X509_version
  3566. \sa wolfSSL_X509_get_der
  3567. \sa wolfSSL_X509_get_serial_number
  3568. \sa wolfSSL_X509_notBefore
  3569. \sa wolfSSL_X509_free
  3570. */
  3571. const byte* wolfSSL_X509_notAfter(WOLFSSL_X509* x509);
  3572. /*!
  3573. \ingroup Setup
  3574. \brief この関数は、WOLFSSL_ASN1_INTEGER値をWOLFSSL_BIGNUM構造体にコピーするために使用されます。
  3575. \return pointer WOLFSSL_ASN1_INTEGER値を正常にコピーすると、WOLFSSL_BIGNUMポインタが返されます。
  3576. \return Null 失敗時に返されます。
  3577. \param ai WOLFSSL_ASN1_INTEGER構造体へのポインタ
  3578. \param bn もし、既存のWOLFSSL_BIGNUM構造体にコピーしたい場合そのポインタをこの引数で指定します。
  3579. NULLを指定すると新たにWOLFSSL_BIGNUM構造体が生成されて使用されます。
  3580. _Example_
  3581. \code
  3582. WOLFSSL_ASN1_INTEGER* ai;
  3583. WOLFSSL_BIGNUM* bn;
  3584. // create ai
  3585. bn = wolfSSL_ASN1_INTEGER_to_BN(ai, NULL);
  3586. // or if having already created bn and wanting to reuse structure
  3587. // wolfSSL_ASN1_INTEGER_to_BN(ai, bn);
  3588. // check bn is or return value is not NULL
  3589. \endcode
  3590. \sa none
  3591. */
  3592. WOLFSSL_BIGNUM *wolfSSL_ASN1_INTEGER_to_BN(const WOLFSSL_ASN1_INTEGER *ai,
  3593. WOLFSSL_BIGNUM *bn);
  3594. /*!
  3595. \ingroup Setup
  3596. \brief この関数は、WOLFSSL_CTX構造で構築されている内部チェーンに証明書を追加します。
  3597. \return SSL_SUCCESS 証明書の追加に成功したら。
  3598. \return SSL_FAILURE チェーンに証明書を追加することが失敗した場合。
  3599. \param ctx 証明書を追加するためのWOLFSSL_CTX構造。
  3600. \param x509 WOLFSSL_X509構造体へのポインタ。
  3601. _Example_
  3602. \code
  3603. WOLFSSL_CTX* ctx;
  3604. WOLFSSL_X509* x509;
  3605. int ret;
  3606. // create ctx
  3607. ret = wolfSSL_CTX_add_extra_chain_cert(ctx, x509);
  3608. // check ret value
  3609. \endcode
  3610. \sa wolfSSL_CTX_new
  3611. \sa wolfSSL_CTX_free
  3612. */
  3613. long wolfSSL_CTX_add_extra_chain_cert(WOLFSSL_CTX* ctx, WOLFSSL_X509* x509);
  3614. /*!
  3615. \ingroup Setup
  3616. \brief この関数は、WOLFSSL_CTX構造からGet Read Hapeフラグを返します。
  3617. \return flag 成功すると、読み取り先のフラグを返します。
  3618. \return SSL_FAILURE ctxがnullの場合、ssl_failureが返されます。
  3619. \param ctx WOLFSSL_CTX構造体へのポインタ
  3620. _Example_
  3621. \code
  3622. WOLFSSL_CTX* ctx;
  3623. int flag;
  3624. // setup ctx
  3625. flag = wolfSSL_CTX_get_read_ahead(ctx);
  3626. //check flag
  3627. \endcode
  3628. \sa wolfSSL_CTX_new
  3629. \sa wolfSSL_CTX_free
  3630. \sa wolfSSL_CTX_set_read_ahead
  3631. */
  3632. int wolfSSL_CTX_get_read_ahead(WOLFSSL_CTX* ctx);
  3633. /*!
  3634. \ingroup Setup
  3635. \brief この関数は、WOLFSSL_CTX構造内の読み出し先のフラグを設定します。
  3636. \return SSL_SUCCESS ctxが先読みフラグを設定した場合。
  3637. \return SSL_FAILURE ctxがNULLの場合に返されます。
  3638. \param ctx WOLFSSL_CTX構造体へのポインタ
  3639. \param v 先読みフラグ
  3640. _Example_
  3641. \code
  3642. WOLFSSL_CTX* ctx;
  3643. int flag;
  3644. int ret;
  3645. // setup ctx
  3646. ret = wolfSSL_CTX_set_read_ahead(ctx, flag);
  3647. // check return value
  3648. \endcode
  3649. \sa wolfSSL_CTX_new
  3650. \sa wolfSSL_CTX_free
  3651. \sa wolfSSL_CTX_get_read_ahead
  3652. */
  3653. int wolfSSL_CTX_set_read_ahead(WOLFSSL_CTX* ctx, int v);
  3654. /*!
  3655. \ingroup Setup
  3656. \brief この関数はOCSPで使用するオプション引数を設定します。
  3657. \return SSL_FAILURE CTXまたはITのCERT ManagerがNULLの場合。
  3658. \return SSL_SUCCESS 正常に設定されている場合。
  3659. \param ctx WOLFSSL_CTX構造へのポインタ
  3660. \param arg ユーザー引数
  3661. _Example_
  3662. \code
  3663. WOLFSSL_CTX* ctx;
  3664. void* data;
  3665. int ret;
  3666. // setup ctx
  3667. ret = wolfSSL_CTX_set_tlsext_status_arg(ctx, data);
  3668. //check ret value
  3669. \endcode
  3670. \sa wolfSSL_CTX_new
  3671. \sa wolfSSL_CTX_free
  3672. */
  3673. long wolfSSL_CTX_set_tlsext_status_arg(WOLFSSL_CTX* ctx, void* arg);
  3674. /*!
  3675. \ingroup Setup
  3676. \brief この関数は、PRFコールバックに渡すオプションの引数を設定します。
  3677. \return SSL_FAILURE CTXがNULLの場合
  3678. \return SSL_SUCCESS 正常に設定されている場合。
  3679. \param ctx WOLFSSL_CTX構造へのポインタ
  3680. \param arg ユーザー引数
  3681. _Example_
  3682. \code
  3683. WOLFSSL_CTX* ctx;
  3684. void* data;
  3685. int ret;
  3686. // setup ctx
  3687. ret = wolfSSL_CTX_set_tlsext_opaques_prf_input_callback_arg(ctx, data);
  3688. //check ret value
  3689. \endcode
  3690. \sa wolfSSL_CTX_new
  3691. \sa wolfSSL_CTX_free
  3692. */
  3693. long wolfSSL_CTX_set_tlsext_opaque_prf_input_callback_arg(
  3694. WOLFSSL_CTX* ctx, void* arg);
  3695. /*!
  3696. \ingroup Setup
  3697. \brief この関数は、SSLのオプションマスクを設定します。
  3698. いくつかの有効なオプションは、ssl_op_all、ssl_op_cookie_exchange、ssl_op_no_sslv2、ssl_op_no_sslv3、ssl_op_no_tlsv1_1、ssl_op_no_tlsv1_2、ssl_op_no_compressionです。
  3699. \return val SSLに格納されている更新されたオプションマスク値を返します。
  3700. \param s オプションマスクを設定するためのWolfSSL構造。
  3701. \param op オプションマスク。以下の値が指定可能です:<br>
  3702. SSL_OP_ALL<br>
  3703. SSL_OP_COOKIE_EXCHANGE<br>
  3704. SSL_OP_NO_SSLv2<br>
  3705. SSL_OP_NO_SSLv3<br>
  3706. SSL_OP_NO_TLSv1<br>
  3707. SSL_OP_NO_TLSv1_1<br>
  3708. SSL_OP_NO_TLSv1_2<br>
  3709. SSL_OP_NO_COMPRESSION<br>
  3710. _Example_
  3711. \code
  3712. WOLFSSL* ssl;
  3713. unsigned long mask;
  3714. mask = SSL_OP_NO_TLSv1
  3715. mask = wolfSSL_set_options(ssl, mask);
  3716. // check mask
  3717. \endcode
  3718. \sa wolfSSL_new
  3719. \sa wolfSSL_free
  3720. \sa wolfSSL_get_options
  3721. */
  3722. long wolfSSL_set_options(WOLFSSL *s, long op);
  3723. /*!
  3724. \ingroup Setup
  3725. \brief この関数は現在のオプションマスクを返します。
  3726. \return val SSLに格納されているマスク値を返します。
  3727. \param ssl WOLFSSL構造体へのポインタ
  3728. _Example_
  3729. \code
  3730. WOLFSSL* ssl;
  3731. unsigned long mask;
  3732. mask = wolfSSL_get_options(ssl);
  3733. // check mask
  3734. \endcode
  3735. \sa wolfSSL_new
  3736. \sa wolfSSL_free
  3737. \sa wolfSSL_set_options
  3738. */
  3739. long wolfSSL_get_options(const WOLFSSL *ssl);
  3740. /*!
  3741. \ingroup Setup
  3742. \brief この関数は、渡されたデバッグ引数を設定するために使用されます。
  3743. \return SSL_SUCCESS 成功時に返されます。
  3744. \return SSL_FAILURE NULL SSLが渡された場合。
  3745. \param ssl 引数を設定するためのWolfSSL構造。
  3746. \param arg デバッグ引数
  3747. _Example_
  3748. \code
  3749. WOLFSSL* ssl;
  3750. void* args;
  3751. int ret;
  3752. // create ssl object
  3753. ret = wolfSSL_set_tlsext_debug_arg(ssl, args);
  3754. // check ret value
  3755. \endcode
  3756. \sa wolfSSL_new
  3757. \sa wolfSSL_free
  3758. */
  3759. long wolfSSL_set_tlsext_debug_arg(WOLFSSL *ssl, void *arg);
  3760. /*!
  3761. \ingroup openSSL
  3762. \brief この関数は、サーバがOCSPステータス応答(OCSPステイプルとも呼ばれる)を送受信するクライアントアプリケーションが要求されたときに呼び出されます。
  3763. \return 1 成功時に返されます。
  3764. \return 0 エラー時に返されます。
  3765. \param s ssl_new()関数によって作成されたWOLFSSL構造体へのポインタ
  3766. \param type ssl拡張タイプ。TLSEXT_STATUSTYPE_ocspのみ指定可。
  3767. _Example_
  3768. \code
  3769. WOLFSSL *ssl;
  3770. WOLFSSL_CTX *ctx;
  3771. int ret;
  3772. ctx = wolfSSL_CTX_new(wolfSSLv23_server_method());
  3773. ssl = wolfSSL_new(ctx);
  3774. ret = WolfSSL_set_tlsext_status_type(ssl,TLSEXT_STATUSTYPE_ocsp);
  3775. wolfSSL_free(ssl);
  3776. wolfSSL_CTX_free(ctx);
  3777. \endcode
  3778. \sa wolfSSL_new
  3779. \sa wolfSSL_CTX_new
  3780. \sa wolfSSL_free
  3781. \sa wolfSSL_CTX_free
  3782. */
  3783. long wolfSSL_set_tlsext_status_type(WOLFSSL *s, int type);
  3784. /*!
  3785. \ingroup Setup
  3786. \bri f この関数は、れは、ピアの証明書を確認しようとした後に結果を取得するために使用されます。
  3787. \return X509_V_OK 成功した検証について
  3788. \return SSL_FAILURE NULL SSLが渡された場合。
  3789. \param ssl WOLFSSL 構造体へのポインタ
  3790. _Example_
  3791. \code
  3792. WOLFSSL* ssl;
  3793. long ret;
  3794. // attempt/complete handshake
  3795. ret = wolfSSL_get_verify_result(ssl);
  3796. // check ret value
  3797. \endcode
  3798. \sa wolfSSL_new
  3799. \sa wolfSSL_free
  3800. */
  3801. long wolfSSL_get_verify_result(const WOLFSSL *ssl);
  3802. /*!
  3803. \ingroup Debug
  3804. \brief この関数は、wolfSSL_get_error()によって返されたエラーコードをより多くの人間が読めるエラー文字列に変換し、その文字列を出力ファイルに印刷します。ERRは、WOLFSSL_GET_ERROR()によって返され、FPがエラー文字列が配置されるファイルであるエラーコードです。
  3805. \return なし
  3806. \param fp に書き込まれる人間が読めるエラー文字列の出力ファイル。
  3807. \param err wolfSSL_get_error()で返されるエラーコード。
  3808. _Example_
  3809. \code
  3810. int err = 0;
  3811. WOLFSSL* ssl;
  3812. FILE* fp = ...
  3813. ...
  3814. err = wolfSSL_get_error(ssl, 0);
  3815. wolfSSL_ERR_print_errors_fp(fp, err);
  3816. \endcode
  3817. \sa wolfSSL_get_error
  3818. \sa wolfSSL_ERR_error_string
  3819. \sa wolfSSL_ERR_error_string_n
  3820. \sa wolfSSL_load_error_strings
  3821. */
  3822. void wolfSSL_ERR_print_errors_fp(XFILE fp, int err);
  3823. /*!
  3824. \ingroup Debug
  3825. \brief この関数は提供されたコールバックを使用してエラー報告を処理します。コールバック関数はエラー回線ごとに実行されます。文字列、長さ、およびuserdataはコールバックパラメータに渡されます。
  3826. \return なし
  3827. \param cb コールバック関数
  3828. \param u コールバック関数に渡されるuserdata
  3829. _Example_
  3830. \code
  3831. int error_cb(const char *str, size_t len, void *u)
  3832. { fprintf((FILE*)u, "%-*.*s\n", (int)len, (int)len, str); return 0; }
  3833. ...
  3834. FILE* fp = ...
  3835. wolfSSL_ERR_print_errors_cb(error_cb, fp);
  3836. \endcode
  3837. \sa wolfSSL_get_error
  3838. \sa wolfSSL_ERR_error_string
  3839. \sa wolfSSL_ERR_error_string_n
  3840. \sa wolfSSL_load_error_strings
  3841. */
  3842. void wolfSSL_ERR_print_errors_cb (
  3843. int (*cb)(const char *str, size_t len, void *u), void *u);
  3844. /*!
  3845. \brief この関数はWOLFSSL_CTX構造のclient_psk_cbメンバーをセットします。
  3846. \return なし
  3847. \param ctx wolfSSL_CTX_new()を使用して作成されたWOLFSSL_CTX構造体へのポインタ。
  3848. \param cb wc_psk_client_callback はコールバック関数ポインタでWOLFSSL_CTX構造体に格納されます。
  3849. 戻り値は成功時には鍵長を返し、エラー時には0を返します。
  3850. unsigned int (*wc_psk_client_callback)
  3851. PSK クライアントコールバック関数の引数:<br>
  3852. WOLFSSL* ssl - WOLFSSL構造体へのポインタ<br>
  3853. const char* hint - ユーザーに対して表示されるヒント文字列<br>
  3854. char* identity - ID<br>
  3855. unsigned int id_max_len - IDバッファのサイズ<br>
  3856. unsigned char* key - 格納される鍵<br>
  3857. unsigned int key_max_len - 鍵の最大サイズ<br>
  3858. _Example_
  3859. \code
  3860. WOLFSSL_CTX* ctx = WOLFSSL_CTX_new( protocol def );
  3861. static WC_INLINE unsigned int my_psk_client_cb(WOLFSSL* ssl, const char* hint,
  3862. char* identity, unsigned int id_max_len, unsigned char* key,
  3863. Unsigned int key_max_len){
  3864. wolfSSL_CTX_set_psk_client_callback(ctx, my_psk_client_cb);
  3865. \endcode
  3866. \sa wolfSSL_set_psk_client_callback
  3867. \sa wolfSSL_set_psk_server_callback
  3868. \sa wolfSSL_CTX_set_psk_server_callback
  3869. \sa wolfSSL_CTX_set_psk_client_callback
  3870. */
  3871. void wolfSSL_CTX_set_psk_client_callback(WOLFSSL_CTX* ctx,
  3872. wc_psk_client_callback cb);
  3873. /*!
  3874. \brief
  3875. \return none いいえ返します。
  3876. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造体へのポインタ
  3877. _Example_
  3878. \code
  3879. WOLFSSL* ssl;
  3880. static WC_INLINE unsigned int my_psk_client_cb(WOLFSSL* ssl, const char* hint,
  3881. char* identity, unsigned int id_max_len, unsigned char* key,
  3882. Unsigned int key_max_len){
  3883. if(ssl){
  3884. wolfSSL_set_psk_client_callback(ssl, my_psk_client_cb);
  3885. } else {
  3886. // could not set callback
  3887. }
  3888. \endcode
  3889. \sa wolfSSL_CTX_set_psk_client_callback
  3890. \sa wolfSSL_CTX_set_psk_server_callback
  3891. \sa wolfSSL_set_psk_server_callback
  3892. */
  3893. void wolfSSL_set_psk_client_callback(WOLFSSL* ssl,
  3894. wc_psk_client_callback);
  3895. /*!
  3896. \ingroup CertsKeys
  3897. \brief この関数はPSKアイデンティティヒントを返します。
  3898. \return pointer WolfSSL構造の配列メンバーに格納されている値へのconst charポインタが返されます。
  3899. \return NULL WOLFSSLまたは配列構造がNULLの場合に返されます。
  3900. _Example_
  3901. \code
  3902. WOLFSSL* ssl = wolfSSL_new(ctx);
  3903. char* idHint;
  3904. ...
  3905. idHint = wolfSSL_get_psk_identity_hint(ssl);
  3906. if(idHint){
  3907. // The hint was retrieved
  3908. return idHint;
  3909. } else {
  3910. // Hint wasn’t successfully retrieved
  3911. }
  3912. \endcode
  3913. \sa wolfSSL_get_psk_identity
  3914. */
  3915. const char* wolfSSL_get_psk_identity_hint(const WOLFSSL*);
  3916. /*!
  3917. \ingroup CertsKeys
  3918. \brief 関数は、配列構造のClient_Identityメンバーへの定数ポインタを返します。
  3919. \return string 配列構造のclient_identityメンバの文字列値。
  3920. \return NULL WOLFSSL構造がNULLの場合、またはWOLFSSL構造の配列メンバーがNULLの場合。
  3921. _Example_
  3922. \code
  3923. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( method );
  3924. WOLFSSL* ssl = wolfSSL_new(ctx);
  3925. const char* pskID;
  3926. ...
  3927. pskID = wolfSSL_get_psk_identity(ssl);
  3928. if(pskID == NULL){
  3929. // There is not a value in pskID
  3930. }
  3931. \endcode
  3932. \sa wolfSSL_get_psk_identity_hint
  3933. \sa wolfSSL_use_psk_identity_hint
  3934. */
  3935. const char* wolfSSL_get_psk_identity(const WOLFSSL*);
  3936. /*!
  3937. \ingroup CertsKeys
  3938. \brief この関数は、WOLFSSL_CTX構造体のserver_hintメンバーにHINT引数を格納します。
  3939. \return SSL_SUCCESS 機能の実行が成功したために返されます。
  3940. \param ctx wolfSSL_CTX_new()を使用して作成されたWOLFSSL_CTX構造体へのポインタ。
  3941. _Example_
  3942. \code
  3943. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
  3944. const char* hint;
  3945. int ret;
  3946. ret = wolfSSL_CTX_use_psk_identity_hint(ctx, hint);
  3947. if(ret == SSL_SUCCESS){
  3948. // Function was successful.
  3949. return ret;
  3950. } else {
  3951. // Failure case.
  3952. }
  3953. \endcode
  3954. \sa wolfSSL_use_psk_identity_hint
  3955. */
  3956. int wolfSSL_CTX_use_psk_identity_hint(WOLFSSL_CTX* ctx, const char* hint);
  3957. /*!
  3958. \ingroup CertsKeys
  3959. \brief この関数は、wolfssl構造内の配列構造のserver_hintメンバーにHINT引数を格納します。
  3960. \return SSL_SUCCESS ヒントがWolfSSL構造に正常に保存された場合に返されます。
  3961. \return SSL_FAILURE WOLFSSLまたは配列構造がNULLの場合に返されます。
  3962. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造体へのポインタ
  3963. _Example_
  3964. \code
  3965. WOLFSSL* ssl = wolfSSL_new(ctx);
  3966. const char* hint;
  3967. ...
  3968. if(wolfSSL_use_psk_identity_hint(ssl, hint) != SSL_SUCCESS){
  3969. // Handle failure case.
  3970. }
  3971. \endcode
  3972. \sa wolfSSL_CTX_use_psk_identity_hint
  3973. */
  3974. int wolfSSL_use_psk_identity_hint(WOLFSSL* ssl, const char* hint);
  3975. /*!
  3976. \brief WOLFSSL_CTX構造体
  3977. \return none いいえ返します。
  3978. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造体へのポインタ
  3979. _Example_
  3980. \code
  3981. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
  3982. WOLFSSL* ssl = wolfSSL_new(ctx);
  3983. static unsigned int my_psk_server_cb(WOLFSSL* ssl, const char* identity,
  3984. unsigned char* key, unsigned int key_max_len)
  3985. {
  3986. // Function body.
  3987. }
  3988. if(ctx != NULL){
  3989. wolfSSL_CTX_set_psk_server_callback(ctx, my_psk_server_cb);
  3990. } else {
  3991. // The CTX object was not properly initialized.
  3992. }
  3993. \endcode
  3994. \sa wc_psk_server_callback
  3995. \sa wolfSSL_set_psk_client_callback
  3996. \sa wolfSSL_set_psk_server_callback
  3997. \sa wolfSSL_CTX_set_psk_client_callback
  3998. */
  3999. void wolfSSL_CTX_set_psk_server_callback(WOLFSSL_CTX* ctx,
  4000. wc_psk_server_callback cb);
  4001. /*!
  4002. \brief WolfSSL構造オプションメンバー。
  4003. \return none いいえ返します。
  4004. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造体へのポインタ
  4005. _Example_
  4006. \code
  4007. WOLFSSL_CTX* ctx;
  4008. WOLFSSL* ssl;
  4009. static unsigned int my_psk_server_cb(WOLFSSL* ssl, const char* identity,
  4010. unsigned char* key, unsigned int key_max_len)
  4011. {
  4012. // Function body.
  4013. }
  4014. if(ssl != NULL && cb != NULL){
  4015. wolfSSL_set_psk_server_callback(ssl, my_psk_server_cb);
  4016. }
  4017. \endcode
  4018. \sa wolfSSL_set_psk_client_callback
  4019. \sa wolfSSL_CTX_set_psk_server_callback
  4020. \sa wolfSSL_CTX_set_psk_client_callback
  4021. \sa wolfSSL_get_psk_identity_hint
  4022. \sa wc_psk_server_callback
  4023. \sa InitSuites
  4024. */
  4025. void wolfSSL_set_psk_server_callback(WOLFSSL* ssl,
  4026. wc_psk_server_callback cb);
  4027. /*!
  4028. \brief
  4029. \return WOLFSSL_SUCCESS またはwolfssl_failure.
  4030. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造体へのポインタ
  4031. \sa wolfSSL_get_psk_callback_ctx
  4032. \sa wolfSSL_CTX_set_psk_callback_ctx
  4033. \sa wolfSSL_CTX_get_psk_callback_ctx
  4034. */
  4035. int wolfSSL_set_psk_callback_ctx(WOLFSSL* ssl, void* psk_ctx);
  4036. /*!
  4037. \brief
  4038. \return WOLFSSL_SUCCESS またはwolfssl_failure.
  4039. \param ctx wolfSSL_CTX_new()を使用して作成されたWOLFSSL_CTX構造体へのポインタ。
  4040. \sa wolfSSL_set_psk_callback_ctx
  4041. \sa wolfSSL_get_psk_callback_ctx
  4042. \sa wolfSSL_CTX_get_psk_callback_ctx
  4043. */
  4044. int wolfSSL_CTX_set_psk_callback_ctx(WOLFSSL_CTX* ctx, void* psk_ctx);
  4045. /*!
  4046. \brief
  4047. \return void ユーザーPSKコンテキストへのポインタ
  4048. \sa wolfSSL_set_psk_callback_ctx
  4049. \sa wolfSSL_CTX_set_psk_callback_ctx
  4050. \sa wolfSSL_CTX_get_psk_callback_ctx
  4051. */
  4052. void* wolfSSL_get_psk_callback_ctx(WOLFSSL* ssl);
  4053. /*!
  4054. \brief
  4055. \return void ユーザーPSKコンテキストへのポインタ
  4056. \sa wolfSSL_CTX_set_psk_callback_ctx
  4057. \sa wolfSSL_set_psk_callback_ctx
  4058. \sa wolfSSL_get_psk_callback_ctx
  4059. */
  4060. void* wolfSSL_CTX_get_psk_callback_ctx(WOLFSSL_CTX* ctx);
  4061. /*!
  4062. \ingroup Setup
  4063. \brief この機能により、CTX構造のHAVAnonメンバーがコンパイル中に定義されている場合は、CTX構造のHABANONメンバーを有効にします。
  4064. \return SSL_SUCCESS 機能が正常に実行され、CTXのHaveannonメンバーが1に設定されている場合に返されます。
  4065. \return SSL_FAILURE CTX構造がNULLの場合に返されます。
  4066. _Example_
  4067. \code
  4068. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
  4069. WOLFSSL* ssl = wolfSSL_new(ctx);
  4070. ...
  4071. #ifdef HAVE_ANON
  4072. if(cipherList == NULL){
  4073. wolfSSL_CTX_allow_anon_cipher(ctx);
  4074. if(wolfSSL_CTX_set_cipher_list(ctx, “ADH_AES128_SHA”) != SSL_SUCCESS){
  4075. // failure case
  4076. }
  4077. }
  4078. #endif
  4079. \endcode
  4080. \sa none
  4081. */
  4082. int wolfSSL_CTX_allow_anon_cipher(WOLFSSL_CTX*);
  4083. /*!
  4084. \ingroup Setup
  4085. \brief wolfsslv23_server_method()関数は、アプリケーションがサーバーであることを示すために使用され、SSL 3.0 - TLS 1.3からプロトコルバージョンと接続するクライアントをサポートします。この関数は、wolfSSL_CTX_new()を使用してSSL / TLSコンテキストを作成するときに使用される新しいWolfssl_method構造体のメモリを割り当てて初期化します。
  4086. \return pointer 成功した場合、呼び出しは新しく作成されたwolfssl_method構造へのポインタを返します。
  4087. \return Failure xmallocを呼び出すときにメモリ割り当てが失敗した場合、基礎となるMalloc()実装の失敗値が返されます(通常はerrnoがenomeemに設定されます)。
  4088. _Example_
  4089. \code
  4090. WOLFSSL_METHOD* method;
  4091. WOLFSSL_CTX* ctx;
  4092. method = wolfSSLv23_server_method();
  4093. if (method == NULL) {
  4094. // unable to get method
  4095. }
  4096. ctx = wolfSSL_CTX_new(method);
  4097. ...
  4098. \endcode
  4099. \sa wolfSSLv3_server_method
  4100. \sa wolfTLSv1_server_method
  4101. \sa wolfTLSv1_1_server_method
  4102. \sa wolfTLSv1_2_server_method
  4103. \sa wolfTLSv1_3_server_method
  4104. \sa wolfDTLSv1_server_method
  4105. \sa wolfSSL_CTX_new
  4106. */
  4107. WOLFSSL_METHOD *wolfSSLv23_server_method(void);
  4108. /*!
  4109. \ingroup Setup
  4110. \bri f この関数は、れは、WolfSSL構造体の内部エラー状態を取得するために使用されます。
  4111. \return wolfssl_error SSLエラー状態、通常はマイナスを返します
  4112. \return BAD_FUNC_ARG sslがNULLの場合
  4113. _Example_
  4114. \code
  4115. WOLFSSL* ssl;
  4116. int ret;
  4117. // create ssl object
  4118. ret = wolfSSL_state(ssl);
  4119. // check ret value
  4120. \endcode
  4121. \sa wolfSSL_new
  4122. \sa wolfSSL_free
  4123. */
  4124. int wolfSSL_state(WOLFSSL* ssl);
  4125. /*!
  4126. \ingroup CertsKeys
  4127. \brief この関数はピアの証明書を取得します。
  4128. \return pointer WOLFSSL_X509構造のPECRERTメンバーへのポインタが存在する場合は。
  4129. \return 0 ピア証明書発行者サイズが定義されていない場合に返されます。
  4130. _Example_
  4131. \code
  4132. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( method );
  4133. WOLFSSL* ssl = wolfSSL_new(ctx);
  4134. ...
  4135. WOLFSSL_X509* peerCert = wolfSSL_get_peer_certificate(ssl);
  4136. if(peerCert){
  4137. // You have a pointer peerCert to the peer certification
  4138. }
  4139. \endcode
  4140. \sa wolfSSL_X509_get_issuer_name
  4141. \sa wolfSSL_X509_get_subject_name
  4142. \sa wolfSSL_X509_get_isCA
  4143. */
  4144. WOLFSSL_X509* wolfSSL_get_peer_certificate(WOLFSSL* ssl);
  4145. /*!
  4146. \ingroup Debug
  4147. \brief この関数は、wolfSSL_get_error()を呼び出してssl_error_want_readを取得するのと似ています。基礎となるエラー状態がSSL_ERROR_WANT_READの場合、この関数は1を返しますが、それ以外の場合は0です。
  4148. \return 1 WOLFSSL_GET_ERROR()はSSL_ERROR_WANT_READを返し、基礎となるI / Oには読み取り可能なデータがあります。
  4149. \return 0 SSL_ERROR_WANT_READエラー状態はありません。
  4150. _Example_
  4151. \code
  4152. int ret;
  4153. WOLFSSL* ssl = 0;
  4154. ...
  4155. ret = wolfSSL_want_read(ssl);
  4156. if (ret == 1) {
  4157. // underlying I/O has data available for reading (SSL_ERROR_WANT_READ)
  4158. }
  4159. \endcode
  4160. \sa wolfSSL_want_write
  4161. \sa wolfSSL_get_error
  4162. */
  4163. int wolfSSL_want_read(WOLFSSL*);
  4164. /*!
  4165. \ingroup Debug
  4166. \brief この関数は、wolfSSL_get_error()を呼び出し、RETURSのSSL_ERROR_WANT_WRITEを取得するのと同じです。基礎となるエラー状態がSSL_ERROR_WANT_WRITEの場合、この関数は1を返しますが、それ以外の場合は0です。
  4167. \return 1 WOLFSSL_GET_ERROR()はSSL_ERROR_WANT_WRITEを返します。基礎となるI / Oは、基礎となるSSL接続で進行状況を行うために書き込まれるデータを必要とします。
  4168. \return 0 ssl_error_want_writeエラー状態はありません。
  4169. _Example_
  4170. \code
  4171. int ret;
  4172. WOLFSSL* ssl = 0;
  4173. ...
  4174. ret = wolfSSL_want_write(ssl);
  4175. if (ret == 1) {
  4176. // underlying I/O needs data to be written (SSL_ERROR_WANT_WRITE)
  4177. }
  4178. \endcode
  4179. \sa wolfSSL_want_read
  4180. \sa wolfSSL_get_error
  4181. */
  4182. int wolfSSL_want_write(WOLFSSL*);
  4183. /*!
  4184. \ingroup Setup
  4185. \brief wolfsslデフォルトでは、有効な日付範囲と検証済みの署名のためにピア証明書をチェックします。wolfssl_connect()またはwolfssl_accept()の前にこの関数を呼び出すと、実行するチェックのリストにドメイン名チェックが追加されます。DN受信時にピア証明書を確認するためのドメイン名を保持します。
  4186. \return SSL_SUCCESS 成功時に返されます。
  4187. \return SSL_FAILURE メモリエラーが発生した場合に返されます。
  4188. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造体へのポインタ
  4189. _Example_
  4190. \code
  4191. int ret = 0;
  4192. WOLFSSL* ssl;
  4193. char* domain = (char*) “www.yassl.com”;
  4194. ...
  4195. ret = wolfSSL_check_domain_name(ssl, domain);
  4196. if (ret != SSL_SUCCESS) {
  4197. // failed to enable domain name check
  4198. }
  4199. \endcode
  4200. \sa none
  4201. */
  4202. int wolfSSL_check_domain_name(WOLFSSL* ssl, const char* dn);
  4203. /*!
  4204. \ingroup TLS
  4205. \brief 使用するためにWolfSSLライブラリを初期化します。アプリケーションごとに1回、その他のライブラリへの呼び出しの前に呼び出す必要があります。
  4206. \return SSL_SUCCESS 成功した場合に返されます。、通話が戻ります。
  4207. \return BAD_MUTEX_E 返される可能性があるエラーです。
  4208. _Example_
  4209. \code
  4210. int ret = 0;
  4211. ret = wolfSSL_Init();
  4212. if (ret != SSL_SUCCESS) {
  4213. failed to initialize wolfSSL library
  4214. }
  4215. \endcode
  4216. \sa wolfSSL_Cleanup
  4217. */
  4218. int wolfSSL_Init(void);
  4219. /*!
  4220. \ingroup TLS
  4221. \brief さらなる使用からWOLFSSLライブラリを初期化します。ライブラリによって使用されるリソースを解放しますが、呼び出される必要はありません。
  4222. \return SSL_SUCCESS エラーを返しません。
  4223. _Example_
  4224. \code
  4225. wolfSSL_Cleanup();
  4226. \endcode
  4227. \sa wolfSSL_Init
  4228. */
  4229. int wolfSSL_Cleanup(void);
  4230. /*!
  4231. \ingroup IO
  4232. \brief この関数は現在のライブラリーバージョンを返します。
  4233. \return LIBWOLFSSL_VERSION_STRING バージョンを定義するconst charポインタ。
  4234. _Example_
  4235. \code
  4236. char version[MAXSIZE];
  4237. version = wolfSSL_KeepArrays();
  4238. if(version != ExpectedVersion){
  4239. // Handle the mismatch case
  4240. }
  4241. \endcode
  4242. \sa word32_wolfSSL_lib_version_hex
  4243. */
  4244. const char* wolfSSL_lib_version(void);
  4245. /*!
  4246. \ingroup IO
  4247. \brief この関数は、現在のライブラリーのバージョンを16進表記で返します。
  4248. \return LILBWOLFSSL_VERSION_HEX wolfssl / version.hで定義されている16進数バージョンを返します。
  4249. _Example_
  4250. \code
  4251. word32 libV;
  4252. libV = wolfSSL_lib_version_hex();
  4253. if(libV != EXPECTED_HEX){
  4254. // How to handle an unexpected value
  4255. } else {
  4256. // The expected result for libV
  4257. }
  4258. \endcode
  4259. \sa wolfSSL_lib_version
  4260. */
  4261. word32 wolfSSL_lib_version_hex(void);
  4262. /*!
  4263. \ingroup IO
  4264. \brief SSLメソッドの側面に基づいて、実際の接続または承認を実行します。クライアント側から呼び出された場合、サーバ側から呼び出された場合にwolfssl_accept()が実行されている間にwolfssl_connect()が行われる。
  4265. \return SSL_SUCCESS 成功した場合に返されます。に返却されます。(注意、古いバージョンは0を返します)
  4266. \return SSL_FATAL_ERROR 基礎となる呼び出しがエラーになった場合に返されます。特定のエラーコードを取得するには、wolfSSL_get_error()を使用してください。
  4267. _Example_
  4268. \code
  4269. int ret = SSL_FATAL_ERROR;
  4270. WOLFSSL* ssl = 0;
  4271. ...
  4272. ret = wolfSSL_negotiate(ssl);
  4273. if (ret == SSL_FATAL_ERROR) {
  4274. // SSL establishment failed
  4275. int error_code = wolfSSL_get_error(ssl);
  4276. ...
  4277. }
  4278. ...
  4279. \endcode
  4280. \sa SSL_connect
  4281. \sa SSL_accept
  4282. */
  4283. int wolfSSL_negotiate(WOLFSSL* ssl);
  4284. /*!
  4285. \ingroup Setup
  4286. \brief SSL接続に圧縮を使用する機能をオンにします。両側には圧縮がオンになっている必要があります。そうでなければ圧縮は使用されません。ZLIBライブラリは実際のデータ圧縮を実行します。ライブラリにコンパイルするには、システムの設定システムに--with-libzを使用し、そうでない場合はhand_libzを定義します。送受信されるメッセージの実際のサイズを減らす前にデータを圧縮している間に、圧縮によって保存されたデータの量は通常、ネットワークの遅いすべてのネットワークを除いたものよりも分析に時間がかかります。
  4287. \return SSL_SUCCESS 成功時に返されます。
  4288. \return NOT_COMPILED_IN 圧縮サポートがライブラリに組み込まれていない場合に返されます。
  4289. _Example_
  4290. \code
  4291. int ret = 0;
  4292. WOLFSSL* ssl = 0;
  4293. ...
  4294. ret = wolfSSL_set_compression(ssl);
  4295. if (ret == SSL_SUCCESS) {
  4296. // successfully enabled compression for SSL session
  4297. }
  4298. \endcode
  4299. \sa none
  4300. */
  4301. int wolfSSL_set_compression(WOLFSSL* ssl);
  4302. /*!
  4303. \ingroup Setup
  4304. \brief この関数はSSLセッションタイムアウト値を秒単位で設定します。
  4305. \return SSL_SUCCESS セッションを正常に設定すると返されます。
  4306. \return BAD_FUNC_ARG sslがNULLの場合に返されます。
  4307. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造体へのポインタ
  4308. _Example_
  4309. \code
  4310. int ret = 0;
  4311. WOLFSSL* ssl = 0;
  4312. ...
  4313. ret = wolfSSL_set_timeout(ssl, 500);
  4314. if (ret != SSL_SUCCESS) {
  4315. // failed to set session timeout value
  4316. }
  4317. ...
  4318. \endcode
  4319. \sa wolfSSL_get1_session
  4320. \sa wolfSSL_set_session
  4321. */
  4322. int wolfSSL_set_timeout(WOLFSSL* ssl, unsigned int to);
  4323. /*!
  4324. \ingroup Setup
  4325. \brief この関数は、指定されたSSLコンテキストに対して、SSLセッションのタイムアウト値を秒単位で設定します。
  4326. \return the wolfssl_error_code_opensslの場合、以前のタイムアウト値
  4327. \return defined 成功しています。定義されていない場合、SSL_SUCCESSは返されます。
  4328. \return BAD_FUNC_ARG 入力コンテキスト(CTX)がNULLのときに返されます。
  4329. \param ctx wolfSSL_CTX_new()で作成されたSSLコンテキストへのポインタ。
  4330. _Example_
  4331. \code
  4332. WOLFSSL_CTX* ctx = 0;
  4333. ...
  4334. ret = wolfSSL_CTX_set_timeout(ctx, 500);
  4335. if (ret != SSL_SUCCESS) {
  4336. // failed to set session timeout value
  4337. }
  4338. \endcode
  4339. \sa wolfSSL_flush_sessions
  4340. \sa wolfSSL_get1_session
  4341. \sa wolfSSL_set_session
  4342. \sa wolfSSL_get_sessionID
  4343. \sa wolfSSL_CTX_set_session_cache_mode
  4344. */
  4345. int wolfSSL_CTX_set_timeout(WOLFSSL_CTX* ctx, unsigned int to);
  4346. /*!
  4347. \ingroup openSSL
  4348. \brief ピアの証明書チェーンを取得します。
  4349. \return chain 正常にコールがピアの証明書チェーンを返します。
  4350. \return 0 無効なWolfSSLポインタが関数に渡されると返されます。
  4351. _Example_
  4352. \code
  4353. none
  4354. \endcode
  4355. \sa wolfSSL_get_chain_count
  4356. \sa wolfSSL_get_chain_length
  4357. \sa wolfSSL_get_chain_cert
  4358. \sa wolfSSL_get_chain_cert_pem
  4359. */
  4360. WOLFSSL_X509_CHAIN* wolfSSL_get_peer_chain(WOLFSSL* ssl);
  4361. /*!
  4362. \ingroup openSSL
  4363. \brief ピアの証明書チェーン数を取得します。
  4364. \return Success 正常にコールがピアの証明書チェーン数を返します。
  4365. \return 0 無効なチェーンポインタが関数に渡されると返されます。
  4366. _Example_
  4367. \code
  4368. none
  4369. \endcode
  4370. \sa wolfSSL_get_peer_chain
  4371. \sa wolfSSL_get_chain_length
  4372. \sa wolfSSL_get_chain_cert
  4373. \sa wolfSSL_get_chain_cert_pem
  4374. */
  4375. int wolfSSL_get_chain_count(WOLFSSL_X509_CHAIN* chain);
  4376. /*!
  4377. \ingroup openSSL
  4378. \brief Index(IDX)のピアのASN1.DER証明書長をバイト単位で取得します。
  4379. \return Success 正常にコールがインデックス別にピアの証明書長をバイト単位で返します。
  4380. \return 0 無効なチェーンポインタが関数に渡されると返されます。
  4381. \param chain 有効なwolfssl_x509_chain構造へのポインタ。
  4382. _Example_
  4383. \code
  4384. none
  4385. \endcode
  4386. \sa wolfSSL_get_peer_chain
  4387. \sa wolfSSL_get_chain_count
  4388. \sa wolfSSL_get_chain_cert
  4389. \sa wolfSSL_get_chain_cert_pem
  4390. */
  4391. int wolfSSL_get_chain_length(WOLFSSL_X509_CHAIN* chain, int idx);
  4392. /*!
  4393. \ingroup openSSL
  4394. \brief インデックス(IDX)でピアのASN1.DER証明書を取得します。
  4395. \return Success 正常にコールがインデックスでピアの証明書を返します。
  4396. \return 0 無効なチェーンポインタが関数に渡されると返されます。
  4397. \param chain 有効なwolfssl_x509_chain構造へのポインタ。
  4398. _Example_
  4399. \code
  4400. none
  4401. \endcode
  4402. \sa wolfSSL_get_peer_chain
  4403. \sa wolfSSL_get_chain_count
  4404. \sa wolfSSL_get_chain_length
  4405. \sa wolfSSL_get_chain_cert_pem
  4406. */
  4407. unsigned char* wolfSSL_get_chain_cert(WOLFSSL_X509_CHAIN* chain, int idx);
  4408. /*!
  4409. \ingroup CertsKeys
  4410. \brief この関数は、証明書のチェーンからのピアのWOLFSSL_X509構造体をインデックス(IDX)で取得します。
  4411. \return pointer WOLFSSL_X509構造体へのポインタを返します。
  4412. \param chain 動的メモリsession_cacheの場合に使用されるWOLFSSL_X509_CHAINへのポインタ。
  4413. 注意:本関数から返された構造体をwolfSSL_FreeX509()を呼び出して解放するのはユーザーの責任です。
  4414. _Example_
  4415. \code
  4416. WOLFSSL_X509_CHAIN* chain = &session->chain;
  4417. int idx = 999; // set idx
  4418. ...
  4419. WOLFSSL_X509* ptr;
  4420. prt = wolfSSL_get_chain_X509(chain, idx);
  4421. if(ptr != NULL){
  4422. //ptr contains the cert at the index specified
  4423. wolfSSL_FreeX509(ptr);
  4424. } else {
  4425. // ptr is NULL
  4426. }
  4427. \endcode
  4428. \sa InitDecodedCert
  4429. \sa ParseCertRelative
  4430. \sa CopyDecodedToX509
  4431. */
  4432. WOLFSSL_X509* wolfSSL_get_chain_X509(WOLFSSL_X509_CHAIN* chain, int idx);
  4433. /*!
  4434. \ingroup openSSL
  4435. \brief インデックス(IDX)でピアのPEM証明書を取得します。
  4436. \return Success 正常にコールがインデックスでピアの証明書を返します。
  4437. \return 0 無効なチェーンポインタが関数に渡されると返されます。
  4438. \param chain 有効なwolfssl_x509_chain構造へのポインタ。
  4439. _Example_
  4440. \code
  4441. none
  4442. \endcode
  4443. \sa wolfSSL_get_peer_chain
  4444. \sa wolfSSL_get_chain_count
  4445. \sa wolfSSL_get_chain_length
  4446. \sa wolfSSL_get_chain_cert
  4447. */
  4448. int wolfSSL_get_chain_cert_pem(WOLFSSL_X509_CHAIN* chain, int idx,
  4449. unsigned char* buf, int inLen, int* outLen);
  4450. /*!
  4451. \ingroup openSSL
  4452. \brief セッションのIDを取得します。セッションIDは常に32バイトの長さです。
  4453. \return id セッションID。
  4454. _Example_
  4455. \code
  4456. none
  4457. \endcode
  4458. \sa SSL_get_session
  4459. */
  4460. const unsigned char* wolfSSL_get_sessionID(const WOLFSSL_SESSION* s);
  4461. /*!
  4462. \ingroup openSSL
  4463. \brief ピアの証明書のシリアル番号を取得します。シリアル番号バッファ(IN)は少なくとも32バイト以上であり、入力として* INOUTSZ引数として提供されます。関数を呼び出した後* INOUTSZはINバッファに書き込まれた実際の長さをバイト単位で保持します。
  4464. \return SSL_SUCCESS 成功時に返されます。
  4465. \return BAD_FUNC_ARG 関数の不良引数が見つかった場合に返されます。
  4466. \param in シリアル番号バッファは少なくとも32バイトの長さであるべきです
  4467. _Example_
  4468. \code
  4469. none
  4470. \endcode
  4471. \sa SSL_get_peer_certificate
  4472. */
  4473. int wolfSSL_X509_get_serial_number(WOLFSSL_X509* x509, unsigned char* in,
  4474. int* inOutSz);
  4475. /*!
  4476. \ingroup CertsKeys
  4477. \brief 証明書から件名の共通名を返します。
  4478. \return NULL X509構造がNULLの場合に返されます
  4479. \return string サブジェクトの共通名の文字列表現は成功に返されます
  4480. _Example_
  4481. \code
  4482. WOLFSSL_X509 x509 = (WOLFSSL_X509*)XMALLOC(sizeof(WOLFSSL_X509), NULL,
  4483. DYNAMIC_TYPE_X509);
  4484. ...
  4485. int x509Cn = wolfSSL_X509_get_subjectCN(x509);
  4486. if(x509Cn == NULL){
  4487. // Deal with NULL case
  4488. } else {
  4489. // x509Cn contains the common name
  4490. }
  4491. \endcode
  4492. \sa wolfSSL_X509_Name_get_entry
  4493. \sa wolfSSL_X509_get_next_altname
  4494. \sa wolfSSL_X509_get_issuer_name
  4495. \sa wolfSSL_X509_get_subject_name
  4496. */
  4497. char* wolfSSL_X509_get_subjectCN(WOLFSSL_X509*);
  4498. /*!
  4499. \ingroup CertsKeys
  4500. \brief この関数は、wolfssl_x509構造体のDERエンコードされた証明書を取得します。
  4501. \return buffer この関数はDerbuffer構造体のバッファメンバーを返します。これはバイト型です。
  4502. \return NULL x509またはoutszパラメーターがnullの場合に返されます。
  4503. \param x509 証明書情報を含むWolfSSL_X509構造へのポインタ。
  4504. _Example_
  4505. \code
  4506. WOLFSSL_X509 x509 = (WOLFSSL_X509*)XMALLOC(sizeof(WOLFSSL_X509), NULL,
  4507. DYNAMIC_TYPE_X509);
  4508. int* outSz; // initialize
  4509. ...
  4510. byte* x509Der = wolfSSL_X509_get_der(x509, outSz);
  4511. if(x509Der == NULL){
  4512. // Failure case one of the parameters was NULL
  4513. }
  4514. \endcode
  4515. \sa wolfSSL_X509_version
  4516. \sa wolfSSL_X509_Name_get_entry
  4517. \sa wolfSSL_X509_get_next_altname
  4518. \sa wolfSSL_X509_get_issuer_name
  4519. \sa wolfSSL_X509_get_subject_name
  4520. */
  4521. const unsigned char* wolfSSL_X509_get_der(WOLFSSL_X509* x509, int* outSz);
  4522. /*!
  4523. \ingroup CertsKeys
  4524. \brief この関数は、x509がnullのかどうかを確認し、そうでない場合は、x509構造体のノッカスメンバーを返します。
  4525. \return pointer ASN1_TIMEを使用してX509構造体のノカフターメンバーに構造体を表明します。
  4526. \return NULL X509オブジェクトがNULLの場合に返されます。
  4527. _Example_
  4528. \code
  4529. WOLFSSL_X509* x509 = (WOLFSSL_X509)XMALOC(sizeof(WOLFSSL_X509), NULL,
  4530. DYNAMIC_TYPE_X509) ;
  4531. ...
  4532. const WOLFSSL_ASN1_TIME* notAfter = wolfSSL_X509_get_notAfter(x509);
  4533. if(notAfter == NULL){
  4534. // Failure case, the x509 object is null.
  4535. }
  4536. \endcode
  4537. \sa wolfSSL_X509_get_notBefore
  4538. */
  4539. WOLFSSL_ASN1_TIME* wolfSSL_X509_get_notAfter(WOLFSSL_X509*);
  4540. /*!
  4541. \ingroup CertsKeys
  4542. \brief この関数はX509証明書のバージョンを取得します。
  4543. \return 0 X509構造がNULLの場合に返されます。
  4544. \return version X509構造に保存されているバージョンが返されます。
  4545. _Example_
  4546. \code
  4547. WOLFSSL_X509* x509;
  4548. int version;
  4549. ...
  4550. version = wolfSSL_X509_version(x509);
  4551. if(!version){
  4552. // The function returned 0, failure case.
  4553. }
  4554. \endcode
  4555. \sa wolfSSL_X509_get_subject_name
  4556. \sa wolfSSL_X509_get_issuer_name
  4557. \sa wolfSSL_X509_get_isCA
  4558. \sa wolfSSL_get_peer_certificate
  4559. */
  4560. int wolfSSL_X509_version(WOLFSSL_X509*);
  4561. /*!
  4562. \ingroup CertsKeys
  4563. \brief no_stdio_filesystemが定義されている場合、この関数はヒープメモリを割り当て、wolfssl_x509構造を初期化してそれにポインタを返します。
  4564. \return *WOLFSSL_X509 関数が正常に実行された場合、WolfSSL_X509構造ポインタが返されます。
  4565. \return NULL Xftellマクロの呼び出しが負の値を返す場合。
  4566. \param x509 wolfssl_x509ポインタへのポインタ。
  4567. _Example_
  4568. \code
  4569. WOLFSSL_X509* x509a = (WOLFSSL_X509*)XMALLOC(sizeof(WOLFSSL_X509), NULL,
  4570. DYNAMIC_TYPE_X509);
  4571. WOLFSSL_X509** x509 = x509a;
  4572. XFILE file; (mapped to struct fs_file*)
  4573. ...
  4574. WOLFSSL_X509* newX509 = wolfSSL_X509_d2i_fp(x509, file);
  4575. if(newX509 == NULL){
  4576. // The function returned NULL
  4577. }
  4578. \endcode
  4579. \sa wolfSSL_X509_d2i
  4580. \sa XFTELL
  4581. \sa XREWIND
  4582. \sa XFSEEK
  4583. */
  4584. WOLFSSL_X509*
  4585. wolfSSL_X509_d2i_fp(WOLFSSL_X509** x509, FILE* file);
  4586. /*!
  4587. \ingroup CertsKeys
  4588. \brief 関数はX509証明書をメモリにロードします。
  4589. \return pointer 実行された実行は、wolfssl_x509構造へのポインタを返します。
  4590. \return NULL 証明書が書き込まれなかった場合に返されます。
  4591. \param fname ロードする証明書ファイル。
  4592. _Example_
  4593. \code
  4594. #define cliCert “certs/client-cert.pem”
  4595. X509* x509;
  4596. x509 = wolfSSL_X509_load_certificate_file(cliCert, SSL_FILETYPE_PEM);
  4597. AssertNotNull(x509);
  4598. \endcode
  4599. \sa InitDecodedCert
  4600. \sa PemToDer
  4601. \sa wolfSSL_get_certificate
  4602. \sa AssertNotNull
  4603. */
  4604. WOLFSSL_X509*
  4605. wolfSSL_X509_load_certificate_file(const char* fname, int format);
  4606. /*!
  4607. \ingroup CertsKeys
  4608. \brief この関数は、デバイスの種類をX509構造からバッファにコピーします。
  4609. \return pointer X509構造からデバイスの種類を保持するバイトポインタを返します。
  4610. \return NULL バッファサイズがNULLの場合に返されます。
  4611. \param x509 wolfssl_x509_new()で作成されたwolfssl_x509構造へのポインタ。
  4612. \param in デバイスタイプ(バッファ)を保持するバイトタイプへのポインタ。
  4613. _Example_
  4614. \code
  4615. WOLFSSL_X509* x509 = (WOLFSSL_X509)XMALOC(sizeof(WOLFSSL_X509), NULL,
  4616. DYNAMIC_TYPE_X509);
  4617. byte* in;
  4618. int* inOutSz;
  4619. ...
  4620. byte* deviceType = wolfSSL_X509_get_device_type(x509, in, inOutSz);
  4621. if(!deviceType){
  4622. // Failure case, NULL was returned.
  4623. }
  4624. \endcode
  4625. \sa wolfSSL_X509_get_hw_type
  4626. \sa wolfSSL_X509_get_hw_serial_number
  4627. \sa wolfSSL_X509_d2i
  4628. */
  4629. unsigned char*
  4630. wolfSSL_X509_get_device_type(WOLFSSL_X509* x509, unsigned char* in,
  4631. int* inOutSz);
  4632. /*!
  4633. \ingroup CertsKeys
  4634. \brief この関数は、wolfssl_x509構造のHWTypeメンバーをバッファにコピーします。
  4635. \return byte この関数は、wolfssl_x509構造のHWTypeメンバーに以前に保持されているデータのバイトタイプを返します。
  4636. \return NULL inoutszがnullの場合に返されます。
  4637. \param x509 証明書情報を含むWolfSSL_X509構造へのポインタ。
  4638. \param in バッファを表すバイトを入力するポインタ。
  4639. _Example_
  4640. \code
  4641. WOLFSSL_X509* x509; // X509 certificate
  4642. byte* in; // initialize the buffer
  4643. int* inOutSz; // holds the size of the buffer
  4644. ...
  4645. byte* hwType = wolfSSL_X509_get_hw_type(x509, in, inOutSz);
  4646. if(hwType == NULL){
  4647. // Failure case function returned NULL.
  4648. }
  4649. \endcode
  4650. \sa wolfSSL_X509_get_hw_serial_number
  4651. \sa wolfSSL_X509_get_device_type
  4652. */
  4653. unsigned char*
  4654. wolfSSL_X509_get_hw_type(WOLFSSL_X509* x509, unsigned char* in,
  4655. int* inOutSz);
  4656. /*!
  4657. \ingroup CertsKeys
  4658. \brief この関数はX509オブジェクトのhwserialNumメンバを返します。
  4659. \return pointer この関数は、X509オブジェクトからロードされたシリアル番号を含むINバッファへのバイトポインタを返します。
  4660. \param x509 証明書情報を含むWOLFSSL_X509構造へのポインタ。
  4661. \param in コピーされるバッファへのポインタ。
  4662. _Example_
  4663. \code
  4664. char* serial;
  4665. byte* in;
  4666. int* inOutSz;
  4667. WOLFSSL_X509 x509;
  4668. ...
  4669. serial = wolfSSL_X509_get_hw_serial_number(x509, in, inOutSz);
  4670. if(serial == NULL || serial <= 0){
  4671. // Failure case
  4672. }
  4673. \endcode
  4674. \sa wolfSSL_X509_get_subject_name
  4675. \sa wolfSSL_X509_get_issuer_name
  4676. \sa wolfSSL_X509_get_isCA
  4677. \sa wolfSSL_get_peer_certificate
  4678. \sa wolfSSL_X509_version
  4679. */
  4680. unsigned char*
  4681. wolfSSL_X509_get_hw_serial_number(WOLFSSL_X509* x509,
  4682. unsigned char* in, int* inOutSz);
  4683. /*!
  4684. \ingroup IO
  4685. \brief この関数はクライアント側で呼び出され、ピアの証明書チェーンを取得するのに十分な長さだけサーバーを持つSSL / TLSハンドシェイクを開始します。この関数が呼び出されると、基礎となる通信チャネルはすでに設定されています。 wolfssl_connect_cert()は、ブロックと非ブロックI / Oの両方で動作します。基礎となるI / Oがノンブロッキングである場合、wolfsl_connect_cert()は、wolfssl_connect_cert_cert()のニーズを満たすことができなかったときに戻ります。ハンドシェイクを続けます。この場合、wolfSSL_get_error()への呼び出しはSSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEのいずれかを生成します。通話プロセスは、基礎となるI / Oが準備ができて、wolfsslがオフになっているところを拾うときに、wolfssl_connect_cert()への呼び出しを繰り返す必要があります。ノンブロッキングソケットを使用する場合は、何も実行する必要がありますが、select()を使用して必要な条件を確認できます。基礎となる入出力がブロックされている場合、wolfssl_connect_cert()はピアの証明書チェーンが受信されたらのみ返されます。
  4686. \return SSL_SUCCESS 成功時に返されます。
  4687. \return SSL_FAILURE SSLセッションパラメータがNULLの場合、返されます。
  4688. \return SSL_FATAL_ERROR エラーが発生した場合に返されます。より詳細なエラーコードを取得するには、wolfSSL_get_error()を呼び出します。
  4689. _Example_
  4690. \code
  4691. int ret = 0;
  4692. int err = 0;
  4693. WOLFSSL* ssl;
  4694. char buffer[80];
  4695. ...
  4696. ret = wolfSSL_connect_cert(ssl);
  4697. if (ret != SSL_SUCCESS) {
  4698. err = wolfSSL_get_error(ssl, ret);
  4699. printf(“error = %d, %s\n”, err, wolfSSL_ERR_error_string(err, buffer));
  4700. }
  4701. \endcode
  4702. \sa wolfSSL_get_error
  4703. \sa wolfSSL_connect
  4704. \sa wolfSSL_accept
  4705. */
  4706. int wolfSSL_connect_cert(WOLFSSL* ssl);
  4707. /*!
  4708. \ingroup openSSL
  4709. \brief WOLFSSL_D2I_PKCS12_BIO(D2I_PKCS12_BIO)は、WOLFSSL_BIOから構造WC_PKCS12へのPKCS12情報にコピーされます。この情報は、オプションのMAC情報を保持するための構造とともにコンテンツに関する情報のリストとして構造内に分割されています。構造体WC_PKCS12で情報がチャンク(ただし復号化されていない)に分割された後、それはその後、呼び出しによって解析および復号化され得る。
  4710. \return WC_PKCS12 WC_PKCS12構造へのポインタ。
  4711. \return Failure 関数に失敗した場合はNULLを返します。
  4712. \param bio PKCS12バッファを読み取るためのWOLFSSL_BIO構造。
  4713. _Example_
  4714. \code
  4715. WC_PKCS12* pkcs;
  4716. WOLFSSL_BIO* bio;
  4717. WOLFSSL_X509* cert;
  4718. WOLFSSL_EVP_PKEY* pkey;
  4719. STACK_OF(X509) certs;
  4720. //bio loads in PKCS12 file
  4721. wolfSSL_d2i_PKCS12_bio(bio, &pkcs);
  4722. wolfSSL_PKCS12_parse(pkcs, “a password”, &pkey, &cert, &certs)
  4723. wc_PKCS12_free(pkcs)
  4724. //use cert, pkey, and optionally certs stack
  4725. \endcode
  4726. \sa wolfSSL_PKCS12_parse
  4727. \sa wc_PKCS12_free
  4728. */
  4729. WC_PKCS12* wolfSSL_d2i_PKCS12_bio(WOLFSSL_BIO* bio,
  4730. WC_PKCS12** pkcs12);
  4731. /*!
  4732. \ingroup openSSL
  4733. \brief WOLFSSL_I2D_PKCS12_BIO(I2D_PKCS12_BIO)は、構造WC_PKCS12からWOLFSSL_BIOへの証明書情報にコピーされます。
  4734. \return 1 成功のために。
  4735. \return Failure 0。
  4736. \param bio PKCS12バッファを書き込むためのWOLFSSL_BIO構造。
  4737. _Example_
  4738. \code
  4739. WC_PKCS12 pkcs12;
  4740. FILE *f;
  4741. byte buffer[5300];
  4742. char file[] = "./test.p12";
  4743. int bytes;
  4744. WOLFSSL_BIO* bio;
  4745. pkcs12 = wc_PKCS12_new();
  4746. f = fopen(file, "rb");
  4747. bytes = (int)fread(buffer, 1, sizeof(buffer), f);
  4748. fclose(f);
  4749. //convert the DER file into an internal structure
  4750. wc_d2i_PKCS12(buffer, bytes, pkcs12);
  4751. bio = wolfSSL_BIO_new(wolfSSL_BIO_s_mem());
  4752. //convert PKCS12 structure into bio
  4753. wolfSSL_i2d_PKCS12_bio(bio, pkcs12);
  4754. wc_PKCS12_free(pkcs)
  4755. //use bio
  4756. \endcode
  4757. \sa wolfSSL_PKCS12_parse
  4758. \sa wc_PKCS12_free
  4759. */
  4760. WC_PKCS12* wolfSSL_i2d_PKCS12_bio(WOLFSSL_BIO* bio,
  4761. WC_PKCS12* pkcs12);
  4762. /*!
  4763. \ingroup openSSL
  4764. \brief pkcs12は、configureコマンドへの-enable-openSSLAXTRAを追加することで有効にできます。それは復号化のためにトリプルDESとRC4を使うことができるので、OpenSSlextra(--enable-des3 -enable-arc4)を有効にするときにもこれらの機能を有効にすることをお勧めします。 wolfsslは現在RC2をサポートしていませんので、RC2での復号化は現在利用できません。これは、.p12ファイルを作成するためにOpenSSLコマンドラインで使用されるデフォルトの暗号化方式では注目すかもしれません。 WOLFSSL_PKCS12_PARSE(PKCS12_PARSE)。この関数が最初に行っているのは、存在する場合はMacが正しいチェックです。 MACが失敗した場合、関数は返され、保存されているコンテンツ情報のいずれかを復号化しようとしません。この関数は、バッグタイプを探している各コンテンツ情報を介して解析します。バッグタイプがわかっている場合は、必要に応じて復号化され、構築されている証明書のリストに格納されているか、見つかったキーとして保存されます。すべてのバッグを介して解析した後、見つかったキーは、一致するペアが見つかるまで証明書リストと比較されます。この一致するペアはキーと証明書として返され、オプションで見つかった証明書リストはstack_of証明書として返されます。瞬間、CRL、秘密または安全なバッグがスキップされ、解析されません。デバッグプリントアウトを見ることで、これらまたは他の「不明」バッグがスキップされているかどうかがわかります。フレンドリー名などの追加の属性は、PKCS12ファイルを解析するときにスキップされます。
  4765. \return SSL_SUCCESS PKCS12の解析に成功しました。
  4766. \return SSL_FAILURE エラーケースに遭遇した場合
  4767. \param pkcs12 wc_pkcs12解析する構造
  4768. \param paswd PKCS12を復号化するためのパスワード。
  4769. \param pkey PKCS12からデコードされた秘密鍵を保持するための構造。
  4770. \param cert PKCS12から復号された証明書を保持する構造
  4771. _Example_
  4772. \code
  4773. WC_PKCS12* pkcs;
  4774. WOLFSSL_BIO* bio;
  4775. WOLFSSL_X509* cert;
  4776. WOLFSSL_EVP_PKEY* pkey;
  4777. STACK_OF(X509) certs;
  4778. //bio loads in PKCS12 file
  4779. wolfSSL_d2i_PKCS12_bio(bio, &pkcs);
  4780. wolfSSL_PKCS12_parse(pkcs, “a password”, &pkey, &cert, &certs)
  4781. wc_PKCS12_free(pkcs)
  4782. //use cert, pkey, and optionally certs stack
  4783. \endcode
  4784. \sa wolfSSL_d2i_PKCS12_bio
  4785. \sa wc_PKCS12_free
  4786. */
  4787. int wolfSSL_PKCS12_parse(WC_PKCS12* pkcs12, const char* psw,
  4788. WOLFSSL_EVP_PKEY** pkey, WOLFSSL_X509** cert, WOLF_STACK_OF(WOLFSSL_X509)** ca);
  4789. /*!
  4790. \ingroup CertsKeys
  4791. \brief サーバーDIFFIE-HELLMANエフェメラルパラメータ設定。この関数は、サーバーがDHEを使用する暗号スイートをネゴシエートしている場合に使用するグループパラメータを設定します。
  4792. \return SSL_SUCCESS 成功時に返されます。
  4793. \return MEMORY_ERROR メモリエラーが発生した場合に返されます。
  4794. \return SIDE_ERROR この関数がSSLサーバではなくSSLクライアントで呼び出されると返されます。
  4795. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  4796. \param p Diffie-Hellman素数パラメータ。
  4797. \param pSz pのサイズ。
  4798. \param g Diffie-Hellman "Generator"パラメータ。
  4799. _Example_
  4800. \code
  4801. WOLFSSL* ssl;
  4802. static unsigned char p[] = {...};
  4803. static unsigned char g[] = {...};
  4804. ...
  4805. wolfSSL_SetTmpDH(ssl, p, sizeof(p), g, sizeof(g));
  4806. \endcode
  4807. \sa SSL_accept
  4808. */
  4809. int wolfSSL_SetTmpDH(WOLFSSL* ssl, const unsigned char* p, int pSz,
  4810. const unsigned char* g, int gSz);
  4811. /*!
  4812. \ingroup CertsKeys
  4813. \brief 関数はwolfssl_settmph_buffer_wrapperを呼び出します。これはDiffie-Hellmanパラメータのラッパーです。
  4814. \return SSL_SUCCESS 実行に成功した場合。
  4815. \return SSL_BAD_FILETYPE ファイルの種類がpemではなく、asn.1ではない場合WC_DHParamSLOADが正常に戻っていない場合は、も返されます。
  4816. \return SSL_NO_PEM_HEADER PEMヘッダーがない場合はPemToderから返します。
  4817. \return SSL_BAD_FILE PemToderにファイルエラーがある場合に返されます。
  4818. \return SSL_FATAL_ERROR コピーエラーが発生した場合はPemToderから返されました。
  4819. \return MEMORY_E - メモリ割り当てエラーが発生した場合
  4820. \return BAD_FUNC_ARG wolfssl構造体がnullの場合、またはそうでない場合はサブルーチンに渡された場合に返されます。
  4821. \return DH_KEY_SIZE_E wolfssl_settmph()またはWOLFSSL_CTX_settmph()の鍵サイズエラーがある場合に返されます。
  4822. \return SIDE_ERROR wolfssl_settmphのサーバー側ではない場合に返されます。
  4823. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  4824. \param buf wolfssl_settmph_file_wrapperから渡された割り当てバッファー。
  4825. \param sz ファイルのサイズ(wolfssl_settmph_file_wrapper内のfname)を保持するロングint。
  4826. _Example_
  4827. \code
  4828. Static int wolfSSL_SetTmpDH_file_wrapper(WOLFSSL_CTX* ctx, WOLFSSL* ssl,
  4829. Const char* fname, int format);
  4830. long sz = 0;
  4831. byte* myBuffer = staticBuffer[FILE_BUFFER_SIZE];
  4832. if(ssl)
  4833. ret = wolfSSL_SetTmpDH_buffer(ssl, myBuffer, sz, format);
  4834. \endcode
  4835. \sa wolfSSL_SetTmpDH_buffer_wrapper
  4836. \sa wc_DhParamsLoad
  4837. \sa wolfSSL_SetTmpDH
  4838. \sa PemToDer
  4839. \sa wolfSSL_CTX_SetTmpDH
  4840. \sa wolfSSL_CTX_SetTmpDH_file
  4841. */
  4842. int wolfSSL_SetTmpDH_buffer(WOLFSSL* ssl, const unsigned char* b, long sz,
  4843. int format);
  4844. /*!
  4845. \ingroup CertsKeys
  4846. \brief この関数は、wolfssl_settmph_file_wrapperを呼び出してサーバdiffie-hellmanパラメータを設定します。
  4847. \return SSL_SUCCESS この機能の正常な完了とそのサブルーチンの完了に戻りました。
  4848. \return MEMORY_E この関数またはサブルーチンにメモリ割り当てが失敗した場合に返されます。
  4849. \return SIDE_ERROR WolfSSL構造体にあるオプション構造のサイドメンバーがサーバー側ではない場合。
  4850. \return SSL_BAD_FILETYPE 証明書が一連のチェックに失敗した場合は返します。
  4851. \return DH_KEY_SIZE_E DHパラメーターの鍵サイズがWolfSSL構造体のMinkKeyszメンバーの値より小さい場合に返されます。
  4852. \return DH_KEY_SIZE_E DHパラメータの鍵サイズがwolfssl構造体のMAXDHKEYSZメンバーの値よりも大きい場合に返されます。
  4853. \return BAD_FUNC_ARG wolfssl構造など、引数値がnullの場合に返します。
  4854. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  4855. \param fname 証明書を保持している定数の文字ポインタ。
  4856. _Example_
  4857. \code
  4858. WOLFSSL* ssl = wolfSSL_new(ctx);
  4859. const char* dhParam;
  4860. AssertIntNE(SSL_SUCCESS,
  4861. wolfSSL_SetTmpDH_file(ssl, dhParam, SSL_FILETYPE_PEM));
  4862. \endcode
  4863. \sa wolfSSL_CTX_SetTmpDH_file
  4864. \sa wolfSSL_SetTmpDH_file_wrapper
  4865. \sa wolfSSL_SetTmpDH_buffer
  4866. \sa wolfSSL_CTX_SetTmpDH_buffer
  4867. \sa wolfSSL_SetTmpDH_buffer_wrapper
  4868. \sa wolfSSL_SetTmpDH
  4869. \sa wolfSSL_CTX_SetTmpDH
  4870. */
  4871. int wolfSSL_SetTmpDH_file(WOLFSSL* ssl, const char* f, int format);
  4872. /*!
  4873. \ingroup CertsKeys
  4874. \brief サーバーCTX Diffie-Hellmanのパラメータを設定します。
  4875. \return SSL_SUCCESS 関数とすべてのサブルーチンがエラーなしで戻った場合に返されます。
  4876. \return BAD_FUNC_ARG CTX、P、またはGパラメーターがNULLの場合に返されます。
  4877. \return DH_KEY_SIZE_E DHパラメータの鍵サイズがWOLFSSL_CTX構造体のMindHKEYSZメンバーの値より小さい場合に返されます。
  4878. \return DH_KEY_SIZE_E DHパラメータの鍵サイズがWOLFSSL_CTX構造体のMaxDhkeySZメンバーの値よりも大きい場合に返されます。
  4879. \return MEMORY_E この関数またはサブルーチンにメモリの割り当てが失敗した場合に返されます。
  4880. \param ctx wolfSSL_CTX_new()を使用して作成されたWOLFSSL_CTX構造体へのポインタ。
  4881. \param p ServerDH_P構造体のバッファメンバーにロードされた定数の符号なし文字ポインタ。
  4882. \param pSz pのサイズを表すint型は、max_dh_sizeに初期化されます。
  4883. \param g ServerDh_g構造体のバッファメンバーにロードされた定数の符号なし文字ポインタ。
  4884. _Example_
  4885. \code
  4886. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol );
  4887. byte* p;
  4888. byte* g;
  4889. word32 pSz = (word32)sizeof(p)/sizeof(byte);
  4890. word32 gSz = (word32)sizeof(g)/sizeof(byte);
  4891. int ret = wolfSSL_CTX_SetTmpDH(ctx, p, pSz, g, gSz);
  4892. if(ret != SSL_SUCCESS){
  4893. // Failure case
  4894. }
  4895. \endcode
  4896. \sa wolfSSL_SetTmpDH
  4897. \sa wc_DhParamsLoad
  4898. */
  4899. int wolfSSL_CTX_SetTmpDH(WOLFSSL_CTX* ctx, const unsigned char* p,
  4900. int pSz, const unsigned char* g, int gSz);
  4901. /*!
  4902. \ingroup CertsKeys
  4903. \brief wolfssl_settmph_buffer_wrapperを呼び出すラッパー関数
  4904. \return 0 実行が成功するために返されました。
  4905. \return BAD_FUNC_ARG CTXパラメータまたはBUFパラメータがNULLの場合に返されます。
  4906. \return MEMORY_E メモリ割り当てエラーがある場合
  4907. \return SSL_BAD_FILETYPE フォーマットが正しくない場合に返されます。
  4908. \param ctx wolfSSL_CTX_new()を使用して作成されたWolfSSL構造へのポインタ。
  4909. \param buf バッファとして割り当てられ、wolfssl_settmpdh_buffer_wrapperに渡された定数の符号なし文字型へのポインタ。
  4910. \param sz wolfssl_settmph_file_wrapper()のFNAMEパラメータから派生した長い整数型。
  4911. _Example_
  4912. \code
  4913. static int wolfSSL_SetTmpDH_file_wrapper(WOLFSSL_CTX* ctx, WOLFSSL* ssl,
  4914. Const char* fname, int format);
  4915. #ifdef WOLFSSL_SMALL_STACK
  4916. byte staticBuffer[1]; // force heap usage
  4917. #else
  4918. byte* staticBuffer;
  4919. long sz = 0;
  4920. if(ssl){
  4921. ret = wolfSSL_SetTmpDH_buffer(ssl, myBuffer, sz, format);
  4922. } else {
  4923. ret = wolfSSL_CTX_SetTmpDH_buffer(ctx, myBuffer, sz, format);
  4924. }
  4925. \endcode
  4926. \sa wolfSSL_SetTmpDH_buffer_wrapper
  4927. \sa wolfSSL_SetTMpDH_buffer
  4928. \sa wolfSSL_SetTmpDH_file_wrapper
  4929. \sa wolfSSL_CTX_SetTmpDH_file
  4930. */
  4931. int wolfSSL_CTX_SetTmpDH_buffer(WOLFSSL_CTX* ctx, const unsigned char* b,
  4932. long sz, int format);
  4933. /*!
  4934. \ingroup CertsKeys
  4935. \brief この関数は、wolfssl_settmph_file_wrapperを呼び出してサーバーDiffie-Hellmanパラメータを設定します。
  4936. \return SSL_SUCCESS wolfssl_settmph_file_wrapperまたはそのサブルーチンのいずれかが正常に戻った場合に返されます。
  4937. \return MEMORY_E 動的メモリの割り当てがサブルーチンで失敗した場合に返されます。
  4938. \return BAD_FUNC_ARG CTXまたはFNAMEパラメータがNULLまたはサブルーチンがNULL引数に渡された場合に返されます。
  4939. \return SSL_BAD_FILE 証明書ファイルが開くことができない場合、またはファイルの一連のチェックがwolfssl_settmpdh_file_wrapperから失敗した場合に返されます。
  4940. \return SSL_BAD_FILETYPE フォーマットがwolfssl_settmph_buffer_wrapper()からPEMまたはASN.1ではない場合に返されます。
  4941. \return DH_KEY_SIZE_E DHパラメータの鍵サイズがWOLFSSL_CTX構造体のMindHKEYSZメンバーの値より小さい場合に返されます。
  4942. \return DH_KEY_SIZE_E DHパラメータの鍵サイズがWOLFSSL_CTX構造体のMaxDhkeySZメンバーの値よりも大きい場合に返されます。
  4943. \return SIDE_ERROR wolfssl_settmph()で返されたサイドがサーバー終了ではない場合。
  4944. \return SSL_NO_PEM_HEADER PEMヘッダーがない場合はPemToderから返されます。
  4945. \return SSL_FATAL_ERROR メモリコピーの失敗がある場合はPemToderから返されます。
  4946. \param ctx wolfSSL_CTX_new()を使用して作成されたWOLFSSL_CTX構造体へのポインタ。
  4947. \param fname 証明書ファイルへの定数文字ポインタ。
  4948. _Example_
  4949. \code
  4950. #define dhParam “certs/dh2048.pem”
  4951. #DEFINE aSSERTiNTne(x, y) AssertInt(x, y, !=, ==)
  4952. WOLFSSL_CTX* ctx;
  4953. AssertNotNull(ctx = wolfSSL_CTX_new(wolfSSLv23_client_method()))
  4954. AssertIntNE(SSL_SUCCESS, wolfSSL_CTX_SetTmpDH_file(NULL, dhParam,
  4955. SSL_FILETYPE_PEM));
  4956. \endcode
  4957. \sa wolfSSL_SetTmpDH_buffer_wrapper
  4958. \sa wolfSSL_SetTmpDH
  4959. \sa wolfSSL_CTX_SetTmpDH
  4960. \sa wolfSSL_SetTmpDH_buffer
  4961. \sa wolfSSL_CTX_SetTmpDH_buffer
  4962. \sa wolfSSL_SetTmpDH_file_wrapper
  4963. \sa AllocDer
  4964. \sa PemToDer
  4965. */
  4966. int wolfSSL_CTX_SetTmpDH_file(WOLFSSL_CTX* ctx, const char* f,
  4967. int format);
  4968. /*!
  4969. \ingroup CertsKeys
  4970. \brief この関数は、WOLFSSL_CTX構造体のminkkeyszメンバーにアクセスして、Diffie Hellman鍵サイズの最小サイズ(ビット単位)を設定します。
  4971. \return SSL_SUCCESS 関数が正常に完了した場合に返されます。
  4972. \return BAD_FUNC_ARG WOLFSSL_CTX構造体がnullの場合、またはキーz_BITSが16,000を超えるか、または8によって割り切れない場合に返されます。
  4973. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  4974. _Example_
  4975. \code
  4976. public static int CTX_SetMinDhKey_Sz(IntPtr ctx, short minDhKey){
  4977. return wolfSSL_CTX_SetMinDhKey_Sz(local_ctx, minDhKeyBits);
  4978. \endcode
  4979. \sa wolfSSL_SetMinDhKey_Sz
  4980. \sa wolfSSL_CTX_SetMaxDhKey_Sz
  4981. \sa wolfSSL_SetMaxDhKey_Sz
  4982. \sa wolfSSL_GetDhKey_Sz
  4983. \sa wolfSSL_CTX_SetTMpDH_file
  4984. */
  4985. int wolfSSL_CTX_SetMinDhKey_Sz(WOLFSSL_CTX* ctx, word16);
  4986. /*!
  4987. \ingroup CertsKeys
  4988. \brief WolfSSL構造のDiffie-Hellman鍵の最小サイズ(ビット単位)を設定します。
  4989. \return SSL_SUCCESS 最小サイズは正常に設定されました。
  4990. \return BAD_FUNC_ARG wolfssl構造はNULL、またはKeysz_BITSが16,000を超えるか、または8によって割り切れない場合
  4991. \param ssl wolfssl_new()を使用して作成されたWolfSSL構造へのポインタ。
  4992. _Example_
  4993. \code
  4994. WOLFSSL* ssl = wolfSSL_new(ctx);
  4995. word16 keySz_bits;
  4996. ...
  4997. if(wolfSSL_SetMinDhKey_Sz(ssl, keySz_bits) != SSL_SUCCESS){
  4998. // Failed to set.
  4999. }
  5000. \endcode
  5001. \sa wolfSSL_CTX_SetMinDhKey_Sz
  5002. \sa wolfSSL_GetDhKey_Sz
  5003. */
  5004. int wolfSSL_SetMinDhKey_Sz(WOLFSSL* ssl, word16 keySz_bits);
  5005. /*!
  5006. \ingroup CertsKeys
  5007. \brief この関数は、WOLFSSL_CTX構造体のmaxdhkeyszメンバーにアクセスして、Diffie Hellman鍵サイズの最大サイズ(ビット単位)を設定します。
  5008. \return SSL_SUCCESS 関数が正常に完了した場合に返されます。
  5009. \return BAD_FUNC_ARG WOLFSSL_CTX構造体がnullの場合、またはキーz_BITSが16,000を超えるか、または8によって割り切れない場合に返されます。
  5010. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5011. _Example_
  5012. \code
  5013. public static int CTX_SetMaxDhKey_Sz(IntPtr ctx, short maxDhKey){
  5014. return wolfSSL_CTX_SetMaxDhKey_Sz(local_ctx, keySz_bits);
  5015. \endcode
  5016. \sa wolfSSL_SetMinDhKey_Sz
  5017. \sa wolfSSL_CTX_SetMinDhKey_Sz
  5018. \sa wolfSSL_SetMaxDhKey_Sz
  5019. \sa wolfSSL_GetDhKey_Sz
  5020. \sa wolfSSL_CTX_SetTMpDH_file
  5021. */
  5022. int wolfSSL_CTX_SetMaxDhKey_Sz(WOLFSSL_CTX* ctx, word16 keySz_bits);
  5023. /*!
  5024. \ingroup CertsKeys
  5025. \brief WolfSSL構造のDiffie-Hellman鍵の最大サイズ(ビット単位)を設定します。
  5026. \return SSL_SUCCESS 最大サイズは正常に設定されました。
  5027. \return BAD_FUNC_ARG WOLFSSL構造はNULLまたはKEYSZパラメータは許容サイズより大きかったか、または8によって割り切れませんでした。
  5028. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5029. _Example_
  5030. \code
  5031. WOLFSSL* ssl = wolfSSL_new(ctx);
  5032. word16 keySz;
  5033. ...
  5034. if(wolfSSL_SetMaxDhKey(ssl, keySz) != SSL_SUCCESS){
  5035. // Failed to set.
  5036. }
  5037. \endcode
  5038. \sa wolfSSL_CTX_SetMaxDhKey_Sz
  5039. \sa wolfSSL_GetDhKey_Sz
  5040. */
  5041. int wolfSSL_SetMaxDhKey_Sz(WOLFSSL* ssl, word16 keySz_bits);
  5042. /*!
  5043. \ingroup CertsKeys
  5044. \brief オプション構造のメンバーであるDHKEYSZ(ビット内)の値を返します。この値は、Diffie-Hellman鍵サイズをバイト単位で表します。
  5045. \return dhKeySz サイズを表す整数値であるssl-> options.dhkeyszで保持されている値を返します。
  5046. \return BAD_FUNC_ARG wolfssl構造体がNULLの場合に返します。
  5047. _Example_
  5048. \code
  5049. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
  5050. WOLFSSL* ssl = wolfSSL_new(ctx);
  5051. int dhKeySz;
  5052. ...
  5053. dhKeySz = wolfSSL_GetDhKey_Sz(ssl);
  5054. if(dhKeySz == BAD_FUNC_ARG || dhKeySz <= 0){
  5055. // Failure case
  5056. } else {
  5057. // dhKeySz holds the size of the key.
  5058. }
  5059. \endcode
  5060. \sa wolfSSL_SetMinDhKey_sz
  5061. \sa wolfSSL_CTX_SetMinDhKey_Sz
  5062. \sa wolfSSL_CTX_SetTmpDH
  5063. \sa wolfSSL_SetTmpDH
  5064. \sa wolfSSL_CTX_SetTmpDH_file
  5065. */
  5066. int wolfSSL_GetDhKey_Sz(WOLFSSL*);
  5067. /*!
  5068. \ingroup CertsKeys
  5069. \brief WOLFSSL_CTX構造体とwolfssl_cert_manager構造の両方で最小RSA鍵サイズを設定します。
  5070. \return SSL_SUCCESS 機能の実行に成功したことに戻ります。
  5071. \return BAD_FUNC_ARG CTX構造がNULLの場合、またはKEYSZがゼロより小さいか、または8によって割り切れない場合に返されます。
  5072. \param ctx wolfSSL_CTX_new()を使用して作成されたWOLFSSL_CTX構造体へのポインタ。
  5073. _Example_
  5074. \code
  5075. WOLFSSL_CTX* ctx = SSL_CTX_new(method);
  5076. (void)minDhKeyBits;
  5077. ourCert = myoptarg;
  5078. minDhKeyBits = atoi(myoptarg);
  5079. if(wolfSSL_CTX_SetMinRsaKey_Sz(ctx, minRsaKeyBits) != SSL_SUCCESS){
  5080. \endcode
  5081. \sa wolfSSL_SetMinRsaKey_Sz
  5082. */
  5083. int wolfSSL_CTX_SetMinRsaKey_Sz(WOLFSSL_CTX* ctx, short keySz);
  5084. /*!
  5085. \ingroup CertsKeys
  5086. \brief WolfSSL構造にあるRSAのためのビットで最小許容鍵サイズを設定します。
  5087. \return SSL_SUCCESS 最小値が正常に設定されました。
  5088. \return BAD_FUNC_ARG SSL構造がNULLの場合、またはKSYSZがゼロより小さい場合、または8によって割り切れない場合に返されます。
  5089. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5090. _Example_
  5091. \code
  5092. WOLFSSL* ssl = wolfSSL_new(ctx);
  5093. short keySz;
  5094. int isSet = wolfSSL_SetMinRsaKey_Sz(ssl, keySz);
  5095. if(isSet != SSL_SUCCESS){
  5096. Failed to set.
  5097. }
  5098. \endcode
  5099. \sa wolfSSL_CTX_SetMinRsaKey_Sz
  5100. */
  5101. int wolfSSL_SetMinRsaKey_Sz(WOLFSSL* ssl, short keySz);
  5102. /*!
  5103. \ingroup CertsKeys
  5104. \brief wolf_ctx構造体とwolfssl_cert_manager構造体のECC鍵の最小サイズをビット単位で設定します。
  5105. \return SSL_SUCCESS 実行が成功したために返され、MineCkeyszメンバーが設定されます。
  5106. \return BAD_FUNC_ARG WOLFSSL_CTX構造体がnullの場合、または鍵が負の場合、または8によって割り切れない場合に返されます。
  5107. \param ctx wolfSSL_CTX_new()を使用して作成されたWOLFSSL_CTX構造体へのポインタ。
  5108. _Example_
  5109. \code
  5110. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
  5111. short keySz; // minimum key size
  5112. if(wolfSSL_CTX_SetMinEccKey(ctx, keySz) != SSL_SUCCESS){
  5113. // Failed to set min key size
  5114. }
  5115. \endcode
  5116. \sa wolfSSL_SetMinEccKey_Sz
  5117. */
  5118. int wolfSSL_CTX_SetMinEccKey_Sz(WOLFSSL_CTX* ssl, short keySz);
  5119. /*!
  5120. \ingroup CertsKeys
  5121. \brief オプション構造のMineCckeyszメンバーの値を設定します。オプション構造体は、WolfSSL構造のメンバーであり、SSLパラメータを介してアクセスされます。
  5122. \return SSL_SUCCESS 関数がオプション構造のMineCckeyszメンバーを正常に設定した場合。
  5123. \return BAD_FUNC_ARG WOLFSSL_CTX構造体がnullの場合、または鍵サイズ(keysz)が0(ゼロ)未満の場合、または8で割り切れない場合。
  5124. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5125. _Example_
  5126. \code
  5127. WOLFSSL* ssl = wolfSSL_new(ctx); // New session
  5128. short keySz = 999; // should be set to min key size allowable
  5129. ...
  5130. if(wolfSSL_SetMinEccKey_Sz(ssl, keySz) != SSL_SUCCESS){
  5131. // Failure case.
  5132. }
  5133. \endcode
  5134. \sa wolfSSL_CTX_SetMinEccKey_Sz
  5135. \sa wolfSSL_CTX_SetMinRsaKey_Sz
  5136. \sa wolfSSL_SetMinRsaKey_Sz
  5137. */
  5138. int wolfSSL_SetMinEccKey_Sz(WOLFSSL* ssl, short keySz);
  5139. /*!
  5140. \ingroup CertsKeys
  5141. \brief この関数は、eap_tlsとeap-ttlsによって、マスターシークレットからキーイングマテリアルを導出します。
  5142. \return BUFFER_E バッファの実際のサイズが許容最大サイズを超える場合に返されます。
  5143. \return MEMORY_E メモリ割り当てにエラーがある場合に返されます。
  5144. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5145. \param msk p_hash関数の結果を保持するvoidポインタ変数。
  5146. \param len MSK変数の長さを表す符号なし整数。
  5147. _Example_
  5148. \code
  5149. WOLFSSL* ssl = wolfSSL_new(ctx);;
  5150. void* msk;
  5151. unsigned int len;
  5152. const char* label;
  5153. return wolfSSL_make_eap_keys(ssl, msk, len, label);
  5154. \endcode
  5155. \sa wc_PRF
  5156. \sa wc_HmacFinal
  5157. \sa wc_HmacUpdate
  5158. */
  5159. int wolfSSL_make_eap_keys(WOLFSSL* ssl, void* key, unsigned int len,
  5160. const char* label);
  5161. /*!
  5162. \ingroup IO
  5163. \brief Writev Semanticsをシミュレートしますが、SSL_Write()の動作のために実際にはブロックしないため、フロント追加が小さくなる可能性があるためWritevを使いやすいソフトウェアに移植する。
  5164. \return >0 成功時に書かれたバイト数。
  5165. \return 0 失敗したときに返されます。特定のエラーコードについてwolfSSL_get_error()を呼び出します。
  5166. \return MEMORY_ERROR メモリエラーが発生した場合に返されます。
  5167. \return SSL_FATAL_ERROR エラーが発生したとき、または非ブロッキングソケットを使用するときには、SSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEエラーが受信され、再度WOLFSSL_WRITE()を呼び出す必要がある場合は、障害が発生します。特定のエラーコードを取得するには、wolfSSL_get_error()を使用してください。
  5168. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5169. \param iov 書き込みへのI / Oベクトルの配列
  5170. _Example_
  5171. \code
  5172. WOLFSSL* ssl = 0;
  5173. char *bufA = “hello\n”;
  5174. char *bufB = “hello world\n”;
  5175. int iovcnt;
  5176. struct iovec iov[2];
  5177. iov[0].iov_base = buffA;
  5178. iov[0].iov_len = strlen(buffA);
  5179. iov[1].iov_base = buffB;
  5180. iov[1].iov_len = strlen(buffB);
  5181. iovcnt = 2;
  5182. ...
  5183. ret = wolfSSL_writev(ssl, iov, iovcnt);
  5184. // wrote “ret” bytes, or error if <= 0.
  5185. \endcode
  5186. \sa wolfSSL_write
  5187. */
  5188. int wolfSSL_writev(WOLFSSL* ssl, const struct iovec* iov,
  5189. int iovcnt);
  5190. /*!
  5191. \ingroup Setup
  5192. \brief この関数はCA署名者リストをアンロードし、署名者全体のテーブルを解放します。
  5193. \return SSL_SUCCESS 機能の実行に成功したことに戻ります。
  5194. \return BAD_FUNC_ARG WOLFSSL_CTX構造体がnullの場合、または他の方法では未解決の引数値がサブルーチンに渡された場合に返されます。
  5195. \return BAD_MUTEX_E ミューテックスエラーが発生した場合に返されます。lockmutex()は0を返しませんでした。
  5196. _Example_
  5197. \code
  5198. WOLFSSL_METHOD method = wolfTLSv1_2_client_method();
  5199. WOLFSSL_CTX* ctx = wolfSSL_CTX_new(method);
  5200. if(!wolfSSL_CTX_UnloadCAs(ctx)){
  5201. // The function did not unload CAs
  5202. }
  5203. \endcode
  5204. \sa wolfSSL_CertManagerUnloadCAs
  5205. \sa LockMutex
  5206. \sa FreeSignerTable
  5207. \sa UnlockMutex
  5208. */
  5209. int wolfSSL_CTX_UnloadCAs(WOLFSSL_CTX*);
  5210. /*!
  5211. \ingroup Setup
  5212. \brief この関数は、以前にロードされたすべての信頼できるピア証明書をアンロードするために使用されます。マクロwolfssl_trust_peer_certを定義することで機能が有効になっています。
  5213. \return SSL_SUCCESS 成功時に返されます。
  5214. \return BAD_FUNC_ARG CTXがNULLの場合に返されます。
  5215. \return SSL_BAD_FILE ファイルが存在しない場合に返されます。読み込め、または破損していません。
  5216. \return MEMORY_E メモリ不足状態が発生した場合に返されます。
  5217. _Example_
  5218. \code
  5219. int ret = 0;
  5220. WOLFSSL_CTX* ctx;
  5221. ...
  5222. ret = wolfSSL_CTX_Unload_trust_peers(ctx);
  5223. if (ret != SSL_SUCCESS) {
  5224. // error unloading trusted peer certs
  5225. }
  5226. ...
  5227. \endcode
  5228. \sa wolfSSL_CTX_trust_peer_buffer
  5229. \sa wolfSSL_CTX_trust_peer_cert
  5230. */
  5231. int wolfSSL_CTX_Unload_trust_peers(WOLFSSL_CTX*);
  5232. /*!
  5233. \ingroup Setup
  5234. \brief この関数は、TLS / SSLハンドシェイクを実行するときにピアを検証するために使用する証明書をロードします。ハンドシェイク中に送信されたピア証明書は、使用可能なときにスキッドを使用することによって比較されます。これら2つのことが一致しない場合は、ロードされたCASが使用されます。ファイルの代わりにバッファーの場合は、wolfssl_ctx_trust_peer_certと同じ機能です。特徴はマクロwolfssl_trust_peer_certを定義することによって有効になっています適切な使用法の例を参照してください。
  5235. \return SSL_SUCCESS 成功すると
  5236. \return SSL_FAILURE CTXがNULLの場合、または両方のファイルと種類が無効な場合に返されます。
  5237. \return SSL_BAD_FILETYPE ファイルが間違った形式である場合に返されます。
  5238. \return SSL_BAD_FILE ファイルが存在しない場合に返されます。読み込め、または破損していません。
  5239. \return MEMORY_E メモリ不足状態が発生した場合に返されます。
  5240. \return ASN_INPUT_E base16デコードがファイルに対して失敗した場合に返されます。
  5241. \param ctx wolfSSL_CTX_new()で作成されたSSLコンテキストへのポインタ。
  5242. \param buffer 証明書を含むバッファへのポインタ。
  5243. \param sz バッファ入力の長さ。
  5244. _Example_
  5245. \code
  5246. int ret = 0;
  5247. WOLFSSL_CTX* ctx;
  5248. ...
  5249. ret = wolfSSL_CTX_trust_peer_buffer(ctx, bufferPtr, bufferSz,
  5250. SSL_FILETYPE_PEM);
  5251. if (ret != SSL_SUCCESS) {
  5252. // error loading trusted peer cert
  5253. }
  5254. ...
  5255. \endcode
  5256. \sa wolfSSL_CTX_load_verify_buffer
  5257. \sa wolfSSL_CTX_use_certificate_file
  5258. \sa wolfSSL_CTX_use_PrivateKey_file
  5259. \sa wolfSSL_CTX_use_certificate_chain_file
  5260. \sa wolfSSL_CTX_trust_peer_cert
  5261. \sa wolfSSL_CTX_Unload_trust_peers
  5262. \sa wolfSSL_use_certificate_file
  5263. \sa wolfSSL_use_PrivateKey_file
  5264. \sa wolfSSL_use_certificate_chain_file
  5265. */
  5266. int wolfSSL_CTX_trust_peer_buffer(WOLFSSL_CTX* ctx, const unsigned char* in,
  5267. long sz, int format);
  5268. /*!
  5269. \ingroup CertsKeys
  5270. \brief この関数はCA証明書バッファをWolfSSLコンテキストにロードします。バッファ以外のバージョンのように動作し、ファイルの代わりに入力としてバッファと呼ばれる機能が異なるだけです。バッファはサイズSZの引数によって提供されます。形式バッファのフォーマットタイプを指定します。SSL_FILETYPE_ASN1またはSSL_FILETYPE_PEM。フォーマットがPEM内にある限り、バッファあたり複数のCA証明書をロードすることができます。適切な使用法の例をご覧ください。
  5271. \return SSL_SUCCESS 成功すると
  5272. \return SSL_BAD_FILETYPE ファイルが間違った形式である場合に返されます。
  5273. \return SSL_BAD_FILE ファイルが存在しない場合に返されます。読み込め、または破損していません。
  5274. \return MEMORY_E メモリ不足状態が発生した場合に返されます。
  5275. \return ASN_INPUT_E base16デコードがファイルに対して失敗した場合に返されます。
  5276. \return BUFFER_E チェーンバッファが受信バッファよりも大きい場合に返されます。
  5277. \param ctx wolfSSL_CTX_new()で作成されたSSLコンテキストへのポインタ。
  5278. \param in CA証明書バッファへのポインタ。
  5279. \param sz 入力CA証明書バッファのサイズ、IN。
  5280. _Example_
  5281. \code
  5282. int ret = 0;
  5283. int sz = 0;
  5284. WOLFSSL_CTX* ctx;
  5285. byte certBuff[...];
  5286. ...
  5287. ret = wolfSSL_CTX_load_verify_buffer(ctx, certBuff, sz, SSL_FILETYPE_PEM);
  5288. if (ret != SSL_SUCCESS) {
  5289. // error loading CA certs from buffer
  5290. }
  5291. ...
  5292. \endcode
  5293. \sa wolfSSL_CTX_load_verify_locations
  5294. \sa wolfSSL_CTX_use_certificate_buffer
  5295. \sa wolfSSL_CTX_use_PrivateKey_buffer
  5296. \sa wolfSSL_CTX_use_certificate_chain_buffer
  5297. \sa wolfSSL_use_certificate_buffer
  5298. \sa wolfSSL_use_PrivateKey_buffer
  5299. \sa wolfSSL_use_certificate_chain_buffer
  5300. */
  5301. int wolfSSL_CTX_load_verify_buffer(WOLFSSL_CTX* ctx, const unsigned char* in,
  5302. long sz, int format);
  5303. /*!
  5304. \ingroup CertsKeys
  5305. \brief この関数はCA証明書バッファをWolfSSLコンテキストにロードします。バッファ以外のバージョンのように動作し、ファイルの代わりに入力としてバッファと呼ばれる機能が異なるだけです。バッファはサイズSZの引数によって提供されます。形式バッファのフォーマットタイプを指定します。SSL_FILETYPE_ASN1またはSSL_FILETYPE_PEM。フォーマットがPEM内にある限り、バッファあたり複数のCA証明書をロードすることができます。_EXバージョンはPR 2413に追加され、UserChainとFlagsの追加の引数をサポートします。
  5306. \return SSL_SUCCESS 成功すると
  5307. \return SSL_BAD_FILETYPE ファイルが間違った形式である場合に返されます。
  5308. \return SSL_BAD_FILE ファイルが存在しない場合に返されます。読み込め、または破損していません。
  5309. \return MEMORY_E メモリ不足状態が発生した場合に返されます。
  5310. \return ASN_INPUT_E base16デコードがファイルに対して失敗した場合に返されます。
  5311. \return BUFFER_E チェーンバッファが受信バッファよりも大きい場合に返されます。
  5312. \param ctx wolfSSL_CTX_new()で作成されたSSLコンテキストへのポインタ。
  5313. \param in CA証明書バッファへのポインタ。
  5314. \param sz 入力CA証明書バッファのサイズ、IN。
  5315. \param format バッファ証明書の形式、SSL_FILETYPE_ASN1またはSSL_FILETYPE_PEM。
  5316. \param userChain フォーマットwolfssl_filetype_asn1を使用する場合、このセットはゼロ以外のセットを示しています.Derのチェーンが表示されています。
  5317. _Example_
  5318. \code
  5319. int ret = 0;
  5320. int sz = 0;
  5321. WOLFSSL_CTX* ctx;
  5322. byte certBuff[...];
  5323. ...
  5324. // Example for force loading an expired certificate
  5325. ret = wolfSSL_CTX_load_verify_buffer_ex(ctx, certBuff, sz, SSL_FILETYPE_PEM,
  5326. 0, (WOLFSSL_LOAD_FLAG_DATE_ERR_OKAY));
  5327. if (ret != SSL_SUCCESS) {
  5328. // error loading CA certs from buffer
  5329. }
  5330. ...
  5331. \endcode
  5332. \sa wolfSSL_CTX_load_verify_buffer
  5333. \sa wolfSSL_CTX_load_verify_locations
  5334. \sa wolfSSL_CTX_use_certificate_buffer
  5335. \sa wolfSSL_CTX_use_PrivateKey_buffer
  5336. \sa wolfSSL_CTX_use_certificate_chain_buffer
  5337. \sa wolfSSL_use_certificate_buffer
  5338. \sa wolfSSL_use_PrivateKey_buffer
  5339. \sa wolfSSL_use_certificate_chain_buffer
  5340. */
  5341. int wolfSSL_CTX_load_verify_buffer_ex(WOLFSSL_CTX* ctx,
  5342. const unsigned char* in, long sz,
  5343. int format, int userChain, word32 flags);
  5344. /*!
  5345. \ingroup CertsKeys
  5346. \brief この関数は、CA証明書チェーンバッファをWolfSSLコンテキストにロードします。バッファ以外のバージョンのように動作し、ファイルの代わりに入力としてバッファと呼ばれる機能が異なるだけです。バッファはサイズSZの引数によって提供されます。形式バッファのフォーマットタイプを指定します。SSL_FILETYPE_ASN1またはSSL_FILETYPE_PEM。フォーマットがPEM内にある限り、バッファあたり複数のCA証明書をロードすることができます。適切な使用法の例をご覧ください。
  5347. \return SSL_SUCCESS 成功すると
  5348. \return SSL_BAD_FILETYPE ファイルが間違った形式である場合に返されます。
  5349. \return SSL_BAD_FILE ファイルが存在しない場合に返されます。読み込め、または破損していません。
  5350. \return MEMORY_E メモリ不足状態が発生した場合に返されます。
  5351. \return ASN_INPUT_E base16デコードがファイルに対して失敗した場合に返されます。
  5352. \return BUFFER_E チェーンバッファが受信バッファよりも大きい場合に返されます。
  5353. \param ctx wolfSSL_CTX_new()で作成されたSSLコンテキストへのポインタ。
  5354. \param in CA証明書バッファへのポインタ。
  5355. \param sz 入力CA証明書バッファのサイズ、IN。
  5356. _Example_
  5357. \code
  5358. int ret = 0;
  5359. int sz = 0;
  5360. WOLFSSL_CTX* ctx;
  5361. byte certBuff[...];
  5362. ...
  5363. ret = wolfSSL_CTX_load_verify_chain_buffer_format(ctx,
  5364. certBuff, sz, WOLFSSL_FILETYPE_ASN1);
  5365. if (ret != SSL_SUCCESS) {
  5366. // error loading CA certs from buffer
  5367. }
  5368. ...
  5369. \endcode
  5370. \sa wolfSSL_CTX_load_verify_locations
  5371. \sa wolfSSL_CTX_use_certificate_buffer
  5372. \sa wolfSSL_CTX_use_PrivateKey_buffer
  5373. \sa wolfSSL_CTX_use_certificate_chain_buffer
  5374. \sa wolfSSL_use_certificate_buffer
  5375. \sa wolfSSL_use_PrivateKey_buffer
  5376. \sa wolfSSL_use_certificate_chain_buffer
  5377. */
  5378. int wolfSSL_CTX_load_verify_chain_buffer_format(WOLFSSL_CTX* ctx,
  5379. const unsigned char* in,
  5380. long sz, int format);
  5381. /*!
  5382. \ingroup CertsKeys
  5383. \brief この関数は証明書バッファをWolfSSLコンテキストにロードします。バッファ以外のバージョンのように動作し、ファイルの代わりに入力としてバッファと呼ばれる機能が異なるだけです。バッファはサイズSZの引数によって提供されます。形式バッファのフォーマットタイプを指定します。SSL_FILETYPE_ASN1またはSSL_FILETYPE_PEM。適切な使用法の例をご覧ください。
  5384. \return SSL_SUCCESS 成功すると
  5385. \return SSL_BAD_FILETYPE ファイルが間違った形式である場合に返されます。
  5386. \return SSL_BAD_FILE ファイルが存在しない場合に返されます。読み込め、または破損していません。
  5387. \return MEMORY_E メモリ不足状態が発生した場合に返されます。
  5388. \return ASN_INPUT_E base16デコードがファイルに対して失敗した場合に返されます。
  5389. \param ctx wolfSSL_CTX_new()で作成されたSSLコンテキストへのポインタ。
  5390. \param in ロードする証明書を含む入力バッファ。
  5391. \param sz 入力バッファのサイズ。
  5392. _Example_
  5393. \code
  5394. int ret = 0;
  5395. int sz = 0;
  5396. WOLFSSL_CTX* ctx;
  5397. byte certBuff[...];
  5398. ...
  5399. ret = wolfSSL_CTX_use_certificate_buffer(ctx, certBuff, sz, SSL_FILETYPE_PEM);
  5400. if (ret != SSL_SUCCESS) {
  5401. // error loading certificate from buffer
  5402. }
  5403. ...
  5404. \endcode
  5405. \sa wolfSSL_CTX_load_verify_buffer
  5406. \sa wolfSSL_CTX_use_PrivateKey_buffer
  5407. \sa wolfSSL_CTX_use_certificate_chain_buffer
  5408. \sa wolfSSL_use_certificate_buffer
  5409. \sa wolfSSL_use_PrivateKey_buffer
  5410. \sa wolfSSL_use_certificate_chain_buffer
  5411. */
  5412. int wolfSSL_CTX_use_certificate_buffer(WOLFSSL_CTX* ctx,
  5413. const unsigned char* in, long sz,
  5414. int format);
  5415. /*!
  5416. \ingroup CertsKeys
  5417. \brief この関数は、秘密鍵バッファをSSLコンテキストにロードします。バッファ以外のバージョンのように動作し、ファイルの代わりに入力としてバッファと呼ばれる機能が異なるだけです。バッファはサイズSZの引数によって提供されます。形式バッファのフォーマットタイプを指定します。SSL_FILETYPE_ASN1OR SSL_FILETYPE_PEM。適切な使用法の例をご覧ください。
  5418. \return SSL_SUCCESS 成功すると
  5419. \return SSL_BAD_FILETYPE ファイルが間違った形式である場合に返されます。
  5420. \return SSL_BAD_FILE ファイルが存在しない場合に返されます。読み込め、または破損していません。
  5421. \return MEMORY_E メモリ不足状態が発生した場合に返されます。
  5422. \return ASN_INPUT_E base16デコードがファイルに対して失敗した場合に返されます。
  5423. \return NO_PASSWORD 鍵ファイルが暗号化されているがパスワードが提供されていない場合に返されます。
  5424. \param ctx wolfSSL_CTX_new()で作成されたSSLコンテキストへのポインタ。
  5425. \param in ロードする秘密鍵を含む入力バッファ。
  5426. \param sz 入力バッファのサイズ。
  5427. _Example_
  5428. \code
  5429. int ret = 0;
  5430. int sz = 0;
  5431. WOLFSSL_CTX* ctx;
  5432. byte keyBuff[...];
  5433. ...
  5434. ret = wolfSSL_CTX_use_PrivateKey_buffer(ctx, keyBuff, sz, SSL_FILETYPE_PEM);
  5435. if (ret != SSL_SUCCESS) {
  5436. // error loading private key from buffer
  5437. }
  5438. ...
  5439. \endcode
  5440. \sa wolfSSL_CTX_load_verify_buffer
  5441. \sa wolfSSL_CTX_use_certificate_buffer
  5442. \sa wolfSSL_CTX_use_certificate_chain_buffer
  5443. \sa wolfSSL_use_certificate_buffer
  5444. \sa wolfSSL_use_PrivateKey_buffer
  5445. \sa wolfSSL_use_certificate_chain_buffer
  5446. */
  5447. int wolfSSL_CTX_use_PrivateKey_buffer(WOLFSSL_CTX* ctx,
  5448. const unsigned char* in, long sz,
  5449. int format);
  5450. /*!
  5451. \ingroup CertsKeys
  5452. \brief この関数は、証明書チェーンバッファをWolfSSLコンテキストにロードします。バッファ以外のバージョンのように動作し、ファイルの代わりに入力としてバッファと呼ばれる機能が異なるだけです。バッファはサイズSZの引数によって提供されます。バッファはPEM形式で、ルート証明書で終わる対象の証明書から始めてください。適切な使用法の例をご覧ください。
  5453. \return SSL_SUCCESS 成功すると
  5454. \return SSL_BAD_FILETYPE ファイルが間違った形式である場合に返されます。
  5455. \return SSL_BAD_FILE ファイルが存在しない場合に返されます。読み込め、または破損していません。
  5456. \return MEMORY_E メモリ不足状態が発生した場合に返されます。
  5457. \return ASN_INPUT_E base16デコードがファイルに対して失敗した場合に返されます。
  5458. \return BUFFER_E チェーンバッファが受信バッファよりも大きい場合に返されます。
  5459. \param ctx wolfSSL_CTX_new()で作成されたSSLコンテキストへのポインタ。
  5460. \param in ロードされるPEM形式の証明書チェーンを含む入力バッファ。
  5461. _Example_
  5462. \code
  5463. int ret = 0;
  5464. int sz = 0;
  5465. WOLFSSL_CTX* ctx;
  5466. byte certChainBuff[...];
  5467. ...
  5468. ret = wolfSSL_CTX_use_certificate_chain_buffer(ctx, certChainBuff, sz);
  5469. if (ret != SSL_SUCCESS) {
  5470. // error loading certificate chain from buffer
  5471. }
  5472. ...
  5473. \endcode
  5474. \sa wolfSSL_CTX_load_verify_buffer
  5475. \sa wolfSSL_CTX_use_certificate_buffer
  5476. \sa wolfSSL_CTX_use_PrivateKey_buffer
  5477. \sa wolfSSL_use_certificate_buffer
  5478. \sa wolfSSL_use_PrivateKey_buffer
  5479. \sa wolfSSL_use_certificate_chain_buffer
  5480. */
  5481. int wolfSSL_CTX_use_certificate_chain_buffer(WOLFSSL_CTX* ctx,
  5482. const unsigned char* in, long sz);
  5483. /*!
  5484. \ingroup CertsKeys
  5485. \brief この関数は、証明書バッファをWolfSSLオブジェクトにロードします。バッファ以外のバージョンのように動作し、ファイルの代わりに入力としてバッファと呼ばれる機能が異なるだけです。バッファはサイズSZの引数によって提供されます。形式バッファのフォーマットタイプを指定します。SSL_FILETYPE_ASN1またはSSL_FILETYPE_PEM。適切な使用法の例をご覧ください。
  5486. \return SSL_SUCCESS 成功時に返されます。
  5487. \return SSL_BAD_FILETYPE ファイルが間違った形式である場合に返されます。
  5488. \return SSL_BAD_FILE ファイルが存在しない場合に返されます。読み込め、または破損していません。
  5489. \return MEMORY_E メモリ不足状態が発生した場合に返されます。
  5490. \return ASN_INPUT_E base16デコードがファイルに対して失敗した場合に返されます。
  5491. \param ssl wolfSSL_new()で作成されたSSLセッションへのポインタ。
  5492. \param in ロードする証明書を含むバッファ。
  5493. \param sz バッファにある証明書のサイズ。
  5494. _Example_
  5495. \code
  5496. int buffSz;
  5497. int ret;
  5498. byte certBuff[...];
  5499. WOLFSSL* ssl = 0;
  5500. ...
  5501. ret = wolfSSL_use_certificate_buffer(ssl, certBuff, buffSz, SSL_FILETYPE_PEM);
  5502. if (ret != SSL_SUCCESS) {
  5503. // failed to load certificate from buffer
  5504. }
  5505. \endcode
  5506. \sa wolfSSL_CTX_load_verify_buffer
  5507. \sa wolfSSL_CTX_use_certificate_buffer
  5508. \sa wolfSSL_CTX_use_PrivateKey_buffer
  5509. \sa wolfSSL_CTX_use_certificate_chain_buffer
  5510. \sa wolfSSL_use_PrivateKey_buffer
  5511. \sa wolfSSL_use_certificate_chain_buffer
  5512. */
  5513. int wolfSSL_use_certificate_buffer(WOLFSSL* ssl, const unsigned char* in,
  5514. long sz, int format);
  5515. /*!
  5516. \ingroup CertsKeys
  5517. \brief この関数は、秘密鍵バッファをWolfSSLオブジェクトにロードします。バッファ以外のバージョンのように動作し、ファイルの代わりに入力としてバッファと呼ばれる機能が異なるだけです。バッファはサイズSZの引数によって提供されます。形式バッファのフォーマットタイプを指定します。SSL_FILETYPE_ASN1またはSSL_FILETYPE_PEM。適切な使用法の例をご覧ください。
  5518. \return SSL_SUCCESS 成功時に返されます。
  5519. \return SSL_BAD_FILETYPE ファイルが間違った形式である場合に返されます。
  5520. \return SSL_BAD_FILE ファイルが存在しない場合に返されます。読み込め、または破損していません。
  5521. \return MEMORY_E メモリ不足状態が発生した場合に返されます。
  5522. \return ASN_INPUT_E base16デコードがファイルに対して失敗した場合に返されます。
  5523. \return NO_PASSWORD 鍵ファイルが暗号化されているがパスワードが提供されていない場合に返されます。
  5524. \param ssl wolfssl_new()で作成されたSSLセッションへのポインタ。
  5525. \param in ロードする秘密鍵を含むバッファ。
  5526. \param sz バッファにある秘密鍵のサイズ。
  5527. _Example_
  5528. \code
  5529. int buffSz;
  5530. int ret;
  5531. byte keyBuff[...];
  5532. WOLFSSL* ssl = 0;
  5533. ...
  5534. ret = wolfSSL_use_PrivateKey_buffer(ssl, keyBuff, buffSz, SSL_FILETYPE_PEM);
  5535. if (ret != SSL_SUCCESS) {
  5536. // failed to load private key from buffer
  5537. }
  5538. \endcode
  5539. \sa wolfSSL_use_PrivateKey
  5540. \sa wolfSSL_CTX_load_verify_buffer
  5541. \sa wolfSSL_CTX_use_certificate_buffer
  5542. \sa wolfSSL_CTX_use_PrivateKey_buffer
  5543. \sa wolfSSL_CTX_use_certificate_chain_buffer
  5544. \sa wolfSSL_use_certificate_buffer
  5545. \sa wolfSSL_use_certificate_chain_buffer
  5546. */
  5547. int wolfSSL_use_PrivateKey_buffer(WOLFSSL* ssl, const unsigned char* in,
  5548. long sz, int format);
  5549. /*!
  5550. \ingroup CertsKeys
  5551. \brief この関数は、証明書チェーンバッファをWolfSSLオブジェクトにロードします。バッファ以外のバージョンのように動作し、ファイルの代わりに入力としてバッファと呼ばれる機能が異なるだけです。バッファはサイズSZの引数によって提供されます。バッファはPEM形式で、ルート証明書で終わる対象の証明書から始めてください。適切な使用法の例をご覧ください。
  5552. \return SSL_SUCCES 成功時に返されます。
  5553. \return SSL_BAD_FILETYPE ファイルが間違った形式である場合に返されます。
  5554. \return SSL_BAD_FILE ファイルが存在しない場合に返されます。読み込め、または破損していません。
  5555. \return MEMORY_E メモリ不足状態が発生した場合に返されます。
  5556. \return ASN_INPUT_E base16デコードがファイルに対して失敗した場合に返されます。
  5557. \return BUFFER_E チェーンバッファが受信バッファよりも大きい場合に返されます。
  5558. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5559. \param in ロードする証明書を含むバッファ。
  5560. _Example_
  5561. \code
  5562. int buffSz;
  5563. int ret;
  5564. byte certChainBuff[...];
  5565. WOLFSSL* ssl = 0;
  5566. ...
  5567. ret = wolfSSL_use_certificate_chain_buffer(ssl, certChainBuff, buffSz);
  5568. if (ret != SSL_SUCCESS) {
  5569. // failed to load certificate chain from buffer
  5570. }
  5571. \endcode
  5572. \sa wolfSSL_CTX_load_verify_buffer
  5573. \sa wolfSSL_CTX_use_certificate_buffer
  5574. \sa wolfSSL_CTX_use_PrivateKey_buffer
  5575. \sa wolfSSL_CTX_use_certificate_chain_buffer
  5576. \sa wolfSSL_use_certificate_buffer
  5577. \sa wolfSSL_use_PrivateKey_buffer
  5578. */
  5579. int wolfSSL_use_certificate_chain_buffer(WOLFSSL* ssl,
  5580. const unsigned char* in, long sz);
  5581. /*!
  5582. \ingroup CertsKeys
  5583. \brief この関数は、SSLが所有する証明書または鍵をアンロードします。
  5584. \return SSL_SUCCESS - 関数が正常に実行された場合に返されます。
  5585. \return BAD_FUNC_ARG - wolfsslオブジェクトがnullの場合に返されます。
  5586. _Example_
  5587. \code
  5588. WOLFSSL* ssl = wolfSSL_new(ctx);
  5589. ...
  5590. int unloadKeys = wolfSSL_UnloadCertsKeys(ssl);
  5591. if(unloadKeys != SSL_SUCCESS){
  5592. // Failure case.
  5593. }
  5594. \endcode
  5595. \sa wolfSSL_CTX_UnloadCAs
  5596. */
  5597. int wolfSSL_UnloadCertsKeys(WOLFSSL*);
  5598. /*!
  5599. \ingroup Setup
  5600. \brief この機能は、可能な限りハンドシェイクメッセージのグループ化をオンにします。
  5601. \return SSL_SUCCESS 成功に戻ります。
  5602. \return BAD_FUNC_ARG 入力コンテキストがNULLの場合、返されます。
  5603. _Example_
  5604. \code
  5605. WOLFSSL_CTX* ctx = 0;
  5606. ...
  5607. ret = wolfSSL_CTX_set_group_messages(ctx);
  5608. if (ret != SSL_SUCCESS) {
  5609. // failed to set handshake message grouping
  5610. }
  5611. \endcode
  5612. \sa wolfSSL_set_group_messages
  5613. \sa wolfSSL_CTX_new
  5614. */
  5615. int wolfSSL_CTX_set_group_messages(WOLFSSL_CTX*);
  5616. /*!
  5617. \ingroup Setup
  5618. \brief この機能は、可能な限りハンドシェイクメッセージのグループ化をオンにします。
  5619. \return SSL_SUCCESS 成功に戻ります。
  5620. \return BAD_FUNC_ARG 入力コンテキストがNULLの場合、返されます。
  5621. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5622. _Example_
  5623. \code
  5624. WOLFSSL* ssl = 0;
  5625. ...
  5626. ret = wolfSSL_set_group_messages(ssl);
  5627. if (ret != SSL_SUCCESS) {
  5628. // failed to set handshake message grouping
  5629. }
  5630. \endcode
  5631. \sa wolfSSL_CTX_set_group_messages
  5632. \sa wolfSSL_new
  5633. */
  5634. int wolfSSL_set_group_messages(WOLFSSL*);
  5635. /*!
  5636. \brief
  5637. \return none いいえ返します。
  5638. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  5639. \param cbf フォームの関数ポインタであるCallBackFozzerタイプ:int(* callbackfuzzer)(wolfssl * ssl、consigned char * buf、int sz、int型、void * fuzzctx);
  5640. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5641. _Example_
  5642. \code
  5643. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( method );
  5644. WOLFSSL* ssl = wolfSSL_new(ctx);
  5645. void* fCtx;
  5646. int callbackFuzzerCB(WOLFSSL* ssl, const unsigned char* buf, int sz,
  5647. int type, void* fuzzCtx){
  5648. // function definition
  5649. }
  5650. wolfSSL_SetFuzzerCb(ssl, callbackFuzzerCB, fCtx);
  5651. \endcode
  5652. \sa CallbackFuzzer
  5653. */
  5654. void wolfSSL_SetFuzzerCb(WOLFSSL* ssl, CallbackFuzzer cbf, void* fCtx);
  5655. /*!
  5656. \brief
  5657. \return 0 関数がエラーなしで実行された場合に返されます。
  5658. \return BAD_FUNC_ARG 許容できない値で関数に渡された引数があった場合に返されます。
  5659. \return COOKIE_SECRET_SZ 秘密サイズが0の場合に返されます。
  5660. \return MEMORY_ERROR 新しいCookie Secretにメモリを割り当てる問題がある場合は返されました。
  5661. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5662. \param secret 秘密バッファを表す定数バイトポインタ。
  5663. _Example_
  5664. \code
  5665. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( method );
  5666. WOLFSSL* ssl = wolfSSL_new(ctx);
  5667. const* byte secret;
  5668. word32 secretSz; // size of secret
  5669. if(!wolfSSL_DTLS_SetCookieSecret(ssl, secret, secretSz)){
  5670. // Code block for failure to set DTLS cookie secret
  5671. } else {
  5672. // Success! Cookie secret is set.
  5673. }
  5674. \endcode
  5675. \sa ForceZero
  5676. \sa wc_RNG_GenerateBlock
  5677. */
  5678. int wolfSSL_DTLS_SetCookieSecret(WOLFSSL* ssl,
  5679. const unsigned char* secret,
  5680. unsigned int secretSz);
  5681. /*!
  5682. \brief
  5683. \return rng 成功時に返されます。
  5684. \return NULL sslがNULLの場合
  5685. _Example_
  5686. \code
  5687. WOLFSSL* ssl;
  5688. wolfSSL_GetRNG(ssl);
  5689. \endcode
  5690. \sa wolfSSL_CTX_new_rng
  5691. */
  5692. WC_RNG* wolfSSL_GetRNG(WOLFSSL* ssl);
  5693. /*!
  5694. \ingroup Setup
  5695. \brief この関数は、許可されている最小のダウングレードバージョンを設定します。接続が(wolfsslv23_client_methodまたはwolfsslv23_server_method)を使用して、接続がダウングレードできる場合にのみ適用されます。
  5696. \return SSL_SUCCESS エラーなしで返された関数と最小バージョンが設定されている場合に返されます。
  5697. \return BAD_FUNC_ARG WOLFSSL_CTX構造がNULLの場合、または最小バージョンがサポートされていない場合に返されます。
  5698. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5699. _Example_
  5700. \code
  5701. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
  5702. WOLFSSL* ssl = WOLFSSL_new(ctx);
  5703. int version; // macrop representation
  5704. if(wolfSSL_CTX_SetMinVersion(ssl->ctx, version) != SSL_SUCCESS){
  5705. // Failed to set min version
  5706. }
  5707. \endcode
  5708. \sa SetMinVersionHelper
  5709. */
  5710. int wolfSSL_CTX_SetMinVersion(WOLFSSL_CTX* ctx, int version);
  5711. /*!
  5712. \ingroup TLS
  5713. \brief この関数は、許可されている最小のダウングレードバージョンを設定します。接続が(wolfsslv23_client_methodまたはwolfsslv23_server_method)を使用して、接続がダウングレードできる場合にのみ適用されます。
  5714. \return SSL_SUCCESS この関数とそのサブルーチンがエラーなしで実行された場合に返されます。
  5715. \return BAD_FUNC_ARG SSLオブジェクトがNULLの場合に返されます。サブルーチンでは、良いバージョンが一致しない場合、このエラーはスローされます。
  5716. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5717. _Example_
  5718. \code
  5719. WOLFSSL_CTX* ctx = wolfSSL_CTX_new(protocol method);
  5720. WOLFSSL* ssl = WOLFSSL_new(ctx);
  5721. int version; macro representation
  5722. if(wolfSSL_CTX_SetMinVersion(ssl->ctx, version) != SSL_SUCCESS){
  5723. Failed to set min version
  5724. }
  5725. \endcode
  5726. \sa SetMinVersionHelper
  5727. */
  5728. int wolfSSL_SetMinVersion(WOLFSSL* ssl, int version);
  5729. /*!
  5730. \brief ビルドオプションと設定に依存します。WolfSSLを構築するときにshow_sizesが定義されている場合、この関数はWolfSSLオブジェクト(スイート、暗号など)内の個々のオブジェクトのサイズもstdoutに印刷されます。
  5731. \return size この関数は、WolfSSLオブジェクトのサイズを返します。
  5732. _Example_
  5733. \code
  5734. int size = 0;
  5735. size = wolfSSL_GetObjectSize();
  5736. printf(“sizeof(WOLFSSL) = %d\n”, size);
  5737. \endcode
  5738. \sa wolfSSL_new
  5739. */
  5740. int wolfSSL_GetObjectSize(void); /* object size based on build */
  5741. /*!
  5742. \brief アプリケーションがトランスポートレイヤ間で何バイトを送信したい場合は、指定された平文の入力サイズを指定してください。SSL / TLSハンドシェイクが完了した後に呼び出す必要があります。
  5743. \return size 成功すると、要求されたサイズが返されます
  5744. \return INPUT_SIZE_E 入力サイズが最大TLSフラグメントサイズより大きい場合は返されます(WOLFSSL_GETMAXOUTPUTSIZE())。
  5745. \return BAD_FUNC_ARG 無効な関数引数に戻り、またはSSL / TLSハンドシェイクがまだ完了していない場合
  5746. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5747. _Example_
  5748. \code
  5749. none
  5750. \endcode
  5751. \sa wolfSSL_GetMaxOutputSize
  5752. */
  5753. int wolfSSL_GetOutputSize(WOLFSSL* ssl, int inSz);
  5754. /*!
  5755. \brief プロトコル規格で指定されている最大SSL / TLSレコードサイズのいずれかに対応します。この関数は、アプリケーションがwolfssl_getOutputSize()と呼ばれ、input_size_eエラーを受信したときに役立ちます。SSL / TLSハンドシェイクが完了した後に呼び出す必要があります。
  5756. \return size 成功すると、最大出力サイズが返されます
  5757. \return BAD_FUNC_ARG 無効な関数引数のときに返されるか、SSL / TLSハンドシェイクがまだ完了していない場合。
  5758. _Example_
  5759. \code
  5760. none
  5761. \endcode
  5762. \sa wolfSSL_GetOutputSize
  5763. */
  5764. int wolfSSL_GetMaxOutputSize(WOLFSSL*);
  5765. /*!
  5766. \ingroup Setup
  5767. \brief この関数は、バージョンで指定されたバージョンを使用して、指定されたSSLセッション(WolfSSLオブジェクト)のSSL/TLSプロトコルバージョンを設定します。これにより、SSLセッション(SSL)のプロトコル設定が最初に定義され、SSLコンテキスト(wolfSSL_CTX_new())メソッドの種類によって上書きされます。
  5768. \return SSL_SUCCESS 成功時に返されます。
  5769. \return BAD_FUNC_ARG 入力SSLオブジェクトがNULLまたは誤ったプロトコルバージョンがバージョンで指定されている場合に返されます。
  5770. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  5771. _Example_
  5772. \code
  5773. int ret = 0;
  5774. WOLFSSL* ssl;
  5775. ...
  5776. ret = wolfSSL_SetVersion(ssl, WOLFSSL_TLSV1);
  5777. if (ret != SSL_SUCCESS) {
  5778. // failed to set SSL session protocol version
  5779. }
  5780. \endcode
  5781. \sa wolfSSL_CTX_new
  5782. */
  5783. int wolfSSL_SetVersion(WOLFSSL* ssl, int version);
  5784. /*!
  5785. \brief MAC /暗号化コールバック。コールバックは成功の場合は0を返すか、エラーの場合は<0です。SSLとCTXポインタはユーザーの利便性に利用できます。MacOutは、MACの結果を保存する必要がある出力バッファです。MacinはMac入力バッファーとMacinszのサイズを注意しています。MacContentとMacverifyは、Wolfssl_SettlShmacinner()に必要であり、そのまま通過します。Encoutは、暗号化の結果を格納する必要がある出力バッファです。ENCINはENCSZが入力のサイズである間は暗号化する入力バッファです。コールバックの例は、wolfssl / test.h mymacencryptcb()を見つけることができます。
  5786. \return none 返品不可。
  5787. _Example_
  5788. \code
  5789. none
  5790. \endcode
  5791. \sa wolfSSL_SetMacEncryptCtx
  5792. \sa wolfSSL_GetMacEncryptCtx
  5793. */
  5794. void wolfSSL_CTX_SetMacEncryptCb(WOLFSSL_CTX* ctx, CallbackMacEncrypti cb);
  5795. /*!
  5796. \brief CTXへのコールバックコンテキスト。
  5797. \return none 返品不可。
  5798. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5799. _Example_
  5800. \code
  5801. none
  5802. \endcode
  5803. \sa wolfSSL_CTX_SetMacEncryptCb
  5804. \sa wolfSSL_GetMacEncryptCtx
  5805. */
  5806. void wolfSSL_SetMacEncryptCtx(WOLFSSL* ssl, void *ctx);
  5807. /*!
  5808. \brief Mac / Encryptコールバックコンテキストは、wolfssl_setmacencryptx()で保存されていました。
  5809. \return pointer 正常にコールがコンテキストへの有効なポインタを返します。
  5810. \return NULL 空白のコンテキストのために返されます。
  5811. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5812. _Example_
  5813. \code
  5814. none
  5815. \endcode
  5816. \sa wolfSSL_CTX_SetMacEncryptCb
  5817. \sa wolfSSL_SetMacEncryptCtx
  5818. */
  5819. void* wolfSSL_GetMacEncryptCtx(WOLFSSL* ssl);
  5820. /*!
  5821. \brief コールバックを復号化/確認します。コールバックは成功の場合は0を返すか、エラーの場合は<0です。SSLとCTXポインタはユーザーの利便性に利用できます。DECOUTは、復号化の結果を格納する出力バッファです。DECINは暗号化された入力バッファーとDecinszのサイズを注意しています。コンテンツと検証は、WolfSSL_SettlShmacinner()に必要であり、そのまま通過します。PADSZは、パディングの合計値で設定する出力変数です。つまり、MACサイズとパディングバイトとパッドバイトを加えています。コールバックの例は、wolfssl / test.h mydecryptverifycb()を見つけることができます。
  5822. \return none いいえ返します。
  5823. _Example_
  5824. \code
  5825. none
  5826. \endcode
  5827. \sa wolfSSL_SetMacEncryptCtx
  5828. \sa wolfSSL_GetMacEncryptCtx
  5829. */
  5830. void wolfSSL_CTX_SetDecryptVerifyCb(WOLFSSL_CTX* ctx,
  5831. CallbackDecryptVerify cb);
  5832. /*!
  5833. \brief コールバックコンテキストをCTXに復号化/検証します。
  5834. \return none いいえ返します。
  5835. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5836. _Example_
  5837. \code
  5838. none
  5839. \endcode
  5840. \sa wolfSSL_CTX_SetDecryptVerifyCb
  5841. \sa wolfSSL_GetDecryptVerifyCtx
  5842. */
  5843. void wolfSSL_SetDecryptVerifyCtx(WOLFSSL* ssl, void *ctx);
  5844. /*!
  5845. \brief wolfssl_setdecryptverifyctx()で以前に保存されているコールバックコンテキストを復号化/検証します。
  5846. \return pointer 正常にコールがコンテキストへの有効なポインタを返します。
  5847. \return NULL 空白のコンテキストのために返されます。
  5848. _Example_
  5849. \code
  5850. none
  5851. \endcode
  5852. \sa wolfSSL_CTX_SetDecryptVerifyCb
  5853. \sa wolfSSL_SetDecryptVerifyCtx
  5854. */
  5855. void* wolfSSL_GetDecryptVerifyCtx(WOLFSSL* ssl);
  5856. /*!
  5857. \brief VERIFYパラメーターは、これがピア・メッセージの検証のためのものであるかどうかを指定します。
  5858. \return pointer 正常にコールが秘密に有効なポインタを返します。秘密のサイズは、Wolfssl_gethmacsize()から入手できます。
  5859. \return NULL エラー状態に戻ります。
  5860. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5861. _Example_
  5862. \code
  5863. none
  5864. \endcode
  5865. \sa wolfSSL_GetHmacSize
  5866. */
  5867. const unsigned char* wolfSSL_GetMacSecret(WOLFSSL* ssl, int verify);
  5868. /*!
  5869. \brief
  5870. \return pointer 正常にコールがキーへの有効なポインタを返します。鍵のサイズは、wolfssl_getkeysize()から取得できます。
  5871. \return NULL エラー状態に戻ります。
  5872. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5873. _Example_
  5874. \code
  5875. none
  5876. \endcode
  5877. \sa wolfSSL_GetKeySize
  5878. \sa wolfSSL_GetClientWriteIV
  5879. */
  5880. const unsigned char* wolfSSL_GetClientWriteKey(WOLFSSL*);
  5881. /*!
  5882. \brief ハンドシェイクプロセスから。
  5883. \return pointer 正常にコールがIVへの有効なポインタを返します。IVのサイズは、wolfssl_getCipherBlockSize()から取得できます。
  5884. \return NULL エラー状態に戻ります。
  5885. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5886. _Example_
  5887. \code
  5888. none
  5889. \endcode
  5890. \sa wolfSSL_GetCipherBlockSize()
  5891. \sa wolfSSL_GetClientWriteKey()
  5892. */
  5893. const unsigned char* wolfSSL_GetClientWriteIV(WOLFSSL*);
  5894. /*!
  5895. \brief
  5896. \return pointer 正常にコールが鍵への有効なポインタを返します。鍵のサイズは、wolfssl_getkeysize()から取得できます。
  5897. \return NULL エラー状態に戻ります。
  5898. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5899. _Example_
  5900. \code
  5901. none
  5902. \endcode
  5903. \sa wolfSSL_GetKeySize
  5904. \sa wolfSSL_GetServerWriteIV
  5905. */
  5906. const unsigned char* wolfSSL_GetServerWriteKey(WOLFSSL*);
  5907. /*!
  5908. \brief ハンドシェイクプロセスから。
  5909. \return pointer 正常にコールがIVへの有効なポインタを返します。IVのサイズは、wolfssl_getCipherBlockSize()から取得できます。
  5910. \return NULL エラー状態に戻ります。
  5911. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5912. \sa wolfSSL_GetCipherBlockSize
  5913. \sa wolfSSL_GetClientWriteKey
  5914. */
  5915. const unsigned char* wolfSSL_GetServerWriteIV(WOLFSSL*);
  5916. /*!
  5917. \brief
  5918. \return size 正常にコールが鍵サイズをバイト単位で返します。
  5919. \return BAD_FUNC_ARG エラー状態に戻ります。
  5920. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5921. _Example_
  5922. \code
  5923. none
  5924. \endcode
  5925. \sa wolfSSL_GetClientWriteKey
  5926. \sa wolfSSL_GetServerWriteKey
  5927. */
  5928. int wolfSSL_GetKeySize(WOLFSSL*);
  5929. /*!
  5930. \ingroup CertsKeys
  5931. \brief WolfSSL構造体に保持されているSpecs構造体のIV_SIZEメンバーを返します。
  5932. \return iv_size ssl-> specs.iv_sizeで保持されている値を返します。
  5933. \return BAD_FUNC_ARG WolfSSL構造がNULLの場合に返されます。
  5934. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5935. _Example_
  5936. \code
  5937. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( method );
  5938. WOLFSSL* ssl = wolfSSL_new(ctx);
  5939. int ivSize;
  5940. ...
  5941. ivSize = wolfSSL_GetIVSize(ssl);
  5942. if(ivSize > 0){
  5943. // ivSize holds the specs.iv_size value.
  5944. }
  5945. \endcode
  5946. \sa wolfSSL_GetKeySize
  5947. \sa wolfSSL_GetClientWriteIV
  5948. \sa wolfSSL_GetServerWriteIV
  5949. */
  5950. int wolfSSL_GetIVSize(WOLFSSL*);
  5951. /*!
  5952. \brief
  5953. \return success 成功した場合、呼び出しがWolfSSLオブジェクトの側面に応じてwolfssl_server_endまたはwolfssl_client_endを返します。
  5954. \return BAD_FUNC_ARG エラー状態に戻ります。
  5955. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5956. _Example_
  5957. \code
  5958. none
  5959. \endcode
  5960. \sa wolfSSL_GetClientWriteKey
  5961. \sa wolfSSL_GetServerWriteKey
  5962. */
  5963. int wolfSSL_GetSide(WOLFSSL*);
  5964. /*!
  5965. \brief 少なくともTLSバージョン1.1以上です。
  5966. \return true/false 成功した場合、呼び出しがTRUEまたは0の場合は0を返します。
  5967. \return BAD_FUNC_ARG エラー状態に戻ります。
  5968. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5969. _Example_
  5970. \code
  5971. none
  5972. \endcode
  5973. \sa wolfSSL_GetSide
  5974. */
  5975. int wolfSSL_IsTLSv1_1(WOLFSSL*);
  5976. /*!
  5977. \brief ハンドシェイクから。
  5978. \return If コールが成功すると、wolfssl_cipher_null、wolfssl_des、wolfssl_triple_des、wolfssl_aes、wolfssl_aes_gcm、wolfssl_aes_ccm、wolfssl_camellia。
  5979. \return BAD_FUNC_ARG エラー状態に戻ります。
  5980. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5981. _Example_
  5982. \code
  5983. none
  5984. \endcode
  5985. \sa wolfSSL_GetCipherBlockSize
  5986. \sa wolfSSL_GetKeySize
  5987. */
  5988. int wolfSSL_GetBulkCipher(WOLFSSL*);
  5989. /*!
  5990. \brief ハンドシェイク。
  5991. \return size 正常にコールが暗号ブロックサイズのサイズをバイト単位で戻します。
  5992. \return BAD_FUNC_ARG エラー状態に戻ります。
  5993. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  5994. _Example_
  5995. \code
  5996. none
  5997. \endcode
  5998. \sa wolfSSL_GetBulkCipher
  5999. \sa wolfSSL_GetKeySize
  6000. */
  6001. int wolfSSL_GetCipherBlockSize(WOLFSSL*);
  6002. /*!
  6003. \brief ハンドシェーク。暗号タイプのwolfssl_aead_typeの場合。
  6004. \return size 正常にコールがEAD MACサイズのサイズをバイト単位で戻します。
  6005. \return BAD_FUNC_ARG エラー状態に戻ります。
  6006. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  6007. _Example_
  6008. \code
  6009. none
  6010. \endcode
  6011. \sa wolfSSL_GetBulkCipher
  6012. \sa wolfSSL_GetKeySize
  6013. */
  6014. int wolfSSL_GetAeadMacSize(WOLFSSL*);
  6015. /*!
  6016. \brief ハンドシェーク。wolfssl_aead_type以外の暗号タイプの場合。
  6017. \return size 正常にコールが(H)MACサイズのサイズをバイト単位で戻します。
  6018. \return BAD_FUNC_ARG エラー状態に戻ります。
  6019. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  6020. _Example_
  6021. \code
  6022. none
  6023. \endcode
  6024. \sa wolfSSL_GetBulkCipher
  6025. \sa wolfSSL_GetHmacType
  6026. */
  6027. int wolfSSL_GetHmacSize(WOLFSSL*);
  6028. /*!
  6029. \brief ハンドシェーク。wolfssl_aead_type以外の暗号タイプの場合。
  6030. \return If コールが成功すると、次のいずれかが返されます.MD5、SHA、SHA256、SHA384。
  6031. \return BAD_FUNC_ARG エラー状態に対して返される可能性があります。
  6032. \return SSL_FATAL_ERROR エラー状態にも返される可能性があります。
  6033. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  6034. _Example_
  6035. \code
  6036. none
  6037. \endcode
  6038. \sa wolfSSL_GetBulkCipher
  6039. \sa wolfSSL_GetHmacSize
  6040. */
  6041. int wolfSSL_GetHmacType(WOLFSSL*);
  6042. /*!
  6043. \brief ハンドシェイクから。
  6044. \return If 正常にコールは次のいずれかを返します.WolfSSL_BLOCK_TYPE、WOLFSSL_STREAM_TYPE、WOLFSSL_AEAD_TYPE。
  6045. \return BAD_FUNC_ARG エラー状態に戻ります。
  6046. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  6047. _Example_
  6048. \code
  6049. none
  6050. \endcode
  6051. \sa wolfSSL_GetBulkCipher
  6052. \sa wolfSSL_GetHmacType
  6053. */
  6054. int wolfSSL_GetCipherType(WOLFSSL*);
  6055. /*!
  6056. \brief 送受信結果は、少なくともwolfssl_gethmacsize()バイトであるべきである内部に書き込まれます。メッセージのサイズはSZで指定され、内容はメッセージの種類であり、検証はこれがピアメッセージの検証であるかどうかを指定します。wolfssl_aead_typeを除く暗号タイプに有効です。
  6057. \return 1 成功時に返されます。
  6058. \return BAD_FUNC_ARG エラー状態に戻ります。
  6059. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  6060. _Example_
  6061. \code
  6062. none
  6063. \endcode
  6064. \sa wolfSSL_GetBulkCipher
  6065. \sa wolfSSL_GetHmacType
  6066. */
  6067. int wolfSSL_SetTlsHmacInner(WOLFSSL* ssl, byte* inner,
  6068. word32 sz, int content, int verify);
  6069. /*!
  6070. \brief コールバックは成功の場合は0を返すか、エラーの場合は<0です。SSLとCTXポインタはユーザーの利便性に利用できます。INSは入力バッファーが入力の長さを表します。OUTは、署名の結果を保存する必要がある出力バッファです。OUTSZは、呼び出し時に出力バッファのサイズを指定する入力/出力変数であり、署名の実際のサイズを戻す前に格納する必要があります。keyderはASN1フォーマットのECC秘密鍵であり、Keyszは鍵のキーの長さです。コールバックの例は、wolfssl / test.h myeccsign()を見つけることができます。
  6071. \return none いいえ返します。
  6072. _Example_
  6073. \code
  6074. none
  6075. \endcode
  6076. \sa wolfSSL_SetEccSignCtx
  6077. \sa wolfSSL_GetEccSignCtx
  6078. */
  6079. void wolfSSL_CTX_SetEccSignCb(WOLFSSL_CTX* ctx, CallbackEccSign cb);
  6080. /*!
  6081. \brief CTXへのコンテキスト。
  6082. \return none いいえ返します。
  6083. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  6084. _Example_
  6085. \code
  6086. none
  6087. \endcode
  6088. \sa wolfSSL_CTX_SetEccSignCb
  6089. \sa wolfSSL_GetEccSignCtx
  6090. */
  6091. void wolfSSL_SetEccSignCtx(WOLFSSL* ssl, void *ctx);
  6092. /*!
  6093. \brief 以前にwolfssl_seteccsignctx()で保存されていたコンテキスト。
  6094. \return pointer 正常にコールがコンテキストへの有効なポインタを返します。
  6095. \return NULL 空白のコンテキストのために返されます。
  6096. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  6097. _Example_
  6098. \code
  6099. none
  6100. \endcode
  6101. \sa wolfSSL_CTX_SetEccSignCb
  6102. \sa wolfSSL_SetEccSignCtx
  6103. */
  6104. void* wolfSSL_GetEccSignCtx(WOLFSSL* ssl);
  6105. /*!
  6106. \brief CTXへのコンテキスト。
  6107. \return none いいえ返します。
  6108. \param ctx wolfSSL_CTX_new()で作成されたWOLFSSL_CTX構造体へのポインタ。
  6109. _Example_
  6110. \code
  6111. none
  6112. \endcode
  6113. \sa wolfSSL_CTX_SetEccSignCb
  6114. \sa wolfSSL_CTX_GetEccSignCtx
  6115. */
  6116. void wolfSSL_CTX_SetEccSignCtx(WOLFSSL_CTX* ctx, void *userCtx);
  6117. /*!
  6118. \brief 以前にwolfssl_seteccsignctx()で保存されていたコンテキスト。
  6119. \return pointer 正常にコールがコンテキストへの有効なポインタを返します。
  6120. \return NULL 空白のコンテキストのために返されます。
  6121. _Example_
  6122. \code
  6123. none
  6124. \endcode
  6125. \sa wolfSSL_CTX_SetEccSignCb
  6126. \sa wolfSSL_CTX_SetEccSignCtx
  6127. */
  6128. void* wolfSSL_CTX_GetEccSignCtx(WOLFSSL_CTX* ctx);
  6129. /*!
  6130. \brief コールバックは成功の場合は0を返すか、エラーの場合は<0です。SSLとCTXポインタはユーザーの利便性に利用できます。SIGは検証の署名であり、SIGSZは署名の長さを表します。ハッシュはメッセージのダイジェストを含む入力バッファであり、HASHSZはハッシュの長さを意味します。結果は、検証の結果を格納する出力変数、成功のために1、失敗のために0を記憶する必要があります。keyderはASN1フォーマットのECC秘密鍵であり、Keyszはキーのキーの長さです。コールバックの例は、wolfssl / test.h myeccverify()を見つけることができます。
  6131. \return none いいえ返します。
  6132. _Example_
  6133. \code
  6134. none
  6135. \endcode
  6136. \sa wolfSSL_SetEccVerifyCtx
  6137. \sa wolfSSL_GetEccVerifyCtx
  6138. */
  6139. void wolfSSL_CTX_SetEccVerifyCb(WOLFSSL_CTX* ctx, CallbackEccVerify cb);
  6140. /*!
  6141. \brief CTXへのコンテキスト。
  6142. \return none いいえ返します。
  6143. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  6144. _Example_
  6145. \code
  6146. none
  6147. \endcode
  6148. \sa wolfSSL_CTX_SetEccVerifyCb
  6149. \sa wolfSSL_GetEccVerifyCtx
  6150. */
  6151. void wolfSSL_SetEccVerifyCtx(WOLFSSL* ssl, void *ctx);
  6152. /*!
  6153. \brief 以前にwolfssl_setecverifyctx()で保存されていたコンテキスト。
  6154. \return pointer 正常にコールがコンテキストへの有効なポインタを返します。
  6155. \return NULL 空白のコンテキストのために返されます。
  6156. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  6157. _Example_
  6158. \code
  6159. none
  6160. \endcode
  6161. \sa wolfSSL_CTX_SetEccVerifyCb
  6162. \sa wolfSSL_SetEccVerifyCtx
  6163. */
  6164. void* wolfSSL_GetEccVerifyCtx(WOLFSSL* ssl);
  6165. /*!
  6166. \brief コールバックは成功の場合は0を返すか、エラーの場合は<0です。SSLとCTXポインタはユーザーの利便性に利用できます。INSは入力バッファーが入力の長さを表します。OUTは、署名の結果を保存する必要がある出力バッファです。OUTSZは、呼び出し時に出力バッファのサイズを指定する入力/出力変数であり、署名の実際のサイズを戻す前に格納する必要があります。keyderはASN1フォーマットのRSA秘密鍵であり、Keyszはバイト数のキーの長さです。コールバックの例は、wolfssl / test.h myrsasign()を見つけることができます。
  6167. \return none いいえ返します。
  6168. _Example_
  6169. \code
  6170. none
  6171. \endcode
  6172. \sa wolfSSL_SetRsaSignCtx
  6173. \sa wolfSSL_GetRsaSignCtx
  6174. */
  6175. void wolfSSL_CTX_SetRsaSignCb(WOLFSSL_CTX* ctx, CallbackRsaSign cb);
  6176. /*!
  6177. \brief ctxに。
  6178. \return none いいえ返します。
  6179. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  6180. _Example_
  6181. \code
  6182. none
  6183. \endcode
  6184. \sa wolfSSL_CTX_SetRsaSignCb
  6185. \sa wolfSSL_GetRsaSignCtx
  6186. */
  6187. void wolfSSL_SetRsaSignCtx(WOLFSSL* ssl, void *ctx);
  6188. /*!
  6189. \brief 以前にwolfssl_setrsAsignctx()で保存されていたコンテキスト。
  6190. \return pointer 正常にコールがコンテキストへの有効なポインタを返します。
  6191. \return NULL 空白のコンテキストのために返されます。
  6192. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  6193. _Example_
  6194. \code
  6195. none
  6196. \endcode
  6197. \sa wolfSSL_CTX_SetRsaSignCb
  6198. \sa wolfSSL_SetRsaSignCtx
  6199. */
  6200. void* wolfSSL_GetRsaSignCtx(WOLFSSL* ssl);
  6201. /*!
  6202. \brief コールバックは、成功のための平文バイト数または<0エラーの場合は<0を返すべきです。SSLとCTXポインタはユーザーの利便性に利用できます。SIGは検証の署名であり、SIGSZは署名の長さを表します。復号化プロセスとパディングの後に検証バッファの先頭に設定する必要があります。keyderはASN1形式のRSA公開鍵であり、Keyszはキーのキーの長さです。コールバックの例は、wolfssl / test.h myrsaverify()を見つけることができます。
  6203. \return none いいえ返します。
  6204. \sa wolfSSL_SetRsaVerifyCtx
  6205. \sa wolfSSL_GetRsaVerifyCtx
  6206. */
  6207. void wolfSSL_CTX_SetRsaVerifyCb(WOLFSSL_CTX* ctx, CallbackRsaVerify cb);
  6208. /*!
  6209. \brief CTXへのコンテキスト。
  6210. \return none いいえ返します。
  6211. _Example_
  6212. \code
  6213. none
  6214. \endcode
  6215. \sa wolfSSL_CTX_SetRsaVerifyCb
  6216. \sa wolfSSL_GetRsaVerifyCtx
  6217. */
  6218. void wolfSSL_SetRsaVerifyCtx(WOLFSSL* ssl, void *ctx);
  6219. /*!
  6220. \brief 以前にwolfssl_setrsaverifyctx()で保存されていたコンテキスト。
  6221. \return pointer 正常にコールがコンテキストへの有効なポインタを返します。
  6222. \return NULL 空白のコンテキストのために返されます。
  6223. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  6224. _Example_
  6225. \code
  6226. none
  6227. \endcode
  6228. \sa wolfSSL_CTX_SetRsaVerifyCb
  6229. \sa wolfSSL_SetRsaVerifyCtx
  6230. */
  6231. void* wolfSSL_GetRsaVerifyCtx(WOLFSSL* ssl);
  6232. /*!
  6233. \brief 暗号化します。コールバックは成功の場合は0を返すか、エラーの場合は<0です。SSLとCTXポインタはユーザーの利便性に利用できます。INは入力バッファですが、INSZは入力の長さを表します。暗号化の結果を保存する必要がある出力バッファです。OUTSZは、呼び出し時に出力バッファのサイズを指定する入力/出力変数であり、暗号化の実際のサイズは戻って前に格納されるべきです。keyderはASN1形式のRSA公開鍵であり、Keyszはキーのキーの長さです。例コールバックの例は、wolfssl / test.h myrsaenc()を見つけることができます。
  6234. \return none いいえ返します。
  6235. _Example_
  6236. \code
  6237. none
  6238. \endcode
  6239. \sa wolfSSL_SetRsaEncCtx
  6240. \sa wolfSSL_GetRsaEncCtx
  6241. */
  6242. void wolfSSL_CTX_SetRsaEncCb(WOLFSSL_CTX* ctx, CallbackRsaEnc cb);
  6243. /*!
  6244. \brief CTXへのコールバックコンテキスト。
  6245. \return none いいえ返します。
  6246. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  6247. _Example_
  6248. \code
  6249. none
  6250. \endcode
  6251. \sa wolfSSL_CTX_SetRsaEncCb
  6252. \sa wolfSSL_GetRsaEncCtx
  6253. */
  6254. void wolfSSL_SetRsaEncCtx(WOLFSSL* ssl, void *ctx);
  6255. /*!
  6256. \brief コールバックコンテキストは、wolfssl_setrsaencctx()で以前に保存されていました。
  6257. \return pointer 正常にコールがコンテキストへの有効なポインタを返します。
  6258. \return NULL 空白のコンテキストのために返されます。
  6259. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  6260. _Example_
  6261. \code
  6262. none
  6263. \endcode
  6264. \sa wolfSSL_CTX_SetRsaEncCb
  6265. \sa wolfSSL_SetRsaEncCtx
  6266. */
  6267. void* wolfSSL_GetRsaEncCtx(WOLFSSL* ssl);
  6268. /*!
  6269. \brief 復号化します。コールバックは、成功のための平文バイト数または<0エラーの場合は<0を返すべきです。SSLとCTXポインタはユーザーの利便性に利用できます。INは、復号化する入力バッファが入力の長さを表します。復号化プロセスおよび任意のパディングの後、復号化バッファの先頭に設定する必要があります。keyderはASN1フォーマットのRSA秘密鍵であり、Keyszはバイト数のキーの長さです。コールバックの例は、wolfssl / test.h myrsadec()を見つけることができます。
  6270. \return none いいえ返します。
  6271. _Example_
  6272. \code
  6273. none
  6274. \endcode
  6275. \sa wolfSSL_SetRsaDecCtx
  6276. \sa wolfSSL_GetRsaDecCtx
  6277. */
  6278. void wolfSSL_CTX_SetRsaDecCb(WOLFSSL_CTX* ctx, CallbackRsaDec cb);
  6279. /*!
  6280. \brief CTXへのコールバックコンテキスト。
  6281. \return none いいえ返します。
  6282. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  6283. _Example_
  6284. \code
  6285. none
  6286. \endcode
  6287. \sa wolfSSL_CTX_SetRsaDecCb
  6288. \sa wolfSSL_GetRsaDecCtx
  6289. */
  6290. void wolfSSL_SetRsaDecCtx(WOLFSSL* ssl, void *ctx);
  6291. /*!
  6292. \brief コールバックコンテキストは、wolfssl_setrsadecctx()で以前に保存されていました。
  6293. \return pointer 正常にコールがコンテキストへの有効なポインタを返します。
  6294. \return NULL 空白のコンテキストのために返されます。
  6295. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  6296. _Example_
  6297. \code
  6298. none
  6299. \endcode
  6300. \sa wolfSSL_CTX_SetRsaDecCb
  6301. \sa wolfSSL_SetRsaDecCtx
  6302. */
  6303. void* wolfSSL_GetRsaDecCtx(WOLFSSL* ssl);
  6304. /*!
  6305. \brief 新しいCA証明書がWolfSSLにロードされたときに呼び出される(WolfSSL_CTX)。コールバックには、符号化された証明書を持つバッファが与えられます。
  6306. \return none 返品不可。
  6307. \param ctx wolfSSL_CTX_new()で作成されたSSLコンテキストへのポインタ。
  6308. _Example_
  6309. \code
  6310. WOLFSSL_CTX* ctx = 0;
  6311. // CA callback prototype
  6312. int MyCACallback(unsigned char *der, int sz, int type);
  6313. // Register the custom CA callback with the SSL context
  6314. wolfSSL_CTX_SetCACb(ctx, MyCACallback);
  6315. int MyCACallback(unsigned char* der, int sz, int type)
  6316. {
  6317. // custom CA callback function, DER-encoded cert
  6318. // located in “der” of size “sz” with type “type”
  6319. }
  6320. \endcode
  6321. \sa wolfSSL_CTX_load_verify_locations
  6322. */
  6323. void wolfSSL_CTX_SetCACb(WOLFSSL_CTX* ctx, CallbackCACache cb);
  6324. /*!
  6325. \ingroup CertManager
  6326. \brief 新しい証明書マネージャコンテキストを割り当てて初期化します。このコンテキストは、SSLのニーズとは無関係に使用できます。証明書をロードしたり、証明書を確認したり、失効状況を確認したりするために使用することができます。
  6327. \return WOLFSSL_CERT_MANAGER 正常にコールが有効なwolfssl_cert_managerポインタを返します。
  6328. \return NULL エラー状態に戻ります。
  6329. \sa wolfSSL_CertManagerFree
  6330. */
  6331. WOLFSSL_CERT_MANAGER* wolfSSL_CertManagerNew_ex(void* heap);
  6332. /*!
  6333. \ingroup CertManager
  6334. \brief 新しい証明書マネージャコンテキストを割り当てて初期化します。このコンテキストは、SSLのニーズとは無関係に使用できます。証明書をロードしたり、証明書を確認したり、失効状況を確認したりするために使用することができます。
  6335. \return WOLFSSL_CERT_MANAGER 正常にコールが有効なwolfssl_cert_managerポインタを返します。
  6336. \return NULL エラー状態に戻ります。
  6337. _Example_
  6338. \code
  6339. #import <wolfssl/ssl.h>
  6340. WOLFSSL_CERT_MANAGER* cm;
  6341. cm = wolfSSL_CertManagerNew();
  6342. if (cm == NULL) {
  6343. // error creating new cert manager
  6344. }
  6345. \endcode
  6346. \sa wolfSSL_CertManagerFree
  6347. */
  6348. WOLFSSL_CERT_MANAGER* wolfSSL_CertManagerNew(void);
  6349. /*!
  6350. \ingroup CertManager
  6351. \brief 証明書マネージャのコンテキストに関連付けられているすべてのリソースを解放します。証明書マネージャを使用する必要がなくなるときにこれを呼び出します。
  6352. \return none
  6353. _Example_
  6354. \code
  6355. #include <wolfssl/ssl.h>
  6356. WOLFSSL_CERT_MANAGER* cm;
  6357. ...
  6358. wolfSSL_CertManagerFree(cm);
  6359. \endcode
  6360. \sa wolfSSL_CertManagerNew
  6361. */
  6362. void wolfSSL_CertManagerFree(WOLFSSL_CERT_MANAGER*);
  6363. /*!
  6364. \ingroup CertManager
  6365. \brief ManagerコンテキストへのCA証明書のロードの場所を指定します。PEM証明書カフェイルには、複数の信頼できるCA証明書が含まれている可能性があります。capathがnullでない場合、PEM形式のCA証明書を含むディレクトリを指定します。
  6366. \return SSL_SUCCESS 成功した場合に返されます。、通話が戻ります。
  6367. \return SSL_BAD_FILETYPE ファイルが間違った形式である場合に返されます。
  6368. \return SSL_BAD_FILE ファイルが存在しない場合に返されます。読み込め、または破損していません。
  6369. \return MEMORY_E メモリ不足状態が発生した場合に返されます。
  6370. \return ASN_INPUT_E base16デコードがファイルに対して失敗した場合に返されます。
  6371. \return BAD_FUNC_ARG ポインタが提供されていない場合に返されるエラーです。
  6372. \return SSL_FATAL_ERROR - 失敗時に返されます。
  6373. \param cm wolfssl_certmanagernew()を使用して作成されたwolfssl_cert_manager構造体へのポインタ。
  6374. \param file ロードするCA証明書を含むファイルの名前へのポインタ。
  6375. _Example_
  6376. \code
  6377. #include <wolfssl/ssl.h>
  6378. int ret = 0;
  6379. WOLFSSL_CERT_MANAGER* cm;
  6380. ...
  6381. ret = wolfSSL_CertManagerLoadCA(cm, “path/to/cert-file.pem”, 0);
  6382. if (ret != SSL_SUCCESS) {
  6383. // error loading CA certs into cert manager
  6384. }
  6385. \endcode
  6386. \sa wolfSSL_CertManagerVerify
  6387. */
  6388. int wolfSSL_CertManagerLoadCA(WOLFSSL_CERT_MANAGER* cm, const char* f,
  6389. const char* d);
  6390. /*!
  6391. \ingroup CertManager
  6392. \brief wolfssl_ctx_load_verify_bufferを呼び出して、関数に渡されたCM内の情報を失うことなく一時的なCMを使用してその結果を返すことによってCAバッファをロードします。
  6393. \return SSL_FATAL_ERROR wolfssl_cert_manager構造体がNULLの場合、またはwolfSSL_CTX_new()がNULLを返す場合に返されます。
  6394. \return SSL_SUCCESS 実行が成功するために返されます。
  6395. \param cm wolfssl_certmanagernew()を使用して作成されたwolfssl_cert_manager構造体へのポインタ。
  6396. \param in CERT情報用のバッファー。
  6397. \param sz バッファの長さ。
  6398. _Example_
  6399. \code
  6400. WOLFSSL_CERT_MANAGER* cm = (WOLFSSL_CERT_MANAGER*)vp;
  6401. const unsigned char* in;
  6402. long sz;
  6403. int format;
  6404. if(wolfSSL_CertManagerLoadCABuffer(vp, sz, format) != SSL_SUCCESS){
  6405. Error returned. Failure case code block.
  6406. }
  6407. \endcode
  6408. \sa wolfSSL_CTX_load_verify_buffer
  6409. \sa ProcessChainBuffer
  6410. \sa ProcessBuffer
  6411. \sa cm_pick_method
  6412. */
  6413. int wolfSSL_CertManagerLoadCABuffer(WOLFSSL_CERT_MANAGER* cm,
  6414. const unsigned char* in, long sz, int format);
  6415. /*!
  6416. \ingroup CertManager
  6417. \brief この関数はCA署名者リストをアンロードします。
  6418. \return SSL_SUCCESS 機能の実行に成功したことに戻ります。
  6419. \return BAD_FUNC_ARG wolfssl_cert_managerがnullの場合に返されます。
  6420. \return BAD_MUTEX_E ミューテックスエラーが発生した場合に返されます。
  6421. _Example_
  6422. \code
  6423. #include <wolfssl/ssl.h>
  6424. WOLFSSL_CTX* ctx = wolfSSL_CTX_new(protocol method);
  6425. WOLFSSL_CERT_MANAGER* cm = wolfSSL_CertManagerNew();
  6426. ...
  6427. if(wolfSSL_CertManagerUnloadCAs(ctx->cm) != SSL_SUCCESS){
  6428. Failure case.
  6429. }
  6430. \endcode
  6431. \sa FreeSignerTable
  6432. \sa UnlockMutex
  6433. */
  6434. int wolfSSL_CertManagerUnloadCAs(WOLFSSL_CERT_MANAGER* cm);
  6435. /*!
  6436. \ingroup CertManager
  6437. \brief 関数は信頼できるピアリンクリストを解放し、信頼できるピアリストのロックを解除します。
  6438. \return SSL_SUCCESS 関数が正常に完了した場合
  6439. \return BAD_FUNC_ARG wolfssl_cert_managerがnullの場合
  6440. \return BAD_MUTEX_E ミューテックスエラーTPLOCKでは、WOLFSSL_CERT_MANAGER構造体のメンバーは0(ニル)です。
  6441. _Example_
  6442. \code
  6443. #include <wolfssl/ssl.h>
  6444. WOLFSSL_CTX* ctx = wolfSSL_CTX_new(Protocol define);
  6445. WOLFSSL_CERT_MANAGER* cm = wolfSSL_CertManagerNew();
  6446. ...
  6447. if(wolfSSL_CertManagerUnload_trust_peers(cm) != SSL_SUCCESS){
  6448. The function did not execute successfully.
  6449. }
  6450. \endcode
  6451. \sa UnLockMutex
  6452. */
  6453. int wolfSSL_CertManagerUnload_trust_peers(WOLFSSL_CERT_MANAGER* cm);
  6454. /*!
  6455. \ingroup CertManager
  6456. \brief 証明書マネージャのコンテキストで確認する証明書を指定します。フォーマットはSSL_FILETYPE_PEMまたはSSL_FILETYPE_ASN1にすることができます。
  6457. \return SSL_SUCCESS 成功した場合に返されます。
  6458. \return ASN_SIG_CONFIRM_E 署名が検証できなかった場合に返されます。
  6459. \return ASN_SIG_OID_E 署名の種類がサポートされていない場合に返されます。
  6460. \return CRL_CERT_REVOKED この証明書が取り消された場合に返されるエラーです。
  6461. \return CRL_MISSING 現在の発行者CRLが利用できない場合に返されるエラーです。
  6462. \return ASN_BEFORE_DATE_E 現在の日付が前日の前にある場合に返されます。
  6463. \return ASN_AFTER_DATE_E 現在の日付が後の日付の後の場合に返されます。
  6464. \return SSL_BAD_FILETYPE ファイルが間違った形式である場合に返されます。
  6465. \return SSL_BAD_FILE ファイルが存在しない場合に返されます。読み込め、または破損していません。
  6466. \return MEMORY_E メモリ不足状態が発生した場合に返されます。
  6467. \return ASN_INPUT_E base16デコードがファイルに対して失敗した場合に返されます。
  6468. \return BAD_FUNC_ARG ポインタが提供されていない場合に返されるエラーです。
  6469. \param cm wolfssl_certmanagernew()を使用して作成されたwolfssl_cert_manager構造体へのポインタ。
  6470. \param fname 検証する証明書を含むファイルの名前へのポインタ。
  6471. _Example_
  6472. \code
  6473. int ret = 0;
  6474. WOLFSSL_CERT_MANAGER* cm;
  6475. ...
  6476. ret = wolfSSL_CertManagerVerify(cm, “path/to/cert-file.pem”,
  6477. SSL_FILETYPE_PEM);
  6478. if (ret != SSL_SUCCESS) {
  6479. error verifying certificate
  6480. }
  6481. \endcode
  6482. \sa wolfSSL_CertManagerLoadCA
  6483. \sa wolfSSL_CertManagerVerifyBuffer
  6484. */
  6485. int wolfSSL_CertManagerVerify(WOLFSSL_CERT_MANAGER* cm, const char* f,
  6486. int format);
  6487. /*!
  6488. \ingroup CertManager
  6489. \brief 証明書マネージャのコンテキストを使用して確認する証明書バッファを指定します。フォーマットはSSL_FILETYPE_PEMまたはSSL_FILETYPE_ASN1にすることができます。
  6490. \return SSL_SUCCESS 成功した場合に返されます。
  6491. \return ASN_SIG_CONFIRM_E 署名が検証できなかった場合に返されます。
  6492. \return ASN_SIG_OID_E 署名の種類がサポートされていない場合に返されます。
  6493. \return CRL_CERT_REVOKED この証明書が取り消された場合に返されるエラーです。
  6494. \return CRL_MISSING 現在の発行者CRLが利用できない場合に返されるエラーです。
  6495. \return ASN_BEFORE_DATE_E 現在の日付が前日の前にある場合に返されます。
  6496. \return ASN_AFTER_DATE_E 現在の日付が後の日付の後の場合に返されます。
  6497. \return SSL_BAD_FILETYPE ファイルが間違った形式である場合に返されます。
  6498. \return SSL_BAD_FILE ファイルが存在しない場合に返されます。読み込め、または破損していません。
  6499. \return MEMORY_E メモリ不足状態が発生した場合に返されます。
  6500. \return ASN_INPUT_E base16デコードがファイルに対して失敗した場合に返されます。
  6501. \return BAD_FUNC_ARG ポインタが提供されていない場合に返されるエラーです。
  6502. \param cm wolfssl_certmanagernew()を使用して作成されたwolfssl_cert_manager構造体へのポインタ。
  6503. \param buff 検証する証明書を含むバッファ。
  6504. \param sz バッファのサイズ、BUF。
  6505. _Example_
  6506. \code
  6507. #include <wolfssl/ssl.h>
  6508. int ret = 0;
  6509. int sz = 0;
  6510. WOLFSSL_CERT_MANAGER* cm;
  6511. byte certBuff[...];
  6512. ...
  6513. ret = wolfSSL_CertManagerVerifyBuffer(cm, certBuff, sz, SSL_FILETYPE_PEM);
  6514. if (ret != SSL_SUCCESS) {
  6515. error verifying certificate
  6516. }
  6517. \endcode
  6518. \sa wolfSSL_CertManagerLoadCA
  6519. \sa wolfSSL_CertManagerVerify
  6520. */
  6521. int wolfSSL_CertManagerVerifyBuffer(WOLFSSL_CERT_MANAGER* cm,
  6522. const unsigned char* buff, long sz, int format);
  6523. /*!
  6524. \ingroup CertManager
  6525. \brief この関数は、証明書マネージャーのverifyCallback関数を設定します。存在する場合、それはロードされた各CERTに対して呼び出されます。検証エラーがある場合は、検証コールバックを使用してエラーを過度に乗り越えます。
  6526. \return none 返品不可。
  6527. \param cm wolfssl_certmanagernew()を使用して作成されたwolfssl_cert_manager構造体へのポインタ。
  6528. _Example_
  6529. \code
  6530. #include <wolfssl/ssl.h>
  6531. int myVerify(int preverify, WOLFSSL_X509_STORE_CTX* store)
  6532. { // do custom verification of certificate }
  6533. WOLFSSL_CTX* ctx = wolfSSL_CTX_new(Protocol define);
  6534. WOLFSSL_CERT_MANAGER* cm = wolfSSL_CertManagerNew();
  6535. ...
  6536. wolfSSL_CertManagerSetVerify(cm, myVerify);
  6537. \endcode
  6538. \sa wolfSSL_CertManagerVerify
  6539. */
  6540. void wolfSSL_CertManagerSetVerify(WOLFSSL_CERT_MANAGER* cm,
  6541. VerifyCallback vc);
  6542. /*!
  6543. \brief CRLリスト。
  6544. \return SSL_SUCCESS 関数が予想どおりに返された場合は返します。wolfssl_cert_manager構造体のCRLENABLEDメンバーがオンになっている場合。
  6545. \return MEMORY_E 割り当てられたメモリが失敗した場合は返します。
  6546. \return BAD_FUNC_ARG wolfssl_cert_managerがnullの場合
  6547. \param cm wolfssl_cert_manager構造体へのポインタ。
  6548. \param der DERフォーマット証明書へのポインタ。
  6549. _Example_
  6550. \code
  6551. WOLFSSL_CERT_MANAGER* cm;
  6552. byte* der;
  6553. int sz; // size of der
  6554. ...
  6555. if(wolfSSL_CertManagerCheckCRL(cm, der, sz) != SSL_SUCCESS){
  6556. // Error returned. Deal with failure case.
  6557. }
  6558. \endcode
  6559. \sa CheckCertCRL
  6560. \sa ParseCertRelative
  6561. \sa wolfSSL_CertManagerSetCRL_CB
  6562. \sa InitDecodedCert
  6563. */
  6564. int wolfSSL_CertManagerCheckCRL(WOLFSSL_CERT_MANAGER* cm,
  6565. unsigned char* der, int sz);
  6566. /*!
  6567. \ingroup CertManager
  6568. \brief 証明書マネージャを使用して証明書を検証するときに証明書失効リストの確認をオンにします。デフォルトでは、CRLチェックはオフです。オプションには、wolfssl_crl_checkallが含まれます。これは、チェーン内の各証明書に対してCRL検査を実行します。これはデフォルトであるリーフ証明書のみです。
  6569. \return SSL_SUCCESS 成功した場合に返されます。、通話が戻ります。
  6570. \return NOT_COMPILED_IN WolfSSLがCRLを有効にして構築されていない場合に返されます。
  6571. \return MEMORY_E メモリ不足状態が発生した場合に返されます。
  6572. \return BAD_FUNC_ARG ポインタが提供されていない場合に返されるエラーです。
  6573. \return SSL_FAILURE CRLコンテキストを正しく初期化できない場合に返されます。
  6574. \param cm wolfssl_certmanagernew()を使用して作成されたwolfssl_cert_manager構造体へのポインタ。
  6575. _Example_
  6576. \code
  6577. #include <wolfssl/ssl.h>
  6578. int ret = 0;
  6579. WOLFSSL_CERT_MANAGER* cm;
  6580. ...
  6581. ret = wolfSSL_CertManagerEnableCRL(cm, 0);
  6582. if (ret != SSL_SUCCESS) {
  6583. error enabling cert manager
  6584. }
  6585. ...
  6586. \endcode
  6587. \sa wolfSSL_CertManagerDisableCRL
  6588. */
  6589. int wolfSSL_CertManagerEnableCRL(WOLFSSL_CERT_MANAGER* cm,
  6590. int options);
  6591. /*!
  6592. \ingroup CertManager
  6593. \brief 証明書マネージャを使用して証明書を検証するときに証明書失効リストの確認をオフにします。デフォルトでは、CRLチェックはオフです。この関数を使用して、このCertificate Managerコンテキストを使用してCRL検査を一時的または恒久的に無効にして、以前はCRL検査が有効になっていました。
  6594. \return SSL_SUCCESS 成功した場合に返されます。、通話が戻ります。
  6595. \return BAD_FUNC_ARG 関数ポインタが提供されていない場合に返されるエラーです。
  6596. _Example_
  6597. \code
  6598. #include <wolfssl/ssl.h>
  6599. int ret = 0;
  6600. WOLFSSL_CERT_MANAGER* cm;
  6601. ...
  6602. ret = wolfSSL_CertManagerDisableCRL(cm);
  6603. if (ret != SSL_SUCCESS) {
  6604. error disabling cert manager
  6605. }
  6606. ...
  6607. \endcode
  6608. \sa wolfSSL_CertManagerEnableCRL
  6609. */
  6610. int wolfSSL_CertManagerDisableCRL(WOLFSSL_CERT_MANAGER*);
  6611. /*!
  6612. \ingroup CertManager
  6613. \brief 証明書の失効確認のために証明書をCRLにロードする際にエラーチェックを行い、その後証明書をLoadCRL()へ渡します。
  6614. \return SSL_SUCCESS wolfSSL_CertManagerLoadCRLでエラーが発生せず、loadCRLが成功で戻る場合に返されます。
  6615. \return BAD_FUNC_ARG WOLFSSL_CERT_MANAGER構造体がNULLの場合
  6616. \return SSL_FATAL_ERROR wolfSSL_CertManagerEnableCRLがSSL_SUCCESS以外のを返す場合。
  6617. \return BAD_PATH_ERROR pathがNULLの場合
  6618. \return MEMORY_E LOADCRLがヒープメモリの割り当てに失敗した場合。
  6619. \param cm wolfSSL_CertManagerNew()を使用して作成されたWOLFSSL_CERT_MANAGER構造体へのポインタ。
  6620. \param path CRLへのパスを保持しているバッファーへのポインタ。
  6621. \param type ロードする証明書の種類。
  6622. _Example_
  6623. \code
  6624. #include <wolfssl/ssl.h>
  6625. int wolfSSL_LoadCRL(WOLFSSL* ssl, const char* path, int type,
  6626. int monitor);
  6627. wolfSSL_CertManagerLoadCRL(SSL_CM(ssl), path, type, monitor);
  6628. \endcode
  6629. \sa wolfSSL_CertManagerEnableCRL
  6630. \sa wolfSSL_LoadCRL
  6631. */
  6632. int wolfSSL_CertManagerLoadCRL(WOLFSSL_CERT_MANAGER* cm,
  6633. const char* path, int type, int monitor);
  6634. /*!
  6635. \ingroup CertManager
  6636. \brief この関数は、BufferLoadCRLを呼び出すことによってCRLファイルをロードします。
  6637. \return SSL_SUCCESS 関数がエラーなしで完了した場合に返されます。
  6638. \return BAD_FUNC_ARG wolfssl_cert_managerがnullの場合に返されます。
  6639. \return SSL_FATAL_ERROR wolfssl_cert_managerに関連付けられているエラーがある場合に返されます。
  6640. \param cm wolfssl_cert_manager構造体へのポインタ。
  6641. \param buff 定数バイトタイプとバッファです。
  6642. \param sz バッファのサイズを表す長いint。
  6643. _Example_
  6644. \code
  6645. #include <wolfssl/ssl.h>
  6646. WOLFSSL_CERT_MANAGER* cm;
  6647. const unsigned char* buff;
  6648. long sz; size of buffer
  6649. int type; cert type
  6650. ...
  6651. int ret = wolfSSL_CertManagerLoadCRLBuffer(cm, buff, sz, type);
  6652. if(ret == SSL_SUCCESS){
  6653. return ret;
  6654. } else {
  6655. Failure case.
  6656. }
  6657. \endcode
  6658. \sa BufferLoadCRL
  6659. \sa wolfSSL_CertManagerEnableCRL
  6660. */
  6661. int wolfSSL_CertManagerLoadCRLBuffer(WOLFSSL_CERT_MANAGER* cm,
  6662. const unsigned char* buff, long sz,
  6663. int type);
  6664. /*!
  6665. \ingroup CertManager
  6666. \brief この関数はCRL証明書マネージャコールバックを設定します。LABE_CRLが定義されていて一致するCRLレコードが見つからない場合、CBMissingCRLは呼び出されます(WolfSSL_CertManagerSetCRL_CBを介して設定)。これにより、CRLを外部に検索してロードすることができます。
  6667. \return SSL_SUCCESS 関数とサブルーチンの実行が成功したら返されます。
  6668. \return BAD_FUNC_ARG wolfssl_cert_manager構造体がNULLの場合に返されます。
  6669. \param cm 証明書の情報を保持しているWOLFSSL_CERT_MANAGER構造。
  6670. _Example_
  6671. \code
  6672. #include <wolfssl/ssl.h>
  6673. WOLFSSL_CTX* ctx = wolfSSL_CTX_new(protocol method);
  6674. WOLFSSL* ssl = wolfSSL_new(ctx);
  6675. void cb(const char* url){
  6676. Function body.
  6677. }
  6678. CbMissingCRL cb = CbMissingCRL;
  6679. if(ctx){
  6680. return wolfSSL_CertManagerSetCRL_Cb(SSL_CM(ssl), cb);
  6681. }
  6682. \endcode
  6683. \sa CbMissingCRL
  6684. \sa wolfSSL_SetCRL_Cb
  6685. */
  6686. int wolfSSL_CertManagerSetCRL_Cb(WOLFSSL_CERT_MANAGER* cm,
  6687. CbMissingCRL cb);
  6688. /*!
  6689. \ingroup CertManager
  6690. \brief この関数は証明書マネジャーに保持されているCRLを解放します。
  6691. アプリケーションはCRLをwolfSSL_CertManagerFreeCRLを呼び出して解放した後に、新しいCRLをロードすることができます。
  6692. \return SSL_SUCCESS 関数の実行に成功した場合に返されます。
  6693. \return BAD_FUNC_ARG WOLFSSL_CERT_MANAGER構造体へのポインターがNULLで渡された場合に返されます。
  6694. \param cm wolfSSL_CertManagerNew()で生成されたWOLFSSL_CERT_MANAGER構造体へのポインター。
  6695. _Example_
  6696. \code
  6697. #include <wolfssl/ssl.h>
  6698. const char* crl1 = "./certs/crl/crl.pem";
  6699. WOLFSSL_CERT_MANAGER* cm = NULL;
  6700. cm = wolfSSL_CertManagerNew();
  6701. wolfSSL_CertManagerLoadCRL(cm, crl1, WOLFSSL_FILETYPE_PEM, 0);
  6702. wolfSSL_CertManagerFreeCRL(cm);
  6703. \endcode
  6704. \sa wolfSSL_CertManagerLoadCRL
  6705. */
  6706. int wolfSSL_CertManagerFreeCRL(WOLFSSL_CERT_MANAGER* cm);
  6707. /*!
  6708. \ingroup CertManager
  6709. \brief この機能により、OCSPENABLED OCSPENABLEDがOCSPチェックオプションが有効になっていることを意味します。
  6710. \return SSL_SUCCESS 機能の実行に成功したことに戻ります。wolfssl_cert_managerのOCSPENABLEDメンバーが有効になっています。
  6711. \return BAD_FUNC_ARG wolfssl_cert_manager構造体がnullの場合、または許可されていない引数値がサブルーチンに渡された場合に返されます。
  6712. \return MEMORY_E この関数内にメモリを割り当てるエラーまたはサブルーチンがある場合に返されます。
  6713. \param cm wolfssl_certmanagernew()を使用して作成されたwolfssl_cert_manager構造体へのポインタ。
  6714. \param der 証明書へのバイトポインタ。
  6715. _Example_
  6716. \code
  6717. #import <wolfssl/ssl.h>
  6718. WOLFSSL* ssl = wolfSSL_new(ctx);
  6719. byte* der;
  6720. int sz; size of der
  6721. ...
  6722. if(wolfSSL_CertManagerCheckOCSP(cm, der, sz) != SSL_SUCCESS){
  6723. Failure case.
  6724. }
  6725. \endcode
  6726. \sa ParseCertRelative
  6727. \sa CheckCertOCSP
  6728. */
  6729. int wolfSSL_CertManagerCheckOCSP(WOLFSSL_CERT_MANAGER* cm,
  6730. unsigned char* der, int sz);
  6731. /*!
  6732. \ingroup CertManager
  6733. \brief OCSPがオフになっている場合はOCSPをオンにし、[設定]オプションを使用可能になっている場合。
  6734. \return SSL_SUCCESS 関数呼び出しが成功した場合に返されます。
  6735. \return BAD_FUNC_ARG cm構造体がnullの場合
  6736. \return MEMORY_E wolfssl_ocsp struct値がnullの場合
  6737. \return SSL_FAILURE WOLFSSL_OCSP構造体の初期化は初期化に失敗します。
  6738. \return NOT_COMPILED_IN 正しい機能を有効にしてコンパイルされていないビルド。
  6739. \param cm wolfssl_certmanagernew()を使用して作成されたwolfssl_cert_manager構造体へのポインタ。
  6740. _Example_
  6741. \code
  6742. #include <wolfssl/ssl.h>
  6743. WOLFSSL_CTX* ctx = wolfSSL_CTX_new(protocol method);
  6744. WOLFSSL* ssl = wolfSSL_new(ctx);
  6745. WOLFSSL_CERT_MANAGER* cm = wolfSSL_CertManagerNew();
  6746. int options;
  6747. if(wolfSSL_CertManagerEnableOCSP(SSL_CM(ssl), options) != SSL_SUCCESS){
  6748. Failure case.
  6749. }
  6750. \endcode
  6751. \sa wolfSSL_CertManagerNew
  6752. */
  6753. int wolfSSL_CertManagerEnableOCSP(WOLFSSL_CERT_MANAGER* cm,
  6754. int options);
  6755. /*!
  6756. \ingroup CertManager
  6757. \brief OCSP証明書の失効を無効にします。
  6758. \return SSL_SUCCESS WolfSSL_CertMangerDisableCRLは、WolfSSL_CERT_MANAGER構造体のCRLEnabledメンバを無効にしました。
  6759. \return BAD_FUNC_ARG WOLFSSL構造はヌルでした。
  6760. _Example_
  6761. \code
  6762. #include <wolfssl/ssl.h>
  6763. WOLFSSL_CTX* ctx = wolfSSL_CTX_new(method);
  6764. WOLFSSL* ssl = wolfSSL_new(ctx);
  6765. ...
  6766. if(wolfSSL_CertManagerDisableOCSP(ssl) != SSL_SUCCESS){
  6767. Fail case.
  6768. }
  6769. \endcode
  6770. \sa wolfSSL_DisableCRL
  6771. */
  6772. int wolfSSL_CertManagerDisableOCSP(WOLFSSL_CERT_MANAGER*);
  6773. /*!
  6774. \ingroup CertManager
  6775. \brief この関数は、URLをwolfssl_cert_manager構造体のOCSpoverrideURLメンバーにコピーします。
  6776. \return SSL_SUCCESS この機能は期待どおりに実行できました。
  6777. \return BAD_FUNC_ARG wolfssl_cert_manager構造体はnullです。
  6778. \return MEMEORY_E 証明書マネージャのOCSPoverRideURLメンバーにメモリを割り当てることができませんでした。
  6779. _Example_
  6780. \code
  6781. #include <wolfssl/ssl.h>
  6782. WOLFSSL_CERT_MANAGER* cm = wolfSSL_CertManagerNew();
  6783. const char* url;
  6784. int wolfSSL_SetOCSP_OverrideURL(WOLFSSL* ssl, const char* url)
  6785. if(wolfSSL_CertManagerSetOCSPOverrideURL(SSL_CM(ssl), url) != SSL_SUCCESS){
  6786. Failure case.
  6787. }
  6788. \endcode
  6789. \sa ocspOverrideURL
  6790. \sa wolfSSL_SetOCSP_OverrideURL
  6791. */
  6792. int wolfSSL_CertManagerSetOCSPOverrideURL(WOLFSSL_CERT_MANAGER* cm,
  6793. const char* url);
  6794. /*!
  6795. \ingroup CertManager
  6796. \brief この関数は、wolfssl_cert_managerのOCSPコールバックを設定します。
  6797. \return SSL_SUCCESS 実行に成功したことに戻ります。引数はwolfssl_cert_manager構造体に保存されます。
  6798. \return BAD_FUNC_ARG wolfssl_cert_managerがnullの場合に返されます。
  6799. \param cm wolfssl_cert_manager構造体へのポインタ。
  6800. \param ioCb CBocSpio型の関数ポインタ。
  6801. \param respFreeCb - CBOCSPRESPFREAS型の関数ポインタ。
  6802. _Example_
  6803. \code
  6804. #include <wolfssl/ssl.h>
  6805. wolfSSL_SetOCSP_Cb(WOLFSSL* ssl, CbOCSPIO ioCb,
  6806. CbOCSPRespFree respFreeCb, void* ioCbCtx){
  6807. return wolfSSL_CertManagerSetOCSP_Cb(SSL_CM(ssl), ioCb, respFreeCb, ioCbCtx);
  6808. \endcode
  6809. \sa wolfSSL_CertManagerSetOCSPOverrideURL
  6810. \sa wolfSSL_CertManagerCheckOCSP
  6811. \sa wolfSSL_CertManagerEnableOCSPStapling
  6812. \sa wolfSSL_ENableOCSP
  6813. \sa wolfSSL_DisableOCSP
  6814. \sa wolfSSL_SetOCSP_Cb
  6815. */
  6816. int wolfSSL_CertManagerSetOCSP_Cb(WOLFSSL_CERT_MANAGER* cm,
  6817. CbOCSPIO ioCb, CbOCSPRespFree respFreeCb,
  6818. void* ioCbCtx);
  6819. /*!
  6820. \ingroup CertManager
  6821. \brief この関数は、オプションをオンにしないとOCSPステープルをオンにします。オプションを設定します。
  6822. \return SSL_SUCCESS エラーがなく、関数が正常に実行された場合に返されます。
  6823. \return BAD_FUNC_ARG wolfssl_cert_manager構造体がNULLまたはそうでない場合は、サブルーチンに渡された未解決の引数値があった場合に返されます。
  6824. \return MEMORY_E メモリ割り当てがある問題が発生した場合に返されます。
  6825. \return SSL_FAILURE OCSP構造体の初期化が失敗した場合に返されます。
  6826. \return NOT_COMPILED_IN wolfsslがhaber_certificate_status_requestオプションでコンパイルされていない場合に返されます。
  6827. _Example_
  6828. \code
  6829. int wolfSSL_CTX_EnableOCSPStapling(WOLFSSL_CTX* ctx){
  6830. return wolfSSL_CertManagerEnableOCSPStapling(ctx->cm);
  6831. \endcode
  6832. \sa wolfSSL_CTX_EnableOCSPStapling
  6833. */
  6834. int wolfSSL_CertManagerEnableOCSPStapling(
  6835. WOLFSSL_CERT_MANAGER* cm);
  6836. /*!
  6837. \brief
  6838. \return SSL_SUCCESS 関数とサブルーチンはエラーなしで返されました。
  6839. \return BAD_FUNC_ARG WolfSSL構造がNULLの場合に返されます。
  6840. \return MEMORY_E メモリの割り当てが失敗した場合に返されます。
  6841. \return SSL_FAILURE initcrl関数が正常に戻されない場合に返されます。
  6842. \return NOT_COMPILED_IN have_crlはコンパイル中に有効になっていませんでした。
  6843. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  6844. _Example_
  6845. \code
  6846. WOLFSSL* ssl = wolfSSL_new(ctx);
  6847. if (wolfSSL_EnableCRL(ssl, WOLFSSL_CRL_CHECKALL) != SSL_SUCCESS){
  6848. // Failure case. SSL_SUCCESS was not returned by this function or
  6849. a subroutine
  6850. }
  6851. \endcode
  6852. \sa wolfSSL_CertManagerEnableCRL
  6853. \sa InitCRL
  6854. */
  6855. int wolfSSL_EnableCRL(WOLFSSL* ssl, int options);
  6856. /*!
  6857. \brief
  6858. \return SSL_SUCCESS WolfSSL_CertMangerDisableCRLは、WolfSSL_CERT_MANAGER構造体のCRLEnabledメンバを無効にしました。
  6859. \return BAD_FUNC_ARG WOLFSSL構造はヌルでした。
  6860. _Example_
  6861. \code
  6862. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( method );
  6863. WOLFSSL* ssl = wolfSSL_new(ctx);
  6864. ...
  6865. if(wolfSSL_DisableCRL(ssl) != SSL_SUCCESS){
  6866. // Failure case
  6867. }
  6868. \endcode
  6869. \sa wolfSSL_CertManagerDisableCRL
  6870. \sa wolfSSL_CertManagerDisableOCSP
  6871. */
  6872. int wolfSSL_DisableCRL(WOLFSSL* ssl);
  6873. /*!
  6874. \brief 失効検査の証明書
  6875. \return WOLFSSL_SUCCESS 関数とすべてのサブルーチンがエラーなしで実行された場合に返されます。
  6876. \return SSL_FATAL_ERROR サブルーチンの1つが正常に戻されない場合に返されます。
  6877. \return BAD_FUNC_ARG wolfssl_cert_managerまたはwolfssl構造がnullの場合
  6878. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  6879. \param path CRLファイルへのパスを保持する定数文字ポインタ。
  6880. \param type 証明書の種類を表す整数。
  6881. _Example_
  6882. \code
  6883. WOLFSSL* ssl = wolfSSL_new(ctx);
  6884. const char* crlPemDir;
  6885. if(wolfSSL_LoadCRL(ssl, crlPemDir, SSL_FILETYPE_PEM, 0) != SSL_SUCCESS){
  6886. // Failure case. Did not return SSL_SUCCESS.
  6887. }
  6888. \endcode
  6889. \sa wolfSSL_CertManagerLoadCRL
  6890. \sa wolfSSL_CertManagerEnableCRL
  6891. \sa LoadCRL
  6892. */
  6893. int wolfSSL_LoadCRL(WOLFSSL* ssl, const char* path, int type, int monitor);
  6894. /*!
  6895. \brief
  6896. \return SSL_SUCCESS 関数またはサブルーチンがエラーなしで実行された場合に返されます。wolfssl_cert_managerのCBMissingCRLメンバーが設定されています。
  6897. \return BAD_FUNC_ARG WOLFSSLまたはWOLFSSL_CERT_MANAGER構造体がNULLの場合に返されます。
  6898. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  6899. _Example_
  6900. \code
  6901. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
  6902. WOLFSSL* ssl = wolfSSL_new(ctx);
  6903. void cb(const char* url) // required signature
  6904. {
  6905. // Function body
  6906. }
  6907. int crlCb = wolfSSL_SetCRL_Cb(ssl, cb);
  6908. if(crlCb != SSL_SUCCESS){
  6909. // The callback was not set properly
  6910. }
  6911. \endcode
  6912. \sa CbMissingCRL
  6913. \sa wolfSSL_CertManagerSetCRL_Cb
  6914. */
  6915. int wolfSSL_SetCRL_Cb(WOLFSSL* ssl, CbMissingCRL cb);
  6916. /*!
  6917. \brief
  6918. \return SSL_SUCCESS 関数とサブルーチンがエラーなしで実行された場合に返されます。
  6919. \return BAD_FUNC_ARG この関数またはサブルーチンの引数が無効な引数値を受信した場合に返されます。
  6920. \return MEMORY_E 構造体やその他の変数にメモリを割り当てるエラーが発生した場合に返されます。
  6921. \return NOT_COMPILED_IN wolfsslがhane_ocspオプションでコンパイルされていない場合に返されます。
  6922. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  6923. _Example_
  6924. \code
  6925. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( method );
  6926. WOLFSSL* ssl = wolfSSL_new(ctx);
  6927. int options; // initialize to option constant
  6928. int ret = wolfSSL_EnableOCSP(ssl, options);
  6929. if(ret != SSL_SUCCESS){
  6930. // OCSP is not enabled
  6931. }
  6932. \endcode
  6933. \sa wolfSSL_CertManagerEnableOCSP
  6934. */
  6935. int wolfSSL_EnableOCSP(WOLFSSL* ssl, int options);
  6936. /*!
  6937. \brief
  6938. \return SSL_SUCCESS 関数とそのサブルーチンがエラーなしで戻った場合に返されます。wolfssl_cert_manager構造体のOCSPENABLEDメンバーは正常に設定されました。
  6939. \return BAD_FUNC_ARG WolfSSL構造がNULLの場合に返されます。
  6940. _Example_
  6941. \code
  6942. WOLFSSL* ssl = wolfSSL_new(ctx);
  6943. if(wolfSSL_DisableOCSP(ssl) != SSL_SUCCESS){
  6944. // Returned with an error. Failure case in this block.
  6945. }
  6946. \endcode
  6947. \sa wolfSSL_CertManagerDisableOCSP
  6948. */
  6949. int wolfSSL_DisableOCSP(WOLFSSL*);
  6950. /*!
  6951. \brief wolfssl_cert_manager構造体。
  6952. \return SSL_SUCCESS 機能の実行に成功したことに戻ります。
  6953. \return BAD_FUNC_ARG wolfssl構造体がnullの場合、または未解決の引数がサブルーチンに渡された場合に返されます。
  6954. \return MEMORY_E サブルーチンにメモリを割り当てるエラーが発生した場合に返されます。
  6955. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  6956. _Example_
  6957. \code
  6958. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( method );
  6959. WOLFSSL* ssl = wolfSSL_new(ctx);
  6960. char url[URLSZ];
  6961. ...
  6962. if(wolfSSL_SetOCSP_OverrideURL(ssl, url)){
  6963. // The override url is set to the new value
  6964. }
  6965. \endcode
  6966. \sa wolfSSL_CertManagerSetOCSPOverrideURL
  6967. */
  6968. int wolfSSL_SetOCSP_OverrideURL(WOLFSSL* ssl, const char* url);
  6969. /*!
  6970. \brief wolfssl_cert_manager構造体。
  6971. \return SSL_SUCCESS 関数がエラーなしで実行された場合に返されます。CMのOCSPIOCB、OCSPRESPFREECB、およびOCSPIOCTXメンバーが設定されています。
  6972. \return BAD_FUNC_ARG WOLFSSLまたはWOLFSSL_CERT_MANAGER構造がNULLの場合に返されます。
  6973. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  6974. \param ioCb CBocSpioを入力するための関数ポインタ。
  6975. \param respFreeCb 応答メモリを解放するための呼び出しであるCBocSpreSpFreeを入力するための関数ポインタ。
  6976. _Example_
  6977. \code
  6978. WOLFSSL* ssl = wolfSSL_new(ctx);
  6979. int OCSPIO_CB(void* , const char*, int , unsigned char* , int,
  6980. unsigned char**){ // must have this signature
  6981. // Function Body
  6982. }
  6983. void OCSPRespFree_CB(void* , unsigned char* ){ // must have this signature
  6984. // function body
  6985. }
  6986. void* ioCbCtx;
  6987. CbOCSPRespFree CB_OCSPRespFree;
  6988. if(wolfSSL_SetOCSP_Cb(ssl, OCSPIO_CB( pass args ), CB_OCSPRespFree,
  6989. ioCbCtx) != SSL_SUCCESS){
  6990. // Callback not set
  6991. }
  6992. \endcode
  6993. \sa wolfSSL_CertManagerSetOCSP_Cb
  6994. \sa CbOCSPIO
  6995. \sa CbOCSPRespFree
  6996. */
  6997. int wolfSSL_SetOCSP_Cb(WOLFSSL* ssl, CbOCSPIO ioCb, CbOCSPRespFree respFreeCb,
  6998. void* ioCbCtx);
  6999. /*!
  7000. \brief
  7001. \return SSL_SUCCESS この関数とそれがサブルーチンの場合はエラーなしで実行されます。
  7002. \return BAD_FUNC_ARG CTX構造体がNULLの場合、またはその他の点ではサブルーチンに無効な引数があった場合に返されます。
  7003. \return MEMORY_E 関数の実行中にメモリの割り当てエラーが発生した場合に返されます。
  7004. \return SSL_FAILURE wolfssl_cert_managerのCRLメンバーが正しく初期化されなかった場合に返されます。
  7005. \return NOT_COMPILED_IN wolfsslはhane_crlオプションでコンパイルされませんでした。
  7006. _Example_
  7007. \code
  7008. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( method );
  7009. WOLFSSL* ssl = wolfSSL_new(ctx);
  7010. ...
  7011. if(wolfSSL_CTX_EnableCRL(ssl->ctx, options) != SSL_SUCCESS){
  7012. // The function failed
  7013. }
  7014. \endcode
  7015. \sa wolfSSL_CertManagerEnableCRL
  7016. \sa InitCRL
  7017. \sa wolfSSL_CTX_DisableCRL
  7018. */
  7019. int wolfSSL_CTX_EnableCRL(WOLFSSL_CTX* ctx, int options);
  7020. /*!
  7021. \brief
  7022. \return SSL_SUCCESS 関数がエラーなしで実行された場合に返されます。wolfssl_cert_manager構造体のCRLEnabledメンバーは0に設定されています。
  7023. \return BAD_FUNC_ARG CTX構造体またはCM構造体にNULL値がある場合に返されます。
  7024. _Example_
  7025. \code
  7026. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( method );
  7027. WOLFSSL* ssl = wolfSSL_new(ctx);
  7028. ...
  7029. if(wolfSSL_CTX_DisableCRL(ssl->ctx) != SSL_SUCCESS){
  7030. // Failure case.
  7031. }
  7032. \endcode
  7033. \sa wolfSSL_CertManagerDisableCRL
  7034. */
  7035. int wolfSSL_CTX_DisableCRL(WOLFSSL_CTX* ctx);
  7036. /*!
  7037. \brief wolfssl_certmanagerLoadcr()。
  7038. \return SSL_SUCCESS - 関数とそのサブルーチンがエラーなしで実行された場合に返されます。
  7039. \return BAD_FUNC_ARG - この関数またはサブルーチンがNULL構造に渡された場合に返されます。
  7040. \return BAD_PATH_ERROR - パス変数がnullとして開くと戻ります。
  7041. \return MEMORY_E - メモリの割り当てが失敗した場合に返されます。
  7042. \param ctx wolfSSL_CTX_new()を使用して作成されたWOLFSSL_CTX構造体へのポインタ。
  7043. \param path 証明書へのパス。
  7044. \param type 証明書の種類を保持する整数変数。
  7045. _Example_
  7046. \code
  7047. WOLFSSL_CTX* ctx;
  7048. const char* path;
  7049. return wolfSSL_CTX_LoadCRL(ctx, path, SSL_FILETYPE_PEM, 0);
  7050. \endcode
  7051. \sa wolfSSL_CertManagerLoadCRL
  7052. \sa LoadCRL
  7053. */
  7054. int wolfSSL_CTX_LoadCRL(WOLFSSL_CTX* ctx, const char* path, int type, int monitor);
  7055. /*!
  7056. \brief wolfssl_certmanagersetCRL_CBを呼び出して、WolfSSL_CERT_MANAGER構造のメンバー。
  7057. \return SSL_SUCCESS 実行が成功するために返されました。WOLFSSL_CERT_MANAGER構造体のCBMSSINGCRLはCBに正常に設定されました。
  7058. \return BAD_FUNC_ARG wolfssl_ctxまたはwolfssl_cert_managerがNULLの場合に返されます。
  7059. \param ctx wolfSSL_CTX_new()で作成されたWOLFSSL_CTX構造体へのポインタ。
  7060. _Example_
  7061. \code
  7062. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
  7063. void cb(const char* url) // Required signature
  7064. {
  7065. // Function body
  7066. }
  7067. if (wolfSSL_CTX_SetCRL_Cb(ctx, cb) != SSL_SUCCESS){
  7068. // Failure case, cb was not set correctly.
  7069. }
  7070. \endcode
  7071. \sa wolfSSL_CertManagerSetCRL_Cb
  7072. \sa CbMissingCRL
  7073. */
  7074. int wolfSSL_CTX_SetCRL_Cb(WOLFSSL_CTX* ctx, CbMissingCRL cb);
  7075. /*!
  7076. \brief wolfsslの機能オプションの値が1つ以上のオプションで構成されている場合は、次のオプションを1つ以上にします.wolfssl_ocsp_enable - OCSPルックアップを有効にするwolfssl_ocsp_url_override - 証明書のURLの代わりにURLをオーバーライドします。オーバーライドURLは、wolfssl_ctx_setocsp_overrideURL()関数を使用して指定されます。この関数は、wolfsslがOCSPサポート(--enable-ocsp、#define hane_ocsp)でコンパイルされたときにのみOCSPオプションを設定します。
  7077. \return SSL_SUCCESS 成功したときに返されます。
  7078. \return SSL_FAILURE 失敗したときに返されます。
  7079. \return NOT_COMPILED_IN この関数が呼び出されたときに返されますが、wolfsslがコンパイルされたときにOCSPサポートは有効になっていませんでした。
  7080. \param ctx wolfSSL_CTX_new()で作成されたSSLコンテキストへのポインタ。
  7081. _Example_
  7082. \code
  7083. WOLFSSL_CTX* ctx = 0;
  7084. ...
  7085. wolfSSL_CTX_OCSP_set_options(ctx, WOLFSSL_OCSP_ENABLE);
  7086. \endcode
  7087. \sa wolfSSL_CTX_OCSP_set_override_url
  7088. */
  7089. int wolfSSL_CTX_EnableOCSP(WOLFSSL_CTX* ctx, int options);
  7090. /*!
  7091. \brief wolfssl_cert_manager構造体のOCSPENABLEDメンバーに影響を与えます。
  7092. \return SSL_SUCCESS 関数がエラーなしで実行された場合に返されます。CMのOCSPENABLEDメンバーは無効になっています。
  7093. \return BAD_FUNC_ARG WOLFSSL_CTX構造がnullの場合に返されます。
  7094. _Example_
  7095. \code
  7096. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( method );
  7097. WOLFSSL* ssl = wolfSSL_new(ctx);
  7098. ...
  7099. if(!wolfSSL_CTX_DisableOCSP(ssl->ctx)){
  7100. // OCSP is not disabled
  7101. }
  7102. \endcode
  7103. \sa wolfSSL_DisableOCSP
  7104. \sa wolfSSL_CertManagerDisableOCSP
  7105. */
  7106. int wolfSSL_CTX_DisableOCSP(WOLFSSL_CTX*);
  7107. /*!
  7108. \brief wolfssl_csp_url_overrideオプションがwolfssl_ctx_enableocspを使用して設定されていない限り、OCSPは個々の証明書にあるURLを使用します。
  7109. \return SSL_SUCCESS 成功したときに返されます。
  7110. \return SSL_FAILURE 失敗したときに返されます。
  7111. \return NOT_COMPILED_IN この関数が呼び出されたときに返されますが、wolfsslがコンパイルされたときにOCSPサポートは有効になっていませんでした。
  7112. \param ctx wolfSSL_CTX_new()で作成されたSSLコンテキストへのポインタ。
  7113. _Example_
  7114. \code
  7115. WOLFSSL_CTX* ctx = 0;
  7116. ...
  7117. wolfSSL_CTX_OCSP_set_override_url(ctx, “custom-url-here”);
  7118. \endcode
  7119. \sa wolfSSL_CTX_OCSP_set_options
  7120. */
  7121. int wolfSSL_CTX_SetOCSP_OverrideURL(WOLFSSL_CTX* ctx, const char* url);
  7122. /*!
  7123. \brief
  7124. \return SSL_SUCCESS 関数が正常に実行された場合に返されます。CM内のOCSPIOCB、OCSPRESPFREECB、およびOCSPIOCTXメンバーは正常に設定されました。
  7125. \return BAD_FUNC_ARG WOLFSSL_CTXまたはwolfssl_cert_manager構造体がnullの場合に返されます。
  7126. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  7127. \param ioCb 関数ポインタであるCBocSpio型。
  7128. \param respFreeCb 関数ポインタであるCBocSprepSprepFree型。
  7129. _Example_
  7130. \code
  7131. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
  7132. CbOCSPIO ocspIOCb;
  7133. CbOCSPRespFree ocspRespFreeCb;
  7134. void* ioCbCtx;
  7135. int isSetOCSP = wolfSSL_CTX_SetOCSP_Cb(ctx, ocspIOCb,
  7136. ocspRespFreeCb, ioCbCtx);
  7137. if(isSetOCSP != SSL_SUCCESS){
  7138. // The function did not return successfully.
  7139. }
  7140. \endcode
  7141. \sa wolfSSL_CertManagerSetOCSP_Cb
  7142. \sa CbOCSPIO
  7143. \sa CbOCSPRespFree
  7144. */
  7145. int wolfSSL_CTX_SetOCSP_Cb(WOLFSSL_CTX* ctx,
  7146. CbOCSPIO ioCb, CbOCSPRespFree respFreeCb,
  7147. void* ioCbCtx);
  7148. /*!
  7149. \brief wolfssl_certmanagerEnableOcspStapling()。
  7150. \return SSL_SUCCESS エラーがなく、関数が正常に実行された場合に返されます。
  7151. \return BAD_FUNC_ARG WOLFSSL_CTX構造体がNULLまたはそうでない場合は、サブルーチンに渡された未解決の引数値があった場合に返されます。
  7152. \return MEMORY_E メモリ割り当てがある問題が発生した場合に返されます。
  7153. \return SSL_FAILURE OCSP構造体の初期化が失敗した場合に返されます。
  7154. \return NOT_COMPILED_IN wolfsslがhaber_certificate_status_requestオプションでコンパイルされていない場合に返されます。
  7155. _Example_
  7156. \code
  7157. WOLFSSL* ssl = wolfSSL_new();
  7158. ssl->method.version; // set to desired protocol
  7159. ...
  7160. if(!wolfSSL_CTX_EnableOCSPStapling(ssl->ctx)){
  7161. // OCSP stapling is not enabled
  7162. }
  7163. \endcode
  7164. \sa wolfSSL_CertManagerEnableOCSPStapling
  7165. \sa InitOCSP
  7166. */
  7167. int wolfSSL_CTX_EnableOCSPStapling(WOLFSSL_CTX*);
  7168. /*!
  7169. \ingroup CertsKeys
  7170. \brief 通常、SSLハンドシェイクの最後に、WolfSSLは一時的なアレイを解放します。ハンドシェイクが始まる前にこの関数を呼び出すと、WolfSSLは一時的な配列を解放するのを防ぎます。Wolfssl_get_keys()またはPSKのヒントなどのものには、一時的な配列が必要になる場合があります。ユーザが一時的な配列で行われると、wolfssl_freearray()のいずれかが即座にリソースを解放することができ、あるいは、関連するSSLオブジェクトが解放されたときにリソースが解放されるようになる可能性がある。
  7171. \return none 返品不可。
  7172. _Example_
  7173. \code
  7174. WOLFSSL* ssl;
  7175. ...
  7176. wolfSSL_KeepArrays(ssl);
  7177. \endcode
  7178. \sa wolfSSL_FreeArrays
  7179. */
  7180. void wolfSSL_KeepArrays(WOLFSSL*);
  7181. /*!
  7182. \ingroup CertsKeys
  7183. \brief 通常、SSLハンドシェイクの最後に、WolfSSLは一時的なアレイを解放します。wolfssl_keeparrays()がハンドシェイクの前に呼び出された場合、WolfSSLは一時的な配列を解放しません。この関数は一時的な配列を明示的に解放し、ユーザーが一時的な配列で行われたときに呼び出されるべきであり、SSLオブジェクトがこれらのリソースを解放するのを待ったくない。
  7184. \return none 返品不可。
  7185. _Example_
  7186. \code
  7187. WOLFSSL* ssl;
  7188. ...
  7189. wolfSSL_FreeArrays(ssl);
  7190. \endcode
  7191. \sa wolfSSL_KeepArrays
  7192. */
  7193. void wolfSSL_FreeArrays(WOLFSSL*);
  7194. /*!
  7195. \brief 'ssl'パラメータに渡されたオブジェクト。これは、WolfSSLクライアントによってSNI拡張機能がClientHelloで送信され、WolfSSL ServerはServerHello + SNIまたはSNIミスマッチの場合は致命的なAlert Hello + SNIを応答します。
  7196. \return WOLFSSL_SUCCESS 成功時に返されます。
  7197. \return BAD_FUNC_ARG 次のいずれかの場合で返されるエラーです.SSLはNULL、データはNULL、タイプは不明な値です。(下記参照)
  7198. \return MEMORY_E 十分なメモリがないときにエラーが返されます。
  7199. \param ssl wolfSSL_new()で作成されたSSLオブジェクトへのポインタ。
  7200. \param type どの種類のサーバー名がデータに渡されたかを示します。既知の型は次のとおりです。enum {wolfssl_sni_host_name = 0};
  7201. \param data サーバー名データへのポインタ。
  7202. _Example_
  7203. \code
  7204. int ret = 0;
  7205. WOLFSSL_CTX* ctx = 0;
  7206. WOLFSSL* ssl = 0;
  7207. ctx = wolfSSL_CTX_new(method);
  7208. if (ctx == NULL) {
  7209. // context creation failed
  7210. }
  7211. ssl = wolfSSL_new(ctx);
  7212. if (ssl == NULL) {
  7213. // ssl creation failed
  7214. }
  7215. ret = wolfSSL_UseSNI(ssl, WOLFSSL_SNI_HOST_NAME, "www.yassl.com",
  7216. strlen("www.yassl.com"));
  7217. if (ret != WOLFSSL_SUCCESS) {
  7218. // sni usage failed
  7219. }
  7220. \endcode
  7221. \sa wolfSSL_new
  7222. \sa wolfSSL_CTX_UseSNI
  7223. */
  7224. int wolfSSL_UseSNI(WOLFSSL* ssl, unsigned char type,
  7225. const void* data, unsigned short size);
  7226. /*!
  7227. \brief SSLコンテキストから作成されたオブジェクトは 'ctx'パラメータに渡されました。これは、WolfSSLクライアントによってSNI拡張機能がClientHelloで送信され、WolfSSLサーバーはServerHello + SNIまたはSNIの不一致の場合には致命的なALERT Hello + SNIを応答します。
  7228. \return WOLFSSL_SUCCESS 成功時に返されます。
  7229. \return BAD_FUNC_ARG 次のいずれかの場合で返されるエラーです.CTXはNULL、データはNULL、タイプは不明な値です。(下記参照)
  7230. \return MEMORY_E 十分なメモリがないときにエラーが返されます。
  7231. \param ctx wolfSSL_CTX_new()で作成されたSSLコンテキストへのポインタ。
  7232. \param type どの種類のサーバー名がデータに渡されたかを示します。既知の型は次のとおりです。enum {wolfssl_sni_host_name = 0};
  7233. \param data サーバー名データへのポインタ。
  7234. _Example_
  7235. \code
  7236. int ret = 0;
  7237. WOLFSSL_CTX* ctx = 0;
  7238. ctx = wolfSSL_CTX_new(method);
  7239. if (ctx == NULL) {
  7240. // context creation failed
  7241. }
  7242. ret = wolfSSL_CTX_UseSNI(ctx, WOLFSSL_SNI_HOST_NAME, "www.yassl.com",
  7243. strlen("www.yassl.com"));
  7244. if (ret != WOLFSSL_SUCCESS) {
  7245. // sni usage failed
  7246. }
  7247. \endcode
  7248. \sa wolfSSL_CTX_new
  7249. \sa wolfSSL_UseSNI
  7250. */
  7251. int wolfSSL_CTX_UseSNI(WOLFSSL_CTX* ctx, unsigned char type,
  7252. const void* data, unsigned short size);
  7253. /*!
  7254. \brief 'ssl'パラメータに渡されたSSLオブジェクト内のサーバー名表示を使用したSSLセッションの動作。オプションを以下に説明します。
  7255. \return none いいえ返します。
  7256. \param ssl wolfSSL_new()で作成されたSSLオブジェクトへのポインタ。
  7257. \param type どの種類のサーバー名がデータに渡されたかを示します。既知の型は次のとおりです。enum {wolfssl_sni_host_name = 0};
  7258. \param options 選択されたオプションを持つビット単位のセマフォ。利用可能なオプションは次のとおりです。enum {wolfssl_sni_continue_on_mismatch = 0x01、wolfssl_sni_answer_on_mismatch = 0x02};通常、サーバーは、クライアントによって提供されたホスト名がサーバーと表示されているホスト名がサーバーで提供されている場合、サーバーはhandshakeを中止します。
  7259. \param WOLFSSL_SNI_CONTINUE_ON_MISMATCH このオプションを設定すると、サーバーはセッションを中止する代わりにSNI応答を送信しません。
  7260. _Example_
  7261. \code
  7262. int ret = 0;
  7263. WOLFSSL_CTX* ctx = 0;
  7264. WOLFSSL* ssl = 0;
  7265. ctx = wolfSSL_CTX_new(method);
  7266. if (ctx == NULL) {
  7267. // context creation failed
  7268. }
  7269. ssl = wolfSSL_new(ctx);
  7270. if (ssl == NULL) {
  7271. // ssl creation failed
  7272. }
  7273. ret = wolfSSL_UseSNI(ssl, 0, "www.yassl.com", strlen("www.yassl.com"));
  7274. if (ret != WOLFSSL_SUCCESS) {
  7275. // sni usage failed
  7276. }
  7277. wolfSSL_SNI_SetOptions(ssl, WOLFSSL_SNI_HOST_NAME,
  7278. WOLFSSL_SNI_CONTINUE_ON_MISMATCH);
  7279. \endcode
  7280. \sa wolfSSL_new
  7281. \sa wolfSSL_UseSNI
  7282. \sa wolfSSL_CTX_SNI_SetOptions
  7283. */
  7284. void wolfSSL_SNI_SetOptions(WOLFSSL* ssl, unsigned char type,
  7285. unsigned char options);
  7286. /*!
  7287. \brief SSLセッションを使用したSSLオブジェクトのサーバ名指示を使用して、SSLコンテキストから作成されたSSLオブジェクトから作成されます。オプションを以下に説明します。
  7288. \return none いいえ返します。
  7289. \param ctx wolfSSL_CTX_new()で作成されたSSLコンテキストへのポインタ。
  7290. \param type どの種類のサーバー名がデータに渡されたかを示します。既知の型は次のとおりです。enum {wolfssl_sni_host_name = 0};
  7291. \param options 選択されたオプションを持つビット単位のセマフォ。利用可能なオプションは次のとおりです。enum {wolfssl_sni_continue_on_mismatch = 0x01、wolfssl_sni_answer_on_mismatch = 0x02};通常、サーバーは、クライアントによって提供されたホスト名がサーバーと表示されているホスト名がサーバーで提供されている場合、サーバーはhandshakeを中止します。
  7292. \param WOLFSSL_SNI_CONTINUE_ON_MISMATCH このオプションを設定すると、サーバーはセッションを中止する代わりにSNI応答を送信しません。
  7293. _Example_
  7294. \code
  7295. int ret = 0;
  7296. WOLFSSL_CTX* ctx = 0;
  7297. ctx = wolfSSL_CTX_new(method);
  7298. if (ctx == NULL) {
  7299. // context creation failed
  7300. }
  7301. ret = wolfSSL_CTX_UseSNI(ctx, 0, "www.yassl.com", strlen("www.yassl.com"));
  7302. if (ret != WOLFSSL_SUCCESS) {
  7303. // sni usage failed
  7304. }
  7305. wolfSSL_CTX_SNI_SetOptions(ctx, WOLFSSL_SNI_HOST_NAME,
  7306. WOLFSSL_SNI_CONTINUE_ON_MISMATCH);
  7307. \endcode
  7308. \sa wolfSSL_CTX_new
  7309. \sa wolfSSL_CTX_UseSNI
  7310. \sa wolfSSL_SNI_SetOptions
  7311. */
  7312. void wolfSSL_CTX_SNI_SetOptions(WOLFSSL_CTX* ctx,
  7313. unsigned char type, unsigned char options);
  7314. /*!
  7315. \brief クライアントによってクライアントから提供された名前表示クライアントによって送信されたメッセージセッションを開始する。SNIを取得するためのコンテキストまたはセッション設定が必要ありません。
  7316. \return WOLFSSL_SUCCESS 成功時に返されます。
  7317. \return BAD_FUNC_ARG このケースで返されるエラーは、次のいずれかの場合で返されます。バッファはNULL、BUFFERSZ <= 0、SNIはNULL、INOUTSZはNULLまたは<= 0です。
  7318. \return BUFFER_ERROR 不正なクライアントhelloメッセージがあるときにエラーが返されます。
  7319. \return INCOMPLETE_DATA 抽出を完了するのに十分なデータがない場合に返されるエラーです。
  7320. \param buffer クライアントから提供されたデータへのポインタ(クライアントhello)。
  7321. \param bufferSz クライアントhelloメッセージのサイズ。
  7322. \param type どの種類のサーバー名がバッファーから取得されているかを示します。既知の型は次のとおりです。enum {wolfssl_sni_host_name = 0};
  7323. \param sni 出力が保存される場所へのポインタ。
  7324. _Example_
  7325. \code
  7326. unsigned char buffer[1024] = {0};
  7327. unsigned char result[32] = {0};
  7328. int length = 32;
  7329. // read Client Hello to buffer...
  7330. ret = wolfSSL_SNI_GetFromBuffer(buffer, sizeof(buffer), 0, result, &length));
  7331. if (ret != WOLFSSL_SUCCESS) {
  7332. // sni retrieve failed
  7333. }
  7334. \endcode
  7335. \sa wolfSSL_UseSNI
  7336. \sa wolfSSL_CTX_UseSNI
  7337. \sa wolfSSL_SNI_GetRequest
  7338. */
  7339. int wolfSSL_SNI_GetFromBuffer(
  7340. const unsigned char* clientHello, unsigned int helloSz,
  7341. unsigned char type, unsigned char* sni, unsigned int* inOutSz);
  7342. /*!
  7343. \ingroup IO
  7344. \brief この関数はSNIオブジェクトのステータスを取得します。
  7345. \return value SNIがNULLでない場合、この関数はSNI構造体のステータスメンバーのバイト値を返します。
  7346. \return 0 SNIオブジェクトがNULLの場合
  7347. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  7348. _Example_
  7349. \code
  7350. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
  7351. WOLFSSL* ssl = wolfSSL_new(ctx);
  7352. #define AssertIntEQ(x, y) AssertInt(x, y, ==, !=)
  7353. Byte type = WOLFSSL_SNI_HOST_NAME;
  7354. char* request = (char*)&type;
  7355. AssertIntEQ(WOLFSSL_SNI_NO_MATCH, wolfSSL_SNI_Status(ssl, type));
  7356. \endcode
  7357. \sa TLSX_SNI_Status
  7358. \sa TLSX_SNI_find
  7359. \sa TLSX_Find
  7360. */
  7361. unsigned char wolfSSL_SNI_Status(WOLFSSL* ssl, unsigned char type);
  7362. /*!
  7363. \brief SSLセッションでクライアントによって提供されるサーバー名の表示。
  7364. \return size 提供されたSNIデータのサイズ。
  7365. \param ssl wolfSSL_new()で作成されたSSLオブジェクトへのポインタ。
  7366. \param type どの種類のサーバー名がデータ内で取得されているかを示します。既知の型は次のとおりです。enum {wolfssl_sni_host_name = 0};
  7367. _Example_
  7368. \code
  7369. int ret = 0;
  7370. WOLFSSL_CTX* ctx = 0;
  7371. WOLFSSL* ssl = 0;
  7372. ctx = wolfSSL_CTX_new(method);
  7373. if (ctx == NULL) {
  7374. // context creation failed
  7375. }
  7376. ssl = wolfSSL_new(ctx);
  7377. if (ssl == NULL) {
  7378. // ssl creation failed
  7379. }
  7380. ret = wolfSSL_UseSNI(ssl, 0, "www.yassl.com", strlen("www.yassl.com"));
  7381. if (ret != WOLFSSL_SUCCESS) {
  7382. // sni usage failed
  7383. }
  7384. if (wolfSSL_accept(ssl) == SSL_SUCCESS) {
  7385. void *data = NULL;
  7386. unsigned short size = wolfSSL_SNI_GetRequest(ssl, 0, &data);
  7387. }
  7388. \endcode
  7389. \sa wolfSSL_UseSNI
  7390. \sa wolfSSL_CTX_UseSNI
  7391. */
  7392. unsigned short wolfSSL_SNI_GetRequest(WOLFSSL *ssl,
  7393. unsigned char type, void** data);
  7394. /*!
  7395. \ingroup Setup
  7396. \brief wolfsslセッションにALPNを設定します。
  7397. \return WOLFSSL_SUCCESS: 成功時に返されます。
  7398. \return BAD_FUNC_ARG SSLまたはPROTOCOL_NAME_LISTがNULLまたはPROTOCOL_NAME_LISTSZが大きすぎたり、オプションがサポートされていないものを含みます。
  7399. \return MEMORY_ERROR プロトコルリストのメモリの割り当て中にエラーが発生しました。
  7400. \return SSL_FAILURE 失敗時に返されます。
  7401. \param ssl 使用するWolfSSLセッション。
  7402. \param protocol_name_list 使用するプロトコル名のリスト。カンマ区切り文字列が必要です。
  7403. \param protocol_name_listSz プロトコル名のリストのサイズ。
  7404. _Example_
  7405. \code
  7406. wolfSSL_Init();
  7407. WOLFSSL_CTX* ctx;
  7408. WOLFSSL* ssl;
  7409. WOLFSSL_METHOD method = // Some wolfSSL method
  7410. ctx = wolfSSL_CTX_new(method);
  7411. ssl = wolfSSL_new(ctx);
  7412. char alpn_list[] = {};
  7413. if (wolfSSL_UseALPN(ssl, alpn_list, sizeof(alpn_list),
  7414. WOLFSSL_APN_FAILED_ON_MISMATCH) != WOLFSSL_SUCCESS)
  7415. {
  7416. // Error setting session ticket
  7417. }
  7418. \endcode
  7419. \sa TLSX_UseALPN
  7420. */
  7421. int wolfSSL_UseALPN(WOLFSSL* ssl, char *protocol_name_list,
  7422. unsigned int protocol_name_listSz,
  7423. unsigned char options);
  7424. /*!
  7425. \ingroup TLS
  7426. \brief この関数は、サーバーによって設定されたプロトコル名を取得します。
  7427. \return SSL_SUCCESS エラーが投げられていない正常な実行に戻りました。
  7428. \return SSL_FATAL_ERROR 拡張子が見つからなかった場合、またはピアとプロトコルが一致しなかった場合に返されます。2つ以上のプロトコル名が受け入れられている場合は、スローされたエラーもあります。
  7429. \return SSL_ALPN_NOT_FOUND ピアとプロトコルの一致が見つからなかったことを示す返されました。
  7430. \return BAD_FUNC_ARG 関数に渡されたnull引数があった場合に返されます。
  7431. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  7432. \param protocol_name プロトコル名を表すCHARへのポインタは、ALPN構造に保持されます。
  7433. _Example_
  7434. \code
  7435. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
  7436. WOLFSSL* ssl = WOLFSSL_new(ctx);
  7437. ...
  7438. int err;
  7439. char* protocol_name = NULL;
  7440. Word16 protocol_nameSz = 0;
  7441. err = wolfSSL_ALPN_GetProtocol(ssl, &protocol_name, &protocol_nameSz);
  7442. if(err == SSL_SUCCESS){
  7443. // Sent ALPN protocol
  7444. }
  7445. \endcode
  7446. \sa TLSX_ALPN_GetRequest
  7447. \sa TLSX_Find
  7448. */
  7449. int wolfSSL_ALPN_GetProtocol(WOLFSSL* ssl, char **protocol_name,
  7450. unsigned short *size);
  7451. /*!
  7452. \ingroup TLS
  7453. \brief この関数は、alpn_client_listデータをSSLオブジェクトからバッファにコピーします。
  7454. \return SSL_SUCCESS 関数がエラーなしで実行された場合に返されます。SSLオブジェクトのALPN_CLIENT_LISTメンバーがLISTパラメータにコピーされました。
  7455. \return BAD_FUNC_ARG listまたはlistszパラメーターがnullの場合に返されます。
  7456. \return BUFFER_ERROR リストバッファに問題がある場合は(NULLまたはサイズが0の場合)に問題がある場合に返されます。
  7457. \return MEMORY_ERROR メモリを動的に割り当てる問題がある場合に返されます。
  7458. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  7459. \param list バッファへのポインタ。SSLオブジェクトからのデータがコピーされます。
  7460. _Example_
  7461. \code
  7462. #import <wolfssl/ssl.h>
  7463. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method);
  7464. WOLFSSL* ssl = wolfSSL_new(ctx);
  7465. #ifdef HAVE_ALPN
  7466. char* list = NULL;
  7467. word16 listSz = 0;
  7468. err = wolfSSL_ALPN_GetPeerProtocol(ssl, &list, &listSz);
  7469. if(err == SSL_SUCCESS){
  7470. List of protocols names sent by client
  7471. }
  7472. \endcode
  7473. \sa wolfSSL_UseALPN
  7474. */
  7475. int wolfSSL_ALPN_GetPeerProtocol(WOLFSSL* ssl, char **list,
  7476. unsigned short *listSz);
  7477. /*!
  7478. \brief 'ssl'パラメータに渡されたSSLオブジェクト内の最大フラグメント長。これは、最大フラグメント長拡張機能がWolfSSLクライアントによってClientHelloで送信されることを意味します。
  7479. \return SSL_SUCCESS 成功時に返されます。
  7480. \return BAD_FUNC_ARG 次のいずれかの場合に返されるエラーです.SSLはNULL、MFLは範囲外です。
  7481. \return MEMORY_E 十分なメモリがないときにエラーが返されます。
  7482. \param ssl wolfSSL_new()で作成されたSSLオブジェクトへのポインタ。
  7483. _Example_
  7484. \code
  7485. int ret = 0;
  7486. WOLFSSL_CTX* ctx = 0;
  7487. WOLFSSL* ssl = 0;
  7488. ctx = wolfSSL_CTX_new(method);
  7489. if (ctx == NULL) {
  7490. // context creation failed
  7491. }
  7492. ssl = wolfSSL_new(ctx);
  7493. if (ssl == NULL) {
  7494. // ssl creation failed
  7495. }
  7496. ret = wolfSSL_UseMaxFragment(ssl, WOLFSSL_MFL_2_11);
  7497. if (ret != 0) {
  7498. // max fragment usage failed
  7499. }
  7500. \endcode
  7501. \sa wolfSSL_new
  7502. \sa wolfSSL_CTX_UseMaxFragment
  7503. */
  7504. int wolfSSL_UseMaxFragment(WOLFSSL* ssl, unsigned char mfl);
  7505. /*!
  7506. \brief SSLコンテキストから作成されたSSLオブジェクトの最大フラグメント長さ 'ctx'パラメータに渡されました。これは、最大フラグメント長拡張機能がWolfSSLクライアントによってClientHelloで送信されることを意味します。
  7507. \return SSL_SUCCESS 成功時に返されます。
  7508. \return BAD_FUNC_ARG 次のいずれかの場合に返されるエラーです.CTXはNULL、MFLは範囲外です。
  7509. \return MEMORY_E 十分なメモリがないときにエラーが返されます。
  7510. \param ctx wolfSSL_CTX_new()で作成されたSSLコンテキストへのポインタ。
  7511. _Example_
  7512. \code
  7513. int ret = 0;
  7514. WOLFSSL_CTX* ctx = 0;
  7515. ctx = wolfSSL_CTX_new(method);
  7516. if (ctx == NULL) {
  7517. // context creation failed
  7518. }
  7519. ret = wolfSSL_CTX_UseMaxFragment(ctx, WOLFSSL_MFL_2_11);
  7520. if (ret != 0) {
  7521. // max fragment usage failed
  7522. }
  7523. \endcode
  7524. \sa wolfSSL_CTX_new
  7525. \sa wolfSSL_UseMaxFragment
  7526. */
  7527. int wolfSSL_CTX_UseMaxFragment(WOLFSSL_CTX* ctx, unsigned char mfl);
  7528. /*!
  7529. \brief 'ssl'パラメータに渡されたSSLオブジェクト内のtruncated HMAC。これは、切り捨てられたHMAC拡張機能がWolfSSLクライアントによってClientHelloで送信されることを意味します。
  7530. \return SSL_SUCCESS 成功時に返されます。
  7531. \return BAD_FUNC_ARG 次のいずれかの場合に返されるエラーです.SSLはNULLです
  7532. \return MEMORY_E 十分なメモリがないときにエラーが返されます。
  7533. _Example_
  7534. \code
  7535. int ret = 0;
  7536. WOLFSSL_CTX* ctx = 0;
  7537. WOLFSSL* ssl = 0;
  7538. ctx = wolfSSL_CTX_new(method);
  7539. if (ctx == NULL) {
  7540. // context creation failed
  7541. }
  7542. ssl = wolfSSL_new(ctx);
  7543. if (ssl == NULL) {
  7544. // ssl creation failed
  7545. }
  7546. ret = wolfSSL_UseTruncatedHMAC(ssl);
  7547. if (ret != 0) {
  7548. // truncated HMAC usage failed
  7549. }
  7550. \endcode
  7551. \sa wolfSSL_new
  7552. \sa wolfSSL_CTX_UseMaxFragment
  7553. */
  7554. int wolfSSL_UseTruncatedHMAC(WOLFSSL* ssl);
  7555. /*!
  7556. \brief 'ctx'パラメータに渡されたSSLコンテキストから作成されたSSLオブジェクトのためのTruncated HMAC。これは、切り捨てられたHMAC拡張機能がWolfSSLクライアントによってClientHelloで送信されることを意味します。
  7557. \return SSL_SUCCESS 成功時に返されます。
  7558. \return BAD_FUNC_ARG 次のいずれかの場合に返されるエラーです.CTXはNULL
  7559. \return MEMORY_E 十分なメモリがないときにエラーが返されます。
  7560. _Example_
  7561. \code
  7562. int ret = 0;
  7563. WOLFSSL_CTX* ctx = 0;
  7564. ctx = wolfSSL_CTX_new(method);
  7565. if (ctx == NULL) {
  7566. // context creation failed
  7567. }
  7568. ret = wolfSSL_CTX_UseTruncatedHMAC(ctx);
  7569. if (ret != 0) {
  7570. // truncated HMAC usage failed
  7571. }
  7572. \endcode
  7573. \sa wolfSSL_CTX_new
  7574. \sa wolfSSL_UseMaxFragment
  7575. */
  7576. int wolfSSL_CTX_UseTruncatedHMAC(WOLFSSL_CTX* ctx);
  7577. /*!
  7578. \brief OCSPで提示された証明書失効チェックのコストを下げます。
  7579. \return SSL_SUCCESS tlsx_usecertificateStatusRequestがエラーなしで実行された場合に返されます。
  7580. \return MEMORY_E メモリの割り当てにエラーがある場合に返されます。
  7581. \return BAD_FUNC_ARG NULLまたはその他の点では、関数に渡された値が渡される引数がある場合に返されます。
  7582. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  7583. \param status_type tlsx_usecertificateSrequest()に渡され、CertificateStatusRequest構造体に格納されているバイトタイプ。
  7584. _Example_
  7585. \code
  7586. WOLFSSL* ssl = wolfSSL_new(ctx);
  7587. if (wolfSSL_UseOCSPStapling(ssl, WOLFSSL_CSR2_OCSP,
  7588. WOLFSSL_CSR2_OCSP_USE_NONCE) != SSL_SUCCESS){
  7589. // Failed case.
  7590. }
  7591. \endcode
  7592. \sa TLSX_UseCertificateStatusRequest
  7593. \sa wolfSSL_CTX_UseOCSPStapling
  7594. */
  7595. int wolfSSL_UseOCSPStapling(WOLFSSL* ssl,
  7596. unsigned char status_type, unsigned char options);
  7597. /*!
  7598. \brief
  7599. \return SSL_SUCCESS 関数とサブルーチンがエラーなしで実行された場合に返されます。
  7600. \return BAD_FUNC_ARG 未解決の値がサブルーチンに渡された場合、WOLFSSL_CTX構造体がNULLまたはそうでない場合に返されます。
  7601. \return MEMORY_E 関数またはサブルーチンがメモリを正しく割り振ることができなかった場合に返されます。
  7602. \param ctx wolfSSL_CTX_new()を使用して作成されたWOLFSSL_CTX構造体へのポインタ。
  7603. \param status_type tlsx_usecertificateSrequest()に渡され、CertificateStatusRequest構造体に格納されているバイトタイプ。
  7604. _Example_
  7605. \code
  7606. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( method );
  7607. WOLFSSL* ssl = wolfSSL_new(ctx);
  7608. byte statusRequest = 0; // Initialize status request
  7609. switch(statusRequest){
  7610. case WOLFSSL_CSR_OCSP:
  7611. if(wolfSSL_CTX_UseOCSPStapling(ssl->ctx, WOLFSSL_CSR_OCSP,
  7612. WOLF_CSR_OCSP_USE_NONCE) != SSL_SUCCESS){
  7613. // UseCertificateStatusRequest failed
  7614. }
  7615. // Continue switch cases
  7616. \endcode
  7617. \sa wolfSSL_UseOCSPStaplingV2
  7618. \sa wolfSSL_UseOCSPStapling
  7619. \sa TLSX_UseCertificateStatusRequest
  7620. */
  7621. int wolfSSL_CTX_UseOCSPStapling(WOLFSSL_CTX* ctx,
  7622. unsigned char status_type, unsigned char options);
  7623. /*!
  7624. \brief
  7625. \return SSL_SUCCESS - 関数とサブルーチンがエラーなしで実行された場合に返されます。
  7626. \return MEMORY_E - メモリエラーの割り当てがあった場合に返されます。
  7627. \return BAD_FUNC_ARG - NULLまたはそれ以外の場合は解読されていない引数が関数またはサブルーチンに渡された場合に返されます。
  7628. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  7629. \param status_type OCSPステータスタイプをロードするバイトタイプ。
  7630. _Example_
  7631. \code
  7632. WOLFSSL* ssl = wolfSSL_new(ctx);
  7633. ...
  7634. if (wolfSSL_UseOCSPStaplingV2(ssl, WOLFSSL_CSR2_OCSP_MULTI, 0) != SSL_SUCCESS){
  7635. // Did not execute properly. Failure case code block.
  7636. }
  7637. \endcode
  7638. \sa TLSX_UseCertificatStatusRequestV2
  7639. \sa wolfSSL_SNI_SetOptions
  7640. \sa wolfSSL_CTX_SNI_SetOptions
  7641. */
  7642. int wolfSSL_UseOCSPStaplingV2(WOLFSSL* ssl,
  7643. unsigned char status_type, unsigned char options);
  7644. /*!
  7645. \brief OCSPステイプルのために。
  7646. \return SSL_SUCCESS 関数とサブルーチンがエラーなしで実行された場合。
  7647. \return BAD_FUNC_ARG WOLFSSL_CTX構造がnullの場合、または側数変数がクライアント側ではない場合に返されます。
  7648. \return MEMORY_E メモリの割り当てが失敗した場合に返されます。
  7649. \param ctx wolfSSL_CTX_new()を使用して作成されたWOLFSSL_CTX構造体へのポインタ。
  7650. \param status_type CertificatStatusRequest構造体にあるバイトタイプで、wolfssl_csr2_ocspまたはwolfssl_csr2_ocsp_multiでなければなりません。
  7651. _Example_
  7652. \code
  7653. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
  7654. byte status_type;
  7655. byte options;
  7656. ...
  7657. if(wolfSSL_CTX_UseOCSPStaplingV2(ctx, status_type, options); != SSL_SUCCESS){
  7658. // Failure case.
  7659. }
  7660. \endcode
  7661. \sa TLSX_UseCertificateStatusRequestV2
  7662. \sa wc_RNG_GenerateBlock
  7663. \sa TLSX_Push
  7664. */
  7665. int wolfSSL_CTX_UseOCSPStaplingV2(WOLFSSL_CTX* ctx,
  7666. unsigned char status_type, unsigned char options);
  7667. /*!
  7668. \brief サポートされている楕円曲線拡張子は、 'SSL'パラメータに渡されたSSLオブジェクトでサポートされています。これは、サポートされているカーブがWolfSSLクライアントによってClientHelloで送信されることを意味します。この機能は複数の曲線を有効にするために複数の時間と呼ぶことができます。
  7669. \return SSL_SUCCESS 成功時に返されます。
  7670. \return BAD_FUNC_ARG 次のいずれかの場合に返されるエラーです.SSLはNULLです。名前は未知の値です。(下記参照)
  7671. \return MEMORY_E 十分なメモリがないときにエラーが返されます。
  7672. \param ssl wolfSSL_new()で作成されたSSLオブジェクトへのポインタ。
  7673. _Example_
  7674. \code
  7675. int ret = 0;
  7676. WOLFSSL_CTX* ctx = 0;
  7677. WOLFSSL* ssl = 0;
  7678. ctx = wolfSSL_CTX_new(method);
  7679. if (ctx == NULL) {
  7680. // context creation failed
  7681. }
  7682. ssl = wolfSSL_new(ctx);
  7683. if (ssl == NULL) {
  7684. // ssl creation failed
  7685. }
  7686. ret = wolfSSL_UseSupportedCurve(ssl, WOLFSSL_ECC_SECP256R1);
  7687. if (ret != 0) {
  7688. // Elliptic Curve Extension usage failed
  7689. }
  7690. \endcode
  7691. \sa wolfSSL_CTX_new
  7692. \sa wolfSSL_CTX_UseSupportedCurve
  7693. */
  7694. int wolfSSL_UseSupportedCurve(WOLFSSL* ssl, word16 name);
  7695. /*!
  7696. \brief サポートされている楕円曲線は、 'ctx'パラメータに渡されたSSLコンテキストから作成されたSSLオブジェクトの拡張子です。これは、サポートされているカーブがWolfSSLクライアントによってClientHelloで送信されることを意味します。この機能は複数の曲線を有効にするために複数の時間と呼ぶことができます。
  7697. \return SSL_SUCCESS 成功時に返されます。
  7698. \return BAD_FUNC_ARG 次のいずれかの場合に返されるエラーです.CTXはNULL、名前は未知の値です。(下記参照)
  7699. \return MEMORY_E 十分なメモリがないときにエラーが返されます。
  7700. \param ctx wolfSSL_CTX_new()で作成されたSSLコンテキストへのポインタ。
  7701. _Example_
  7702. \code
  7703. int ret = 0;
  7704. WOLFSSL_CTX* ctx = 0;
  7705. ctx = wolfSSL_CTX_new(method);
  7706. if (ctx == NULL) {
  7707. // context creation failed
  7708. }
  7709. ret = wolfSSL_CTX_UseSupportedCurve(ctx, WOLFSSL_ECC_SECP256R1);
  7710. if (ret != 0) {
  7711. // Elliptic Curve Extension usage failed
  7712. }
  7713. \endcode
  7714. \sa wolfSSL_CTX_new
  7715. \sa wolfSSL_UseSupportedCurve
  7716. */
  7717. int wolfSSL_CTX_UseSupportedCurve(WOLFSSL_CTX* ctx,
  7718. word16 name);
  7719. /*!
  7720. \ingroup IO
  7721. \brief この関数は、供給されたWOLFSSL構造の安全な再交渉を強制します。これはお勧めできません。
  7722. \return SSL_SUCCESS 安全な再ネゴシエーションを正常に設定します。
  7723. \return BAD_FUNC_ARG sslがNULLの場合、エラーを返します。
  7724. \return MEMORY_E 安全な再交渉のためにメモリを割り当てることができない場合、エラーを返します。
  7725. _Example_
  7726. \code
  7727. wolfSSL_Init();
  7728. WOLFSSL_CTX* ctx;
  7729. WOLFSSL* ssl;
  7730. WOLFSSL_METHOD method = // Some wolfSSL method
  7731. ctx = wolfSSL_CTX_new(method);
  7732. ssl = wolfSSL_new(ctx);
  7733. if(wolfSSL_UseSecureRenegotiation(ssl) != SSL_SUCCESS)
  7734. {
  7735. // Error setting secure renegotiation
  7736. }
  7737. \endcode
  7738. \sa TLSX_Find
  7739. \sa TLSX_UseSecureRenegotiation
  7740. */
  7741. int wolfSSL_UseSecureRenegotiation(WOLFSSL* ssl);
  7742. /*!
  7743. \ingroup IO
  7744. \brief この関数は安全な再交渉ハンドシェイクを実行します。これは、WolfSSLがこの機能を妨げるように強制されます。
  7745. \return SSL_SUCCESS 関数がエラーなしで実行された場合に返されます。
  7746. \return BAD_FUNC_ARG wolfssl構造がnullまたはそうでなければ、許容できない引数がサブルーチンに渡された場合に返されます。
  7747. \return SECURE_RENEGOTIATION_E ハンドシェイクを再ネゴシエーションすることにエラーが発生した場合に返されます。
  7748. \return SSL_FATAL_ERROR サーバーまたはクライアント構成にエラーが発生した場合は、再ネゴシエーションが完了できなかった場合に返されます。wolfssl_negotiate()を参照してください。
  7749. _Example_
  7750. \code
  7751. WOLFSSL* ssl = wolfSSL_new(ctx);
  7752. ...
  7753. if(wolfSSL_Rehandshake(ssl) != SSL_SUCCESS){
  7754. // There was an error and the rehandshake is not successful.
  7755. }
  7756. \endcode
  7757. \sa wolfSSL_negotiate
  7758. \sa wc_InitSha512
  7759. \sa wc_InitSha384
  7760. \sa wc_InitSha256
  7761. \sa wc_InitSha
  7762. \sa wc_InitMd5
  7763. */
  7764. int wolfSSL_Rehandshake(WOLFSSL* ssl);
  7765. /*!
  7766. \ingroup IO
  7767. \brief セッションチケットを使用するようにWolfSSL構造を強制します。定数hous_session_ticketを定義し、定数NO_WOLFSSL_CLIENTをこの関数を使用するように定義しないでください。
  7768. \return SSL_SUCCESS セッションチケットを使用したセットに成功しました。
  7769. \return BAD_FUNC_ARG sslがNULLの場合に返されます。
  7770. \return MEMORY_E セッションチケットを設定するためのメモリの割り当て中にエラーが発生しました。
  7771. _Example_
  7772. \code
  7773. wolfSSL_Init();
  7774. WOLFSSL_CTX* ctx;
  7775. WOLFSSL* ssl;
  7776. WOLFSSL_METHOD method = // Some wolfSSL method
  7777. ctx = wolfSSL_CTX_new(method);
  7778. ssl = wolfSSL_new(ctx);
  7779. if(wolfSSL_UseSessionTicket(ssl) != SSL_SUCCESS)
  7780. {
  7781. // Error setting session ticket
  7782. }
  7783. \endcode
  7784. \sa TLSX_UseSessionTicket
  7785. */
  7786. int wolfSSL_UseSessionTicket(WOLFSSL* ssl);
  7787. /*!
  7788. \ingroup Setup
  7789. \brief この関数は、セッションチケットを使用するようにWolfSSLコンテキストを設定します。
  7790. \return SSL_SUCCESS 関数は正常に実行されます。
  7791. \return BAD_FUNC_ARG CTXがNULLの場合に返されます。
  7792. \return MEMORY_E 内部関数内のメモリの割り当て中にエラーが発生しました。
  7793. _Example_
  7794. \code
  7795. wolfSSL_Init();
  7796. WOLFSSL_CTX* ctx;
  7797. WOLFSSL_METHOD method = // Some wolfSSL method ;
  7798. ctx = wolfSSL_CTX_new(method);
  7799. if(wolfSSL_CTX_UseSessionTicket(ctx) != SSL_SUCCESS)
  7800. {
  7801. // Error setting session ticket
  7802. }
  7803. \endcode
  7804. \sa TLSX_UseSessionTicket
  7805. */
  7806. int wolfSSL_CTX_UseSessionTicket(WOLFSSL_CTX* ctx);
  7807. /*!
  7808. \ingroup IO
  7809. \brief この機能は、セッション構造のチケットメンバーをバッファにコピーします。
  7810. \return SSL_SUCCESS 関数がエラーなしで実行された場合に返されます。
  7811. \return BAD_FUNC_ARG 引数の1つがNULLの場合、またはbufsz引数が0の場合に返されます。
  7812. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  7813. \param buf メモリバッファを表すバイトポインタ。
  7814. _Example_
  7815. \code
  7816. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
  7817. WOLFSSL* ssl = wolfSSL_new(ctx);
  7818. byte* buf;
  7819. word32 bufSz; // Initialize with buf size
  7820. if(wolfSSL_get_SessionTicket(ssl, buf, bufSz) <= 0){
  7821. // Nothing was written to the buffer
  7822. } else {
  7823. // the buffer holds the content from ssl->session->ticket
  7824. }
  7825. \endcode
  7826. \sa wolfSSL_UseSessionTicket
  7827. \sa wolfSSL_set_SessionTicket
  7828. */
  7829. int wolfSSL_get_SessionTicket(WOLFSSL* ssl, unsigned char* buf, word32* bufSz);
  7830. /*!
  7831. \ingroup IO
  7832. \brief この関数は、WolfSSL構造体内のwolfssl_session構造体のチケットメンバーを設定します。関数に渡されたバッファはメモリにコピーされます。
  7833. \return SSL_SUCCESS 機能の実行に成功したことに戻ります。関数はエラーなしで返されました。
  7834. \return BAD_FUNC_ARG WolfSSL構造がNULLの場合に返されます。BUF引数がNULLの場合は、これはスローされますが、bufsz引数はゼロではありません。
  7835. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  7836. \param buf セッション構造のチケットメンバーにロードされるバイトポインタ。
  7837. _Example_
  7838. \code
  7839. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
  7840. WOLFSSL* ssl = wolfSSL_new(ctx);
  7841. byte* buffer; // File to load
  7842. word32 bufSz;
  7843. ...
  7844. if(wolfSSL_KeepArrays(ssl, buffer, bufSz) != SSL_SUCCESS){
  7845. // There was an error loading the buffer to memory.
  7846. }
  7847. \endcode
  7848. \sa wolfSSL_set_SessionTicket_cb
  7849. */
  7850. int wolfSSL_set_SessionTicket(WOLFSSL* ssl, const unsigned char* buf,
  7851. word32 bufSz);
  7852. /*!
  7853. \brief CallbackSessionTicketは、int(* callbacksessionTicket)(wolfssl *、const unsigned char *、int、void *)の関数ポインタです。
  7854. \return SSL_SUCCESS 関数がエラーなしで実行された場合に返されます。
  7855. \return BAD_FUNC_ARG WolfSSL構造がNULLの場合に返されます。
  7856. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  7857. \param cb Type CallbackSessionTicketへの関数ポインタ。
  7858. _Example_
  7859. \code
  7860. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( method );
  7861. WOLFSSL* ssl = wolfSSL_new(ctx);
  7862. int sessionTicketCB(WOLFSSL* ssl, const unsigned char* ticket, int ticketSz,
  7863. void* ctx){ … }
  7864. wolfSSL_set_SessionTicket_cb(ssl, sessionTicketCB, (void*)”initial session”);
  7865. \endcode
  7866. \sa wolfSSL_set_SessionTicket
  7867. \sa CallbackSessionTicket
  7868. \sa sessionTicketCB
  7869. */
  7870. int wolfSSL_set_SessionTicket_cb(WOLFSSL* ssl,
  7871. CallbackSessionTicket cb, void* ctx);
  7872. /*!
  7873. \brief この関数はTLS1.3ハンドシェークが確立したあとでセッションチケットを送信します。
  7874. \return WOLFSSL_SUCCESS セッションチケットが送信された場合に返されます。
  7875. \return BAD_FUNC_ARG WOLFSSL構造体がNULL,あるいはTLS v1.3を使用しない場合に返されます。
  7876. \return SIDE_ERROR returned サーバー側でない場合に返されます。
  7877. \return NOT_READY_ERROR ハンドシェークが完了しない場合に返されます。
  7878. \return WOLFSSL_FATAL_ERROR メッセージの生成か送信に失敗した際に返されます。
  7879. \param ssl wolfSSL_new()を使って生成されたWOLFSSL構造体へのポインタ。
  7880. _Example_
  7881. \code
  7882. int ret;
  7883. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( method );
  7884. WOLFSSL* ssl = wolfSSL_new(ctx);
  7885. ret = wolfSSL_send_SessionTicket(ssl);
  7886. if (ret != WOLFSSL_SUCCESS) {
  7887. // New session ticket not sent.
  7888. }
  7889. \endcode
  7890. \sa wolfSSL_get_SessionTicket
  7891. \sa CallbackSessionTicket
  7892. \sa sessionTicketCB
  7893. */
  7894. int wolfSSL_send_SessionTicket(WOLFSSL* ssl);
  7895. /*!
  7896. \brief RFC 5077で指定されているセッションチケットをサポートするためのサーバーが。
  7897. \return SSL_SUCCESS セッションを正常に設定すると返されます。
  7898. \return BAD_FUNC_ARG 失敗した場合に返されます。これは、無効な引数を関数に渡すことによって発生します。
  7899. \param ctx wolfSSL_CTX_new()で作成されたWOLFSSL_CTXオブジェクトへのポインタ。
  7900. \param cb セッションチケットを暗号化/復号化するためのユーザーコールバック関数
  7901. \param ssl(Callback) wolfSSL_new()で作成されたWolfSSLオブジェクトへのポインタ
  7902. \param key_name(Callback) このチケットコンテキストの一意のキー名はランダムに生成されるべきです
  7903. \param iv(Callback) ユニークなIVこのチケットの場合、最大128ビット、ランダムに生成されるべきです
  7904. \param mac(Callback) このチケットの最大256ビットMAC
  7905. \param enc(Callback) この暗号化パラメータがtrueの場合、ユーザーはキーコード、IV、Macを記入し、チケットを長さのインレルの範囲内に暗号化し、結果として生じる出力長を* outreenに設定する必要があります。 wolfssl_ticket_ret_okを返す暗号化が成功したことをWolfSSLに指示します。この暗号化パラメータがfalseの場合、key_name、iv、およびmacを使用して、リングインレーンの範囲内のチケットの復号化を実行する必要があります。結果の復号長は* outreenに設定する必要があります。 wolfssl_ticket_ret_okを返すと、復号化されたチケットの使用を続行するようにWolfSSLに指示します。 wolfssl_ticket_ret_createを返すと、復号化されたチケットを使用するだけでなく、クライアントに送信するための新しいものを生成するように指示し、最近ロールされている場合に役立つ、フルハンドシェイクを強制したくない。 wolfssl_ticket_ret_rejectを返すと、WolfSSLにこのチケットを拒否し、フルハンドシェイクを実行し、通常のセッション再開のための新しい標準セッションIDを作成します。 wolfssl_ticket_ret_fatalを返すと、致命的なエラーで接続の試みを終了するようにWolfSSLに指示します。
  7906. \param ticket(Callback) 暗号化チケットの入出力バッファ。ENCパラメータを参照してください
  7907. \param inLen(Callback) チケットパラメータの入力長
  7908. \param outLen(Callback) チケットパラメータの結果の出力長。コールバックoutlenを入力すると、チケットバッファで使用可能な最大サイズが表示されます。
  7909. _Example_
  7910. \code
  7911. See wolfssl/test.h myTicketEncCb() used by the example
  7912. server and example echoserver.
  7913. \endcode
  7914. \sa wolfSSL_CTX_set_TicketHint
  7915. \sa wolfSSL_CTX_set_TicketEncCtx
  7916. */
  7917. int wolfSSL_CTX_set_TicketEncCb(WOLFSSL_CTX* ctx,
  7918. SessionTicketEncCb);
  7919. /*!
  7920. \brief サーバーサイドの使用のために。
  7921. \return SSL_SUCCESS セッションを正常に設定すると返されます。
  7922. \return BAD_FUNC_ARG 失敗した場合に返されます。これは、無効な引数を関数に渡すことによって発生します。
  7923. \param ctx wolfSSL_CTX_new()で作成されたWOLFSSL_CTXオブジェクトへのポインタ。
  7924. _Example_
  7925. \code
  7926. none
  7927. \endcode
  7928. \sa wolfSSL_CTX_set_TicketEncCb
  7929. */
  7930. int wolfSSL_CTX_set_TicketHint(WOLFSSL_CTX* ctx, int);
  7931. /*!
  7932. \brief 折り返し電話。サーバーサイドの使用のために。
  7933. \return SSL_SUCCESS セッションを正常に設定すると返されます。
  7934. \return BAD_FUNC_ARG 失敗した場合に返されます。これは、無効な引数を関数に渡すことによって発生します。
  7935. \param ctx wolfSSL_CTX_new()で作成されたWOLFSSL_CTXオブジェクトへのポインタ。
  7936. _Example_
  7937. \code
  7938. none
  7939. \endcode
  7940. \sa wolfSSL_CTX_set_TicketEncCb
  7941. */
  7942. int wolfSSL_CTX_set_TicketEncCtx(WOLFSSL_CTX* ctx, void*);
  7943. /*!
  7944. \brief 折り返し電話。サーバーサイドの使用のために。
  7945. \return userCtx セッションを正常に取得すると返されます。
  7946. \return NULL 失敗した場合に返されます。これは、無効な引数を関数に渡すことによって、またはユーザーコンテキストが設定されていないときに発生します。
  7947. _Example_
  7948. \code
  7949. none
  7950. \endcode
  7951. \sa wolfSSL_CTX_set_TicketEncCtx
  7952. */
  7953. void* wolfSSL_CTX_get_TicketEncCtx(WOLFSSL_CTX* ctx);
  7954. /*!
  7955. \brief この機能には、WolfSSL構造のHSDonectxメンバーが設定されています。
  7956. \return SSL_SUCCESS 関数がエラーなしで実行された場合に返されます。WolfSSL構造体のHSDONECBとHSDonectxメンバーが設定されています。
  7957. \return BAD_FUNC_ARG wolfssl構造体がNULLの場合に返されます。
  7958. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  7959. \param cb int(* HandshakedOneCB)(wolfssl *、void *)の署名を持つタイプHandshakedOneCBの関数ポインタ。
  7960. _Example_
  7961. \code
  7962. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( method );
  7963. WOLFSSL* ssl = wolfSSL_new(ctx);
  7964. int myHsDoneCb(WOLFSSL* ssl, void* user_ctx){
  7965. // callback function
  7966. }
  7967. wolfSSL_SetHsDoneCb(ssl, myHsDoneCb, NULL);
  7968. \endcode
  7969. \sa HandShakeDoneCb
  7970. */
  7971. int wolfSSL_SetHsDoneCb(WOLFSSL* ssl, HandShakeDoneCb cb, void* user_ctx);
  7972. /*!
  7973. \ingroup IO
  7974. \brief この関数はセッションから統計を印刷します。
  7975. \return SSL_SUCCESS 関数とサブルーチンがエラーなしで戻った場合に返されます。セッション統計は正常に取得され印刷されました。
  7976. \return BAD_FUNC_ARG サブルーチンwolfssl_get_session_stats()が許容できない引数に渡された場合に返されます。
  7977. \return BAD_MUTEX_E サブルーチンにミューテックスエラーがあった場合に返されます。
  7978. _Example_
  7979. \code
  7980. // You will need to have a session object to retrieve stats from.
  7981. if(wolfSSL_PrintSessionStats(void) != SSL_SUCCESS ){
  7982. // Did not print session stats
  7983. }
  7984. \endcode
  7985. \sa wolfSSL_get_session_stats
  7986. */
  7987. int wolfSSL_PrintSessionStats(void);
  7988. /*!
  7989. \ingroup IO
  7990. \brief この関数はセッションの統計を取得します。
  7991. \return SSL_SUCCESS 関数とサブルーチンがエラーなしで戻った場合に返されます。セッション統計は正常に取得され印刷されました。
  7992. \return BAD_FUNC_ARG サブルーチンwolfssl_get_session_stats()が許容できない引数に渡された場合に返されます。
  7993. \return BAD_MUTEX_E サブルーチンにミューテックスエラーがあった場合に返されます。
  7994. \param active 現在のセッションの合計を表すWord32ポインタ。
  7995. \param total 総セッションを表すWord32ポインタ。
  7996. \param peak ピークセッションを表すWord32ポインタ。
  7997. _Example_
  7998. \code
  7999. int wolfSSL_PrintSessionStats(void){
  8000. ret = wolfSSL_get_session_stats(&totalSessionsNow,
  8001. &totalSessionsSeen, &peak, &maxSessions);
  8002. return ret;
  8003. \endcode
  8004. \sa wolfSSL_PrintSessionStats
  8005. */
  8006. int wolfSSL_get_session_stats(unsigned int* active,
  8007. unsigned int* total,
  8008. unsigned int* peak,
  8009. unsigned int* maxSessions);
  8010. /*!
  8011. \ingroup TLS
  8012. \brief この関数はCRとSRの値をコピーしてからWC_PRF(疑似ランダム関数)に渡し、その値を返します。
  8013. \return 0 成功した
  8014. \return BUFFER_E バッファのサイズにエラーが発生した場合に返されます。
  8015. \return MEMORY_E サブルーチンが動的メモリを割り当てることができなかった場合に返されます。
  8016. \param ms マスターシークレットはアレイ構造に保持されています。
  8017. \param msLen マスターシークレットの長さ。
  8018. \param pms マスター前の秘密はアレイ構造に保持されています。
  8019. \param pmsLen マスタープレマスターシークレットの長さ。
  8020. \param cr クライアントのランダム
  8021. \param sr サーバーのランダムです。
  8022. \param tls1_2 バージョンが少なくともTLSバージョン1.2であることを意味します。
  8023. _Example_
  8024. \code
  8025. WOLFSSL* ssl;
  8026. called in MakeTlsMasterSecret and retrieves the necessary
  8027. information as follows:
  8028. int MakeTlsMasterSecret(WOLFSSL* ssl){
  8029. int ret;
  8030. ret = wolfSSL_makeTlsMasterSecret(ssl->arrays->masterSecret, SECRET_LEN,
  8031. ssl->arrays->preMasterSecret, ssl->arrays->preMasterSz,
  8032. ssl->arrays->clientRandom, ssl->arrays->serverRandom,
  8033. IsAtLeastTLSv1_2(ssl), ssl->specs.mac_algorithm);
  8034. return ret;
  8035. }
  8036. \endcode
  8037. \sa wc_PRF
  8038. \sa MakeTlsMasterSecret
  8039. */
  8040. int wolfSSL_MakeTlsMasterSecret(unsigned char* ms, word32 msLen,
  8041. const unsigned char* pms, word32 pmsLen,
  8042. const unsigned char* cr, const unsigned char* sr,
  8043. int tls1_2, int hash_type);
  8044. /*!
  8045. \ingroup CertsKeys
  8046. \brief TLSキーを導き出すための外部のラッパー。
  8047. \return 0 成功に戻りました。
  8048. \return BUFFER_E LABLENとSEADLENの合計(合計サイズを計算)が最大サイズを超えると返されます。
  8049. \return MEMORY_E メモリの割り当てが失敗した場合に返されます。
  8050. \param key_data DeriveTlSkeysに割り当てられ、最終ハッシュを保持するためにWC_PRFに渡されたバイトポインタ。
  8051. \param keyLen WOLFSSL構造体のスペックメンバーからのDerivetlskeysで派生したWord32タイプ。
  8052. \param ms WolfSSL構造内でアレイ構造に保持されているマスターシークレットを保持する定数ポインタ型。
  8053. \param msLen 列挙された定義で、マスターシークレットの長さを保持するWord32タイプ。
  8054. \param sr WOLFSSL構造内の配列構造のServerRandomメンバーへの定数バイトポインタ。
  8055. \param cr WolfSSL構造内の配列構造のClientRandomメンバーへの定数バイトポインタ。
  8056. \param tls1_2 ISATLEASTLSV1_2()から返された整数型。
  8057. _Example_
  8058. \code
  8059. int DeriveTlsKeys(WOLFSSL* ssl){
  8060. int ret;
  8061. ret = wolfSSL_DeriveTlsKeys(key_data, length, ssl->arrays->masterSecret,
  8062. SECRET_LEN, ssl->arrays->clientRandom,
  8063. IsAtLeastTLSv1_2(ssl), ssl->specs.mac_algorithm);
  8064. }
  8065. \endcode
  8066. \sa wc_PRF
  8067. \sa DeriveTlsKeys
  8068. \sa IsAtLeastTLSv1_2
  8069. */
  8070. int wolfSSL_DeriveTlsKeys(unsigned char* key_data, word32 keyLen,
  8071. const unsigned char* ms, word32 msLen,
  8072. const unsigned char* sr, const unsigned char* cr,
  8073. int tls1_2, int hash_type);
  8074. /*!
  8075. \brief ハンドシェイクコールバックが設定されます。これは、デバッガが利用できず、スニッフィングが実用的ではない場合に、サポートをデバッグするための組み込みシステムで役立ちます。ハンドシェイクエラーが発生したか否かが呼び出されます。SSLパケットの最大数が既知であるため、動的メモリは使用されません。パケット名をPacketNames []でアクセスできます。接続拡張機能は、タイムアウト値とともにタイムアウトコールバックを設定することもできます。これは、ユーザーがTCPスタックをタイムアウトするのを待ったくない場合に便利です。この拡張子は、コールバックのどちらか、またはどちらのコールバックも呼び出されません。
  8076. \return SSL_SUCCESS 成功時に返されます。
  8077. \return GETTIME_ERROR gettimeofday()がエラーを検出した場合、返されます。
  8078. \return SETITIMER_ERROR setItimer()がエラーを検出した場合、返されます。
  8079. \return SIGACT_ERROR sigAction()がエラーを検出した場合、返されます。
  8080. \return SSL_FATAL_ERROR 基になるssl_connect()呼び出しがエラーを検出した場合に返されます。
  8081. _Example_
  8082. \code
  8083. none
  8084. \endcode
  8085. \sa wolfSSL_accept_ex
  8086. */
  8087. int wolfSSL_connect_ex(WOLFSSL* ssl, HandShakeCallBack hsCb,
  8088. TimeoutCallBack toCb, WOLFSSL_TIMEVAL timeout);
  8089. /*!
  8090. \brief 設定する。これは、デバッガが利用できず、スニッフィングが実用的ではない場合に、サポートをデバッグするための組み込みシステムで役立ちます。ハンドシェイクエラーが発生したか否かが呼び出されます。SSLパケットの最大数が既知であるため、動的メモリは使用されません。パケット名をPacketNames []でアクセスできます。接続拡張機能は、タイムアウト値とともにタイムアウトコールバックを設定することもできます。これは、ユーザーがTCPスタックをタイムアウトするのを待ったくない場合に便利です。この拡張子は、コールバックのどちらか、またはどちらのコールバックも呼び出されません。
  8091. \return SSL_SUCCESS 成功時に返されます。
  8092. \return GETTIME_ERROR gettimeofday()がエラーを検出した場合、返されます。
  8093. \return SETITIMER_ERROR setItimer()がエラーを検出した場合、返されます。
  8094. \return SIGACT_ERROR sigAction()がエラーを検出した場合、返されます。
  8095. \return SSL_FATAL_ERROR 基礎となるssl_accept()呼び出しがエラーを検出した場合に返されます。
  8096. _Example_
  8097. \code
  8098. none
  8099. \endcode
  8100. \sa wolfSSL_connect_ex
  8101. */
  8102. int wolfSSL_accept_ex(WOLFSSL* ssl, HandShakeCallBacki hsCb,
  8103. TimeoutCallBack toCb, WOLFSSL_TIMEVAL timeout);
  8104. /*!
  8105. \ingroup IO
  8106. \brief これはBIOの内部ファイルポインタを設定するために使用されます。
  8107. \return SSL_SUCCESS ファイルポインタを正常に設定します。
  8108. \return SSL_FAILURE エラーケースに遭遇した場合
  8109. \param bio ペアを設定するためのWOLFSSL_BIO構造体。
  8110. \param fp バイオで設定するファイルポインタ。
  8111. _Example_
  8112. \code
  8113. WOLFSSL_BIO* bio;
  8114. XFILE fp;
  8115. int ret;
  8116. bio = wolfSSL_BIO_new(wolfSSL_BIO_s_file());
  8117. ret = wolfSSL_BIO_set_fp(bio, fp, BIO_CLOSE);
  8118. // check ret value
  8119. \endcode
  8120. \sa wolfSSL_BIO_new
  8121. \sa wolfSSL_BIO_s_mem
  8122. \sa wolfSSL_BIO_get_fp
  8123. \sa wolfSSL_BIO_free
  8124. */
  8125. long wolfSSL_BIO_set_fp(WOLFSSL_BIO *bio, XFILE fp, int c);
  8126. /*!
  8127. \ingroup IO
  8128. \brief この関数は、 \brief これは、BIOの内部ファイルポインタを取得するために使用されます。
  8129. \return SSL_SUCCESS ファイルポインタを正常に取得します。
  8130. \return SSL_FAILURE エラーケースに遭遇した場合
  8131. \param bio ペアを設定するためのWOLFSSL_BIO構造体。
  8132. _Example_
  8133. \code
  8134. WOLFSSL_BIO* bio;
  8135. XFILE fp;
  8136. int ret;
  8137. bio = wolfSSL_BIO_new(wolfSSL_BIO_s_file());
  8138. ret = wolfSSL_BIO_get_fp(bio, &fp);
  8139. // check ret value
  8140. \endcode
  8141. \sa wolfSSL_BIO_new
  8142. \sa wolfSSL_BIO_s_mem
  8143. \sa wolfSSL_BIO_set_fp
  8144. \sa wolfSSL_BIO_free
  8145. */
  8146. long wolfSSL_BIO_get_fp(WOLFSSL_BIO *bio, XFILE* fp);
  8147. /*!
  8148. \ingroup Setup
  8149. \brief この関数は、秘密鍵が使用されている証明書との一致であることを確認します。
  8150. \return SSL_SUCCESS うまく一致します。
  8151. \return SSL_FAILURE エラーケースに遭遇した場合
  8152. \return <0 ssl_failure以外のすべてのエラーケースは負の値です。
  8153. _Example_
  8154. \code
  8155. WOLFSSL* ssl;
  8156. int ret;
  8157. // create and set up ssl
  8158. ret = wolfSSL_check_private_key(ssl);
  8159. // check ret value
  8160. \endcode
  8161. \sa wolfSSL_new
  8162. \sa wolfSSL_free
  8163. */
  8164. int wolfSSL_check_private_key(const WOLFSSL* ssl);
  8165. /*!
  8166. \ingroup CertsKeys
  8167. \brief この機能は、渡されたNID値に一致する拡張索引を探して返します。
  8168. \return >= 0拡張インデックスが成功した場合に返されます。
  8169. \return -1 拡張が見つからないかエラーが発生した場合
  8170. \param x509 拡張のために解析する証明書。
  8171. \param nid 見つかる拡張OID。
  8172. _Example_
  8173. \code
  8174. const WOLFSSL_X509* x509;
  8175. int lastPos = -1;
  8176. int idx;
  8177. idx = wolfSSL_X509_get_ext_by_NID(x509, NID_basic_constraints, lastPos);
  8178. \endcode
  8179. */
  8180. int wolfSSL_X509_get_ext_by_NID(const WOLFSSL_X509* x509,
  8181. int nid, int lastPos);
  8182. /*!
  8183. \ingroup CertsKeys
  8184. \brief この関数は、渡されたNID値に合った拡張子を探して返します。
  8185. \return pointer STACK_OF(wolfssl_asn1_object)ポインタが成功した場合に返されます。
  8186. \return NULL 拡張が見つからないかエラーが発生した場合
  8187. \param x509 拡張のために解析する証明書。
  8188. \param nid 見つかる拡張OID。
  8189. \param c not nullが複数の拡張子に-2に設定されていない場合は-1が見つかりませんでした。
  8190. _Example_
  8191. \code
  8192. const WOLFSSL_X509* x509;
  8193. int c;
  8194. int idx = 0;
  8195. STACK_OF(WOLFSSL_ASN1_OBJECT)* sk;
  8196. sk = wolfSSL_X509_get_ext_d2i(x509, NID_basic_constraints, &c, &idx);
  8197. //check sk for NULL and then use it. sk needs freed after done.
  8198. \endcode
  8199. \sa wolfSSL_sk_ASN1_OBJECT_free
  8200. */
  8201. void* wolfSSL_X509_get_ext_d2i(const WOLFSSL_X509* x509,
  8202. int nid, int* c, int* idx);
  8203. /*!
  8204. \ingroup CertsKeys
  8205. \brief この関数はDER証明書のハッシュを返します。
  8206. \return SSL_SUCCESS ハッシュの作成に成功しました。
  8207. \return SSL_FAILURE 不良入力または失敗したハッシュに戻りました。
  8208. \param x509 ハッシュを得るための証明書。
  8209. \param digest 使用するハッシュアルゴリズム
  8210. \param buf ハッシュを保持するためのバッファ。
  8211. _Example_
  8212. \code
  8213. WOLFSSL_X509* x509;
  8214. unsigned char buffer[64];
  8215. unsigned int bufferSz;
  8216. int ret;
  8217. ret = wolfSSL_X509_digest(x509, wolfSSL_EVP_sha256(), buffer, &bufferSz);
  8218. //check ret value
  8219. \endcode
  8220. \sa none
  8221. */
  8222. int wolfSSL_X509_digest(const WOLFSSL_X509* x509,
  8223. const WOLFSSL_EVP_MD* digest, unsigned char* buf, unsigned int* len);
  8224. /*!
  8225. \ingroup Setup
  8226. \brief ハンドシェイク中に使用するために、WolfSSL構造の証明書を設定するために使用されます。
  8227. \return SSL_SUCCESS 設定の成功した引数について。
  8228. \return SSL_FAILURE NULL引数が渡された場合。
  8229. \param ssl 証明書を設定するためのWolfSSL構造。
  8230. _Example_
  8231. \code WOLFSSL* ssl;
  8232. WOLFSSL_X509* x509
  8233. int ret;
  8234. // create ssl object and x509
  8235. ret = wolfSSL_use_certificate(ssl, x509);
  8236. // check ret value
  8237. \endcode
  8238. \sa wolfSSL_new
  8239. \sa wolfSSL_free
  8240. */
  8241. int wolfSSL_use_certificate(WOLFSSL* ssl, WOLFSSL_X509* x509);
  8242. /*!
  8243. \ingroup Setup
  8244. \biiこfは、この関数は、handshakeの間に使用するためにWolfSSL構造の証明書を設定するために使用されます。DERフォーマットバッファが予想されます。
  8245. \return SSL_SUCCESS 設定の成功した引数について。
  8246. \return SSL_FAILURE NULL引数が渡された場合。
  8247. \param ssl 証明書を設定するためのWolfSSL構造。
  8248. \param der 使用する証明書。
  8249. _Example_
  8250. \code
  8251. WOLFSSL* ssl;
  8252. unsigned char* der;
  8253. int derSz;
  8254. int ret;
  8255. // create ssl object and set DER variables
  8256. ret = wolfSSL_use_certificate_ASN1(ssl, der, derSz);
  8257. // check ret value
  8258. \endcode
  8259. \sa wolfSSL_new
  8260. \sa wolfSSL_free
  8261. */
  8262. int wolfSSL_use_certificate_ASN1(WOLFSSL* ssl, unsigned char* der,
  8263. int derSz);
  8264. /*!
  8265. \ingroup CertsKeys
  8266. \brief これはWolfSSL構造の秘密鍵を設定するために使用されます。
  8267. \return SSL_SUCCESS 設定の成功した引数について。
  8268. \return SSL_FAILURE NULL SSLが渡された場合。すべてのエラーケースは負の値になります。
  8269. \param ssl 引数を設定するためのWolfSSL構造。
  8270. _Example_
  8271. \code
  8272. WOLFSSL* ssl;
  8273. WOLFSSL_EVP_PKEY* pkey;
  8274. int ret;
  8275. // create ssl object and set up private key
  8276. ret = wolfSSL_use_PrivateKey(ssl, pkey);
  8277. // check ret value
  8278. \endcode
  8279. \sa wolfSSL_new
  8280. \sa wolfSSL_free
  8281. */
  8282. int wolfSSL_use_PrivateKey(WOLFSSL* ssl, WOLFSSL_EVP_PKEY* pkey);
  8283. /*!
  8284. \ingroup CertsKeys
  8285. \brief これはWolfSSL構造の秘密鍵を設定するために使用されます。DERフォーマットのキーバッファが予想されます。
  8286. \return SSL_SUCCESS 秘密鍵の構文解析と設定に成功した場合。
  8287. \return SSL_FAILURE NULL SSLが渡された場合。すべてのエラーケースは負の値になります。
  8288. \param pri 秘密鍵の種類。
  8289. \param ssl 引数を設定するためのWolfSSL構造。
  8290. \param der バッファー保持DERキー。
  8291. _Example_
  8292. \code
  8293. WOLFSSL* ssl;
  8294. unsigned char* pkey;
  8295. long pkeySz;
  8296. int ret;
  8297. // create ssl object and set up private key
  8298. ret = wolfSSL_use_PrivateKey_ASN1(1, ssl, pkey, pkeySz);
  8299. // check ret value
  8300. \endcode
  8301. \sa wolfSSL_new
  8302. \sa wolfSSL_free
  8303. \sa wolfSSL_use_PrivateKey
  8304. */
  8305. int wolfSSL_use_PrivateKey_ASN1(int pri, WOLFSSL* ssl,
  8306. unsigned char* der, long derSz);
  8307. /*!
  8308. \ingroup CertsKeys
  8309. \brief これはWolfSSL構造の秘密鍵を設定するために使用されます。DERフォーマットのRSAキーバッファが予想されます。
  8310. \return SSL_SUCCESS 秘密鍵の構文解析と設定に成功した場合。
  8311. \return SSL_FAILURE NULL SSLが渡された場合。すべてのエラーケースは負の値になります。
  8312. \param ssl 引数を設定するためのWolfSSL構造。
  8313. \param der バッファー保持DERキー。
  8314. _Example_
  8315. \code
  8316. WOLFSSL* ssl;
  8317. unsigned char* pkey;
  8318. long pkeySz;
  8319. int ret;
  8320. // create ssl object and set up RSA private key
  8321. ret = wolfSSL_use_RSAPrivateKey_ASN1(ssl, pkey, pkeySz);
  8322. // check ret value
  8323. \endcode
  8324. \sa wolfSSL_new
  8325. \sa wolfSSL_free
  8326. \sa wolfSSL_use_PrivateKey
  8327. */
  8328. int wolfSSL_use_RSAPrivateKey_ASN1(WOLFSSL* ssl, unsigned char* der,
  8329. long derSz);
  8330. /*!
  8331. \ingroup CertsKeys
  8332. \brief この関数は、DSAのパラメータを新しく作成されたWOLFSSL_DH構造体に重複しています。
  8333. \return WOLFSSL_DH 重複した場合はWolfSSL_DH構造体を返す場合
  8334. \return NULL 失敗すると
  8335. _Example_
  8336. \code
  8337. WOLFSSL_DH* dh;
  8338. WOLFSSL_DSA* dsa;
  8339. // set up dsa
  8340. dh = wolfSSL_DSA_dup_DH(dsa);
  8341. // check dh is not null
  8342. \endcode
  8343. \sa none
  8344. */
  8345. WOLFSSL_DH *wolfSSL_DSA_dup_DH(const WOLFSSL_DSA *r);
  8346. /*!
  8347. \ingroup Setup
  8348. \brief これはハンドシェイクを完了した後にマスターキーを取得するために使用されます。
  8349. \return >0 データの取得に成功した場合、0より大きい値を返します。
  8350. \return 0 ランダムなデータバッファまたはエラー状態が返されない場合は0
  8351. \return max 渡されたOUTSZが0の場合、必要な最大バッファサイズが返されます。
  8352. \param ses マスターシークレットバッファを取得するためのWolfSSL_SESSION構造。
  8353. \param out データを保持するためのバッファ。
  8354. _Example_
  8355. \code
  8356. WOLFSSL_SESSION ssl;
  8357. unsigned char* buffer;
  8358. size_t bufferSz;
  8359. size_t ret;
  8360. // complete handshake and get session structure
  8361. bufferSz = wolfSSL_SESSION_get_master_secret(ses, NULL, 0);
  8362. buffer = malloc(bufferSz);
  8363. ret = wolfSSL_SESSION_get_master_secret(ses, buffer, bufferSz);
  8364. // check ret value
  8365. \endcode
  8366. \sa wolfSSL_new
  8367. \sa wolfSSL_free
  8368. */
  8369. int wolfSSL_SESSION_get_master_key(const WOLFSSL_SESSION* ses,
  8370. unsigned char* out, int outSz);
  8371. /*!
  8372. \ingroup Setup
  8373. \brief これはマスター秘密鍵の長さを取得するために使用されます。
  8374. \return size マスターシークレットキーサイズを返します。
  8375. _Example_
  8376. \code
  8377. WOLFSSL_SESSION ssl;
  8378. unsigned char* buffer;
  8379. size_t bufferSz;
  8380. size_t ret;
  8381. // complete handshake and get session structure
  8382. bufferSz = wolfSSL_SESSION_get_master_secret_length(ses);
  8383. buffer = malloc(bufferSz);
  8384. // check ret value
  8385. \endcode
  8386. \sa wolfSSL_new
  8387. \sa wolfSSL_free
  8388. */
  8389. int wolfSSL_SESSION_get_master_key_length(const WOLFSSL_SESSION* ses);
  8390. /*!
  8391. \ingroup Setup
  8392. \bri f この関数は、れは、CTXのWOLFSSL_X509_STORE構造の設定機能です。
  8393. \return none 返品不可。
  8394. \param ctx Cert Storeポインタを設定するためのWolfSSL_CTX構造体へのポインタ。
  8395. _Example_
  8396. \code
  8397. WOLFSSL_CTX ctx;
  8398. WOLFSSL_X509_STORE* st;
  8399. // setup ctx and st
  8400. st = wolfSSL_CTX_set_cert_store(ctx, st);
  8401. //use st
  8402. \endcode
  8403. \sa wolfSSL_CTX_new
  8404. \sa wolfSSL_CTX_free
  8405. */
  8406. void wolfSSL_CTX_set_cert_store(WOLFSSL_CTX* ctx,
  8407. WOLFSSL_X509_STORE* str);
  8408. /*!
  8409. \ingroup CertsKeys
  8410. \brief この関数はBIOからDERバッファを取得し、それをWolfSSL_X509構造に変換します。
  8411. \return pointer 成功したwolfssl_x509構造ポインタを返します。
  8412. \return Null 失敗時にNULLを返します
  8413. \param bio DER証明書バッファを持つWOLFSSL_BIO構造体体へのポインタ。
  8414. _Example_
  8415. \code
  8416. WOLFSSL_BIO* bio;
  8417. WOLFSSL_X509* x509;
  8418. // load DER into bio
  8419. x509 = wolfSSL_d2i_X509_bio(bio, NULL);
  8420. Or
  8421. wolfSSL_d2i_X509_bio(bio, &x509);
  8422. // use x509 returned (check for NULL)
  8423. \endcode
  8424. \sa none
  8425. */
  8426. WOLFSSL_X509* wolfSSL_d2i_X509_bio(WOLFSSL_BIO* bio, WOLFSSL_X509** x509);
  8427. /*!
  8428. \ingroup Setup
  8429. \bri f この関数は、れは、CTXのWOLFSSL_X509_STORE構造のゲッター関数です。
  8430. \return WOLFSSL_X509_STORE* ポインタを正常に入手します。
  8431. \return NULL NULL引数が渡された場合に返されます。
  8432. _Example_
  8433. \code
  8434. WOLFSSL_CTX ctx;
  8435. WOLFSSL_X509_STORE* st;
  8436. // setup ctx
  8437. st = wolfSSL_CTX_get_cert_store(ctx);
  8438. //use st
  8439. \endcode
  8440. \sa wolfSSL_CTX_new
  8441. \sa wolfSSL_CTX_free
  8442. \sa wolfSSL_CTX_set_cert_store
  8443. */
  8444. WOLFSSL_X509_STORE* wolfSSL_CTX_get_cert_store(WOLFSSL_CTX* ctx);
  8445. /*!
  8446. \ingroup IO
  8447. \brief 保留中のバイト数を読み取る数を取得します。BIOタイプがBIO_BIOの場合、ペアから読み取る番号です。BIOにSSLオブジェクトが含まれている場合は、SSLオブジェクトからのデータを保留中です(WolfSSL_Pending(SSL))。bio_memoryタイプがある場合は、メモリバッファのサイズを返します。
  8448. \return >=0 保留中のバイト数。
  8449. _Example_
  8450. \code
  8451. WOLFSSL_BIO* bio;
  8452. int pending;
  8453. bio = wolfSSL_BIO_new();
  8454. pending = wolfSSL_BIO_ctrl_pending(bio);
  8455. \endcode
  8456. \sa wolfSSL_BIO_make_bio_pair
  8457. \sa wolfSSL_BIO_new
  8458. */
  8459. size_t wolfSSL_BIO_ctrl_pending(WOLFSSL_BIO *b);
  8460. /*!
  8461. \ingroup Setup
  8462. \biiefは、この関数は、ハンドシェイク中にサーバーによって送信されたランダムなデータを取得するために使用されます。
  8463. \return >0 データの取得に成功した場合、0より大きい値を返します。
  8464. \return 0 ランダムなデータバッファまたはエラー状態が返されない場合は0
  8465. \return max 渡されたOUTSZが0の場合、必要な最大バッファサイズが返されます。
  8466. \param ssl クライアントのランダムデータバッファを取得するためのWolfSSL構造。
  8467. \param out ランダムデータを保持するためのバッファ。
  8468. _Example_
  8469. \code
  8470. WOLFSSL ssl;
  8471. unsigned char* buffer;
  8472. size_t bufferSz;
  8473. size_t ret;
  8474. bufferSz = wolfSSL_get_server_random(ssl, NULL, 0);
  8475. buffer = malloc(bufferSz);
  8476. ret = wolfSSL_get_server_random(ssl, buffer, bufferSz);
  8477. // check ret value
  8478. \endcode
  8479. \sa wolfSSL_new
  8480. \sa wolfSSL_free
  8481. */
  8482. size_t wolfSSL_get_server_random(const WOLFSSL *ssl,
  8483. unsigned char *out, size_t outlen);
  8484. /*!
  8485. \ingroup Setup
  8486. \biiefは、この関数は、ハンドシェイク中にクライアントによって送信されたランダムなデータを取得するために使用されます。
  8487. \return >0 データの取得に成功した場合、0より大きい値を返します。
  8488. \return 0 ランダムなデータバッファまたはエラー状態が返されない場合は0
  8489. \return max 渡されたOUTSZが0の場合、必要な最大バッファサイズが返されます。
  8490. \param ssl クライアントのランダムデータバッファを取得するためのWolfSSL構造。
  8491. \param out ランダムデータを保持するためのバッファ。
  8492. _Example_
  8493. \code
  8494. WOLFSSL ssl;
  8495. unsigned char* buffer;
  8496. size_t bufferSz;
  8497. size_t ret;
  8498. bufferSz = wolfSSL_get_client_random(ssl, NULL, 0);
  8499. buffer = malloc(bufferSz);
  8500. ret = wolfSSL_get_client_random(ssl, buffer, bufferSz);
  8501. // check ret value
  8502. \endcode
  8503. \sa wolfSSL_new
  8504. \sa wolfSSL_free
  8505. */
  8506. size_t wolfSSL_get_client_random(const WOLFSSL* ssl,
  8507. unsigned char* out, size_t outSz);
  8508. /*!
  8509. \ingroup Setup
  8510. \brief これはCTXで設定されたパスワードコールバックのゲッター関数です。
  8511. \return func 成功すると、コールバック関数を返します。
  8512. \return NULL CTXがNULLの場合、NULLが返されます。
  8513. _Example_
  8514. \code
  8515. WOLFSSL_CTX* ctx;
  8516. wc_pem_password_cb cb;
  8517. // setup ctx
  8518. cb = wolfSSL_CTX_get_default_passwd_cb(ctx);
  8519. //use cb
  8520. \endcode
  8521. \sa wolfSSL_CTX_new
  8522. \sa wolfSSL_CTX_free
  8523. */
  8524. wc_pem_password_cb* wolfSSL_CTX_get_default_passwd_cb(WOLFSSL_CTX*
  8525. ctx);
  8526. /*!
  8527. \ingroup Setup
  8528. \bri f この関数は、れは、CTXで設定されているパスワードコールバックユーザーデータの取得機能です。
  8529. \return pointer 成功すると、ユーザーデータポインタを返します。
  8530. \return NULL CTXがNULLの場合、NULLが返されます。
  8531. _Example_
  8532. \code
  8533. WOLFSSL_CTX* ctx;
  8534. void* data;
  8535. // setup ctx
  8536. data = wolfSSL_CTX_get_default_passwd_cb(ctx);
  8537. //use data
  8538. \endcode
  8539. \sa wolfSSL_CTX_new
  8540. \sa wolfSSL_CTX_free
  8541. */
  8542. void *wolfSSL_CTX_get_default_passwd_cb_userdata(WOLFSSL_CTX *ctx);
  8543. /*!
  8544. \ingroup CertsKeys
  8545. \brief この関数はwolfssl_pem_read_bio_x509と同じように動作します。AUXは、信頼できる/拒否されたユースケースや人間の読みやすさのためのフレンドリーな名前などの追加情報を含むことを意味します。
  8546. \return WOLFSSL_X509 PEMバッファの解析に成功した場合、wolfssl_x509構造が返されます。
  8547. \return Null PEMバッファの解析に失敗した場合。
  8548. \param bp WOLFSSL_BIO構造体体からPEMバッファを取得します。
  8549. \param x wolfssl_x509を機能副作用で設定する場合
  8550. \param cb パスワードコールバック
  8551. _Example_
  8552. \code
  8553. WOLFSSL_BIO* bio;
  8554. WOLFSSL_X509* x509;
  8555. // setup bio
  8556. X509 = wolfSSL_PEM_read_bio_X509_AUX(bio, NULL, NULL, NULL);
  8557. //check x509 is not null and then use it
  8558. \endcode
  8559. \sa wolfSSL_PEM_read_bio_X509
  8560. */
  8561. WOLFSSL_X509 *wolfSSL_PEM_read_bio_X509_AUX
  8562. (WOLFSSL_BIO *bp, WOLFSSL_X509 **x, wc_pem_password_cb *cb, void *u);
  8563. /*!
  8564. \ingroup CertsKeys
  8565. \brief WOLFSSL_CTX構造体のDHメンバーをdiffie-hellmanパラメータで初期化します。
  8566. \return SSL_SUCCESS 関数が正常に実行された場合に返されます。
  8567. \return BAD_FUNC_ARG CTXまたはDH構造体がNULLの場合に返されます。
  8568. \return SSL_FATAL_ERROR 構造値を設定するエラーが発生した場合に返されます。
  8569. \return MEMORY_E メモリを割り当てることができなかった場合に返されます。
  8570. \param ctx wolfSSL_CTX_new()を使用して作成されたWOLFSSL_CTX構造体へのポインタ。
  8571. _Example_
  8572. \code
  8573. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
  8574. WOLFSSL_DH* dh;
  8575. return wolfSSL_CTX_set_tmp_dh(ctx, dh);
  8576. \endcode
  8577. \sa wolfSSL_BN_bn2bin
  8578. */
  8579. long wolfSSL_CTX_set_tmp_dh(WOLFSSL_CTX* ctx, WOLFSSL_DH* dh);
  8580. /*!
  8581. \ingroup CertsKeys
  8582. \brief この関数は、BIOのPEMバッファからDSAパラメータを取得します。
  8583. \return WOLFSSL_DSA PEMバッファの解析に成功した場合、WolfSSL_DSA構造が作成され、返されます。
  8584. \return Null PEMバッファの解析に失敗した場合。
  8585. \param bio PEMメモリポインタを取得するためのWOLFSSL_BIO構造体体へのポインタ。
  8586. \param x 新しいWolfSSL_DSA構造に設定するポインタ。
  8587. \param cb パスワードコールバック関数
  8588. _Example_
  8589. \code
  8590. WOLFSSL_BIO* bio;
  8591. WOLFSSL_DSA* dsa;
  8592. // setup bio
  8593. dsa = wolfSSL_PEM_read_bio_DSAparams(bio, NULL, NULL, NULL);
  8594. // check dsa is not NULL and then use dsa
  8595. \endcode
  8596. \sa none
  8597. */
  8598. WOLFSSL_DSA *wolfSSL_PEM_read_bio_DSAparams(WOLFSSL_BIO *bp,
  8599. WOLFSSL_DSA **x, wc_pem_password_cb *cb, void *u);
  8600. /*!
  8601. \ingroup Debug
  8602. \brief この関数は、wolfssl_Errorに遭遇した最後のエラーの絶対値を返します。
  8603. \return error 最後のエラーの絶対値を返します。
  8604. _Example_
  8605. \code
  8606. unsigned long err;
  8607. ...
  8608. err = wolfSSL_ERR_peek_last_error();
  8609. // inspect err value
  8610. \endcode
  8611. \sa wolfSSL_ERR_print_errors_fp
  8612. */
  8613. unsigned long wolfSSL_ERR_peek_last_error(void);
  8614. /*!
  8615. \ingroup CertsKeys
  8616. \brief この関数はピアの証明書チェーンを取得します。
  8617. \return pointer ピアの証明書スタックへのポインタを返します。
  8618. \return NULL ピア証明書がない場合に返されます。
  8619. _Example_
  8620. \code
  8621. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( method );
  8622. WOLFSSL* ssl = wolfSSL_new(ctx);
  8623. ...
  8624. wolfSSL_connect(ssl);
  8625. STACK_OF(WOLFSSL_X509)* chain = wolfSSL_get_peer_cert_chain(ssl);
  8626. ifchain){
  8627. // You have a pointer to the peer certificate chain
  8628. }
  8629. \endcode
  8630. \sa wolfSSL_X509_get_issuer_name
  8631. \sa wolfSSL_X509_get_subject_name
  8632. \sa wolfSSL_X509_get_isCA
  8633. */
  8634. WOLF_STACK_OF(WOLFSSL_X509)* wolfSSL_get_peer_cert_chain(const WOLFSSL*);
  8635. /*!
  8636. \ingroup Setup
  8637. \brief この関数は、WOLFSSL_CTXオブジェクトのオプションビットをリセットします。
  8638. \return option 新しいオプションビット
  8639. _Example_
  8640. \code
  8641. WOLFSSL_CTX* ctx = 0;
  8642. ...
  8643. wolfSSL_CTX_clear_options(ctx, SSL_OP_NO_TLSv1);
  8644. \endcode
  8645. \sa wolfSSL_CTX_new
  8646. \sa wolfSSL_new
  8647. \sa wolfSSL_free
  8648. */
  8649. long wolfSSL_CTX_clear_options(WOLFSSL_CTX* ctx, long opt);
  8650. /*!
  8651. \ingroup IO
  8652. \brief この関数は、WolfSSL構造のjobjectrefメンバーを設定します。
  8653. \return SSL_SUCCESS jobjectrefがobjptrに正しく設定されている場合に返されます。
  8654. \return SSL_FAILURE 関数が正しく実行されず、jobjectrefが設定されていない場合に返されます。
  8655. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  8656. _Example_
  8657. \code
  8658. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
  8659. WOLFSSL* ssl = wolfSSL_new();
  8660. void* objPtr = &obj;
  8661. ...
  8662. if(wolfSSL_set_jobject(ssl, objPtr)){
  8663. // The success case
  8664. }
  8665. \endcode
  8666. \sa wolfSSL_get_jobject
  8667. */
  8668. int wolfSSL_set_jobject(WOLFSSL* ssl, void* objPtr);
  8669. /*!
  8670. \ingroup IO
  8671. \brief この関数は、wolfssl構造のjobjectrefメンバーを返します。
  8672. \return value wolfssl構造体がnullでない場合、関数はjobjectref値を返します。
  8673. \return NULL wolfssl構造体がNULLの場合に返されます。
  8674. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  8675. _Example_
  8676. \code
  8677. WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
  8678. WOLFSSL* ssl = wolfSSL(ctx);
  8679. ...
  8680. void* jobject = wolfSSL_get_jobject(ssl);
  8681. if(jobject != NULL){
  8682. // Success case
  8683. }
  8684. \endcode
  8685. \sa wolfSSL_set_jobject
  8686. */
  8687. void* wolfSSL_get_jobject(WOLFSSL* ssl);
  8688. /*!
  8689. \ingroup Setup
  8690. \brief この関数はSSL内のコールバックを設定します。コールバックはハンドシェイクメッセージを観察することです。CBのNULL値はコールバックをリセットします。
  8691. \return SSL_SUCCESS 成功しています。
  8692. \return SSL_FAILURE NULL SSLが渡された場合。
  8693. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  8694. _Example_
  8695. \code
  8696. static cb(int write_p, int version, int content_type,
  8697. const void *buf, size_t len, WOLFSSL *ssl, void *arg)
  8698. WOLFSSL* ssl;
  8699. ret = wolfSSL_set_msg_callback(ssl, cb);
  8700. // check ret
  8701. \endcode
  8702. \sa wolfSSL_set_msg_callback_arg
  8703. */
  8704. int wolfSSL_set_msg_callback(WOLFSSL *ssl, SSL_Msg_Cb cb);
  8705. /*!
  8706. \ingroup Setup
  8707. \brief この関数は、SSL内の関連コールバックコンテキスト値を設定します。値はコールバック引数に渡されます。
  8708. \return none 返品不可。
  8709. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  8710. _Example_
  8711. \code
  8712. static cb(int write_p, int version, int content_type,
  8713. const void *buf, size_t len, WOLFSSL *ssl, void *arg)
  8714. WOLFSSL* ssl;
  8715. ret = wolfSSL_set_msg_callback(ssl, cb);
  8716. // check ret
  8717. wolfSSL_set_msg_callback(ssl, arg);
  8718. \endcode
  8719. \sa wolfSSL_set_msg_callback
  8720. */
  8721. int wolfSSL_set_msg_callback_arg(WOLFSSL *ssl, void* arg);
  8722. /*!
  8723. \ingroup CertsKeys
  8724. \brief この関数は、存在する場合は、ピア証明書からaltnameを返します。
  8725. \return NULL 次のAltNameがない場合。
  8726. \return cert->altNamesNext->name wolfssl_x509から、AltNameリストからの文字列値である構造が存在する場合に返されます。
  8727. _Example_
  8728. \code
  8729. WOLFSSL_X509 x509 = (WOLFSSL_X509*)XMALLOC(sizeof(WOLFSSL_X509), NULL,
  8730. DYNAMIC_TYPE_X509);
  8731. int x509NextAltName = wolfSSL_X509_get_next_altname(x509);
  8732. if(x509NextAltName == NULL){
  8733. //There isn’t another alt name
  8734. }
  8735. \endcode
  8736. \sa wolfSSL_X509_get_issuer_name
  8737. \sa wolfSSL_X509_get_subject_name
  8738. */
  8739. char* wolfSSL_X509_get_next_altname(WOLFSSL_X509* x509);
  8740. /*!
  8741. \ingroup CertsKeys
  8742. \brief 関数は、x509がnullのかどうかを確認し、そうでない場合は、WOLFSSL_X509構造体のNotBeforeメンバーを返します。
  8743. \return pointer WOLFSSL_ASN1_TIMEへのポインタ(WOLFSSL_X509構造体のNotBeforeメンバーへのポインタ)を返します。
  8744. \return NULL WOLFSSL_X509構造体がNULLの場合に返されます。
  8745. \param x509 WOLFSSL_X509構造体へのポインタ
  8746. _Example_
  8747. \code
  8748. WOLFSSL_X509* x509 = (WOLFSSL_X509)XMALLOC(sizeof(WOLFSSL_X509), NULL,
  8749. DYNAMIC_TYPE_X509) ;
  8750. const WOLFSSL_ASN1_TIME* notAfter = wolfSSL_X509_get_notBefore(x509);
  8751. if(notAfter == NULL){
  8752. //The x509 object was NULL
  8753. }
  8754. \endcode
  8755. \sa wolfSSL_X509_get_notAfter
  8756. */
  8757. WOLFSSL_ASN1_TIME* wolfSSL_X509_get_notBefore(WOLFSSL_X509* x509);
  8758. /*!
  8759. \ingroup IO
  8760. \brief この関数はクライアント側で呼び出され、サーバーとのSSL/TLSハンドシェイクを開始します。
  8761. この関数が呼び出されるまでに下層の通信チャネルはすでに設定されている必要があります。
  8762. wolfSSL_connect()は、ブロッキングとノンブロッキングI/Oの両方で動作します。
  8763. 下層のI/Oがノンブロッキングの場合、wolfSSL_connect()は、下層のI/OがwolfSSL_connectの要求(送信データ、受信データ)を満たすことができなかったときには即戻ります。
  8764. この場合、wolfSSL_get_error()の呼び出しでSSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEのいずれかが返されます。
  8765. 呼び出したプロセスは、下層のI/OががREADYになった時点で、WOLFSSLが停止したときから再開できるようにwolfSSL_connect()への呼び出しを繰り返す必要があります。
  8766. これにはselect()を使用して必要な条件が整ったかどうかを確認できます。
  8767. ブロッキングI/Oを使用する場合は、ハンドシェークが終了するかエラーが発生するまで戻ってきません。
  8768. wolfSSLはOpenSSLと比べて証明書検証に異なるアプローチを取ります。クライアントのデフォルトポリシーはサーバーを認証することです。
  8769. これは、CA証明書を読み込まない場合、サーバーを確認することができず”-155”のエラーコードが返されます。
  8770. OpenSSLと同じ振る舞い(つまり、CA証明書のロードなしでサーバー認証を成功させる)を取らせたい場合には、セキュリティ面でお勧めはしませんが、
  8771. SSL_CTX_SET_VERIFY(ctx、SSL_VERIFY_NONE、0)を呼び出すことで可能となります。
  8772. \return SSL_SUCCESS 成功した場合に返されます。
  8773. \return SSL_FATAL_ERROR エラーが発生した場合に返されます。より詳細なエラーコードを取得するには、wolfSSL_get_error()を呼び出します。
  8774. \param ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  8775. _Example_
  8776. \code
  8777. int ret = 0;
  8778. int err = 0;
  8779. WOLFSSL* ssl;
  8780. char buffer[80];
  8781. ...
  8782. ret = wolfSSL_connect(ssl);
  8783. if (ret != SSL_SUCCESS) {
  8784. err = wolfSSL_get_error(ssl, ret);
  8785. printf(“error = %d, %s\n”, err, wolfSSL_ERR_error_string(err, buffer));
  8786. }
  8787. \endcode
  8788. \sa wolfSSL_get_error
  8789. \sa wolfSSL_accept
  8790. */
  8791. int wolfSSL_connect(WOLFSSL* ssl);
  8792. /*!
  8793. \ingroup Setup
  8794. \brief この関数はサーバー側で呼び出されて、HellORetryRequestメッセージにCookieを含める必要があることを示します。Cookieは現在のトランスクリプトのハッシュを保持しているので、別のサーバープロセスは応答でClientHelloを処理できます。秘密はCookieデータの整合性チェックをGenertingするときに使用されます。
  8795. \param [in,out] ssl l wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  8796. \param [in] 秘密を保持しているバッファへのポインタを秘密にします。渡すNULLは、新しいランダムシークレットを生成することを示します。
  8797. \param [in] シークスのサイズをバイト単位でサイズ。0を渡すと、デフォルトのサイズを使用することを示します.WC_SHA256_DIGEST_SIZE(またはSHA-256が使用できない場合はWC_SHA_DIGEST_SIZE)。
  8798. \return BAD_FUNC_ARG sslがNULLの場合、またはTLS v1.3を使用していない場合。
  8799. \return SIDE_ERROR クライアントで呼び出された場合。
  8800. \return WOLFSSL_SUCCESS 成功した場合に返されます。
  8801. \return MEMORY_ERROR 秘密を保存するために動的メモリを割り当てる場合に失敗しました。
  8802. _Example_
  8803. \code
  8804. int ret;
  8805. WOLFSSL* ssl;
  8806. char secret[32];
  8807. ...
  8808. ret = wolfSSL__send_hrr_cookie(ssl, secret, sizeof(secret));
  8809. if (ret != WOLFSSL_SUCCESS) {
  8810. // failed to set use of Cookie and secret
  8811. }
  8812. \endcode
  8813. \sa wolfSSL_new
  8814. */
  8815. int wolfSSL_send_hrr_cookie(WOLFSSL* ssl,
  8816. const unsigned char* secret, unsigned int secretSz);
  8817. /*!
  8818. \ingroup Setup
  8819. \brief この関数はサーバー側で呼び出され、HelloRetryRequestメッセージがクッキーを含んではならないこと、
  8820. DTLSv1.3が使用されている場合にはクッキーの交換がハンドシェークに含まれないことを表明します。
  8821. DTLSv1.3ではクッキー交換を行わないとサーバーがDoS/Amplification攻撃を受けやすくなる可能性があることに留意してください。
  8822. \param [in,out] ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  8823. \return WOLFSSL_SUCCESS 成功時に返されます。
  8824. \return BAD_FUNC_ARG sslがNULLあるいはTLS v1.3を使用していない場合に返されます。
  8825. \return SIDE_ERROR クライアント側でこの関数が呼び出された場合に返されます。
  8826. \sa wolfSSL_send_hrr_cookie
  8827. */
  8828. int wolfSSL_disable_hrr_cookie(WOLFSSL* ssl);
  8829. /*!
  8830. \ingroup Setup
  8831. \brief この関数はサーバー上で呼び出され、ハンドシェイク完了時にセッション再開のためのセッションチケットの送信を行わないようにします。
  8832. \param [in,out] ctx wolfSSL_CTX_new()で作成されたWOLFSSL_CTX構造体へのポインタ。
  8833. \return BAD_FUNC_ARG CTXがNULLの場合、またはTLS v1.3を使用していない場合。
  8834. \return SIDE_ERROR クライアントで呼び出された場合。
  8835. _Example_
  8836. \code
  8837. int ret;
  8838. WOLFSSL_CTX* ctx;
  8839. ...
  8840. ret = wolfSSL_CTX_no_ticket_TLSv13(ctx);
  8841. if (ret != 0) {
  8842. // failed to set no ticket
  8843. }
  8844. \endcode
  8845. \sa wolfSSL_no_ticket_TLSv13
  8846. */
  8847. int wolfSSL_CTX_no_ticket_TLSv13(WOLFSSL_CTX* ctx);
  8848. /*!
  8849. \ingroup Setup
  8850. \brief ハンドシェイクが完了すると、この関数はサーバー上で再開セッションチケットの送信を停止するように呼び出されます。
  8851. \param [in,out] ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  8852. \return BAD_FUNC_ARG sslがNULLの場合、またはTLS v1.3を使用していない場合。
  8853. \return SIDE_ERROR クライアントで呼び出された場合。
  8854. _Example_
  8855. \code
  8856. int ret;
  8857. WOLFSSL* ssl;
  8858. ...
  8859. ret = wolfSSL_no_ticket_TLSv13(ssl);
  8860. if (ret != 0) {
  8861. // failed to set no ticket
  8862. }
  8863. \endcode
  8864. \sa wolfSSL_CTX_no_ticket_TLSv13
  8865. */
  8866. int wolfSSL_no_ticket_TLSv13(WOLFSSL* ssl);
  8867. /*!
  8868. \ingroup Setup
  8869. \brief この関数は、Authenticationにプリシェアキーを使用している場合、DIFFIE-HELLMAN(DH)スタイルのキー交換を許可するTLS V1.3 WolfSSLコンテキストで呼び出されます。
  8870. \param [in,out] ctx wolfSSL_CTX_new()で作成されたWOLFSSL_CTX構造体へのポインタ。
  8871. \return BAD_FUNC_ARG CTXがNULLの場合、またはTLS v1.3を使用していない場合。
  8872. _Example_
  8873. \code
  8874. int ret;
  8875. WOLFSSL_CTX* ctx;
  8876. ...
  8877. ret = wolfSSL_CTX_no_dhe_psk(ctx);
  8878. if (ret != 0) {
  8879. // failed to set no DHE for PSK handshakes
  8880. }
  8881. \endcode
  8882. \sa wolfSSL_no_dhe_psk
  8883. */
  8884. int wolfSSL_CTX_no_dhe_psk(WOLFSSL_CTX* ctx);
  8885. /*!
  8886. \ingroup Setup
  8887. \brief この関数は、事前共有鍵を使用しているTLS V1.3クライアントまたはサーバーで、にDiffie-Hellman(DH)スタイルの鍵交換を許可しないように設定します。
  8888. \param [in,out] ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  8889. \return BAD_FUNC_ARG sslがNULLの場合、またはTLS v1.3を使用していない場合。
  8890. _Example_
  8891. \code
  8892. int ret;
  8893. WOLFSSL* ssl;
  8894. ...
  8895. ret = wolfSSL_no_dhe_psk(ssl);
  8896. if (ret != 0) {
  8897. // failed to set no DHE for PSK handshakes
  8898. }
  8899. \endcode
  8900. \sa wolfSSL_CTX_no_dhe_psk
  8901. */
  8902. int wolfSSL_no_dhe_psk(WOLFSSL* ssl);
  8903. /*!
  8904. \ingroup IO
  8905. \brief この関数は、TLS v1.3クライアントまたはサーバーのwolfsslで呼び出されて、キーのロールオーバーを強制します。KeyUpdateメッセージがピアに送信され、新しいキーが暗号化のために計算されます。ピアはKeyUpdateメッセージを送り、新しい復号化キーWILを計算します。この機能は、ハンドシェイクが完了した後にのみ呼び出すことができます。
  8906. \param [in,out] ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  8907. \return BAD_FUNC_ARG sslがNULLの場合、またはTLS v1.3を使用していない場合。
  8908. \return WANT_WRITE 書き込みが準備ができていない場合
  8909. _Example_
  8910. \code
  8911. int ret;
  8912. WOLFSSL* ssl;
  8913. ...
  8914. ret = wolfSSL_update_keys(ssl);
  8915. if (ret == WANT_WRITE) {
  8916. // need to call again when I/O ready
  8917. }
  8918. else if (ret != WOLFSSL_SUCCESS) {
  8919. // failed to send key update
  8920. }
  8921. \endcode
  8922. \sa wolfSSL_write
  8923. */
  8924. int wolfSSL_update_keys(WOLFSSL* ssl);
  8925. /*!
  8926. \ingroup IO
  8927. \brief この関数は、TLS v1.3クライアントまたはサーバーのwolfsslで呼び出され、キーのロールオーバーが進行中かどうかを判断します。wolfssl_update_keys()が呼び出されると、KeyUpdateメッセージが送信され、暗号化キーが更新されます。復号化キーは、応答が受信されたときに更新されます。
  8928. \param [in] ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  8929. \param [out] キー更新応答が必要ない場合は必須0。1キー更新応答が必要ない場合。
  8930. \return 0 成功した。
  8931. _Example_
  8932. \code
  8933. int ret;
  8934. WOLFSSL* ssl;
  8935. int required;
  8936. ...
  8937. ret = wolfSSL_key_update_response(ssl, &required);
  8938. if (ret != 0) {
  8939. // bad parameters
  8940. }
  8941. if (required) {
  8942. // encrypt Key updated, awaiting response to change decrypt key
  8943. }
  8944. \endcode
  8945. \sa wolfSSL_update_keys
  8946. */
  8947. int wolfSSL_key_update_response(WOLFSSL* ssl, int* required);
  8948. /*!
  8949. \ingroup Setup
  8950. \brief この関数は、TLS v1.3クライアントのWolfSSLコンテキストで呼び出され、クライアントはサーバーからの要求に応じてPost Handshakeを送信できるようにします。これは、クライアント認証などを必要としないページを持つWebサーバーに接続するときに役立ちます。
  8951. \param [in,out] ctx wolfSSL_CTX_new()で作成されたWOLFSSL_CTX構造体へのポインタ。
  8952. \return BAD_FUNC_ARG CTXがNULLの場合、またはTLS v1.3を使用していない場合。
  8953. \return SIDE_ERROR サーバーで呼び出された場合。
  8954. _Example_
  8955. \code
  8956. int ret;
  8957. WOLFSSL_CTX* ctx;
  8958. ...
  8959. ret = wolfSSL_allow_post_handshake_auth(ctx);
  8960. if (ret != 0) {
  8961. // failed to allow post handshake authentication
  8962. }
  8963. \endcode
  8964. \sa wolfSSL_allow_post_handshake_auth
  8965. \sa wolfSSL_request_certificate
  8966. */
  8967. int wolfSSL_CTX_allow_post_handshake_auth(WOLFSSL_CTX* ctx);
  8968. /*!
  8969. \ingroup Setup
  8970. \brief この関数は、TLS V1.3クライアントWolfSSLで呼び出され、クライアントはサーバーからの要求に応じてハンドシェイクを送ります。handshakeクライアント認証拡張機能はClientHelloで送信されます。これは、クライアント認証などを必要としないページを持つWebサーバーに接続するときに役立ちます。
  8971. \param [in,out] ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  8972. \return BAD_FUNC_ARG sslがNULLの場合、またはTLS v1.3を使用していない場合。
  8973. \return SIDE_ERROR サーバーで呼び出された場合。
  8974. _Example_
  8975. \code
  8976. int ret;
  8977. WOLFSSL* ssl;
  8978. ...
  8979. ret = wolfSSL_allow_post_handshake_auth(ssl);
  8980. if (ret != 0) {
  8981. // failed to allow post handshake authentication
  8982. }
  8983. \endcode
  8984. \sa wolfSSL_CTX_allow_post_handshake_auth
  8985. \sa wolfSSL_request_certificate
  8986. */
  8987. int wolfSSL_allow_post_handshake_auth(WOLFSSL* ssl);
  8988. /*!
  8989. \ingroup IO
  8990. \brief この関数は、TLS v1.3クライアントからクライアント証明書を要求します。これは、Webサーバーがクライアント認証やその他のものを必要とするページにサービスを提供している場合に役立ちます。接続で最大256の要求を送信できます。
  8991. \param [in,out] ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  8992. \return BAD_FUNC_ARG sslがNULLの場合、またはTLS v1.3を使用していない場合。
  8993. \return WANT_WRITE 書き込みが準備ができていない場合
  8994. \return SIDE_ERROR クライアントで呼び出された場合。
  8995. \return NOT_READY_ERROR ハンドシェイクが終了していないときに呼び出された場合。
  8996. \return POST_HAND_AUTH_ERROR 送付後認証が許可されていない場合。
  8997. \return MEMORY_E 動的メモリ割り当てが失敗した場合
  8998. _Example_
  8999. \code
  9000. int ret;
  9001. WOLFSSL* ssl;
  9002. ...
  9003. ret = wolfSSL_request_certificate(ssl);
  9004. if (ret == WANT_WRITE) {
  9005. // need to call again when I/O ready
  9006. }
  9007. else if (ret != WOLFSSL_SUCCESS) {
  9008. // failed to request a client certificate
  9009. }
  9010. \endcode
  9011. \sa wolfSSL_allow_post_handshake_auth
  9012. \sa wolfSSL_write
  9013. */
  9014. int wolfSSL_request_certificate(WOLFSSL* ssl);
  9015. /*!
  9016. \ingroup Setup
  9017. \brief この関数は楕円曲線グループのリストを設定して、WolfSSLコンテキストを希望の順に設定します。リストはヌル終了したテキスト文字列、およびコロン区切りリストです。この関数を呼び出して、TLS v1.3接続で使用する鍵交換楕円曲線パラメータを設定します。
  9018. \param [in,out] ctx wolfSSL_CTX_new()で作成されたWOLFSSL_CTX構造体へのポインタ。
  9019. \param [in] list 楕円曲線グループのコロン区切りリストである文字列をリストします。
  9020. \return WOLFSSL_FAILURE ポインタパラメータがNULLの場合、wolfssl_max_group_countグループが多い場合は、グループ名が認識されないか、TLS v1.3を使用していません。
  9021. _Example_
  9022. \code
  9023. int ret;
  9024. WOLFSSL_CTX* ctx;
  9025. const char* list = "P-384:P-256";
  9026. ...
  9027. ret = wolfSSL_CTX_set1_groups_list(ctx, list);
  9028. if (ret != WOLFSSL_SUCCESS) {
  9029. // failed to set group list
  9030. }
  9031. \endcode
  9032. \sa wolfSSL_set1_groups_list
  9033. \sa wolfSSL_CTX_set_groups
  9034. \sa wolfSSL_set_groups
  9035. \sa wolfSSL_UseKeyShare
  9036. \sa wolfSSL_preferred_group
  9037. */
  9038. int wolfSSL_CTX_set1_groups_list(WOLFSSL_CTX *ctx, char *list);
  9039. /*!
  9040. \ingroup Setup
  9041. \brief この関数は楕円曲線グループのリストを設定して、WolfSSLを希望の順に設定します。リストはヌル終了したテキスト文字列、およびコロン区切りリストです。この関数を呼び出して、TLS v1.3接続で使用する鍵交換楕円曲線パラメータを設定します。
  9042. \param [in,out] ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  9043. \param [in] list 鍵交換グループのコロン区切りリストである文字列をリストします。
  9044. \return WOLFSSL_FAILURE ポインタパラメータがNULLの場合、wolfssl_max_group_countグループが多い場合は、グループ名が認識されないか、TLS v1.3を使用していません。
  9045. _Example_
  9046. \code
  9047. int ret;
  9048. WOLFSSL* ssl;
  9049. const char* list = "P-384:P-256";
  9050. ...
  9051. ret = wolfSSL_CTX_set1_groups_list(ssl, list);
  9052. if (ret != WOLFSSL_SUCCESS) {
  9053. // failed to set group list
  9054. }
  9055. \endcode
  9056. \sa wolfSSL_CTX_set1_groups_list
  9057. \sa wolfSSL_CTX_set_groups
  9058. \sa wolfSSL_set_groups
  9059. \sa wolfSSL_UseKeyShare
  9060. \sa wolfSSL_preferred_group
  9061. */
  9062. int wolfSSL_set1_groups_list(WOLFSSL *ssl, char *list);
  9063. /*!
  9064. \ingroup TLS
  9065. \brief この関数は、クライアントがTLS v1.3ハンドシェイクで使用することを好む鍵交換グループを返します。この情報を完了した後にこの機能を呼び出して、サーバーがどのグループが予想されるようにこの情報が将来の接続で使用できるようになるかを決定するために、この情報が将来の接続で鍵交換のための鍵ペアを事前生成することができます。
  9066. \param [in,out] ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  9067. \return BAD_FUNC_ARG sslがNULLの場合、またはTLS v1.3を使用していない場合。
  9068. \return SIDE_ERROR サーバーで呼び出された場合。
  9069. \return NOT_READY_ERROR ハンドシェイクが完了する前に呼び出された場合。
  9070. _Example_
  9071. \code
  9072. int ret;
  9073. int group;
  9074. WOLFSSL* ssl;
  9075. ...
  9076. ret = wolfSSL_CTX_set1_groups_list(ssl)
  9077. if (ret < 0) {
  9078. // failed to get group
  9079. }
  9080. group = ret;
  9081. \endcode
  9082. \sa wolfSSL_UseKeyShare
  9083. \sa wolfSSL_CTX_set_groups
  9084. \sa wolfSSL_set_groups
  9085. \sa wolfSSL_CTX_set1_groups_list
  9086. \sa wolfSSL_set1_groups_list
  9087. */
  9088. int wolfSSL_preferred_group(WOLFSSL* ssl);
  9089. /*!
  9090. \ingroup Setup
  9091. \brief この関数は楕円曲線グループのリストを設定して、WolfSSLコンテキストを希望の順に設定します。リストは、Countで指定された識別子の数を持つグループ識別子の配列です。この関数を呼び出して、TLS v1.3接続で使用する鍵交換楕円曲線パラメータを設定します。
  9092. \param [in,out] ctx wolfSSL_CTX_new()で作成されたWOLFSSL_CTX構造体へのポインタ。
  9093. \param [in] groups 識別子によって鍵交換グループのリストをグループ化します。
  9094. \param [in] count グループ内の鍵交換グループの数を数えます。
  9095. \return BAD_FUNC_ARG ポインタパラメータがNULLの場合、グループ数はwolfssl_max_group_countを超えているか、TLS v1.3を使用していません。
  9096. _Example_
  9097. \code
  9098. int ret;
  9099. WOLFSSL_CTX* ctx;
  9100. int* groups = { WOLFSSL_ECC_X25519, WOLFSSL_ECC_SECP256R1 };
  9101. int count = 2;
  9102. ...
  9103. ret = wolfSSL_CTX_set1_groups_list(ctx, groups, count);
  9104. if (ret != WOLFSSL_SUCCESS) {
  9105. // failed to set group list
  9106. }
  9107. \endcode
  9108. \sa wolfSSL_set_groups
  9109. \sa wolfSSL_UseKeyShare
  9110. \sa wolfSSL_CTX_set_groups
  9111. \sa wolfSSL_set_groups
  9112. \sa wolfSSL_CTX_set1_groups_list
  9113. \sa wolfSSL_set1_groups_list
  9114. \sa wolfSSL_preferred_group
  9115. */
  9116. int wolfSSL_CTX_set_groups(WOLFSSL_CTX* ctx, int* groups,
  9117. int count);
  9118. /*!
  9119. \ingroup Setup
  9120. \brief この関数は、wolfsslを許すために楕円曲線グループのリストを設定します。リストは、Countで指定された識別子の数を持つグループ識別子の配列です。この関数を呼び出して、TLS v1.3接続で使用する鍵交換楕円曲線パラメータを設定します。
  9121. \param [in,out] ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  9122. \param [in] groups 識別子によって鍵交換グループのリストをグループ化します。
  9123. \param [in] count グループ内の鍵交換グループの数を数えます。
  9124. \return BAD_FUNC_ARG ポインタパラメータがNULLの場合、グループ数がWolfSSL_MAX_GROUP_COUNTを超えている場合、任意の識別子は認識されないか、TLS v1.3を使用していません。
  9125. _Example_
  9126. \code
  9127. int ret;
  9128. WOLFSSL* ssl;
  9129. int* groups = { WOLFSSL_ECC_X25519, WOLFSSL_ECC_SECP256R1 };
  9130. int count = 2;
  9131. ...
  9132. ret = wolfSSL_set_groups(ssl, groups, count);
  9133. if (ret != WOLFSSL_SUCCESS) {
  9134. // failed to set group list
  9135. }
  9136. \endcode
  9137. \sa wolfSSL_CTX_set_groups
  9138. \sa wolfSSL_UseKeyShare
  9139. \sa wolfSSL_CTX_set_groups
  9140. \sa wolfSSL_set_groups
  9141. \sa wolfSSL_CTX_set1_groups_list
  9142. \sa wolfSSL_set1_groups_list
  9143. \sa wolfSSL_preferred_group
  9144. */
  9145. int wolfSSL_set_groups(WOLFSSL* ssl, int* groups, int count);
  9146. /*!
  9147. \ingroup IO
  9148. \brief この関数はクライアント側で呼び出され、サーバーとのTLS v1.3ハンドシェイクを開始します。
  9149. この関数が呼び出されると、下層の通信チャネルはすでに設定されています。
  9150. wolfSSL_connect()は、ブロックとノンブロックI/Oの両方で動作します。
  9151. 下層I/Oがノンブロッキングの場合、wolfSSL_connect()は、下層I/Oがwolfssl_connectの要求を満たすことができなかったときに戻ります。
  9152. この場合、wolfSSL_get_error()への呼び出しはSSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEのいずれかを生成します。
  9153. 通話プロセスは、下層I/OがREADYおよびWOLFSSLが停止したときにwolfssl_connect()への呼び出しを繰り返す必要があります。
  9154. ノンブロッキングソケットを使用する場合は、何も実行する必要がありますが、select()を使用して必要な条件を確認できます。
  9155. 基礎となる入出力がブロックされている場合、wolfssl_connect()はハンドシェイクが終了したら、またはエラーが発生したらのみ戻ります。
  9156. WolfSSLはOpenSSLよりも証明書検証に異なるアプローチを取ります。
  9157. クライアントのデフォルトポリシーはサーバーを確認することです。
  9158. これは、CASを読み込まない場合、サーバーを確認することができ、確認できません(-155)。
  9159. SSL_CONNECTを持つことのOpenSSLの動作が成功した場合は、サーバーを検証してセキュリティを抑えることができます。
  9160. SSL_CTX_SET_VERIFY(CTX、SSL_VERIFY_NONE、0)。
  9161. ssl_new()を呼び出す前に。お勧めできませんが。
  9162. \return SSL_SUCCESS 成功時に返されます。
  9163. \return SSL_FATAL_ERROR エラーが発生した場合に返されます。より詳細なエラーコードを取得するには、wolfSSL_get_error()を呼び出します。
  9164. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  9165. _Example_
  9166. \code
  9167. int ret = 0;
  9168. int err = 0;
  9169. WOLFSSL* ssl;
  9170. char buffer[80];
  9171. ...
  9172. ret = wolfSSL_connect_TLSv13(ssl);
  9173. if (ret != SSL_SUCCESS) {
  9174. err = wolfSSL_get_error(ssl, ret);
  9175. printf(“error = %d, %s\n”, err, wolfSSL_ERR_error_string(err, buffer));
  9176. }
  9177. \endcode
  9178. \sa wolfSSL_get_error
  9179. \sa wolfSSL_connect
  9180. \sa wolfSSL_accept_TLSv13
  9181. \sa wolfSSL_accept
  9182. */
  9183. int wolfSSL_connect_TLSv13(WOLFSSL* ssl);
  9184. /*!
  9185. \ingroup IO
  9186. \brief この関数はサーバー側で呼び出され、SSL/TLSクライアントがSSL/TLSハンドシェイクを開始するのを待ちうけます。
  9187. この関数が呼び出されると、下層の通信チャネルはすでに設定されています。
  9188. wolfSSL_accept()は、ブロックとノンブロッキングI/Oの両方で動作します。
  9189. 下層の入出力がノンブロッキングである場合、wolfSSL_accept()は、下層のI/OがwolfSSL_acceptの要求を満たすことができなかったときに戻ります。
  9190. この場合、wolfSSL_get_error()への呼び出しはSSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEのいずれかを生成します。
  9191. 通話プロセスは、読み取り可能なデータが使用可能であり、wolfsslが停止した場所を拾うときに、wolfssl_acceptの呼び出しを繰り返す必要があります。
  9192. ノンブロッキングソケットを使用する場合は、何も実行する必要がありますが、select()を使用して必要な条件を確認できます。
  9193. 下層のI/Oがブロックされている場合、wolfssl_accept()はハンドシェイクが終了したら、またはエラーが発生したら戻ります。
  9194. 古いバージョンのClientHelloメッセージがサポートされていますが、TLS v1.3接続を期待するときにこの関数を呼び出します。
  9195. \return SSL_SUCCESS 成功時に返されます。
  9196. \return SSL_FATAL_ERROR エラーが発生した場合に返されます。より詳細なエラーコードを取得するには、wolfSSL_get_error()を呼び出します。
  9197. \param ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  9198. _Example_
  9199. \code
  9200. int ret = 0;
  9201. int err = 0;
  9202. WOLFSSL* ssl;
  9203. char buffer[80];
  9204. ...
  9205. ret = wolfSSL_accept_TLSv13(ssl);
  9206. if (ret != SSL_SUCCESS) {
  9207. err = wolfSSL_get_error(ssl, ret);
  9208. printf(“error = %d, %s\n”, err, wolfSSL_ERR_error_string(err, buffer));
  9209. }
  9210. \endcode
  9211. \sa wolfSSL_get_error
  9212. \sa wolfSSL_connect_TLSv13
  9213. \sa wolfSSL_connect
  9214. \sa wolfSSL_accept_TLSv13
  9215. \sa wolfSSL_accept
  9216. */
  9217. wolfSSL_accept_TLSv13(WOLFSSL* ssl);
  9218. /*!
  9219. \ingroup Setup
  9220. \brief この関数は、WolfSSLコンテキストを使用してTLS V1.3サーバーによって受け入れられるアーリーデータの最大量を設定します。
  9221. この関数を呼び出して、再生攻撃を軽減するためのプロセスへのアーリーデータの量を制限します。
  9222. 初期のデータは、セッションチケットが送信されたこと、したがってセッションチケットが再開されるたびに同じ接続の鍵から派生した鍵によって保護されます。
  9223. 値は再開のためにセッションチケットに含まれています。
  9224. ゼロの値は、セッションチケットを使用してクライアントによってアーリーデータを送信することを示します。
  9225. アーリーデータバイト数をアプリケーションで実際には可能な限り低く保つことをお勧めします。
  9226. \param [in,out] ctx wolfSSL_CTX_new()で作成されたWOLFSSL_CTX構造体へのポインタ。
  9227. \param [in] sz バイト単位で受け入れるアーリーデータのサイズ。
  9228. \return BAD_FUNC_ARG CTXがNULLの場合、またはTLS v1.3を使用していない場合。
  9229. \return SIDE_ERROR クライアントで呼び出された場合。
  9230. _Example_
  9231. \code
  9232. int ret;
  9233. WOLFSSL_CTX* ctx;
  9234. ...
  9235. ret = wolfSSL_CTX_set_max_early_data(ctx, 128);
  9236. if (ret != WOLFSSL_SUCCESS) {
  9237. // failed to set group list
  9238. }
  9239. \endcode
  9240. \sa wolfSSL_set_max_early_data
  9241. \sa wolfSSL_write_early_data
  9242. \sa wolfSSL_read_early_data
  9243. */
  9244. int wolfSSL_CTX_set_max_early_data(WOLFSSL_CTX* ctx,
  9245. unsigned int sz);
  9246. /*!
  9247. \ingroup Setup
  9248. \brief この関数は、WolfSSLコンテキストを使用してTLS V1.3サーバーによって受け入れられるアーリーデータの最大量を設定します。
  9249. この関数を呼び出して、再生攻撃を軽減するためプロセスへのアーリーデータの量を制限します。
  9250. 初期のデータは、セッションチケットが送信されたこと、したがってセッションチケットが再開されるたびに同じ接続の鍵から派生した鍵によって保護されます。
  9251. 値は再開のためにセッションチケットに含まれています。
  9252. ゼロの値は、セッションチケットを使用してクライアントによってアーリーデータを送信することを示します。
  9253. アーリーデータバイト数をアプリケーションで実際には可能な限り低く保つことをお勧めします。
  9254. \param [in,out] ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  9255. \param [in] SZクライアントからバイト単位で受け入れるアーリーデータのサイズ。
  9256. \return BAD_FUNC_ARG sslがNULLの場合、またはTLS v1.3を使用していない場合。
  9257. \return SIDE_ERROR クライアントで呼び出された場合。
  9258. _Example_
  9259. \code
  9260. int ret;
  9261. WOLFSSL* ssl;
  9262. ...
  9263. ret = wolfSSL_set_max_early_data(ssl, 128);
  9264. if (ret != WOLFSSL_SUCCESS) {
  9265. // failed to set group list
  9266. }
  9267. \endcode
  9268. \sa wolfSSL_CTX_set_max_early_data
  9269. \sa wolfSSL_write_early_data
  9270. \sa wolfSSL_read_early_data
  9271. */
  9272. int wolfSSL_set_max_early_data(WOLFSSL* ssl, unsigned int sz);
  9273. /*!
  9274. \ingroup IO
  9275. \brief この関数は、セッション再開時にサーバーにアーリーデータを書き込みます。
  9276. wolfSSL_connect()またはwolfSSL_connect_tlsv13()の代わりにこの関数を呼び出して、サーバーに接続してハンドシェイクにデータを送ります。
  9277. この機能はクライアントでのみ使用されます。
  9278. \return BAD_FUNC_ARG ポインタパラメータがNULLの場合に返されます。szは0未満またはTLSV1.3を使用しない場合にも返されます。
  9279. \return SIDE_ERROR サーバーで呼び出された場合に返されます。
  9280. \return WOLFSSL_FATAL_ERROR 接続が行われていない場合に返されます。
  9281. \param [in,out] ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  9282. \param [in] data アーリーデータを保持しているバッファへのポインタ。
  9283. \param [in] sz 書き込むアーリーデータのサイズ
  9284. \param [out] outSz 書き込んだアーリーデータのサイズ
  9285. _Example_
  9286. \code
  9287. int ret = 0;
  9288. int err = 0;
  9289. WOLFSSL* ssl;
  9290. byte earlyData[] = { early data };
  9291. int outSz;
  9292. char buffer[80];
  9293. ...
  9294. ret = wolfSSL_write_early_data(ssl, earlyData, sizeof(earlyData), &outSz);
  9295. if (ret != WOLFSSL_SUCCESS) {
  9296. err = wolfSSL_get_error(ssl, ret);
  9297. printf(“error = %d, %s\n”, err, wolfSSL_ERR_error_string(err, buffer));
  9298. goto err_label;
  9299. }
  9300. if (outSz < sizeof(earlyData)) {
  9301. // not all early data was sent
  9302. }
  9303. ret = wolfSSL_connect_TLSv13(ssl);
  9304. if (ret != SSL_SUCCESS) {
  9305. err = wolfSSL_get_error(ssl, ret);
  9306. printf(“error = %d, %s\n”, err, wolfSSL_ERR_error_string(err, buffer));
  9307. }
  9308. \endcode
  9309. \sa wolfSSL_read_early_data
  9310. \sa wolfSSL_connect
  9311. \sa wolfSSL_connect_TLSv13
  9312. */
  9313. int wolfSSL_write_early_data(WOLFSSL* ssl, const void* data,
  9314. int sz, int* outSz);
  9315. /*!
  9316. \ingroup IO
  9317. \brief この関数は、再開時にクライアントからの早期データを読み取ります。wolfssl_accept()またはwolfssl_accept_tlsv13()の代わりにこの関数を呼び出して、クライアントを受け入れ、ハンドシェイク内の早期データを読み取ります。ハンドシェイクよりも早期データがない場合は、通常として処理されます。この機能はサーバーでのみ使用されます。
  9318. \param [in,out] ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  9319. \param [out] データはクライアントから読み込まれた早期データを保持するためのバッファ。
  9320. \param [in] バッファのSZサイズバイト数。
  9321. \param [out] OUTSZ初期データのバイト数。
  9322. \return BAD_FUNC_ARG ポインタパラメータがNULLの場合、SZは0未満またはTLSV1.3を使用しない。
  9323. \return SIDE_ERROR クライアントで呼び出された場合。
  9324. \return WOLFSSL_FATAL_ERROR 接続を受け入れると失敗した場合
  9325. _Example_
  9326. \code
  9327. int ret = 0;
  9328. int err = 0;
  9329. WOLFSSL* ssl;
  9330. byte earlyData[128];
  9331. int outSz;
  9332. char buffer[80];
  9333. ...
  9334. ret = wolfSSL_read_early_data(ssl, earlyData, sizeof(earlyData), &outSz);
  9335. if (ret != SSL_SUCCESS) {
  9336. err = wolfSSL_get_error(ssl, ret);
  9337. printf(“error = %d, %s\n”, err, wolfSSL_ERR_error_string(err, buffer));
  9338. }
  9339. if (outSz > 0) {
  9340. // early data available
  9341. }
  9342. ret = wolfSSL_accept_TLSv13(ssl);
  9343. if (ret != SSL_SUCCESS) {
  9344. err = wolfSSL_get_error(ssl, ret);
  9345. printf(“error = %d, %s\n”, err, wolfSSL_ERR_error_string(err, buffer));
  9346. }
  9347. \endcode
  9348. \sa wolfSSL_write_early_data
  9349. \sa wolfSSL_accept
  9350. \sa wolfSSL_accept_TLSv13
  9351. */
  9352. int wolfSSL_read_early_data(WOLFSSL* ssl, void* data, int sz,
  9353. int* outSz);
  9354. /*!
  9355. \ingroup Setup
  9356. \brief この関数は、TLS v1.3接続のプレシェア鍵(PSK)クライアント側コールバックを設定します。コールバックはPSKアイデンティティを見つけ、そのキーと、ハンドシェイクに使用する暗号の名前を返します。この関数は、WOLFSSL_CTX構造体のclient_psk_tls13_cbメンバーを設定します。
  9357. \param [in,out] ctx wolfSSL_CTX_new()で作成されたWOLFSSL_CTX構造体へのポインタ。
  9358. _Example_
  9359. \code
  9360. WOLFSSL_CTX* ctx;
  9361. ...
  9362. wolfSSL_CTX_set_psk_client_tls13_callback(ctx, my_psk_client_tls13_cb);
  9363. \endcode
  9364. \sa wolfSSL_set_psk_client_tls13_callback
  9365. \sa wolfSSL_CTX_set_psk_server_tls13_callback
  9366. \sa wolfSSL_set_psk_server_tls13_callback
  9367. */
  9368. void wolfSSL_CTX_set_psk_client_tls13_callback(WOLFSSL_CTX* ctx,
  9369. wc_psk_client_tls13_callback cb);
  9370. /*!
  9371. \ingroup Setup
  9372. \brief この関数は、TLS v1.3接続のプレシェアキー(PSK)クライアント側コールバックを設定します。コールバックはPSKアイデンティティを見つけ、そのキーと、ハンドシェイクに使用する暗号の名前を返します。この関数は、wolfssl構造体のOptionsフィールドのclient_psk_tls13_cbメンバーを設定します。
  9373. \param [in,out] ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  9374. _Example_
  9375. \code
  9376. WOLFSSL* ssl;
  9377. ...
  9378. wolfSSL_set_psk_client_tls13_callback(ssl, my_psk_client_tls13_cb);
  9379. \endcode
  9380. \sa wolfSSL_CTX_set_psk_client_tls13_callback
  9381. \sa wolfSSL_CTX_set_psk_server_tls13_callback
  9382. \sa wolfSSL_set_psk_server_tls13_callback
  9383. */
  9384. void wolfSSL_set_psk_client_tls13_callback(WOLFSSL* ssl,
  9385. wc_psk_client_tls13_callback cb);
  9386. /*!
  9387. \ingroup Setup
  9388. \brief この関数は、TLS v1.3接続用の事前共有鍵(PSK)サーバ側コールバックを設定します。コールバックはPSKアイデンティティを見つけ、そのキーと、ハンドシェイクに使用する暗号の名前を返します。この関数は、wolfssl_ctx構造体のserver_psk_tls13_cbメンバーを設定します。
  9389. \param [in,out] ctx wolfSSL_CTX_new()で作成されたWOLFSSL_CTX構造体へのポインタ。
  9390. _Example_
  9391. \code
  9392. WOLFSSL_CTX* ctx;
  9393. ...
  9394. wolfSSL_CTX_set_psk_server_tls13_callback(ctx, my_psk_client_tls13_cb);
  9395. \endcode
  9396. \sa wolfSSL_CTX_set_psk_client_tls13_callback
  9397. \sa wolfSSL_set_psk_client_tls13_callback
  9398. \sa wolfSSL_set_psk_server_tls13_callback
  9399. */
  9400. void wolfSSL_CTX_set_psk_server_tls13_callback(WOLFSSL_CTX* ctx,
  9401. wc_psk_server_tls13_callback cb);
  9402. /*!
  9403. \ingroup Setup
  9404. \brief この関数は、TLS v1.3接続用の事前共有鍵(PSK)サーバ側コールバックを設定します。コールバックはPSKアイデンティティを見つけ、そのキーと、ハンドシェイクに使用する暗号の名前を返します。この関数は、wolfssl構造体のオプションフィールドのserver_psk_tls13_cbメンバーを設定します。
  9405. \param [in,out] ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  9406. _Example_
  9407. \code
  9408. WOLFSSL* ssl;
  9409. ...
  9410. wolfSSL_set_psk_server_tls13_callback(ssl, my_psk_server_tls13_cb);
  9411. \endcode
  9412. \sa wolfSSL_CTX_set_psk_client_tls13_callback
  9413. \sa wolfSSL_set_psk_client_tls13_callback
  9414. \sa wolfSSL_CTX_set_psk_server_tls13_callback
  9415. */
  9416. void wolfSSL_set_psk_server_tls13_callback(WOLFSSL* ssl,
  9417. wc_psk_server_tls13_callback cb);
  9418. /*!
  9419. \ingroup Setup
  9420. \brief この関数は、キーペアの生成を含むグループからキーシェアエントリを作成します。Keyshareエクステンションには、鍵交換のための生成されたすべての公開鍵が含まれています。この関数が呼び出されると、指定されたグループのみが含まれます。優先グループがサーバーに対して以前に確立されているときにこの関数を呼び出します。
  9421. \param [in,out] ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  9422. \param [in] キー交換グループ識別子をグループ化します。
  9423. \return BAD_FUNC_ARG sslがNULLの場合に返されます。
  9424. \return MEMORY_E 動的メモリ割り当てに失敗すると返されます。
  9425. _Example_
  9426. \code
  9427. int ret;
  9428. WOLFSSL* ssl;
  9429. ...
  9430. ret = wolfSSL_UseKeyShare(ssl, WOLFSSL_ECC_X25519);
  9431. if (ret != WOLFSSL_SUCCESS) {
  9432. // failed to set key share
  9433. }
  9434. \endcode
  9435. \sa wolfSSL_preferred_group
  9436. \sa wolfSSL_CTX_set1_groups_list
  9437. \sa wolfSSL_set1_groups_list
  9438. \sa wolfSSL_CTX_set_groups
  9439. \sa wolfSSL_set_groups
  9440. \sa wolfSSL_NoKeyShares
  9441. */
  9442. int wolfSSL_UseKeyShare(WOLFSSL* ssl, word16 group);
  9443. /*!
  9444. \ingroup Setup
  9445. \brief この関数は、ClientHelloで鍵共有が送信されないように呼び出されます。これにより、ハンドシェイクに鍵交換が必要な場合は、サーバーがHelloretryRequestで応答するように強制します。予想される鍵交換グループが知られておらず、キーの生成を不必要に回避するときにこの機能を呼び出します。鍵交換が必要なときにハンドシェイクを完了するために追加の往復が必要になることに注意してください。
  9446. \param [in,out] ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  9447. \return BAD_FUNC_ARG sslがNULLの場合に返されます。
  9448. \return SIDE_ERROR サーバーで呼び出された場合。
  9449. _Example_
  9450. \code
  9451. int ret;
  9452. WOLFSSL* ssl;
  9453. ...
  9454. ret = wolfSSL_NoKeyShares(ssl);
  9455. if (ret != WOLFSSL_SUCCESS) {
  9456. // failed to set no key shares
  9457. }
  9458. \endcode
  9459. \sa wolfSSL_UseKeyShare
  9460. */
  9461. int wolfSSL_NoKeyShares(WOLFSSL* ssl);
  9462. /*!
  9463. \ingroup Setup
  9464. \brief この関数は、アプリケーションがサーバーであることを示すために使用され、TLS 1.3プロトコルのみをサポートします。この関数は、wolfSSL_CTX_new()を使用してSSL / TLSコンテキストを作成するときに使用される新しいWolfssl_method構造体のメモリを割り当てて初期化します。
  9465. \param [in] ヒープ静的メモリ割り当て中に静的メモリ割り当て器が使用するバッファへのポインタを使用します。
  9466. \return 新しく作成されたwWOLFSSL_METHOS構造体へのポインタを返します。
  9467. _Example_
  9468. \code
  9469. #include <wolfssl/ssl.h>
  9470. WOLFSSL_METHOD* method;
  9471. WOLFSSL_CTX* ctx;
  9472. method = wolfTLSv1_3_server_method_ex(NULL);
  9473. if (method == NULL) {
  9474. // unable to get method
  9475. }
  9476. ctx = wolfSSL_CTX_new(method);
  9477. ...
  9478. \endcode
  9479. \sa wolfSSLv3_server_method
  9480. \sa wolfTLSv1_server_method
  9481. \sa wolfTLSv1_1_server_method
  9482. \sa wolfTLSv1_2_server_method
  9483. \sa wolfTLSv1_3_server_method
  9484. \sa wolfDTLSv1_server_method
  9485. \sa wolfSSLv23_server_method
  9486. \sa wolfSSL_CTX_new
  9487. */
  9488. WOLFSSL_METHOD *wolfTLSv1_3_server_method_ex(void* heap);
  9489. /*!
  9490. \ingroup Setup
  9491. \brief この関数は、アプリケーションがクライアントであることを示すために使用され、TLS 1.3プロトコルのみをサポートします。この関数は、wolfSSL_CTX_new()を使用してSSL / TLSコンテキストを作成するときに使用される新しいWolfssl_method構造体のメモリを割り当てて初期化します。
  9492. \param [in] ヒープ静的メモリ割り当て中に静的メモリ割り当て器が使用するバッファへのポインタを使用します。
  9493. \return 新しく作成されたwWOLFSSL_METHOS構造体へのポインタを返します。
  9494. _Example_
  9495. \code
  9496. #include <wolfssl/ssl.h>
  9497. WOLFSSL_METHOD* method;
  9498. WOLFSSL_CTX* ctx;
  9499. method = wolfTLSv1_3_client_method_ex(NULL);
  9500. if (method == NULL) {
  9501. // unable to get method
  9502. }
  9503. ctx = wolfSSL_CTX_new(method);
  9504. ...
  9505. \endcode
  9506. \sa wolfSSLv3_client_method
  9507. \sa wolfTLSv1_client_method
  9508. \sa wolfTLSv1_1_client_method
  9509. \sa wolfTLSv1_2_client_method
  9510. \sa wolfTLSv1_3_client_method
  9511. \sa wolfDTLSv1_client_method
  9512. \sa wolfSSLv23_client_method
  9513. \sa wolfSSL_CTX_new
  9514. */
  9515. WOLFSSL_METHOD *wolfTLSv1_3_client_method_ex(void* heap);
  9516. /*!
  9517. \ingroup Setup
  9518. \brief この関数は、アプリケーションがサーバーであることを示すために使用され、TLS 1.3プロトコルのみをサポートします。この関数は、wolfSSL_CTX_new()を使用してSSL / TLSコンテキストを作成するときに使用される新しいWolfssl_method構造体のメモリを割り当てて初期化します。
  9519. \return 新しく作成されたwWOLFSSL_METHOS構造体へのポインタを返します。
  9520. _Example_
  9521. \code
  9522. #include <wolfssl/ssl.h>
  9523. WOLFSSL_METHOD* method;
  9524. WOLFSSL_CTX* ctx;
  9525. method = wolfTLSv1_3_server_method();
  9526. if (method == NULL) {
  9527. // unable to get method
  9528. }
  9529. ctx = wolfSSL_CTX_new(method);
  9530. ...
  9531. \endcode
  9532. \sa wolfSSLv3_server_method
  9533. \sa wolfTLSv1_server_method
  9534. \sa wolfTLSv1_1_server_method
  9535. \sa wolfTLSv1_2_server_method
  9536. \sa wolfTLSv1_3_server_method_ex
  9537. \sa wolfDTLSv1_server_method
  9538. \sa wolfSSLv23_server_method
  9539. \sa wolfSSL_CTX_new
  9540. */
  9541. WOLFSSL_METHOD *wolfTLSv1_3_server_method(void);
  9542. /*!
  9543. \ingroup Setup
  9544. \brief この関数は、アプリケーションがクライアントであることを示すために使用され、TLS 1.3プロトコルのみをサポートします。この関数は、wolfSSL_CTX_new()を使用してSSL / TLSコンテキストを作成するときに使用される新しいWolfssl_method構造体のメモリを割り当てて初期化します。
  9545. \return 新しく作成されたwWOLFSSL_METHOS構造体へのポインタを返します。
  9546. _Example_
  9547. \code
  9548. #include <wolfssl/ssl.h>
  9549. WOLFSSL_METHOD* method;
  9550. WOLFSSL_CTX* ctx;
  9551. method = wolfTLSv1_3_client_method();
  9552. if (method == NULL) {
  9553. // unable to get method
  9554. }
  9555. ctx = wolfSSL_CTX_new(method);
  9556. ...
  9557. \endcode
  9558. \sa wolfSSLv3_client_method
  9559. \sa wolfTLSv1_client_method
  9560. \sa wolfTLSv1_1_client_method
  9561. \sa wolfTLSv1_2_client_method
  9562. \sa wolfTLSv1_3_client_method_ex
  9563. \sa wolfDTLSv1_client_method
  9564. \sa wolfSSLv23_client_method
  9565. \sa wolfSSL_CTX_new
  9566. */
  9567. WOLFSSL_METHOD *wolfTLSv1_3_client_method(void);
  9568. /*!
  9569. \ingroup Setup
  9570. \brief この関数は、まだどちらの側(サーバ/クライアント)を決定していないことを除いて、Wolftlsv1_3_client_methodと同様のwolfssl_methodを返します。
  9571. \param [in] ヒープ静的メモリ割り当て中に静的メモリ割り当て器が使用するバッファへのポインタを使用します。
  9572. \return WOLFSSL_METHOD 成功した作成では、wolfssl_methodポインタを返します
  9573. _Example_
  9574. \code
  9575. WOLFSSL* ctx;
  9576. ctx = wolfSSL_CTX_new(wolfTLSv1_3_method_ex(NULL));
  9577. // check ret value
  9578. \endcode
  9579. \sa wolfSSL_new
  9580. \sa wolfSSL_free
  9581. */
  9582. WOLFSSL_METHOD *wolfTLSv1_3_method_ex(void* heap);
  9583. /*!
  9584. \ingroup Setup
  9585. \brief この関数は、まだどちらの側(サーバ/クライアント)を決定していないことを除いて、Wolftlsv1_3_client_methodと同様のwolfssl_methodを返します。
  9586. \return WOLFSSL_METHOD 成功した作成では、wolfssl_methodポインタを返します
  9587. _Example_
  9588. \code
  9589. WOLFSSL* ctx;
  9590. ctx = wolfSSL_CTX_new(wolfTLSv1_3_method());
  9591. // check ret value
  9592. \endcode
  9593. \sa wolfSSL_new
  9594. \sa wolfSSL_free
  9595. */
  9596. WOLFSSL_METHOD *wolfTLSv1_3_method(void);
  9597. /*!
  9598. \ingroup Setup
  9599. \brief この関数はクライアント側で呼び出される場合には、サーバー側にCertificateメッセージで送信できる証明書タイプを設定します。
  9600. サーバー側で呼び出される場合には、受入れ可能なクライアント証明書タイプを設定します。
  9601. Raw Public Key 証明書を送受信したい場合にはこの関数を使って証明書タイプを設定しなければなりません。
  9602. 設定する証明書タイプは優先度順に格納したバイト配列として渡します。
  9603. 設定するバッファアドレスにNULLを渡すか、あるいはバッファサイズに0を渡すと規定値にもどすことができます。
  9604. 規定値はX509証明書(WOLFSSL_CERT_TYPE_X509)のみを扱う設定となっています。
  9605. \return WOLFSSL_SUCCESS 成功
  9606. \return BAD_FUNC_ARG ctxとしてNULLを渡した、あるいは不正な証明書タイプを指定した、
  9607. あるいはMAX_CLIENT_CERT_TYPE_CNT以上のバッファサイズを指定した、あるいは指定の証明書タイプに重複がある
  9608. \param ctx wolfssl_ctxコンテキストポインタ
  9609. \param ctype 証明書タイプを格納したバッファへのポインタ
  9610. \param len 証明書タイプを格納したバッファのサイズ(バイト数)
  9611. _Example_
  9612. \code
  9613. int ret;
  9614. WOLFSSL_CTX* ctx;
  9615. char ctype[] = {WOLFSSL_CERT_TYPE_RPK, WOLFSSL_CERT_TYPE_X509};
  9616. int len = sizeof(ctype)/sizeof(byte);
  9617.  ...
  9618. ret = wolfSSL_CTX_set_client_cert_type(ctx, ctype, len);
  9619. \endcode
  9620. \sa wolfSSL_set_client_cert_type
  9621. \sa wolfSSL_CTX_set_server_cert_type
  9622. \sa wolfSSL_set_server_cert_type
  9623. \sa wolfSSL_get_negotiated_client_cert_type
  9624. \sa wolfSSL_get_negotiated_server_cert_type
  9625. */
  9626. int wolfSSL_CTX_set_client_cert_type(WOLFSSL_CTX* ctx, const char* buf, int len);
  9627. /*!
  9628. \ingroup Setup
  9629. \brief この関数はサーバー側で呼び出される場合には、クライアント側にCertificateメッセージで送信できる証明書タイプを設定します。
  9630. クライアント側で呼び出される場合には、受入れ可能なサーバー証明書タイプを設定します。
  9631. Raw Public Key 証明書を送受信したい場合にはこの関数を使って証明書タイプを設定しなければなりません。
  9632. 設定する証明書タイプは優先度順に格納したバイト配列として渡します。
  9633. 設定するバッファアドレスにNULLを渡すか、あるいはバッファサイズに0を渡すと規定値にもどすことができます。
  9634. 規定値はX509証明書(WOLFSSL_CERT_TYPE_X509)のみを扱う設定となっています。
  9635. \return WOLFSSL_SUCCESS 成功
  9636. \return BAD_FUNC_ARG ctxとしてNULLを渡した、あるいは不正な証明書タイプを指定した、
  9637. あるいはMAX_SERVER_CERT_TYPE_CNT以上のバッファサイズを指定した、あるいは指定の証明書タイプに重複がある
  9638. \param ctx wolfssl_ctxコンテキストポインタ
  9639. \param ctype 証明書タイプを格納したバッファへのポインタ
  9640. \param len 証明書タイプを格納したバッファのサイズ(バイト数)
  9641. _Example_
  9642. \code
  9643. int ret;
  9644. WOLFSSL_CTX* ctx;
  9645. char ctype[] = {WOLFSSL_CERT_TYPE_RPK, WOLFSSL_CERT_TYPE_X509};
  9646. int len = sizeof(ctype)/sizeof(byte);
  9647.  ...
  9648. ret = wolfSSL_CTX_set_server_cert_type(ctx, ctype, len);
  9649. \endcode
  9650. \sa wolfSSL_set_client_cert_type
  9651. \sa wolfSSL_CTX_set_client_cert_type
  9652. \sa wolfSSL_set_server_cert_type
  9653. \sa wolfSSL_get_negotiated_client_cert_type
  9654. \sa wolfSSL_get_negotiated_server_cert_type
  9655. */
  9656. int wolfSSL_CTX_set_server_cert_type(WOLFSSL_CTX* ctx, const char* buf, int len);
  9657. /*!
  9658. \ingroup Setup
  9659. \brief この関数はクライアント側で呼び出される場合には、サーバー側にCertificateメッセージで送信できる証明書タイプを設定します。
  9660. サーバー側で呼び出される場合には、受入れ可能なクライアント証明書タイプを設定します。
  9661. Raw Public Key 証明書を送受信したい場合にはこの関数を使って証明書タイプを設定しなければなりません。
  9662. 設定する証明書タイプは優先度順に格納したバイト配列として渡します。
  9663. 設定するバッファアドレスにNULLを渡すか、あるいはバッファサイズに0を渡すと規定値にもどすことができます。
  9664. 規定値はX509証明書(WOLFSSL_CERT_TYPE_X509)のみを扱う設定となっています。
  9665. \return WOLFSSL_SUCCESS 成功
  9666. \return BAD_FUNC_ARG sslとしてNULLを渡した、あるいは不正な証明書タイプを指定した、
  9667. あるいはMAX_CLIENT_CERT_TYPE_CNT以上のバッファサイズを指定した、あるいは指定の証明書タイプに重複がある
  9668. \param ssl WOLFSSL構造体へのポインタ
  9669. \param ctype 証明書タイプを格納したバッファへのポインタ
  9670. \param len 証明書タイプを格納したバッファのサイズ(バイト数)
  9671. _Example_
  9672. \code
  9673. int ret;
  9674. WOLFSSL* ssl;
  9675. char ctype[] = {WOLFSSL_CERT_TYPE_RPK, WOLFSSL_CERT_TYPE_X509};
  9676. int len = sizeof(ctype)/sizeof(byte);
  9677.  ...
  9678. ret = wolfSSL_set_client_cert_type(ssl, ctype, len);
  9679. \endcode
  9680. \sa wolfSSL_CTX_set_client_cert_type
  9681. \sa wolfSSL_CTX_set_server_cert_type
  9682. \sa wolfSSL_set_server_cert_type
  9683. \sa wolfSSL_get_negotiated_client_cert_type
  9684. \sa wolfSSL_get_negotiated_server_cert_type
  9685. */
  9686. int wolfSSL_set_client_cert_type(WOLFSSL* ssl, const char* buf, int len);
  9687. /*!
  9688. \ingroup Setup
  9689. \brief この関数はサーバー側で呼び出される場合には、クライアント側にCertificateメッセージで送信できる証明書タイプを設定します。
  9690. クライアント側で呼び出される場合には、受入れ可能なサーバー証明書タイプを設定します。
  9691. Raw Public Key 証明書を送受信したい場合にはこの関数を使って証明書タイプを設定しなければなりません。
  9692. 設定する証明書タイプは優先度順に格納したバイト配列として渡します。
  9693. 設定するバッファアドレスにNULLを渡すか、あるいはバッファサイズに0を渡すと規定値にもどすことができます。
  9694. 規定値はX509証明書(WOLFSSL_CERT_TYPE_X509)のみを扱う設定となっています。
  9695. \return WOLFSSL_SUCCESS 成功
  9696. \return BAD_FUNC_ARG ctxとしてNULLを渡した、あるいは不正な証明書タイプを指定した、
  9697. あるいはMAX_SERVER_CERT_TYPE_CNT以上のバッファサイズを指定した、あるいは指定の証明書タイプに重複がある
  9698. \param ssl WOLFSSL構造体へのポインタ
  9699. \param ctype 証明書タイプを格納したバッファへのポインタ
  9700. \param len 証明書タイプを格納したバッファのサイズ(バイト数)
  9701. _Example_
  9702. \code
  9703. int ret;
  9704. WOLFSSL* ssl;
  9705. char ctype[] = {WOLFSSL_CERT_TYPE_RPK, WOLFSSL_CERT_TYPE_X509};
  9706. int len = sizeof(ctype)/sizeof(byte);
  9707.  ...
  9708. ret = wolfSSL_set_server_cert_type(ssl, ctype, len);
  9709. \endcode
  9710. \sa wolfSSL_set_client_cert_type
  9711. \sa wolfSSL_CTX_set_server_cert_type
  9712. \sa wolfSSL_set_server_cert_type
  9713. \sa wolfSSL_get_negotiated_client_cert_type
  9714. \sa wolfSSL_get_negotiated_server_cert_type
  9715. */
  9716. int wolfSSL_set_server_cert_type(WOLFSSL* ssl, const char* buf, int len);
  9717. /*!
  9718. \ingroup SSL
  9719. \brief この関数はハンドシェーク終了後に呼び出し、相手とのネゴシエーションの結果得られたクライアント証明書のタイプを返します。
  9720. ネゴシエーションが発生しない場合には戻り値としてWOLFSSL_SUCCESSが返されますが、
  9721. 証明書タイプとしてはWOLFSSL_CERT_TYPE_UNKNOWNが返されます。
  9722. \return WOLFSSL_SUCCESS 成功時にかえります。tpに返された証明書タイプはWOLFSSL_CERT_TYPE_X509,
  9723. WOLFSSL_CERT_TYPE_RPK あるいはWOLFSSL_CERT_TYPE_UNKNOWNのいずれかとなります。
  9724. \return BAD_FUNC_ARG sslとしてNULLを渡した、あるいはtpとしてNULLを渡した
  9725. \param ssl WOLFSSL構造体へのポインタ
  9726. \param tp 証明書タイプが返されるバッファへのポインタ
  9727. _Example_
  9728. \code
  9729. int ret;
  9730. WOLFSSL* ssl;
  9731. int tp;
  9732.  ...
  9733. ret = wolfSSL_get_negotiated_client_cert_type(ssl, &tp);
  9734. \endcode
  9735. \sa wolfSSL_set_client_cert_type
  9736. \sa wolfSSL_CTX_set_client_cert_type
  9737. \sa wolfSSL_set_server_cert_type
  9738. \sa wolfSSL_CTX_set_server_cert_type
  9739. \sa wolfSSL_get_negotiated_server_cert_type
  9740. */
  9741. int wolfSSL_get_negotiated_client_cert_type(WOLFSSL* ssl, int* tp);
  9742. /*!
  9743. \ingroup SSL
  9744. \brief この関数はハンドシェーク終了後に呼び出し、相手とのネゴシエーションの結果得られたサーバー証明書のタイプを返します。
  9745. ネゴシエーションが発生しない場合には戻り値としてWOLFSSL_SUCCESSが返されますが、証明書タイプとしてはWOLFSSL_CERT_TYPE_UNKNOWNが返されます。
  9746. \return WOLFSSL_SUCCESS 成功時にかえります。tpに返された証明書タイプはWOLFSSL_CERT_TYPE_X509,
  9747. WOLFSSL_CERT_TYPE_RPK あるいはWOLFSSL_CERT_TYPE_UNKNOWNのいずれかとなります。
  9748. \return BAD_FUNC_ARG sslとしてNULLを渡した、あるいはtpとしてNULLを渡した
  9749. \param ssl WOLFSSL構造体へのポインタ
  9750. \param tp 証明書タイプが返されるバッファへのポインタ
  9751. _Example_
  9752. \code
  9753. int ret;
  9754. WOLFSSL* ssl;
  9755. int tp;
  9756.  ...
  9757. ret = wolfSSL_get_negotiated_server_cert_type(ssl, &tp);
  9758. \endcode
  9759. \sa wolfSSL_set_client_cert_type
  9760. \sa wolfSSL_CTX_set_client_cert_type
  9761. \sa wolfSSL_set_server_cert_type
  9762. \sa wolfSSL_CTX_set_server_cert_type
  9763. \sa wolfSSL_get_negotiated_client_cert_type
  9764. */
  9765. int wolfSSL_get_negotiated_server_cert_type(WOLFSSL* ssl, int* tp);
  9766. /*!
  9767. \ingroup SSL
  9768. \brief この関数はテストのための固定/静的なエフェラルキーを設定します。
  9769. \return 0 成功時に返されます。
  9770. \param ctx WOLFSSL_CTXコンテキストポインタ
  9771. \param keyAlgo WC_PK_TYPE_DHおよびWC_PK_TYPE_ECDHのようなenum wc_pktype
  9772. \param key キーファイルパス(Keysz == 0)または実際のキーバッファ(PEMまたはASN.1)
  9773. \param keySz キーサイズ(「キー」argはファイルパスの場合は0になります)
  9774. \sa wolfSSL_CTX_get_ephemeral_key
  9775. */
  9776. int wolfSSL_CTX_set_ephemeral_key(WOLFSSL_CTX* ctx, int keyAlgo, const char* key, unsigned int keySz, int format);
  9777. /*!
  9778. \ingroup SSL
  9779. \brief この関数はテストのための固定/静的なエフェラルキーを設定します。
  9780. \return 0 成功時に返されます。
  9781. \param ssl WOLFSSL構造体へのポインタ
  9782. \param keyAlgo WC_PK_TYPE_DHおよびWC_PK_TYPE_ECDHのようなenum wc_pktype
  9783. \param key キーファイルパス(Keysz == 0)または実際のキーバッファ(PEMまたはASN.1)
  9784. \param keySz キーサイズ(「キー」argはファイルパスの場合は0になります)
  9785. \sa wolfSSL_get_ephemeral_key
  9786. */
  9787. int wolfSSL_set_ephemeral_key(WOLFSSL* ssl, int keyAlgo, const char* key, unsigned int keySz, int format);
  9788. /*!
  9789. \ingroup SSL
  9790. \brief この関数は ASN.1/DERとしてロードされたキーへのポインタを返します
  9791. \return 0 成功時に返されます。
  9792. \param ctx wolfssl_ctxコンテキストポインタ
  9793. \param keyAlgo WC_PK_TYPE_DHおよびWC_PK_TYPE_ECDHのようなenum wc_pktype
  9794. \param key キーバッファポインタ
  9795. \sa wolfSSL_CTX_set_ephemeral_key
  9796. */
  9797. int wolfSSL_CTX_get_ephemeral_key(WOLFSSL_CTX* ctx, int keyAlgo,
  9798. const unsigned char** key, unsigned int* keySz);
  9799. /*!
  9800. \ingroup SSL
  9801. \brief この関数は ASN.1/DERとしてロードされた鍵へのポインタを返します
  9802. \return 0 成功時に返されます。
  9803. \param ssl WOLFSSL構造体へのポインタ
  9804. \param keyAlgo WC_PK_TYPE_DHおよびWC_PK_TYPE_ECDHのようなenum wc_pktype
  9805. \param key キーバッファポインタ
  9806. \sa wolfSSL_set_ephemeral_key
  9807. */
  9808. int wolfSSL_get_ephemeral_key(WOLFSSL* ssl, int keyAlgo,
  9809. const unsigned char** key, unsigned int* keySz);
  9810. /*!
  9811. \ingroup SSL
  9812. \brief 選択したメッセージダイジェスト、パディング、およびRSAキーを使用してメッセージに署名します。
  9813. \return WOLFSSL_SUCCESS 成功時に返されます。
  9814. \return WOLFSSL_FAILURE エラー発生時に返されます。
  9815. \param type ハッシュNID
  9816. \param m 署名するメッセージ。これは署名するメッセージのダイジェスト
  9817. \param mLen 署名するメッセージの長さ
  9818. \param sigRet 出力バッファへのポインタ
  9819. \param sigLen 入力時にはsigRetの長さを指定します。出力時にはsigRetに書き込まれたデータの長さを格納します。
  9820. \param rsa 入力に署名するために使用されるRSA鍵
  9821. \param flag 1:シグニチャ0:未パワード署名を比較する値を出力します。注:RSA_PKCS1_PSS_PADDINGの場合は、wc_rsapss_checkpadding_ex関数を使用して* VERIFY *関数の出力を確認する必要があります。
  9822. \param padding パディング
  9823. */
  9824. int wolfSSL_RSA_sign_generic_padding(int type, const unsigned char* m,
  9825. unsigned int mLen, unsigned char* sigRet,
  9826. unsigned int* sigLen, WOLFSSL_RSA* rsa,
  9827. int flag, int padding);
  9828. /*!
  9829.  \ingroup SSL
  9830.  \brief DTLSv1.3 送信済みだがまだ相手からアクノリッジを受けとっていないメッセージがあるか調べます。
  9831. \return 1 ペンディングのメッセージがある場合に返されます。それ以外は0が返されます。
  9832. \param ssl WOLFSSL構造体へのポインタ。
  9833. */
  9834. int wolfSSL_dtls13_has_pending_msg(WOLFSSL *ssl);
  9835. /*!
  9836. \ingroup SSL
  9837. \brief アーリーデータの最大サイズを取得します。
  9838. \param [in] s WOLFSSL_SESSION構造体へのポインタ
  9839. \return アーリーデータの最大サイズ(max_early_data)
  9840. \param s WOLFSSL_SESSION構造体へのポインタ
  9841. \sa wolfSSL_set_max_early_data
  9842. \sa wolfSSL_write_early_data
  9843. \sa wolfSSL_read_early_data
  9844. */
  9845. unsigned int wolfSSL_SESSION_get_max_early_data(const WOLFSSL_SESSION *s);
  9846. /*!
  9847. \ingroup SSL
  9848. \brief Get a new index for external data. This entry applies also for the
  9849. following API:
  9850. - wolfSSL_CTX_get_ex_new_index
  9851. - wolfSSL_get_ex_new_index
  9852. - wolfSSL_SESSION_get_ex_new_index
  9853. - wolfSSL_X509_get_ex_new_index
  9854. \param [in] All input parameters are ignored. The callback functions are not
  9855. supported with wolfSSL.
  9856. \return The new index value to be used with the external data API for this
  9857. object class.
  9858. */
  9859. int wolfSSL_CRYPTO_get_ex_new_index(int, void*, void*, void*, void*);
  9860. /*!
  9861. \brief コネクションID拡張を有効にします。RFC9146とRFC9147を参照してください。
  9862. \return WOLFSSL_SUCCESS 成功時に返されます。それ以外はエラーコードが返されます。
  9863. \param ssl WOLFSSL構造体へのポインタ。
  9864. \sa wolfSSL_dtls_cid_is_enabled
  9865. \sa wolfSSL_dtls_cid_set
  9866. \sa wolfSSL_dtls_cid_get_rx_size
  9867. \sa wolfSSL_dtls_cid_get_rx
  9868. \sa wolfSSL_dtls_cid_get_tx_size
  9869. \sa wolfSSL_dtls_cid_get_tx
  9870. */
  9871. int wolfSSL_dtls_cid_use(WOLFSSL* ssl);
  9872. /*!
  9873. \brief この関数はハンドシェークが完了した後に呼び出されると、コネクションIDがネゴシエートされたかどうか確認することができます。
  9874. RFC9146とRFC9147を参照してください。
  9875. \return 1 コネクションIDがネゴシエートされた場合に返されます。それ以外は0が返されます。
  9876. \param ssl WOLFSSL構造体へのポインタ。
  9877. \sa wolfSSL_dtls_cid_use
  9878. \sa wolfSSL_dtls_cid_set
  9879. \sa wolfSSL_dtls_cid_get_rx_size
  9880. \sa wolfSSL_dtls_cid_get_rx
  9881. \sa wolfSSL_dtls_cid_get_tx_size
  9882. \sa wolfSSL_dtls_cid_get_tx
  9883. */
  9884. int wolfSSL_dtls_cid_is_enabled(WOLFSSL* ssl);
  9885. /*!
  9886. \brief このコネクションで他のピアに対してレコードを送信するためのコネクションIDをセットします。
  9887. RFC9146とRFC9147を参照してください。コネクションIDは最大値がDTLS_CID_MAX_SIZEでなければなりません。
  9888. DTLS_CID_MAX_SIZEはビルド時に値を指定が可能ですが255バイトをこえることはできません。
  9889. \return WOLFSSL_SUCCESS コネクションIDがセットできた場合に返されます。それ以外はエラーコードが返されます。
  9890. \param ssl WOLFSSL構造体へのポインタ。
  9891. \param cid コネクションID
  9892. \param size コネクションIDのサイズ
  9893. \sa wolfSSL_dtls_cid_use
  9894. \sa wolfSSL_dtls_cid_is_enabled
  9895. \sa wolfSSL_dtls_cid_get_rx_size
  9896. \sa wolfSSL_dtls_cid_get_rx
  9897. \sa wolfSSL_dtls_cid_get_tx_size
  9898. \sa wolfSSL_dtls_cid_get_tx
  9899. */
  9900. int wolfSSL_dtls_cid_set(WOLFSSL* ssl, unsigned char* cid,
  9901. unsigned int size);
  9902. /*!
  9903. \brief コネクションIDのサイズを取得します。RFC9146とRFC9147を参照してください。
  9904. \return WOLFSSL_SUCCESS コネクションIDが取得できた場合に返されます。それ以外はエラーコードが返されます。
  9905. \param ssl WOLFSSL構造体へのポインタ。
  9906. \param size コネクションIDのサイズを格納するint型変数へのポインタ。
  9907. \sa wolfSSL_dtls_cid_use
  9908. \sa wolfSSL_dtls_cid_is_enabled
  9909. \sa wolfSSL_dtls_cid_set
  9910. \sa wolfSSL_dtls_cid_get_rx
  9911. \sa wolfSSL_dtls_cid_get_tx_size
  9912. \sa wolfSSL_dtls_cid_get_tx
  9913. */
  9914. int wolfSSL_dtls_cid_get_rx_size(WOLFSSL* ssl,
  9915. unsigned int* size);
  9916. /*!
  9917. \brief コネクションIDを引数bufferで指定されたバッファにコピーします。
  9918. RFC9146とRFC9147を参照してください。
  9919. バッファのサイズは引数bufferSzで指定してください。
  9920. \return WOLFSSL_SUCCESS コネクションIDが取得できた場合に返されます。それ以外はエラーコードが返されます。
  9921. \param ssl WOLFSSL構造体へのポインタ。
  9922. \param buffer コネクションIDがコピーされる先のバッファへのポインタ。
  9923. \param bufferSz バッファのサイズ
  9924. \sa wolfSSL_dtls_cid_use
  9925. \sa wolfSSL_dtls_cid_is_enabled
  9926. \sa wolfSSL_dtls_cid_set
  9927. \sa wolfSSL_dtls_cid_get_rx_size
  9928. \sa wolfSSL_dtls_cid_get_tx_size
  9929. \sa wolfSSL_dtls_cid_get_tx
  9930. */
  9931. int wolfSSL_dtls_cid_get_rx(WOLFSSL* ssl, unsigned char* buffer,
  9932. unsigned int bufferSz);
  9933. /*!
  9934. \brief コネクションIDのサイズを取得します。c
  9935. サイズは引数size変数に格納されます。
  9936. \return WOLFSSL_SUCCESS コネクションIDのサイズが取得できた場合に返されます。それ以外はエラーコードが返されます。
  9937. \param ssl WOLFSSL構造体へのポインタ。
  9938. \param size コネクションIDのサイズを格納するint型変数へのポインタ。
  9939. \sa wolfSSL_dtls_cid_use
  9940. \sa wolfSSL_dtls_cid_is_enabled
  9941. \sa wolfSSL_dtls_cid_set
  9942. \sa wolfSSL_dtls_cid_get_rx_size
  9943. \sa wolfSSL_dtls_cid_get_rx
  9944. \sa wolfSSL_dtls_cid_get_tx
  9945. */
  9946. int wolfSSL_dtls_cid_get_tx_size(WOLFSSL* ssl, unsigned int* size);
  9947. /*!
  9948. \brief コネクションIDを引き数bufferで指定されるバッファにコピーします。RFC9146とRFC9147を参照してください。
  9949. バッファのサイズは引き数bufferSzで指定します。
  9950. \return WOLFSSL_SUCCESS ConnectionIDが正常にコピーされた際に返されます。それ以外はエラーコードが返されます。
  9951. \param ssl WOLFSSL構造体へのポインタ。
  9952. \param buffer ConnectionIDがコピーされるバッファへのポインタ。
  9953. \param bufferSz バッファのサイズ
  9954. \sa wolfSSL_dtls_cid_use
  9955. \sa wolfSSL_dtls_cid_is_enabled
  9956. \sa wolfSSL_dtls_cid_set
  9957. \sa wolfSSL_dtls_cid_get_rx_size
  9958. \sa wolfSSL_dtls_cid_get_rx
  9959. \sa wolfSSL_dtls_cid_get_tx_size
  9960. */
  9961. int wolfSSL_dtls_cid_get_tx(WOLFSSL* ssl, unsigned char* buffer,
  9962. unsigned int bufferSz);