1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991 |
- /** @file
- Implements the EDK II Crypto Protocol/PPI services using the library services
- from BaseCryptLib and TlsLib.
- Copyright (C) Microsoft Corporation. All rights reserved.
- Copyright (c) 2019 - 2022, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #include <Base.h>
- #include <Library/DebugLib.h>
- #include <Library/BaseCryptLib.h>
- #include <Library/TlsLib.h>
- #include <Protocol/Crypto.h>
- #include <Pcd/PcdCryptoServiceFamilyEnable.h>
- /**
- A macro used to retrieve the FixedAtBuild PcdCryptoServiceFamilyEnable with a
- typecast to its associcted structure type PCD_CRYPTO_SERVICE_FAMILY_ENABLE.
- **/
- #define EDKII_CRYPTO_PCD ((const PCD_CRYPTO_SERVICE_FAMILY_ENABLE *)\
- (FixedPcdGetPtr (PcdCryptoServiceFamilyEnable)))
- /**
- A macro used to call a non-void BaseCryptLib function if it is enabled.
- If a BaseCryptLib function is not enabled, there will be no references to it
- from this module and will be optimized away reducing the size of this module.
- @param Enable The name of the enable field in PCD
- PcdCryptoServiceFamilyEnable for the BaseCryptLib
- function being called. If the value of this field
- is non-zero, then the BaseCryptLib function is
- enabled.
- @param Function The name of the BaseCryptLib function.
- @param Args The argument list to pass to Function.
- @param ErrorReturnValue The value to return if the BaseCryptLib function is
- not enabled.
- **/
- #define CALL_BASECRYPTLIB(Enable, Function, Args, ErrorReturnValue) \
- EDKII_CRYPTO_PCD->Enable \
- ? Function Args \
- : (BaseCryptLibServiceNotEnabled (#Function), ErrorReturnValue)
- /**
- A macro used to call a void BaseCryptLib function if it is enabled.
- If a BaseCryptLib function is not enabled, there will be no references to it
- from this module and will be optimized away reducing the size of this module.
- @param Enable The name of the enable field in PCD
- PcdCryptoServiceFamilyEnable for the BaseCryptLib
- function being called. If the value of this field
- is non-zero, then the BaseCryptLib function is
- enabled.
- @param Function The name of the BaseCryptLib function.
- @param Args The argument list to pass to Function.
- **/
- #define CALL_VOID_BASECRYPTLIB(Enable, Function, Args) \
- EDKII_CRYPTO_PCD->Enable \
- ? Function Args \
- : BaseCryptLibServiceNotEnabled (#Function)
- /**
- Internal worker function that prints a debug message and asserts if a call is
- made to a BaseCryptLib function that is not enabled in the EDK II Crypto
- Protocol/PPI.
- If this debug message and assert are observed, then a module is using
- BaseCryptLib function that is not enabled in a Crypto driver. The
- PcdCryptoServiceFamilyEnable should be updated to enable the missing service.
- @param[in] FunctionName Null-terminated ASCII string that is the name of an
- EDK II Crypto service.
- **/
- static
- VOID
- BaseCryptLibServiceNotEnabled (
- IN CONST CHAR8 *FunctionName
- )
- {
- DEBUG ((DEBUG_ERROR, "[%a] Function %a() is not enabled\n", gEfiCallerBaseName, FunctionName));
- ASSERT_EFI_ERROR (EFI_UNSUPPORTED);
- }
- /**
- Internal worker function that prints a debug message and asserts if a call is
- made to a BaseCryptLib function that is deprecated and unsupported any longer.
- @param[in] FunctionName Null-terminated ASCII string that is the name of an
- EDK II Crypto service.
- **/
- static
- VOID
- BaseCryptLibServiceDeprecated (
- IN CONST CHAR8 *FunctionName
- )
- {
- DEBUG ((DEBUG_ERROR, "[%a] Function %a() is deprecated and unsupported any longer\n", gEfiCallerBaseName, FunctionName));
- ASSERT_EFI_ERROR (EFI_UNSUPPORTED);
- }
- /**
- Returns the version of the EDK II Crypto Protocol.
- @return The version of the EDK II Crypto Protocol.
- **/
- UINTN
- EFIAPI
- CryptoServiceGetCryptoVersion (
- VOID
- )
- {
- return EDKII_CRYPTO_VERSION;
- }
- // =====================================================================================
- // One-Way Cryptographic Hash Primitives
- // =====================================================================================
- /**
- MD4 is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @retval 0 This interface is not supported.
- **/
- UINTN
- EFIAPI
- DeprecatedCryptoServiceMd4GetContextSize (
- VOID
- )
- {
- return BaseCryptLibServiceDeprecated ("Md4GetContextSize"), 0;
- }
- /**
- MD4 is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[out] Md4Context Pointer to MD4 context being initialized.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceMd4Init (
- OUT VOID *Md4Context
- )
- {
- return BaseCryptLibServiceDeprecated ("Md4Init"), FALSE;
- }
- /**
- MD4 is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[in] Md4Context Pointer to MD4 context being copied.
- @param[out] NewMd4Context Pointer to new MD4 context.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceMd4Duplicate (
- IN CONST VOID *Md4Context,
- OUT VOID *NewMd4Context
- )
- {
- return BaseCryptLibServiceDeprecated ("Md4Duplicate"), FALSE;
- }
- /**
- MD4 is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[in, out] Md4Context Pointer to the MD4 context.
- @param[in] Data Pointer to the buffer containing the data to be hashed.
- @param[in] DataSize Size of Data buffer in bytes.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceMd4Update (
- IN OUT VOID *Md4Context,
- IN CONST VOID *Data,
- IN UINTN DataSize
- )
- {
- return BaseCryptLibServiceDeprecated ("Md4Update"), FALSE;
- }
- /**
- MD4 is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[in, out] Md4Context Pointer to the MD4 context.
- @param[out] HashValue Pointer to a buffer that receives the MD4 digest
- value (16 bytes).
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceMd4Final (
- IN OUT VOID *Md4Context,
- OUT UINT8 *HashValue
- )
- {
- return BaseCryptLibServiceDeprecated ("Md4Final"), FALSE;
- }
- /**
- MD4 is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[in] Data Pointer to the buffer containing the data to be hashed.
- @param[in] DataSize Size of Data buffer in bytes.
- @param[out] HashValue Pointer to a buffer that receives the MD4 digest
- value (16 bytes).
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceMd4HashAll (
- IN CONST VOID *Data,
- IN UINTN DataSize,
- OUT UINT8 *HashValue
- )
- {
- return BaseCryptLibServiceDeprecated ("Md4HashAll"), FALSE;
- }
- #ifndef ENABLE_MD5_DEPRECATED_INTERFACES
- /**
- Retrieves the size, in bytes, of the context buffer required for MD5 hash operations.
- If this interface is not supported, then return zero.
- @retval 0 This interface is not supported.
- **/
- UINTN
- EFIAPI
- DeprecatedCryptoServiceMd5GetContextSize (
- VOID
- )
- {
- return BaseCryptLibServiceDeprecated ("Md5GetContextSize"), 0;
- }
- /**
- Initializes user-supplied memory pointed by Md5Context as MD5 hash context for
- subsequent use.
- If Md5Context is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[out] Md5Context Pointer to MD5 context being initialized.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceMd5Init (
- OUT VOID *Md5Context
- )
- {
- return BaseCryptLibServiceDeprecated ("Md5Init"), FALSE;
- }
- /**
- Makes a copy of an existing MD5 context.
- If Md5Context is NULL, then return FALSE.
- If NewMd5Context is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] Md5Context Pointer to MD5 context being copied.
- @param[out] NewMd5Context Pointer to new MD5 context.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceMd5Duplicate (
- IN CONST VOID *Md5Context,
- OUT VOID *NewMd5Context
- )
- {
- return BaseCryptLibServiceDeprecated ("Md5Init"), FALSE;
- }
- /**
- Digests the input data and updates MD5 context.
- This function performs MD5 digest on a data buffer of the specified size.
- It can be called multiple times to compute the digest of long or discontinuous data streams.
- MD5 context should be already correctly initialized by Md5Init(), and should not be finalized
- by Md5Final(). Behavior with invalid context is undefined.
- If Md5Context is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in, out] Md5Context Pointer to the MD5 context.
- @param[in] Data Pointer to the buffer containing the data to be hashed.
- @param[in] DataSize Size of Data buffer in bytes.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceMd5Update (
- IN OUT VOID *Md5Context,
- IN CONST VOID *Data,
- IN UINTN DataSize
- )
- {
- return BaseCryptLibServiceDeprecated ("Md5Init"), FALSE;
- }
- /**
- Completes computation of the MD5 digest value.
- This function completes MD5 hash computation and retrieves the digest value into
- the specified memory. After this function has been called, the MD5 context cannot
- be used again.
- MD5 context should be already correctly initialized by Md5Init(), and should not be
- finalized by Md5Final(). Behavior with invalid MD5 context is undefined.
- If Md5Context is NULL, then return FALSE.
- If HashValue is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in, out] Md5Context Pointer to the MD5 context.
- @param[out] HashValue Pointer to a buffer that receives the MD5 digest
- value (16 bytes).
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceMd5Final (
- IN OUT VOID *Md5Context,
- OUT UINT8 *HashValue
- )
- {
- return BaseCryptLibServiceDeprecated ("Md5Final"), FALSE;
- }
- /**
- Computes the MD5 message digest of a input data buffer.
- This function performs the MD5 message digest of a given data buffer, and places
- the digest value into the specified memory.
- If this interface is not supported, then return FALSE.
- @param[in] Data Pointer to the buffer containing the data to be hashed.
- @param[in] DataSize Size of Data buffer in bytes.
- @param[out] HashValue Pointer to a buffer that receives the MD5 digest
- value (16 bytes).
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceMd5HashAll (
- IN CONST VOID *Data,
- IN UINTN DataSize,
- OUT UINT8 *HashValue
- )
- {
- return BaseCryptLibServiceDeprecated ("Md5HashAll"), FALSE;
- }
- #else
- /**
- Retrieves the size, in bytes, of the context buffer required for MD5 hash operations.
- If this interface is not supported, then return zero.
- @return The size, in bytes, of the context buffer required for MD5 hash operations.
- @retval 0 This interface is not supported.
- **/
- UINTN
- EFIAPI
- CryptoServiceMd5GetContextSize (
- VOID
- )
- {
- return CALL_BASECRYPTLIB (Md5.Services.GetContextSize, Md5GetContextSize, (), 0);
- }
- /**
- Initializes user-supplied memory pointed by Md5Context as MD5 hash context for
- subsequent use.
- If Md5Context is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[out] Md5Context Pointer to MD5 context being initialized.
- @retval TRUE MD5 context initialization succeeded.
- @retval FALSE MD5 context initialization failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceMd5Init (
- OUT VOID *Md5Context
- )
- {
- return CALL_BASECRYPTLIB (Md5.Services.Init, Md5Init, (Md5Context), FALSE);
- }
- /**
- Makes a copy of an existing MD5 context.
- If Md5Context is NULL, then return FALSE.
- If NewMd5Context is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] Md5Context Pointer to MD5 context being copied.
- @param[out] NewMd5Context Pointer to new MD5 context.
- @retval TRUE MD5 context copy succeeded.
- @retval FALSE MD5 context copy failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceMd5Duplicate (
- IN CONST VOID *Md5Context,
- OUT VOID *NewMd5Context
- )
- {
- return CALL_BASECRYPTLIB (Md5.Services.Duplicate, Md5Duplicate, (Md5Context, NewMd5Context), FALSE);
- }
- /**
- Digests the input data and updates MD5 context.
- This function performs MD5 digest on a data buffer of the specified size.
- It can be called multiple times to compute the digest of long or discontinuous data streams.
- MD5 context should be already correctly initialized by Md5Init(), and should not be finalized
- by Md5Final(). Behavior with invalid context is undefined.
- If Md5Context is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in, out] Md5Context Pointer to the MD5 context.
- @param[in] Data Pointer to the buffer containing the data to be hashed.
- @param[in] DataSize Size of Data buffer in bytes.
- @retval TRUE MD5 data digest succeeded.
- @retval FALSE MD5 data digest failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceMd5Update (
- IN OUT VOID *Md5Context,
- IN CONST VOID *Data,
- IN UINTN DataSize
- )
- {
- return CALL_BASECRYPTLIB (Md5.Services.Update, Md5Update, (Md5Context, Data, DataSize), FALSE);
- }
- /**
- Completes computation of the MD5 digest value.
- This function completes MD5 hash computation and retrieves the digest value into
- the specified memory. After this function has been called, the MD5 context cannot
- be used again.
- MD5 context should be already correctly initialized by Md5Init(), and should not be
- finalized by Md5Final(). Behavior with invalid MD5 context is undefined.
- If Md5Context is NULL, then return FALSE.
- If HashValue is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in, out] Md5Context Pointer to the MD5 context.
- @param[out] HashValue Pointer to a buffer that receives the MD5 digest
- value (16 bytes).
- @retval TRUE MD5 digest computation succeeded.
- @retval FALSE MD5 digest computation failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceMd5Final (
- IN OUT VOID *Md5Context,
- OUT UINT8 *HashValue
- )
- {
- return CALL_BASECRYPTLIB (Md5.Services.Final, Md5Final, (Md5Context, HashValue), FALSE);
- }
- /**
- Computes the MD5 message digest of a input data buffer.
- This function performs the MD5 message digest of a given data buffer, and places
- the digest value into the specified memory.
- If this interface is not supported, then return FALSE.
- @param[in] Data Pointer to the buffer containing the data to be hashed.
- @param[in] DataSize Size of Data buffer in bytes.
- @param[out] HashValue Pointer to a buffer that receives the MD5 digest
- value (16 bytes).
- @retval TRUE MD5 digest computation succeeded.
- @retval FALSE MD5 digest computation failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceMd5HashAll (
- IN CONST VOID *Data,
- IN UINTN DataSize,
- OUT UINT8 *HashValue
- )
- {
- return CALL_BASECRYPTLIB (Md5.Services.HashAll, Md5HashAll, (Data, DataSize, HashValue), FALSE);
- }
- #endif
- #ifdef DISABLE_SHA1_DEPRECATED_INTERFACES
- /**
- Retrieves the size, in bytes, of the context buffer required for SHA-1 hash operations.
- If this interface is not supported, then return zero.
- @retval 0 This interface is not supported.
- **/
- UINTN
- EFIAPI
- DeprecatedCryptoServiceSha1GetContextSize (
- VOID
- )
- {
- return BaseCryptLibServiceDeprecated ("Sha1GetContextSize"), 0;
- }
- /**
- Initializes user-supplied memory pointed by Sha1Context as SHA-1 hash context for
- subsequent use.
- If Sha1Context is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[out] Sha1Context Pointer to SHA-1 context being initialized.
- @retval TRUE SHA-1 context initialization succeeded.
- @retval FALSE SHA-1 context initialization failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceSha1Init (
- OUT VOID *Sha1Context
- )
- {
- return BaseCryptLibServiceDeprecated ("Sha1Init"), FALSE;
- }
- /**
- Makes a copy of an existing SHA-1 context.
- If Sha1Context is NULL, then return FALSE.
- If NewSha1Context is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] Sha1Context Pointer to SHA-1 context being copied.
- @param[out] NewSha1Context Pointer to new SHA-1 context.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceSha1Duplicate (
- IN CONST VOID *Sha1Context,
- OUT VOID *NewSha1Context
- )
- {
- return BaseCryptLibServiceDeprecated ("Sha1Duplicate"), FALSE;
- }
- /**
- Digests the input data and updates SHA-1 context.
- This function performs SHA-1 digest on a data buffer of the specified size.
- It can be called multiple times to compute the digest of long or discontinuous data streams.
- SHA-1 context should be already correctly initialized by Sha1Init(), and should not be finalized
- by Sha1Final(). Behavior with invalid context is undefined.
- If Sha1Context is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in, out] Sha1Context Pointer to the SHA-1 context.
- @param[in] Data Pointer to the buffer containing the data to be hashed.
- @param[in] DataSize Size of Data buffer in bytes.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceSha1Update (
- IN OUT VOID *Sha1Context,
- IN CONST VOID *Data,
- IN UINTN DataSize
- )
- {
- return BaseCryptLibServiceDeprecated ("Sha1Update"), FALSE;
- }
- /**
- Completes computation of the SHA-1 digest value.
- This function completes SHA-1 hash computation and retrieves the digest value into
- the specified memory. After this function has been called, the SHA-1 context cannot
- be used again.
- SHA-1 context should be already correctly initialized by Sha1Init(), and should not be
- finalized by Sha1Final(). Behavior with invalid SHA-1 context is undefined.
- If Sha1Context is NULL, then return FALSE.
- If HashValue is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in, out] Sha1Context Pointer to the SHA-1 context.
- @param[out] HashValue Pointer to a buffer that receives the SHA-1 digest
- value (20 bytes).
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceSha1Final (
- IN OUT VOID *Sha1Context,
- OUT UINT8 *HashValue
- )
- {
- return BaseCryptLibServiceDeprecated ("Sha1Final"), FALSE;
- }
- /**
- Computes the SHA-1 message digest of a input data buffer.
- This function performs the SHA-1 message digest of a given data buffer, and places
- the digest value into the specified memory.
- If this interface is not supported, then return FALSE.
- @param[in] Data Pointer to the buffer containing the data to be hashed.
- @param[in] DataSize Size of Data buffer in bytes.
- @param[out] HashValue Pointer to a buffer that receives the SHA-1 digest
- value (20 bytes).
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceSha1HashAll (
- IN CONST VOID *Data,
- IN UINTN DataSize,
- OUT UINT8 *HashValue
- )
- {
- return BaseCryptLibServiceDeprecated ("Sha1HashAll"), FALSE;
- }
- #else
- /**
- Retrieves the size, in bytes, of the context buffer required for SHA-1 hash operations.
- If this interface is not supported, then return zero.
- @return The size, in bytes, of the context buffer required for SHA-1 hash operations.
- @retval 0 This interface is not supported.
- **/
- UINTN
- EFIAPI
- CryptoServiceSha1GetContextSize (
- VOID
- )
- {
- return CALL_BASECRYPTLIB (Sha1.Services.GetContextSize, Sha1GetContextSize, (), 0);
- }
- /**
- Initializes user-supplied memory pointed by Sha1Context as SHA-1 hash context for
- subsequent use.
- If Sha1Context is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[out] Sha1Context Pointer to SHA-1 context being initialized.
- @retval TRUE SHA-1 context initialization succeeded.
- @retval FALSE SHA-1 context initialization failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceSha1Init (
- OUT VOID *Sha1Context
- )
- {
- return CALL_BASECRYPTLIB (Sha1.Services.Init, Sha1Init, (Sha1Context), FALSE);
- }
- /**
- Makes a copy of an existing SHA-1 context.
- If Sha1Context is NULL, then return FALSE.
- If NewSha1Context is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] Sha1Context Pointer to SHA-1 context being copied.
- @param[out] NewSha1Context Pointer to new SHA-1 context.
- @retval TRUE SHA-1 context copy succeeded.
- @retval FALSE SHA-1 context copy failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceSha1Duplicate (
- IN CONST VOID *Sha1Context,
- OUT VOID *NewSha1Context
- )
- {
- return CALL_BASECRYPTLIB (Sha1.Services.Duplicate, Sha1Duplicate, (Sha1Context, NewSha1Context), FALSE);
- }
- /**
- Digests the input data and updates SHA-1 context.
- This function performs SHA-1 digest on a data buffer of the specified size.
- It can be called multiple times to compute the digest of long or discontinuous data streams.
- SHA-1 context should be already correctly initialized by Sha1Init(), and should not be finalized
- by Sha1Final(). Behavior with invalid context is undefined.
- If Sha1Context is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in, out] Sha1Context Pointer to the SHA-1 context.
- @param[in] Data Pointer to the buffer containing the data to be hashed.
- @param[in] DataSize Size of Data buffer in bytes.
- @retval TRUE SHA-1 data digest succeeded.
- @retval FALSE SHA-1 data digest failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceSha1Update (
- IN OUT VOID *Sha1Context,
- IN CONST VOID *Data,
- IN UINTN DataSize
- )
- {
- return CALL_BASECRYPTLIB (Sha1.Services.Update, Sha1Update, (Sha1Context, Data, DataSize), FALSE);
- }
- /**
- Completes computation of the SHA-1 digest value.
- This function completes SHA-1 hash computation and retrieves the digest value into
- the specified memory. After this function has been called, the SHA-1 context cannot
- be used again.
- SHA-1 context should be already correctly initialized by Sha1Init(), and should not be
- finalized by Sha1Final(). Behavior with invalid SHA-1 context is undefined.
- If Sha1Context is NULL, then return FALSE.
- If HashValue is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in, out] Sha1Context Pointer to the SHA-1 context.
- @param[out] HashValue Pointer to a buffer that receives the SHA-1 digest
- value (20 bytes).
- @retval TRUE SHA-1 digest computation succeeded.
- @retval FALSE SHA-1 digest computation failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceSha1Final (
- IN OUT VOID *Sha1Context,
- OUT UINT8 *HashValue
- )
- {
- return CALL_BASECRYPTLIB (Sha1.Services.Final, Sha1Final, (Sha1Context, HashValue), FALSE);
- }
- /**
- Computes the SHA-1 message digest of a input data buffer.
- This function performs the SHA-1 message digest of a given data buffer, and places
- the digest value into the specified memory.
- If this interface is not supported, then return FALSE.
- @param[in] Data Pointer to the buffer containing the data to be hashed.
- @param[in] DataSize Size of Data buffer in bytes.
- @param[out] HashValue Pointer to a buffer that receives the SHA-1 digest
- value (20 bytes).
- @retval TRUE SHA-1 digest computation succeeded.
- @retval FALSE SHA-1 digest computation failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceSha1HashAll (
- IN CONST VOID *Data,
- IN UINTN DataSize,
- OUT UINT8 *HashValue
- )
- {
- return CALL_BASECRYPTLIB (Sha1.Services.HashAll, Sha1HashAll, (Data, DataSize, HashValue), FALSE);
- }
- #endif
- /**
- Retrieves the size, in bytes, of the context buffer required for SHA-256 hash operations.
- @return The size, in bytes, of the context buffer required for SHA-256 hash operations.
- **/
- UINTN
- EFIAPI
- CryptoServiceSha256GetContextSize (
- VOID
- )
- {
- return CALL_BASECRYPTLIB (Sha256.Services.GetContextSize, Sha256GetContextSize, (), 0);
- }
- /**
- Initializes user-supplied memory pointed by Sha256Context as SHA-256 hash context for
- subsequent use.
- If Sha256Context is NULL, then return FALSE.
- @param[out] Sha256Context Pointer to SHA-256 context being initialized.
- @retval TRUE SHA-256 context initialization succeeded.
- @retval FALSE SHA-256 context initialization failed.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceSha256Init (
- OUT VOID *Sha256Context
- )
- {
- return CALL_BASECRYPTLIB (Sha256.Services.Init, Sha256Init, (Sha256Context), FALSE);
- }
- /**
- Makes a copy of an existing SHA-256 context.
- If Sha256Context is NULL, then return FALSE.
- If NewSha256Context is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] Sha256Context Pointer to SHA-256 context being copied.
- @param[out] NewSha256Context Pointer to new SHA-256 context.
- @retval TRUE SHA-256 context copy succeeded.
- @retval FALSE SHA-256 context copy failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceSha256Duplicate (
- IN CONST VOID *Sha256Context,
- OUT VOID *NewSha256Context
- )
- {
- return CALL_BASECRYPTLIB (Sha256.Services.Duplicate, Sha256Duplicate, (Sha256Context, NewSha256Context), FALSE);
- }
- /**
- Digests the input data and updates SHA-256 context.
- This function performs SHA-256 digest on a data buffer of the specified size.
- It can be called multiple times to compute the digest of long or discontinuous data streams.
- SHA-256 context should be already correctly initialized by Sha256Init(), and should not be finalized
- by Sha256Final(). Behavior with invalid context is undefined.
- If Sha256Context is NULL, then return FALSE.
- @param[in, out] Sha256Context Pointer to the SHA-256 context.
- @param[in] Data Pointer to the buffer containing the data to be hashed.
- @param[in] DataSize Size of Data buffer in bytes.
- @retval TRUE SHA-256 data digest succeeded.
- @retval FALSE SHA-256 data digest failed.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceSha256Update (
- IN OUT VOID *Sha256Context,
- IN CONST VOID *Data,
- IN UINTN DataSize
- )
- {
- return CALL_BASECRYPTLIB (Sha256.Services.Update, Sha256Update, (Sha256Context, Data, DataSize), FALSE);
- }
- /**
- Completes computation of the SHA-256 digest value.
- This function completes SHA-256 hash computation and retrieves the digest value into
- the specified memory. After this function has been called, the SHA-256 context cannot
- be used again.
- SHA-256 context should be already correctly initialized by Sha256Init(), and should not be
- finalized by Sha256Final(). Behavior with invalid SHA-256 context is undefined.
- If Sha256Context is NULL, then return FALSE.
- If HashValue is NULL, then return FALSE.
- @param[in, out] Sha256Context Pointer to the SHA-256 context.
- @param[out] HashValue Pointer to a buffer that receives the SHA-256 digest
- value (32 bytes).
- @retval TRUE SHA-256 digest computation succeeded.
- @retval FALSE SHA-256 digest computation failed.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceSha256Final (
- IN OUT VOID *Sha256Context,
- OUT UINT8 *HashValue
- )
- {
- return CALL_BASECRYPTLIB (Sha256.Services.Final, Sha256Final, (Sha256Context, HashValue), FALSE);
- }
- /**
- Computes the SHA-256 message digest of a input data buffer.
- This function performs the SHA-256 message digest of a given data buffer, and places
- the digest value into the specified memory.
- If this interface is not supported, then return FALSE.
- @param[in] Data Pointer to the buffer containing the data to be hashed.
- @param[in] DataSize Size of Data buffer in bytes.
- @param[out] HashValue Pointer to a buffer that receives the SHA-256 digest
- value (32 bytes).
- @retval TRUE SHA-256 digest computation succeeded.
- @retval FALSE SHA-256 digest computation failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceSha256HashAll (
- IN CONST VOID *Data,
- IN UINTN DataSize,
- OUT UINT8 *HashValue
- )
- {
- return CALL_BASECRYPTLIB (Sha256.Services.HashAll, Sha256HashAll, (Data, DataSize, HashValue), FALSE);
- }
- /**
- Retrieves the size, in bytes, of the context buffer required for SHA-384 hash operations.
- @return The size, in bytes, of the context buffer required for SHA-384 hash operations.
- **/
- UINTN
- EFIAPI
- CryptoServiceSha384GetContextSize (
- VOID
- )
- {
- return CALL_BASECRYPTLIB (Sha384.Services.GetContextSize, Sha384GetContextSize, (), 0);
- }
- /**
- Initializes user-supplied memory pointed by Sha384Context as SHA-384 hash context for
- subsequent use.
- If Sha384Context is NULL, then return FALSE.
- @param[out] Sha384Context Pointer to SHA-384 context being initialized.
- @retval TRUE SHA-384 context initialization succeeded.
- @retval FALSE SHA-384 context initialization failed.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceSha384Init (
- OUT VOID *Sha384Context
- )
- {
- return CALL_BASECRYPTLIB (Sha384.Services.Init, Sha384Init, (Sha384Context), FALSE);
- }
- /**
- Makes a copy of an existing SHA-384 context.
- If Sha384Context is NULL, then return FALSE.
- If NewSha384Context is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] Sha384Context Pointer to SHA-384 context being copied.
- @param[out] NewSha384Context Pointer to new SHA-384 context.
- @retval TRUE SHA-384 context copy succeeded.
- @retval FALSE SHA-384 context copy failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceSha384Duplicate (
- IN CONST VOID *Sha384Context,
- OUT VOID *NewSha384Context
- )
- {
- return CALL_BASECRYPTLIB (Sha384.Services.Duplicate, Sha384Duplicate, (Sha384Context, NewSha384Context), FALSE);
- }
- /**
- Digests the input data and updates SHA-384 context.
- This function performs SHA-384 digest on a data buffer of the specified size.
- It can be called multiple times to compute the digest of long or discontinuous data streams.
- SHA-384 context should be already correctly initialized by Sha384Init(), and should not be finalized
- by Sha384Final(). Behavior with invalid context is undefined.
- If Sha384Context is NULL, then return FALSE.
- @param[in, out] Sha384Context Pointer to the SHA-384 context.
- @param[in] Data Pointer to the buffer containing the data to be hashed.
- @param[in] DataSize Size of Data buffer in bytes.
- @retval TRUE SHA-384 data digest succeeded.
- @retval FALSE SHA-384 data digest failed.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceSha384Update (
- IN OUT VOID *Sha384Context,
- IN CONST VOID *Data,
- IN UINTN DataSize
- )
- {
- return CALL_BASECRYPTLIB (Sha384.Services.Update, Sha384Update, (Sha384Context, Data, DataSize), FALSE);
- }
- /**
- Completes computation of the SHA-384 digest value.
- This function completes SHA-384 hash computation and retrieves the digest value into
- the specified memory. After this function has been called, the SHA-384 context cannot
- be used again.
- SHA-384 context should be already correctly initialized by Sha384Init(), and should not be
- finalized by Sha384Final(). Behavior with invalid SHA-384 context is undefined.
- If Sha384Context is NULL, then return FALSE.
- If HashValue is NULL, then return FALSE.
- @param[in, out] Sha384Context Pointer to the SHA-384 context.
- @param[out] HashValue Pointer to a buffer that receives the SHA-384 digest
- value (48 bytes).
- @retval TRUE SHA-384 digest computation succeeded.
- @retval FALSE SHA-384 digest computation failed.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceSha384Final (
- IN OUT VOID *Sha384Context,
- OUT UINT8 *HashValue
- )
- {
- return CALL_BASECRYPTLIB (Sha384.Services.Final, Sha384Final, (Sha384Context, HashValue), FALSE);
- }
- /**
- Computes the SHA-384 message digest of a input data buffer.
- This function performs the SHA-384 message digest of a given data buffer, and places
- the digest value into the specified memory.
- If this interface is not supported, then return FALSE.
- @param[in] Data Pointer to the buffer containing the data to be hashed.
- @param[in] DataSize Size of Data buffer in bytes.
- @param[out] HashValue Pointer to a buffer that receives the SHA-384 digest
- value (48 bytes).
- @retval TRUE SHA-384 digest computation succeeded.
- @retval FALSE SHA-384 digest computation failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceSha384HashAll (
- IN CONST VOID *Data,
- IN UINTN DataSize,
- OUT UINT8 *HashValue
- )
- {
- return CALL_BASECRYPTLIB (Sha384.Services.HashAll, Sha384HashAll, (Data, DataSize, HashValue), FALSE);
- }
- /**
- Retrieves the size, in bytes, of the context buffer required for SHA-512 hash operations.
- @return The size, in bytes, of the context buffer required for SHA-512 hash operations.
- **/
- UINTN
- EFIAPI
- CryptoServiceSha512GetContextSize (
- VOID
- )
- {
- return CALL_BASECRYPTLIB (Sha512.Services.GetContextSize, Sha512GetContextSize, (), 0);
- }
- /**
- Initializes user-supplied memory pointed by Sha512Context as SHA-512 hash context for
- subsequent use.
- If Sha512Context is NULL, then return FALSE.
- @param[out] Sha512Context Pointer to SHA-512 context being initialized.
- @retval TRUE SHA-512 context initialization succeeded.
- @retval FALSE SHA-512 context initialization failed.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceSha512Init (
- OUT VOID *Sha512Context
- )
- {
- return CALL_BASECRYPTLIB (Sha512.Services.Init, Sha512Init, (Sha512Context), FALSE);
- }
- /**
- Makes a copy of an existing SHA-512 context.
- If Sha512Context is NULL, then return FALSE.
- If NewSha512Context is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] Sha512Context Pointer to SHA-512 context being copied.
- @param[out] NewSha512Context Pointer to new SHA-512 context.
- @retval TRUE SHA-512 context copy succeeded.
- @retval FALSE SHA-512 context copy failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceSha512Duplicate (
- IN CONST VOID *Sha512Context,
- OUT VOID *NewSha512Context
- )
- {
- return CALL_BASECRYPTLIB (Sha512.Services.Duplicate, Sha512Duplicate, (Sha512Context, NewSha512Context), FALSE);
- }
- /**
- Digests the input data and updates SHA-512 context.
- This function performs SHA-512 digest on a data buffer of the specified size.
- It can be called multiple times to compute the digest of long or discontinuous data streams.
- SHA-512 context should be already correctly initialized by Sha512Init(), and should not be finalized
- by Sha512Final(). Behavior with invalid context is undefined.
- If Sha512Context is NULL, then return FALSE.
- @param[in, out] Sha512Context Pointer to the SHA-512 context.
- @param[in] Data Pointer to the buffer containing the data to be hashed.
- @param[in] DataSize Size of Data buffer in bytes.
- @retval TRUE SHA-512 data digest succeeded.
- @retval FALSE SHA-512 data digest failed.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceSha512Update (
- IN OUT VOID *Sha512Context,
- IN CONST VOID *Data,
- IN UINTN DataSize
- )
- {
- return CALL_BASECRYPTLIB (Sha512.Services.Update, Sha512Update, (Sha512Context, Data, DataSize), FALSE);
- }
- /**
- Completes computation of the SHA-512 digest value.
- This function completes SHA-512 hash computation and retrieves the digest value into
- the specified memory. After this function has been called, the SHA-512 context cannot
- be used again.
- SHA-512 context should be already correctly initialized by Sha512Init(), and should not be
- finalized by Sha512Final(). Behavior with invalid SHA-512 context is undefined.
- If Sha512Context is NULL, then return FALSE.
- If HashValue is NULL, then return FALSE.
- @param[in, out] Sha512Context Pointer to the SHA-512 context.
- @param[out] HashValue Pointer to a buffer that receives the SHA-512 digest
- value (64 bytes).
- @retval TRUE SHA-512 digest computation succeeded.
- @retval FALSE SHA-512 digest computation failed.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceSha512Final (
- IN OUT VOID *Sha512Context,
- OUT UINT8 *HashValue
- )
- {
- return CALL_BASECRYPTLIB (Sha512.Services.Final, Sha512Final, (Sha512Context, HashValue), FALSE);
- }
- /**
- Computes the SHA-512 message digest of a input data buffer.
- This function performs the SHA-512 message digest of a given data buffer, and places
- the digest value into the specified memory.
- If this interface is not supported, then return FALSE.
- @param[in] Data Pointer to the buffer containing the data to be hashed.
- @param[in] DataSize Size of Data buffer in bytes.
- @param[out] HashValue Pointer to a buffer that receives the SHA-512 digest
- value (64 bytes).
- @retval TRUE SHA-512 digest computation succeeded.
- @retval FALSE SHA-512 digest computation failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceSha512HashAll (
- IN CONST VOID *Data,
- IN UINTN DataSize,
- OUT UINT8 *HashValue
- )
- {
- return CALL_BASECRYPTLIB (Sha512.Services.HashAll, Sha512HashAll, (Data, DataSize, HashValue), FALSE);
- }
- /**
- Retrieves the size, in bytes, of the context buffer required for SM3 hash operations.
- @return The size, in bytes, of the context buffer required for SM3 hash operations.
- **/
- UINTN
- EFIAPI
- CryptoServiceSm3GetContextSize (
- VOID
- )
- {
- return CALL_BASECRYPTLIB (Sm3.Services.GetContextSize, Sm3GetContextSize, (), 0);
- }
- /**
- Initializes user-supplied memory pointed by Sm3Context as SM3 hash context for
- subsequent use.
- If Sm3Context is NULL, then return FALSE.
- @param[out] Sm3Context Pointer to SM3 context being initialized.
- @retval TRUE SM3 context initialization succeeded.
- @retval FALSE SM3 context initialization failed.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceSm3Init (
- OUT VOID *Sm3Context
- )
- {
- return CALL_BASECRYPTLIB (Sm3.Services.Init, Sm3Init, (Sm3Context), FALSE);
- }
- /**
- Makes a copy of an existing SM3 context.
- If Sm3Context is NULL, then return FALSE.
- If NewSm3Context is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] Sm3Context Pointer to SM3 context being copied.
- @param[out] NewSm3Context Pointer to new SM3 context.
- @retval TRUE SM3 context copy succeeded.
- @retval FALSE SM3 context copy failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceSm3Duplicate (
- IN CONST VOID *Sm3Context,
- OUT VOID *NewSm3Context
- )
- {
- return CALL_BASECRYPTLIB (Sm3.Services.Duplicate, Sm3Duplicate, (Sm3Context, NewSm3Context), FALSE);
- }
- /**
- Digests the input data and updates SM3 context.
- This function performs SM3 digest on a data buffer of the specified size.
- It can be called multiple times to compute the digest of long or discontinuous data streams.
- SM3 context should be already correctly initialized by Sm3Init(), and should not be finalized
- by Sm3Final(). Behavior with invalid context is undefined.
- If Sm3Context is NULL, then return FALSE.
- @param[in, out] Sm3Context Pointer to the SM3 context.
- @param[in] Data Pointer to the buffer containing the data to be hashed.
- @param[in] DataSize Size of Data buffer in bytes.
- @retval TRUE SM3 data digest succeeded.
- @retval FALSE SM3 data digest failed.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceSm3Update (
- IN OUT VOID *Sm3Context,
- IN CONST VOID *Data,
- IN UINTN DataSize
- )
- {
- return CALL_BASECRYPTLIB (Sm3.Services.Update, Sm3Update, (Sm3Context, Data, DataSize), FALSE);
- }
- /**
- Completes computation of the SM3 digest value.
- This function completes SM3 hash computation and retrieves the digest value into
- the specified memory. After this function has been called, the SM3 context cannot
- be used again.
- SM3 context should be already correctly initialized by Sm3Init(), and should not be
- finalized by Sm3Final(). Behavior with invalid SM3 context is undefined.
- If Sm3Context is NULL, then return FALSE.
- If HashValue is NULL, then return FALSE.
- @param[in, out] Sm3Context Pointer to the SM3 context.
- @param[out] HashValue Pointer to a buffer that receives the SM3 digest
- value (32 bytes).
- @retval TRUE SM3 digest computation succeeded.
- @retval FALSE SM3 digest computation failed.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceSm3Final (
- IN OUT VOID *Sm3Context,
- OUT UINT8 *HashValue
- )
- {
- return CALL_BASECRYPTLIB (Sm3.Services.Final, Sm3Final, (Sm3Context, HashValue), FALSE);
- }
- /**
- Computes the SM3 message digest of a input data buffer.
- This function performs the SM3 message digest of a given data buffer, and places
- the digest value into the specified memory.
- If this interface is not supported, then return FALSE.
- @param[in] Data Pointer to the buffer containing the data to be hashed.
- @param[in] DataSize Size of Data buffer in bytes.
- @param[out] HashValue Pointer to a buffer that receives the SM3 digest
- value (32 bytes).
- @retval TRUE SM3 digest computation succeeded.
- @retval FALSE SM3 digest computation failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceSm3HashAll (
- IN CONST VOID *Data,
- IN UINTN DataSize,
- OUT UINT8 *HashValue
- )
- {
- return CALL_BASECRYPTLIB (Sm3.Services.HashAll, Sm3HashAll, (Data, DataSize, HashValue), FALSE);
- }
- // =====================================================================================
- // MAC (Message Authentication Code) Primitive
- // =====================================================================================
- /**
- HMAC MD5 is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @retval NULL This interface is not supported.
- **/
- VOID *
- EFIAPI
- DeprecatedCryptoServiceHmacMd5New (
- VOID
- )
- {
- return BaseCryptLibServiceDeprecated ("HmacMd5New"), NULL;
- }
- /**
- HMAC MD5 is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[in] HmacMd5Ctx Pointer to the HMAC_CTX context to be released.
- **/
- VOID
- EFIAPI
- DeprecatedCryptoServiceHmacMd5Free (
- IN VOID *HmacMd5Ctx
- )
- {
- BaseCryptLibServiceDeprecated ("HmacMd5Free");
- }
- /**
- HMAC MD5 is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[out] HmacMd5Context Pointer to HMAC-MD5 context.
- @param[in] Key Pointer to the user-supplied key.
- @param[in] KeySize Key size in bytes.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceHmacMd5SetKey (
- OUT VOID *HmacMd5Context,
- IN CONST UINT8 *Key,
- IN UINTN KeySize
- )
- {
- return BaseCryptLibServiceDeprecated ("HmacMd5SetKey"), FALSE;
- }
- /**
- HMAC MD5 is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[in] HmacMd5Context Pointer to HMAC-MD5 context being copied.
- @param[out] NewHmacMd5Context Pointer to new HMAC-MD5 context.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceHmacMd5Duplicate (
- IN CONST VOID *HmacMd5Context,
- OUT VOID *NewHmacMd5Context
- )
- {
- return BaseCryptLibServiceDeprecated ("HmacMd5Duplicate"), FALSE;
- }
- /**
- HMAC MD5 is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[in, out] HmacMd5Context Pointer to the HMAC-MD5 context.
- @param[in] Data Pointer to the buffer containing the data to be digested.
- @param[in] DataSize Size of Data buffer in bytes.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceHmacMd5Update (
- IN OUT VOID *HmacMd5Context,
- IN CONST VOID *Data,
- IN UINTN DataSize
- )
- {
- return BaseCryptLibServiceDeprecated ("HmacMd5Update"), FALSE;
- }
- /**
- HMAC MD5 is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[in, out] HmacMd5Context Pointer to the HMAC-MD5 context.
- @param[out] HmacValue Pointer to a buffer that receives the HMAC-MD5 digest
- value (16 bytes).
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceHmacMd5Final (
- IN OUT VOID *HmacMd5Context,
- OUT UINT8 *HmacValue
- )
- {
- return BaseCryptLibServiceDeprecated ("HmacMd5Final"), FALSE;
- }
- /**
- HMAC SHA1 is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @return NULL This interface is not supported.
- **/
- VOID *
- EFIAPI
- DeprecatedCryptoServiceHmacSha1New (
- VOID
- )
- {
- return BaseCryptLibServiceDeprecated ("HmacSha1New"), NULL;
- }
- /**
- HMAC SHA1 is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[in] HmacSha1Ctx Pointer to the HMAC_CTX context to be released.
- **/
- VOID
- EFIAPI
- DeprecatedCryptoServiceHmacSha1Free (
- IN VOID *HmacSha1Ctx
- )
- {
- BaseCryptLibServiceDeprecated ("HmacSha1Free");
- }
- /**
- HMAC SHA1 is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[out] HmacSha1Context Pointer to HMAC-SHA1 context.
- @param[in] Key Pointer to the user-supplied key.
- @param[in] KeySize Key size in bytes.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceHmacSha1SetKey (
- OUT VOID *HmacSha1Context,
- IN CONST UINT8 *Key,
- IN UINTN KeySize
- )
- {
- return BaseCryptLibServiceDeprecated ("HmacSha1SetKey"), FALSE;
- }
- /**
- HMAC SHA1 is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[in] HmacSha1Context Pointer to HMAC-SHA1 context being copied.
- @param[out] NewHmacSha1Context Pointer to new HMAC-SHA1 context.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceHmacSha1Duplicate (
- IN CONST VOID *HmacSha1Context,
- OUT VOID *NewHmacSha1Context
- )
- {
- return BaseCryptLibServiceDeprecated ("HmacSha1Duplicate"), FALSE;
- }
- /**
- HMAC SHA1 is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[in, out] HmacSha1Context Pointer to the HMAC-SHA1 context.
- @param[in] Data Pointer to the buffer containing the data to be digested.
- @param[in] DataSize Size of Data buffer in bytes.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceHmacSha1Update (
- IN OUT VOID *HmacSha1Context,
- IN CONST VOID *Data,
- IN UINTN DataSize
- )
- {
- return BaseCryptLibServiceDeprecated ("HmacSha1Update"), FALSE;
- }
- /**
- HMAC SHA1 is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[in, out] HmacSha1Context Pointer to the HMAC-SHA1 context.
- @param[out] HmacValue Pointer to a buffer that receives the HMAC-SHA1 digest
- value (20 bytes).
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceHmacSha1Final (
- IN OUT VOID *HmacSha1Context,
- OUT UINT8 *HmacValue
- )
- {
- return BaseCryptLibServiceDeprecated ("HmacSha1Final"), FALSE;
- }
- /**
- Allocates and initializes one HMAC_CTX context for subsequent HMAC-SHA256 use.
- @return Pointer to the HMAC_CTX context that has been initialized.
- If the allocations fails, HmacSha256New() returns NULL.
- **/
- VOID *
- EFIAPI
- CryptoServiceHmacSha256New (
- VOID
- )
- {
- return CALL_BASECRYPTLIB (HmacSha256.Services.New, HmacSha256New, (), NULL);
- }
- /**
- Release the specified HMAC_CTX context.
- @param[in] HmacSha256Ctx Pointer to the HMAC_CTX context to be released.
- **/
- VOID
- EFIAPI
- CryptoServiceHmacSha256Free (
- IN VOID *HmacSha256Ctx
- )
- {
- CALL_VOID_BASECRYPTLIB (HmacSha256.Services.Free, HmacSha256Free, (HmacSha256Ctx));
- }
- /**
- Set user-supplied key for subsequent use. It must be done before any
- calling to HmacSha256Update().
- If HmacSha256Context is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[out] HmacSha256Context Pointer to HMAC-SHA256 context.
- @param[in] Key Pointer to the user-supplied key.
- @param[in] KeySize Key size in bytes.
- @retval TRUE The Key is set successfully.
- @retval FALSE The Key is set unsuccessfully.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceHmacSha256SetKey (
- OUT VOID *HmacSha256Context,
- IN CONST UINT8 *Key,
- IN UINTN KeySize
- )
- {
- return CALL_BASECRYPTLIB (HmacSha256.Services.SetKey, HmacSha256SetKey, (HmacSha256Context, Key, KeySize), FALSE);
- }
- /**
- Makes a copy of an existing HMAC-SHA256 context.
- If HmacSha256Context is NULL, then return FALSE.
- If NewHmacSha256Context is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] HmacSha256Context Pointer to HMAC-SHA256 context being copied.
- @param[out] NewHmacSha256Context Pointer to new HMAC-SHA256 context.
- @retval TRUE HMAC-SHA256 context copy succeeded.
- @retval FALSE HMAC-SHA256 context copy failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceHmacSha256Duplicate (
- IN CONST VOID *HmacSha256Context,
- OUT VOID *NewHmacSha256Context
- )
- {
- return CALL_BASECRYPTLIB (HmacSha256.Services.Duplicate, HmacSha256Duplicate, (HmacSha256Context, NewHmacSha256Context), FALSE);
- }
- /**
- Digests the input data and updates HMAC-SHA256 context.
- This function performs HMAC-SHA256 digest on a data buffer of the specified size.
- It can be called multiple times to compute the digest of long or discontinuous data streams.
- HMAC-SHA256 context should be initialized by HmacSha256New(), and should not be finalized
- by HmacSha256Final(). Behavior with invalid context is undefined.
- If HmacSha256Context is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in, out] HmacSha256Context Pointer to the HMAC-SHA256 context.
- @param[in] Data Pointer to the buffer containing the data to be digested.
- @param[in] DataSize Size of Data buffer in bytes.
- @retval TRUE HMAC-SHA256 data digest succeeded.
- @retval FALSE HMAC-SHA256 data digest failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceHmacSha256Update (
- IN OUT VOID *HmacSha256Context,
- IN CONST VOID *Data,
- IN UINTN DataSize
- )
- {
- return CALL_BASECRYPTLIB (HmacSha256.Services.Update, HmacSha256Update, (HmacSha256Context, Data, DataSize), FALSE);
- }
- /**
- Completes computation of the HMAC-SHA256 digest value.
- This function completes HMAC-SHA256 hash computation and retrieves the digest value into
- the specified memory. After this function has been called, the HMAC-SHA256 context cannot
- be used again.
- HMAC-SHA256 context should be initialized by HmacSha256New(), and should not be finalized
- by HmacSha256Final(). Behavior with invalid HMAC-SHA256 context is undefined.
- If HmacSha256Context is NULL, then return FALSE.
- If HmacValue is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in, out] HmacSha256Context Pointer to the HMAC-SHA256 context.
- @param[out] HmacValue Pointer to a buffer that receives the HMAC-SHA256 digest
- value (32 bytes).
- @retval TRUE HMAC-SHA256 digest computation succeeded.
- @retval FALSE HMAC-SHA256 digest computation failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceHmacSha256Final (
- IN OUT VOID *HmacSha256Context,
- OUT UINT8 *HmacValue
- )
- {
- return CALL_BASECRYPTLIB (HmacSha256.Services.Final, HmacSha256Final, (HmacSha256Context, HmacValue), FALSE);
- }
- /**
- Computes the HMAC-SHA256 digest of a input data buffer.
- This function performs the HMAC-SHA256 digest of a given data buffer, and places
- the digest value into the specified memory.
- If this interface is not supported, then return FALSE.
- @param[in] Data Pointer to the buffer containing the data to be digested.
- @param[in] DataSize Size of Data buffer in bytes.
- @param[in] Key Pointer to the user-supplied key.
- @param[in] KeySize Key size in bytes.
- @param[out] HmacValue Pointer to a buffer that receives the HMAC-SHA256 digest
- value (32 bytes).
- @retval TRUE HMAC-SHA256 digest computation succeeded.
- @retval FALSE HMAC-SHA256 digest computation failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceHmacSha256All (
- IN CONST VOID *Data,
- IN UINTN DataSize,
- IN CONST UINT8 *Key,
- IN UINTN KeySize,
- OUT UINT8 *HmacValue
- )
- {
- return CALL_BASECRYPTLIB (HmacSha256.Services.All, HmacSha256All, (Data, DataSize, Key, KeySize, HmacValue), FALSE);
- }
- /**
- Allocates and initializes one HMAC_CTX context for subsequent HMAC-SHA384 use.
- @return Pointer to the HMAC_CTX context that has been initialized.
- If the allocations fails, HmacSha384New() returns NULL.
- **/
- VOID *
- EFIAPI
- CryptoServiceHmacSha384New (
- VOID
- )
- {
- return CALL_BASECRYPTLIB (HmacSha384.Services.New, HmacSha384New, (), NULL);
- }
- /**
- Release the specified HMAC_CTX context.
- @param[in] HmacSha384Ctx Pointer to the HMAC_CTX context to be released.
- **/
- VOID
- EFIAPI
- CryptoServiceHmacSha384Free (
- IN VOID *HmacSha384Ctx
- )
- {
- CALL_VOID_BASECRYPTLIB (HmacSha384.Services.Free, HmacSha384Free, (HmacSha384Ctx));
- }
- /**
- Set user-supplied key for subsequent use. It must be done before any
- calling to HmacSha384Update().
- If HmacSha384Context is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[out] HmacSha384Context Pointer to HMAC-SHA384 context.
- @param[in] Key Pointer to the user-supplied key.
- @param[in] KeySize Key size in bytes.
- @retval TRUE The Key is set successfully.
- @retval FALSE The Key is set unsuccessfully.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceHmacSha384SetKey (
- OUT VOID *HmacSha384Context,
- IN CONST UINT8 *Key,
- IN UINTN KeySize
- )
- {
- return CALL_BASECRYPTLIB (HmacSha384.Services.SetKey, HmacSha384SetKey, (HmacSha384Context, Key, KeySize), FALSE);
- }
- /**
- Makes a copy of an existing HMAC-SHA384 context.
- If HmacSha384Context is NULL, then return FALSE.
- If NewHmacSha384Context is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] HmacSha384Context Pointer to HMAC-SHA384 context being copied.
- @param[out] NewHmacSha384Context Pointer to new HMAC-SHA384 context.
- @retval TRUE HMAC-SHA384 context copy succeeded.
- @retval FALSE HMAC-SHA384 context copy failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceHmacSha384Duplicate (
- IN CONST VOID *HmacSha384Context,
- OUT VOID *NewHmacSha384Context
- )
- {
- return CALL_BASECRYPTLIB (HmacSha384.Services.Duplicate, HmacSha256Duplicate, (HmacSha384Context, NewHmacSha384Context), FALSE);
- }
- /**
- Digests the input data and updates HMAC-SHA384 context.
- This function performs HMAC-SHA384 digest on a data buffer of the specified size.
- It can be called multiple times to compute the digest of long or discontinuous data streams.
- HMAC-SHA384 context should be initialized by HmacSha384New(), and should not be finalized
- by HmacSha384Final(). Behavior with invalid context is undefined.
- If HmacSha384Context is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in, out] HmacSha384Context Pointer to the HMAC-SHA384 context.
- @param[in] Data Pointer to the buffer containing the data to be digested.
- @param[in] DataSize Size of Data buffer in bytes.
- @retval TRUE HMAC-SHA384 data digest succeeded.
- @retval FALSE HMAC-SHA384 data digest failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceHmacSha384Update (
- IN OUT VOID *HmacSha384Context,
- IN CONST VOID *Data,
- IN UINTN DataSize
- )
- {
- return CALL_BASECRYPTLIB (HmacSha384.Services.Update, HmacSha384Update, (HmacSha384Context, Data, DataSize), FALSE);
- }
- /**
- Completes computation of the HMAC-SHA384 digest value.
- This function completes HMAC-SHA384 hash computation and retrieves the digest value into
- the specified memory. After this function has been called, the HMAC-SHA384 context cannot
- be used again.
- HMAC-SHA384 context should be initialized by HmacSha384New(), and should not be finalized
- by HmacSha384Final(). Behavior with invalid HMAC-SHA384 context is undefined.
- If HmacSha384Context is NULL, then return FALSE.
- If HmacValue is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in, out] HmacSha384Context Pointer to the HMAC-SHA384 context.
- @param[out] HmacValue Pointer to a buffer that receives the HMAC-SHA384 digest
- value (48 bytes).
- @retval TRUE HMAC-SHA384 digest computation succeeded.
- @retval FALSE HMAC-SHA384 digest computation failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceHmacSha384Final (
- IN OUT VOID *HmacSha384Context,
- OUT UINT8 *HmacValue
- )
- {
- return CALL_BASECRYPTLIB (HmacSha384.Services.Final, HmacSha384Final, (HmacSha384Context, HmacValue), FALSE);
- }
- /**
- Computes the HMAC-SHA384 digest of a input data buffer.
- This function performs the HMAC-SHA384 digest of a given data buffer, and places
- the digest value into the specified memory.
- If this interface is not supported, then return FALSE.
- @param[in] Data Pointer to the buffer containing the data to be digested.
- @param[in] DataSize Size of Data buffer in bytes.
- @param[in] Key Pointer to the user-supplied key.
- @param[in] KeySize Key size in bytes.
- @param[out] HmacValue Pointer to a buffer that receives the HMAC-SHA384 digest
- value (48 bytes).
- @retval TRUE HMAC-SHA384 digest computation succeeded.
- @retval FALSE HMAC-SHA384 digest computation failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceHmacSha384All (
- IN CONST VOID *Data,
- IN UINTN DataSize,
- IN CONST UINT8 *Key,
- IN UINTN KeySize,
- OUT UINT8 *HmacValue
- )
- {
- return CALL_BASECRYPTLIB (HmacSha384.Services.All, HmacSha384All, (Data, DataSize, Key, KeySize, HmacValue), FALSE);
- }
- // =====================================================================================
- // Symmetric Cryptography Primitive
- // =====================================================================================
- /**
- TDES is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @retval 0 This interface is not supported.
- **/
- UINTN
- EFIAPI
- DeprecatedCryptoServiceTdesGetContextSize (
- VOID
- )
- {
- return BaseCryptLibServiceDeprecated ("TdesGetContextSize"), 0;
- }
- /**
- TDES is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[out] TdesContext Pointer to TDES context being initialized.
- @param[in] Key Pointer to the user-supplied TDES key.
- @param[in] KeyLength Length of TDES key in bits.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceTdesInit (
- OUT VOID *TdesContext,
- IN CONST UINT8 *Key,
- IN UINTN KeyLength
- )
- {
- return BaseCryptLibServiceDeprecated ("TdesInit"), FALSE;
- }
- /**
- TDES is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[in] TdesContext Pointer to the TDES context.
- @param[in] Input Pointer to the buffer containing the data to be encrypted.
- @param[in] InputSize Size of the Input buffer in bytes.
- @param[out] Output Pointer to a buffer that receives the TDES encryption output.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceTdesEcbEncrypt (
- IN VOID *TdesContext,
- IN CONST UINT8 *Input,
- IN UINTN InputSize,
- OUT UINT8 *Output
- )
- {
- return BaseCryptLibServiceDeprecated ("TdesEcbEncrypt"), FALSE;
- }
- /**
- TDES is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[in] TdesContext Pointer to the TDES context.
- @param[in] Input Pointer to the buffer containing the data to be decrypted.
- @param[in] InputSize Size of the Input buffer in bytes.
- @param[out] Output Pointer to a buffer that receives the TDES decryption output.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceTdesEcbDecrypt (
- IN VOID *TdesContext,
- IN CONST UINT8 *Input,
- IN UINTN InputSize,
- OUT UINT8 *Output
- )
- {
- return BaseCryptLibServiceDeprecated ("TdesEcbDecrypt"), FALSE;
- }
- /**
- TDES is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[in] TdesContext Pointer to the TDES context.
- @param[in] Input Pointer to the buffer containing the data to be encrypted.
- @param[in] InputSize Size of the Input buffer in bytes.
- @param[in] Ivec Pointer to initialization vector.
- @param[out] Output Pointer to a buffer that receives the TDES encryption output.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceTdesCbcEncrypt (
- IN VOID *TdesContext,
- IN CONST UINT8 *Input,
- IN UINTN InputSize,
- IN CONST UINT8 *Ivec,
- OUT UINT8 *Output
- )
- {
- return BaseCryptLibServiceDeprecated ("TdesCbcEncrypt"), FALSE;
- }
- /**
- TDES is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[in] TdesContext Pointer to the TDES context.
- @param[in] Input Pointer to the buffer containing the data to be encrypted.
- @param[in] InputSize Size of the Input buffer in bytes.
- @param[in] Ivec Pointer to initialization vector.
- @param[out] Output Pointer to a buffer that receives the TDES encryption output.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceTdesCbcDecrypt (
- IN VOID *TdesContext,
- IN CONST UINT8 *Input,
- IN UINTN InputSize,
- IN CONST UINT8 *Ivec,
- OUT UINT8 *Output
- )
- {
- return BaseCryptLibServiceDeprecated ("TdesCbcDecrypt"), FALSE;
- }
- /**
- Retrieves the size, in bytes, of the context buffer required for AES operations.
- If this interface is not supported, then return zero.
- @return The size, in bytes, of the context buffer required for AES operations.
- @retval 0 This interface is not supported.
- **/
- UINTN
- EFIAPI
- CryptoServiceAesGetContextSize (
- VOID
- )
- {
- return CALL_BASECRYPTLIB (Aes.Services.GetContextSize, AesGetContextSize, (), 0);
- }
- /**
- Initializes user-supplied memory as AES context for subsequent use.
- This function initializes user-supplied memory pointed by AesContext as AES context.
- In addition, it sets up all AES key materials for subsequent encryption and decryption
- operations.
- There are 3 options for key length, 128 bits, 192 bits, and 256 bits.
- If AesContext is NULL, then return FALSE.
- If Key is NULL, then return FALSE.
- If KeyLength is not valid, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[out] AesContext Pointer to AES context being initialized.
- @param[in] Key Pointer to the user-supplied AES key.
- @param[in] KeyLength Length of AES key in bits.
- @retval TRUE AES context initialization succeeded.
- @retval FALSE AES context initialization failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceAesInit (
- OUT VOID *AesContext,
- IN CONST UINT8 *Key,
- IN UINTN KeyLength
- )
- {
- return CALL_BASECRYPTLIB (Aes.Services.Init, AesInit, (AesContext, Key, KeyLength), FALSE);
- }
- /**
- AES ECB Mode is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[in] AesContext Pointer to the AES context.
- @param[in] Input Pointer to the buffer containing the data to be encrypted.
- @param[in] InputSize Size of the Input buffer in bytes.
- @param[out] Output Pointer to a buffer that receives the AES encryption output.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceAesEcbEncrypt (
- IN VOID *AesContext,
- IN CONST UINT8 *Input,
- IN UINTN InputSize,
- OUT UINT8 *Output
- )
- {
- return BaseCryptLibServiceDeprecated ("AesEcbEncrypt"), FALSE;
- }
- /**
- AES ECB Mode is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[in] AesContext Pointer to the AES context.
- @param[in] Input Pointer to the buffer containing the data to be decrypted.
- @param[in] InputSize Size of the Input buffer in bytes.
- @param[out] Output Pointer to a buffer that receives the AES decryption output.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceAesEcbDecrypt (
- IN VOID *AesContext,
- IN CONST UINT8 *Input,
- IN UINTN InputSize,
- OUT UINT8 *Output
- )
- {
- return BaseCryptLibServiceDeprecated ("AesEcbDecrypt"), FALSE;
- }
- /**
- Performs AES encryption on a data buffer of the specified size in CBC mode.
- This function performs AES encryption on data buffer pointed by Input, of specified
- size of InputSize, in CBC mode.
- InputSize must be multiple of block size (16 bytes). This function does not perform
- padding. Caller must perform padding, if necessary, to ensure valid input data size.
- Initialization vector should be one block size (16 bytes).
- AesContext should be already correctly initialized by AesInit(). Behavior with
- invalid AES context is undefined.
- If AesContext is NULL, then return FALSE.
- If Input is NULL, then return FALSE.
- If InputSize is not multiple of block size (16 bytes), then return FALSE.
- If Ivec is NULL, then return FALSE.
- If Output is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] AesContext Pointer to the AES context.
- @param[in] Input Pointer to the buffer containing the data to be encrypted.
- @param[in] InputSize Size of the Input buffer in bytes.
- @param[in] Ivec Pointer to initialization vector.
- @param[out] Output Pointer to a buffer that receives the AES encryption output.
- @retval TRUE AES encryption succeeded.
- @retval FALSE AES encryption failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceAesCbcEncrypt (
- IN VOID *AesContext,
- IN CONST UINT8 *Input,
- IN UINTN InputSize,
- IN CONST UINT8 *Ivec,
- OUT UINT8 *Output
- )
- {
- return CALL_BASECRYPTLIB (Aes.Services.CbcEncrypt, AesCbcEncrypt, (AesContext, Input, InputSize, Ivec, Output), FALSE);
- }
- /**
- Performs AES decryption on a data buffer of the specified size in CBC mode.
- This function performs AES decryption on data buffer pointed by Input, of specified
- size of InputSize, in CBC mode.
- InputSize must be multiple of block size (16 bytes). This function does not perform
- padding. Caller must perform padding, if necessary, to ensure valid input data size.
- Initialization vector should be one block size (16 bytes).
- AesContext should be already correctly initialized by AesInit(). Behavior with
- invalid AES context is undefined.
- If AesContext is NULL, then return FALSE.
- If Input is NULL, then return FALSE.
- If InputSize is not multiple of block size (16 bytes), then return FALSE.
- If Ivec is NULL, then return FALSE.
- If Output is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] AesContext Pointer to the AES context.
- @param[in] Input Pointer to the buffer containing the data to be encrypted.
- @param[in] InputSize Size of the Input buffer in bytes.
- @param[in] Ivec Pointer to initialization vector.
- @param[out] Output Pointer to a buffer that receives the AES encryption output.
- @retval TRUE AES decryption succeeded.
- @retval FALSE AES decryption failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceAesCbcDecrypt (
- IN VOID *AesContext,
- IN CONST UINT8 *Input,
- IN UINTN InputSize,
- IN CONST UINT8 *Ivec,
- OUT UINT8 *Output
- )
- {
- return CALL_BASECRYPTLIB (Aes.Services.CbcDecrypt, AesCbcDecrypt, (AesContext, Input, InputSize, Ivec, Output), FALSE);
- }
- /**
- ARC4 is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @retval 0 This interface is not supported.
- **/
- UINTN
- EFIAPI
- DeprecatedCryptoServiceArc4GetContextSize (
- VOID
- )
- {
- return BaseCryptLibServiceDeprecated ("Arc4GetContextSize"), 0;
- }
- /**
- ARC4 is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[out] Arc4Context Pointer to ARC4 context being initialized.
- @param[in] Key Pointer to the user-supplied ARC4 key.
- @param[in] KeySize Size of ARC4 key in bytes.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceArc4Init (
- OUT VOID *Arc4Context,
- IN CONST UINT8 *Key,
- IN UINTN KeySize
- )
- {
- return BaseCryptLibServiceDeprecated ("Arc4Init"), FALSE;
- }
- /**
- ARC4 is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[in, out] Arc4Context Pointer to the ARC4 context.
- @param[in] Input Pointer to the buffer containing the data to be encrypted.
- @param[in] InputSize Size of the Input buffer in bytes.
- @param[out] Output Pointer to a buffer that receives the ARC4 encryption output.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceArc4Encrypt (
- IN OUT VOID *Arc4Context,
- IN CONST UINT8 *Input,
- IN UINTN InputSize,
- OUT UINT8 *Output
- )
- {
- return BaseCryptLibServiceDeprecated ("Arc4Encrypt"), FALSE;
- }
- /**
- ARC4 is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[in, out] Arc4Context Pointer to the ARC4 context.
- @param[in] Input Pointer to the buffer containing the data to be decrypted.
- @param[in] InputSize Size of the Input buffer in bytes.
- @param[out] Output Pointer to a buffer that receives the ARC4 decryption output.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceArc4Decrypt (
- IN OUT VOID *Arc4Context,
- IN UINT8 *Input,
- IN UINTN InputSize,
- OUT UINT8 *Output
- )
- {
- return BaseCryptLibServiceDeprecated ("Arc4Decrypt"), FALSE;
- }
- /**
- ARC4 is deprecated and unsupported any longer.
- Keep the function field for binary compability.
- @param[in, out] Arc4Context Pointer to the ARC4 context.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- DeprecatedCryptoServiceArc4Reset (
- IN OUT VOID *Arc4Context
- )
- {
- return BaseCryptLibServiceDeprecated ("Arc4Reset"), FALSE;
- }
- // =====================================================================================
- // Asymmetric Cryptography Primitive
- // =====================================================================================
- /**
- Allocates and initializes one RSA context for subsequent use.
- @return Pointer to the RSA context that has been initialized.
- If the allocations fails, RsaNew() returns NULL.
- **/
- VOID *
- EFIAPI
- CryptoServiceRsaNew (
- VOID
- )
- {
- return CALL_BASECRYPTLIB (Rsa.Services.New, RsaNew, (), NULL);
- }
- /**
- Release the specified RSA context.
- If RsaContext is NULL, then return FALSE.
- @param[in] RsaContext Pointer to the RSA context to be released.
- **/
- VOID
- EFIAPI
- CryptoServiceRsaFree (
- IN VOID *RsaContext
- )
- {
- CALL_VOID_BASECRYPTLIB (Rsa.Services.Free, RsaFree, (RsaContext));
- }
- /**
- Sets the tag-designated key component into the established RSA context.
- This function sets the tag-designated RSA key component into the established
- RSA context from the user-specified non-negative integer (octet string format
- represented in RSA PKCS#1).
- If BigNumber is NULL, then the specified key component in RSA context is cleared.
- If RsaContext is NULL, then return FALSE.
- @param[in, out] RsaContext Pointer to RSA context being set.
- @param[in] KeyTag Tag of RSA key component being set.
- @param[in] BigNumber Pointer to octet integer buffer.
- If NULL, then the specified key component in RSA
- context is cleared.
- @param[in] BnSize Size of big number buffer in bytes.
- If BigNumber is NULL, then it is ignored.
- @retval TRUE RSA key component was set successfully.
- @retval FALSE Invalid RSA key component tag.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceRsaSetKey (
- IN OUT VOID *RsaContext,
- IN RSA_KEY_TAG KeyTag,
- IN CONST UINT8 *BigNumber,
- IN UINTN BnSize
- )
- {
- return CALL_BASECRYPTLIB (Rsa.Services.SetKey, RsaSetKey, (RsaContext, KeyTag, BigNumber, BnSize), FALSE);
- }
- /**
- Gets the tag-designated RSA key component from the established RSA context.
- This function retrieves the tag-designated RSA key component from the
- established RSA context as a non-negative integer (octet string format
- represented in RSA PKCS#1).
- If specified key component has not been set or has been cleared, then returned
- BnSize is set to 0.
- If the BigNumber buffer is too small to hold the contents of the key, FALSE
- is returned and BnSize is set to the required buffer size to obtain the key.
- If RsaContext is NULL, then return FALSE.
- If BnSize is NULL, then return FALSE.
- If BnSize is large enough but BigNumber is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in, out] RsaContext Pointer to RSA context being set.
- @param[in] KeyTag Tag of RSA key component being set.
- @param[out] BigNumber Pointer to octet integer buffer.
- @param[in, out] BnSize On input, the size of big number buffer in bytes.
- On output, the size of data returned in big number buffer in bytes.
- @retval TRUE RSA key component was retrieved successfully.
- @retval FALSE Invalid RSA key component tag.
- @retval FALSE BnSize is too small.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceRsaGetKey (
- IN OUT VOID *RsaContext,
- IN RSA_KEY_TAG KeyTag,
- OUT UINT8 *BigNumber,
- IN OUT UINTN *BnSize
- )
- {
- return CALL_BASECRYPTLIB (Rsa.Services.GetKey, RsaGetKey, (RsaContext, KeyTag, BigNumber, BnSize), FALSE);
- }
- /**
- Generates RSA key components.
- This function generates RSA key components. It takes RSA public exponent E and
- length in bits of RSA modulus N as input, and generates all key components.
- If PublicExponent is NULL, the default RSA public exponent (0x10001) will be used.
- Before this function can be invoked, pseudorandom number generator must be correctly
- initialized by RandomSeed().
- If RsaContext is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in, out] RsaContext Pointer to RSA context being set.
- @param[in] ModulusLength Length of RSA modulus N in bits.
- @param[in] PublicExponent Pointer to RSA public exponent.
- @param[in] PublicExponentSize Size of RSA public exponent buffer in bytes.
- @retval TRUE RSA key component was generated successfully.
- @retval FALSE Invalid RSA key component tag.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceRsaGenerateKey (
- IN OUT VOID *RsaContext,
- IN UINTN ModulusLength,
- IN CONST UINT8 *PublicExponent,
- IN UINTN PublicExponentSize
- )
- {
- return CALL_BASECRYPTLIB (Rsa.Services.GenerateKey, RsaGenerateKey, (RsaContext, ModulusLength, PublicExponent, PublicExponentSize), FALSE);
- }
- /**
- Validates key components of RSA context.
- NOTE: This function performs integrity checks on all the RSA key material, so
- the RSA key structure must contain all the private key data.
- This function validates key components of RSA context in following aspects:
- - Whether p is a prime
- - Whether q is a prime
- - Whether n = p * q
- - Whether d*e = 1 mod lcm(p-1,q-1)
- If RsaContext is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] RsaContext Pointer to RSA context to check.
- @retval TRUE RSA key components are valid.
- @retval FALSE RSA key components are not valid.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceRsaCheckKey (
- IN VOID *RsaContext
- )
- {
- return CALL_BASECRYPTLIB (Rsa.Services.CheckKey, RsaCheckKey, (RsaContext), FALSE);
- }
- /**
- Carries out the RSA-SSA signature generation with EMSA-PKCS1-v1_5 encoding scheme.
- This function carries out the RSA-SSA signature generation with EMSA-PKCS1-v1_5 encoding scheme defined in
- RSA PKCS#1.
- If the Signature buffer is too small to hold the contents of signature, FALSE
- is returned and SigSize is set to the required buffer size to obtain the signature.
- If RsaContext is NULL, then return FALSE.
- If MessageHash is NULL, then return FALSE.
- If HashSize is not equal to the size of MD5, SHA-1 or SHA-256 digest, then return FALSE.
- If SigSize is large enough but Signature is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] RsaContext Pointer to RSA context for signature generation.
- @param[in] MessageHash Pointer to octet message hash to be signed.
- @param[in] HashSize Size of the message hash in bytes.
- @param[out] Signature Pointer to buffer to receive RSA PKCS1-v1_5 signature.
- @param[in, out] SigSize On input, the size of Signature buffer in bytes.
- On output, the size of data returned in Signature buffer in bytes.
- @retval TRUE Signature successfully generated in PKCS1-v1_5.
- @retval FALSE Signature generation failed.
- @retval FALSE SigSize is too small.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceRsaPkcs1Sign (
- IN VOID *RsaContext,
- IN CONST UINT8 *MessageHash,
- IN UINTN HashSize,
- OUT UINT8 *Signature,
- IN OUT UINTN *SigSize
- )
- {
- return CALL_BASECRYPTLIB (Rsa.Services.Pkcs1Sign, RsaPkcs1Sign, (RsaContext, MessageHash, HashSize, Signature, SigSize), FALSE);
- }
- /**
- Verifies the RSA-SSA signature with EMSA-PKCS1-v1_5 encoding scheme defined in
- RSA PKCS#1.
- If RsaContext is NULL, then return FALSE.
- If MessageHash is NULL, then return FALSE.
- If Signature is NULL, then return FALSE.
- If HashSize is not equal to the size of MD5, SHA-1, SHA-256 digest, then return FALSE.
- @param[in] RsaContext Pointer to RSA context for signature verification.
- @param[in] MessageHash Pointer to octet message hash to be checked.
- @param[in] HashSize Size of the message hash in bytes.
- @param[in] Signature Pointer to RSA PKCS1-v1_5 signature to be verified.
- @param[in] SigSize Size of signature in bytes.
- @retval TRUE Valid signature encoded in PKCS1-v1_5.
- @retval FALSE Invalid signature or invalid RSA context.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceRsaPkcs1Verify (
- IN VOID *RsaContext,
- IN CONST UINT8 *MessageHash,
- IN UINTN HashSize,
- IN CONST UINT8 *Signature,
- IN UINTN SigSize
- )
- {
- return CALL_BASECRYPTLIB (Rsa.Services.Pkcs1Verify, RsaPkcs1Verify, (RsaContext, MessageHash, HashSize, Signature, SigSize), FALSE);
- }
- /**
- Retrieve the RSA Private Key from the password-protected PEM key data.
- If PemData is NULL, then return FALSE.
- If RsaContext is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] PemData Pointer to the PEM-encoded key data to be retrieved.
- @param[in] PemSize Size of the PEM key data in bytes.
- @param[in] Password NULL-terminated passphrase used for encrypted PEM key data.
- @param[out] RsaContext Pointer to new-generated RSA context which contain the retrieved
- RSA private key component. Use RsaFree() function to free the
- resource.
- @retval TRUE RSA Private Key was retrieved successfully.
- @retval FALSE Invalid PEM key data or incorrect password.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceRsaGetPrivateKeyFromPem (
- IN CONST UINT8 *PemData,
- IN UINTN PemSize,
- IN CONST CHAR8 *Password,
- OUT VOID **RsaContext
- )
- {
- return CALL_BASECRYPTLIB (Rsa.Services.GetPrivateKeyFromPem, RsaGetPrivateKeyFromPem, (PemData, PemSize, Password, RsaContext), FALSE);
- }
- /**
- Retrieve the RSA Public Key from one DER-encoded X509 certificate.
- If Cert is NULL, then return FALSE.
- If RsaContext is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] Cert Pointer to the DER-encoded X509 certificate.
- @param[in] CertSize Size of the X509 certificate in bytes.
- @param[out] RsaContext Pointer to new-generated RSA context which contain the retrieved
- RSA public key component. Use RsaFree() function to free the
- resource.
- @retval TRUE RSA Public Key was retrieved successfully.
- @retval FALSE Fail to retrieve RSA public key from X509 certificate.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceRsaGetPublicKeyFromX509 (
- IN CONST UINT8 *Cert,
- IN UINTN CertSize,
- OUT VOID **RsaContext
- )
- {
- return CALL_BASECRYPTLIB (Rsa.Services.GetPublicKeyFromX509, RsaGetPublicKeyFromX509, (Cert, CertSize, RsaContext), FALSE);
- }
- /**
- Retrieve the subject bytes from one X.509 certificate.
- If Cert is NULL, then return FALSE.
- If SubjectSize is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] Cert Pointer to the DER-encoded X509 certificate.
- @param[in] CertSize Size of the X509 certificate in bytes.
- @param[out] CertSubject Pointer to the retrieved certificate subject bytes.
- @param[in, out] SubjectSize The size in bytes of the CertSubject buffer on input,
- and the size of buffer returned CertSubject on output.
- @retval TRUE The certificate subject retrieved successfully.
- @retval FALSE Invalid certificate, or the SubjectSize is too small for the result.
- The SubjectSize will be updated with the required size.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceX509GetSubjectName (
- IN CONST UINT8 *Cert,
- IN UINTN CertSize,
- OUT UINT8 *CertSubject,
- IN OUT UINTN *SubjectSize
- )
- {
- return CALL_BASECRYPTLIB (X509.Services.GetSubjectName, X509GetSubjectName, (Cert, CertSize, CertSubject, SubjectSize), FALSE);
- }
- /**
- Retrieve the common name (CN) string from one X.509 certificate.
- @param[in] Cert Pointer to the DER-encoded X509 certificate.
- @param[in] CertSize Size of the X509 certificate in bytes.
- @param[out] CommonName Buffer to contain the retrieved certificate common
- name string (UTF8). At most CommonNameSize bytes will be
- written and the string will be null terminated. May be
- NULL in order to determine the size buffer needed.
- @param[in,out] CommonNameSize The size in bytes of the CommonName buffer on input,
- and the size of buffer returned CommonName on output.
- If CommonName is NULL then the amount of space needed
- in buffer (including the final null) is returned.
- @retval RETURN_SUCCESS The certificate CommonName retrieved successfully.
- @retval RETURN_INVALID_PARAMETER If Cert is NULL.
- If CommonNameSize is NULL.
- If CommonName is not NULL and *CommonNameSize is 0.
- If Certificate is invalid.
- @retval RETURN_NOT_FOUND If no CommonName entry exists.
- @retval RETURN_BUFFER_TOO_SMALL If the CommonName is NULL. The required buffer size
- (including the final null) is returned in the
- CommonNameSize parameter.
- @retval RETURN_UNSUPPORTED The operation is not supported.
- **/
- RETURN_STATUS
- EFIAPI
- CryptoServiceX509GetCommonName (
- IN CONST UINT8 *Cert,
- IN UINTN CertSize,
- OUT CHAR8 *CommonName OPTIONAL,
- IN OUT UINTN *CommonNameSize
- )
- {
- return CALL_BASECRYPTLIB (X509.Services.GetCommonName, X509GetCommonName, (Cert, CertSize, CommonName, CommonNameSize), RETURN_UNSUPPORTED);
- }
- /**
- Retrieve the organization name (O) string from one X.509 certificate.
- @param[in] Cert Pointer to the DER-encoded X509 certificate.
- @param[in] CertSize Size of the X509 certificate in bytes.
- @param[out] NameBuffer Buffer to contain the retrieved certificate organization
- name string. At most NameBufferSize bytes will be
- written and the string will be null terminated. May be
- NULL in order to determine the size buffer needed.
- @param[in,out] NameBufferSize The size in bytes of the Name buffer on input,
- and the size of buffer returned Name on output.
- If NameBuffer is NULL then the amount of space needed
- in buffer (including the final null) is returned.
- @retval RETURN_SUCCESS The certificate Organization Name retrieved successfully.
- @retval RETURN_INVALID_PARAMETER If Cert is NULL.
- If NameBufferSize is NULL.
- If NameBuffer is not NULL and *CommonNameSize is 0.
- If Certificate is invalid.
- @retval RETURN_NOT_FOUND If no Organization Name entry exists.
- @retval RETURN_BUFFER_TOO_SMALL If the NameBuffer is NULL. The required buffer size
- (including the final null) is returned in the
- CommonNameSize parameter.
- @retval RETURN_UNSUPPORTED The operation is not supported.
- **/
- RETURN_STATUS
- EFIAPI
- CryptoServiceX509GetOrganizationName (
- IN CONST UINT8 *Cert,
- IN UINTN CertSize,
- OUT CHAR8 *NameBuffer OPTIONAL,
- IN OUT UINTN *NameBufferSize
- )
- {
- return CALL_BASECRYPTLIB (X509.Services.GetOrganizationName, X509GetOrganizationName, (Cert, CertSize, NameBuffer, NameBufferSize), RETURN_UNSUPPORTED);
- }
- /**
- Verify one X509 certificate was issued by the trusted CA.
- If Cert is NULL, then return FALSE.
- If CACert is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] Cert Pointer to the DER-encoded X509 certificate to be verified.
- @param[in] CertSize Size of the X509 certificate in bytes.
- @param[in] CACert Pointer to the DER-encoded trusted CA certificate.
- @param[in] CACertSize Size of the CA Certificate in bytes.
- @retval TRUE The certificate was issued by the trusted CA.
- @retval FALSE Invalid certificate or the certificate was not issued by the given
- trusted CA.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceX509VerifyCert (
- IN CONST UINT8 *Cert,
- IN UINTN CertSize,
- IN CONST UINT8 *CACert,
- IN UINTN CACertSize
- )
- {
- return CALL_BASECRYPTLIB (X509.Services.VerifyCert, X509VerifyCert, (Cert, CertSize, CACert, CACertSize), FALSE);
- }
- /**
- Construct a X509 object from DER-encoded certificate data.
- If Cert is NULL, then return FALSE.
- If SingleX509Cert is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] Cert Pointer to the DER-encoded certificate data.
- @param[in] CertSize The size of certificate data in bytes.
- @param[out] SingleX509Cert The generated X509 object.
- @retval TRUE The X509 object generation succeeded.
- @retval FALSE The operation failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceX509ConstructCertificate (
- IN CONST UINT8 *Cert,
- IN UINTN CertSize,
- OUT UINT8 **SingleX509Cert
- )
- {
- return CALL_BASECRYPTLIB (X509.Services.ConstructCertificate, X509ConstructCertificate, (Cert, CertSize, SingleX509Cert), FALSE);
- }
- /**
- Construct a X509 stack object from a list of DER-encoded certificate data.
- If X509Stack is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in, out] X509Stack On input, pointer to an existing or NULL X509 stack object.
- On output, pointer to the X509 stack object with new
- inserted X509 certificate.
- @param[in] Args VA_LIST marker for the variable argument list.
- A list of DER-encoded single certificate data followed
- by certificate size. A NULL terminates the list. The
- pairs are the arguments to X509ConstructCertificate().
- @retval TRUE The X509 stack construction succeeded.
- @retval FALSE The construction operation failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceX509ConstructCertificateStackV (
- IN OUT UINT8 **X509Stack,
- IN VA_LIST Args
- )
- {
- return CALL_BASECRYPTLIB (X509.Services.ConstructCertificateStackV, X509ConstructCertificateStackV, (X509Stack, Args), FALSE);
- }
- /**
- Construct a X509 stack object from a list of DER-encoded certificate data.
- If X509Stack is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in, out] X509Stack On input, pointer to an existing or NULL X509 stack object.
- On output, pointer to the X509 stack object with new
- inserted X509 certificate.
- @param ... A list of DER-encoded single certificate data followed
- by certificate size. A NULL terminates the list. The
- pairs are the arguments to X509ConstructCertificate().
- @retval TRUE The X509 stack construction succeeded.
- @retval FALSE The construction operation failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceX509ConstructCertificateStack (
- IN OUT UINT8 **X509Stack,
- ...
- )
- {
- VA_LIST Args;
- BOOLEAN Result;
- VA_START (Args, X509Stack);
- Result = CryptoServiceX509ConstructCertificateStackV (X509Stack, Args);
- VA_END (Args);
- return Result;
- }
- /**
- Release the specified X509 object.
- If the interface is not supported, then ASSERT().
- @param[in] X509Cert Pointer to the X509 object to be released.
- **/
- VOID
- EFIAPI
- CryptoServiceX509Free (
- IN VOID *X509Cert
- )
- {
- CALL_VOID_BASECRYPTLIB (X509.Services.Free, X509Free, (X509Cert));
- }
- /**
- Release the specified X509 stack object.
- If the interface is not supported, then ASSERT().
- @param[in] X509Stack Pointer to the X509 stack object to be released.
- **/
- VOID
- EFIAPI
- CryptoServiceX509StackFree (
- IN VOID *X509Stack
- )
- {
- CALL_VOID_BASECRYPTLIB (X509.Services.StackFree, X509StackFree, (X509Stack));
- }
- /**
- Retrieve the TBSCertificate from one given X.509 certificate.
- @param[in] Cert Pointer to the given DER-encoded X509 certificate.
- @param[in] CertSize Size of the X509 certificate in bytes.
- @param[out] TBSCert DER-Encoded To-Be-Signed certificate.
- @param[out] TBSCertSize Size of the TBS certificate in bytes.
- If Cert is NULL, then return FALSE.
- If TBSCert is NULL, then return FALSE.
- If TBSCertSize is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @retval TRUE The TBSCertificate was retrieved successfully.
- @retval FALSE Invalid X.509 certificate.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceX509GetTBSCert (
- IN CONST UINT8 *Cert,
- IN UINTN CertSize,
- OUT UINT8 **TBSCert,
- OUT UINTN *TBSCertSize
- )
- {
- return CALL_BASECRYPTLIB (X509.Services.GetTBSCert, X509GetTBSCert, (Cert, CertSize, TBSCert, TBSCertSize), FALSE);
- }
- /**
- Retrieve the version from one X.509 certificate.
- If Cert is NULL, then return FALSE.
- If CertSize is 0, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] Cert Pointer to the DER-encoded X509 certificate.
- @param[in] CertSize Size of the X509 certificate in bytes.
- @param[out] Version Pointer to the retrieved version integer.
- @retval TRUE The certificate version retrieved successfully.
- @retval FALSE If Cert is NULL or CertSize is Zero.
- @retval FALSE The operation is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceX509GetVersion (
- IN CONST UINT8 *Cert,
- IN UINTN CertSize,
- OUT UINTN *Version
- )
- {
- return CALL_BASECRYPTLIB (X509.Services.GetVersion, X509GetVersion, (Cert, CertSize, Version), FALSE);
- }
- /**
- Retrieve the serialNumber from one X.509 certificate.
- If Cert is NULL, then return FALSE.
- If CertSize is 0, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] Cert Pointer to the DER-encoded X509 certificate.
- @param[in] CertSize Size of the X509 certificate in bytes.
- @param[out] SerialNumber Pointer to the retrieved certificate SerialNumber bytes.
- @param[in, out] SerialNumberSize The size in bytes of the SerialNumber buffer on input,
- and the size of buffer returned SerialNumber on output.
- @retval TRUE The certificate serialNumber retrieved successfully.
- @retval FALSE If Cert is NULL or CertSize is Zero.
- If SerialNumberSize is NULL.
- If Certificate is invalid.
- @retval FALSE If no SerialNumber exists.
- @retval FALSE If the SerialNumber is NULL. The required buffer size
- (including the final null) is returned in the
- SerialNumberSize parameter.
- @retval FALSE The operation is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceX509GetSerialNumber (
- IN CONST UINT8 *Cert,
- IN UINTN CertSize,
- OUT UINT8 *SerialNumber, OPTIONAL
- IN OUT UINTN *SerialNumberSize
- )
- {
- return CALL_BASECRYPTLIB (X509.Services.GetSerialNumber, X509GetSerialNumber, (Cert, CertSize, SerialNumber, SerialNumberSize), FALSE);
- }
- /**
- Retrieve the issuer bytes from one X.509 certificate.
- If Cert is NULL, then return FALSE.
- If CertIssuerSize is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] Cert Pointer to the DER-encoded X509 certificate.
- @param[in] CertSize Size of the X509 certificate in bytes.
- @param[out] CertIssuer Pointer to the retrieved certificate subject bytes.
- @param[in, out] CertIssuerSize The size in bytes of the CertIssuer buffer on input,
- and the size of buffer returned CertSubject on output.
- @retval TRUE The certificate issuer retrieved successfully.
- @retval FALSE Invalid certificate, or the CertIssuerSize is too small for the result.
- The CertIssuerSize will be updated with the required size.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceX509GetIssuerName (
- IN CONST UINT8 *Cert,
- IN UINTN CertSize,
- OUT UINT8 *CertIssuer,
- IN OUT UINTN *CertIssuerSize
- )
- {
- return CALL_BASECRYPTLIB (X509.Services.GetIssuerName, X509GetIssuerName, (Cert, CertSize, CertIssuer, CertIssuerSize), FALSE);
- }
- /**
- Retrieve the Signature Algorithm from one X.509 certificate.
- @param[in] Cert Pointer to the DER-encoded X509 certificate.
- @param[in] CertSize Size of the X509 certificate in bytes.
- @param[out] Oid Signature Algorithm Object identifier buffer.
- @param[in,out] OidSize Signature Algorithm Object identifier buffer size
- @retval TRUE The certificate Extension data retrieved successfully.
- @retval FALSE If Cert is NULL.
- If OidSize is NULL.
- If Oid is not NULL and *OidSize is 0.
- If Certificate is invalid.
- @retval FALSE If no SignatureType.
- @retval FALSE If the Oid is NULL. The required buffer size
- is returned in the OidSize.
- @retval FALSE The operation is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceX509GetSignatureAlgorithm (
- IN CONST UINT8 *Cert,
- IN UINTN CertSize,
- OUT UINT8 *Oid, OPTIONAL
- IN OUT UINTN *OidSize
- )
- {
- return CALL_BASECRYPTLIB (X509.Services.GetSignatureAlgorithm, X509GetSignatureAlgorithm, (Cert, CertSize, Oid, OidSize), FALSE);
- }
- /**
- Retrieve Extension data from one X.509 certificate.
- @param[in] Cert Pointer to the DER-encoded X509 certificate.
- @param[in] CertSize Size of the X509 certificate in bytes.
- @param[in] Oid Object identifier buffer
- @param[in] OidSize Object identifier buffer size
- @param[out] ExtensionData Extension bytes.
- @param[in, out] ExtensionDataSize Extension bytes size.
- @retval TRUE The certificate Extension data retrieved successfully.
- @retval FALSE If Cert is NULL.
- If ExtensionDataSize is NULL.
- If ExtensionData is not NULL and *ExtensionDataSize is 0.
- If Certificate is invalid.
- @retval FALSE If no Extension entry match Oid.
- @retval FALSE If the ExtensionData is NULL. The required buffer size
- is returned in the ExtensionDataSize parameter.
- @retval FALSE The operation is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceX509GetExtensionData (
- IN CONST UINT8 *Cert,
- IN UINTN CertSize,
- IN CONST UINT8 *Oid,
- IN UINTN OidSize,
- OUT UINT8 *ExtensionData,
- IN OUT UINTN *ExtensionDataSize
- )
- {
- return CALL_BASECRYPTLIB (X509.Services.GetExtensionData, X509GetExtensionData, (Cert, CertSize, Oid, OidSize, ExtensionData, ExtensionDataSize), FALSE);
- }
- /**
- Retrieve the Extended Key Usage from one X.509 certificate.
- @param[in] Cert Pointer to the DER-encoded X509 certificate.
- @param[in] CertSize Size of the X509 certificate in bytes.
- @param[out] Usage Key Usage bytes.
- @param[in, out] UsageSize Key Usage buffer sizs in bytes.
- @retval TRUE The Usage bytes retrieve successfully.
- @retval FALSE If Cert is NULL.
- If CertSize is NULL.
- If Usage is not NULL and *UsageSize is 0.
- If Cert is invalid.
- @retval FALSE If the Usage is NULL. The required buffer size
- is returned in the UsageSize parameter.
- @retval FALSE The operation is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceX509GetExtendedKeyUsage (
- IN CONST UINT8 *Cert,
- IN UINTN CertSize,
- OUT UINT8 *Usage,
- IN OUT UINTN *UsageSize
- )
- {
- return CALL_BASECRYPTLIB (X509.Services.GetExtendedKeyUsage, X509GetExtendedKeyUsage, (Cert, CertSize, Usage, UsageSize), FALSE);
- }
- /**
- Retrieve the Validity from one X.509 certificate
- If Cert is NULL, then return FALSE.
- If CertIssuerSize is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] Cert Pointer to the DER-encoded X509 certificate.
- @param[in] CertSize Size of the X509 certificate in bytes.
- @param[in] From notBefore Pointer to DateTime object.
- @param[in,out] FromSize notBefore DateTime object size.
- @param[in] To notAfter Pointer to DateTime object.
- @param[in,out] ToSize notAfter DateTime object size.
- Note: X509CompareDateTime to compare DateTime oject
- x509SetDateTime to get a DateTime object from a DateTimeStr
- @retval TRUE The certificate Validity retrieved successfully.
- @retval FALSE Invalid certificate, or Validity retrieve failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceX509GetValidity (
- IN CONST UINT8 *Cert,
- IN UINTN CertSize,
- IN UINT8 *From,
- IN OUT UINTN *FromSize,
- IN UINT8 *To,
- IN OUT UINTN *ToSize
- )
- {
- return CALL_BASECRYPTLIB (X509.Services.GetValidity, X509GetValidity, (Cert, CertSize, From, FromSize, To, ToSize), FALSE);
- }
- /**
- Format a DateTimeStr to DataTime object in DataTime Buffer
- If DateTimeStr is NULL, then return FALSE.
- If DateTimeSize is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] DateTimeStr DateTime string like YYYYMMDDhhmmssZ
- Ref: https://www.w3.org/TR/NOTE-datetime
- Z stand for UTC time
- @param[out] DateTime Pointer to a DateTime object.
- @param[in,out] DateTimeSize DateTime object buffer size.
- @retval TRUE The DateTime object create successfully.
- @retval FALSE If DateTimeStr is NULL.
- If DateTimeSize is NULL.
- If DateTime is not NULL and *DateTimeSize is 0.
- If Year Month Day Hour Minute Second combination is invalid datetime.
- @retval FALSE If the DateTime is NULL. The required buffer size
- (including the final null) is returned in the
- DateTimeSize parameter.
- @retval FALSE The operation is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceX509FormatDateTime (
- IN CONST CHAR8 *DateTimeStr,
- OUT VOID *DateTime,
- IN OUT UINTN *DateTimeSize
- )
- {
- return CALL_BASECRYPTLIB (X509.Services.FormatDateTime, X509FormatDateTime, (DateTimeStr, DateTime, DateTimeSize), FALSE);
- }
- /**
- Compare DateTime1 object and DateTime2 object.
- If DateTime1 is NULL, then return -2.
- If DateTime2 is NULL, then return -2.
- If DateTime1 == DateTime2, then return 0
- If DateTime1 > DateTime2, then return 1
- If DateTime1 < DateTime2, then return -1
- @param[in] DateTime1 Pointer to a DateTime Ojbect
- @param[in] DateTime2 Pointer to a DateTime Object
- @retval 0 If DateTime1 == DateTime2
- @retval 1 If DateTime1 > DateTime2
- @retval -1 If DateTime1 < DateTime2
- **/
- INT32
- EFIAPI
- CryptoServiceX509CompareDateTime (
- IN CONST VOID *DateTime1,
- IN CONST VOID *DateTime2
- )
- {
- return CALL_BASECRYPTLIB (X509.Services.CompareDateTime, X509CompareDateTime, (DateTime1, DateTime2), FALSE);
- }
- /**
- Retrieve the Key Usage from one X.509 certificate.
- @param[in] Cert Pointer to the DER-encoded X509 certificate.
- @param[in] CertSize Size of the X509 certificate in bytes.
- @param[out] Usage Key Usage (CRYPTO_X509_KU_*)
- @retval TRUE The certificate Key Usage retrieved successfully.
- @retval FALSE Invalid certificate, or Usage is NULL
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceX509GetKeyUsage (
- IN CONST UINT8 *Cert,
- IN UINTN CertSize,
- OUT UINTN *Usage
- )
- {
- return CALL_BASECRYPTLIB (X509.Services.GetKeyUsage, X509GetKeyUsage, (Cert, CertSize, Usage), FALSE);
- }
- /**
- Verify one X509 certificate was issued by the trusted CA.
- @param[in] RootCert Trusted Root Certificate buffer
- @param[in] RootCertLength Trusted Root Certificate buffer length
- @param[in] CertChain One or more ASN.1 DER-encoded X.509 certificates
- where the first certificate is signed by the Root
- Certificate or is the Root Cerificate itself. and
- subsequent cerificate is signed by the preceding
- cerificate.
- @param[in] CertChainLength Total length of the certificate chain, in bytes.
- @retval TRUE All cerificates was issued by the first certificate in X509Certchain.
- @retval FALSE Invalid certificate or the certificate was not issued by the given
- trusted CA.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceX509VerifyCertChain (
- IN CONST UINT8 *RootCert,
- IN UINTN RootCertLength,
- IN CONST UINT8 *CertChain,
- IN UINTN CertChainLength
- )
- {
- return CALL_BASECRYPTLIB (X509.Services.VerifyCertChain, X509VerifyCertChain, (RootCert, RootCertLength, CertChain, CertChainLength), FALSE);
- }
- /**
- Get one X509 certificate from CertChain.
- @param[in] CertChain One or more ASN.1 DER-encoded X.509 certificates
- where the first certificate is signed by the Root
- Certificate or is the Root Cerificate itself. and
- subsequent cerificate is signed by the preceding
- cerificate.
- @param[in] CertChainLength Total length of the certificate chain, in bytes.
- @param[in] CertIndex Index of certificate.
- @param[out] Cert The certificate at the index of CertChain.
- @param[out] CertLength The length certificate at the index of CertChain.
- @retval TRUE Success.
- @retval FALSE Failed to get certificate from certificate chain.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceX509GetCertFromCertChain (
- IN CONST UINT8 *CertChain,
- IN UINTN CertChainLength,
- IN CONST INT32 CertIndex,
- OUT CONST UINT8 **Cert,
- OUT UINTN *CertLength
- )
- {
- return CALL_BASECRYPTLIB (X509.Services.GetCertFromCertChain, X509GetCertFromCertChain, (CertChain, CertChainLength, CertIndex, Cert, CertLength), FALSE);
- }
- /**
- Retrieve the tag and length of the tag.
- @param Ptr The position in the ASN.1 data
- @param End End of data
- @param Length The variable that will receive the length
- @param Tag The expected tag
- @retval TRUE Get tag successful
- @retval FALSe Failed to get tag or tag not match
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceAsn1GetTag (
- IN OUT UINT8 **Ptr,
- IN CONST UINT8 *End,
- OUT UINTN *Length,
- IN UINT32 Tag
- )
- {
- return CALL_BASECRYPTLIB (X509.Services.Asn1GetTag, Asn1GetTag, (Ptr, End, Length, Tag), FALSE);
- }
- /**
- Retrieve the basic constraints from one X.509 certificate.
- @param[in] Cert Pointer to the DER-encoded X509 certificate.
- @param[in] CertSize size of the X509 certificate in bytes.
- @param[out] BasicConstraints basic constraints bytes.
- @param[in, out] BasicConstraintsSize basic constraints buffer sizs in bytes.
- @retval TRUE The basic constraints retrieve successfully.
- @retval FALSE If cert is NULL.
- If cert_size is NULL.
- If basic_constraints is not NULL and *basic_constraints_size is 0.
- If cert is invalid.
- @retval FALSE The required buffer size is small.
- The return buffer size is basic_constraints_size parameter.
- @retval FALSE If no Extension entry match oid.
- @retval FALSE The operation is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceX509GetExtendedBasicConstraints (
- CONST UINT8 *Cert,
- UINTN CertSize,
- UINT8 *BasicConstraints,
- UINTN *BasicConstraintsSize
- )
- {
- return CALL_BASECRYPTLIB (X509.Services.GetExtendedBasicConstraints, X509GetExtendedBasicConstraints, (Cert, CertSize, BasicConstraints, BasicConstraintsSize), FALSE);
- }
- /**
- Derives a key from a password using a salt and iteration count, based on PKCS#5 v2.0
- password based encryption key derivation function PBKDF2, as specified in RFC 2898.
- If Password or Salt or OutKey is NULL, then return FALSE.
- If the hash algorithm could not be determined, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] PasswordLength Length of input password in bytes.
- @param[in] Password Pointer to the array for the password.
- @param[in] SaltLength Size of the Salt in bytes.
- @param[in] Salt Pointer to the Salt.
- @param[in] IterationCount Number of iterations to perform. Its value should be
- greater than or equal to 1.
- @param[in] DigestSize Size of the message digest to be used (eg. SHA256_DIGEST_SIZE).
- NOTE: DigestSize will be used to determine the hash algorithm.
- Only SHA1_DIGEST_SIZE or SHA256_DIGEST_SIZE is supported.
- @param[in] KeyLength Size of the derived key buffer in bytes.
- @param[out] OutKey Pointer to the output derived key buffer.
- @retval TRUE A key was derived successfully.
- @retval FALSE One of the pointers was NULL or one of the sizes was too large.
- @retval FALSE The hash algorithm could not be determined from the digest size.
- @retval FALSE The key derivation operation failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServicePkcs5HashPassword (
- IN UINTN PasswordLength,
- IN CONST CHAR8 *Password,
- IN UINTN SaltLength,
- IN CONST UINT8 *Salt,
- IN UINTN IterationCount,
- IN UINTN DigestSize,
- IN UINTN KeyLength,
- OUT UINT8 *OutKey
- )
- {
- return CALL_BASECRYPTLIB (Pkcs.Services.Pkcs5HashPassword, Pkcs5HashPassword, (PasswordLength, Password, SaltLength, Salt, IterationCount, DigestSize, KeyLength, OutKey), FALSE);
- }
- /**
- Encrypts a blob using PKCS1v2 (RSAES-OAEP) schema. On success, will return the
- encrypted message in a newly allocated buffer.
- Things that can cause a failure include:
- - X509 key size does not match any known key size.
- - Fail to parse X509 certificate.
- - Fail to allocate an intermediate buffer.
- - Null pointer provided for a non-optional parameter.
- - Data size is too large for the provided key size (max size is a function of key size
- and hash digest size).
- @param[in] PublicKey A pointer to the DER-encoded X509 certificate that
- will be used to encrypt the data.
- @param[in] PublicKeySize Size of the X509 cert buffer.
- @param[in] InData Data to be encrypted.
- @param[in] InDataSize Size of the data buffer.
- @param[in] PrngSeed [Optional] If provided, a pointer to a random seed buffer
- to be used when initializing the PRNG. NULL otherwise.
- @param[in] PrngSeedSize [Optional] If provided, size of the random seed buffer.
- 0 otherwise.
- @param[out] EncryptedData Pointer to an allocated buffer containing the encrypted
- message.
- @param[out] EncryptedDataSize Size of the encrypted message buffer.
- @retval TRUE Encryption was successful.
- @retval FALSE Encryption failed.
- **/
- BOOLEAN
- EFIAPI
- CryptoServicePkcs1v2Encrypt (
- IN CONST UINT8 *PublicKey,
- IN UINTN PublicKeySize,
- IN UINT8 *InData,
- IN UINTN InDataSize,
- IN CONST UINT8 *PrngSeed OPTIONAL,
- IN UINTN PrngSeedSize OPTIONAL,
- OUT UINT8 **EncryptedData,
- OUT UINTN *EncryptedDataSize
- )
- {
- return CALL_BASECRYPTLIB (Pkcs.Services.Pkcs1v2Encrypt, Pkcs1v2Encrypt, (PublicKey, PublicKeySize, InData, InDataSize, PrngSeed, PrngSeedSize, EncryptedData, EncryptedDataSize), FALSE);
- }
- /**
- Get the signer's certificates from PKCS#7 signed data as described in "PKCS #7:
- Cryptographic Message Syntax Standard". The input signed data could be wrapped
- in a ContentInfo structure.
- If P7Data, CertStack, StackLength, TrustedCert or CertLength is NULL, then
- return FALSE. If P7Length overflow, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] P7Data Pointer to the PKCS#7 message to verify.
- @param[in] P7Length Length of the PKCS#7 message in bytes.
- @param[out] CertStack Pointer to Signer's certificates retrieved from P7Data.
- It's caller's responsibility to free the buffer with
- Pkcs7FreeSigners().
- This data structure is EFI_CERT_STACK type.
- @param[out] StackLength Length of signer's certificates in bytes.
- @param[out] TrustedCert Pointer to a trusted certificate from Signer's certificates.
- It's caller's responsibility to free the buffer with
- Pkcs7FreeSigners().
- @param[out] CertLength Length of the trusted certificate in bytes.
- @retval TRUE The operation is finished successfully.
- @retval FALSE Error occurs during the operation.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServicePkcs7GetSigners (
- IN CONST UINT8 *P7Data,
- IN UINTN P7Length,
- OUT UINT8 **CertStack,
- OUT UINTN *StackLength,
- OUT UINT8 **TrustedCert,
- OUT UINTN *CertLength
- )
- {
- return CALL_BASECRYPTLIB (Pkcs.Services.Pkcs7GetSigners, Pkcs7GetSigners, (P7Data, P7Length, CertStack, StackLength, TrustedCert, CertLength), FALSE);
- }
- /**
- Wrap function to use free() to free allocated memory for certificates.
- If this interface is not supported, then ASSERT().
- @param[in] Certs Pointer to the certificates to be freed.
- **/
- VOID
- EFIAPI
- CryptoServicePkcs7FreeSigners (
- IN UINT8 *Certs
- )
- {
- CALL_VOID_BASECRYPTLIB (Pkcs.Services.Pkcs7FreeSigners, Pkcs7FreeSigners, (Certs));
- }
- /**
- Retrieves all embedded certificates from PKCS#7 signed data as described in "PKCS #7:
- Cryptographic Message Syntax Standard", and outputs two certificate lists chained and
- unchained to the signer's certificates.
- The input signed data could be wrapped in a ContentInfo structure.
- @param[in] P7Data Pointer to the PKCS#7 message.
- @param[in] P7Length Length of the PKCS#7 message in bytes.
- @param[out] SignerChainCerts Pointer to the certificates list chained to signer's
- certificate. It's caller's responsibility to free the buffer
- with Pkcs7FreeSigners().
- This data structure is EFI_CERT_STACK type.
- @param[out] ChainLength Length of the chained certificates list buffer in bytes.
- @param[out] UnchainCerts Pointer to the unchained certificates lists. It's caller's
- responsibility to free the buffer with Pkcs7FreeSigners().
- This data structure is EFI_CERT_STACK type.
- @param[out] UnchainLength Length of the unchained certificates list buffer in bytes.
- @retval TRUE The operation is finished successfully.
- @retval FALSE Error occurs during the operation.
- **/
- BOOLEAN
- EFIAPI
- CryptoServicePkcs7GetCertificatesList (
- IN CONST UINT8 *P7Data,
- IN UINTN P7Length,
- OUT UINT8 **SignerChainCerts,
- OUT UINTN *ChainLength,
- OUT UINT8 **UnchainCerts,
- OUT UINTN *UnchainLength
- )
- {
- return CALL_BASECRYPTLIB (Pkcs.Services.Pkcs7GetCertificatesList, Pkcs7GetCertificatesList, (P7Data, P7Length, SignerChainCerts, ChainLength, UnchainCerts, UnchainLength), FALSE);
- }
- /**
- Creates a PKCS#7 signedData as described in "PKCS #7: Cryptographic Message
- Syntax Standard, version 1.5". This interface is only intended to be used for
- application to perform PKCS#7 functionality validation.
- If this interface is not supported, then return FALSE.
- @param[in] PrivateKey Pointer to the PEM-formatted private key data for
- data signing.
- @param[in] PrivateKeySize Size of the PEM private key data in bytes.
- @param[in] KeyPassword NULL-terminated passphrase used for encrypted PEM
- key data.
- @param[in] InData Pointer to the content to be signed.
- @param[in] InDataSize Size of InData in bytes.
- @param[in] SignCert Pointer to signer's DER-encoded certificate to sign with.
- @param[in] OtherCerts Pointer to an optional additional set of certificates to
- include in the PKCS#7 signedData (e.g. any intermediate
- CAs in the chain).
- @param[out] SignedData Pointer to output PKCS#7 signedData. It's caller's
- responsibility to free the buffer with FreePool().
- @param[out] SignedDataSize Size of SignedData in bytes.
- @retval TRUE PKCS#7 data signing succeeded.
- @retval FALSE PKCS#7 data signing failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServicePkcs7Sign (
- IN CONST UINT8 *PrivateKey,
- IN UINTN PrivateKeySize,
- IN CONST UINT8 *KeyPassword,
- IN UINT8 *InData,
- IN UINTN InDataSize,
- IN UINT8 *SignCert,
- IN UINT8 *OtherCerts OPTIONAL,
- OUT UINT8 **SignedData,
- OUT UINTN *SignedDataSize
- )
- {
- return CALL_BASECRYPTLIB (Pkcs.Services.Pkcs7Sign, Pkcs7Sign, (PrivateKey, PrivateKeySize, KeyPassword, InData, InDataSize, SignCert, OtherCerts, SignedData, SignedDataSize), FALSE);
- }
- /**
- Verifies the validity of a PKCS#7 signed data as described in "PKCS #7:
- Cryptographic Message Syntax Standard". The input signed data could be wrapped
- in a ContentInfo structure.
- If P7Data, TrustedCert or InData is NULL, then return FALSE.
- If P7Length, CertLength or DataLength overflow, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] P7Data Pointer to the PKCS#7 message to verify.
- @param[in] P7Length Length of the PKCS#7 message in bytes.
- @param[in] TrustedCert Pointer to a trusted/root certificate encoded in DER, which
- is used for certificate chain verification.
- @param[in] CertLength Length of the trusted certificate in bytes.
- @param[in] InData Pointer to the content to be verified.
- @param[in] DataLength Length of InData in bytes.
- @retval TRUE The specified PKCS#7 signed data is valid.
- @retval FALSE Invalid PKCS#7 signed data.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServicePkcs7Verify (
- IN CONST UINT8 *P7Data,
- IN UINTN P7Length,
- IN CONST UINT8 *TrustedCert,
- IN UINTN CertLength,
- IN CONST UINT8 *InData,
- IN UINTN DataLength
- )
- {
- return CALL_BASECRYPTLIB (Pkcs.Services.Pkcs7Verify, Pkcs7Verify, (P7Data, P7Length, TrustedCert, CertLength, InData, DataLength), FALSE);
- }
- /**
- This function receives a PKCS7 formatted signature, and then verifies that
- the specified Enhanced or Extended Key Usages (EKU's) are present in the end-entity
- leaf signing certificate.
- Note that this function does not validate the certificate chain.
- Applications for custom EKU's are quite flexible. For example, a policy EKU
- may be present in an Issuing Certificate Authority (CA), and any sub-ordinate
- certificate issued might also contain this EKU, thus constraining the
- sub-ordinate certificate. Other applications might allow a certificate
- embedded in a device to specify that other Object Identifiers (OIDs) are
- present which contains binary data specifying custom capabilities that
- the device is able to do.
- @param[in] Pkcs7Signature The PKCS#7 signed information content block. An array
- containing the content block with both the signature,
- the signer's certificate, and any necessary intermediate
- certificates.
- @param[in] Pkcs7SignatureSize Number of bytes in Pkcs7Signature.
- @param[in] RequiredEKUs Array of null-terminated strings listing OIDs of
- required EKUs that must be present in the signature.
- @param[in] RequiredEKUsSize Number of elements in the RequiredEKUs string array.
- @param[in] RequireAllPresent If this is TRUE, then all of the specified EKU's
- must be present in the leaf signer. If it is
- FALSE, then we will succeed if we find any
- of the specified EKU's.
- @retval EFI_SUCCESS The required EKUs were found in the signature.
- @retval EFI_INVALID_PARAMETER A parameter was invalid.
- @retval EFI_NOT_FOUND One or more EKU's were not found in the signature.
- **/
- RETURN_STATUS
- EFIAPI
- CryptoServiceVerifyEKUsInPkcs7Signature (
- IN CONST UINT8 *Pkcs7Signature,
- IN CONST UINT32 SignatureSize,
- IN CONST CHAR8 *RequiredEKUs[],
- IN CONST UINT32 RequiredEKUsSize,
- IN BOOLEAN RequireAllPresent
- )
- {
- return CALL_BASECRYPTLIB (Pkcs.Services.VerifyEKUsInPkcs7Signature, VerifyEKUsInPkcs7Signature, (Pkcs7Signature, SignatureSize, RequiredEKUs, RequiredEKUsSize, RequireAllPresent), FALSE);
- }
- /**
- Extracts the attached content from a PKCS#7 signed data if existed. The input signed
- data could be wrapped in a ContentInfo structure.
- If P7Data, Content, or ContentSize is NULL, then return FALSE. If P7Length overflow,
- then return FALSE. If the P7Data is not correctly formatted, then return FALSE.
- Caution: This function may receive untrusted input. So this function will do
- basic check for PKCS#7 data structure.
- @param[in] P7Data Pointer to the PKCS#7 signed data to process.
- @param[in] P7Length Length of the PKCS#7 signed data in bytes.
- @param[out] Content Pointer to the extracted content from the PKCS#7 signedData.
- It's caller's responsibility to free the buffer with FreePool().
- @param[out] ContentSize The size of the extracted content in bytes.
- @retval TRUE The P7Data was correctly formatted for processing.
- @retval FALSE The P7Data was not correctly formatted for processing.
- **/
- BOOLEAN
- EFIAPI
- CryptoServicePkcs7GetAttachedContent (
- IN CONST UINT8 *P7Data,
- IN UINTN P7Length,
- OUT VOID **Content,
- OUT UINTN *ContentSize
- )
- {
- return CALL_BASECRYPTLIB (Pkcs.Services.Pkcs7GetAttachedContent, Pkcs7GetAttachedContent, (P7Data, P7Length, Content, ContentSize), FALSE);
- }
- /**
- Verifies the validity of a PE/COFF Authenticode Signature as described in "Windows
- Authenticode Portable Executable Signature Format".
- If AuthData is NULL, then return FALSE.
- If ImageHash is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] AuthData Pointer to the Authenticode Signature retrieved from signed
- PE/COFF image to be verified.
- @param[in] DataSize Size of the Authenticode Signature in bytes.
- @param[in] TrustedCert Pointer to a trusted/root certificate encoded in DER, which
- is used for certificate chain verification.
- @param[in] CertSize Size of the trusted certificate in bytes.
- @param[in] ImageHash Pointer to the original image file hash value. The procedure
- for calculating the image hash value is described in Authenticode
- specification.
- @param[in] HashSize Size of Image hash value in bytes.
- @retval TRUE The specified Authenticode Signature is valid.
- @retval FALSE Invalid Authenticode Signature.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceAuthenticodeVerify (
- IN CONST UINT8 *AuthData,
- IN UINTN DataSize,
- IN CONST UINT8 *TrustedCert,
- IN UINTN CertSize,
- IN CONST UINT8 *ImageHash,
- IN UINTN HashSize
- )
- {
- return CALL_BASECRYPTLIB (Pkcs.Services.AuthenticodeVerify, AuthenticodeVerify, (AuthData, DataSize, TrustedCert, CertSize, ImageHash, HashSize), FALSE);
- }
- /**
- Verifies the validity of a RFC3161 Timestamp CounterSignature embedded in PE/COFF Authenticode
- signature.
- If AuthData is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] AuthData Pointer to the Authenticode Signature retrieved from signed
- PE/COFF image to be verified.
- @param[in] DataSize Size of the Authenticode Signature in bytes.
- @param[in] TsaCert Pointer to a trusted/root TSA certificate encoded in DER, which
- is used for TSA certificate chain verification.
- @param[in] CertSize Size of the trusted certificate in bytes.
- @param[out] SigningTime Return the time of timestamp generation time if the timestamp
- signature is valid.
- @retval TRUE The specified Authenticode includes a valid RFC3161 Timestamp CounterSignature.
- @retval FALSE No valid RFC3161 Timestamp CounterSignature in the specified Authenticode data.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceImageTimestampVerify (
- IN CONST UINT8 *AuthData,
- IN UINTN DataSize,
- IN CONST UINT8 *TsaCert,
- IN UINTN CertSize,
- OUT EFI_TIME *SigningTime
- )
- {
- return CALL_BASECRYPTLIB (Pkcs.Services.ImageTimestampVerify, ImageTimestampVerify, (AuthData, DataSize, TsaCert, CertSize, SigningTime), FALSE);
- }
- // =====================================================================================
- // DH Key Exchange Primitive
- // =====================================================================================
- /**
- Allocates and Initializes one Diffie-Hellman Context for subsequent use.
- @return Pointer to the Diffie-Hellman Context that has been initialized.
- If the allocations fails, DhNew() returns NULL.
- If the interface is not supported, DhNew() returns NULL.
- **/
- VOID *
- EFIAPI
- CryptoServiceDhNew (
- VOID
- )
- {
- return CALL_BASECRYPTLIB (Dh.Services.New, DhNew, (), NULL);
- }
- /**
- Release the specified DH context.
- If the interface is not supported, then ASSERT().
- @param[in] DhContext Pointer to the DH context to be released.
- **/
- VOID
- EFIAPI
- CryptoServiceDhFree (
- IN VOID *DhContext
- )
- {
- CALL_VOID_BASECRYPTLIB (Dh.Services.Free, DhFree, (DhContext));
- }
- /**
- Generates DH parameter.
- Given generator g, and length of prime number p in bits, this function generates p,
- and sets DH context according to value of g and p.
- Before this function can be invoked, pseudorandom number generator must be correctly
- initialized by RandomSeed().
- If DhContext is NULL, then return FALSE.
- If Prime is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in, out] DhContext Pointer to the DH context.
- @param[in] Generator Value of generator.
- @param[in] PrimeLength Length in bits of prime to be generated.
- @param[out] Prime Pointer to the buffer to receive the generated prime number.
- @retval TRUE DH parameter generation succeeded.
- @retval FALSE Value of Generator is not supported.
- @retval FALSE PRNG fails to generate random prime number with PrimeLength.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceDhGenerateParameter (
- IN OUT VOID *DhContext,
- IN UINTN Generator,
- IN UINTN PrimeLength,
- OUT UINT8 *Prime
- )
- {
- return CALL_BASECRYPTLIB (Dh.Services.GenerateParameter, DhGenerateParameter, (DhContext, Generator, PrimeLength, Prime), FALSE);
- }
- /**
- Sets generator and prime parameters for DH.
- Given generator g, and prime number p, this function and sets DH
- context accordingly.
- If DhContext is NULL, then return FALSE.
- If Prime is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in, out] DhContext Pointer to the DH context.
- @param[in] Generator Value of generator.
- @param[in] PrimeLength Length in bits of prime to be generated.
- @param[in] Prime Pointer to the prime number.
- @retval TRUE DH parameter setting succeeded.
- @retval FALSE Value of Generator is not supported.
- @retval FALSE Value of Generator is not suitable for the Prime.
- @retval FALSE Value of Prime is not a prime number.
- @retval FALSE Value of Prime is not a safe prime number.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceDhSetParameter (
- IN OUT VOID *DhContext,
- IN UINTN Generator,
- IN UINTN PrimeLength,
- IN CONST UINT8 *Prime
- )
- {
- return CALL_BASECRYPTLIB (Dh.Services.SetParameter, DhSetParameter, (DhContext, Generator, PrimeLength, Prime), FALSE);
- }
- /**
- Generates DH public key.
- This function generates random secret exponent, and computes the public key, which is
- returned via parameter PublicKey and PublicKeySize. DH context is updated accordingly.
- If the PublicKey buffer is too small to hold the public key, FALSE is returned and
- PublicKeySize is set to the required buffer size to obtain the public key.
- If DhContext is NULL, then return FALSE.
- If PublicKeySize is NULL, then return FALSE.
- If PublicKeySize is large enough but PublicKey is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in, out] DhContext Pointer to the DH context.
- @param[out] PublicKey Pointer to the buffer to receive generated public key.
- @param[in, out] PublicKeySize On input, the size of PublicKey buffer in bytes.
- On output, the size of data returned in PublicKey buffer in bytes.
- @retval TRUE DH public key generation succeeded.
- @retval FALSE DH public key generation failed.
- @retval FALSE PublicKeySize is not large enough.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceDhGenerateKey (
- IN OUT VOID *DhContext,
- OUT UINT8 *PublicKey,
- IN OUT UINTN *PublicKeySize
- )
- {
- return CALL_BASECRYPTLIB (Dh.Services.GenerateKey, DhGenerateKey, (DhContext, PublicKey, PublicKeySize), FALSE);
- }
- /**
- Computes exchanged common key.
- Given peer's public key, this function computes the exchanged common key, based on its own
- context including value of prime modulus and random secret exponent.
- If DhContext is NULL, then return FALSE.
- If PeerPublicKey is NULL, then return FALSE.
- If KeySize is NULL, then return FALSE.
- If Key is NULL, then return FALSE.
- If KeySize is not large enough, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in, out] DhContext Pointer to the DH context.
- @param[in] PeerPublicKey Pointer to the peer's public key.
- @param[in] PeerPublicKeySize Size of peer's public key in bytes.
- @param[out] Key Pointer to the buffer to receive generated key.
- @param[in, out] KeySize On input, the size of Key buffer in bytes.
- On output, the size of data returned in Key buffer in bytes.
- @retval TRUE DH exchanged key generation succeeded.
- @retval FALSE DH exchanged key generation failed.
- @retval FALSE KeySize is not large enough.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceDhComputeKey (
- IN OUT VOID *DhContext,
- IN CONST UINT8 *PeerPublicKey,
- IN UINTN PeerPublicKeySize,
- OUT UINT8 *Key,
- IN OUT UINTN *KeySize
- )
- {
- return CALL_BASECRYPTLIB (Dh.Services.ComputeKey, DhComputeKey, (DhContext, PeerPublicKey, PeerPublicKeySize, Key, KeySize), FALSE);
- }
- // =====================================================================================
- // Pseudo-Random Generation Primitive
- // =====================================================================================
- /**
- Sets up the seed value for the pseudorandom number generator.
- This function sets up the seed value for the pseudorandom number generator.
- If Seed is not NULL, then the seed passed in is used.
- If Seed is NULL, then default seed is used.
- If this interface is not supported, then return FALSE.
- @param[in] Seed Pointer to seed value.
- If NULL, default seed is used.
- @param[in] SeedSize Size of seed value.
- If Seed is NULL, this parameter is ignored.
- @retval TRUE Pseudorandom number generator has enough entropy for random generation.
- @retval FALSE Pseudorandom number generator does not have enough entropy for random generation.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceRandomSeed (
- IN CONST UINT8 *Seed OPTIONAL,
- IN UINTN SeedSize
- )
- {
- return CALL_BASECRYPTLIB (Random.Services.Seed, RandomSeed, (Seed, SeedSize), FALSE);
- }
- /**
- Generates a pseudorandom byte stream of the specified size.
- If Output is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[out] Output Pointer to buffer to receive random value.
- @param[in] Size Size of random bytes to generate.
- @retval TRUE Pseudorandom byte stream generated successfully.
- @retval FALSE Pseudorandom number generator fails to generate due to lack of entropy.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceRandomBytes (
- OUT UINT8 *Output,
- IN UINTN Size
- )
- {
- return CALL_BASECRYPTLIB (Random.Services.Bytes, RandomBytes, (Output, Size), FALSE);
- }
- // =====================================================================================
- // Key Derivation Function Primitive
- // =====================================================================================
- /**
- Derive key data using HMAC-SHA256 based KDF.
- @param[in] Key Pointer to the user-supplied key.
- @param[in] KeySize Key size in bytes.
- @param[in] Salt Pointer to the salt(non-secret) value.
- @param[in] SaltSize Salt size in bytes.
- @param[in] Info Pointer to the application specific info.
- @param[in] InfoSize Info size in bytes.
- @param[out] Out Pointer to buffer to receive hkdf value.
- @param[in] OutSize Size of hkdf bytes to generate.
- @retval TRUE Hkdf generated successfully.
- @retval FALSE Hkdf generation failed.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceHkdfSha256ExtractAndExpand (
- IN CONST UINT8 *Key,
- IN UINTN KeySize,
- IN CONST UINT8 *Salt,
- IN UINTN SaltSize,
- IN CONST UINT8 *Info,
- IN UINTN InfoSize,
- OUT UINT8 *Out,
- IN UINTN OutSize
- )
- {
- return CALL_BASECRYPTLIB (Hkdf.Services.Sha256ExtractAndExpand, HkdfSha256ExtractAndExpand, (Key, KeySize, Salt, SaltSize, Info, InfoSize, Out, OutSize), FALSE);
- }
- /**
- Derive SHA256 HMAC-based Extract key Derivation Function (HKDF).
- @param[in] Key Pointer to the user-supplied key.
- @param[in] KeySize key size in bytes.
- @param[in] Salt Pointer to the salt(non-secret) value.
- @param[in] SaltSize salt size in bytes.
- @param[out] PrkOut Pointer to buffer to receive hkdf value.
- @param[in] PrkOutSize size of hkdf bytes to generate.
- @retval true Hkdf generated successfully.
- @retval false Hkdf generation failed.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceHkdfSha256Extract (
- IN CONST UINT8 *Key,
- IN UINTN KeySize,
- IN CONST UINT8 *Salt,
- IN UINTN SaltSize,
- OUT UINT8 *PrkOut,
- UINTN PrkOutSize
- )
- {
- return CALL_BASECRYPTLIB (Hkdf.Services.Sha256Extract, HkdfSha256Extract, (Key, KeySize, Salt, SaltSize, PrkOut, PrkOutSize), FALSE);
- }
- /**
- Derive SHA256 HMAC-based Expand Key Derivation Function (HKDF).
- @param[in] Prk Pointer to the user-supplied key.
- @param[in] PrkSize Key size in bytes.
- @param[in] Info Pointer to the application specific info.
- @param[in] InfoSize Info size in bytes.
- @param[out] Out Pointer to buffer to receive hkdf value.
- @param[in] OutSize Size of hkdf bytes to generate.
- @retval TRUE Hkdf generated successfully.
- @retval FALSE Hkdf generation failed.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceHkdfSha256Expand (
- IN CONST UINT8 *Prk,
- IN UINTN PrkSize,
- IN CONST UINT8 *Info,
- IN UINTN InfoSize,
- OUT UINT8 *Out,
- IN UINTN OutSize
- )
- {
- return CALL_BASECRYPTLIB (Hkdf.Services.Sha256Expand, HkdfSha256Expand, (Prk, PrkSize, Info, InfoSize, Out, OutSize), FALSE);
- }
- /**
- Derive SHA384 HMAC-based Extract-and-Expand Key Derivation Function (HKDF).
- @param[in] Key Pointer to the user-supplied key.
- @param[in] KeySize Key size in bytes.
- @param[in] Salt Pointer to the salt(non-secret) value.
- @param[in] SaltSize Salt size in bytes.
- @param[in] Info Pointer to the application specific info.
- @param[in] InfoSize Info size in bytes.
- @param[out] Out Pointer to buffer to receive hkdf value.
- @param[in] OutSize Size of hkdf bytes to generate.
- @retval TRUE Hkdf generated successfully.
- @retval FALSE Hkdf generation failed.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceHkdfSha384ExtractAndExpand (
- IN CONST UINT8 *Key,
- IN UINTN KeySize,
- IN CONST UINT8 *Salt,
- IN UINTN SaltSize,
- IN CONST UINT8 *Info,
- IN UINTN InfoSize,
- OUT UINT8 *Out,
- IN UINTN OutSize
- )
- {
- return CALL_BASECRYPTLIB (Hkdf.Services.Sha384ExtractAndExpand, HkdfSha384ExtractAndExpand, (Key, KeySize, Salt, SaltSize, Info, InfoSize, Out, OutSize), FALSE);
- }
- /**
- Derive SHA384 HMAC-based Extract key Derivation Function (HKDF).
- @param[in] Key Pointer to the user-supplied key.
- @param[in] KeySize key size in bytes.
- @param[in] Salt Pointer to the salt(non-secret) value.
- @param[in] SaltSize salt size in bytes.
- @param[out] PrkOut Pointer to buffer to receive hkdf value.
- @param[in] PrkOutSize size of hkdf bytes to generate.
- @retval true Hkdf generated successfully.
- @retval false Hkdf generation failed.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceHkdfSha384Extract (
- IN CONST UINT8 *Key,
- IN UINTN KeySize,
- IN CONST UINT8 *Salt,
- IN UINTN SaltSize,
- OUT UINT8 *PrkOut,
- UINTN PrkOutSize
- )
- {
- return CALL_BASECRYPTLIB (Hkdf.Services.Sha384Extract, HkdfSha384Extract, (Key, KeySize, Salt, SaltSize, PrkOut, PrkOutSize), FALSE);
- }
- /**
- Derive SHA384 HMAC-based Expand Key Derivation Function (HKDF).
- @param[in] Prk Pointer to the user-supplied key.
- @param[in] PrkSize Key size in bytes.
- @param[in] Info Pointer to the application specific info.
- @param[in] InfoSize Info size in bytes.
- @param[out] Out Pointer to buffer to receive hkdf value.
- @param[in] OutSize Size of hkdf bytes to generate.
- @retval TRUE Hkdf generated successfully.
- @retval FALSE Hkdf generation failed.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceHkdfSha384Expand (
- IN CONST UINT8 *Prk,
- IN UINTN PrkSize,
- IN CONST UINT8 *Info,
- IN UINTN InfoSize,
- OUT UINT8 *Out,
- IN UINTN OutSize
- )
- {
- return CALL_BASECRYPTLIB (Hkdf.Services.Sha384Expand, HkdfSha384Expand, (Prk, PrkSize, Info, InfoSize, Out, OutSize), FALSE);
- }
- /**
- Initializes the OpenSSL library.
- This function registers ciphers and digests used directly and indirectly
- by SSL/TLS, and initializes the readable error messages.
- This function must be called before any other action takes places.
- @retval TRUE The OpenSSL library has been initialized.
- @retval FALSE Failed to initialize the OpenSSL library.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceTlsInitialize (
- VOID
- )
- {
- return CALL_BASECRYPTLIB (Tls.Services.Initialize, TlsInitialize, (), FALSE);
- }
- /**
- Free an allocated SSL_CTX object.
- @param[in] TlsCtx Pointer to the SSL_CTX object to be released.
- **/
- VOID
- EFIAPI
- CryptoServiceTlsCtxFree (
- IN VOID *TlsCtx
- )
- {
- CALL_VOID_BASECRYPTLIB (Tls.Services.CtxFree, TlsCtxFree, (TlsCtx));
- }
- /**
- Creates a new SSL_CTX object as framework to establish TLS/SSL enabled
- connections.
- @param[in] MajorVer Major Version of TLS/SSL Protocol.
- @param[in] MinorVer Minor Version of TLS/SSL Protocol.
- @return Pointer to an allocated SSL_CTX object.
- If the creation failed, TlsCtxNew() returns NULL.
- **/
- VOID *
- EFIAPI
- CryptoServiceTlsCtxNew (
- IN UINT8 MajorVer,
- IN UINT8 MinorVer
- )
- {
- return CALL_BASECRYPTLIB (Tls.Services.CtxNew, TlsCtxNew, (MajorVer, MinorVer), NULL);
- }
- /**
- Free an allocated TLS object.
- This function removes the TLS object pointed to by Tls and frees up the
- allocated memory. If Tls is NULL, nothing is done.
- @param[in] Tls Pointer to the TLS object to be freed.
- **/
- VOID
- EFIAPI
- CryptoServiceTlsFree (
- IN VOID *Tls
- )
- {
- CALL_VOID_BASECRYPTLIB (Tls.Services.Free, TlsFree, (Tls));
- }
- /**
- Create a new TLS object for a connection.
- This function creates a new TLS object for a connection. The new object
- inherits the setting of the underlying context TlsCtx: connection method,
- options, verification setting.
- @param[in] TlsCtx Pointer to the SSL_CTX object.
- @return Pointer to an allocated SSL object.
- If the creation failed, TlsNew() returns NULL.
- **/
- VOID *
- EFIAPI
- CryptoServiceTlsNew (
- IN VOID *TlsCtx
- )
- {
- return CALL_BASECRYPTLIB (Tls.Services.New, TlsNew, (TlsCtx), NULL);
- }
- /**
- Checks if the TLS handshake was done.
- This function will check if the specified TLS handshake was done.
- @param[in] Tls Pointer to the TLS object for handshake state checking.
- @retval TRUE The TLS handshake was done.
- @retval FALSE The TLS handshake was not done.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceTlsInHandshake (
- IN VOID *Tls
- )
- {
- return CALL_BASECRYPTLIB (Tls.Services.InHandshake, TlsInHandshake, (Tls), FALSE);
- }
- /**
- Perform a TLS/SSL handshake.
- This function will perform a TLS/SSL handshake.
- @param[in] Tls Pointer to the TLS object for handshake operation.
- @param[in] BufferIn Pointer to the most recently received TLS Handshake packet.
- @param[in] BufferInSize Packet size in bytes for the most recently received TLS
- Handshake packet.
- @param[out] BufferOut Pointer to the buffer to hold the built packet.
- @param[in, out] BufferOutSize Pointer to the buffer size in bytes. On input, it is
- the buffer size provided by the caller. On output, it
- is the buffer size in fact needed to contain the
- packet.
- @retval EFI_SUCCESS The required TLS packet is built successfully.
- @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:
- Tls is NULL.
- BufferIn is NULL but BufferInSize is NOT 0.
- BufferInSize is 0 but BufferIn is NOT NULL.
- BufferOutSize is NULL.
- BufferOut is NULL if *BufferOutSize is not zero.
- @retval EFI_BUFFER_TOO_SMALL BufferOutSize is too small to hold the response packet.
- @retval EFI_ABORTED Something wrong during handshake.
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsDoHandshake (
- IN VOID *Tls,
- IN UINT8 *BufferIn OPTIONAL,
- IN UINTN BufferInSize OPTIONAL,
- OUT UINT8 *BufferOut OPTIONAL,
- IN OUT UINTN *BufferOutSize
- )
- {
- return CALL_BASECRYPTLIB (Tls.Services.DoHandshake, TlsDoHandshake, (Tls, BufferIn, BufferInSize, BufferOut, BufferOutSize), EFI_UNSUPPORTED);
- }
- /**
- Handle Alert message recorded in BufferIn. If BufferIn is NULL and BufferInSize is zero,
- TLS session has errors and the response packet needs to be Alert message based on error type.
- @param[in] Tls Pointer to the TLS object for state checking.
- @param[in] BufferIn Pointer to the most recently received TLS Alert packet.
- @param[in] BufferInSize Packet size in bytes for the most recently received TLS
- Alert packet.
- @param[out] BufferOut Pointer to the buffer to hold the built packet.
- @param[in, out] BufferOutSize Pointer to the buffer size in bytes. On input, it is
- the buffer size provided by the caller. On output, it
- is the buffer size in fact needed to contain the
- packet.
- @retval EFI_SUCCESS The required TLS packet is built successfully.
- @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:
- Tls is NULL.
- BufferIn is NULL but BufferInSize is NOT 0.
- BufferInSize is 0 but BufferIn is NOT NULL.
- BufferOutSize is NULL.
- BufferOut is NULL if *BufferOutSize is not zero.
- @retval EFI_ABORTED An error occurred.
- @retval EFI_BUFFER_TOO_SMALL BufferOutSize is too small to hold the response packet.
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsHandleAlert (
- IN VOID *Tls,
- IN UINT8 *BufferIn OPTIONAL,
- IN UINTN BufferInSize OPTIONAL,
- OUT UINT8 *BufferOut OPTIONAL,
- IN OUT UINTN *BufferOutSize
- )
- {
- return CALL_BASECRYPTLIB (Tls.Services.HandleAlert, TlsHandleAlert, (Tls, BufferIn, BufferInSize, BufferOut, BufferOutSize), EFI_UNSUPPORTED);
- }
- /**
- Build the CloseNotify packet.
- @param[in] Tls Pointer to the TLS object for state checking.
- @param[in, out] Buffer Pointer to the buffer to hold the built packet.
- @param[in, out] BufferSize Pointer to the buffer size in bytes. On input, it is
- the buffer size provided by the caller. On output, it
- is the buffer size in fact needed to contain the
- packet.
- @retval EFI_SUCCESS The required TLS packet is built successfully.
- @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:
- Tls is NULL.
- BufferSize is NULL.
- Buffer is NULL if *BufferSize is not zero.
- @retval EFI_BUFFER_TOO_SMALL BufferSize is too small to hold the response packet.
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsCloseNotify (
- IN VOID *Tls,
- IN OUT UINT8 *Buffer,
- IN OUT UINTN *BufferSize
- )
- {
- return CALL_BASECRYPTLIB (Tls.Services.CloseNotify, TlsCloseNotify, (Tls, Buffer, BufferSize), EFI_UNSUPPORTED);
- }
- /**
- Attempts to read bytes from one TLS object and places the data in Buffer.
- This function will attempt to read BufferSize bytes from the TLS object
- and places the data in Buffer.
- @param[in] Tls Pointer to the TLS object.
- @param[in,out] Buffer Pointer to the buffer to store the data.
- @param[in] BufferSize The size of Buffer in bytes.
- @retval >0 The amount of data successfully read from the TLS object.
- @retval <=0 No data was successfully read.
- **/
- INTN
- EFIAPI
- CryptoServiceTlsCtrlTrafficOut (
- IN VOID *Tls,
- IN OUT VOID *Buffer,
- IN UINTN BufferSize
- )
- {
- return CALL_BASECRYPTLIB (Tls.Services.CtrlTrafficOut, TlsCtrlTrafficOut, (Tls, Buffer, BufferSize), 0);
- }
- /**
- Attempts to write data from the buffer to TLS object.
- This function will attempt to write BufferSize bytes data from the Buffer
- to the TLS object.
- @param[in] Tls Pointer to the TLS object.
- @param[in] Buffer Pointer to the data buffer.
- @param[in] BufferSize The size of Buffer in bytes.
- @retval >0 The amount of data successfully written to the TLS object.
- @retval <=0 No data was successfully written.
- **/
- INTN
- EFIAPI
- CryptoServiceTlsCtrlTrafficIn (
- IN VOID *Tls,
- IN VOID *Buffer,
- IN UINTN BufferSize
- )
- {
- return CALL_BASECRYPTLIB (Tls.Services.CtrlTrafficIn, TlsCtrlTrafficIn, (Tls, Buffer, BufferSize), 0);
- }
- /**
- Attempts to read bytes from the specified TLS connection into the buffer.
- This function tries to read BufferSize bytes data from the specified TLS
- connection into the Buffer.
- @param[in] Tls Pointer to the TLS connection for data reading.
- @param[in,out] Buffer Pointer to the data buffer.
- @param[in] BufferSize The size of Buffer in bytes.
- @retval >0 The read operation was successful, and return value is the
- number of bytes actually read from the TLS connection.
- @retval <=0 The read operation was not successful.
- **/
- INTN
- EFIAPI
- CryptoServiceTlsRead (
- IN VOID *Tls,
- IN OUT VOID *Buffer,
- IN UINTN BufferSize
- )
- {
- return CALL_BASECRYPTLIB (Tls.Services.Read, TlsRead, (Tls, Buffer, BufferSize), 0);
- }
- /**
- Attempts to write data to a TLS connection.
- This function tries to write BufferSize bytes data from the Buffer into the
- specified TLS connection.
- @param[in] Tls Pointer to the TLS connection for data writing.
- @param[in] Buffer Pointer to the data buffer.
- @param[in] BufferSize The size of Buffer in bytes.
- @retval >0 The write operation was successful, and return value is the
- number of bytes actually written to the TLS connection.
- @retval <=0 The write operation was not successful.
- **/
- INTN
- EFIAPI
- CryptoServiceTlsWrite (
- IN VOID *Tls,
- IN VOID *Buffer,
- IN UINTN BufferSize
- )
- {
- return CALL_BASECRYPTLIB (Tls.Services.Write, TlsWrite, (Tls, Buffer, BufferSize), 0);
- }
- /**
- Shutdown a TLS connection.
- Shutdown the TLS connection without releasing the resources, meaning a new
- connection can be started without calling TlsNew() and without setting
- certificates etc.
- @param[in] Tls Pointer to the TLS object to shutdown.
- @retval EFI_SUCCESS The TLS is shutdown successfully.
- @retval EFI_INVALID_PARAMETER Tls is NULL.
- @retval EFI_PROTOCOL_ERROR Some other error occurred.
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsShutdown (
- IN VOID *Tls
- )
- {
- return CALL_BASECRYPTLIB (Tls.Services.Shutdown, TlsShutdown, (Tls), EFI_UNSUPPORTED);
- }
- /**
- Set a new TLS/SSL method for a particular TLS object.
- This function sets a new TLS/SSL method for a particular TLS object.
- @param[in] Tls Pointer to a TLS object.
- @param[in] MajorVer Major Version of TLS/SSL Protocol.
- @param[in] MinorVer Minor Version of TLS/SSL Protocol.
- @retval EFI_SUCCESS The TLS/SSL method was set successfully.
- @retval EFI_INVALID_PARAMETER The parameter is invalid.
- @retval EFI_UNSUPPORTED Unsupported TLS/SSL method.
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsSetVersion (
- IN VOID *Tls,
- IN UINT8 MajorVer,
- IN UINT8 MinorVer
- )
- {
- return CALL_BASECRYPTLIB (TlsSet.Services.Version, TlsSetVersion, (Tls, MajorVer, MinorVer), EFI_UNSUPPORTED);
- }
- /**
- Set TLS object to work in client or server mode.
- This function prepares a TLS object to work in client or server mode.
- @param[in] Tls Pointer to a TLS object.
- @param[in] IsServer Work in server mode.
- @retval EFI_SUCCESS The TLS/SSL work mode was set successfully.
- @retval EFI_INVALID_PARAMETER The parameter is invalid.
- @retval EFI_UNSUPPORTED Unsupported TLS/SSL work mode.
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsSetConnectionEnd (
- IN VOID *Tls,
- IN BOOLEAN IsServer
- )
- {
- return CALL_BASECRYPTLIB (TlsSet.Services.ConnectionEnd, TlsSetConnectionEnd, (Tls, IsServer), EFI_UNSUPPORTED);
- }
- /**
- Set the ciphers list to be used by the TLS object.
- This function sets the ciphers for use by a specified TLS object.
- @param[in] Tls Pointer to a TLS object.
- @param[in] CipherId Array of UINT16 cipher identifiers. Each UINT16
- cipher identifier comes from the TLS Cipher Suite
- Registry of the IANA, interpreting Byte1 and Byte2
- in network (big endian) byte order.
- @param[in] CipherNum The number of cipher in the list.
- @retval EFI_SUCCESS The ciphers list was set successfully.
- @retval EFI_INVALID_PARAMETER The parameter is invalid.
- @retval EFI_UNSUPPORTED No supported TLS cipher was found in CipherId.
- @retval EFI_OUT_OF_RESOURCES Memory allocation failed.
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsSetCipherList (
- IN VOID *Tls,
- IN UINT16 *CipherId,
- IN UINTN CipherNum
- )
- {
- return CALL_BASECRYPTLIB (TlsSet.Services.CipherList, TlsSetCipherList, (Tls, CipherId, CipherNum), EFI_UNSUPPORTED);
- }
- /**
- Set the compression method for TLS/SSL operations.
- This function handles TLS/SSL integrated compression methods.
- @param[in] CompMethod The compression method ID.
- @retval EFI_SUCCESS The compression method for the communication was
- set successfully.
- @retval EFI_UNSUPPORTED Unsupported compression method.
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsSetCompressionMethod (
- IN UINT8 CompMethod
- )
- {
- return CALL_BASECRYPTLIB (TlsSet.Services.CompressionMethod, TlsSetCompressionMethod, (CompMethod), EFI_UNSUPPORTED);
- }
- /**
- Set peer certificate verification mode for the TLS connection.
- This function sets the verification mode flags for the TLS connection.
- @param[in] Tls Pointer to the TLS object.
- @param[in] VerifyMode A set of logically or'ed verification mode flags.
- **/
- VOID
- EFIAPI
- CryptoServiceTlsSetVerify (
- IN VOID *Tls,
- IN UINT32 VerifyMode
- )
- {
- CALL_VOID_BASECRYPTLIB (TlsSet.Services.Verify, TlsSetVerify, (Tls, VerifyMode));
- }
- /**
- Set the specified host name to be verified.
- @param[in] Tls Pointer to the TLS object.
- @param[in] Flags The setting flags during the validation.
- @param[in] HostName The specified host name to be verified.
- @retval EFI_SUCCESS The HostName setting was set successfully.
- @retval EFI_INVALID_PARAMETER The parameter is invalid.
- @retval EFI_ABORTED Invalid HostName setting.
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsSetVerifyHost (
- IN VOID *Tls,
- IN UINT32 Flags,
- IN CHAR8 *HostName
- )
- {
- return CALL_BASECRYPTLIB (TlsSet.Services.VerifyHost, TlsSetVerifyHost, (Tls, Flags, HostName), EFI_UNSUPPORTED);
- }
- /**
- Sets a TLS/SSL session ID to be used during TLS/SSL connect.
- This function sets a session ID to be used when the TLS/SSL connection is
- to be established.
- @param[in] Tls Pointer to the TLS object.
- @param[in] SessionId Session ID data used for session resumption.
- @param[in] SessionIdLen Length of Session ID in bytes.
- @retval EFI_SUCCESS Session ID was set successfully.
- @retval EFI_INVALID_PARAMETER The parameter is invalid.
- @retval EFI_UNSUPPORTED No available session for ID setting.
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsSetSessionId (
- IN VOID *Tls,
- IN UINT8 *SessionId,
- IN UINT16 SessionIdLen
- )
- {
- return CALL_BASECRYPTLIB (TlsSet.Services.SessionId, TlsSetSessionId, (Tls, SessionId, SessionIdLen), EFI_UNSUPPORTED);
- }
- /**
- Adds the CA to the cert store when requesting Server or Client authentication.
- This function adds the CA certificate to the list of CAs when requesting
- Server or Client authentication for the chosen TLS connection.
- @param[in] Tls Pointer to the TLS object.
- @param[in] Data Pointer to the data buffer of a DER-encoded binary
- X.509 certificate or PEM-encoded X.509 certificate.
- @param[in] DataSize The size of data buffer in bytes.
- @retval EFI_SUCCESS The operation succeeded.
- @retval EFI_INVALID_PARAMETER The parameter is invalid.
- @retval EFI_OUT_OF_RESOURCES Required resources could not be allocated.
- @retval EFI_ABORTED Invalid X.509 certificate.
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsSetCaCertificate (
- IN VOID *Tls,
- IN VOID *Data,
- IN UINTN DataSize
- )
- {
- return CALL_BASECRYPTLIB (TlsSet.Services.CaCertificate, TlsSetCaCertificate, (Tls, Data, DataSize), EFI_UNSUPPORTED);
- }
- /**
- Loads the local public certificate into the specified TLS object.
- This function loads the X.509 certificate into the specified TLS object
- for TLS negotiation.
- @param[in] Tls Pointer to the TLS object.
- @param[in] Data Pointer to the data buffer of a DER-encoded binary
- X.509 certificate or PEM-encoded X.509 certificate.
- @param[in] DataSize The size of data buffer in bytes.
- @retval EFI_SUCCESS The operation succeeded.
- @retval EFI_INVALID_PARAMETER The parameter is invalid.
- @retval EFI_OUT_OF_RESOURCES Required resources could not be allocated.
- @retval EFI_ABORTED Invalid X.509 certificate.
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsSetHostPublicCert (
- IN VOID *Tls,
- IN VOID *Data,
- IN UINTN DataSize
- )
- {
- return CALL_BASECRYPTLIB (TlsSet.Services.HostPublicCert, TlsSetHostPublicCert, (Tls, Data, DataSize), EFI_UNSUPPORTED);
- }
- /**
- Adds the local private key to the specified TLS object.
- This function adds the local private key (DER-encoded or PEM-encoded or PKCS#8 private
- key) into the specified TLS object for TLS negotiation.
- @param[in] Tls Pointer to the TLS object.
- @param[in] Data Pointer to the data buffer of a DER-encoded or PEM-encoded
- or PKCS#8 private key.
- @param[in] DataSize The size of data buffer in bytes.
- @param[in] Password Pointer to NULL-terminated private key password, set it to NULL
- if private key not encrypted.
- @retval EFI_SUCCESS The operation succeeded.
- @retval EFI_UNSUPPORTED This function is not supported.
- @retval EFI_ABORTED Invalid private key data.
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsSetHostPrivateKeyEx (
- IN VOID *Tls,
- IN VOID *Data,
- IN UINTN DataSize,
- IN VOID *Password OPTIONAL
- )
- {
- return CALL_BASECRYPTLIB (TlsSet.Services.HostPrivateKeyEx, TlsSetHostPrivateKeyEx, (Tls, Data, DataSize, Password), EFI_UNSUPPORTED);
- }
- /**
- Adds the local private key to the specified TLS object.
- This function adds the local private key (DER-encoded or PEM-encoded or PKCS#8 private
- key) into the specified TLS object for TLS negotiation.
- @param[in] Tls Pointer to the TLS object.
- @param[in] Data Pointer to the data buffer of a DER-encoded or PEM-encoded
- or PKCS#8 private key.
- @param[in] DataSize The size of data buffer in bytes.
- @retval EFI_SUCCESS The operation succeeded.
- @retval EFI_UNSUPPORTED This function is not supported.
- @retval EFI_ABORTED Invalid private key data.
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsSetHostPrivateKey (
- IN VOID *Tls,
- IN VOID *Data,
- IN UINTN DataSize
- )
- {
- return CALL_BASECRYPTLIB (TlsSet.Services.HostPrivateKey, TlsSetHostPrivateKey, (Tls, Data, DataSize), EFI_UNSUPPORTED);
- }
- /**
- Adds the CA-supplied certificate revocation list for certificate validation.
- This function adds the CA-supplied certificate revocation list data for
- certificate validity checking.
- @param[in] Data Pointer to the data buffer of a DER-encoded CRL data.
- @param[in] DataSize The size of data buffer in bytes.
- @retval EFI_SUCCESS The operation succeeded.
- @retval EFI_UNSUPPORTED This function is not supported.
- @retval EFI_ABORTED Invalid CRL data.
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsSetCertRevocationList (
- IN VOID *Data,
- IN UINTN DataSize
- )
- {
- return CALL_BASECRYPTLIB (TlsSet.Services.CertRevocationList, TlsSetCertRevocationList, (Data, DataSize), EFI_UNSUPPORTED);
- }
- /**
- Set the signature algorithm list to used by the TLS object.
- This function sets the signature algorithms for use by a specified TLS object.
- @param[in] Tls Pointer to a TLS object.
- @param[in] Data Array of UINT8 of signature algorithms. The array consists of
- pairs of the hash algorithm and the signature algorithm as defined
- in RFC 5246
- @param[in] DataSize The length the SignatureAlgoList. Must be divisible by 2.
- @retval EFI_SUCCESS The signature algorithm list was set successfully.
- @retval EFI_INVALID_PARAMETER The parameters are invalid.
- @retval EFI_UNSUPPORTED No supported TLS signature algorithm was found in SignatureAlgoList
- @retval EFI_OUT_OF_RESOURCES Memory allocation failed.
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsSetSignatureAlgoList (
- IN VOID *Tls,
- IN UINT8 *Data,
- IN UINTN DataSize
- )
- {
- return CALL_BASECRYPTLIB (TlsSet.Services.SignatureAlgoList, TlsSetSignatureAlgoList, (Tls, Data, DataSize), EFI_UNSUPPORTED);
- }
- /**
- Set the EC curve to be used for TLS flows
- This function sets the EC curve to be used for TLS flows.
- @param[in] Tls Pointer to a TLS object.
- @param[in] Data An EC named curve as defined in section 5.1.1 of RFC 4492.
- @param[in] DataSize Size of Data, it should be sizeof (UINT32)
- @retval EFI_SUCCESS The EC curve was set successfully.
- @retval EFI_INVALID_PARAMETER The parameters are invalid.
- @retval EFI_UNSUPPORTED The requested TLS EC curve is not supported
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsSetEcCurve (
- IN VOID *Tls,
- IN UINT8 *Data,
- IN UINTN DataSize
- )
- {
- return CALL_BASECRYPTLIB (TlsSet.Services.EcCurve, TlsSetEcCurve, (Tls, Data, DataSize), EFI_UNSUPPORTED);
- }
- /**
- Gets the protocol version used by the specified TLS connection.
- This function returns the protocol version used by the specified TLS
- connection.
- If Tls is NULL, then ASSERT().
- @param[in] Tls Pointer to the TLS object.
- @return The protocol version of the specified TLS connection.
- **/
- UINT16
- EFIAPI
- CryptoServiceTlsGetVersion (
- IN VOID *Tls
- )
- {
- return CALL_BASECRYPTLIB (TlsGet.Services.Version, TlsGetVersion, (Tls), 0);
- }
- /**
- Gets the connection end of the specified TLS connection.
- This function returns the connection end (as client or as server) used by
- the specified TLS connection.
- If Tls is NULL, then ASSERT().
- @param[in] Tls Pointer to the TLS object.
- @return The connection end used by the specified TLS connection.
- **/
- UINT8
- EFIAPI
- CryptoServiceTlsGetConnectionEnd (
- IN VOID *Tls
- )
- {
- return CALL_BASECRYPTLIB (TlsGet.Services.ConnectionEnd, TlsGetConnectionEnd, (Tls), 0);
- }
- /**
- Gets the cipher suite used by the specified TLS connection.
- This function returns current cipher suite used by the specified
- TLS connection.
- @param[in] Tls Pointer to the TLS object.
- @param[in,out] CipherId The cipher suite used by the TLS object.
- @retval EFI_SUCCESS The cipher suite was returned successfully.
- @retval EFI_INVALID_PARAMETER The parameter is invalid.
- @retval EFI_UNSUPPORTED Unsupported cipher suite.
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsGetCurrentCipher (
- IN VOID *Tls,
- IN OUT UINT16 *CipherId
- )
- {
- return CALL_BASECRYPTLIB (TlsGet.Services.CurrentCipher, TlsGetCurrentCipher, (Tls, CipherId), EFI_UNSUPPORTED);
- }
- /**
- Gets the compression methods used by the specified TLS connection.
- This function returns current integrated compression methods used by
- the specified TLS connection.
- @param[in] Tls Pointer to the TLS object.
- @param[in,out] CompressionId The current compression method used by
- the TLS object.
- @retval EFI_SUCCESS The compression method was returned successfully.
- @retval EFI_INVALID_PARAMETER The parameter is invalid.
- @retval EFI_ABORTED Invalid Compression method.
- @retval EFI_UNSUPPORTED This function is not supported.
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsGetCurrentCompressionId (
- IN VOID *Tls,
- IN OUT UINT8 *CompressionId
- )
- {
- return CALL_BASECRYPTLIB (TlsGet.Services.CurrentCompressionId, TlsGetCurrentCompressionId, (Tls, CompressionId), EFI_UNSUPPORTED);
- }
- /**
- Gets the verification mode currently set in the TLS connection.
- This function returns the peer verification mode currently set in the
- specified TLS connection.
- If Tls is NULL, then ASSERT().
- @param[in] Tls Pointer to the TLS object.
- @return The verification mode set in the specified TLS connection.
- **/
- UINT32
- EFIAPI
- CryptoServiceTlsGetVerify (
- IN VOID *Tls
- )
- {
- return CALL_BASECRYPTLIB (TlsGet.Services.Verify, TlsGetVerify, (Tls), 0);
- }
- /**
- Gets the session ID used by the specified TLS connection.
- This function returns the TLS/SSL session ID currently used by the
- specified TLS connection.
- @param[in] Tls Pointer to the TLS object.
- @param[in,out] SessionId Buffer to contain the returned session ID.
- @param[in,out] SessionIdLen The length of Session ID in bytes.
- @retval EFI_SUCCESS The Session ID was returned successfully.
- @retval EFI_INVALID_PARAMETER The parameter is invalid.
- @retval EFI_UNSUPPORTED Invalid TLS/SSL session.
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsGetSessionId (
- IN VOID *Tls,
- IN OUT UINT8 *SessionId,
- IN OUT UINT16 *SessionIdLen
- )
- {
- return CALL_BASECRYPTLIB (TlsGet.Services.SessionId, TlsGetSessionId, (Tls, SessionId, SessionIdLen), EFI_UNSUPPORTED);
- }
- /**
- Gets the client random data used in the specified TLS connection.
- This function returns the TLS/SSL client random data currently used in
- the specified TLS connection.
- @param[in] Tls Pointer to the TLS object.
- @param[in,out] ClientRandom Buffer to contain the returned client
- random data (32 bytes).
- **/
- VOID
- EFIAPI
- CryptoServiceTlsGetClientRandom (
- IN VOID *Tls,
- IN OUT UINT8 *ClientRandom
- )
- {
- CALL_VOID_BASECRYPTLIB (TlsGet.Services.ClientRandom, TlsGetClientRandom, (Tls, ClientRandom));
- }
- /**
- Gets the server random data used in the specified TLS connection.
- This function returns the TLS/SSL server random data currently used in
- the specified TLS connection.
- @param[in] Tls Pointer to the TLS object.
- @param[in,out] ServerRandom Buffer to contain the returned server
- random data (32 bytes).
- **/
- VOID
- EFIAPI
- CryptoServiceTlsGetServerRandom (
- IN VOID *Tls,
- IN OUT UINT8 *ServerRandom
- )
- {
- CALL_VOID_BASECRYPTLIB (TlsGet.Services.ServerRandom, TlsGetServerRandom, (Tls, ServerRandom));
- }
- /**
- Gets the master key data used in the specified TLS connection.
- This function returns the TLS/SSL master key material currently used in
- the specified TLS connection.
- @param[in] Tls Pointer to the TLS object.
- @param[in,out] KeyMaterial Buffer to contain the returned key material.
- @retval EFI_SUCCESS Key material was returned successfully.
- @retval EFI_INVALID_PARAMETER The parameter is invalid.
- @retval EFI_UNSUPPORTED Invalid TLS/SSL session.
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsGetKeyMaterial (
- IN VOID *Tls,
- IN OUT UINT8 *KeyMaterial
- )
- {
- return CALL_BASECRYPTLIB (TlsGet.Services.KeyMaterial, TlsGetKeyMaterial, (Tls, KeyMaterial), EFI_UNSUPPORTED);
- }
- /**
- Gets the CA Certificate from the cert store.
- This function returns the CA certificate for the chosen
- TLS connection.
- @param[in] Tls Pointer to the TLS object.
- @param[out] Data Pointer to the data buffer to receive the CA
- certificate data sent to the client.
- @param[in,out] DataSize The size of data buffer in bytes.
- @retval EFI_SUCCESS The operation succeeded.
- @retval EFI_UNSUPPORTED This function is not supported.
- @retval EFI_BUFFER_TOO_SMALL The Data is too small to hold the data.
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsGetCaCertificate (
- IN VOID *Tls,
- OUT VOID *Data,
- IN OUT UINTN *DataSize
- )
- {
- return CALL_BASECRYPTLIB (TlsGet.Services.CaCertificate, TlsGetCaCertificate, (Tls, Data, DataSize), EFI_UNSUPPORTED);
- }
- /**
- Gets the local public Certificate set in the specified TLS object.
- This function returns the local public certificate which was currently set
- in the specified TLS object.
- @param[in] Tls Pointer to the TLS object.
- @param[out] Data Pointer to the data buffer to receive the local
- public certificate.
- @param[in,out] DataSize The size of data buffer in bytes.
- @retval EFI_SUCCESS The operation succeeded.
- @retval EFI_INVALID_PARAMETER The parameter is invalid.
- @retval EFI_NOT_FOUND The certificate is not found.
- @retval EFI_BUFFER_TOO_SMALL The Data is too small to hold the data.
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsGetHostPublicCert (
- IN VOID *Tls,
- OUT VOID *Data,
- IN OUT UINTN *DataSize
- )
- {
- return CALL_BASECRYPTLIB (TlsGet.Services.HostPublicCert, TlsGetHostPublicCert, (Tls, Data, DataSize), EFI_UNSUPPORTED);
- }
- /**
- Gets the local private key set in the specified TLS object.
- This function returns the local private key data which was currently set
- in the specified TLS object.
- @param[in] Tls Pointer to the TLS object.
- @param[out] Data Pointer to the data buffer to receive the local
- private key data.
- @param[in,out] DataSize The size of data buffer in bytes.
- @retval EFI_SUCCESS The operation succeeded.
- @retval EFI_UNSUPPORTED This function is not supported.
- @retval EFI_BUFFER_TOO_SMALL The Data is too small to hold the data.
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsGetHostPrivateKey (
- IN VOID *Tls,
- OUT VOID *Data,
- IN OUT UINTN *DataSize
- )
- {
- return CALL_BASECRYPTLIB (TlsGet.Services.HostPrivateKey, TlsGetHostPrivateKey, (Tls, Data, DataSize), EFI_UNSUPPORTED);
- }
- /**
- Gets the CA-supplied certificate revocation list data set in the specified
- TLS object.
- This function returns the CA-supplied certificate revocation list data which
- was currently set in the specified TLS object.
- @param[out] Data Pointer to the data buffer to receive the CRL data.
- @param[in,out] DataSize The size of data buffer in bytes.
- @retval EFI_SUCCESS The operation succeeded.
- @retval EFI_UNSUPPORTED This function is not supported.
- @retval EFI_BUFFER_TOO_SMALL The Data is too small to hold the data.
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsGetCertRevocationList (
- OUT VOID *Data,
- IN OUT UINTN *DataSize
- )
- {
- return CALL_BASECRYPTLIB (TlsGet.Services.CertRevocationList, TlsGetCertRevocationList, (Data, DataSize), EFI_UNSUPPORTED);
- }
- /**
- Derive keying material from a TLS connection.
- This function exports keying material using the mechanism described in RFC
- 5705.
- @param[in] Tls Pointer to the TLS object
- @param[in] Label Description of the key for the PRF function
- @param[in] Context Optional context
- @param[in] ContextLen The length of the context value in bytes
- @param[out] KeyBuffer Buffer to hold the output of the TLS-PRF
- @param[in] KeyBufferLen The length of the KeyBuffer
- @retval EFI_SUCCESS The operation succeeded.
- @retval EFI_INVALID_PARAMETER The TLS object is invalid.
- @retval EFI_PROTOCOL_ERROR Some other error occurred.
- **/
- EFI_STATUS
- EFIAPI
- CryptoServiceTlsGetExportKey (
- IN VOID *Tls,
- IN CONST VOID *Label,
- IN CONST VOID *Context,
- IN UINTN ContextLen,
- OUT VOID *KeyBuffer,
- IN UINTN KeyBufferLen
- )
- {
- return CALL_BASECRYPTLIB (
- TlsGet.Services.ExportKey,
- TlsGetExportKey,
- (Tls, Label, Context, ContextLen,
- KeyBuffer, KeyBufferLen),
- EFI_UNSUPPORTED
- );
- }
- /**
- Carries out the RSA-SSA signature generation with EMSA-PSS encoding scheme.
- This function carries out the RSA-SSA signature generation with EMSA-PSS encoding scheme defined in
- RFC 8017.
- Mask generation function is the same as the message digest algorithm.
- If the Signature buffer is too small to hold the contents of signature, FALSE
- is returned and SigSize is set to the required buffer size to obtain the signature.
- If RsaContext is NULL, then return FALSE.
- If Message is NULL, then return FALSE.
- If MsgSize is zero or > INT_MAX, then return FALSE.
- If DigestLen is NOT 32, 48 or 64, return FALSE.
- If SaltLen is not equal to DigestLen, then return FALSE.
- If SigSize is large enough but Signature is NULL, then return FALSE.
- If this interface is not supported, then return FALSE.
- @param[in] RsaContext Pointer to RSA context for signature generation.
- @param[in] Message Pointer to octet message to be signed.
- @param[in] MsgSize Size of the message in bytes.
- @param[in] DigestLen Length of the digest in bytes to be used for RSA signature operation.
- @param[in] SaltLen Length of the salt in bytes to be used for PSS encoding.
- @param[out] Signature Pointer to buffer to receive RSA PSS signature.
- @param[in, out] SigSize On input, the size of Signature buffer in bytes.
- On output, the size of data returned in Signature buffer in bytes.
- @retval TRUE Signature successfully generated in RSASSA-PSS.
- @retval FALSE Signature generation failed.
- @retval FALSE SigSize is too small.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceRsaPssSign (
- IN VOID *RsaContext,
- IN CONST UINT8 *Message,
- IN UINTN MsgSize,
- IN UINT16 DigestLen,
- IN UINT16 SaltLen,
- OUT UINT8 *Signature,
- IN OUT UINTN *SigSize
- )
- {
- return CALL_BASECRYPTLIB (RsaPss.Services.Sign, RsaPssSign, (RsaContext, Message, MsgSize, DigestLen, SaltLen, Signature, SigSize), FALSE);
- }
- /**
- Verifies the RSA signature with RSASSA-PSS signature scheme defined in RFC 8017.
- Implementation determines salt length automatically from the signature encoding.
- Mask generation function is the same as the message digest algorithm.
- Salt length should be equal to digest length.
- @param[in] RsaContext Pointer to RSA context for signature verification.
- @param[in] Message Pointer to octet message to be verified.
- @param[in] MsgSize Size of the message in bytes.
- @param[in] Signature Pointer to RSASSA-PSS signature to be verified.
- @param[in] SigSize Size of signature in bytes.
- @param[in] DigestLen Length of digest for RSA operation.
- @param[in] SaltLen Salt length for PSS encoding.
- @retval TRUE Valid signature encoded in RSASSA-PSS.
- @retval FALSE Invalid signature or invalid RSA context.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceRsaPssVerify (
- IN VOID *RsaContext,
- IN CONST UINT8 *Message,
- IN UINTN MsgSize,
- IN CONST UINT8 *Signature,
- IN UINTN SigSize,
- IN UINT16 DigestLen,
- IN UINT16 SaltLen
- )
- {
- return CALL_BASECRYPTLIB (RsaPss.Services.Verify, RsaPssVerify, (RsaContext, Message, MsgSize, Signature, SigSize, DigestLen, SaltLen), FALSE);
- }
- /**
- Parallel hash function ParallelHash256, as defined in NIST's Special Publication 800-185,
- published December 2016.
- @param[in] Input Pointer to the input message (X).
- @param[in] InputByteLen The number(>0) of input bytes provided for the input data.
- @param[in] BlockSize The size of each block (B).
- @param[out] Output Pointer to the output buffer.
- @param[in] OutputByteLen The desired number of output bytes (L).
- @param[in] Customization Pointer to the customization string (S).
- @param[in] CustomByteLen The length of the customization string in bytes.
- @retval TRUE ParallelHash256 digest computation succeeded.
- @retval FALSE ParallelHash256 digest computation failed.
- @retval FALSE This interface is not supported.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceParallelHash256HashAll (
- IN CONST VOID *Input,
- IN UINTN InputByteLen,
- IN UINTN BlockSize,
- OUT VOID *Output,
- IN UINTN OutputByteLen,
- IN CONST VOID *Customization,
- IN UINTN CustomByteLen
- )
- {
- return CALL_BASECRYPTLIB (ParallelHash.Services.HashAll, ParallelHash256HashAll, (Input, InputByteLen, BlockSize, Output, OutputByteLen, Customization, CustomByteLen), FALSE);
- }
- /**
- Performs AEAD AES-GCM authenticated encryption on a data buffer and additional authenticated data (AAD).
- IvSize must be 12, otherwise FALSE is returned.
- KeySize must be 16, 24 or 32, otherwise FALSE is returned.
- TagSize must be 12, 13, 14, 15, 16, otherwise FALSE is returned.
- @param[in] Key Pointer to the encryption key.
- @param[in] KeySize Size of the encryption key in bytes.
- @param[in] Iv Pointer to the IV value.
- @param[in] IvSize Size of the IV value in bytes.
- @param[in] AData Pointer to the additional authenticated data (AAD).
- @param[in] ADataSize Size of the additional authenticated data (AAD) in bytes.
- @param[in] DataIn Pointer to the input data buffer to be encrypted.
- @param[in] DataInSize Size of the input data buffer in bytes.
- @param[out] TagOut Pointer to a buffer that receives the authentication tag output.
- @param[in] TagSize Size of the authentication tag in bytes.
- @param[out] DataOut Pointer to a buffer that receives the encryption output.
- @param[out] DataOutSize Size of the output data buffer in bytes.
- @retval TRUE AEAD AES-GCM authenticated encryption succeeded.
- @retval FALSE AEAD AES-GCM authenticated encryption failed.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceAeadAesGcmEncrypt (
- IN CONST UINT8 *Key,
- IN UINTN KeySize,
- IN CONST UINT8 *Iv,
- IN UINTN IvSize,
- IN CONST UINT8 *AData,
- IN UINTN ADataSize,
- IN CONST UINT8 *DataIn,
- IN UINTN DataInSize,
- OUT UINT8 *TagOut,
- IN UINTN TagSize,
- OUT UINT8 *DataOut,
- OUT UINTN *DataOutSize
- )
- {
- return CALL_BASECRYPTLIB (AeadAesGcm.Services.Encrypt, AeadAesGcmEncrypt, (Key, KeySize, Iv, IvSize, AData, ADataSize, DataIn, DataInSize, TagOut, TagSize, DataOut, DataOutSize), FALSE);
- }
- /**
- Performs AEAD AES-GCM authenticated decryption on a data buffer and additional authenticated data (AAD).
- IvSize must be 12, otherwise FALSE is returned.
- KeySize must be 16, 24 or 32, otherwise FALSE is returned.
- TagSize must be 12, 13, 14, 15, 16, otherwise FALSE is returned.
- If additional authenticated data verification fails, FALSE is returned.
- @param[in] Key Pointer to the encryption key.
- @param[in] KeySize Size of the encryption key in bytes.
- @param[in] Iv Pointer to the IV value.
- @param[in] IvSize Size of the IV value in bytes.
- @param[in] AData Pointer to the additional authenticated data (AAD).
- @param[in] ADataSize Size of the additional authenticated data (AAD) in bytes.
- @param[in] DataIn Pointer to the input data buffer to be decrypted.
- @param[in] DataInSize Size of the input data buffer in bytes.
- @param[in] Tag Pointer to a buffer that contains the authentication tag.
- @param[in] TagSize Size of the authentication tag in bytes.
- @param[out] DataOut Pointer to a buffer that receives the decryption output.
- @param[out] DataOutSize Size of the output data buffer in bytes.
- @retval TRUE AEAD AES-GCM authenticated decryption succeeded.
- @retval FALSE AEAD AES-GCM authenticated decryption failed.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceAeadAesGcmDecrypt (
- IN CONST UINT8 *Key,
- IN UINTN KeySize,
- IN CONST UINT8 *Iv,
- IN UINTN IvSize,
- IN CONST UINT8 *AData,
- IN UINTN ADataSize,
- IN CONST UINT8 *DataIn,
- IN UINTN DataInSize,
- IN CONST UINT8 *Tag,
- IN UINTN TagSize,
- OUT UINT8 *DataOut,
- OUT UINTN *DataOutSize
- )
- {
- return CALL_BASECRYPTLIB (AeadAesGcm.Services.Decrypt, AeadAesGcmDecrypt, (Key, KeySize, Iv, IvSize, AData, ADataSize, DataIn, DataInSize, Tag, TagSize, DataOut, DataOutSize), FALSE);
- }
- // =====================================================================================
- // Big number primitives
- // =====================================================================================
- /**
- Allocate new Big Number.
- @retval New BigNum opaque structure or NULL on failure.
- **/
- VOID *
- EFIAPI
- CryptoServiceBigNumInit (
- VOID
- )
- {
- return CALL_BASECRYPTLIB (Bn.Services.Init, BigNumInit, (), NULL);
- }
- /**
- Allocate new Big Number and assign the provided value to it.
- @param[in] Buf Big endian encoded buffer.
- @param[in] Len Buffer length.
- @retval New BigNum opaque structure or NULL on failure.
- **/
- VOID *
- EFIAPI
- CryptoServiceBigNumFromBin (
- IN CONST UINT8 *Buf,
- IN UINTN Len
- )
- {
- return CALL_BASECRYPTLIB (Bn.Services.FromBin, BigNumFromBin, (Buf, Len), NULL);
- }
- /**
- Convert the absolute value of Bn into big-endian form and store it at Buf.
- The Buf array should have at least BigNumBytes() in it.
- @param[in] Bn Big number to convert.
- @param[out] Buf Output buffer.
- @retval The length of the big-endian number placed at Buf or -1 on error.
- **/
- INTN
- EFIAPI
- CryptoServiceBigNumToBin (
- IN CONST VOID *Bn,
- OUT UINT8 *Buf
- )
- {
- return CALL_BASECRYPTLIB (Bn.Services.ToBin, BigNumToBin, (Bn, Buf), -1);
- }
- /**
- Free the Big Number.
- @param[in] Bn Big number to free.
- @param[in] Clear TRUE if the buffer should be cleared.
- **/
- VOID
- EFIAPI
- CryptoServiceBigNumFree (
- IN VOID *Bn,
- IN BOOLEAN Clear
- )
- {
- CALL_VOID_BASECRYPTLIB (Bn.Services.Free, BigNumFree, (Bn, Clear));
- }
- /**
- Calculate the sum of two Big Numbers.
- Please note, all "out" Big number arguments should be properly initialized
- by calling to BigNumInit() or BigNumFromBin() functions.
- @param[in] BnA Big number.
- @param[in] BnB Big number.
- @param[out] BnRes The result of BnA + BnB.
- @retval TRUE On success.
- @retval FALSE Otherwise.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceBigNumAdd (
- IN CONST VOID *BnA,
- IN CONST VOID *BnB,
- OUT VOID *BnRes
- )
- {
- return CALL_BASECRYPTLIB (Bn.Services.Add, BigNumAdd, (BnA, BnB, BnRes), FALSE);
- }
- /**
- Subtract two Big Numbers.
- Please note, all "out" Big number arguments should be properly initialized
- by calling to BigNumInit() or BigNumFromBin() functions.
- @param[in] BnA Big number.
- @param[in] BnB Big number.
- @param[out] BnRes The result of BnA - BnB.
- @retval TRUE On success.
- @retval FALSE Otherwise.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceBigNumSub (
- IN CONST VOID *BnA,
- IN CONST VOID *BnB,
- OUT VOID *BnRes
- )
- {
- return CALL_BASECRYPTLIB (Bn.Services.Sub, BigNumSub, (BnA, BnB, BnRes), FALSE);
- }
- /**
- Calculate remainder: BnRes = BnA % BnB.
- Please note, all "out" Big number arguments should be properly initialized
- by calling to BigNumInit() or BigNumFromBin() functions.
- @param[in] BnA Big number.
- @param[in] BnB Big number.
- @param[out] BnRes The result of BnA % BnB.
- @retval TRUE On success.
- @retval FALSE Otherwise.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceBigNumMod (
- IN CONST VOID *BnA,
- IN CONST VOID *BnB,
- OUT VOID *BnRes
- )
- {
- return CALL_BASECRYPTLIB (Bn.Services.Mod, BigNumMod, (BnA, BnB, BnRes), FALSE);
- }
- /**
- Compute BnA to the BnP-th power modulo BnM.
- Please note, all "out" Big number arguments should be properly initialized.
- by calling to BigNumInit() or BigNumFromBin() functions.
- @param[in] BnA Big number.
- @param[in] BnP Big number (power).
- @param[in] BnM Big number (modulo).
- @param[out] BnRes The result of (BnA ^ BnP) % BnM.
- @retval TRUE On success.
- @retval FALSE Otherwise.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceBigNumExpMod (
- IN CONST VOID *BnA,
- IN CONST VOID *BnP,
- IN CONST VOID *BnM,
- OUT VOID *BnRes
- )
- {
- return CALL_BASECRYPTLIB (Bn.Services.ExpMod, BigNumExpMod, (BnA, BnP, BnM, BnRes), FALSE);
- }
- /**
- Compute BnA inverse modulo BnM.
- Please note, all "out" Big number arguments should be properly initialized
- by calling to BigNumInit() or BigNumFromBin() functions.
- @param[in] BnA Big number.
- @param[in] BnM Big number (modulo).
- @param[out] BnRes The result, such that (BnA * BnRes) % BnM == 1.
- @retval TRUE On success.
- @retval FALSE Otherwise.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceBigNumInverseMod (
- IN CONST VOID *BnA,
- IN CONST VOID *BnM,
- OUT VOID *BnRes
- )
- {
- return CALL_BASECRYPTLIB (Bn.Services.InverseMod, BigNumInverseMod, (BnA, BnM, BnRes), FALSE);
- }
- /**
- Divide two Big Numbers.
- Please note, all "out" Big number arguments should be properly initialized
- by calling to BigNumInit() or BigNumFromBin() functions.
- @param[in] BnA Big number.
- @param[in] BnB Big number.
- @param[out] BnRes The result, such that BnA / BnB.
- @retval TRUE On success.
- @retval FALSE Otherwise.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceBigNumDiv (
- IN CONST VOID *BnA,
- IN CONST VOID *BnB,
- OUT VOID *BnRes
- )
- {
- return CALL_BASECRYPTLIB (Bn.Services.Div, BigNumDiv, (BnA, BnB, BnRes), FALSE);
- }
- /**
- Multiply two Big Numbers modulo BnM.
- Please note, all "out" Big number arguments should be properly initialized
- by calling to BigNumInit() or BigNumFromBin() functions.
- @param[in] BnA Big number.
- @param[in] BnB Big number.
- @param[in] BnM Big number (modulo).
- @param[out] BnRes The result, such that (BnA * BnB) % BnM.
- @retval TRUE On success.
- @retval FALSE Otherwise.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceBigNumMulMod (
- IN CONST VOID *BnA,
- IN CONST VOID *BnB,
- IN CONST VOID *BnM,
- OUT VOID *BnRes
- )
- {
- return CALL_BASECRYPTLIB (Bn.Services.MulMod, BigNumMulMod, (BnA, BnB, BnM, BnRes), FALSE);
- }
- /**
- Compare two Big Numbers.
- @param[in] BnA Big number.
- @param[in] BnB Big number.
- @retval 0 BnA == BnB.
- @retval 1 BnA > BnB.
- @retval -1 BnA < BnB.
- **/
- INTN
- EFIAPI
- CryptoServiceBigNumCmp (
- IN CONST VOID *BnA,
- IN CONST VOID *BnB
- )
- {
- return CALL_BASECRYPTLIB (Bn.Services.Cmp, BigNumCmp, (BnA, BnB), 0);
- }
- /**
- Get number of bits in Bn.
- @param[in] Bn Big number.
- @retval Number of bits.
- **/
- UINTN
- EFIAPI
- CryptoServiceBigNumBits (
- IN CONST VOID *Bn
- )
- {
- return CALL_BASECRYPTLIB (Bn.Services.Bits, BigNumBits, (Bn), 0);
- }
- /**
- Get number of bytes in Bn.
- @param[in] Bn Big number.
- @retval Number of bytes.
- **/
- UINTN
- EFIAPI
- CryptoServiceBigNumBytes (
- IN CONST VOID *Bn
- )
- {
- return CALL_BASECRYPTLIB (Bn.Services.Bytes, BigNumBytes, (Bn), 0);
- }
- /**
- Checks if Big Number equals to the given Num.
- @param[in] Bn Big number.
- @param[in] Num Number.
- @retval TRUE iff Bn == Num.
- @retval FALSE otherwise.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceBigNumIsWord (
- IN CONST VOID *Bn,
- IN UINTN Num
- )
- {
- return CALL_BASECRYPTLIB (Bn.Services.IsWord, BigNumIsWord, (Bn, Num), FALSE);
- }
- /**
- Checks if Big Number is odd.
- @param[in] Bn Big number.
- @retval TRUE Bn is odd (Bn % 2 == 1).
- @retval FALSE otherwise.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceBigNumIsOdd (
- IN CONST VOID *Bn
- )
- {
- return CALL_BASECRYPTLIB (Bn.Services.IsOdd, BigNumIsOdd, (Bn), FALSE);
- }
- /**
- Copy Big number.
- @param[out] BnDst Destination.
- @param[in] BnSrc Source.
- @retval BnDst on success.
- @retval NULL otherwise.
- **/
- VOID *
- EFIAPI
- CryptoServiceBigNumCopy (
- OUT VOID *BnDst,
- IN CONST VOID *BnSrc
- )
- {
- return CALL_BASECRYPTLIB (Bn.Services.Copy, BigNumCopy, (BnDst, BnSrc), NULL);
- }
- /**
- Get constant Big number with value of "1".
- This may be used to save expensive allocations.
- @retval Big Number with value of 1.
- **/
- CONST VOID *
- EFIAPI
- CryptoServiceBigNumValueOne (
- VOID
- )
- {
- return CALL_BASECRYPTLIB (Bn.Services.ValueOne, BigNumValueOne, (), NULL);
- }
- /**
- Shift right Big Number.
- Please note, all "out" Big number arguments should be properly initialized
- by calling to BigNumInit() or BigNumFromBin() functions.
- @param[in] Bn Big number.
- @param[in] N Number of bits to shift.
- @param[out] BnRes The result.
- @retval TRUE On success.
- @retval FALSE Otherwise.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceBigNumRShift (
- IN CONST VOID *Bn,
- IN UINTN N,
- OUT VOID *BnRes
- )
- {
- return CALL_BASECRYPTLIB (Bn.Services.RShift, BigNumRShift, (Bn, N, BnRes), FALSE);
- }
- /**
- Mark Big Number for constant time computations.
- This function should be called before any constant time computations are
- performed on the given Big number.
- @param[in] Bn Big number.
- **/
- VOID
- EFIAPI
- CryptoServiceBigNumConstTime (
- IN VOID *Bn
- )
- {
- CALL_VOID_BASECRYPTLIB (Bn.Services.ConstTime, BigNumConstTime, (Bn));
- }
- /**
- Calculate square modulo.
- Please note, all "out" Big number arguments should be properly initialized
- by calling to BigNumInit() or BigNumFromBin() functions.
- @param[in] BnA Big number.
- @param[in] BnM Big number (modulo).
- @param[out] BnRes The result, such that (BnA ^ 2) % BnM.
- @retval TRUE On success.
- @retval FALSE Otherwise.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceBigNumSqrMod (
- IN CONST VOID *BnA,
- IN CONST VOID *BnM,
- OUT VOID *BnRes
- )
- {
- return CALL_BASECRYPTLIB (Bn.Services.SqrMod, BigNumSqrMod, (BnA, BnM, BnRes), FALSE);
- }
- /**
- Create new Big Number computation context. This is an opaque structure
- which should be passed to any function that requires it. The BN context is
- needed to optimize calculations and expensive allocations.
- @retval Big Number context struct or NULL on failure.
- **/
- VOID *
- EFIAPI
- CryptoServiceBigNumNewContext (
- VOID
- )
- {
- return CALL_BASECRYPTLIB (Bn.Services.NewContext, BigNumNewContext, (), NULL);
- }
- /**
- Free Big Number context that was allocated with BigNumNewContext().
- @param[in] BnCtx Big number context to free.
- **/
- VOID
- EFIAPI
- CryptoServiceBigNumContextFree (
- IN VOID *BnCtx
- )
- {
- CALL_VOID_BASECRYPTLIB (Bn.Services.ContextFree, BigNumContextFree, (BnCtx));
- }
- /**
- Set Big Number to a given value.
- @param[in] Bn Big number to set.
- @param[in] Val Value to set.
- @retval TRUE On success.
- @retval FALSE Otherwise.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceBigNumSetUint (
- IN VOID *Bn,
- IN UINTN Val
- )
- {
- return CALL_BASECRYPTLIB (Bn.Services.SetUint, BigNumSetUint, (Bn, Val), FALSE);
- }
- /**
- Add two Big Numbers modulo BnM.
- @param[in] BnA Big number.
- @param[in] BnB Big number.
- @param[in] BnM Big number (modulo).
- @param[out] BnRes The result, such that (BnA + BnB) % BnM.
- @retval TRUE On success.
- @retval FALSE Otherwise.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceBigNumAddMod (
- IN CONST VOID *BnA,
- IN CONST VOID *BnB,
- IN CONST VOID *BnM,
- OUT VOID *BnRes
- )
- {
- return CALL_BASECRYPTLIB (Bn.Services.AddMod, BigNumAddMod, (BnA, BnB, BnM, BnRes), FALSE);
- }
- // =====================================================================================
- // Basic Elliptic Curve Primitives
- // =====================================================================================
- /**
- Initialize new opaque EcGroup object. This object represents an EC curve and
- and is used for calculation within this group. This object should be freed
- using EcGroupFree() function.
- @param[in] CryptoNid Identifying number for the ECC curve (Defined in
- BaseCryptLib.h).
- @retval EcGroup object On success.
- @retval NULL On failure.
- **/
- VOID *
- EFIAPI
- CryptoServiceEcGroupInit (
- IN UINTN CryptoNid
- )
- {
- return CALL_BASECRYPTLIB (Ec.Services.GroupInit, EcGroupInit, (CryptoNid), NULL);
- }
- /**
- Get EC curve parameters. While elliptic curve equation is Y^2 mod P = (X^3 + AX + B) Mod P.
- This function will set the provided Big Number objects to the corresponding
- values. The caller needs to make sure all the "out" BigNumber parameters
- are properly initialized.
- @param[in] EcGroup EC group object.
- @param[out] BnPrime Group prime number.
- @param[out] BnA A coefficient.
- @param[out] BnB B coefficient.
- @param[in] BnCtx BN context.
- @retval TRUE On success.
- @retval FALSE Otherwise.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceEcGroupGetCurve (
- IN CONST VOID *EcGroup,
- OUT VOID *BnPrime,
- OUT VOID *BnA,
- OUT VOID *BnB,
- IN VOID *BnCtx
- )
- {
- return CALL_BASECRYPTLIB (Ec.Services.GroupGetCurve, EcGroupGetCurve, (EcGroup, BnPrime, BnA, BnB, BnCtx), FALSE);
- }
- /**
- Get EC group order.
- This function will set the provided Big Number object to the corresponding
- value. The caller needs to make sure that the "out" BigNumber parameter
- is properly initialized.
- @param[in] EcGroup EC group object.
- @param[out] BnOrder Group prime number.
- @retval TRUE On success.
- @retval FALSE Otherwise.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceEcGroupGetOrder (
- IN VOID *EcGroup,
- OUT VOID *BnOrder
- )
- {
- return CALL_BASECRYPTLIB (Ec.Services.GroupGetOrder, EcGroupGetOrder, (EcGroup, BnOrder), FALSE);
- }
- /**
- Free previously allocated EC group object using EcGroupInit().
- @param[in] EcGroup EC group object to free.
- **/
- VOID
- EFIAPI
- CryptoServiceEcGroupFree (
- IN VOID *EcGroup
- )
- {
- CALL_VOID_BASECRYPTLIB (Ec.Services.GroupFree, EcGroupFree, (EcGroup));
- }
- /**
- Initialize new opaque EC Point object. This object represents an EC point
- within the given EC group (curve).
- @param[in] EC Group, properly initialized using EcGroupInit().
- @retval EC Point object On success.
- @retval NULL On failure.
- **/
- VOID *
- EFIAPI
- CryptoServiceEcPointInit (
- IN CONST VOID *EcGroup
- )
- {
- return CALL_BASECRYPTLIB (Ec.Services.PointInit, EcPointInit, (EcGroup), NULL);
- }
- /**
- Free previously allocated EC Point object using EcPointInit().
- @param[in] EcPoint EC Point to free.
- @param[in] Clear TRUE iff the memory should be cleared.
- **/
- VOID
- EFIAPI
- CryptoServiceEcPointDeInit (
- IN VOID *EcPoint,
- IN BOOLEAN Clear
- )
- {
- CALL_VOID_BASECRYPTLIB (Ec.Services.PointDeInit, EcPointDeInit, (EcPoint, Clear));
- }
- /**
- Get EC point affine (x,y) coordinates.
- This function will set the provided Big Number objects to the corresponding
- values. The caller needs to make sure all the "out" BigNumber parameters
- are properly initialized.
- @param[in] EcGroup EC group object.
- @param[in] EcPoint EC point object.
- @param[out] BnX X coordinate.
- @param[out] BnY Y coordinate.
- @param[in] BnCtx BN context, created with BigNumNewContext().
- @retval TRUE On success.
- @retval FALSE Otherwise.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceEcPointGetAffineCoordinates (
- IN CONST VOID *EcGroup,
- IN CONST VOID *EcPoint,
- OUT VOID *BnX,
- OUT VOID *BnY,
- IN VOID *BnCtx
- )
- {
- return CALL_BASECRYPTLIB (Ec.Services.PointGetAffineCoordinates, EcPointGetAffineCoordinates, (EcGroup, EcPoint, BnX, BnY, BnCtx), FALSE);
- }
- /**
- Set EC point affine (x,y) coordinates.
- @param[in] EcGroup EC group object.
- @param[in] EcPoint EC point object.
- @param[in] BnX X coordinate.
- @param[in] BnY Y coordinate.
- @param[in] BnCtx BN context, created with BigNumNewContext().
- @retval TRUE On success.
- @retval FALSE Otherwise.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceEcPointSetAffineCoordinates (
- IN CONST VOID *EcGroup,
- IN VOID *EcPoint,
- IN CONST VOID *BnX,
- IN CONST VOID *BnY,
- IN VOID *BnCtx
- )
- {
- return CALL_BASECRYPTLIB (Ec.Services.PointSetAffineCoordinates, EcPointSetAffineCoordinates, (EcGroup, EcPoint, BnX, BnY, BnCtx), FALSE);
- }
- /**
- EC Point addition. EcPointResult = EcPointA + EcPointB.
- @param[in] EcGroup EC group object.
- @param[out] EcPointResult EC point to hold the result. The point should
- be properly initialized.
- @param[in] EcPointA EC Point.
- @param[in] EcPointB EC Point.
- @param[in] BnCtx BN context, created with BigNumNewContext().
- @retval TRUE On success.
- @retval FALSE Otherwise.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceEcPointAdd (
- IN CONST VOID *EcGroup,
- OUT VOID *EcPointResult,
- IN CONST VOID *EcPointA,
- IN CONST VOID *EcPointB,
- IN VOID *BnCtx
- )
- {
- return CALL_BASECRYPTLIB (Ec.Services.PointAdd, EcPointAdd, (EcGroup, EcPointResult, EcPointA, EcPointB, BnCtx), FALSE);
- }
- /**
- Variable EC point multiplication. EcPointResult = EcPoint * BnPScalar.
- @param[in] EcGroup EC group object.
- @param[out] EcPointResult EC point to hold the result. The point should
- be properly initialized.
- @param[in] EcPoint EC Point.
- @param[in] BnPScalar P Scalar.
- @param[in] BnCtx BN context, created with BigNumNewContext().
- @retval TRUE On success.
- @retval FALSE Otherwise.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceEcPointMul (
- IN CONST VOID *EcGroup,
- OUT VOID *EcPointResult,
- IN CONST VOID *EcPoint,
- IN CONST VOID *BnPScalar,
- IN VOID *BnCtx
- )
- {
- return CALL_BASECRYPTLIB (Ec.Services.PointMul, EcPointMul, (EcGroup, EcPointResult, EcPoint, BnPScalar, BnCtx), FALSE);
- }
- /**
- Calculate the inverse of the supplied EC point.
- @param[in] EcGroup EC group object.
- @param[in,out] EcPoint EC point to invert.
- @param[in] BnCtx BN context, created with BigNumNewContext().
- @retval TRUE On success.
- @retval FALSE Otherwise.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceEcPointInvert (
- IN CONST VOID *EcGroup,
- IN OUT VOID *EcPoint,
- IN VOID *BnCtx
- )
- {
- return CALL_BASECRYPTLIB (Ec.Services.PointInvert, EcPointInvert, (EcGroup, EcPoint, BnCtx), FALSE);
- }
- /**
- Check if the supplied point is on EC curve.
- @param[in] EcGroup EC group object.
- @param[in] EcPoint EC point to check.
- @param[in] BnCtx BN context, created with BigNumNewContext().
- @retval TRUE On curve.
- @retval FALSE Otherwise.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceEcPointIsOnCurve (
- IN CONST VOID *EcGroup,
- IN CONST VOID *EcPoint,
- IN VOID *BnCtx
- )
- {
- return CALL_BASECRYPTLIB (Ec.Services.PointIsOnCurve, EcPointIsOnCurve, (EcGroup, EcPoint, BnCtx), FALSE);
- }
- /**
- Check if the supplied point is at infinity.
- @param[in] EcGroup EC group object.
- @param[in] EcPoint EC point to check.
- @retval TRUE At infinity.
- @retval FALSE Otherwise.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceEcPointIsAtInfinity (
- IN CONST VOID *EcGroup,
- IN CONST VOID *EcPoint
- )
- {
- return CALL_BASECRYPTLIB (Ec.Services.PointIsAtInfinity, EcPointIsAtInfinity, (EcGroup, EcPoint), FALSE);
- }
- /**
- Check if EC points are equal.
- @param[in] EcGroup EC group object.
- @param[in] EcPointA EC point A.
- @param[in] EcPointB EC point B.
- @param[in] BnCtx BN context, created with BigNumNewContext().
- @retval TRUE A == B.
- @retval FALSE Otherwise.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceEcPointEqual (
- IN CONST VOID *EcGroup,
- IN CONST VOID *EcPointA,
- IN CONST VOID *EcPointB,
- IN VOID *BnCtx
- )
- {
- return CALL_BASECRYPTLIB (Ec.Services.PointEqual, EcPointEqual, (EcGroup, EcPointA, EcPointB, BnCtx), FALSE);
- }
- /**
- Set EC point compressed coordinates. Points can be described in terms of
- their compressed coordinates. For a point (x, y), for any given value for x
- such that the point is on the curve there will only ever be two possible
- values for y. Therefore, a point can be set using this function where BnX is
- the x coordinate and YBit is a value 0 or 1 to identify which of the two
- possible values for y should be used.
- @param[in] EcGroup EC group object.
- @param[in] EcPoint EC Point.
- @param[in] BnX X coordinate.
- @param[in] YBit 0 or 1 to identify which Y value is used.
- @param[in] BnCtx BN context, created with BigNumNewContext().
- @retval TRUE On success.
- @retval FALSE Otherwise.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceEcPointSetCompressedCoordinates (
- IN CONST VOID *EcGroup,
- IN VOID *EcPoint,
- IN CONST VOID *BnX,
- IN UINT8 YBit,
- IN VOID *BnCtx
- )
- {
- return CALL_BASECRYPTLIB (Ec.Services.PointSetCompressedCoordinates, EcPointSetCompressedCoordinates, (EcGroup, EcPoint, BnX, YBit, BnCtx), FALSE);
- }
- // =====================================================================================
- // Elliptic Curve Diffie Hellman Primitives
- // =====================================================================================
- /**
- Allocates and Initializes one Elliptic Curve Context for subsequent use
- with the NID.
- @param[in] Nid cipher NID
- @return Pointer to the Elliptic Curve Context that has been initialized.
- If the allocations fails, EcNewByNid() returns NULL.
- **/
- VOID *
- EFIAPI
- CryptoServiceEcNewByNid (
- IN UINTN Nid
- )
- {
- return CALL_BASECRYPTLIB (Ec.Services.NewByNid, EcNewByNid, (Nid), NULL);
- }
- /**
- Release the specified EC context.
- @param[in] EcContext Pointer to the EC context to be released.
- **/
- VOID
- EFIAPI
- CryptoServiceEcFree (
- IN VOID *EcContext
- )
- {
- CALL_VOID_BASECRYPTLIB (Ec.Services.Free, EcFree, (EcContext));
- }
- /**
- Generates EC key and returns EC public key (X, Y), Please note, this function uses
- pseudo random number generator. The caller must make sure RandomSeed()
- function was properly called before.
- The Ec context should be correctly initialized by EcNewByNid.
- This function generates random secret, and computes the public key (X, Y), which is
- returned via parameter Public, PublicSize.
- X is the first half of Public with size being PublicSize / 2,
- Y is the second half of Public with size being PublicSize / 2.
- EC context is updated accordingly.
- If the Public buffer is too small to hold the public X, Y, FALSE is returned and
- PublicSize is set to the required buffer size to obtain the public X, Y.
- For P-256, the PublicSize is 64. First 32-byte is X, Second 32-byte is Y.
- For P-384, the PublicSize is 96. First 48-byte is X, Second 48-byte is Y.
- For P-521, the PublicSize is 132. First 66-byte is X, Second 66-byte is Y.
- If EcContext is NULL, then return FALSE.
- If PublicSize is NULL, then return FALSE.
- If PublicSize is large enough but Public is NULL, then return FALSE.
- @param[in, out] EcContext Pointer to the EC context.
- @param[out] PublicKey Pointer to t buffer to receive generated public X,Y.
- @param[in, out] PublicKeySize On input, the size of Public buffer in bytes.
- On output, the size of data returned in Public buffer in bytes.
- @retval TRUE EC public X,Y generation succeeded.
- @retval FALSE EC public X,Y generation failed.
- @retval FALSE PublicKeySize is not large enough.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceEcGenerateKey (
- IN OUT VOID *EcContext,
- OUT UINT8 *PublicKey,
- IN OUT UINTN *PublicKeySize
- )
- {
- return CALL_BASECRYPTLIB (Ec.Services.GenerateKey, EcGenerateKey, (EcContext, PublicKey, PublicKeySize), FALSE);
- }
- /**
- Gets the public key component from the established EC context.
- The Ec context should be correctly initialized by EcNewByNid, and successfully
- generate key pair from EcGenerateKey().
- For P-256, the PublicSize is 64. First 32-byte is X, Second 32-byte is Y.
- For P-384, the PublicSize is 96. First 48-byte is X, Second 48-byte is Y.
- For P-521, the PublicSize is 132. First 66-byte is X, Second 66-byte is Y.
- @param[in, out] EcContext Pointer to EC context being set.
- @param[out] PublicKey Pointer to t buffer to receive generated public X,Y.
- @param[in, out] PublicKeySize On input, the size of Public buffer in bytes.
- On output, the size of data returned in Public buffer in bytes.
- @retval TRUE EC key component was retrieved successfully.
- @retval FALSE Invalid EC key component.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceEcGetPubKey (
- IN OUT VOID *EcContext,
- OUT UINT8 *PublicKey,
- IN OUT UINTN *PublicKeySize
- )
- {
- return CALL_BASECRYPTLIB (Ec.Services.GetPubKey, EcGetPubKey, (EcContext, PublicKey, PublicKeySize), FALSE);
- }
- /**
- Computes exchanged common key.
- Given peer's public key (X, Y), this function computes the exchanged common key,
- based on its own context including value of curve parameter and random secret.
- X is the first half of PeerPublic with size being PeerPublicSize / 2,
- Y is the second half of PeerPublic with size being PeerPublicSize / 2.
- If EcContext is NULL, then return FALSE.
- If PeerPublic is NULL, then return FALSE.
- If PeerPublicSize is 0, then return FALSE.
- If Key is NULL, then return FALSE.
- If KeySize is not large enough, then return FALSE.
- For P-256, the PeerPublicSize is 64. First 32-byte is X, Second 32-byte is Y.
- For P-384, the PeerPublicSize is 96. First 48-byte is X, Second 48-byte is Y.
- For P-521, the PeerPublicSize is 132. First 66-byte is X, Second 66-byte is Y.
- @param[in, out] EcContext Pointer to the EC context.
- @param[in] PeerPublic Pointer to the peer's public X,Y.
- @param[in] PeerPublicSize Size of peer's public X,Y in bytes.
- @param[in] CompressFlag Flag of PeerPublic is compressed or not.
- @param[out] Key Pointer to the buffer to receive generated key.
- @param[in, out] KeySize On input, the size of Key buffer in bytes.
- On output, the size of data returned in Key buffer in bytes.
- @retval TRUE EC exchanged key generation succeeded.
- @retval FALSE EC exchanged key generation failed.
- @retval FALSE KeySize is not large enough.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceEcDhComputeKey (
- IN OUT VOID *EcContext,
- IN CONST UINT8 *PeerPublic,
- IN UINTN PeerPublicSize,
- IN CONST INT32 *CompressFlag,
- OUT UINT8 *Key,
- IN OUT UINTN *KeySize
- )
- {
- return CALL_BASECRYPTLIB (Ec.Services.DhComputeKey, EcDhComputeKey, (EcContext, PeerPublic, PeerPublicSize, CompressFlag, Key, KeySize), FALSE);
- }
- /**
- Retrieve the EC Public Key from one DER-encoded X509 certificate.
- @param[in] Cert Pointer to the DER-encoded X509 certificate.
- @param[in] CertSize Size of the X509 certificate in bytes.
- @param[out] EcContext Pointer to new-generated EC DSA context which contain the retrieved
- EC public key component. Use EcFree() function to free the
- resource.
- If Cert is NULL, then return FALSE.
- If EcContext is NULL, then return FALSE.
- @retval TRUE EC Public Key was retrieved successfully.
- @retval FALSE Fail to retrieve EC public key from X509 certificate.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceEcGetPublicKeyFromX509 (
- IN CONST UINT8 *Cert,
- IN UINTN CertSize,
- OUT VOID **EcContext
- )
- {
- return CALL_BASECRYPTLIB (Ec.Services.GetPublicKeyFromX509, EcGetPublicKeyFromX509, (Cert, CertSize, EcContext), FALSE);
- }
- /**
- Retrieve the EC Private Key from the password-protected PEM key data.
- @param[in] PemData Pointer to the PEM-encoded key data to be retrieved.
- @param[in] PemSize Size of the PEM key data in bytes.
- @param[in] Password NULL-terminated passphrase used for encrypted PEM key data.
- @param[out] EcContext Pointer to new-generated EC DSA context which contain the retrieved
- EC private key component. Use EcFree() function to free the
- resource.
- If PemData is NULL, then return FALSE.
- If EcContext is NULL, then return FALSE.
- @retval TRUE EC Private Key was retrieved successfully.
- @retval FALSE Invalid PEM key data or incorrect password.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceEcGetPrivateKeyFromPem (
- IN CONST UINT8 *PemData,
- IN UINTN PemSize,
- IN CONST CHAR8 *Password,
- OUT VOID **EcContext
- )
- {
- return CALL_BASECRYPTLIB (Ec.Services.GetPrivateKeyFromPem, EcGetPrivateKeyFromPem, (PemData, PemSize, Password, EcContext), FALSE);
- }
- /**
- Carries out the EC-DSA signature.
- This function carries out the EC-DSA signature.
- If the Signature buffer is too small to hold the contents of signature, FALSE
- is returned and SigSize is set to the required buffer size to obtain the signature.
- If EcContext is NULL, then return FALSE.
- If MessageHash is NULL, then return FALSE.
- If HashSize need match the HashNid. HashNid could be SHA256, SHA384, SHA512, SHA3_256, SHA3_384, SHA3_512.
- If SigSize is large enough but Signature is NULL, then return FALSE.
- For P-256, the SigSize is 64. First 32-byte is R, Second 32-byte is S.
- For P-384, the SigSize is 96. First 48-byte is R, Second 48-byte is S.
- For P-521, the SigSize is 132. First 66-byte is R, Second 66-byte is S.
- @param[in] EcContext Pointer to EC context for signature generation.
- @param[in] HashNid hash NID
- @param[in] MessageHash Pointer to octet message hash to be signed.
- @param[in] HashSize Size of the message hash in bytes.
- @param[out] Signature Pointer to buffer to receive EC-DSA signature.
- @param[in, out] SigSize On input, the size of Signature buffer in bytes.
- On output, the size of data returned in Signature buffer in bytes.
- @retval TRUE Signature successfully generated in EC-DSA.
- @retval FALSE Signature generation failed.
- @retval FALSE SigSize is too small.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceEcDsaSign (
- IN VOID *EcContext,
- IN UINTN HashNid,
- IN CONST UINT8 *MessageHash,
- IN UINTN HashSize,
- OUT UINT8 *Signature,
- IN OUT UINTN *SigSize
- )
- {
- return CALL_BASECRYPTLIB (Ec.Services.DsaSign, EcDsaSign, (EcContext, HashNid, MessageHash, HashSize, Signature, SigSize), FALSE);
- }
- /**
- Verifies the EC-DSA signature.
- If EcContext is NULL, then return FALSE.
- If MessageHash is NULL, then return FALSE.
- If Signature is NULL, then return FALSE.
- If HashSize need match the HashNid. HashNid could be SHA256, SHA384, SHA512, SHA3_256, SHA3_384, SHA3_512.
- For P-256, the SigSize is 64. First 32-byte is R, Second 32-byte is S.
- For P-384, the SigSize is 96. First 48-byte is R, Second 48-byte is S.
- For P-521, the SigSize is 132. First 66-byte is R, Second 66-byte is S.
- @param[in] EcContext Pointer to EC context for signature verification.
- @param[in] HashNid hash NID
- @param[in] MessageHash Pointer to octet message hash to be checked.
- @param[in] HashSize Size of the message hash in bytes.
- @param[in] Signature Pointer to EC-DSA signature to be verified.
- @param[in] SigSize Size of signature in bytes.
- @retval TRUE Valid signature encoded in EC-DSA.
- @retval FALSE Invalid signature or invalid EC context.
- **/
- BOOLEAN
- EFIAPI
- CryptoServiceEcDsaVerify (
- IN VOID *EcContext,
- IN UINTN HashNid,
- IN CONST UINT8 *MessageHash,
- IN UINTN HashSize,
- IN CONST UINT8 *Signature,
- IN UINTN SigSize
- )
- {
- return CALL_BASECRYPTLIB (Ec.Services.DsaVerify, EcDsaVerify, (EcContext, HashNid, MessageHash, HashSize, Signature, SigSize), FALSE);
- }
- const EDKII_CRYPTO_PROTOCOL mEdkiiCrypto = {
- /// Version
- CryptoServiceGetCryptoVersion,
- /// HMAC MD5 - deprecated and unsupported
- DeprecatedCryptoServiceHmacMd5New,
- DeprecatedCryptoServiceHmacMd5Free,
- DeprecatedCryptoServiceHmacMd5SetKey,
- DeprecatedCryptoServiceHmacMd5Duplicate,
- DeprecatedCryptoServiceHmacMd5Update,
- DeprecatedCryptoServiceHmacMd5Final,
- /// HMAC SHA1 - deprecated and unsupported
- DeprecatedCryptoServiceHmacSha1New,
- DeprecatedCryptoServiceHmacSha1Free,
- DeprecatedCryptoServiceHmacSha1SetKey,
- DeprecatedCryptoServiceHmacSha1Duplicate,
- DeprecatedCryptoServiceHmacSha1Update,
- DeprecatedCryptoServiceHmacSha1Final,
- /// HMAC SHA256
- CryptoServiceHmacSha256New,
- CryptoServiceHmacSha256Free,
- CryptoServiceHmacSha256SetKey,
- CryptoServiceHmacSha256Duplicate,
- CryptoServiceHmacSha256Update,
- CryptoServiceHmacSha256Final,
- /// Md4 - deprecated and unsupported
- DeprecatedCryptoServiceMd4GetContextSize,
- DeprecatedCryptoServiceMd4Init,
- DeprecatedCryptoServiceMd4Duplicate,
- DeprecatedCryptoServiceMd4Update,
- DeprecatedCryptoServiceMd4Final,
- DeprecatedCryptoServiceMd4HashAll,
- #ifndef ENABLE_MD5_DEPRECATED_INTERFACES
- /// Md5 - deprecated and unsupported
- DeprecatedCryptoServiceMd5GetContextSize,
- DeprecatedCryptoServiceMd5Init,
- DeprecatedCryptoServiceMd5Duplicate,
- DeprecatedCryptoServiceMd5Update,
- DeprecatedCryptoServiceMd5Final,
- DeprecatedCryptoServiceMd5HashAll,
- #else
- /// Md5
- CryptoServiceMd5GetContextSize,
- CryptoServiceMd5Init,
- CryptoServiceMd5Duplicate,
- CryptoServiceMd5Update,
- CryptoServiceMd5Final,
- CryptoServiceMd5HashAll,
- #endif
- /// Pkcs
- CryptoServicePkcs1v2Encrypt,
- CryptoServicePkcs5HashPassword,
- CryptoServicePkcs7Verify,
- CryptoServiceVerifyEKUsInPkcs7Signature,
- CryptoServicePkcs7GetSigners,
- CryptoServicePkcs7FreeSigners,
- CryptoServicePkcs7Sign,
- CryptoServicePkcs7GetAttachedContent,
- CryptoServicePkcs7GetCertificatesList,
- CryptoServiceAuthenticodeVerify,
- CryptoServiceImageTimestampVerify,
- /// DH
- CryptoServiceDhNew,
- CryptoServiceDhFree,
- CryptoServiceDhGenerateParameter,
- CryptoServiceDhSetParameter,
- CryptoServiceDhGenerateKey,
- CryptoServiceDhComputeKey,
- /// Random
- CryptoServiceRandomSeed,
- CryptoServiceRandomBytes,
- /// RSA
- CryptoServiceRsaPkcs1Verify,
- CryptoServiceRsaNew,
- CryptoServiceRsaFree,
- CryptoServiceRsaSetKey,
- CryptoServiceRsaGetKey,
- CryptoServiceRsaGenerateKey,
- CryptoServiceRsaCheckKey,
- CryptoServiceRsaPkcs1Sign,
- CryptoServiceRsaPkcs1Verify,
- CryptoServiceRsaGetPrivateKeyFromPem,
- CryptoServiceRsaGetPublicKeyFromX509,
- #ifdef DISABLE_SHA1_DEPRECATED_INTERFACES
- /// Sha1 - deprecated and unsupported
- DeprecatedCryptoServiceSha1GetContextSize,
- DeprecatedCryptoServiceSha1Init,
- DeprecatedCryptoServiceSha1Duplicate,
- DeprecatedCryptoServiceSha1Update,
- DeprecatedCryptoServiceSha1Final,
- DeprecatedCryptoServiceSha1HashAll,
- #else
- /// Sha1
- CryptoServiceSha1GetContextSize,
- CryptoServiceSha1Init,
- CryptoServiceSha1Duplicate,
- CryptoServiceSha1Update,
- CryptoServiceSha1Final,
- CryptoServiceSha1HashAll,
- #endif
- /// Sha256
- CryptoServiceSha256GetContextSize,
- CryptoServiceSha256Init,
- CryptoServiceSha256Duplicate,
- CryptoServiceSha256Update,
- CryptoServiceSha256Final,
- CryptoServiceSha256HashAll,
- /// Sha384
- CryptoServiceSha384GetContextSize,
- CryptoServiceSha384Init,
- CryptoServiceSha384Duplicate,
- CryptoServiceSha384Update,
- CryptoServiceSha384Final,
- CryptoServiceSha384HashAll,
- /// Sha512
- CryptoServiceSha512GetContextSize,
- CryptoServiceSha512Init,
- CryptoServiceSha512Duplicate,
- CryptoServiceSha512Update,
- CryptoServiceSha512Final,
- CryptoServiceSha512HashAll,
- /// X509
- CryptoServiceX509GetSubjectName,
- CryptoServiceX509GetCommonName,
- CryptoServiceX509GetOrganizationName,
- CryptoServiceX509VerifyCert,
- CryptoServiceX509ConstructCertificate,
- CryptoServiceX509ConstructCertificateStack,
- CryptoServiceX509Free,
- CryptoServiceX509StackFree,
- CryptoServiceX509GetTBSCert,
- /// TDES - deprecated and unsupported
- DeprecatedCryptoServiceTdesGetContextSize,
- DeprecatedCryptoServiceTdesInit,
- DeprecatedCryptoServiceTdesEcbEncrypt,
- DeprecatedCryptoServiceTdesEcbDecrypt,
- DeprecatedCryptoServiceTdesCbcEncrypt,
- DeprecatedCryptoServiceTdesCbcDecrypt,
- /// AES - ECB mode is deprecated and unsupported
- CryptoServiceAesGetContextSize,
- CryptoServiceAesInit,
- DeprecatedCryptoServiceAesEcbEncrypt,
- DeprecatedCryptoServiceAesEcbDecrypt,
- CryptoServiceAesCbcEncrypt,
- CryptoServiceAesCbcDecrypt,
- /// Arc4 - deprecated and unsupported
- DeprecatedCryptoServiceArc4GetContextSize,
- DeprecatedCryptoServiceArc4Init,
- DeprecatedCryptoServiceArc4Encrypt,
- DeprecatedCryptoServiceArc4Decrypt,
- DeprecatedCryptoServiceArc4Reset,
- /// SM3
- CryptoServiceSm3GetContextSize,
- CryptoServiceSm3Init,
- CryptoServiceSm3Duplicate,
- CryptoServiceSm3Update,
- CryptoServiceSm3Final,
- CryptoServiceSm3HashAll,
- /// HKDF
- CryptoServiceHkdfSha256ExtractAndExpand,
- /// X509 (Continued)
- CryptoServiceX509ConstructCertificateStackV,
- /// TLS
- CryptoServiceTlsInitialize,
- CryptoServiceTlsCtxFree,
- CryptoServiceTlsCtxNew,
- CryptoServiceTlsFree,
- CryptoServiceTlsNew,
- CryptoServiceTlsInHandshake,
- CryptoServiceTlsDoHandshake,
- CryptoServiceTlsHandleAlert,
- CryptoServiceTlsCloseNotify,
- CryptoServiceTlsCtrlTrafficOut,
- CryptoServiceTlsCtrlTrafficIn,
- CryptoServiceTlsRead,
- CryptoServiceTlsWrite,
- /// TLS Set
- CryptoServiceTlsSetVersion,
- CryptoServiceTlsSetConnectionEnd,
- CryptoServiceTlsSetCipherList,
- CryptoServiceTlsSetCompressionMethod,
- CryptoServiceTlsSetVerify,
- CryptoServiceTlsSetVerifyHost,
- CryptoServiceTlsSetSessionId,
- CryptoServiceTlsSetCaCertificate,
- CryptoServiceTlsSetHostPublicCert,
- CryptoServiceTlsSetHostPrivateKey,
- CryptoServiceTlsSetCertRevocationList,
- /// TLS Get
- CryptoServiceTlsGetVersion,
- CryptoServiceTlsGetConnectionEnd,
- CryptoServiceTlsGetCurrentCipher,
- CryptoServiceTlsGetCurrentCompressionId,
- CryptoServiceTlsGetVerify,
- CryptoServiceTlsGetSessionId,
- CryptoServiceTlsGetClientRandom,
- CryptoServiceTlsGetServerRandom,
- CryptoServiceTlsGetKeyMaterial,
- CryptoServiceTlsGetCaCertificate,
- CryptoServiceTlsGetHostPublicCert,
- CryptoServiceTlsGetHostPrivateKey,
- CryptoServiceTlsGetCertRevocationList,
- /// RSA PSS
- CryptoServiceRsaPssSign,
- CryptoServiceRsaPssVerify,
- /// Parallel hash
- CryptoServiceParallelHash256HashAll,
- /// HMAC SHA256 (continued)
- CryptoServiceHmacSha256All,
- /// HMAC SHA384
- CryptoServiceHmacSha384New,
- CryptoServiceHmacSha384Free,
- CryptoServiceHmacSha384SetKey,
- CryptoServiceHmacSha384Duplicate,
- CryptoServiceHmacSha384Update,
- CryptoServiceHmacSha384Final,
- CryptoServiceHmacSha384All,
- /// HKDF (continued)
- CryptoServiceHkdfSha256Extract,
- CryptoServiceHkdfSha256Expand,
- CryptoServiceHkdfSha384ExtractAndExpand,
- CryptoServiceHkdfSha384Extract,
- CryptoServiceHkdfSha384Expand,
- /// Aead Aes GCM
- CryptoServiceAeadAesGcmEncrypt,
- CryptoServiceAeadAesGcmDecrypt,
- /// Big Numbers
- CryptoServiceBigNumInit,
- CryptoServiceBigNumFromBin,
- CryptoServiceBigNumToBin,
- CryptoServiceBigNumFree,
- CryptoServiceBigNumAdd,
- CryptoServiceBigNumSub,
- CryptoServiceBigNumMod,
- CryptoServiceBigNumExpMod,
- CryptoServiceBigNumInverseMod,
- CryptoServiceBigNumDiv,
- CryptoServiceBigNumMulMod,
- CryptoServiceBigNumCmp,
- CryptoServiceBigNumBits,
- CryptoServiceBigNumBytes,
- CryptoServiceBigNumIsWord,
- CryptoServiceBigNumIsOdd,
- CryptoServiceBigNumCopy,
- CryptoServiceBigNumValueOne,
- CryptoServiceBigNumRShift,
- CryptoServiceBigNumConstTime,
- CryptoServiceBigNumSqrMod,
- CryptoServiceBigNumNewContext,
- CryptoServiceBigNumContextFree,
- CryptoServiceBigNumSetUint,
- CryptoServiceBigNumAddMod,
- /// EC
- CryptoServiceEcGroupInit,
- CryptoServiceEcGroupGetCurve,
- CryptoServiceEcGroupGetOrder,
- CryptoServiceEcGroupFree,
- CryptoServiceEcPointInit,
- CryptoServiceEcPointDeInit,
- CryptoServiceEcPointGetAffineCoordinates,
- CryptoServiceEcPointSetAffineCoordinates,
- CryptoServiceEcPointAdd,
- CryptoServiceEcPointMul,
- CryptoServiceEcPointInvert,
- CryptoServiceEcPointIsOnCurve,
- CryptoServiceEcPointIsAtInfinity,
- CryptoServiceEcPointEqual,
- CryptoServiceEcPointSetCompressedCoordinates,
- CryptoServiceEcNewByNid,
- CryptoServiceEcFree,
- CryptoServiceEcGenerateKey,
- CryptoServiceEcGetPubKey,
- CryptoServiceEcDhComputeKey,
- /// TLS (continued)
- CryptoServiceTlsShutdown,
- /// TLS Set (continued)
- CryptoServiceTlsSetHostPrivateKeyEx,
- CryptoServiceTlsSetSignatureAlgoList,
- CryptoServiceTlsSetEcCurve,
- /// TLS Get (continued)
- CryptoServiceTlsGetExportKey,
- /// Ec (Continued)
- CryptoServiceEcGetPublicKeyFromX509,
- CryptoServiceEcGetPrivateKeyFromPem,
- CryptoServiceEcDsaSign,
- CryptoServiceEcDsaVerify,
- /// X509 (Continued)
- CryptoServiceX509GetVersion,
- CryptoServiceX509GetSerialNumber,
- CryptoServiceX509GetIssuerName,
- CryptoServiceX509GetSignatureAlgorithm,
- CryptoServiceX509GetExtensionData,
- CryptoServiceX509GetExtendedKeyUsage,
- CryptoServiceX509GetValidity,
- CryptoServiceX509FormatDateTime,
- CryptoServiceX509CompareDateTime,
- CryptoServiceX509GetKeyUsage,
- CryptoServiceX509VerifyCertChain,
- CryptoServiceX509GetCertFromCertChain,
- CryptoServiceAsn1GetTag,
- CryptoServiceX509GetExtendedBasicConstraints
- };
|