wincrypt.h 256 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976
  1. /**
  2. * This file has no copyright assigned and is placed in the Public Domain.
  3. * This file is part of the mingw-w64 runtime package.
  4. * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  5. */
  6. #ifndef __WINCRYPT_H__
  7. #define __WINCRYPT_H__
  8. #include <_mingw.h>
  9. #include <_mingw_unicode.h>
  10. #include <guiddef.h>
  11. #include <winapifamily.h>
  12. #ifdef __cplusplus
  13. extern "C" {
  14. #endif
  15. #ifndef _HRESULT_DEFINED
  16. #define _HRESULT_DEFINED
  17. typedef LONG HRESULT;
  18. #endif
  19. #ifndef DECLSPEC_IMPORT
  20. #ifndef __WIDL__
  21. #define DECLSPEC_IMPORT __declspec(dllimport)
  22. #else
  23. #define DECLSPEC_IMPORT
  24. #endif
  25. #endif
  26. #ifndef WINIMPM
  27. #define WINIMPM DECLSPEC_IMPORT
  28. #endif
  29. #include <apisetcconv.h>
  30. #ifndef WINAPI
  31. #if defined(_ARM_)
  32. #define WINAPI
  33. #else
  34. #define WINAPI __stdcall
  35. #endif
  36. #endif
  37. #ifndef CALLBACK
  38. #if defined(_ARM_)
  39. #define CALLBACK
  40. #else
  41. #define CALLBACK __stdcall
  42. #endif
  43. #endif
  44. #ifndef CONST
  45. #define CONST const
  46. #endif
  47. #ifndef _NO_W32_PSEUDO_MODIFIERS
  48. #ifndef IN
  49. #define IN
  50. #endif
  51. #ifndef OUT
  52. #define OUT
  53. #endif
  54. #ifndef OPTIONAL
  55. #define OPTIONAL
  56. #endif
  57. #endif
  58. #ifndef WINCRYPT32API
  59. #define WINCRYPT32API WINIMPM
  60. #endif
  61. #ifndef WINCRYPT32STRINGAPI
  62. #define WINCRYPT32STRINGAPI WINIMPM
  63. #endif
  64. #define GET_ALG_CLASS(x) (x & (7 << 13))
  65. #define GET_ALG_TYPE(x) (x & (15 << 9))
  66. #define GET_ALG_SID(x) (x & 511)
  67. #define ALG_CLASS_ANY (0)
  68. #define ALG_CLASS_SIGNATURE (1 << 13)
  69. #define ALG_CLASS_MSG_ENCRYPT (2 << 13)
  70. #define ALG_CLASS_DATA_ENCRYPT (3 << 13)
  71. #define ALG_CLASS_HASH (4 << 13)
  72. #define ALG_CLASS_KEY_EXCHANGE (5 << 13)
  73. #define ALG_CLASS_ALL (7 << 13)
  74. #define ALG_TYPE_ANY (0)
  75. #define ALG_TYPE_DSS (1 << 9)
  76. #define ALG_TYPE_RSA (2 << 9)
  77. #define ALG_TYPE_BLOCK (3 << 9)
  78. #define ALG_TYPE_STREAM (4 << 9)
  79. #define ALG_TYPE_DH (5 << 9)
  80. #define ALG_TYPE_SECURECHANNEL (6 << 9)
  81. #if NTDDI_VERSION >= NTDDI_VISTA
  82. #define ALG_TYPE_ECDH (7 << 9)
  83. #endif
  84. #if NTDDI_VERSION >= NTDDI_WIN10_RS1
  85. #define ALG_TYPE_THIRDPARTY (8 << 9)
  86. #endif
  87. #define ALG_SID_ANY (0)
  88. #if NTDDI_VERSION >= NTDDI_WIN10_RS1
  89. #define ALG_SID_THIRDPARTY_ANY (0)
  90. #endif
  91. #define ALG_SID_RSA_ANY 0
  92. #define ALG_SID_RSA_PKCS 1
  93. #define ALG_SID_RSA_MSATWORK 2
  94. #define ALG_SID_RSA_ENTRUST 3
  95. #define ALG_SID_RSA_PGP 4
  96. #define ALG_SID_DSS_ANY 0
  97. #define ALG_SID_DSS_PKCS 1
  98. #define ALG_SID_DSS_DMS 2
  99. #if NTDDI_VERSION >= NTDDI_VISTA
  100. #define ALG_SID_ECDSA 3
  101. #endif
  102. #define ALG_SID_DES 1
  103. #define ALG_SID_3DES 3
  104. #define ALG_SID_DESX 4
  105. #define ALG_SID_IDEA 5
  106. #define ALG_SID_CAST 6
  107. #define ALG_SID_SAFERSK64 7
  108. #define ALG_SID_SAFERSK128 8
  109. #define ALG_SID_3DES_112 9
  110. #define ALG_SID_SKIPJACK 10
  111. #define ALG_SID_TEK 11
  112. #define ALG_SID_CYLINK_MEK 12
  113. #define ALG_SID_RC5 13
  114. #if NTDDI_VERSION >= NTDDI_WINXP
  115. #define ALG_SID_AES_128 14
  116. #define ALG_SID_AES_192 15
  117. #define ALG_SID_AES_256 16
  118. #define ALG_SID_AES 17
  119. #endif
  120. #define CRYPT_MODE_CBCI 6
  121. #define CRYPT_MODE_CFBP 7
  122. #define CRYPT_MODE_OFBP 8
  123. #define CRYPT_MODE_CBCOFM 9
  124. #define CRYPT_MODE_CBCOFMI 10
  125. #define ALG_SID_RC2 2
  126. #define ALG_SID_RC4 1
  127. #define ALG_SID_SEAL 2
  128. #define ALG_SID_DH_SANDF 1
  129. #define ALG_SID_DH_EPHEM 2
  130. #define ALG_SID_AGREED_KEY_ANY 3
  131. #define ALG_SID_KEA 4
  132. #if NTDDI_VERSION >= NTDDI_VISTA
  133. #define ALG_SID_ECDH 5
  134. #define ALG_SID_ECDH_EPHEM 6
  135. #endif
  136. #define ALG_SID_MD2 1
  137. #define ALG_SID_MD4 2
  138. #define ALG_SID_MD5 3
  139. #define ALG_SID_SHA 4
  140. #define ALG_SID_SHA1 4
  141. #define ALG_SID_MAC 5
  142. #define ALG_SID_RIPEMD 6
  143. #define ALG_SID_RIPEMD160 7
  144. #define ALG_SID_SSL3SHAMD5 8
  145. #define ALG_SID_HMAC 9
  146. #define ALG_SID_TLS1PRF 10
  147. #if NTDDI_VERSION >= NTDDI_WINXP
  148. #define ALG_SID_HASH_REPLACE_OWF 11
  149. #endif
  150. #if NTDDI_VERSION > NTDDI_WINXPSP2
  151. #define ALG_SID_SHA_256 12
  152. #define ALG_SID_SHA_384 13
  153. #define ALG_SID_SHA_512 14
  154. #endif
  155. #define ALG_SID_SSL3_MASTER 1
  156. #define ALG_SID_SCHANNEL_MASTER_HASH 2
  157. #define ALG_SID_SCHANNEL_MAC_KEY 3
  158. #define ALG_SID_PCT1_MASTER 4
  159. #define ALG_SID_SSL2_MASTER 5
  160. #define ALG_SID_TLS1_MASTER 6
  161. #define ALG_SID_SCHANNEL_ENC_KEY 7
  162. #if NTDDI_VERSION >= NTDDI_VISTA
  163. #define ALG_SID_ECMQV 1
  164. #endif
  165. #define ALG_SID_EXAMPLE 80
  166. #ifndef ALGIDDEF
  167. #define ALGIDDEF
  168. typedef unsigned int ALG_ID;
  169. #endif
  170. #define CALG_MD2 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD2)
  171. #define CALG_MD4 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD4)
  172. #define CALG_MD5 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD5)
  173. #define CALG_SHA (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA)
  174. #define CALG_SHA1 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA1)
  175. #define CALG_MAC (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MAC)
  176. #define CALG_RSA_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_RSA | ALG_SID_RSA_ANY)
  177. #define CALG_DSS_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_DSS_ANY)
  178. #if NTDDI_VERSION >= NTDDI_WINXP
  179. #define CALG_NO_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_ANY | ALG_SID_ANY)
  180. #endif
  181. #define CALG_RSA_KEYX (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_RSA|ALG_SID_RSA_ANY)
  182. #define CALG_DES (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_DES)
  183. #define CALG_3DES_112 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_3DES_112)
  184. #define CALG_3DES (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_3DES)
  185. #define CALG_DESX (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_DESX)
  186. #define CALG_RC2 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_RC2)
  187. #define CALG_RC4 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_STREAM|ALG_SID_RC4)
  188. #define CALG_SEAL (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_STREAM|ALG_SID_SEAL)
  189. #define CALG_DH_SF (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_DH|ALG_SID_DH_SANDF)
  190. #define CALG_DH_EPHEM (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_DH|ALG_SID_DH_EPHEM)
  191. #define CALG_AGREEDKEY_ANY (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_DH|ALG_SID_AGREED_KEY_ANY)
  192. #define CALG_KEA_KEYX (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_DH|ALG_SID_KEA)
  193. #define CALG_HUGHES_MD5 (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_ANY|ALG_SID_MD5)
  194. #define CALG_SKIPJACK (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_SKIPJACK)
  195. #define CALG_TEK (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_TEK)
  196. #define CALG_CYLINK_MEK (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_CYLINK_MEK)
  197. #define CALG_SSL3_SHAMD5 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SSL3SHAMD5)
  198. #define CALG_SSL3_MASTER (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_SSL3_MASTER)
  199. #define CALG_SCHANNEL_MASTER_HASH (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_SCHANNEL_MASTER_HASH)
  200. #define CALG_SCHANNEL_MAC_KEY (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_SCHANNEL_MAC_KEY)
  201. #define CALG_SCHANNEL_ENC_KEY (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_SCHANNEL_ENC_KEY)
  202. #define CALG_PCT1_MASTER (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_PCT1_MASTER)
  203. #define CALG_SSL2_MASTER (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_SSL2_MASTER)
  204. #define CALG_TLS1_MASTER (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_TLS1_MASTER)
  205. #define CALG_RC5 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_RC5)
  206. #define CALG_HMAC (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HMAC)
  207. #define CALG_TLS1PRF (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_TLS1PRF)
  208. #if NTDDI_VERSION >= NTDDI_WINXP
  209. #define CALG_HASH_REPLACE_OWF (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HASH_REPLACE_OWF)
  210. #define CALG_AES_128 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_AES_128)
  211. #define CALG_AES_192 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_AES_192)
  212. #define CALG_AES_256 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_AES_256)
  213. #define CALG_AES (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_AES)
  214. #endif
  215. #if NTDDI_VERSION > NTDDI_WINXPSP2
  216. #define CALG_SHA_256 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_256)
  217. #define CALG_SHA_384 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_384)
  218. #define CALG_SHA_512 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_512)
  219. #endif
  220. #if NTDDI_VERSION >= NTDDI_VISTA
  221. #define CALG_ECDH (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_ECDH)
  222. #define CALG_ECDH_EPHEM (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ECDH | ALG_SID_ECDH_EPHEM)
  223. #define CALG_ECMQV (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ANY | ALG_SID_ECMQV)
  224. #define CALG_ECDSA (ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_ECDSA)
  225. #define CALG_NULLCIPHER (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_ANY | 0)
  226. #endif
  227. #if NTDDI_VERSION >= NTDDI_WIN10_RS1
  228. #define CALG_THIRDPARTY_KEY_EXCHANGE (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_THIRDPARTY | ALG_SID_THIRDPARTY_ANY)
  229. #define CALG_THIRDPARTY_SIGNATURE (ALG_CLASS_SIGNATURE | ALG_TYPE_THIRDPARTY | ALG_SID_THIRDPARTY_ANY)
  230. #define CALG_THIRDPARTY_CIPHER (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_THIRDPARTY | ALG_SID_THIRDPARTY_ANY)
  231. #define CALG_THIRDPARTY_HASH (ALG_CLASS_HASH | ALG_TYPE_THIRDPARTY | ALG_SID_THIRDPARTY_ANY)
  232. #endif
  233. #if NTDDI_VERSION < NTDDI_WINXP
  234. #define SIGNATURE_RESOURCE_NUMBER 0x29A
  235. typedef struct _VTableProvStruc {
  236. DWORD Version;
  237. FARPROC FuncVerifyImage;
  238. FARPROC FuncReturnhWnd;
  239. DWORD dwProvType;
  240. BYTE *pbContextInfo;
  241. DWORD cbContextInfo;
  242. LPSTR pszProvName;
  243. } VTableProvStruc, *PVTableProvStruc;
  244. #endif
  245. /* In ncrypt.h too */
  246. #ifndef HCRYPTPROV_DEFINED
  247. #define HCRYPTPROV_DEFINED
  248. typedef ULONG_PTR HCRYPTHASH;
  249. typedef ULONG_PTR HCRYPTKEY;
  250. typedef ULONG_PTR HCRYPTPROV;
  251. #endif
  252. #define CRYPT_VERIFYCONTEXT 0xf0000000
  253. #define CRYPT_NEWKEYSET 0x8
  254. #define CRYPT_DELETEKEYSET 0x10
  255. #define CRYPT_MACHINE_KEYSET 0x20
  256. #define CRYPT_SILENT 0x40
  257. #if NTDDI_VERSION >= NTDDI_VISTA
  258. #define CRYPT_DEFAULT_CONTAINER_OPTIONAL 0x80
  259. #endif
  260. #define CRYPT_EXPORTABLE 0x1
  261. #define CRYPT_USER_PROTECTED 0x2
  262. #define CRYPT_CREATE_SALT 0x4
  263. #define CRYPT_UPDATE_KEY 0x8
  264. #define CRYPT_NO_SALT 0x10
  265. #define CRYPT_PREGEN 0x40
  266. #define CRYPT_RECIPIENT 0x10
  267. #define CRYPT_INITIATOR 0x40
  268. #define CRYPT_ONLINE 0x80
  269. #define CRYPT_SF 0x100
  270. #define CRYPT_CREATE_IV 0x200
  271. #define CRYPT_KEK 0x400
  272. #define CRYPT_DATA_KEY 0x800
  273. #define CRYPT_VOLATILE 0x1000
  274. #define CRYPT_SGCKEY 0x2000
  275. #if NTDDI_VERSION >= NTDDI_WINXP
  276. #define CRYPT_ARCHIVABLE 0x4000
  277. #endif
  278. #if NTDDI_VERSION >= NTDDI_VISTA
  279. #define CRYPT_FORCE_KEY_PROTECTION_HIGH 0x8000
  280. #endif
  281. #define CRYPT_USER_PROTECTED_STRONG 0x100000
  282. #define RSA1024BIT_KEY 0x4000000
  283. #define CRYPT_SERVER 0x400
  284. #define KEY_LENGTH_MASK 0xffff0000
  285. #define CRYPT_Y_ONLY 0x1
  286. #define CRYPT_SSL2_FALLBACK 0x2
  287. #define CRYPT_DESTROYKEY 0x4
  288. #if NTDDI_VERSION >= NTDDI_WS03
  289. #define CRYPT_DECRYPT_RSA_NO_PADDING_CHECK 0x20
  290. #endif
  291. #define CRYPT_OAEP 0x40
  292. #define CRYPT_BLOB_VER3 0x80
  293. #if NTDDI_VERSION >= NTDDI_WINXP
  294. #define CRYPT_IPSEC_HMAC_KEY 0x100
  295. #endif
  296. #define CRYPT_SECRETDIGEST 0x1
  297. #if NTDDI_VERSION >= NTDDI_WINXP
  298. #define CRYPT_OWF_REPL_LM_HASH 0x1
  299. #endif
  300. #define CRYPT_LITTLE_ENDIAN 0x1
  301. #define CRYPT_NOHASHOID 0x1
  302. #define CRYPT_TYPE2_FORMAT 0x2
  303. #define CRYPT_X931_FORMAT 0x4
  304. #define CRYPT_MACHINE_DEFAULT 0x1
  305. #define CRYPT_USER_DEFAULT 0x2
  306. #define CRYPT_DELETE_DEFAULT 0x4
  307. #define SIMPLEBLOB 0x1
  308. #define PUBLICKEYBLOB 0x6
  309. #define PRIVATEKEYBLOB 0x7
  310. #define PLAINTEXTKEYBLOB 0x8
  311. #define OPAQUEKEYBLOB 0x9
  312. #define PUBLICKEYBLOBEX 0xa
  313. #define SYMMETRICWRAPKEYBLOB 0xb
  314. #if NTDDI_VERSION >= NTDDI_WS03
  315. #define KEYSTATEBLOB 0xc
  316. #endif
  317. #define AT_KEYEXCHANGE 1
  318. #define AT_SIGNATURE 2
  319. #define CRYPT_USERDATA 1
  320. #define KP_IV 1
  321. #define KP_SALT 2
  322. #define KP_PADDING 3
  323. #define KP_MODE 4
  324. #define KP_MODE_BITS 5
  325. #define KP_PERMISSIONS 6
  326. #define KP_ALGID 7
  327. #define KP_BLOCKLEN 8
  328. #define KP_KEYLEN 9
  329. #define KP_SALT_EX 10
  330. #define KP_P 11
  331. #define KP_G 12
  332. #define KP_Q 13
  333. #define KP_X 14
  334. #define KP_Y 15
  335. #define KP_RA 16
  336. #define KP_RB 17
  337. #define KP_INFO 18
  338. #define KP_EFFECTIVE_KEYLEN 19
  339. #define KP_SCHANNEL_ALG 20
  340. #define KP_CLIENT_RANDOM 21
  341. #define KP_SERVER_RANDOM 22
  342. #define KP_RP 23
  343. #define KP_PRECOMP_MD5 24
  344. #define KP_PRECOMP_SHA 25
  345. #define KP_CERTIFICATE 26
  346. #define KP_CLEAR_KEY 27
  347. #define KP_PUB_EX_LEN 28
  348. #define KP_PUB_EX_VAL 29
  349. #define KP_KEYVAL 30
  350. #define KP_ADMIN_PIN 31
  351. #define KP_KEYEXCHANGE_PIN 32
  352. #define KP_SIGNATURE_PIN 33
  353. #define KP_PREHASH 34
  354. #if NTDDI_VERSION >= NTDDI_WS03
  355. #define KP_ROUNDS 35
  356. #endif
  357. #define KP_OAEP_PARAMS 36
  358. #define KP_CMS_KEY_INFO 37
  359. #define KP_CMS_DH_KEY_INFO 38
  360. #define KP_PUB_PARAMS 39
  361. #define KP_VERIFY_PARAMS 40
  362. #define KP_HIGHEST_VERSION 41
  363. #if NTDDI_VERSION >= NTDDI_WS03
  364. #define KP_GET_USE_COUNT 42
  365. #endif
  366. #define KP_PIN_ID 43
  367. #define KP_PIN_INFO 44
  368. #define PKCS5_PADDING 1
  369. #define RANDOM_PADDING 2
  370. #define ZERO_PADDING 3
  371. #define CRYPT_MODE_CBC 1
  372. #define CRYPT_MODE_ECB 2
  373. #define CRYPT_MODE_OFB 3
  374. #define CRYPT_MODE_CFB 4
  375. #define CRYPT_MODE_CTS 5
  376. #define CRYPT_ENCRYPT 0x1
  377. #define CRYPT_DECRYPT 0x2
  378. #define CRYPT_EXPORT 0x4
  379. #define CRYPT_READ 0x8
  380. #define CRYPT_WRITE 0x10
  381. #define CRYPT_MAC 0x20
  382. #define CRYPT_EXPORT_KEY 0x40
  383. #define CRYPT_IMPORT_KEY 0x80
  384. #if NTDDI_VERSION >= NTDDI_WINXP
  385. #define CRYPT_ARCHIVE 0x100
  386. #endif
  387. #define HP_ALGID 0x1
  388. #define HP_HASHVAL 0x2
  389. #define HP_HASHSIZE 0x4
  390. #define HP_HMAC_INFO 0x5
  391. #define HP_TLS1PRF_LABEL 0x6
  392. #define HP_TLS1PRF_SEED 0x7
  393. #define CRYPT_FAILED FALSE
  394. #define CRYPT_SUCCEED TRUE
  395. #define RCRYPT_SUCCEEDED(RT) ((RT) == CRYPT_SUCCEED)
  396. #define RCRYPT_FAILED(RT) ((RT) == CRYPT_FAILED)
  397. #define PP_ENUMALGS 1
  398. #define PP_ENUMCONTAINERS 2
  399. #define PP_IMPTYPE 3
  400. #define PP_NAME 4
  401. #define PP_VERSION 5
  402. #define PP_CONTAINER 6
  403. #define PP_CHANGE_PASSWORD 7
  404. #define PP_KEYSET_SEC_DESCR 8
  405. #define PP_CERTCHAIN 9
  406. #define PP_KEY_TYPE_SUBTYPE 10
  407. #define PP_PROVTYPE 16
  408. #define PP_KEYSTORAGE 17
  409. #define PP_APPLI_CERT 18
  410. #define PP_SYM_KEYSIZE 19
  411. #define PP_SESSION_KEYSIZE 20
  412. #define PP_UI_PROMPT 21
  413. #define PP_ENUMALGS_EX 22
  414. #define PP_ENUMMANDROOTS 25
  415. #define PP_ENUMELECTROOTS 26
  416. #define PP_KEYSET_TYPE 27
  417. #define PP_ADMIN_PIN 31
  418. #define PP_KEYEXCHANGE_PIN 32
  419. #define PP_SIGNATURE_PIN 33
  420. #define PP_SIG_KEYSIZE_INC 34
  421. #define PP_KEYX_KEYSIZE_INC 35
  422. #define PP_UNIQUE_CONTAINER 36
  423. #define PP_SGC_INFO 37
  424. #define PP_USE_HARDWARE_RNG 38
  425. #define PP_KEYSPEC 39
  426. #define PP_ENUMEX_SIGNING_PROT 40
  427. #if NTDDI_VERSION >= NTDDI_WS03
  428. #define PP_CRYPT_COUNT_KEY_USE 41
  429. #endif
  430. #if NTDDI_VERSION >= NTDDI_VISTA
  431. #define PP_USER_CERTSTORE 42
  432. #define PP_SMARTCARD_READER 43
  433. #define PP_SMARTCARD_GUID 45
  434. #define PP_ROOT_CERTSTORE 46
  435. #endif
  436. #if NTDDI_VERSION >= NTDDI_WIN8
  437. #define PP_SMARTCARD_READER_ICON 47
  438. #endif
  439. #define CRYPT_FIRST 1
  440. #define CRYPT_NEXT 2
  441. #define CRYPT_SGC_ENUM 4
  442. #define CRYPT_IMPL_HARDWARE 1
  443. #define CRYPT_IMPL_SOFTWARE 2
  444. #define CRYPT_IMPL_MIXED 3
  445. #define CRYPT_IMPL_UNKNOWN 4
  446. #define CRYPT_IMPL_REMOVABLE 8
  447. #define CRYPT_SEC_DESCR 0x1
  448. #define CRYPT_PSTORE 0x2
  449. #define CRYPT_UI_PROMPT 0x4
  450. #define CRYPT_FLAG_PCT1 0x1
  451. #define CRYPT_FLAG_SSL2 0x2
  452. #define CRYPT_FLAG_SSL3 0x4
  453. #define CRYPT_FLAG_TLS1 0x8
  454. #define CRYPT_FLAG_IPSEC 0x10
  455. #define CRYPT_FLAG_SIGNING 0x20
  456. #define CRYPT_SGC 0x1
  457. #define CRYPT_FASTSGC 0x2
  458. #define PP_CLIENT_HWND 1
  459. #define PP_CONTEXT_INFO 11
  460. #define PP_KEYEXCHANGE_KEYSIZE 12
  461. #define PP_SIGNATURE_KEYSIZE 13
  462. #define PP_KEYEXCHANGE_ALG 14
  463. #define PP_SIGNATURE_ALG 15
  464. #define PP_DELETEKEY 24
  465. #if NTDDI_VERSION >= NTDDI_VISTA
  466. #define PP_PIN_PROMPT_STRING 44
  467. #define PP_SECURE_KEYEXCHANGE_PIN 47
  468. #define PP_SECURE_SIGNATURE_PIN 48
  469. #endif
  470. #if NTDDI_VERSION >= NTDDI_WIN10_RS5
  471. #define PP_DISMISS_PIN_UI_SEC 49
  472. #endif
  473. #define PROV_RSA_FULL 1
  474. #define PROV_RSA_SIG 2
  475. #define PROV_DSS 3
  476. #define PROV_FORTEZZA 4
  477. #define PROV_MS_EXCHANGE 5
  478. #define PROV_SSL 6
  479. #define PROV_STT_MER 7
  480. #define PROV_STT_ACQ 8
  481. #define PROV_STT_BRND 9
  482. #define PROV_STT_ROOT 10
  483. #define PROV_STT_ISS 11
  484. #define PROV_RSA_SCHANNEL 12
  485. #define PROV_DSS_DH 13
  486. #define PROV_EC_ECDSA_SIG 14
  487. #define PROV_EC_ECNRA_SIG 15
  488. #define PROV_EC_ECDSA_FULL 16
  489. #define PROV_EC_ECNRA_FULL 17
  490. #define PROV_DH_SCHANNEL 18
  491. #define PROV_SPYRUS_LYNKS 20
  492. #define PROV_RNG 21
  493. #define PROV_INTEL_SEC 22
  494. #if NTDDI_VERSION >= NTDDI_WINXP
  495. #define PROV_REPLACE_OWF 23
  496. #define PROV_RSA_AES 24
  497. #endif
  498. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
  499. #define MS_DEF_PROV __MINGW_NAME_UAW(MS_DEF_PROV)
  500. #define MS_ENHANCED_PROV __MINGW_NAME_UAW(MS_ENHANCED_PROV)
  501. #define MS_STRONG_PROV __MINGW_NAME_UAW(MS_STRONG_PROV)
  502. #define MS_DEF_RSA_SIG_PROV __MINGW_NAME_UAW(MS_DEF_RSA_SIG_PROV)
  503. #define MS_DEF_RSA_SCHANNEL_PROV __MINGW_NAME_UAW(MS_DEF_RSA_SCHANNEL_PROV)
  504. #define MS_DEF_DSS_PROV __MINGW_NAME_UAW(MS_DEF_DSS_PROV)
  505. #define MS_DEF_DSS_DH_PROV __MINGW_NAME_UAW(MS_DEF_DSS_DH_PROV)
  506. #define MS_ENH_DSS_DH_PROV __MINGW_NAME_UAW(MS_ENH_DSS_DH_PROV)
  507. #define MS_DEF_DH_SCHANNEL_PROV __MINGW_NAME_UAW(MS_DEF_DH_SCHANNEL_PROV)
  508. #define MS_SCARD_PROV __MINGW_NAME_UAW(MS_SCARD_PROV)
  509. #if NTDDI_VERSION >= NTDDI_WINXP
  510. #define MS_ENH_RSA_AES_PROV_XP __MINGW_NAME_UAW(MS_ENH_RSA_AES_PROV_XP)
  511. #define MS_ENH_RSA_AES_PROV __MINGW_NAME_UAW(MS_ENH_RSA_AES_PROV)
  512. #endif
  513. #define MS_DEF_PROV_A "Microsoft Base Cryptographic Provider v1.0"
  514. #define MS_DEF_PROV_W L"Microsoft Base Cryptographic Provider v1.0"
  515. #define MS_ENHANCED_PROV_A "Microsoft Enhanced Cryptographic Provider v1.0"
  516. #define MS_ENHANCED_PROV_W L"Microsoft Enhanced Cryptographic Provider v1.0"
  517. #define MS_STRONG_PROV_A "Microsoft Strong Cryptographic Provider"
  518. #define MS_STRONG_PROV_W L"Microsoft Strong Cryptographic Provider"
  519. #define MS_DEF_RSA_SIG_PROV_A "Microsoft RSA Signature Cryptographic Provider"
  520. #define MS_DEF_RSA_SIG_PROV_W L"Microsoft RSA Signature Cryptographic Provider"
  521. #define MS_DEF_RSA_SCHANNEL_PROV_A "Microsoft RSA SChannel Cryptographic Provider"
  522. #define MS_DEF_RSA_SCHANNEL_PROV_W L"Microsoft RSA SChannel Cryptographic Provider"
  523. #define MS_DEF_DSS_PROV_A "Microsoft Base DSS Cryptographic Provider"
  524. #define MS_DEF_DSS_PROV_W L"Microsoft Base DSS Cryptographic Provider"
  525. #define MS_DEF_DSS_DH_PROV_A "Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
  526. #define MS_DEF_DSS_DH_PROV_W L"Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
  527. #define MS_ENH_DSS_DH_PROV_A "Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
  528. #define MS_ENH_DSS_DH_PROV_W L"Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
  529. #define MS_DEF_DH_SCHANNEL_PROV_A "Microsoft DH SChannel Cryptographic Provider"
  530. #define MS_DEF_DH_SCHANNEL_PROV_W L"Microsoft DH SChannel Cryptographic Provider"
  531. #define MS_SCARD_PROV_A "Microsoft Base Smart Card Crypto Provider"
  532. #define MS_SCARD_PROV_W L"Microsoft Base Smart Card Crypto Provider"
  533. #if NTDDI_VERSION >= NTDDI_WINXP
  534. #define MS_ENH_RSA_AES_PROV_A "Microsoft Enhanced RSA and AES Cryptographic Provider"
  535. #define MS_ENH_RSA_AES_PROV_W L"Microsoft Enhanced RSA and AES Cryptographic Provider"
  536. #define MS_ENH_RSA_AES_PROV_XP_A "Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)"
  537. #define MS_ENH_RSA_AES_PROV_XP_W L"Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)"
  538. #endif
  539. #define MAXUIDLEN 64
  540. #define EXPO_OFFLOAD_REG_VALUE "ExpoOffload"
  541. #define EXPO_OFFLOAD_FUNC_NAME "OffloadModExpo"
  542. #ifndef szKEY_CRYPTOAPI_PRIVATE_KEY_OPTIONS
  543. #define szKEY_CRYPTOAPI_PRIVATE_KEY_OPTIONS "Software\\Policies\\Microsoft\\Cryptography"
  544. #endif
  545. #define szKEY_CACHE_ENABLED "CachePrivateKeys"
  546. #define szKEY_CACHE_SECONDS "PrivateKeyLifetimeSeconds"
  547. #if NTDDI_VERSION >= NTDDI_WINXP
  548. #define szPRIV_KEY_CACHE_MAX_ITEMS "PrivKeyCacheMaxItems"
  549. #define cPRIV_KEY_CACHE_MAX_ITEMS_DEFAULT 20
  550. #define szPRIV_KEY_CACHE_PURGE_INTERVAL_SECONDS "PrivKeyCachePurgeIntervalSeconds"
  551. #define cPRIV_KEY_CACHE_PURGE_INTERVAL_SECONDS_DEFAULT 86400
  552. #endif
  553. #define CUR_BLOB_VERSION 2
  554. typedef struct _CMS_KEY_INFO {
  555. DWORD dwVersion;
  556. ALG_ID Algid;
  557. BYTE *pbOID;
  558. DWORD cbOID;
  559. } CMS_KEY_INFO,*PCMS_KEY_INFO;
  560. typedef struct _HMAC_Info {
  561. ALG_ID HashAlgid;
  562. BYTE *pbInnerString;
  563. DWORD cbInnerString;
  564. BYTE *pbOuterString;
  565. DWORD cbOuterString;
  566. } HMAC_INFO,*PHMAC_INFO;
  567. typedef struct _SCHANNEL_ALG {
  568. DWORD dwUse;
  569. ALG_ID Algid;
  570. DWORD cBits;
  571. DWORD dwFlags;
  572. DWORD dwReserved;
  573. } SCHANNEL_ALG,*PSCHANNEL_ALG;
  574. #define SCHANNEL_MAC_KEY 0x0
  575. #define SCHANNEL_ENC_KEY 0x1
  576. #define INTERNATIONAL_USAGE 0x1
  577. typedef struct _PROV_ENUMALGS {
  578. ALG_ID aiAlgid;
  579. DWORD dwBitLen;
  580. DWORD dwNameLen;
  581. CHAR szName[20];
  582. } PROV_ENUMALGS;
  583. typedef struct _PROV_ENUMALGS_EX {
  584. ALG_ID aiAlgid;
  585. DWORD dwDefaultLen;
  586. DWORD dwMinLen;
  587. DWORD dwMaxLen;
  588. DWORD dwProtocols;
  589. DWORD dwNameLen;
  590. CHAR szName[20];
  591. DWORD dwLongNameLen;
  592. CHAR szLongName[40];
  593. } PROV_ENUMALGS_EX;
  594. typedef struct _PUBLICKEYSTRUC {
  595. BYTE bType;
  596. BYTE bVersion;
  597. WORD reserved;
  598. ALG_ID aiKeyAlg;
  599. } BLOBHEADER,PUBLICKEYSTRUC;
  600. typedef struct _RSAPUBKEY {
  601. DWORD magic;
  602. DWORD bitlen;
  603. DWORD pubexp;
  604. } RSAPUBKEY;
  605. typedef struct _PUBKEY {
  606. DWORD magic;
  607. DWORD bitlen;
  608. } DHPUBKEY,DSSPUBKEY,KEAPUBKEY,TEKPUBKEY;
  609. typedef struct _DSSSEED {
  610. DWORD counter;
  611. BYTE seed[20];
  612. } DSSSEED;
  613. typedef struct _PUBKEYVER3 {
  614. DWORD magic;
  615. DWORD bitlenP;
  616. DWORD bitlenQ;
  617. DWORD bitlenJ;
  618. DSSSEED DSSSeed;
  619. } DHPUBKEY_VER3, DSSPUBKEY_VER3;
  620. typedef struct _PRIVKEYVER3 {
  621. DWORD magic;
  622. DWORD bitlenP;
  623. DWORD bitlenQ;
  624. DWORD bitlenJ;
  625. DWORD bitlenX;
  626. DSSSEED DSSSeed;
  627. } DHPRIVKEY_VER3,DSSPRIVKEY_VER3;
  628. typedef struct _KEY_TYPE_SUBTYPE {
  629. DWORD dwKeySpec;
  630. GUID Type;
  631. GUID Subtype;
  632. } KEY_TYPE_SUBTYPE,*PKEY_TYPE_SUBTYPE;
  633. typedef struct _CERT_FORTEZZA_DATA_PROP {
  634. unsigned char SerialNumber[8];
  635. int CertIndex;
  636. unsigned char CertLabel[36];
  637. } CERT_FORTEZZA_DATA_PROP;
  638. #if NTDDI_VERSION >= NTDDI_WS03
  639. typedef struct _CRYPT_RC4_KEY_STATE {
  640. unsigned char Key[16];
  641. unsigned char SBox[256];
  642. unsigned char i;
  643. unsigned char j;
  644. } CRYPT_RC4_KEY_STATE,*PCRYPT_RC4_KEY_STATE;
  645. typedef struct _CRYPT_DES_KEY_STATE {
  646. unsigned char Key[8];
  647. unsigned char IV[8];
  648. unsigned char Feedback[8];
  649. } CRYPT_DES_KEY_STATE,*PCRYPT_DES_KEY_STATE;
  650. typedef struct _CRYPT_3DES_KEY_STATE {
  651. unsigned char Key[24];
  652. unsigned char IV[8];
  653. unsigned char Feedback[8];
  654. } CRYPT_3DES_KEY_STATE,*PCRYPT_3DES_KEY_STATE;
  655. #endif
  656. #if NTDDI_VERSION >= NTDDI_VISTA
  657. typedef struct _CRYPT_AES_128_KEY_STATE {
  658. unsigned char Key[16];
  659. unsigned char IV[16];
  660. unsigned char EncryptionState[11][16];
  661. unsigned char DecryptionState[11][16];
  662. unsigned char Feedback[16];
  663. } CRYPT_AES_128_KEY_STATE,*PCRYPT_AES_128_KEY_STATE;
  664. typedef struct _CRYPT_AES_256_KEY_STATE {
  665. unsigned char Key[32];
  666. unsigned char IV[16];
  667. unsigned char EncryptionState[15][16];
  668. unsigned char DecryptionState[15][16];
  669. unsigned char Feedback[16];
  670. } CRYPT_AES_256_KEY_STATE,*PCRYPT_AES_256_KEY_STATE;
  671. #endif
  672. #endif
  673. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
  674. #ifndef CRYPTO_BLOBS_DEFINED
  675. #define CRYPTO_BLOBS_DEFINED
  676. typedef struct _CRYPTOAPI_BLOB {
  677. DWORD cbData;
  678. BYTE *pbData;
  679. } CRYPT_INTEGER_BLOB,*PCRYPT_INTEGER_BLOB,CRYPT_UINT_BLOB,*PCRYPT_UINT_BLOB,CRYPT_OBJID_BLOB,*PCRYPT_OBJID_BLOB,CERT_NAME_BLOB,*PCERT_NAME_BLOB,CERT_RDN_VALUE_BLOB,*PCERT_RDN_VALUE_BLOB,CERT_BLOB,*PCERT_BLOB,CRL_BLOB,*PCRL_BLOB,DATA_BLOB,*PDATA_BLOB,CRYPT_DATA_BLOB,*PCRYPT_DATA_BLOB,CRYPT_HASH_BLOB,*PCRYPT_HASH_BLOB,CRYPT_DIGEST_BLOB,*PCRYPT_DIGEST_BLOB,CRYPT_DER_BLOB,*PCRYPT_DER_BLOB,CRYPT_ATTR_BLOB,*PCRYPT_ATTR_BLOB;
  680. #endif
  681. #endif
  682. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) || defined(WINSTORECOMPAT)
  683. WINIMPM WINBOOL WINAPI CryptAcquireContextA (HCRYPTPROV *phProv, LPCSTR szContainer, LPCSTR szProvider, DWORD dwProvType, DWORD dwFlags);
  684. WINIMPM WINBOOL WINAPI CryptAcquireContextW (HCRYPTPROV *phProv, LPCWSTR szContainer, LPCWSTR szProvider, DWORD dwProvType, DWORD dwFlags);
  685. #define CryptAcquireContext __MINGW_NAME_AW(CryptAcquireContext)
  686. WINIMPM WINBOOL WINAPI CryptGenRandom (HCRYPTPROV hProv, DWORD dwLen, BYTE *pbBuffer);
  687. #endif
  688. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
  689. WINIMPM WINBOOL WINAPI CryptReleaseContext (HCRYPTPROV hProv, DWORD dwFlags);
  690. #endif
  691. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
  692. typedef struct _CMS_DH_KEY_INFO {
  693. DWORD dwVersion;
  694. ALG_ID Algid;
  695. LPSTR pszContentEncObjId;
  696. CRYPT_DATA_BLOB PubInfo;
  697. void *pReserved;
  698. } CMS_DH_KEY_INFO,*PCMS_DH_KEY_INFO;
  699. #define CryptSignHash __MINGW_NAME_AW(CryptSignHash)
  700. #define CryptVerifySignature __MINGW_NAME_AW(CryptVerifySignature)
  701. #define CryptSetProvider __MINGW_NAME_AW(CryptSetProvider)
  702. #define CryptSetProviderEx __MINGW_NAME_AW(CryptSetProviderEx)
  703. #define CryptGetDefaultProvider __MINGW_NAME_AW(CryptGetDefaultProvider)
  704. #define CryptEnumProviderTypes __MINGW_NAME_AW(CryptEnumProviderTypes)
  705. #define CryptEnumProviders __MINGW_NAME_AW(CryptEnumProviders)
  706. WINIMPM WINBOOL WINAPI CryptGenKey (HCRYPTPROV hProv, ALG_ID Algid, DWORD dwFlags, HCRYPTKEY *phKey);
  707. WINIMPM WINBOOL WINAPI CryptDeriveKey (HCRYPTPROV hProv, ALG_ID Algid, HCRYPTHASH hBaseData, DWORD dwFlags, HCRYPTKEY *phKey);
  708. WINIMPM WINBOOL WINAPI CryptDestroyKey (HCRYPTKEY hKey);
  709. WINIMPM WINBOOL WINAPI CryptSetKeyParam (HCRYPTKEY hKey, DWORD dwParam, CONST BYTE *pbData, DWORD dwFlags);
  710. WINIMPM WINBOOL WINAPI CryptGetKeyParam (HCRYPTKEY hKey, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags);
  711. WINIMPM WINBOOL WINAPI CryptSetHashParam (HCRYPTHASH hHash, DWORD dwParam, CONST BYTE *pbData, DWORD dwFlags);
  712. WINIMPM WINBOOL WINAPI CryptGetHashParam (HCRYPTHASH hHash, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags);
  713. WINIMPM WINBOOL WINAPI CryptSetProvParam (HCRYPTPROV hProv, DWORD dwParam, CONST BYTE *pbData, DWORD dwFlags);
  714. WINIMPM WINBOOL WINAPI CryptGetProvParam (HCRYPTPROV hProv, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags);
  715. WINIMPM WINBOOL WINAPI CryptGetUserKey (HCRYPTPROV hProv, DWORD dwKeySpec, HCRYPTKEY *phUserKey);
  716. WINIMPM WINBOOL WINAPI CryptExportKey (HCRYPTKEY hKey, HCRYPTKEY hExpKey, DWORD dwBlobType, DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen);
  717. WINIMPM WINBOOL WINAPI CryptImportKey (HCRYPTPROV hProv, CONST BYTE *pbData, DWORD dwDataLen, HCRYPTKEY hPubKey, DWORD dwFlags, HCRYPTKEY *phKey);
  718. WINIMPM WINBOOL WINAPI CryptEncrypt (HCRYPTKEY hKey, HCRYPTHASH hHash, WINBOOL Final, DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen, DWORD dwBufLen);
  719. WINIMPM WINBOOL WINAPI CryptDecrypt (HCRYPTKEY hKey, HCRYPTHASH hHash, WINBOOL Final, DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen);
  720. WINIMPM WINBOOL WINAPI CryptCreateHash (HCRYPTPROV hProv, ALG_ID Algid, HCRYPTKEY hKey, DWORD dwFlags, HCRYPTHASH *phHash);
  721. WINIMPM WINBOOL WINAPI CryptHashData (HCRYPTHASH hHash, CONST BYTE *pbData, DWORD dwDataLen, DWORD dwFlags);
  722. WINIMPM WINBOOL WINAPI CryptHashSessionKey (HCRYPTHASH hHash, HCRYPTKEY hKey, DWORD dwFlags);
  723. WINIMPM WINBOOL WINAPI CryptDestroyHash (HCRYPTHASH hHash);
  724. WINIMPM WINBOOL WINAPI CryptSignHashA (HCRYPTHASH hHash, DWORD dwKeySpec, LPCSTR szDescription, DWORD dwFlags, BYTE *pbSignature, DWORD *pdwSigLen);
  725. WINIMPM WINBOOL WINAPI CryptSignHashW (HCRYPTHASH hHash, DWORD dwKeySpec, LPCWSTR szDescription, DWORD dwFlags, BYTE *pbSignature, DWORD *pdwSigLen);
  726. WINIMPM WINBOOL WINAPI CryptVerifySignatureA (HCRYPTHASH hHash, CONST BYTE *pbSignature, DWORD dwSigLen, HCRYPTKEY hPubKey, LPCSTR szDescription, DWORD dwFlags);
  727. WINIMPM WINBOOL WINAPI CryptVerifySignatureW (HCRYPTHASH hHash, CONST BYTE *pbSignature, DWORD dwSigLen, HCRYPTKEY hPubKey, LPCWSTR szDescription, DWORD dwFlags);
  728. WINIMPM WINBOOL WINAPI CryptSetProviderA (LPCSTR pszProvName, DWORD dwProvType);
  729. WINIMPM WINBOOL WINAPI CryptSetProviderW (LPCWSTR pszProvName, DWORD dwProvType);
  730. WINIMPM WINBOOL WINAPI CryptSetProviderExA (LPCSTR pszProvName, DWORD dwProvType, DWORD *pdwReserved, DWORD dwFlags);
  731. WINIMPM WINBOOL WINAPI CryptSetProviderExW (LPCWSTR pszProvName, DWORD dwProvType, DWORD *pdwReserved, DWORD dwFlags);
  732. WINIMPM WINBOOL WINAPI CryptGetDefaultProviderA (DWORD dwProvType, DWORD *pdwReserved, DWORD dwFlags, LPSTR pszProvName, DWORD *pcbProvName);
  733. WINIMPM WINBOOL WINAPI CryptGetDefaultProviderW (DWORD dwProvType, DWORD *pdwReserved, DWORD dwFlags, LPWSTR pszProvName, DWORD *pcbProvName);
  734. WINIMPM WINBOOL WINAPI CryptEnumProviderTypesA (DWORD dwIndex, DWORD *pdwReserved, DWORD dwFlags, DWORD *pdwProvType, LPSTR szTypeName, DWORD *pcbTypeName);
  735. WINIMPM WINBOOL WINAPI CryptEnumProviderTypesW (DWORD dwIndex, DWORD *pdwReserved, DWORD dwFlags, DWORD *pdwProvType, LPWSTR szTypeName, DWORD *pcbTypeName);
  736. WINIMPM WINBOOL WINAPI CryptEnumProvidersA (DWORD dwIndex, DWORD *pdwReserved, DWORD dwFlags, DWORD *pdwProvType, LPSTR szProvName, DWORD *pcbProvName);
  737. WINIMPM WINBOOL WINAPI CryptEnumProvidersW (DWORD dwIndex, DWORD *pdwReserved, DWORD dwFlags, DWORD *pdwProvType, LPWSTR szProvName, DWORD *pcbProvName);
  738. WINIMPM WINBOOL WINAPI CryptContextAddRef (HCRYPTPROV hProv, DWORD *pdwReserved, DWORD dwFlags);
  739. WINIMPM WINBOOL WINAPI CryptDuplicateKey (HCRYPTKEY hKey, DWORD *pdwReserved, DWORD dwFlags, HCRYPTKEY *phKey);
  740. WINIMPM WINBOOL WINAPI CryptDuplicateHash (HCRYPTHASH hHash, DWORD *pdwReserved, DWORD dwFlags, HCRYPTHASH *phHash);
  741. #if NTDDI_VERSION >= NTDDI_WS03
  742. WINBOOL __cdecl GetEncSChannel (BYTE **pData, DWORD *dwDecSize);
  743. #endif
  744. #endif
  745. #ifndef _DDK_DRIVER_
  746. typedef ULONG_PTR HCRYPTPROV_OR_NCRYPT_KEY_HANDLE;
  747. typedef ULONG_PTR HCRYPTPROV_LEGACY;
  748. #include <bcrypt.h>
  749. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
  750. #include <ncrypt.h>
  751. typedef struct _CRYPT_BIT_BLOB {
  752. DWORD cbData;
  753. BYTE *pbData;
  754. DWORD cUnusedBits;
  755. } CRYPT_BIT_BLOB,*PCRYPT_BIT_BLOB;
  756. typedef struct _CRYPT_ALGORITHM_IDENTIFIER {
  757. LPSTR pszObjId;
  758. CRYPT_OBJID_BLOB Parameters;
  759. } CRYPT_ALGORITHM_IDENTIFIER,*PCRYPT_ALGORITHM_IDENTIFIER;
  760. #endif
  761. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
  762. #define szOID_RSA "1.2.840.113549"
  763. #define szOID_PKCS "1.2.840.113549.1"
  764. #define szOID_RSA_HASH "1.2.840.113549.2"
  765. #define szOID_RSA_ENCRYPT "1.2.840.113549.3"
  766. #define szOID_PKCS_1 "1.2.840.113549.1.1"
  767. #define szOID_PKCS_2 "1.2.840.113549.1.2"
  768. #define szOID_PKCS_3 "1.2.840.113549.1.3"
  769. #define szOID_PKCS_4 "1.2.840.113549.1.4"
  770. #define szOID_PKCS_5 "1.2.840.113549.1.5"
  771. #define szOID_PKCS_6 "1.2.840.113549.1.6"
  772. #define szOID_PKCS_7 "1.2.840.113549.1.7"
  773. #define szOID_PKCS_8 "1.2.840.113549.1.8"
  774. #define szOID_PKCS_9 "1.2.840.113549.1.9"
  775. #define szOID_PKCS_10 "1.2.840.113549.1.10"
  776. #define szOID_PKCS_12 "1.2.840.113549.1.12"
  777. #define szOID_RSA_RSA "1.2.840.113549.1.1.1"
  778. #define szOID_RSA_MD2RSA "1.2.840.113549.1.1.2"
  779. #define szOID_RSA_MD4RSA "1.2.840.113549.1.1.3"
  780. #define szOID_RSA_MD5RSA "1.2.840.113549.1.1.4"
  781. #define szOID_RSA_SHA1RSA "1.2.840.113549.1.1.5"
  782. #define szOID_RSA_SETOAEP_RSA "1.2.840.113549.1.1.6"
  783. #define szOID_RSAES_OAEP "1.2.840.113549.1.1.7"
  784. #define szOID_RSA_MGF1 "1.2.840.113549.1.1.8"
  785. #define szOID_RSA_PSPECIFIED "1.2.840.113549.1.1.9"
  786. #define szOID_RSA_SSA_PSS "1.2.840.113549.1.1.10"
  787. #define szOID_RSA_SHA256RSA "1.2.840.113549.1.1.11"
  788. #define szOID_RSA_SHA384RSA "1.2.840.113549.1.1.12"
  789. #define szOID_RSA_SHA512RSA "1.2.840.113549.1.1.13"
  790. #define szOID_RSA_DH "1.2.840.113549.1.3.1"
  791. #define szOID_RSA_data "1.2.840.113549.1.7.1"
  792. #define szOID_RSA_signedData "1.2.840.113549.1.7.2"
  793. #define szOID_RSA_envelopedData "1.2.840.113549.1.7.3"
  794. #define szOID_RSA_signEnvData "1.2.840.113549.1.7.4"
  795. #define szOID_RSA_digestedData "1.2.840.113549.1.7.5"
  796. #define szOID_RSA_hashedData "1.2.840.113549.1.7.5"
  797. #define szOID_RSA_encryptedData "1.2.840.113549.1.7.6"
  798. #define szOID_RSA_emailAddr "1.2.840.113549.1.9.1"
  799. #define szOID_RSA_unstructName "1.2.840.113549.1.9.2"
  800. #define szOID_RSA_contentType "1.2.840.113549.1.9.3"
  801. #define szOID_RSA_messageDigest "1.2.840.113549.1.9.4"
  802. #define szOID_RSA_signingTime "1.2.840.113549.1.9.5"
  803. #define szOID_RSA_counterSign "1.2.840.113549.1.9.6"
  804. #define szOID_RSA_challengePwd "1.2.840.113549.1.9.7"
  805. #define szOID_RSA_unstructAddr "1.2.840.113549.1.9.8"
  806. #define szOID_RSA_extCertAttrs "1.2.840.113549.1.9.9"
  807. #define szOID_RSA_certExtensions "1.2.840.113549.1.9.14"
  808. #define szOID_RSA_SMIMECapabilities "1.2.840.113549.1.9.15"
  809. #define szOID_RSA_preferSignedData "1.2.840.113549.1.9.15.1"
  810. #define szOID_TIMESTAMP_TOKEN "1.2.840.113549.1.9.16.1.4"
  811. #define szOID_RFC3161_counterSign "1.3.6.1.4.1.311.3.3.1"
  812. #define szOID_RSA_SMIMEalg "1.2.840.113549.1.9.16.3"
  813. #define szOID_RSA_SMIMEalgESDH "1.2.840.113549.1.9.16.3.5"
  814. #define szOID_RSA_SMIMEalgCMS3DESwrap "1.2.840.113549.1.9.16.3.6"
  815. #define szOID_RSA_SMIMEalgCMSRC2wrap "1.2.840.113549.1.9.16.3.7"
  816. #define szOID_RSA_MD2 "1.2.840.113549.2.2"
  817. #define szOID_RSA_MD4 "1.2.840.113549.2.4"
  818. #define szOID_RSA_MD5 "1.2.840.113549.2.5"
  819. #define szOID_RSA_RC2CBC "1.2.840.113549.3.2"
  820. #define szOID_RSA_RC4 "1.2.840.113549.3.4"
  821. #define szOID_RSA_DES_EDE3_CBC "1.2.840.113549.3.7"
  822. #define szOID_RSA_RC5_CBCPad "1.2.840.113549.3.9"
  823. #define szOID_ANSI_X942 "1.2.840.10046"
  824. #define szOID_ANSI_X942_DH "1.2.840.10046.2.1"
  825. #define szOID_X957 "1.2.840.10040"
  826. #define szOID_X957_DSA "1.2.840.10040.4.1"
  827. #define szOID_X957_SHA1DSA "1.2.840.10040.4.3"
  828. #define szOID_ECC_PUBLIC_KEY "1.2.840.10045.2.1"
  829. #define szOID_ECC_CURVE_P256 "1.2.840.10045.3.1.7"
  830. #define szOID_ECC_CURVE_P384 "1.3.132.0.34"
  831. #define szOID_ECC_CURVE_P521 "1.3.132.0.35"
  832. #define szOID_ECC_CURVE_BRAINPOOLP160R1 "1.3.36.3.3.2.8.1.1.1"
  833. #define szOID_ECC_CURVE_BRAINPOOLP160T1 "1.3.36.3.3.2.8.1.1.2"
  834. #define szOID_ECC_CURVE_BRAINPOOLP192R1 "1.3.36.3.3.2.8.1.1.3"
  835. #define szOID_ECC_CURVE_BRAINPOOLP192T1 "1.3.36.3.3.2.8.1.1.4"
  836. #define szOID_ECC_CURVE_BRAINPOOLP224R1 "1.3.36.3.3.2.8.1.1.5"
  837. #define szOID_ECC_CURVE_BRAINPOOLP224T1 "1.3.36.3.3.2.8.1.1.6"
  838. #define szOID_ECC_CURVE_BRAINPOOLP256R1 "1.3.36.3.3.2.8.1.1.7"
  839. #define szOID_ECC_CURVE_BRAINPOOLP256T1 "1.3.36.3.3.2.8.1.1.8"
  840. #define szOID_ECC_CURVE_BRAINPOOLP320R1 "1.3.36.3.3.2.8.1.1.9"
  841. #define szOID_ECC_CURVE_BRAINPOOLP320T1 "1.3.36.3.3.2.8.1.1.10"
  842. #define szOID_ECC_CURVE_BRAINPOOLP384R1 "1.3.36.3.3.2.8.1.1.11"
  843. #define szOID_ECC_CURVE_BRAINPOOLP384T1 "1.3.36.3.3.2.8.1.1.12"
  844. #define szOID_ECC_CURVE_BRAINPOOLP512R1 "1.3.36.3.3.2.8.1.1.13"
  845. #define szOID_ECC_CURVE_BRAINPOOLP512T1 "1.3.36.3.3.2.8.1.1.14"
  846. #define szOID_ECC_CURVE_EC192WAPI "1.2.156.11235.1.1.2.1"
  847. #define szOID_CN_ECDSA_SHA256 "1.2.156.11235.1.1.1"
  848. #define szOID_ECC_CURVE_NISTP192 "1.2.840.10045.3.1.1"
  849. #define szOID_ECC_CURVE_NISTP224 "1.3.132.0.33"
  850. #define szOID_ECC_CURVE_NISTP256 szOID_ECC_CURVE_P256
  851. #define szOID_ECC_CURVE_NISTP384 szOID_ECC_CURVE_P384
  852. #define szOID_ECC_CURVE_NISTP521 szOID_ECC_CURVE_P521
  853. #define szOID_ECC_CURVE_SECP160K1 "1.3.132.0.9"
  854. #define szOID_ECC_CURVE_SECP160R1 "1.3.132.0.8"
  855. #define szOID_ECC_CURVE_SECP160R2 "1.3.132.0.30"
  856. #define szOID_ECC_CURVE_SECP192K1 "1.3.132.0.31"
  857. #define szOID_ECC_CURVE_SECP192R1 szOID_ECC_CURVE_NISTP192
  858. #define szOID_ECC_CURVE_SECP224K1 "1.3.132.0.32"
  859. #define szOID_ECC_CURVE_SECP224R1 szOID_ECC_CURVE_NISTP224
  860. #define szOID_ECC_CURVE_SECP256K1 "1.3.132.0.10"
  861. #define szOID_ECC_CURVE_SECP256R1 szOID_ECC_CURVE_P256
  862. #define szOID_ECC_CURVE_SECP384R1 szOID_ECC_CURVE_P384
  863. #define szOID_ECC_CURVE_SECP521R1 szOID_ECC_CURVE_P521
  864. #define szOID_ECC_CURVE_WTLS7 szOID_ECC_CURVE_SECP160R2
  865. #define szOID_ECC_CURVE_WTLS9 "2.23.43.1.4.9"
  866. #define szOID_ECC_CURVE_WTLS12 szOID_ECC_CURVE_NISTP224
  867. #define szOID_ECC_CURVE_X962P192V1 "1.2.840.10045.3.1.1"
  868. #define szOID_ECC_CURVE_X962P192V2 "1.2.840.10045.3.1.2"
  869. #define szOID_ECC_CURVE_X962P192V3 "1.2.840.10045.3.1.3"
  870. #define szOID_ECC_CURVE_X962P239V1 "1.2.840.10045.3.1.4"
  871. #define szOID_ECC_CURVE_X962P239V2 "1.2.840.10045.3.1.5"
  872. #define szOID_ECC_CURVE_X962P239V3 "1.2.840.10045.3.1.6"
  873. #define szOID_ECC_CURVE_X962P256V1 szOID_ECC_CURVE_P256
  874. #define szOID_ECDSA_SHA1 "1.2.840.10045.4.1"
  875. #define szOID_ECDSA_SPECIFIED "1.2.840.10045.4.3"
  876. #define szOID_ECDSA_SHA256 "1.2.840.10045.4.3.2"
  877. #define szOID_ECDSA_SHA384 "1.2.840.10045.4.3.3"
  878. #define szOID_ECDSA_SHA512 "1.2.840.10045.4.3.4"
  879. #define szOID_NIST_AES128_CBC "2.16.840.1.101.3.4.1.2"
  880. #define szOID_NIST_AES192_CBC "2.16.840.1.101.3.4.1.22"
  881. #define szOID_NIST_AES256_CBC "2.16.840.1.101.3.4.1.42"
  882. #define szOID_NIST_AES128_WRAP "2.16.840.1.101.3.4.1.5"
  883. #define szOID_NIST_AES192_WRAP "2.16.840.1.101.3.4.1.25"
  884. #define szOID_NIST_AES256_WRAP "2.16.840.1.101.3.4.1.45"
  885. #define szOID_DH_SINGLE_PASS_STDDH_SHA1_KDF "1.3.133.16.840.63.0.2"
  886. #define szOID_DH_SINGLE_PASS_STDDH_SHA256_KDF "1.3.132.1.11.1"
  887. #define szOID_DH_SINGLE_PASS_STDDH_SHA384_KDF "1.3.132.1.11.2"
  888. #define szOID_DS "2.5"
  889. #define szOID_DSALG "2.5.8"
  890. #define szOID_DSALG_CRPT "2.5.8.1"
  891. #define szOID_DSALG_HASH "2.5.8.2"
  892. #define szOID_DSALG_SIGN "2.5.8.3"
  893. #define szOID_DSALG_RSA "2.5.8.1.1"
  894. #define szOID_OIW "1.3.14"
  895. #define szOID_OIWSEC "1.3.14.3.2"
  896. #define szOID_OIWSEC_md4RSA "1.3.14.3.2.2"
  897. #define szOID_OIWSEC_md5RSA "1.3.14.3.2.3"
  898. #define szOID_OIWSEC_md4RSA2 "1.3.14.3.2.4"
  899. #define szOID_OIWSEC_desECB "1.3.14.3.2.6"
  900. #define szOID_OIWSEC_desCBC "1.3.14.3.2.7"
  901. #define szOID_OIWSEC_desOFB "1.3.14.3.2.8"
  902. #define szOID_OIWSEC_desCFB "1.3.14.3.2.9"
  903. #define szOID_OIWSEC_desMAC "1.3.14.3.2.10"
  904. #define szOID_OIWSEC_rsaSign "1.3.14.3.2.11"
  905. #define szOID_OIWSEC_dsa "1.3.14.3.2.12"
  906. #define szOID_OIWSEC_shaDSA "1.3.14.3.2.13"
  907. #define szOID_OIWSEC_mdc2RSA "1.3.14.3.2.14"
  908. #define szOID_OIWSEC_shaRSA "1.3.14.3.2.15"
  909. #define szOID_OIWSEC_dhCommMod "1.3.14.3.2.16"
  910. #define szOID_OIWSEC_desEDE "1.3.14.3.2.17"
  911. #define szOID_OIWSEC_sha "1.3.14.3.2.18"
  912. #define szOID_OIWSEC_mdc2 "1.3.14.3.2.19"
  913. #define szOID_OIWSEC_dsaComm "1.3.14.3.2.20"
  914. #define szOID_OIWSEC_dsaCommSHA "1.3.14.3.2.21"
  915. #define szOID_OIWSEC_rsaXchg "1.3.14.3.2.22"
  916. #define szOID_OIWSEC_keyHashSeal "1.3.14.3.2.23"
  917. #define szOID_OIWSEC_md2RSASign "1.3.14.3.2.24"
  918. #define szOID_OIWSEC_md5RSASign "1.3.14.3.2.25"
  919. #define szOID_OIWSEC_sha1 "1.3.14.3.2.26"
  920. #define szOID_OIWSEC_dsaSHA1 "1.3.14.3.2.27"
  921. #define szOID_OIWSEC_dsaCommSHA1 "1.3.14.3.2.28"
  922. #define szOID_OIWSEC_sha1RSASign "1.3.14.3.2.29"
  923. #define szOID_OIWDIR "1.3.14.7.2"
  924. #define szOID_OIWDIR_CRPT "1.3.14.7.2.1"
  925. #define szOID_OIWDIR_HASH "1.3.14.7.2.2"
  926. #define szOID_OIWDIR_SIGN "1.3.14.7.2.3"
  927. #define szOID_OIWDIR_md2 "1.3.14.7.2.2.1"
  928. #define szOID_OIWDIR_md2RSA "1.3.14.7.2.3.1"
  929. #define szOID_INFOSEC "2.16.840.1.101.2.1"
  930. #define szOID_INFOSEC_sdnsSignature "2.16.840.1.101.2.1.1.1"
  931. #define szOID_INFOSEC_mosaicSignature "2.16.840.1.101.2.1.1.2"
  932. #define szOID_INFOSEC_sdnsConfidentiality "2.16.840.1.101.2.1.1.3"
  933. #define szOID_INFOSEC_mosaicConfidentiality "2.16.840.1.101.2.1.1.4"
  934. #define szOID_INFOSEC_sdnsIntegrity "2.16.840.1.101.2.1.1.5"
  935. #define szOID_INFOSEC_mosaicIntegrity "2.16.840.1.101.2.1.1.6"
  936. #define szOID_INFOSEC_sdnsTokenProtection "2.16.840.1.101.2.1.1.7"
  937. #define szOID_INFOSEC_mosaicTokenProtection "2.16.840.1.101.2.1.1.8"
  938. #define szOID_INFOSEC_sdnsKeyManagement "2.16.840.1.101.2.1.1.9"
  939. #define szOID_INFOSEC_mosaicKeyManagement "2.16.840.1.101.2.1.1.10"
  940. #define szOID_INFOSEC_sdnsKMandSig "2.16.840.1.101.2.1.1.11"
  941. #define szOID_INFOSEC_mosaicKMandSig "2.16.840.1.101.2.1.1.12"
  942. #define szOID_INFOSEC_SuiteASignature "2.16.840.1.101.2.1.1.13"
  943. #define szOID_INFOSEC_SuiteAConfidentiality "2.16.840.1.101.2.1.1.14"
  944. #define szOID_INFOSEC_SuiteAIntegrity "2.16.840.1.101.2.1.1.15"
  945. #define szOID_INFOSEC_SuiteATokenProtection "2.16.840.1.101.2.1.1.16"
  946. #define szOID_INFOSEC_SuiteAKeyManagement "2.16.840.1.101.2.1.1.17"
  947. #define szOID_INFOSEC_SuiteAKMandSig "2.16.840.1.101.2.1.1.18"
  948. #define szOID_INFOSEC_mosaicUpdatedSig "2.16.840.1.101.2.1.1.19"
  949. #define szOID_INFOSEC_mosaicKMandUpdSig "2.16.840.1.101.2.1.1.20"
  950. #define szOID_INFOSEC_mosaicUpdatedInteg "2.16.840.1.101.2.1.1.21"
  951. #define szOID_NIST_sha256 "2.16.840.1.101.3.4.2.1"
  952. #define szOID_NIST_sha384 "2.16.840.1.101.3.4.2.2"
  953. #define szOID_NIST_sha512 "2.16.840.1.101.3.4.2.3"
  954. typedef struct _CRYPT_OBJID_TABLE {
  955. DWORD dwAlgId;
  956. LPCSTR pszObjId;
  957. } CRYPT_OBJID_TABLE,*PCRYPT_OBJID_TABLE;
  958. typedef struct _CRYPT_HASH_INFO {
  959. CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
  960. CRYPT_HASH_BLOB Hash;
  961. } CRYPT_HASH_INFO,*PCRYPT_HASH_INFO;
  962. #endif
  963. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
  964. typedef struct _CERT_EXTENSION {
  965. LPSTR pszObjId;
  966. WINBOOL fCritical;
  967. CRYPT_OBJID_BLOB Value;
  968. } CERT_EXTENSION,*PCERT_EXTENSION;
  969. typedef const CERT_EXTENSION *PCCERT_EXTENSION;
  970. #endif
  971. typedef struct _CRYPT_ATTRIBUTE_TYPE_VALUE {
  972. LPSTR pszObjId;
  973. CRYPT_OBJID_BLOB Value;
  974. } CRYPT_ATTRIBUTE_TYPE_VALUE,*PCRYPT_ATTRIBUTE_TYPE_VALUE;
  975. typedef struct _CRYPT_ATTRIBUTE {
  976. LPSTR pszObjId;
  977. DWORD cValue;
  978. PCRYPT_ATTR_BLOB rgValue;
  979. } CRYPT_ATTRIBUTE,*PCRYPT_ATTRIBUTE;
  980. typedef struct _CRYPT_ATTRIBUTES {
  981. DWORD cAttr;
  982. PCRYPT_ATTRIBUTE rgAttr;
  983. } CRYPT_ATTRIBUTES,*PCRYPT_ATTRIBUTES;
  984. typedef struct _CERT_RDN_ATTR {
  985. LPSTR pszObjId;
  986. DWORD dwValueType;
  987. CERT_RDN_VALUE_BLOB Value;
  988. } CERT_RDN_ATTR,*PCERT_RDN_ATTR;
  989. #define szOID_COMMON_NAME "2.5.4.3"
  990. #define szOID_SUR_NAME "2.5.4.4"
  991. #define szOID_DEVICE_SERIAL_NUMBER "2.5.4.5"
  992. #define szOID_COUNTRY_NAME "2.5.4.6"
  993. #define szOID_LOCALITY_NAME "2.5.4.7"
  994. #define szOID_STATE_OR_PROVINCE_NAME "2.5.4.8"
  995. #define szOID_STREET_ADDRESS "2.5.4.9"
  996. #define szOID_ORGANIZATION_NAME "2.5.4.10"
  997. #define szOID_ORGANIZATIONAL_UNIT_NAME "2.5.4.11"
  998. #define szOID_TITLE "2.5.4.12"
  999. #define szOID_DESCRIPTION "2.5.4.13"
  1000. #define szOID_SEARCH_GUIDE "2.5.4.14"
  1001. #define szOID_BUSINESS_CATEGORY "2.5.4.15"
  1002. #define szOID_POSTAL_ADDRESS "2.5.4.16"
  1003. #define szOID_POSTAL_CODE "2.5.4.17"
  1004. #define szOID_POST_OFFICE_BOX "2.5.4.18"
  1005. #define szOID_PHYSICAL_DELIVERY_OFFICE_NAME "2.5.4.19"
  1006. #define szOID_TELEPHONE_NUMBER "2.5.4.20"
  1007. #define szOID_TELEX_NUMBER "2.5.4.21"
  1008. #define szOID_TELETEXT_TERMINAL_IDENTIFIER "2.5.4.22"
  1009. #define szOID_FACSIMILE_TELEPHONE_NUMBER "2.5.4.23"
  1010. #define szOID_X21_ADDRESS "2.5.4.24"
  1011. #define szOID_INTERNATIONAL_ISDN_NUMBER "2.5.4.25"
  1012. #define szOID_REGISTERED_ADDRESS "2.5.4.26"
  1013. #define szOID_DESTINATION_INDICATOR "2.5.4.27"
  1014. #define szOID_PREFERRED_DELIVERY_METHOD "2.5.4.28"
  1015. #define szOID_PRESENTATION_ADDRESS "2.5.4.29"
  1016. #define szOID_SUPPORTED_APPLICATION_CONTEXT "2.5.4.30"
  1017. #define szOID_MEMBER "2.5.4.31"
  1018. #define szOID_OWNER "2.5.4.32"
  1019. #define szOID_ROLE_OCCUPANT "2.5.4.33"
  1020. #define szOID_SEE_ALSO "2.5.4.34"
  1021. #define szOID_USER_PASSWORD "2.5.4.35"
  1022. #define szOID_USER_CERTIFICATE "2.5.4.36"
  1023. #define szOID_CA_CERTIFICATE "2.5.4.37"
  1024. #define szOID_AUTHORITY_REVOCATION_LIST "2.5.4.38"
  1025. #define szOID_CERTIFICATE_REVOCATION_LIST "2.5.4.39"
  1026. #define szOID_CROSS_CERTIFICATE_PAIR "2.5.4.40"
  1027. #define szOID_GIVEN_NAME "2.5.4.42"
  1028. #define szOID_INITIALS "2.5.4.43"
  1029. #define szOID_DN_QUALIFIER "2.5.4.46"
  1030. #define szOID_DOMAIN_COMPONENT "0.9.2342.19200300.100.1.25"
  1031. #define szOID_PKCS_12_FRIENDLY_NAME_ATTR "1.2.840.113549.1.9.20"
  1032. #define szOID_PKCS_12_LOCAL_KEY_ID "1.2.840.113549.1.9.21"
  1033. #define szOID_PKCS_12_KEY_PROVIDER_NAME_ATTR "1.3.6.1.4.1.311.17.1"
  1034. #define szOID_LOCAL_MACHINE_KEYSET "1.3.6.1.4.1.311.17.2"
  1035. #define szOID_PKCS_12_EXTENDED_ATTRIBUTES "1.3.6.1.4.1.311.17.3"
  1036. #define szOID_PKCS_12_PROTECTED_PASSWORD_SECRET_BAG_TYPE_ID "1.3.6.1.4.1.311.17.4"
  1037. #define szOID_KEYID_RDN "1.3.6.1.4.1.311.10.7.1"
  1038. #define szOID_EV_RDN_LOCALE "1.3.6.1.4.1.311.60.2.1.1"
  1039. #define szOID_EV_RDN_STATE_OR_PROVINCE "1.3.6.1.4.1.311.60.2.1.2"
  1040. #define szOID_EV_RDN_COUNTRY "1.3.6.1.4.1.311.60.2.1.3"
  1041. #define CERT_RDN_ANY_TYPE 0
  1042. #define CERT_RDN_ENCODED_BLOB 1
  1043. #define CERT_RDN_OCTET_STRING 2
  1044. #define CERT_RDN_NUMERIC_STRING 3
  1045. #define CERT_RDN_PRINTABLE_STRING 4
  1046. #define CERT_RDN_TELETEX_STRING 5
  1047. #define CERT_RDN_T61_STRING 5
  1048. #define CERT_RDN_VIDEOTEX_STRING 6
  1049. #define CERT_RDN_IA5_STRING 7
  1050. #define CERT_RDN_GRAPHIC_STRING 8
  1051. #define CERT_RDN_VISIBLE_STRING 9
  1052. #define CERT_RDN_ISO646_STRING 9
  1053. #define CERT_RDN_GENERAL_STRING 10
  1054. #define CERT_RDN_UNIVERSAL_STRING 11
  1055. #define CERT_RDN_INT4_STRING 11
  1056. #define CERT_RDN_BMP_STRING 12
  1057. #define CERT_RDN_UNICODE_STRING 12
  1058. #define CERT_RDN_UTF8_STRING 13
  1059. #define CERT_RDN_TYPE_MASK 0x000000ff
  1060. #define CERT_RDN_FLAGS_MASK 0xff000000
  1061. #define CERT_RDN_ENABLE_T61_UNICODE_FLAG 0x80000000
  1062. #define CERT_RDN_ENABLE_UTF8_UNICODE_FLAG 0x20000000
  1063. #define CERT_RDN_FORCE_UTF8_UNICODE_FLAG 0x10000000
  1064. #define CERT_RDN_DISABLE_CHECK_TYPE_FLAG 0x40000000
  1065. #define CERT_RDN_DISABLE_IE4_UTF8_FLAG 0x1000000
  1066. #define CERT_RDN_ENABLE_PUNYCODE_FLAG 0x2000000
  1067. #define IS_CERT_RDN_CHAR_STRING(X) (((X) & CERT_RDN_TYPE_MASK) >= CERT_RDN_NUMERIC_STRING)
  1068. typedef struct _CERT_RDN {
  1069. DWORD cRDNAttr;
  1070. PCERT_RDN_ATTR rgRDNAttr;
  1071. } CERT_RDN,*PCERT_RDN;
  1072. typedef struct _CERT_NAME_INFO {
  1073. DWORD cRDN;
  1074. PCERT_RDN rgRDN;
  1075. } CERT_NAME_INFO,*PCERT_NAME_INFO;
  1076. typedef struct _CERT_NAME_VALUE {
  1077. DWORD dwValueType;
  1078. CERT_RDN_VALUE_BLOB Value;
  1079. } CERT_NAME_VALUE,*PCERT_NAME_VALUE;
  1080. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
  1081. typedef struct _CERT_PUBLIC_KEY_INFO {
  1082. CRYPT_ALGORITHM_IDENTIFIER Algorithm;
  1083. CRYPT_BIT_BLOB PublicKey;
  1084. } CERT_PUBLIC_KEY_INFO,*PCERT_PUBLIC_KEY_INFO;
  1085. #endif
  1086. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
  1087. #define CERT_RSA_PUBLIC_KEY_OBJID szOID_RSA_RSA
  1088. #define CERT_DEFAULT_OID_PUBLIC_KEY_SIGN szOID_RSA_RSA
  1089. #define CERT_DEFAULT_OID_PUBLIC_KEY_XCHG szOID_RSA_RSA
  1090. typedef struct _CRYPT_ECC_PRIVATE_KEY_INFO {
  1091. DWORD dwVersion;
  1092. CRYPT_DER_BLOB PrivateKey;
  1093. LPSTR szCurveOid;
  1094. CRYPT_BIT_BLOB PublicKey;
  1095. } CRYPT_ECC_PRIVATE_KEY_INFO,*PCRYPT_ECC_PRIVATE_KEY_INFO;
  1096. #define CRYPT_ECC_PRIVATE_KEY_INFO_v1 1
  1097. typedef struct _CRYPT_PRIVATE_KEY_INFO {
  1098. DWORD Version;
  1099. CRYPT_ALGORITHM_IDENTIFIER Algorithm;
  1100. CRYPT_DER_BLOB PrivateKey;
  1101. PCRYPT_ATTRIBUTES pAttributes;
  1102. } CRYPT_PRIVATE_KEY_INFO,*PCRYPT_PRIVATE_KEY_INFO;
  1103. typedef struct _CRYPT_ENCRYPTED_PRIVATE_KEY_INFO {
  1104. CRYPT_ALGORITHM_IDENTIFIER EncryptionAlgorithm;
  1105. CRYPT_DATA_BLOB EncryptedPrivateKey;
  1106. } CRYPT_ENCRYPTED_PRIVATE_KEY_INFO,*PCRYPT_ENCRYPTED_PRIVATE_KEY_INFO;
  1107. typedef WINBOOL (CALLBACK *PCRYPT_DECRYPT_PRIVATE_KEY_FUNC) (CRYPT_ALGORITHM_IDENTIFIER Algorithm, CRYPT_DATA_BLOB EncryptedPrivateKey, BYTE *pbClearTextKey, DWORD *pcbClearTextKey, LPVOID pVoidDecryptFunc);
  1108. typedef WINBOOL (CALLBACK *PCRYPT_ENCRYPT_PRIVATE_KEY_FUNC) (CRYPT_ALGORITHM_IDENTIFIER *pAlgorithm, CRYPT_DATA_BLOB *pClearTextPrivateKey, BYTE *pbEncryptedKey, DWORD *pcbEncryptedKey, LPVOID pVoidEncryptFunc);
  1109. typedef WINBOOL (CALLBACK *PCRYPT_RESOLVE_HCRYPTPROV_FUNC) (CRYPT_PRIVATE_KEY_INFO *pPrivateKeyInfo, HCRYPTPROV *phCryptProv, LPVOID pVoidResolveFunc);
  1110. typedef struct _CRYPT_PKCS8_IMPORT_PARAMS {
  1111. CRYPT_DIGEST_BLOB PrivateKey;
  1112. PCRYPT_RESOLVE_HCRYPTPROV_FUNC pResolvehCryptProvFunc;
  1113. LPVOID pVoidResolveFunc;
  1114. PCRYPT_DECRYPT_PRIVATE_KEY_FUNC pDecryptPrivateKeyFunc;
  1115. LPVOID pVoidDecryptFunc;
  1116. } CRYPT_PKCS8_IMPORT_PARAMS,*PCRYPT_PKCS8_IMPORT_PARAMS, CRYPT_PRIVATE_KEY_BLOB_AND_PARAMS,*PCRYPT_PRIVATE_KEY_BLOB_AND_PARAMS;
  1117. typedef struct _CRYPT_PKCS8_EXPORT_PARAMS {
  1118. HCRYPTPROV hCryptProv;
  1119. DWORD dwKeySpec;
  1120. LPSTR pszPrivateKeyObjId;
  1121. PCRYPT_ENCRYPT_PRIVATE_KEY_FUNC pEncryptPrivateKeyFunc;
  1122. LPVOID pVoidEncryptFunc;
  1123. } CRYPT_PKCS8_EXPORT_PARAMS,*PCRYPT_PKCS8_EXPORT_PARAMS;
  1124. #endif
  1125. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
  1126. typedef struct _CERT_INFO {
  1127. DWORD dwVersion;
  1128. CRYPT_INTEGER_BLOB SerialNumber;
  1129. CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
  1130. CERT_NAME_BLOB Issuer;
  1131. FILETIME NotBefore;
  1132. FILETIME NotAfter;
  1133. CERT_NAME_BLOB Subject;
  1134. CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;
  1135. CRYPT_BIT_BLOB IssuerUniqueId;
  1136. CRYPT_BIT_BLOB SubjectUniqueId;
  1137. DWORD cExtension;
  1138. PCERT_EXTENSION rgExtension;
  1139. } CERT_INFO,*PCERT_INFO;
  1140. #endif
  1141. #define CERT_V1 0
  1142. #define CERT_V2 1
  1143. #define CERT_V3 2
  1144. #define CERT_INFO_VERSION_FLAG 1
  1145. #define CERT_INFO_SERIAL_NUMBER_FLAG 2
  1146. #define CERT_INFO_SIGNATURE_ALGORITHM_FLAG 3
  1147. #define CERT_INFO_ISSUER_FLAG 4
  1148. #define CERT_INFO_NOT_BEFORE_FLAG 5
  1149. #define CERT_INFO_NOT_AFTER_FLAG 6
  1150. #define CERT_INFO_SUBJECT_FLAG 7
  1151. #define CERT_INFO_SUBJECT_PUBLIC_KEY_INFO_FLAG 8
  1152. #define CERT_INFO_ISSUER_UNIQUE_ID_FLAG 9
  1153. #define CERT_INFO_SUBJECT_UNIQUE_ID_FLAG 10
  1154. #define CERT_INFO_EXTENSION_FLAG 11
  1155. typedef struct _CRL_ENTRY {
  1156. CRYPT_INTEGER_BLOB SerialNumber;
  1157. FILETIME RevocationDate;
  1158. DWORD cExtension;
  1159. PCERT_EXTENSION rgExtension;
  1160. } CRL_ENTRY,*PCRL_ENTRY;
  1161. typedef struct _CRL_INFO {
  1162. DWORD dwVersion;
  1163. CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
  1164. CERT_NAME_BLOB Issuer;
  1165. FILETIME ThisUpdate;
  1166. FILETIME NextUpdate;
  1167. DWORD cCRLEntry;
  1168. PCRL_ENTRY rgCRLEntry;
  1169. DWORD cExtension;
  1170. PCERT_EXTENSION rgExtension;
  1171. } CRL_INFO,*PCRL_INFO;
  1172. #define CRL_V1 0
  1173. #define CRL_V2 1
  1174. #define CERT_BUNDLE_CERTIFICATE 0
  1175. #define CERT_BUNDLE_CRL 1
  1176. typedef struct _CERT_OR_CRL_BLOB {
  1177. DWORD dwChoice;
  1178. DWORD cbEncoded;
  1179. BYTE *pbEncoded;
  1180. } CERT_OR_CRL_BLOB,*PCERT_OR_CRL_BLOB;
  1181. typedef struct _CERT_OR_CRL_BUNDLE {
  1182. DWORD cItem;
  1183. PCERT_OR_CRL_BLOB rgItem;
  1184. } CERT_OR_CRL_BUNDLE,*PCERT_OR_CRL_BUNDLE;
  1185. typedef struct _CERT_REQUEST_INFO {
  1186. DWORD dwVersion;
  1187. CERT_NAME_BLOB Subject;
  1188. CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;
  1189. DWORD cAttribute;
  1190. PCRYPT_ATTRIBUTE rgAttribute;
  1191. } CERT_REQUEST_INFO,*PCERT_REQUEST_INFO;
  1192. #define CERT_REQUEST_V1 0
  1193. typedef struct _CERT_KEYGEN_REQUEST_INFO {
  1194. DWORD dwVersion;
  1195. CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;
  1196. LPWSTR pwszChallengeString;
  1197. } CERT_KEYGEN_REQUEST_INFO,*PCERT_KEYGEN_REQUEST_INFO;
  1198. #define CERT_KEYGEN_REQUEST_V1 0
  1199. typedef struct _CERT_SIGNED_CONTENT_INFO {
  1200. CRYPT_DER_BLOB ToBeSigned;
  1201. CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
  1202. CRYPT_BIT_BLOB Signature;
  1203. } CERT_SIGNED_CONTENT_INFO,*PCERT_SIGNED_CONTENT_INFO;
  1204. typedef struct _CTL_USAGE {
  1205. DWORD cUsageIdentifier;
  1206. LPSTR *rgpszUsageIdentifier;
  1207. } CTL_USAGE,*PCTL_USAGE,CERT_ENHKEY_USAGE,*PCERT_ENHKEY_USAGE;
  1208. typedef const CTL_USAGE *PCCTL_USAGE;
  1209. typedef const CERT_ENHKEY_USAGE *PCCERT_ENHKEY_USAGE;
  1210. typedef struct _CTL_ENTRY {
  1211. CRYPT_DATA_BLOB SubjectIdentifier;
  1212. DWORD cAttribute;
  1213. PCRYPT_ATTRIBUTE rgAttribute;
  1214. } CTL_ENTRY,*PCTL_ENTRY;
  1215. typedef struct _CTL_INFO {
  1216. DWORD dwVersion;
  1217. CTL_USAGE SubjectUsage;
  1218. CRYPT_DATA_BLOB ListIdentifier;
  1219. CRYPT_INTEGER_BLOB SequenceNumber;
  1220. FILETIME ThisUpdate;
  1221. FILETIME NextUpdate;
  1222. CRYPT_ALGORITHM_IDENTIFIER SubjectAlgorithm;
  1223. DWORD cCTLEntry;
  1224. PCTL_ENTRY rgCTLEntry;
  1225. DWORD cExtension;
  1226. PCERT_EXTENSION rgExtension;
  1227. } CTL_INFO,*PCTL_INFO;
  1228. #define CTL_V1 0
  1229. typedef struct _CRYPT_TIME_STAMP_REQUEST_INFO {
  1230. LPSTR pszTimeStampAlgorithm;
  1231. LPSTR pszContentType;
  1232. CRYPT_OBJID_BLOB Content;
  1233. DWORD cAttribute;
  1234. PCRYPT_ATTRIBUTE rgAttribute;
  1235. } CRYPT_TIME_STAMP_REQUEST_INFO,*PCRYPT_TIME_STAMP_REQUEST_INFO;
  1236. typedef struct _CRYPT_ENROLLMENT_NAME_VALUE_PAIR {
  1237. LPWSTR pwszName;
  1238. LPWSTR pwszValue;
  1239. } CRYPT_ENROLLMENT_NAME_VALUE_PAIR,*PCRYPT_ENROLLMENT_NAME_VALUE_PAIR;
  1240. typedef struct _CRYPT_CSP_PROVIDER {
  1241. DWORD dwKeySpec;
  1242. LPWSTR pwszProviderName;
  1243. CRYPT_BIT_BLOB Signature;
  1244. } CRYPT_CSP_PROVIDER,*PCRYPT_CSP_PROVIDER;
  1245. #define CERT_ENCODING_TYPE_MASK 0x0000ffff
  1246. #define CMSG_ENCODING_TYPE_MASK 0xffff0000
  1247. #define GET_CERT_ENCODING_TYPE(T) (T & CERT_ENCODING_TYPE_MASK)
  1248. #define GET_CMSG_ENCODING_TYPE(T) (T & CMSG_ENCODING_TYPE_MASK)
  1249. #define CRYPT_ASN_ENCODING 0x1
  1250. #define CRYPT_NDR_ENCODING 0x2
  1251. #define X509_ASN_ENCODING 0x1
  1252. #define X509_NDR_ENCODING 0x2
  1253. #define PKCS_7_ASN_ENCODING 0x10000
  1254. #define PKCS_7_NDR_ENCODING 0x20000
  1255. WINIMPM WINBOOL WINAPI CryptFormatObject (DWORD dwCertEncodingType, DWORD dwFormatType, DWORD dwFormatStrType, void *pFormatStruct, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, void *pbFormat, DWORD *pcbFormat);
  1256. #define CRYPT_FORMAT_STR_MULTI_LINE 0x1
  1257. #define CRYPT_FORMAT_STR_NO_HEX 0x10
  1258. #define CRYPT_FORMAT_SIMPLE 0x1
  1259. #define CRYPT_FORMAT_X509 0x2
  1260. #define CRYPT_FORMAT_OID 0x4
  1261. #define CRYPT_FORMAT_RDN_SEMICOLON 0x100
  1262. #define CRYPT_FORMAT_RDN_CRLF 0x200
  1263. #define CRYPT_FORMAT_RDN_UNQUOTE 0x400
  1264. #define CRYPT_FORMAT_RDN_REVERSE 0x800
  1265. #define CRYPT_FORMAT_COMMA 0x1000
  1266. #define CRYPT_FORMAT_SEMICOLON CRYPT_FORMAT_RDN_SEMICOLON
  1267. #define CRYPT_FORMAT_CRLF CRYPT_FORMAT_RDN_CRLF
  1268. typedef LPVOID (WINAPI *PFN_CRYPT_ALLOC)(size_t cbSize);
  1269. typedef VOID (WINAPI *PFN_CRYPT_FREE)(LPVOID pv);
  1270. typedef struct _CRYPT_ENCODE_PARA {
  1271. DWORD cbSize;
  1272. PFN_CRYPT_ALLOC pfnAlloc;
  1273. PFN_CRYPT_FREE pfnFree;
  1274. } CRYPT_ENCODE_PARA,*PCRYPT_ENCODE_PARA;
  1275. WINIMPM WINBOOL WINAPI CryptEncodeObjectEx (DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, void *pvEncoded, DWORD *pcbEncoded);
  1276. WINIMPM WINBOOL WINAPI CryptEncodeObject (DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded);
  1277. #define CRYPT_ENCODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG 0x8
  1278. #define CRYPT_ENCODE_ALLOC_FLAG 0x8000
  1279. #define CRYPT_UNICODE_NAME_ENCODE_ENABLE_T61_UNICODE_FLAG CERT_RDN_ENABLE_T61_UNICODE_FLAG
  1280. #define CRYPT_UNICODE_NAME_ENCODE_ENABLE_UTF8_UNICODE_FLAG CERT_RDN_ENABLE_UTF8_UNICODE_FLAG
  1281. #define CRYPT_UNICODE_NAME_ENCODE_FORCE_UTF8_UNICODE_FLAG CERT_RDN_FORCE_UTF8_UNICODE_FLAG
  1282. #define CRYPT_UNICODE_NAME_ENCODE_DISABLE_CHECK_TYPE_FLAG CERT_RDN_DISABLE_CHECK_TYPE_FLAG
  1283. #define CRYPT_SORTED_CTL_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG 0x10000
  1284. #define CRYPT_ENCODE_ENABLE_PUNYCODE_FLAG 0x20000
  1285. #define CRYPT_ENCODE_ENABLE_UTF8PERCENT_FLAG 0x40000
  1286. #define CRYPT_ENCODE_ENABLE_IA5CONVERSION_FLAG (CRYPT_ENCODE_ENABLE_PUNYCODE_FLAG | CRYPT_ENCODE_ENABLE_UTF8PERCENT_FLAG)
  1287. typedef struct _CRYPT_DECODE_PARA {
  1288. DWORD cbSize;
  1289. PFN_CRYPT_ALLOC pfnAlloc;
  1290. PFN_CRYPT_FREE pfnFree;
  1291. } CRYPT_DECODE_PARA,*PCRYPT_DECODE_PARA;
  1292. WINIMPM WINBOOL WINAPI CryptDecodeObjectEx (DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo);
  1293. WINIMPM WINBOOL WINAPI CryptDecodeObject (DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo);
  1294. #define CRYPT_DECODE_NOCOPY_FLAG 0x1
  1295. #define CRYPT_DECODE_TO_BE_SIGNED_FLAG 0x2
  1296. #define CRYPT_DECODE_SHARE_OID_STRING_FLAG 0x4
  1297. #define CRYPT_DECODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG 0x8
  1298. #define CRYPT_DECODE_ALLOC_FLAG 0x8000
  1299. #define CRYPT_UNICODE_NAME_DECODE_DISABLE_IE4_UTF8_FLAG CERT_RDN_DISABLE_IE4_UTF8_FLAG
  1300. #define CRYPT_DECODE_ENABLE_PUNYCODE_FLAG 0x2000000
  1301. #define CRYPT_DECODE_ENABLE_UTF8PERCENT_FLAG 0x4000000
  1302. #define CRYPT_DECODE_ENABLE_IA5CONVERSION_FLAG (CRYPT_DECODE_ENABLE_PUNYCODE_FLAG | CRYPT_DECODE_ENABLE_UTF8PERCENT_FLAG)
  1303. #define CRYPT_ENCODE_DECODE_NONE 0
  1304. #define X509_CERT ((LPCSTR) 1)
  1305. #define X509_CERT_TO_BE_SIGNED ((LPCSTR) 2)
  1306. #define X509_CERT_CRL_TO_BE_SIGNED ((LPCSTR) 3)
  1307. #define X509_CERT_REQUEST_TO_BE_SIGNED ((LPCSTR) 4)
  1308. #define X509_EXTENSIONS ((LPCSTR) 5)
  1309. #define X509_NAME_VALUE ((LPCSTR) 6)
  1310. #define X509_NAME ((LPCSTR) 7)
  1311. #define X509_PUBLIC_KEY_INFO ((LPCSTR) 8)
  1312. #define X509_AUTHORITY_KEY_ID ((LPCSTR) 9)
  1313. #define X509_KEY_ATTRIBUTES ((LPCSTR) 10)
  1314. #define X509_KEY_USAGE_RESTRICTION ((LPCSTR) 11)
  1315. #define X509_ALTERNATE_NAME ((LPCSTR) 12)
  1316. #define X509_BASIC_CONSTRAINTS ((LPCSTR) 13)
  1317. #define X509_KEY_USAGE ((LPCSTR) 14)
  1318. #define X509_BASIC_CONSTRAINTS2 ((LPCSTR) 15)
  1319. #define X509_CERT_POLICIES ((LPCSTR) 16)
  1320. #define PKCS_UTC_TIME ((LPCSTR) 17)
  1321. #define PKCS_TIME_REQUEST ((LPCSTR) 18)
  1322. #define RSA_CSP_PUBLICKEYBLOB ((LPCSTR) 19)
  1323. #define X509_UNICODE_NAME ((LPCSTR) 20)
  1324. #define X509_KEYGEN_REQUEST_TO_BE_SIGNED ((LPCSTR) 21)
  1325. #define PKCS_ATTRIBUTE ((LPCSTR) 22)
  1326. #define PKCS_CONTENT_INFO_SEQUENCE_OF_ANY ((LPCSTR) 23)
  1327. #define X509_UNICODE_NAME_VALUE ((LPCSTR) 24)
  1328. #define X509_ANY_STRING X509_NAME_VALUE
  1329. #define X509_UNICODE_ANY_STRING X509_UNICODE_NAME_VALUE
  1330. #define X509_OCTET_STRING ((LPCSTR) 25)
  1331. #define X509_BITS ((LPCSTR) 26)
  1332. #define X509_INTEGER ((LPCSTR) 27)
  1333. #define X509_MULTI_BYTE_INTEGER ((LPCSTR) 28)
  1334. #define X509_ENUMERATED ((LPCSTR) 29)
  1335. #define X509_CHOICE_OF_TIME ((LPCSTR) 30)
  1336. #define X509_AUTHORITY_KEY_ID2 ((LPCSTR) 31)
  1337. #define X509_AUTHORITY_INFO_ACCESS ((LPCSTR) 32)
  1338. #define X509_SUBJECT_INFO_ACCESS X509_AUTHORITY_INFO_ACCESS
  1339. #define X509_CRL_REASON_CODE X509_ENUMERATED
  1340. #define PKCS_CONTENT_INFO ((LPCSTR) 33)
  1341. #define X509_SEQUENCE_OF_ANY ((LPCSTR) 34)
  1342. #define X509_CRL_DIST_POINTS ((LPCSTR) 35)
  1343. #define X509_ENHANCED_KEY_USAGE ((LPCSTR) 36)
  1344. #define PKCS_CTL ((LPCSTR) 37)
  1345. #define X509_MULTI_BYTE_UINT ((LPCSTR) 38)
  1346. #define X509_DSS_PUBLICKEY X509_MULTI_BYTE_UINT
  1347. #define X509_DSS_PARAMETERS ((LPCSTR) 39)
  1348. #define X509_DSS_SIGNATURE ((LPCSTR) 40)
  1349. #define PKCS_RC2_CBC_PARAMETERS ((LPCSTR) 41)
  1350. #define PKCS_SMIME_CAPABILITIES ((LPCSTR) 42)
  1351. #define X509_QC_STATEMENTS_EXT ((LPCSTR) 42)
  1352. #define PKCS_RSA_PRIVATE_KEY ((LPCSTR) 43)
  1353. #define PKCS_PRIVATE_KEY_INFO ((LPCSTR) 44)
  1354. #define PKCS_ENCRYPTED_PRIVATE_KEY_INFO ((LPCSTR) 45)
  1355. #define X509_PKIX_POLICY_QUALIFIER_USERNOTICE ((LPCSTR) 46)
  1356. #define X509_DH_PUBLICKEY X509_MULTI_BYTE_UINT
  1357. #define X509_DH_PARAMETERS ((LPCSTR) 47)
  1358. #define X509_ECC_SIGNATURE ((LPCSTR) 47)
  1359. #define PKCS_ATTRIBUTES ((LPCSTR) 48)
  1360. #define PKCS_SORTED_CTL ((LPCSTR) 49)
  1361. #define X942_DH_PARAMETERS ((LPCSTR) 50)
  1362. #define X509_BITS_WITHOUT_TRAILING_ZEROES ((LPCSTR) 51)
  1363. #define X942_OTHER_INFO ((LPCSTR) 52)
  1364. #define X509_CERT_PAIR ((LPCSTR) 53)
  1365. #define X509_ISSUING_DIST_POINT ((LPCSTR) 54)
  1366. #define X509_NAME_CONSTRAINTS ((LPCSTR) 55)
  1367. #define X509_POLICY_MAPPINGS ((LPCSTR) 56)
  1368. #define X509_POLICY_CONSTRAINTS ((LPCSTR) 57)
  1369. #define X509_CROSS_CERT_DIST_POINTS ((LPCSTR) 58)
  1370. #define CMC_DATA ((LPCSTR) 59)
  1371. #define CMC_RESPONSE ((LPCSTR) 60)
  1372. #define CMC_STATUS ((LPCSTR) 61)
  1373. #define CMC_ADD_EXTENSIONS ((LPCSTR) 62)
  1374. #define CMC_ADD_ATTRIBUTES ((LPCSTR) 63)
  1375. #define X509_CERTIFICATE_TEMPLATE ((LPCSTR) 64)
  1376. #define OCSP_SIGNED_REQUEST ((LPCSTR) 65)
  1377. #define OCSP_REQUEST ((LPCSTR) 66)
  1378. #define OCSP_RESPONSE ((LPCSTR) 67)
  1379. #define OCSP_BASIC_SIGNED_RESPONSE ((LPCSTR) 68)
  1380. #define OCSP_BASIC_RESPONSE ((LPCSTR) 69)
  1381. #define X509_LOGOTYPE_EXT ((LPCSTR) 70)
  1382. #define X509_BIOMETRIC_EXT ((LPCSTR) 71)
  1383. #define CNG_RSA_PUBLIC_KEY_BLOB ((LPCSTR) 72)
  1384. #define X509_OBJECT_IDENTIFIER ((LPCSTR) 73)
  1385. #define X509_ALGORITHM_IDENTIFIER ((LPCSTR) 74)
  1386. #define PKCS_RSA_SSA_PSS_PARAMETERS ((LPCSTR) 75)
  1387. #define PKCS_RSAES_OAEP_PARAMETERS ((LPCSTR) 76)
  1388. #define ECC_CMS_SHARED_INFO ((LPCSTR) 77)
  1389. #define TIMESTAMP_REQUEST ((LPCSTR) 78)
  1390. #define TIMESTAMP_RESPONSE ((LPCSTR) 79)
  1391. #define TIMESTAMP_INFO ((LPCSTR) 80)
  1392. #define X509_CERT_BUNDLE ((LPCSTR) 81)
  1393. #define X509_ECC_PRIVATE_KEY ((LPCSTR) 82)
  1394. #define CNG_RSA_PRIVATE_KEY_BLOB ((LPCSTR) 83)
  1395. #define X509_SUBJECT_DIR_ATTRS ((LPCSTR) 84)
  1396. #define X509_ECC_PARAMETERS ((LPCSTR) 85)
  1397. #define PKCS7_SIGNER_INFO ((LPCSTR) 500)
  1398. #define CMS_SIGNER_INFO ((LPCSTR) 501)
  1399. #define szOID_AUTHORITY_KEY_IDENTIFIER "2.5.29.1"
  1400. #define szOID_KEY_ATTRIBUTES "2.5.29.2"
  1401. #define szOID_CERT_POLICIES_95 "2.5.29.3"
  1402. #define szOID_KEY_USAGE_RESTRICTION "2.5.29.4"
  1403. #define szOID_SUBJECT_ALT_NAME "2.5.29.7"
  1404. #define szOID_ISSUER_ALT_NAME "2.5.29.8"
  1405. #define szOID_BASIC_CONSTRAINTS "2.5.29.10"
  1406. /* szOID_KEY_USAGE is defined incorrectly in msdn as 2.5.29.4 --
  1407. http://www.oid-info.com/get/2.5.29.15 RFC3280 */
  1408. #define szOID_KEY_USAGE "2.5.29.15"
  1409. #define szOID_PRIVATEKEY_USAGE_PERIOD "2.5.29.16"
  1410. #define szOID_BASIC_CONSTRAINTS2 "2.5.29.19"
  1411. #define szOID_CERT_POLICIES "2.5.29.32"
  1412. #define szOID_ANY_CERT_POLICY "2.5.29.32.0"
  1413. #define szOID_INHIBIT_ANY_POLICY "2.5.29.54"
  1414. #define szOID_AUTHORITY_KEY_IDENTIFIER2 "2.5.29.35"
  1415. #define szOID_SUBJECT_KEY_IDENTIFIER "2.5.29.14"
  1416. #define szOID_SUBJECT_ALT_NAME2 "2.5.29.17"
  1417. #define szOID_ISSUER_ALT_NAME2 "2.5.29.18"
  1418. #define szOID_CRL_REASON_CODE "2.5.29.21"
  1419. #define szOID_REASON_CODE_HOLD "2.5.29.23"
  1420. #define szOID_CRL_DIST_POINTS "2.5.29.31"
  1421. #define szOID_ENHANCED_KEY_USAGE "2.5.29.37"
  1422. #define szOID_ANY_ENHANCED_KEY_USAGE "2.5.29.37.0"
  1423. #define szOID_CRL_NUMBER "2.5.29.20"
  1424. #define szOID_DELTA_CRL_INDICATOR "2.5.29.27"
  1425. #define szOID_ISSUING_DIST_POINT "2.5.29.28"
  1426. #define szOID_FRESHEST_CRL "2.5.29.46"
  1427. #define szOID_NAME_CONSTRAINTS "2.5.29.30"
  1428. #define szOID_POLICY_MAPPINGS "2.5.29.33"
  1429. #define szOID_LEGACY_POLICY_MAPPINGS "2.5.29.5"
  1430. #define szOID_POLICY_CONSTRAINTS "2.5.29.36"
  1431. #define szOID_RENEWAL_CERTIFICATE "1.3.6.1.4.1.311.13.1"
  1432. #define szOID_ENROLLMENT_NAME_VALUE_PAIR "1.3.6.1.4.1.311.13.2.1"
  1433. #define szOID_ENROLLMENT_CSP_PROVIDER "1.3.6.1.4.1.311.13.2.2"
  1434. #define szOID_OS_VERSION "1.3.6.1.4.1.311.13.2.3"
  1435. #define szOID_ENROLLMENT_AGENT "1.3.6.1.4.1.311.20.2.1"
  1436. #define szOID_PKIX "1.3.6.1.5.5.7"
  1437. #define szOID_PKIX_PE "1.3.6.1.5.5.7.1"
  1438. #define szOID_AUTHORITY_INFO_ACCESS "1.3.6.1.5.5.7.1.1"
  1439. #define szOID_SUBJECT_INFO_ACCESS "1.3.6.1.5.5.7.1.11"
  1440. #define szOID_BIOMETRIC_EXT "1.3.6.1.5.5.7.1.2"
  1441. #define szOID_QC_STATEMENTS_EXT "1.3.6.1.5.5.7.1.3"
  1442. #define szOID_LOGOTYPE_EXT "1.3.6.1.5.5.7.1.12"
  1443. #define szOID_TLS_FEATURES_EXT "1.3.6.1.5.5.7.1.24"
  1444. #define szOID_CERT_EXTENSIONS "1.3.6.1.4.1.311.2.1.14"
  1445. #define szOID_NEXT_UPDATE_LOCATION "1.3.6.1.4.1.311.10.2"
  1446. #define szOID_REMOVE_CERTIFICATE "1.3.6.1.4.1.311.10.8.1"
  1447. #define szOID_CROSS_CERT_DIST_POINTS "1.3.6.1.4.1.311.10.9.1"
  1448. #define szOID_CTL "1.3.6.1.4.1.311.10.1"
  1449. #define szOID_SORTED_CTL "1.3.6.1.4.1.311.10.1.1"
  1450. #ifndef szOID_SERIALIZED
  1451. #define szOID_SERIALIZED "1.3.6.1.4.1.311.10.3.3.1"
  1452. #endif
  1453. #ifndef szOID_NT_PRINCIPAL_NAME
  1454. #define szOID_NT_PRINCIPAL_NAME "1.3.6.1.4.1.311.20.2.3"
  1455. #endif
  1456. #ifndef szOID_INTERNATIONALIZED_EMAIL_ADDRESS
  1457. #define szOID_INTERNATIONALIZED_EMAIL_ADDRESS "1.3.6.1.4.1.311.20.2.4"
  1458. #endif
  1459. #ifndef szOID_PRODUCT_UPDATE
  1460. #define szOID_PRODUCT_UPDATE "1.3.6.1.4.1.311.31.1"
  1461. #endif
  1462. #define szOID_ANY_APPLICATION_POLICY "1.3.6.1.4.1.311.10.12.1"
  1463. #define szOID_AUTO_ENROLL_CTL_USAGE "1.3.6.1.4.1.311.20.1"
  1464. #define szOID_ENROLL_CERTTYPE_EXTENSION "1.3.6.1.4.1.311.20.2"
  1465. #define szOID_CERT_MANIFOLD "1.3.6.1.4.1.311.20.3"
  1466. #ifndef szOID_CERTSRV_CA_VERSION
  1467. #define szOID_CERTSRV_CA_VERSION "1.3.6.1.4.1.311.21.1"
  1468. #endif
  1469. #define szOID_CERTSRV_PREVIOUS_CERT_HASH "1.3.6.1.4.1.311.21.2"
  1470. #define szOID_CRL_VIRTUAL_BASE "1.3.6.1.4.1.311.21.3"
  1471. #define szOID_CRL_NEXT_PUBLISH "1.3.6.1.4.1.311.21.4"
  1472. #define szOID_KP_CA_EXCHANGE "1.3.6.1.4.1.311.21.5"
  1473. #define szOID_KP_KEY_RECOVERY_AGENT "1.3.6.1.4.1.311.21.6"
  1474. #define szOID_CERTIFICATE_TEMPLATE "1.3.6.1.4.1.311.21.7"
  1475. #define szOID_ENTERPRISE_OID_ROOT "1.3.6.1.4.1.311.21.8"
  1476. #define szOID_RDN_DUMMY_SIGNER "1.3.6.1.4.1.311.21.9"
  1477. #define szOID_APPLICATION_CERT_POLICIES "1.3.6.1.4.1.311.21.10"
  1478. #define szOID_APPLICATION_POLICY_MAPPINGS "1.3.6.1.4.1.311.21.11"
  1479. #define szOID_APPLICATION_POLICY_CONSTRAINTS "1.3.6.1.4.1.311.21.12"
  1480. #define szOID_ARCHIVED_KEY_ATTR "1.3.6.1.4.1.311.21.13"
  1481. #define szOID_CRL_SELF_CDP "1.3.6.1.4.1.311.21.14"
  1482. #define szOID_REQUIRE_CERT_CHAIN_POLICY "1.3.6.1.4.1.311.21.15"
  1483. #define szOID_ARCHIVED_KEY_CERT_HASH "1.3.6.1.4.1.311.21.16"
  1484. #define szOID_ISSUED_CERT_HASH "1.3.6.1.4.1.311.21.17"
  1485. #define szOID_DS_EMAIL_REPLICATION "1.3.6.1.4.1.311.21.19"
  1486. #define szOID_REQUEST_CLIENT_INFO "1.3.6.1.4.1.311.21.20"
  1487. #define szOID_ENCRYPTED_KEY_HASH "1.3.6.1.4.1.311.21.21"
  1488. #define szOID_CERTSRV_CROSSCA_VERSION "1.3.6.1.4.1.311.21.22"
  1489. #define szOID_NTDS_REPLICATION "1.3.6.1.4.1.311.25.1"
  1490. #define szOID_SUBJECT_DIR_ATTRS "2.5.29.9"
  1491. #define szOID_PKIX_KP "1.3.6.1.5.5.7.3"
  1492. #define szOID_PKIX_KP_SERVER_AUTH "1.3.6.1.5.5.7.3.1"
  1493. #define szOID_PKIX_KP_CLIENT_AUTH "1.3.6.1.5.5.7.3.2"
  1494. #define szOID_PKIX_KP_CODE_SIGNING "1.3.6.1.5.5.7.3.3"
  1495. #define szOID_PKIX_KP_EMAIL_PROTECTION "1.3.6.1.5.5.7.3.4"
  1496. #define szOID_PKIX_KP_IPSEC_END_SYSTEM "1.3.6.1.5.5.7.3.5"
  1497. #define szOID_PKIX_KP_IPSEC_TUNNEL "1.3.6.1.5.5.7.3.6"
  1498. #define szOID_PKIX_KP_IPSEC_USER "1.3.6.1.5.5.7.3.7"
  1499. #define szOID_PKIX_KP_TIMESTAMP_SIGNING "1.3.6.1.5.5.7.3.8"
  1500. #define szOID_PKIX_KP_OCSP_SIGNING "1.3.6.1.5.5.7.3.9"
  1501. #define szOID_PKIX_OCSP_NONCE "1.3.6.1.5.5.7.48.1.2"
  1502. #define szOID_PKIX_OCSP_NOCHECK "1.3.6.1.5.5.7.48.1.5"
  1503. #define szOID_IPSEC_KP_IKE_INTERMEDIATE "1.3.6.1.5.5.8.2.2"
  1504. #define szOID_PKINIT_KP_KDC "1.3.6.1.5.2.3.5"
  1505. #define szOID_KP_CTL_USAGE_SIGNING "1.3.6.1.4.1.311.10.3.1"
  1506. #define szOID_KP_TIME_STAMP_SIGNING "1.3.6.1.4.1.311.10.3.2"
  1507. #ifndef szOID_SERVER_GATED_CRYPTO
  1508. #define szOID_SERVER_GATED_CRYPTO "1.3.6.1.4.1.311.10.3.3"
  1509. #endif
  1510. #ifndef szOID_SGC_NETSCAPE
  1511. #define szOID_SGC_NETSCAPE "2.16.840.1.113730.4.1"
  1512. #endif
  1513. #define szOID_KP_EFS "1.3.6.1.4.1.311.10.3.4"
  1514. #define szOID_EFS_RECOVERY "1.3.6.1.4.1.311.10.3.4.1"
  1515. #define szOID_WHQL_CRYPTO "1.3.6.1.4.1.311.10.3.5"
  1516. #define szOID_ATTEST_WHQL_CRYPTO "1.3.6.1.4.1.311.10.3.5.1"
  1517. #define szOID_NT5_CRYPTO "1.3.6.1.4.1.311.10.3.6"
  1518. #define szOID_OEM_WHQL_CRYPTO "1.3.6.1.4.1.311.10.3.7"
  1519. #define szOID_EMBEDDED_NT_CRYPTO "1.3.6.1.4.1.311.10.3.8"
  1520. #define szOID_ROOT_LIST_SIGNER "1.3.6.1.4.1.311.10.3.9"
  1521. #define szOID_KP_QUALIFIED_SUBORDINATION "1.3.6.1.4.1.311.10.3.10"
  1522. #define szOID_KP_KEY_RECOVERY "1.3.6.1.4.1.311.10.3.11"
  1523. #define szOID_KP_DOCUMENT_SIGNING "1.3.6.1.4.1.311.10.3.12"
  1524. #define szOID_KP_LIFETIME_SIGNING "1.3.6.1.4.1.311.10.3.13"
  1525. #define szOID_KP_MOBILE_DEVICE_SOFTWARE "1.3.6.1.4.1.311.10.3.14"
  1526. #define szOID_KP_SMART_DISPLAY "1.3.6.1.4.1.311.10.3.15"
  1527. #define szOID_KP_CSP_SIGNATURE "1.3.6.1.4.1.311.10.3.16"
  1528. #define szOID_KP_FLIGHT_SIGNING "1.3.6.1.4.1.311.10.3.27"
  1529. #define szOID_PLATFORM_MANIFEST_BINARY_ID "1.3.6.1.4.1.311.10.3.28"
  1530. #ifndef szOID_DRM
  1531. #define szOID_DRM "1.3.6.1.4.1.311.10.5.1"
  1532. #endif
  1533. #ifndef szOID_DRM_INDIVIDUALIZATION
  1534. #define szOID_DRM_INDIVIDUALIZATION "1.3.6.1.4.1.311.10.5.2"
  1535. #endif
  1536. #ifndef szOID_LICENSES
  1537. #define szOID_LICENSES "1.3.6.1.4.1.311.10.6.1"
  1538. #endif
  1539. #ifndef szOID_LICENSE_SERVER
  1540. #define szOID_LICENSE_SERVER "1.3.6.1.4.1.311.10.6.2"
  1541. #endif
  1542. #ifndef szOID_KP_SMARTCARD_LOGON
  1543. #define szOID_KP_SMARTCARD_LOGON "1.3.6.1.4.1.311.20.2.2"
  1544. #endif
  1545. #define szOID_KP_KERNEL_MODE_CODE_SIGNING "1.3.6.1.4.1.311.61.1.1"
  1546. #define szOID_KP_KERNEL_MODE_TRUSTED_BOOT_SIGNING "1.3.6.1.4.1.311.61.4.1"
  1547. #define szOID_REVOKED_LIST_SIGNER "1.3.6.1.4.1.311.10.3.19"
  1548. #define szOID_WINDOWS_KITS_SIGNER "1.3.6.1.4.1.311.10.3.20"
  1549. #define szOID_WINDOWS_RT_SIGNER "1.3.6.1.4.1.311.10.3.21"
  1550. #define szOID_PROTECTED_PROCESS_LIGHT_SIGNER "1.3.6.1.4.1.311.10.3.22"
  1551. #define szOID_WINDOWS_TCB_SIGNER "1.3.6.1.4.1.311.10.3.23"
  1552. #define szOID_PROTECTED_PROCESS_SIGNER "1.3.6.1.4.1.311.10.3.24"
  1553. #define szOID_WINDOWS_THIRD_PARTY_COMPONENT_SIGNER "1.3.6.1.4.1.311.10.3.25"
  1554. #define szOID_WINDOWS_SOFTWARE_EXTENSION_SIGNER "1.3.6.1.4.1.311.10.3.26"
  1555. #define szOID_DISALLOWED_LIST "1.3.6.1.4.1.311.10.3.30"
  1556. #define szOID_PIN_RULES_SIGNER "1.3.6.1.4.1.311.10.3.31"
  1557. #define szOID_PIN_RULES_CTL "1.3.6.1.4.1.311.10.3.32"
  1558. #define szOID_PIN_RULES_EXT "1.3.6.1.4.1.311.10.3.33"
  1559. #define szOID_PIN_RULES_DOMAIN_NAME "1.3.6.1.4.1.311.10.3.34"
  1560. #define szOID_PIN_RULES_LOG_END_DATE_EXT "1.3.6.1.4.1.311.10.3.35"
  1561. #define szOID_IUM_SIGNING "1.3.6.1.4.1.311.10.3.37"
  1562. #define szOID_EV_WHQL_CRYPTO "1.3.6.1.4.1.311.10.3.39"
  1563. #define szOID_BIOMETRIC_SIGNING "1.3.6.1.4.1.311.10.3.41"
  1564. #define szOID_ENCLAVE_SIGNING "1.3.6.1.4.1.311.10.3.42"
  1565. #define szOID_SYNC_ROOT_CTL_EXT "1.3.6.1.4.1.311.10.3.50"
  1566. #define szOID_HPKP_DOMAIN_NAME_CTL "1.3.6.1.4.1.311.10.3.60"
  1567. #define szOID_HPKP_HEADER_VALUE_CTL "1.3.6.1.4.1.311.10.3.61"
  1568. #define szOID_KP_KERNEL_MODE_HAL_EXTENSION_SIGNING "1.3.6.1.4.1.311.61.5.1"
  1569. #define szOID_WINDOWS_STORE_SIGNER "1.3.6.1.4.1.311.76.3.1"
  1570. #define szOID_DYNAMIC_CODE_GEN_SIGNER "1.3.6.1.4.1.311.76.5.1"
  1571. #define szOID_MICROSOFT_PUBLISHER_SIGNER "1.3.6.1.4.1.311.76.8.1"
  1572. #define szOID_YESNO_TRUST_ATTR "1.3.6.1.4.1.311.10.4.1"
  1573. #define szOID_SITE_PIN_RULES_INDEX_ATTR "1.3.6.1.4.1.311.10.4.2"
  1574. #define szOID_SITE_PIN_RULES_FLAGS_ATTR "1.3.6.1.4.1.311.10.4.3"
  1575. #define SITE_PIN_RULES_ALL_SUBDOMAINS_FLAG 0x1
  1576. #define szOID_PKIX_POLICY_QUALIFIER_CPS "1.3.6.1.5.5.7.2.1"
  1577. #define szOID_PKIX_POLICY_QUALIFIER_USERNOTICE "1.3.6.1.5.5.7.2.2"
  1578. #define szOID_ROOT_PROGRAM_FLAGS "1.3.6.1.4.1.311.60.1.1"
  1579. #define CERT_ROOT_PROGRAM_FLAG_ORG 0x80
  1580. #define CERT_ROOT_PROGRAM_FLAG_LSC 0x40
  1581. #define CERT_ROOT_PROGRAM_FLAG_SUBJECT_LOGO 0x20
  1582. #define CERT_ROOT_PROGRAM_FLAG_OU 0x10
  1583. #define CERT_ROOT_PROGRAM_FLAG_ADDRESS 0x08
  1584. #define szOID_CERT_POLICIES_95_QUALIFIER1 "2.16.840.1.113733.1.7.1.1"
  1585. #define szOID_RDN_TPM_MANUFACTURER "2.23.133.2.1"
  1586. #define szOID_RDN_TPM_MODEL "2.23.133.2.2"
  1587. #define szOID_RDN_TPM_VERSION "2.23.133.2.3"
  1588. #define szOID_RDN_TCG_PLATFORM_MANUFACTURER "2.23.133.2.4"
  1589. #define szOID_RDN_TCG_PLATFORM_MODEL "2.23.133.2.5"
  1590. #define szOID_RDN_TCG_PLATFORM_VERSION "2.23.133.2.6"
  1591. #define szOID_CT_CERT_SCTLIST "1.3.6.1.4.1.11129.2.4.2"
  1592. #define szOID_ENROLL_EK_INFO "1.3.6.1.4.1.311.21.23"
  1593. #define szOID_ENROLL_AIK_INFO "1.3.6.1.4.1.311.21.39"
  1594. #define szOID_ENROLL_ATTESTATION_STATEMENT "1.3.6.1.4.1.311.21.24"
  1595. #define szOID_ENROLL_KSP_NAME "1.3.6.1.4.1.311.21.25"
  1596. #define szOID_ENROLL_EKPUB_CHALLENGE "1.3.6.1.4.1.311.21.26"
  1597. #define szOID_ENROLL_CAXCHGCERT_HASH "1.3.6.1.4.1.311.21.27"
  1598. #define szOID_ENROLL_ATTESTATION_CHALLENGE "1.3.6.1.4.1.311.21.28"
  1599. #define szOID_ENROLL_ENCRYPTION_ALGORITHM "1.3.6.1.4.1.311.21.29"
  1600. #define szOID_KP_TPM_EK_CERTIFICATE "2.23.133.8.1"
  1601. #define szOID_KP_TPM_PLATFORM_CERTIFICATE "2.23.133.8.2"
  1602. #define szOID_KP_TPM_AIK_CERTIFICATE "2.23.133.8.3"
  1603. #define szOID_ENROLL_EKVERIFYKEY "1.3.6.1.4.1.311.21.30"
  1604. #define szOID_ENROLL_EKVERIFYCERT "1.3.6.1.4.1.311.21.31"
  1605. #define szOID_ENROLL_EKVERIFYCREDS "1.3.6.1.4.1.311.21.32"
  1606. #define szOID_ENROLL_SCEP_ERROR "1.3.6.1.4.1.311.21.33"
  1607. #define szOID_ENROLL_SCEP_SERVER_STATE "1.3.6.1.4.1.311.21.34"
  1608. #define szOID_ENROLL_SCEP_CHALLENGE_ANSWER "1.3.6.1.4.1.311.21.35"
  1609. #define szOID_ENROLL_SCEP_CLIENT_REQUEST "1.3.6.1.4.1.311.21.37"
  1610. #define szOID_ENROLL_SCEP_SERVER_MESSAGE "1.3.6.1.4.1.311.21.38"
  1611. #define szOID_ENROLL_SCEP_SERVER_SECRET "1.3.6.1.4.1.311.21.40"
  1612. #define szOID_ENROLL_KEY_AFFINITY "1.3.6.1.4.1.311.21.41"
  1613. #define szOID_ENROLL_SCEP_SIGNER_HASH "1.3.6.1.4.1.311.21.42"
  1614. #define szOID_ENROLL_EK_CA_KEYID "1.3.6.1.4.1.311.21.43"
  1615. #define szOID_ATTR_SUPPORTED_ALGORITHMS "2.5.4.52"
  1616. #define szOID_ATTR_TPM_SPECIFICATION "2.23.133.2.16"
  1617. #define szOID_ATTR_PLATFORM_SPECIFICATION "2.23.133.2.17"
  1618. #define szOID_ATTR_TPM_SECURITY_ASSERTIONS "2.23.133.2.18"
  1619. typedef struct _CERT_EXTENSIONS {
  1620. DWORD cExtension;
  1621. PCERT_EXTENSION rgExtension;
  1622. } CERT_EXTENSIONS,*PCERT_EXTENSIONS;
  1623. #define CERT_UNICODE_RDN_ERR_INDEX_MASK 0x3ff
  1624. #define CERT_UNICODE_RDN_ERR_INDEX_SHIFT 22
  1625. #define CERT_UNICODE_ATTR_ERR_INDEX_MASK 0x3f
  1626. #define CERT_UNICODE_ATTR_ERR_INDEX_SHIFT 16
  1627. #define CERT_UNICODE_VALUE_ERR_INDEX_MASK 0xffff
  1628. #define CERT_UNICODE_VALUE_ERR_INDEX_SHIFT 0
  1629. #define GET_CERT_UNICODE_RDN_ERR_INDEX(X) ((X >> CERT_UNICODE_RDN_ERR_INDEX_SHIFT) &CERT_UNICODE_RDN_ERR_INDEX_MASK)
  1630. #define GET_CERT_UNICODE_ATTR_ERR_INDEX(X) ((X >> CERT_UNICODE_ATTR_ERR_INDEX_SHIFT) &CERT_UNICODE_ATTR_ERR_INDEX_MASK)
  1631. #define GET_CERT_UNICODE_VALUE_ERR_INDEX(X) (X &CERT_UNICODE_VALUE_ERR_INDEX_MASK)
  1632. typedef struct _CERT_AUTHORITY_KEY_ID_INFO {
  1633. CRYPT_DATA_BLOB KeyId;
  1634. CERT_NAME_BLOB CertIssuer;
  1635. CRYPT_INTEGER_BLOB CertSerialNumber;
  1636. } CERT_AUTHORITY_KEY_ID_INFO,*PCERT_AUTHORITY_KEY_ID_INFO;
  1637. typedef struct _CERT_PRIVATE_KEY_VALIDITY {
  1638. FILETIME NotBefore;
  1639. FILETIME NotAfter;
  1640. } CERT_PRIVATE_KEY_VALIDITY,*PCERT_PRIVATE_KEY_VALIDITY;
  1641. typedef struct _CERT_KEY_ATTRIBUTES_INFO {
  1642. CRYPT_DATA_BLOB KeyId;
  1643. CRYPT_BIT_BLOB IntendedKeyUsage;
  1644. PCERT_PRIVATE_KEY_VALIDITY pPrivateKeyUsagePeriod;
  1645. } CERT_KEY_ATTRIBUTES_INFO,*PCERT_KEY_ATTRIBUTES_INFO;
  1646. #define CERT_ENCIPHER_ONLY_KEY_USAGE 0x01
  1647. #define CERT_CRL_SIGN_KEY_USAGE 0x02
  1648. #define CERT_OFFLINE_CRL_SIGN_KEY_USAGE 0x02
  1649. #define CERT_KEY_CERT_SIGN_KEY_USAGE 0x04
  1650. #define CERT_KEY_AGREEMENT_KEY_USAGE 0x08
  1651. #define CERT_DATA_ENCIPHERMENT_KEY_USAGE 0x10
  1652. #define CERT_KEY_ENCIPHERMENT_KEY_USAGE 0x20
  1653. #define CERT_NON_REPUDIATION_KEY_USAGE 0x40
  1654. #define CERT_DIGITAL_SIGNATURE_KEY_USAGE 0x80
  1655. #define CERT_DECIPHER_ONLY_KEY_USAGE 0x80
  1656. typedef struct _CERT_POLICY_ID {
  1657. DWORD cCertPolicyElementId;
  1658. LPSTR *rgpszCertPolicyElementId;
  1659. } CERT_POLICY_ID,*PCERT_POLICY_ID;
  1660. typedef struct _CERT_KEY_USAGE_RESTRICTION_INFO {
  1661. DWORD cCertPolicyId;
  1662. PCERT_POLICY_ID rgCertPolicyId;
  1663. CRYPT_BIT_BLOB RestrictedKeyUsage;
  1664. } CERT_KEY_USAGE_RESTRICTION_INFO,*PCERT_KEY_USAGE_RESTRICTION_INFO;
  1665. typedef struct _CERT_OTHER_NAME {
  1666. LPSTR pszObjId;
  1667. CRYPT_OBJID_BLOB Value;
  1668. } CERT_OTHER_NAME,*PCERT_OTHER_NAME;
  1669. typedef struct _CERT_ALT_NAME_ENTRY {
  1670. DWORD dwAltNameChoice;
  1671. __C89_NAMELESS union {
  1672. PCERT_OTHER_NAME pOtherName;
  1673. LPWSTR pwszRfc822Name;
  1674. LPWSTR pwszDNSName;
  1675. /* CERT_DATA_BLOB is not documented, and x400Address is documented
  1676. * to be not implemented; commented out to prevent compile errors
  1677. * see http://msdn.microsoft.com/en-us/library/aa377173.aspx for
  1678. * CERT_ALT_NAME_ENTRY documentation where this is specified.
  1679. CERT_DATA_BLOB x400Address;
  1680. */
  1681. CERT_NAME_BLOB DirectoryName;
  1682. /* pEdiPartyName is not implemented, either. see:
  1683. * http://msdn.microsoft.com/en-us/library/aa924681.aspx or
  1684. * http://msdn.microsoft.com/en-us/library/aa377173.aspx
  1685. LPWSTR pEdiPartyName;
  1686. */
  1687. LPWSTR pwszURL;
  1688. CRYPT_DATA_BLOB IPAddress;
  1689. LPSTR pszRegisteredID;
  1690. };
  1691. } CERT_ALT_NAME_ENTRY,*PCERT_ALT_NAME_ENTRY;
  1692. #define CERT_ALT_NAME_OTHER_NAME 1
  1693. #define CERT_ALT_NAME_RFC822_NAME 2
  1694. #define CERT_ALT_NAME_DNS_NAME 3
  1695. #define CERT_ALT_NAME_X400_ADDRESS 4
  1696. #define CERT_ALT_NAME_DIRECTORY_NAME 5
  1697. #define CERT_ALT_NAME_EDI_PARTY_NAME 6
  1698. #define CERT_ALT_NAME_URL 7
  1699. #define CERT_ALT_NAME_IP_ADDRESS 8
  1700. #define CERT_ALT_NAME_REGISTERED_ID 9
  1701. typedef struct _CERT_ALT_NAME_INFO {
  1702. DWORD cAltEntry;
  1703. PCERT_ALT_NAME_ENTRY rgAltEntry;
  1704. } CERT_ALT_NAME_INFO,*PCERT_ALT_NAME_INFO;
  1705. #define CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK 0xff
  1706. #define CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT 16
  1707. #define CERT_ALT_NAME_VALUE_ERR_INDEX_MASK 0x0000ffff
  1708. #define CERT_ALT_NAME_VALUE_ERR_INDEX_SHIFT 0
  1709. #define GET_CERT_ALT_NAME_ENTRY_ERR_INDEX(X) ((X >> CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT) &CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK)
  1710. #define GET_CERT_ALT_NAME_VALUE_ERR_INDEX(X) (X &CERT_ALT_NAME_VALUE_ERR_INDEX_MASK)
  1711. typedef struct _CERT_BASIC_CONSTRAINTS_INFO {
  1712. CRYPT_BIT_BLOB SubjectType;
  1713. WINBOOL fPathLenConstraint;
  1714. DWORD dwPathLenConstraint;
  1715. DWORD cSubtreesConstraint;
  1716. CERT_NAME_BLOB *rgSubtreesConstraint;
  1717. } CERT_BASIC_CONSTRAINTS_INFO, *PCERT_BASIC_CONSTRAINTS_INFO;
  1718. #define CERT_CA_SUBJECT_FLAG 0x80
  1719. #define CERT_END_ENTITY_SUBJECT_FLAG 0x40
  1720. typedef struct _CERT_BASIC_CONSTRAINTS2_INFO {
  1721. WINBOOL fCA;
  1722. WINBOOL fPathLenConstraint;
  1723. DWORD dwPathLenConstraint;
  1724. } CERT_BASIC_CONSTRAINTS2_INFO,*PCERT_BASIC_CONSTRAINTS2_INFO;
  1725. typedef struct _CERT_POLICY_QUALIFIER_INFO {
  1726. LPSTR pszPolicyQualifierId;
  1727. CRYPT_OBJID_BLOB Qualifier;
  1728. } CERT_POLICY_QUALIFIER_INFO,*PCERT_POLICY_QUALIFIER_INFO;
  1729. typedef struct _CERT_POLICY_INFO {
  1730. LPSTR pszPolicyIdentifier;
  1731. DWORD cPolicyQualifier;
  1732. CERT_POLICY_QUALIFIER_INFO *rgPolicyQualifier;
  1733. } CERT_POLICY_INFO,*PCERT_POLICY_INFO;
  1734. typedef struct _CERT_POLICIES_INFO {
  1735. DWORD cPolicyInfo;
  1736. CERT_POLICY_INFO *rgPolicyInfo;
  1737. } CERT_POLICIES_INFO,*PCERT_POLICIES_INFO;
  1738. typedef struct _CERT_POLICY_QUALIFIER_NOTICE_REFERENCE {
  1739. LPSTR pszOrganization;
  1740. DWORD cNoticeNumbers;
  1741. int *rgNoticeNumbers;
  1742. } CERT_POLICY_QUALIFIER_NOTICE_REFERENCE,*PCERT_POLICY_QUALIFIER_NOTICE_REFERENCE;
  1743. typedef struct _CERT_POLICY_QUALIFIER_USER_NOTICE {
  1744. CERT_POLICY_QUALIFIER_NOTICE_REFERENCE *pNoticeReference;
  1745. LPWSTR pszDisplayText;
  1746. } CERT_POLICY_QUALIFIER_USER_NOTICE,*PCERT_POLICY_QUALIFIER_USER_NOTICE;
  1747. typedef struct _CPS_URLS {
  1748. LPWSTR pszURL;
  1749. CRYPT_ALGORITHM_IDENTIFIER *pAlgorithm;
  1750. CRYPT_DATA_BLOB *pDigest;
  1751. } CPS_URLS,*PCPS_URLS;
  1752. typedef struct _CERT_POLICY95_QUALIFIER1 {
  1753. LPWSTR pszPracticesReference;
  1754. LPSTR pszNoticeIdentifier;
  1755. LPSTR pszNSINoticeIdentifier;
  1756. DWORD cCPSURLs;
  1757. CPS_URLS *rgCPSURLs;
  1758. } CERT_POLICY95_QUALIFIER1,*PCERT_POLICY95_QUALIFIER1;
  1759. typedef struct _CERT_POLICY_MAPPING {
  1760. LPSTR pszIssuerDomainPolicy;
  1761. LPSTR pszSubjectDomainPolicy;
  1762. } CERT_POLICY_MAPPING,*PCERT_POLICY_MAPPING;
  1763. typedef struct _CERT_POLICY_MAPPINGS_INFO {
  1764. DWORD cPolicyMapping;
  1765. PCERT_POLICY_MAPPING rgPolicyMapping;
  1766. } CERT_POLICY_MAPPINGS_INFO,*PCERT_POLICY_MAPPINGS_INFO;
  1767. typedef struct _CERT_POLICY_CONSTRAINTS_INFO {
  1768. WINBOOL fRequireExplicitPolicy;
  1769. DWORD dwRequireExplicitPolicySkipCerts;
  1770. WINBOOL fInhibitPolicyMapping;
  1771. DWORD dwInhibitPolicyMappingSkipCerts;
  1772. } CERT_POLICY_CONSTRAINTS_INFO,*PCERT_POLICY_CONSTRAINTS_INFO;
  1773. typedef struct _CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY {
  1774. LPSTR pszObjId;
  1775. DWORD cValue;
  1776. PCRYPT_DER_BLOB rgValue;
  1777. } CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY,*PCRYPT_CONTENT_INFO_SEQUENCE_OF_ANY;
  1778. typedef struct _CRYPT_CONTENT_INFO {
  1779. LPSTR pszObjId;
  1780. CRYPT_DER_BLOB Content;
  1781. } CRYPT_CONTENT_INFO,*PCRYPT_CONTENT_INFO;
  1782. typedef struct _CRYPT_SEQUENCE_OF_ANY {
  1783. DWORD cValue;
  1784. PCRYPT_DER_BLOB rgValue;
  1785. } CRYPT_SEQUENCE_OF_ANY,*PCRYPT_SEQUENCE_OF_ANY;
  1786. typedef struct _CERT_AUTHORITY_KEY_ID2_INFO {
  1787. CRYPT_DATA_BLOB KeyId;
  1788. CERT_ALT_NAME_INFO AuthorityCertIssuer;
  1789. CRYPT_INTEGER_BLOB AuthorityCertSerialNumber;
  1790. } CERT_AUTHORITY_KEY_ID2_INFO,*PCERT_AUTHORITY_KEY_ID2_INFO;
  1791. typedef struct _CERT_ACCESS_DESCRIPTION {
  1792. LPSTR pszAccessMethod;
  1793. CERT_ALT_NAME_ENTRY AccessLocation;
  1794. } CERT_ACCESS_DESCRIPTION,*PCERT_ACCESS_DESCRIPTION;
  1795. typedef struct _CERT_AUTHORITY_INFO_ACCESS {
  1796. DWORD cAccDescr;
  1797. PCERT_ACCESS_DESCRIPTION rgAccDescr;
  1798. } CERT_AUTHORITY_INFO_ACCESS,*PCERT_AUTHORITY_INFO_ACCESS;
  1799. typedef CERT_AUTHORITY_INFO_ACCESS CERT_SUBJECT_INFO_ACCESS,*PCERT_SUBJECT_INFO_ACCESS;
  1800. #define szOID_PKIX_ACC_DESCR "1.3.6.1.5.5.7.48"
  1801. #define szOID_PKIX_OCSP "1.3.6.1.5.5.7.48.1"
  1802. #define szOID_PKIX_CA_ISSUERS "1.3.6.1.5.5.7.48.2"
  1803. #define szOID_PKIX_TIME_STAMPING "1.3.6.1.5.5.7.48.3"
  1804. #define szOID_PKIX_CA_REPOSITORY "1.3.6.1.5.5.7.48.5"
  1805. #define CRL_REASON_UNSPECIFIED 0
  1806. #define CRL_REASON_KEY_COMPROMISE 1
  1807. #define CRL_REASON_CA_COMPROMISE 2
  1808. #define CRL_REASON_AFFILIATION_CHANGED 3
  1809. #define CRL_REASON_SUPERSEDED 4
  1810. #define CRL_REASON_CESSATION_OF_OPERATION 5
  1811. #define CRL_REASON_CERTIFICATE_HOLD 6
  1812. #define CRL_REASON_REMOVE_FROM_CRL 8
  1813. #define CRL_REASON_PRIVILEGE_WITHDRAWN 9
  1814. #define CRL_REASON_AA_COMPROMISE 10
  1815. typedef struct _CRL_DIST_POINT_NAME {
  1816. DWORD dwDistPointNameChoice;
  1817. __C89_NAMELESS union {
  1818. CERT_ALT_NAME_INFO FullName;
  1819. };
  1820. } CRL_DIST_POINT_NAME,*PCRL_DIST_POINT_NAME;
  1821. #define CRL_DIST_POINT_NO_NAME 0
  1822. #define CRL_DIST_POINT_FULL_NAME 1
  1823. #define CRL_DIST_POINT_ISSUER_RDN_NAME 2
  1824. typedef struct _CRL_DIST_POINT {
  1825. CRL_DIST_POINT_NAME DistPointName;
  1826. CRYPT_BIT_BLOB ReasonFlags;
  1827. CERT_ALT_NAME_INFO CRLIssuer;
  1828. } CRL_DIST_POINT,*PCRL_DIST_POINT;
  1829. #define CRL_REASON_UNUSED_FLAG 0x80
  1830. #define CRL_REASON_KEY_COMPROMISE_FLAG 0x40
  1831. #define CRL_REASON_CA_COMPROMISE_FLAG 0x20
  1832. #define CRL_REASON_AFFILIATION_CHANGED_FLAG 0x10
  1833. #define CRL_REASON_SUPERSEDED_FLAG 0x08
  1834. #define CRL_REASON_CESSATION_OF_OPERATION_FLAG 0x04
  1835. #define CRL_REASON_CERTIFICATE_HOLD_FLAG 0x02
  1836. #define CRL_REASON_PRIVILEGE_WITHDRAWN_FLAG 0x01
  1837. #define CRL_REASON_AA_COMPROMISE_FLAG 0x80
  1838. typedef struct _CRL_DIST_POINTS_INFO {
  1839. DWORD cDistPoint;
  1840. PCRL_DIST_POINT rgDistPoint;
  1841. } CRL_DIST_POINTS_INFO,*PCRL_DIST_POINTS_INFO;
  1842. #define CRL_DIST_POINT_ERR_INDEX_MASK 0x7f
  1843. #define CRL_DIST_POINT_ERR_INDEX_SHIFT 24
  1844. #define GET_CRL_DIST_POINT_ERR_INDEX(X) ((X >> CRL_DIST_POINT_ERR_INDEX_SHIFT) &CRL_DIST_POINT_ERR_INDEX_MASK)
  1845. #define CRL_DIST_POINT_ERR_CRL_ISSUER_BIT __MSABI_LONG(0x80000000)
  1846. #define IS_CRL_DIST_POINT_ERR_CRL_ISSUER(X) (0 != (X & CRL_DIST_POINT_ERR_CRL_ISSUER_BIT))
  1847. typedef struct _CROSS_CERT_DIST_POINTS_INFO {
  1848. DWORD dwSyncDeltaTime;
  1849. DWORD cDistPoint;
  1850. PCERT_ALT_NAME_INFO rgDistPoint;
  1851. } CROSS_CERT_DIST_POINTS_INFO,*PCROSS_CERT_DIST_POINTS_INFO;
  1852. #define CROSS_CERT_DIST_POINT_ERR_INDEX_MASK 0xff
  1853. #define CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT 24
  1854. #define GET_CROSS_CERT_DIST_POINT_ERR_INDEX(X) ((X >> CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT) &CROSS_CERT_DIST_POINT_ERR_INDEX_MASK)
  1855. typedef struct _CERT_PAIR {
  1856. CERT_BLOB Forward;
  1857. CERT_BLOB Reverse;
  1858. } CERT_PAIR,*PCERT_PAIR;
  1859. typedef struct _CRL_ISSUING_DIST_POINT {
  1860. CRL_DIST_POINT_NAME DistPointName;
  1861. WINBOOL fOnlyContainsUserCerts;
  1862. WINBOOL fOnlyContainsCACerts;
  1863. CRYPT_BIT_BLOB OnlySomeReasonFlags;
  1864. WINBOOL fIndirectCRL;
  1865. } CRL_ISSUING_DIST_POINT,*PCRL_ISSUING_DIST_POINT;
  1866. typedef struct _CERT_GENERAL_SUBTREE {
  1867. CERT_ALT_NAME_ENTRY Base;
  1868. DWORD dwMinimum;
  1869. WINBOOL fMaximum;
  1870. DWORD dwMaximum;
  1871. } CERT_GENERAL_SUBTREE,*PCERT_GENERAL_SUBTREE;
  1872. typedef struct _CERT_NAME_CONSTRAINTS_INFO {
  1873. DWORD cPermittedSubtree;
  1874. PCERT_GENERAL_SUBTREE rgPermittedSubtree;
  1875. DWORD cExcludedSubtree;
  1876. PCERT_GENERAL_SUBTREE rgExcludedSubtree;
  1877. } CERT_NAME_CONSTRAINTS_INFO,*PCERT_NAME_CONSTRAINTS_INFO;
  1878. #define CERT_EXCLUDED_SUBTREE_BIT __MSABI_LONG(0x80000000)
  1879. #define IS_CERT_EXCLUDED_SUBTREE(X) (0!=(X & CERT_EXCLUDED_SUBTREE_BIT))
  1880. #define SORTED_CTL_EXT_FLAGS_OFFSET (0)
  1881. #define SORTED_CTL_EXT_COUNT_OFFSET (4)
  1882. #define SORTED_CTL_EXT_MAX_COLLISION_OFFSET (8)
  1883. #define SORTED_CTL_EXT_HASH_BUCKET_OFFSET (12)
  1884. #define SORTED_CTL_EXT_HASHED_SUBJECT_IDENTIFIER_FLAG 0x1
  1885. typedef struct _CERT_DSS_PARAMETERS {
  1886. CRYPT_UINT_BLOB p;
  1887. CRYPT_UINT_BLOB q;
  1888. CRYPT_UINT_BLOB g;
  1889. } CERT_DSS_PARAMETERS,*PCERT_DSS_PARAMETERS;
  1890. #define CERT_DSS_R_LEN 20
  1891. #define CERT_DSS_S_LEN 20
  1892. #define CERT_DSS_SIGNATURE_LEN (CERT_DSS_R_LEN + CERT_DSS_S_LEN)
  1893. #define CERT_MAX_ASN_ENCODED_DSS_SIGNATURE_LEN (48)
  1894. typedef struct _CERT_DH_PARAMETERS {
  1895. CRYPT_UINT_BLOB p;
  1896. CRYPT_UINT_BLOB g;
  1897. } CERT_DH_PARAMETERS,*PCERT_DH_PARAMETERS;
  1898. typedef struct _CERT_ECC_SIGNATURE {
  1899. CRYPT_UINT_BLOB r;
  1900. CRYPT_UINT_BLOB s;
  1901. } CERT_ECC_SIGNATURE,*PCERT_ECC_SIGNATURE;
  1902. typedef struct _CERT_X942_DH_VALIDATION_PARAMS {
  1903. CRYPT_BIT_BLOB seed;
  1904. DWORD pgenCounter;
  1905. } CERT_X942_DH_VALIDATION_PARAMS,*PCERT_X942_DH_VALIDATION_PARAMS;
  1906. typedef struct _CERT_X942_DH_PARAMETERS {
  1907. CRYPT_UINT_BLOB p;
  1908. CRYPT_UINT_BLOB g;
  1909. CRYPT_UINT_BLOB q;
  1910. CRYPT_UINT_BLOB j;
  1911. PCERT_X942_DH_VALIDATION_PARAMS pValidationParams;
  1912. } CERT_X942_DH_PARAMETERS,*PCERT_X942_DH_PARAMETERS;
  1913. #define CRYPT_X942_COUNTER_BYTE_LENGTH 4
  1914. #define CRYPT_X942_KEY_LENGTH_BYTE_LENGTH 4
  1915. #define CRYPT_X942_PUB_INFO_BYTE_LENGTH (512/8)
  1916. typedef struct _CRYPT_X942_OTHER_INFO {
  1917. LPSTR pszContentEncryptionObjId;
  1918. BYTE rgbCounter[CRYPT_X942_COUNTER_BYTE_LENGTH];
  1919. BYTE rgbKeyLength[CRYPT_X942_KEY_LENGTH_BYTE_LENGTH];
  1920. CRYPT_DATA_BLOB PubInfo;
  1921. } CRYPT_X942_OTHER_INFO,*PCRYPT_X942_OTHER_INFO;
  1922. #define CRYPT_ECC_CMS_SHARED_INFO_SUPPPUBINFO_BYTE_LENGTH 4
  1923. typedef struct _CRYPT_ECC_CMS_SHARED_INFO {
  1924. CRYPT_ALGORITHM_IDENTIFIER Algorithm;
  1925. CRYPT_DATA_BLOB EntityUInfo;
  1926. BYTE rgbSuppPubInfo[CRYPT_ECC_CMS_SHARED_INFO_SUPPPUBINFO_BYTE_LENGTH];
  1927. } CRYPT_ECC_CMS_SHARED_INFO,*PCRYPT_ECC_CMS_SHARED_INFO;
  1928. typedef struct _CRYPT_RC2_CBC_PARAMETERS {
  1929. DWORD dwVersion;
  1930. WINBOOL fIV;
  1931. BYTE rgbIV[8];
  1932. } CRYPT_RC2_CBC_PARAMETERS,*PCRYPT_RC2_CBC_PARAMETERS;
  1933. #define CRYPT_RC2_40BIT_VERSION 160
  1934. #define CRYPT_RC2_56BIT_VERSION 52
  1935. #define CRYPT_RC2_64BIT_VERSION 120
  1936. #define CRYPT_RC2_128BIT_VERSION 58
  1937. typedef struct _CRYPT_SMIME_CAPABILITY {
  1938. LPSTR pszObjId;
  1939. CRYPT_OBJID_BLOB Parameters;
  1940. } CRYPT_SMIME_CAPABILITY,*PCRYPT_SMIME_CAPABILITY;
  1941. typedef struct _CRYPT_SMIME_CAPABILITIES {
  1942. DWORD cCapability;
  1943. PCRYPT_SMIME_CAPABILITY rgCapability;
  1944. } CRYPT_SMIME_CAPABILITIES,*PCRYPT_SMIME_CAPABILITIES;
  1945. typedef struct _CERT_QC_STATEMENT {
  1946. LPSTR pszStatementId;
  1947. CRYPT_OBJID_BLOB StatementInfo;
  1948. } CERT_QC_STATEMENT,*PCERT_QC_STATEMENT;
  1949. typedef struct _CERT_QC_STATEMENTS_EXT_INFO {
  1950. DWORD cStatement;
  1951. PCERT_QC_STATEMENT rgStatement;
  1952. } CERT_QC_STATEMENTS_EXT_INFO,*PCERT_QC_STATEMENTS_EXT_INFO;
  1953. #define szOID_QC_EU_COMPLIANCE "0.4.0.1862.1.1"
  1954. #define szOID_QC_SSCD "0.4.0.1862.1.4"
  1955. typedef struct _CRYPT_MASK_GEN_ALGORITHM {
  1956. LPSTR pszObjId;
  1957. CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
  1958. } CRYPT_MASK_GEN_ALGORITHM,*PCRYPT_MASK_GEN_ALGORITHM;
  1959. typedef struct _CRYPT_RSA_SSA_PSS_PARAMETERS {
  1960. CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
  1961. CRYPT_MASK_GEN_ALGORITHM MaskGenAlgorithm;
  1962. DWORD dwSaltLength;
  1963. DWORD dwTrailerField;
  1964. } CRYPT_RSA_SSA_PSS_PARAMETERS,*PCRYPT_RSA_SSA_PSS_PARAMETERS;
  1965. #define PKCS_RSA_SSA_PSS_TRAILER_FIELD_BC 1
  1966. typedef struct _CRYPT_PSOURCE_ALGORITHM {
  1967. LPSTR pszObjId;
  1968. CRYPT_DATA_BLOB EncodingParameters;
  1969. } CRYPT_PSOURCE_ALGORITHM,*PCRYPT_PSOURCE_ALGORITHM;
  1970. typedef struct _CRYPT_RSAES_OAEP_PARAMETERS {
  1971. CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
  1972. CRYPT_MASK_GEN_ALGORITHM MaskGenAlgorithm;
  1973. CRYPT_PSOURCE_ALGORITHM PSourceAlgorithm;
  1974. } CRYPT_RSAES_OAEP_PARAMETERS,*PCRYPT_RSAES_OAEP_PARAMETERS;
  1975. #define szOID_VERISIGN_PRIVATE_6_9 "2.16.840.1.113733.1.6.9"
  1976. #define szOID_VERISIGN_ONSITE_JURISDICTION_HASH "2.16.840.1.113733.1.6.11"
  1977. #define szOID_VERISIGN_BITSTRING_6_13 "2.16.840.1.113733.1.6.13"
  1978. #define szOID_VERISIGN_ISS_STRONG_CRYPTO "2.16.840.1.113733.1.8.1"
  1979. #define szOIDVerisign_MessageType "2.16.840.1.113733.1.9.2"
  1980. #define szOIDVerisign_PkiStatus "2.16.840.1.113733.1.9.3"
  1981. #define szOIDVerisign_FailInfo "2.16.840.1.113733.1.9.4"
  1982. #define szOIDVerisign_SenderNonce "2.16.840.1.113733.1.9.5"
  1983. #define szOIDVerisign_RecipientNonce "2.16.840.1.113733.1.9.6"
  1984. #define szOIDVerisign_TransactionID "2.16.840.1.113733.1.9.7"
  1985. #define szOID_NETSCAPE "2.16.840.1.113730"
  1986. #define szOID_NETSCAPE_CERT_EXTENSION "2.16.840.1.113730.1"
  1987. #define szOID_NETSCAPE_CERT_TYPE "2.16.840.1.113730.1.1"
  1988. #define szOID_NETSCAPE_BASE_URL "2.16.840.1.113730.1.2"
  1989. #define szOID_NETSCAPE_REVOCATION_URL "2.16.840.1.113730.1.3"
  1990. #define szOID_NETSCAPE_CA_REVOCATION_URL "2.16.840.1.113730.1.4"
  1991. #define szOID_NETSCAPE_CERT_RENEWAL_URL "2.16.840.1.113730.1.7"
  1992. #define szOID_NETSCAPE_CA_POLICY_URL "2.16.840.1.113730.1.8"
  1993. #define szOID_NETSCAPE_SSL_SERVER_NAME "2.16.840.1.113730.1.12"
  1994. #define szOID_NETSCAPE_COMMENT "2.16.840.1.113730.1.13"
  1995. #define szOID_NETSCAPE_DATA_TYPE "2.16.840.1.113730.2"
  1996. #define szOID_NETSCAPE_CERT_SEQUENCE "2.16.840.1.113730.2.5"
  1997. #define NETSCAPE_SIGN_CA_CERT_TYPE 0x01
  1998. #define NETSCAPE_SMIME_CA_CERT_TYPE 0x02
  1999. #define NETSCAPE_SSL_CA_CERT_TYPE 0x04
  2000. #define NETSCAPE_SIGN_CERT_TYPE 0x10
  2001. #define NETSCAPE_SMIME_CERT_TYPE 0x20
  2002. #define NETSCAPE_SSL_SERVER_AUTH_CERT_TYPE 0x40
  2003. #define NETSCAPE_SSL_CLIENT_AUTH_CERT_TYPE 0x80
  2004. #define szOID_CT_PKI_DATA "1.3.6.1.5.5.7.12.2"
  2005. #define szOID_CT_PKI_RESPONSE "1.3.6.1.5.5.7.12.3"
  2006. #define szOID_PKIX_NO_SIGNATURE "1.3.6.1.5.5.7.6.2"
  2007. #define szOID_CMC "1.3.6.1.5.5.7.7"
  2008. #define szOID_CMC_STATUS_INFO "1.3.6.1.5.5.7.7.1"
  2009. #define szOID_CMC_IDENTIFICATION "1.3.6.1.5.5.7.7.2"
  2010. #define szOID_CMC_IDENTITY_PROOF "1.3.6.1.5.5.7.7.3"
  2011. #define szOID_CMC_DATA_RETURN "1.3.6.1.5.5.7.7.4"
  2012. #define szOID_CMC_TRANSACTION_ID "1.3.6.1.5.5.7.7.5"
  2013. #define szOID_CMC_SENDER_NONCE "1.3.6.1.5.5.7.7.6"
  2014. #define szOID_CMC_RECIPIENT_NONCE "1.3.6.1.5.5.7.7.7"
  2015. #define szOID_CMC_ADD_EXTENSIONS "1.3.6.1.5.5.7.7.8"
  2016. #define szOID_CMC_ENCRYPTED_POP "1.3.6.1.5.5.7.7.9"
  2017. #define szOID_CMC_DECRYPTED_POP "1.3.6.1.5.5.7.7.10"
  2018. #define szOID_CMC_LRA_POP_WITNESS "1.3.6.1.5.5.7.7.11"
  2019. #define szOID_CMC_GET_CERT "1.3.6.1.5.5.7.7.15"
  2020. #define szOID_CMC_GET_CRL "1.3.6.1.5.5.7.7.16"
  2021. #define szOID_CMC_REVOKE_REQUEST "1.3.6.1.5.5.7.7.17"
  2022. #define szOID_CMC_REG_INFO "1.3.6.1.5.5.7.7.18"
  2023. #define szOID_CMC_RESPONSE_INFO "1.3.6.1.5.5.7.7.19"
  2024. #define szOID_CMC_QUERY_PENDING "1.3.6.1.5.5.7.7.21"
  2025. #define szOID_CMC_ID_POP_LINK_RANDOM "1.3.6.1.5.5.7.7.22"
  2026. #define szOID_CMC_ID_POP_LINK_WITNESS "1.3.6.1.5.5.7.7.23"
  2027. #define szOID_CMC_ID_CONFIRM_CERT_ACCEPTANCE "1.3.6.1.5.5.7.7.24"
  2028. #define szOID_CMC_ADD_ATTRIBUTES "1.3.6.1.4.1.311.10.10.1"
  2029. typedef struct _CMC_TAGGED_ATTRIBUTE {
  2030. DWORD dwBodyPartID;
  2031. CRYPT_ATTRIBUTE Attribute;
  2032. } CMC_TAGGED_ATTRIBUTE,*PCMC_TAGGED_ATTRIBUTE;
  2033. typedef struct _CMC_TAGGED_CERT_REQUEST {
  2034. DWORD dwBodyPartID;
  2035. CRYPT_DER_BLOB SignedCertRequest;
  2036. } CMC_TAGGED_CERT_REQUEST,*PCMC_TAGGED_CERT_REQUEST;
  2037. typedef struct _CMC_TAGGED_REQUEST {
  2038. DWORD dwTaggedRequestChoice;
  2039. __C89_NAMELESS union {
  2040. PCMC_TAGGED_CERT_REQUEST pTaggedCertRequest;
  2041. };
  2042. } CMC_TAGGED_REQUEST,*PCMC_TAGGED_REQUEST;
  2043. #define CMC_TAGGED_CERT_REQUEST_CHOICE 1
  2044. typedef struct _CMC_TAGGED_CONTENT_INFO {
  2045. DWORD dwBodyPartID;
  2046. CRYPT_DER_BLOB EncodedContentInfo;
  2047. } CMC_TAGGED_CONTENT_INFO,*PCMC_TAGGED_CONTENT_INFO;
  2048. typedef struct _CMC_TAGGED_OTHER_MSG {
  2049. DWORD dwBodyPartID;
  2050. LPSTR pszObjId;
  2051. CRYPT_OBJID_BLOB Value;
  2052. } CMC_TAGGED_OTHER_MSG,*PCMC_TAGGED_OTHER_MSG;
  2053. typedef struct _CMC_DATA_INFO {
  2054. DWORD cTaggedAttribute;
  2055. PCMC_TAGGED_ATTRIBUTE rgTaggedAttribute;
  2056. DWORD cTaggedRequest;
  2057. PCMC_TAGGED_REQUEST rgTaggedRequest;
  2058. DWORD cTaggedContentInfo;
  2059. PCMC_TAGGED_CONTENT_INFO rgTaggedContentInfo;
  2060. DWORD cTaggedOtherMsg;
  2061. PCMC_TAGGED_OTHER_MSG rgTaggedOtherMsg;
  2062. } CMC_DATA_INFO,*PCMC_DATA_INFO;
  2063. typedef struct _CMC_RESPONSE_INFO {
  2064. DWORD cTaggedAttribute;
  2065. PCMC_TAGGED_ATTRIBUTE rgTaggedAttribute;
  2066. DWORD cTaggedContentInfo;
  2067. PCMC_TAGGED_CONTENT_INFO rgTaggedContentInfo;
  2068. DWORD cTaggedOtherMsg;
  2069. PCMC_TAGGED_OTHER_MSG rgTaggedOtherMsg;
  2070. } CMC_RESPONSE_INFO,*PCMC_RESPONSE_INFO;
  2071. typedef struct _CMC_PEND_INFO {
  2072. CRYPT_DATA_BLOB PendToken;
  2073. FILETIME PendTime;
  2074. } CMC_PEND_INFO,*PCMC_PEND_INFO;
  2075. typedef struct _CMC_STATUS_INFO {
  2076. DWORD dwStatus;
  2077. DWORD cBodyList;
  2078. DWORD *rgdwBodyList;
  2079. LPWSTR pwszStatusString;
  2080. DWORD dwOtherInfoChoice;
  2081. __C89_NAMELESS union {
  2082. DWORD dwFailInfo;
  2083. PCMC_PEND_INFO pPendInfo;
  2084. };
  2085. } CMC_STATUS_INFO,*PCMC_STATUS_INFO;
  2086. #define CMC_OTHER_INFO_NO_CHOICE 0
  2087. #define CMC_OTHER_INFO_FAIL_CHOICE 1
  2088. #define CMC_OTHER_INFO_PEND_CHOICE 2
  2089. #define CMC_STATUS_SUCCESS 0
  2090. #define CMC_STATUS_FAILED 2
  2091. #define CMC_STATUS_PENDING 3
  2092. #define CMC_STATUS_NO_SUPPORT 4
  2093. #define CMC_STATUS_CONFIRM_REQUIRED 5
  2094. #define CMC_FAIL_BAD_ALG 0
  2095. #define CMC_FAIL_BAD_MESSAGE_CHECK 1
  2096. #define CMC_FAIL_BAD_REQUEST 2
  2097. #define CMC_FAIL_BAD_TIME 3
  2098. #define CMC_FAIL_BAD_CERT_ID 4
  2099. #define CMC_FAIL_UNSUPORTED_EXT 5
  2100. #define CMC_FAIL_MUST_ARCHIVE_KEYS 6
  2101. #define CMC_FAIL_BAD_IDENTITY 7
  2102. #define CMC_FAIL_POP_REQUIRED 8
  2103. #define CMC_FAIL_POP_FAILED 9
  2104. #define CMC_FAIL_NO_KEY_REUSE 10
  2105. #define CMC_FAIL_INTERNAL_CA_ERROR 11
  2106. #define CMC_FAIL_TRY_LATER 12
  2107. typedef struct _CMC_ADD_EXTENSIONS_INFO {
  2108. DWORD dwCmcDataReference;
  2109. DWORD cCertReference;
  2110. DWORD *rgdwCertReference;
  2111. DWORD cExtension;
  2112. PCERT_EXTENSION rgExtension;
  2113. } CMC_ADD_EXTENSIONS_INFO,*PCMC_ADD_EXTENSIONS_INFO;
  2114. typedef struct _CMC_ADD_ATTRIBUTES_INFO {
  2115. DWORD dwCmcDataReference;
  2116. DWORD cCertReference;
  2117. DWORD *rgdwCertReference;
  2118. DWORD cAttribute;
  2119. PCRYPT_ATTRIBUTE rgAttribute;
  2120. } CMC_ADD_ATTRIBUTES_INFO,*PCMC_ADD_ATTRIBUTES_INFO;
  2121. typedef struct _CERT_TEMPLATE_EXT {
  2122. LPSTR pszObjId;
  2123. DWORD dwMajorVersion;
  2124. WINBOOL fMinorVersion;
  2125. DWORD dwMinorVersion;
  2126. } CERT_TEMPLATE_EXT,*PCERT_TEMPLATE_EXT;
  2127. typedef struct _CERT_HASHED_URL {
  2128. CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
  2129. CRYPT_HASH_BLOB Hash;
  2130. LPWSTR pwszUrl;
  2131. } CERT_HASHED_URL,*PCERT_HASHED_URL;
  2132. typedef struct _CERT_LOGOTYPE_DETAILS {
  2133. LPWSTR pwszMimeType;
  2134. DWORD cHashedUrl;
  2135. PCERT_HASHED_URL rgHashedUrl;
  2136. } CERT_LOGOTYPE_DETAILS,*PCERT_LOGOTYPE_DETAILS;
  2137. typedef struct _CERT_LOGOTYPE_REFERENCE {
  2138. DWORD cHashedUrl;
  2139. PCERT_HASHED_URL rgHashedUrl;
  2140. } CERT_LOGOTYPE_REFERENCE,*PCERT_LOGOTYPE_REFERENCE;
  2141. typedef struct _CERT_LOGOTYPE_IMAGE_INFO {
  2142. DWORD dwLogotypeImageInfoChoice;
  2143. DWORD dwFileSize;
  2144. DWORD dwXSize;
  2145. DWORD dwYSize;
  2146. DWORD dwLogotypeImageResolutionChoice;
  2147. __C89_NAMELESS union {
  2148. DWORD dwNumBits;
  2149. DWORD dwTableSize;
  2150. };
  2151. LPWSTR pwszLanguage;
  2152. } CERT_LOGOTYPE_IMAGE_INFO,*PCERT_LOGOTYPE_IMAGE_INFO;
  2153. #define CERT_LOGOTYPE_GRAY_SCALE_IMAGE_INFO_CHOICE 1
  2154. #define CERT_LOGOTYPE_COLOR_IMAGE_INFO_CHOICE 2
  2155. #define CERT_LOGOTYPE_NO_IMAGE_RESOLUTION_CHOICE 0
  2156. #define CERT_LOGOTYPE_BITS_IMAGE_RESOLUTION_CHOICE 1
  2157. #define CERT_LOGOTYPE_TABLE_SIZE_IMAGE_RESOLUTION_CHOICE 2
  2158. typedef struct _CERT_LOGOTYPE_IMAGE {
  2159. CERT_LOGOTYPE_DETAILS LogotypeDetails;
  2160. PCERT_LOGOTYPE_IMAGE_INFO pLogotypeImageInfo;
  2161. } CERT_LOGOTYPE_IMAGE,*PCERT_LOGOTYPE_IMAGE;
  2162. typedef struct _CERT_LOGOTYPE_AUDIO_INFO {
  2163. DWORD dwFileSize;
  2164. DWORD dwPlayTime;
  2165. DWORD dwChannels;
  2166. DWORD dwSampleRate;
  2167. LPWSTR pwszLanguage;
  2168. } CERT_LOGOTYPE_AUDIO_INFO,*PCERT_LOGOTYPE_AUDIO_INFO;
  2169. typedef struct _CERT_LOGOTYPE_AUDIO {
  2170. CERT_LOGOTYPE_DETAILS LogotypeDetails;
  2171. PCERT_LOGOTYPE_AUDIO_INFO pLogotypeAudioInfo;
  2172. } CERT_LOGOTYPE_AUDIO,*PCERT_LOGOTYPE_AUDIO;
  2173. typedef struct _CERT_LOGOTYPE_DATA {
  2174. DWORD cLogotypeImage;
  2175. PCERT_LOGOTYPE_IMAGE rgLogotypeImage;
  2176. DWORD cLogotypeAudio;
  2177. PCERT_LOGOTYPE_AUDIO rgLogotypeAudio;
  2178. } CERT_LOGOTYPE_DATA,*PCERT_LOGOTYPE_DATA;
  2179. typedef struct _CERT_LOGOTYPE_INFO {
  2180. DWORD dwLogotypeInfoChoice;
  2181. __C89_NAMELESS union {
  2182. PCERT_LOGOTYPE_DATA pLogotypeDirectInfo;
  2183. PCERT_LOGOTYPE_REFERENCE pLogotypeIndirectInfo;
  2184. };
  2185. } CERT_LOGOTYPE_INFO,*PCERT_LOGOTYPE_INFO;
  2186. #define CERT_LOGOTYPE_DIRECT_INFO_CHOICE 1
  2187. #define CERT_LOGOTYPE_INDIRECT_INFO_CHOICE 2
  2188. typedef struct _CERT_OTHER_LOGOTYPE_INFO {
  2189. LPSTR pszObjId;
  2190. CERT_LOGOTYPE_INFO LogotypeInfo;
  2191. } CERT_OTHER_LOGOTYPE_INFO,*PCERT_OTHER_LOGOTYPE_INFO;
  2192. #define szOID_LOYALTY_OTHER_LOGOTYPE "1.3.6.1.5.5.7.20.1"
  2193. #define szOID_BACKGROUND_OTHER_LOGOTYPE "1.3.6.1.5.5.7.20.2"
  2194. typedef struct _CERT_LOGOTYPE_EXT_INFO {
  2195. DWORD cCommunityLogo;
  2196. PCERT_LOGOTYPE_INFO rgCommunityLogo;
  2197. PCERT_LOGOTYPE_INFO pIssuerLogo;
  2198. PCERT_LOGOTYPE_INFO pSubjectLogo;
  2199. DWORD cOtherLogo;
  2200. PCERT_OTHER_LOGOTYPE_INFO rgOtherLogo;
  2201. } CERT_LOGOTYPE_EXT_INFO,*PCERT_LOGOTYPE_EXT_INFO;
  2202. typedef struct _CERT_BIOMETRIC_DATA {
  2203. DWORD dwTypeOfBiometricDataChoice;
  2204. __C89_NAMELESS union {
  2205. DWORD dwPredefined;
  2206. LPSTR pszObjId;
  2207. };
  2208. CERT_HASHED_URL HashedUrl;
  2209. } CERT_BIOMETRIC_DATA,*PCERT_BIOMETRIC_DATA;
  2210. #define CERT_BIOMETRIC_PREDEFINED_DATA_CHOICE 1
  2211. #define CERT_BIOMETRIC_OID_DATA_CHOICE 2
  2212. #define CERT_BIOMETRIC_PICTURE_TYPE 0
  2213. #define CERT_BIOMETRIC_SIGNATURE_TYPE 1
  2214. typedef struct _CERT_BIOMETRIC_EXT_INFO {
  2215. DWORD cBiometricData;
  2216. PCERT_BIOMETRIC_DATA rgBiometricData;
  2217. } CERT_BIOMETRIC_EXT_INFO,*PCERT_BIOMETRIC_EXT_INFO;
  2218. typedef struct _OCSP_SIGNATURE_INFO {
  2219. CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
  2220. CRYPT_BIT_BLOB Signature;
  2221. DWORD cCertEncoded;
  2222. PCERT_BLOB rgCertEncoded;
  2223. } OCSP_SIGNATURE_INFO,*POCSP_SIGNATURE_INFO;
  2224. typedef struct _OCSP_SIGNED_REQUEST_INFO {
  2225. CRYPT_DER_BLOB ToBeSigned;
  2226. POCSP_SIGNATURE_INFO pOptionalSignatureInfo;
  2227. } OCSP_SIGNED_REQUEST_INFO,*POCSP_SIGNED_REQUEST_INFO;
  2228. typedef struct _OCSP_CERT_ID {
  2229. CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
  2230. CRYPT_HASH_BLOB IssuerNameHash;
  2231. CRYPT_HASH_BLOB IssuerKeyHash;
  2232. CRYPT_INTEGER_BLOB SerialNumber;
  2233. } OCSP_CERT_ID,*POCSP_CERT_ID;
  2234. typedef struct _OCSP_REQUEST_ENTRY {
  2235. OCSP_CERT_ID CertId;
  2236. DWORD cExtension;
  2237. PCERT_EXTENSION rgExtension;
  2238. } OCSP_REQUEST_ENTRY,*POCSP_REQUEST_ENTRY;
  2239. typedef struct _OCSP_REQUEST_INFO {
  2240. DWORD dwVersion;
  2241. PCERT_ALT_NAME_ENTRY pRequestorName;
  2242. DWORD cRequestEntry;
  2243. POCSP_REQUEST_ENTRY rgRequestEntry;
  2244. DWORD cExtension;
  2245. PCERT_EXTENSION rgExtension;
  2246. } OCSP_REQUEST_INFO,*POCSP_REQUEST_INFO;
  2247. #define OCSP_REQUEST_V1 0
  2248. typedef struct _OCSP_RESPONSE_INFO {
  2249. DWORD dwStatus;
  2250. LPSTR pszObjId;
  2251. CRYPT_OBJID_BLOB Value;
  2252. } OCSP_RESPONSE_INFO,*POCSP_RESPONSE_INFO;
  2253. #define OCSP_SUCCESSFUL_RESPONSE 0
  2254. #define OCSP_MALFORMED_REQUEST_RESPONSE 1
  2255. #define OCSP_INTERNAL_ERROR_RESPONSE 2
  2256. #define OCSP_TRY_LATER_RESPONSE 3
  2257. #define OCSP_SIG_REQUIRED_RESPONSE 5
  2258. #define OCSP_UNAUTHORIZED_RESPONSE 6
  2259. #define szOID_PKIX_OCSP_BASIC_SIGNED_RESPONSE "1.3.6.1.5.5.7.48.1.1"
  2260. typedef struct _OCSP_BASIC_SIGNED_RESPONSE_INFO {
  2261. CRYPT_DER_BLOB ToBeSigned;
  2262. OCSP_SIGNATURE_INFO SignatureInfo;
  2263. } OCSP_BASIC_SIGNED_RESPONSE_INFO,*POCSP_BASIC_SIGNED_RESPONSE_INFO;
  2264. typedef struct _OCSP_BASIC_REVOKED_INFO {
  2265. FILETIME RevocationDate;
  2266. DWORD dwCrlReasonCode;
  2267. } OCSP_BASIC_REVOKED_INFO,*POCSP_BASIC_REVOKED_INFO;
  2268. typedef struct _OCSP_BASIC_RESPONSE_ENTRY {
  2269. OCSP_CERT_ID CertId;
  2270. DWORD dwCertStatus;
  2271. __C89_NAMELESS union {
  2272. POCSP_BASIC_REVOKED_INFO pRevokedInfo;
  2273. };
  2274. FILETIME ThisUpdate;
  2275. FILETIME NextUpdate;
  2276. DWORD cExtension;
  2277. PCERT_EXTENSION rgExtension;
  2278. } OCSP_BASIC_RESPONSE_ENTRY,*POCSP_BASIC_RESPONSE_ENTRY;
  2279. #define OCSP_BASIC_GOOD_CERT_STATUS 0
  2280. #define OCSP_BASIC_REVOKED_CERT_STATUS 1
  2281. #define OCSP_BASIC_UNKNOWN_CERT_STATUS 2
  2282. typedef struct _OCSP_BASIC_RESPONSE_INFO {
  2283. DWORD dwVersion;
  2284. DWORD dwResponderIdChoice;
  2285. __C89_NAMELESS union {
  2286. CERT_NAME_BLOB ByNameResponderId;
  2287. CRYPT_HASH_BLOB ByKeyResponderId;
  2288. };
  2289. FILETIME ProducedAt;
  2290. DWORD cResponseEntry;
  2291. POCSP_BASIC_RESPONSE_ENTRY rgResponseEntry;
  2292. DWORD cExtension;
  2293. PCERT_EXTENSION rgExtension;
  2294. } OCSP_BASIC_RESPONSE_INFO,*POCSP_BASIC_RESPONSE_INFO;
  2295. #define OCSP_BASIC_RESPONSE_V1 0
  2296. #define OCSP_BASIC_BY_NAME_RESPONDER_ID 1
  2297. #define OCSP_BASIC_BY_KEY_RESPONDER_ID 2
  2298. typedef struct _CERT_SUPPORTED_ALGORITHM_INFO {
  2299. CRYPT_ALGORITHM_IDENTIFIER Algorithm;
  2300. CRYPT_BIT_BLOB IntendedKeyUsage;
  2301. CERT_POLICIES_INFO IntendedCertPolicies;
  2302. } CERT_SUPPORTED_ALGORITHM_INFO, *PCERT_SUPPORTED_ALGORITHM_INFO;
  2303. typedef struct _CERT_TPM_SPECIFICATION_INFO {
  2304. LPWSTR pwszFamily;
  2305. DWORD dwLevel;
  2306. DWORD dwRevision;
  2307. } CERT_TPM_SPECIFICATION_INFO, *PCERT_TPM_SPECIFICATION_INFO;
  2308. typedef void *HCRYPTOIDFUNCSET;
  2309. typedef void *HCRYPTOIDFUNCADDR;
  2310. #define CRYPT_OID_ENCODE_OBJECT_FUNC "CryptDllEncodeObject"
  2311. #define CRYPT_OID_DECODE_OBJECT_FUNC "CryptDllDecodeObject"
  2312. #define CRYPT_OID_ENCODE_OBJECT_EX_FUNC "CryptDllEncodeObjectEx"
  2313. #define CRYPT_OID_DECODE_OBJECT_EX_FUNC "CryptDllDecodeObjectEx"
  2314. #define CRYPT_OID_CREATE_COM_OBJECT_FUNC "CryptDllCreateCOMObject"
  2315. #define CRYPT_OID_VERIFY_REVOCATION_FUNC "CertDllVerifyRevocation"
  2316. #define CRYPT_OID_VERIFY_CTL_USAGE_FUNC "CertDllVerifyCTLUsage"
  2317. #define CRYPT_OID_FORMAT_OBJECT_FUNC "CryptDllFormatObject"
  2318. #define CRYPT_OID_FIND_OID_INFO_FUNC "CryptDllFindOIDInfo"
  2319. #define CRYPT_OID_FIND_LOCALIZED_NAME_FUNC "CryptDllFindLocalizedName"
  2320. #define CRYPT_OID_REGPATH "Software\\Microsoft\\Cryptography\\OID"
  2321. #define CRYPT_OID_REG_ENCODING_TYPE_PREFIX "EncodingType "
  2322. #define CRYPT_OID_REG_DLL_VALUE_NAME L"Dll"
  2323. #define CRYPT_OID_REG_FUNC_NAME_VALUE_NAME L"FuncName"
  2324. #define CRYPT_OID_REG_FUNC_NAME_VALUE_NAME_A "FuncName"
  2325. #define CRYPT_OID_REG_FLAGS_VALUE_NAME L"CryptFlags"
  2326. #define CRYPT_DEFAULT_OID "DEFAULT"
  2327. typedef struct _CRYPT_OID_FUNC_ENTRY {
  2328. LPCSTR pszOID;
  2329. void *pvFuncAddr;
  2330. } CRYPT_OID_FUNC_ENTRY,*PCRYPT_OID_FUNC_ENTRY;
  2331. #define CRYPT_INSTALL_OID_FUNC_BEFORE_FLAG 1
  2332. #define CRYPT_GET_INSTALLED_OID_FUNC_FLAG 0x1
  2333. #define CRYPT_REGISTER_FIRST_INDEX 0
  2334. #define CRYPT_REGISTER_LAST_INDEX 0xffffffff
  2335. WINIMPM WINBOOL WINAPI CryptInstallOIDFunctionAddress (HMODULE hModule, DWORD dwEncodingType, LPCSTR pszFuncName, DWORD cFuncEntry, const CRYPT_OID_FUNC_ENTRY rgFuncEntry[], DWORD dwFlags);
  2336. WINIMPM HCRYPTOIDFUNCSET WINAPI CryptInitOIDFunctionSet (LPCSTR pszFuncName, DWORD dwFlags);
  2337. WINIMPM WINBOOL WINAPI CryptGetOIDFunctionAddress (HCRYPTOIDFUNCSET hFuncSet, DWORD dwEncodingType, LPCSTR pszOID, DWORD dwFlags, void **ppvFuncAddr, HCRYPTOIDFUNCADDR *phFuncAddr);
  2338. WINIMPM WINBOOL WINAPI CryptGetDefaultOIDDllList (HCRYPTOIDFUNCSET hFuncSet, DWORD dwEncodingType, WCHAR *pwszDllList, DWORD *pcchDllList);
  2339. WINIMPM WINBOOL WINAPI CryptGetDefaultOIDFunctionAddress (HCRYPTOIDFUNCSET hFuncSet, DWORD dwEncodingType, LPCWSTR pwszDll, DWORD dwFlags, void **ppvFuncAddr, HCRYPTOIDFUNCADDR *phFuncAddr);
  2340. WINIMPM WINBOOL WINAPI CryptFreeOIDFunctionAddress (HCRYPTOIDFUNCADDR hFuncAddr, DWORD dwFlags);
  2341. WINIMPM WINBOOL WINAPI CryptRegisterOIDFunction (DWORD dwEncodingType, LPCSTR pszFuncName, LPCSTR pszOID, LPCWSTR pwszDll, LPCSTR pszOverrideFuncName);
  2342. WINIMPM WINBOOL WINAPI CryptUnregisterOIDFunction (DWORD dwEncodingType, LPCSTR pszFuncName, LPCSTR pszOID);
  2343. WINIMPM WINBOOL WINAPI CryptRegisterDefaultOIDFunction (DWORD dwEncodingType, LPCSTR pszFuncName, DWORD dwIndex, LPCWSTR pwszDll);
  2344. WINIMPM WINBOOL WINAPI CryptUnregisterDefaultOIDFunction (DWORD dwEncodingType, LPCSTR pszFuncName, LPCWSTR pwszDll);
  2345. WINIMPM WINBOOL WINAPI CryptSetOIDFunctionValue (DWORD dwEncodingType, LPCSTR pszFuncName, LPCSTR pszOID, LPCWSTR pwszValueName, DWORD dwValueType, const BYTE *pbValueData, DWORD cbValueData);
  2346. WINIMPM WINBOOL WINAPI CryptGetOIDFunctionValue (DWORD dwEncodingType, LPCSTR pszFuncName, LPCSTR pszOID, LPCWSTR pwszValueName, DWORD *pdwValueType, BYTE *pbValueData, DWORD *pcbValueData);
  2347. typedef WINBOOL (WINAPI *PFN_CRYPT_ENUM_OID_FUNC) (DWORD dwEncodingType, LPCSTR pszFuncName, LPCSTR pszOID, DWORD cValue, const DWORD rgdwValueType[], LPCWSTR const rgpwszValueName[], const BYTE *const rgpbValueData[], const DWORD rgcbValueData[], void *pvArg);
  2348. WINIMPM WINBOOL WINAPI CryptEnumOIDFunction (DWORD dwEncodingType, LPCSTR pszFuncName, LPCSTR pszOID, DWORD dwFlags, void *pvArg, PFN_CRYPT_ENUM_OID_FUNC pfnEnumOIDFunc);
  2349. #define CRYPT_MATCH_ANY_ENCODING_TYPE 0xffffffff
  2350. #define CALG_OID_INFO_CNG_ONLY 0xffffffff
  2351. #define CALG_OID_INFO_PARAMETERS 0xfffffffe
  2352. #define IS_SPECIAL_OID_INFO_ALGID(Algid) (Algid >= CALG_OID_INFO_PARAMETERS)
  2353. #define CRYPT_OID_INFO_HASH_PARAMETERS_ALGORITHM L"CryptOIDInfoHashParameters"
  2354. #define CRYPT_OID_INFO_ECC_PARAMETERS_ALGORITHM L"CryptOIDInfoECCParameters"
  2355. #define CRYPT_OID_INFO_MGF1_PARAMETERS_ALGORITHM L"CryptOIDInfoMgf1Parameters"
  2356. #define CRYPT_OID_INFO_NO_SIGN_ALGORITHM L"CryptOIDInfoNoSign"
  2357. #define CRYPT_OID_INFO_OAEP_PARAMETERS_ALGORITHM L"CryptOIDInfoOAEPParameters"
  2358. #define CRYPT_OID_INFO_ECC_WRAP_PARAMETERS_ALGORITHM L"CryptOIDInfoECCWrapParameters"
  2359. #define CRYPT_OID_INFO_NO_PARAMETERS_ALGORITHM L"CryptOIDInfoNoParameters"
  2360. typedef struct _CRYPT_OID_INFO {
  2361. DWORD cbSize;
  2362. LPCSTR pszOID;
  2363. LPCWSTR pwszName;
  2364. DWORD dwGroupId;
  2365. __C89_NAMELESS union {
  2366. DWORD dwValue;
  2367. ALG_ID Algid;
  2368. DWORD dwLength;
  2369. };
  2370. CRYPT_DATA_BLOB ExtraInfo;
  2371. #ifdef CRYPT_OID_INFO_HAS_EXTRA_FIELDS
  2372. LPCWSTR pwszCNGAlgid;
  2373. LPCWSTR pwszCNGExtraAlgid;
  2374. #endif
  2375. } CRYPT_OID_INFO,*PCRYPT_OID_INFO;
  2376. typedef const CRYPT_OID_INFO CCRYPT_OID_INFO,*PCCRYPT_OID_INFO;
  2377. #define CRYPT_HASH_ALG_OID_GROUP_ID 1
  2378. #define CRYPT_ENCRYPT_ALG_OID_GROUP_ID 2
  2379. #define CRYPT_PUBKEY_ALG_OID_GROUP_ID 3
  2380. #define CRYPT_SIGN_ALG_OID_GROUP_ID 4
  2381. #define CRYPT_RDN_ATTR_OID_GROUP_ID 5
  2382. #define CRYPT_EXT_OR_ATTR_OID_GROUP_ID 6
  2383. #define CRYPT_ENHKEY_USAGE_OID_GROUP_ID 7
  2384. #define CRYPT_POLICY_OID_GROUP_ID 8
  2385. #define CRYPT_TEMPLATE_OID_GROUP_ID 9
  2386. #define CRYPT_KDF_OID_GROUP_ID 10
  2387. #define CRYPT_LAST_OID_GROUP_ID 10
  2388. #define CRYPT_FIRST_ALG_OID_GROUP_ID CRYPT_HASH_ALG_OID_GROUP_ID
  2389. #define CRYPT_LAST_ALG_OID_GROUP_ID CRYPT_SIGN_ALG_OID_GROUP_ID
  2390. #define CRYPT_OID_INHIBIT_SIGNATURE_FORMAT_FLAG 0x1
  2391. #define CRYPT_OID_USE_PUBKEY_PARA_FOR_PKCS7_FLAG 0x2
  2392. #define CRYPT_OID_NO_NULL_ALGORITHM_PARA_FLAG 0x4
  2393. #define CRYPT_OID_PUBKEY_ENCRYPT_ONLY_FLAG 0x40000000
  2394. #define CRYPT_OID_PUBKEY_SIGN_ONLY_FLAG 0x80000000
  2395. #define CRYPT_OID_USE_CURVE_NAME_FOR_ENCODE_FLAG 0x20000000
  2396. #define CRYPT_OID_USE_CURVE_PARAMETERS_FOR_ENCODE_FLAG 0x10000000
  2397. WINIMPM PCCRYPT_OID_INFO WINAPI CryptFindOIDInfo (DWORD dwKeyType, void *pvKey, DWORD dwGroupId);
  2398. #define CRYPT_OID_INFO_OID_KEY 1
  2399. #define CRYPT_OID_INFO_NAME_KEY 2
  2400. #define CRYPT_OID_INFO_ALGID_KEY 3
  2401. #define CRYPT_OID_INFO_SIGN_KEY 4
  2402. #define CRYPT_OID_INFO_CNG_ALGID_KEY 5
  2403. #define CRYPT_OID_INFO_CNG_SIGN_KEY 6
  2404. #define CRYPT_OID_INFO_OID_KEY_FLAGS_MASK 0xffff0000
  2405. #define CRYPT_OID_INFO_PUBKEY_SIGN_KEY_FLAG 0x80000000
  2406. #define CRYPT_OID_INFO_PUBKEY_ENCRYPT_KEY_FLAG 0x40000000
  2407. #define CRYPT_OID_DISABLE_SEARCH_DS_FLAG 0x80000000
  2408. #ifdef CRYPT_OID_INFO_HAS_EXTRA_FIELDS
  2409. #define CRYPT_OID_PREFER_CNG_ALGID_FLAG 0x40000000
  2410. #endif
  2411. #define CRYPT_OID_INFO_OID_GROUP_BIT_LEN_MASK 0x0fff0000
  2412. #define CRYPT_OID_INFO_OID_GROUP_BIT_LEN_SHIFT 16
  2413. #define CRYPT_INSTALL_OID_INFO_BEFORE_FLAG 1
  2414. typedef WINBOOL (WINAPI *PFN_CRYPT_ENUM_OID_INFO) (PCCRYPT_OID_INFO pInfo, void *pvArg);
  2415. WINIMPM WINBOOL WINAPI CryptRegisterOIDInfo (PCCRYPT_OID_INFO pInfo, DWORD dwFlags);
  2416. WINIMPM WINBOOL WINAPI CryptUnregisterOIDInfo (PCCRYPT_OID_INFO pInfo);
  2417. WINIMPM WINBOOL WINAPI CryptEnumOIDInfo (DWORD dwGroupId, DWORD dwFlags, void *pvArg, PFN_CRYPT_ENUM_OID_INFO pfnEnumOIDInfo);
  2418. WINIMPM LPCWSTR WINAPI CryptFindLocalizedName (LPCWSTR pwszCryptName);
  2419. #define CRYPT_LOCALIZED_NAME_ENCODING_TYPE 0
  2420. #define CRYPT_LOCALIZED_NAME_OID "LocalizedNames"
  2421. #define CERT_STRONG_SIGN_ECDSA_ALGORITHM L"ECDSA"
  2422. typedef struct _CERT_STRONG_SIGN_SERIALIZED_INFO {
  2423. DWORD dwFlags;
  2424. LPWSTR pwszCNGSignHashAlgids;
  2425. LPWSTR pwszCNGPubKeyMinBitLengths;
  2426. } CERT_STRONG_SIGN_SERIALIZED_INFO,*PCERT_STRONG_SIGN_SERIALIZED_INFO;
  2427. typedef struct _CERT_STRONG_SIGN_PARA {
  2428. DWORD cbSize;
  2429. DWORD dwInfoChoice;
  2430. __C89_NAMELESS union {
  2431. void *pvInfo;
  2432. PCERT_STRONG_SIGN_SERIALIZED_INFO pSerializedInfo;
  2433. LPSTR pszOID;
  2434. };
  2435. } CERT_STRONG_SIGN_PARA,*PCERT_STRONG_SIGN_PARA;
  2436. typedef const CERT_STRONG_SIGN_PARA *PCCERT_STRONG_SIGN_PARA;
  2437. #define CERT_STRONG_SIGN_SERIALIZED_INFO_CHOICE 1
  2438. #define CERT_STRONG_SIGN_OID_INFO_CHOICE 2
  2439. #define CERT_STRONG_SIGN_ENABLE_CRL_CHECK 0x1
  2440. #define CERT_STRONG_SIGN_ENABLE_OCSP_CHECK 0x2
  2441. #define szOID_CERT_STRONG_SIGN_OS_PREFIX "1.3.6.1.4.1.311.72.1."
  2442. #define szOID_CERT_STRONG_SIGN_OS_1 "1.3.6.1.4.1.311.72.1.1"
  2443. #define szOID_CERT_STRONG_SIGN_OS_CURRENT szOID_CERT_STRONG_SIGN_OS_1
  2444. #define CERT_STRONG_SIGN_PARA_OS_1 { sizeof (CERT_STRONG_SIGN_PARA), CERT_STRONG_SIGN_OID_INFO_CHOICE, szOID_CERT_STRONG_SIGN_OS_1 }
  2445. #define CERT_STRONG_SIGN_PARA_OS_CURRENT { sizeof (CERT_STRONG_SIGN_PARA), CERT_STRONG_SIGN_OID_INFO_CHOICE, szOID_CERT_STRONG_SIGN_OS_CURRENT }
  2446. #define szOID_CERT_STRONG_KEY_OS_PREFIX "1.3.6.1.4.1.311.72.2."
  2447. #define szOID_CERT_STRONG_KEY_OS_1 "1.3.6.1.4.1.311.72.2.1"
  2448. #define szOID_CERT_STRONG_KEY_OS_CURRENT szOID_CERT_STRONG_KEY_OS_1
  2449. #define CERT_STRONG_KEY_PARA_OS_1 { sizeof (CERT_STRONG_SIGN_PARA), CERT_STRONG_SIGN_OID_INFO_CHOICE, szOID_CERT_STRONG_KEY_OS_1 }
  2450. #define CERT_STRONG_KEY_PARA_OS_CURRENT { sizeof (CERT_STRONG_SIGN_PARA), CERT_STRONG_SIGN_OID_INFO_CHOICE, szOID_CERT_STRONG_KEY_OS_CURRENT }
  2451. typedef void *HCRYPTMSG;
  2452. #define szOID_PKCS_7_DATA "1.2.840.113549.1.7.1"
  2453. #define szOID_PKCS_7_SIGNED "1.2.840.113549.1.7.2"
  2454. #define szOID_PKCS_7_ENVELOPED "1.2.840.113549.1.7.3"
  2455. #define szOID_PKCS_7_SIGNEDANDENVELOPED "1.2.840.113549.1.7.4"
  2456. #define szOID_PKCS_7_DIGESTED "1.2.840.113549.1.7.5"
  2457. #define szOID_PKCS_7_ENCRYPTED "1.2.840.113549.1.7.6"
  2458. #define szOID_PKCS_9_CONTENT_TYPE "1.2.840.113549.1.9.3"
  2459. #define szOID_PKCS_9_MESSAGE_DIGEST "1.2.840.113549.1.9.4"
  2460. #define CMSG_DATA 1
  2461. #define CMSG_SIGNED 2
  2462. #define CMSG_ENVELOPED 3
  2463. #define CMSG_SIGNED_AND_ENVELOPED 4
  2464. #define CMSG_HASHED 5
  2465. #define CMSG_ENCRYPTED 6
  2466. #define CMSG_ALL_FLAGS (~__MSABI_LONG(0U))
  2467. #define CMSG_DATA_FLAG (1 << CMSG_DATA)
  2468. #define CMSG_SIGNED_FLAG (1 << CMSG_SIGNED)
  2469. #define CMSG_ENVELOPED_FLAG (1 << CMSG_ENVELOPED)
  2470. #define CMSG_SIGNED_AND_ENVELOPED_FLAG (1 << CMSG_SIGNED_AND_ENVELOPED)
  2471. #define CMSG_HASHED_FLAG (1 << CMSG_HASHED)
  2472. #define CMSG_ENCRYPTED_FLAG (1 << CMSG_ENCRYPTED)
  2473. typedef struct _CERT_ISSUER_SERIAL_NUMBER {
  2474. CERT_NAME_BLOB Issuer;
  2475. CRYPT_INTEGER_BLOB SerialNumber;
  2476. } CERT_ISSUER_SERIAL_NUMBER,*PCERT_ISSUER_SERIAL_NUMBER;
  2477. typedef struct _CERT_ID {
  2478. DWORD dwIdChoice;
  2479. __C89_NAMELESS union {
  2480. CERT_ISSUER_SERIAL_NUMBER IssuerSerialNumber;
  2481. CRYPT_HASH_BLOB KeyId;
  2482. CRYPT_HASH_BLOB HashId;
  2483. };
  2484. } CERT_ID,*PCERT_ID;
  2485. #define CERT_ID_ISSUER_SERIAL_NUMBER 1
  2486. #define CERT_ID_KEY_IDENTIFIER 2
  2487. #define CERT_ID_SHA1_HASH 3
  2488. typedef struct _CMSG_SIGNER_ENCODE_INFO {
  2489. DWORD cbSize;
  2490. PCERT_INFO pCertInfo;
  2491. __C89_NAMELESS union {
  2492. HCRYPTPROV hCryptProv;
  2493. NCRYPT_KEY_HANDLE hNCryptKey;
  2494. };
  2495. DWORD dwKeySpec;
  2496. CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
  2497. void *pvHashAuxInfo;
  2498. DWORD cAuthAttr;
  2499. PCRYPT_ATTRIBUTE rgAuthAttr;
  2500. DWORD cUnauthAttr;
  2501. PCRYPT_ATTRIBUTE rgUnauthAttr;
  2502. #ifdef CMSG_SIGNER_ENCODE_INFO_HAS_CMS_FIELDS
  2503. CERT_ID SignerId;
  2504. CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
  2505. void *pvHashEncryptionAuxInfo;
  2506. #endif
  2507. } CMSG_SIGNER_ENCODE_INFO,*PCMSG_SIGNER_ENCODE_INFO;
  2508. typedef struct _CMSG_SIGNED_ENCODE_INFO {
  2509. DWORD cbSize;
  2510. DWORD cSigners;
  2511. PCMSG_SIGNER_ENCODE_INFO rgSigners;
  2512. DWORD cCertEncoded;
  2513. PCERT_BLOB rgCertEncoded;
  2514. DWORD cCrlEncoded;
  2515. PCRL_BLOB rgCrlEncoded;
  2516. #ifdef CMSG_SIGNED_ENCODE_INFO_HAS_CMS_FIELDS
  2517. DWORD cAttrCertEncoded;
  2518. PCERT_BLOB rgAttrCertEncoded;
  2519. #endif
  2520. } CMSG_SIGNED_ENCODE_INFO,*PCMSG_SIGNED_ENCODE_INFO;
  2521. typedef struct _CMSG_RECIPIENT_ENCODE_INFO CMSG_RECIPIENT_ENCODE_INFO,*PCMSG_RECIPIENT_ENCODE_INFO;
  2522. typedef struct _CMSG_ENVELOPED_ENCODE_INFO {
  2523. DWORD cbSize;
  2524. HCRYPTPROV_LEGACY hCryptProv;
  2525. CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
  2526. void *pvEncryptionAuxInfo;
  2527. DWORD cRecipients;
  2528. PCERT_INFO *rgpRecipients;
  2529. #ifdef CMSG_ENVELOPED_ENCODE_INFO_HAS_CMS_FIELDS
  2530. PCMSG_RECIPIENT_ENCODE_INFO rgCmsRecipients;
  2531. DWORD cCertEncoded;
  2532. PCERT_BLOB rgCertEncoded;
  2533. DWORD cCrlEncoded;
  2534. PCRL_BLOB rgCrlEncoded;
  2535. DWORD cAttrCertEncoded;
  2536. PCERT_BLOB rgAttrCertEncoded;
  2537. DWORD cUnprotectedAttr;
  2538. PCRYPT_ATTRIBUTE rgUnprotectedAttr;
  2539. #endif
  2540. } CMSG_ENVELOPED_ENCODE_INFO,*PCMSG_ENVELOPED_ENCODE_INFO;
  2541. typedef struct _CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO {
  2542. DWORD cbSize;
  2543. CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
  2544. void *pvKeyEncryptionAuxInfo;
  2545. HCRYPTPROV_LEGACY hCryptProv;
  2546. CRYPT_BIT_BLOB RecipientPublicKey;
  2547. CERT_ID RecipientId;
  2548. } CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO,*PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO;
  2549. typedef struct _CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO {
  2550. DWORD cbSize;
  2551. CRYPT_BIT_BLOB RecipientPublicKey;
  2552. CERT_ID RecipientId;
  2553. FILETIME Date;
  2554. PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
  2555. } CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO,*PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO;
  2556. typedef struct _CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO {
  2557. DWORD cbSize;
  2558. CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
  2559. void *pvKeyEncryptionAuxInfo;
  2560. CRYPT_ALGORITHM_IDENTIFIER KeyWrapAlgorithm;
  2561. void *pvKeyWrapAuxInfo;
  2562. HCRYPTPROV_LEGACY hCryptProv;
  2563. DWORD dwKeySpec;
  2564. DWORD dwKeyChoice;
  2565. __C89_NAMELESS union {
  2566. PCRYPT_ALGORITHM_IDENTIFIER pEphemeralAlgorithm;
  2567. PCERT_ID pSenderId;
  2568. };
  2569. CRYPT_DATA_BLOB UserKeyingMaterial;
  2570. DWORD cRecipientEncryptedKeys;
  2571. PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO *rgpRecipientEncryptedKeys;
  2572. } CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO,*PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO;
  2573. #define CMSG_KEY_AGREE_EPHEMERAL_KEY_CHOICE 1
  2574. #define CMSG_KEY_AGREE_STATIC_KEY_CHOICE 2
  2575. typedef struct _CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO {
  2576. DWORD cbSize;
  2577. CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
  2578. void *pvKeyEncryptionAuxInfo;
  2579. HCRYPTPROV hCryptProv;
  2580. DWORD dwKeyChoice;
  2581. __C89_NAMELESS union {
  2582. HCRYPTKEY hKeyEncryptionKey;
  2583. void *pvKeyEncryptionKey;
  2584. };
  2585. CRYPT_DATA_BLOB KeyId;
  2586. FILETIME Date;
  2587. PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
  2588. } CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO,*PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO;
  2589. #define CMSG_MAIL_LIST_HANDLE_KEY_CHOICE 1
  2590. #define CMSG_KEY_TRANS_RECIPIENT 1
  2591. #define CMSG_KEY_AGREE_RECIPIENT 2
  2592. #define CMSG_MAIL_LIST_RECIPIENT 3
  2593. #define CMSG_RC4_NO_SALT_FLAG 0x40000000
  2594. #define CMSG_SP3_COMPATIBLE_ENCRYPT_FLAG 0x80000000
  2595. struct _CMSG_RECIPIENT_ENCODE_INFO {
  2596. DWORD dwRecipientChoice;
  2597. __C89_NAMELESS union {
  2598. PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTrans;
  2599. PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO pKeyAgree;
  2600. PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO pMailList;
  2601. };
  2602. };
  2603. typedef struct _CMSG_RC2_AUX_INFO {
  2604. DWORD cbSize;
  2605. DWORD dwBitLen;
  2606. } CMSG_RC2_AUX_INFO,*PCMSG_RC2_AUX_INFO;
  2607. typedef struct _CMSG_SP3_COMPATIBLE_AUX_INFO {
  2608. DWORD cbSize;
  2609. DWORD dwFlags;
  2610. } CMSG_SP3_COMPATIBLE_AUX_INFO,*PCMSG_SP3_COMPATIBLE_AUX_INFO;
  2611. typedef struct _CMSG_RC4_AUX_INFO {
  2612. DWORD cbSize;
  2613. DWORD dwBitLen;
  2614. } CMSG_RC4_AUX_INFO,*PCMSG_RC4_AUX_INFO;
  2615. typedef struct _CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO {
  2616. DWORD cbSize;
  2617. CMSG_SIGNED_ENCODE_INFO SignedInfo;
  2618. CMSG_ENVELOPED_ENCODE_INFO EnvelopedInfo;
  2619. } CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO,*PCMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO;
  2620. typedef struct _CMSG_HASHED_ENCODE_INFO {
  2621. DWORD cbSize;
  2622. HCRYPTPROV_LEGACY hCryptProv;
  2623. CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
  2624. void *pvHashAuxInfo;
  2625. } CMSG_HASHED_ENCODE_INFO,*PCMSG_HASHED_ENCODE_INFO;
  2626. typedef struct _CMSG_ENCRYPTED_ENCODE_INFO {
  2627. DWORD cbSize;
  2628. CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
  2629. void *pvEncryptionAuxInfo;
  2630. } CMSG_ENCRYPTED_ENCODE_INFO,*PCMSG_ENCRYPTED_ENCODE_INFO;
  2631. typedef WINBOOL (WINAPI *PFN_CMSG_STREAM_OUTPUT) (const void *pvArg, BYTE *pbData, DWORD cbData, WINBOOL fFinal);
  2632. #define CMSG_INDEFINITE_LENGTH (0xffffffff)
  2633. typedef struct _CMSG_STREAM_INFO {
  2634. DWORD cbContent;
  2635. PFN_CMSG_STREAM_OUTPUT pfnStreamOutput;
  2636. void *pvArg;
  2637. } CMSG_STREAM_INFO,*PCMSG_STREAM_INFO;
  2638. #define CMSG_BARE_CONTENT_FLAG 0x1
  2639. #define CMSG_LENGTH_ONLY_FLAG 0x2
  2640. #define CMSG_DETACHED_FLAG 0x4
  2641. #define CMSG_AUTHENTICATED_ATTRIBUTES_FLAG 0x8
  2642. #define CMSG_CONTENTS_OCTETS_FLAG 0x10
  2643. #define CMSG_MAX_LENGTH_FLAG 0x20
  2644. #define CMSG_CMS_ENCAPSULATED_CONTENT_FLAG 0x40
  2645. #define CMSG_SIGNED_DATA_NO_SIGN_FLAG 0x80
  2646. #define CMSG_CRYPT_RELEASE_CONTEXT_FLAG 0x8000
  2647. WINIMPM HCRYPTMSG WINAPI CryptMsgOpenToEncode (DWORD dwMsgEncodingType, DWORD dwFlags, DWORD dwMsgType, void const *pvMsgEncodeInfo, LPSTR pszInnerContentObjID, PCMSG_STREAM_INFO pStreamInfo);
  2648. WINIMPM DWORD WINAPI CryptMsgCalculateEncodedLength (DWORD dwMsgEncodingType, DWORD dwFlags, DWORD dwMsgType, void const *pvMsgEncodeInfo, LPSTR pszInnerContentObjID, DWORD cbData);
  2649. WINIMPM HCRYPTMSG WINAPI CryptMsgOpenToDecode (DWORD dwMsgEncodingType, DWORD dwFlags, DWORD dwMsgType, HCRYPTPROV_LEGACY hCryptProv, PCERT_INFO pRecipientInfo, PCMSG_STREAM_INFO pStreamInfo);
  2650. WINIMPM HCRYPTMSG WINAPI CryptMsgDuplicate (HCRYPTMSG hCryptMsg);
  2651. WINIMPM WINBOOL WINAPI CryptMsgClose (HCRYPTMSG hCryptMsg);
  2652. WINIMPM WINBOOL WINAPI CryptMsgUpdate (HCRYPTMSG hCryptMsg, const BYTE *pbData, DWORD cbData, WINBOOL fFinal);
  2653. WINIMPM WINBOOL WINAPI CryptMsgGetParam (HCRYPTMSG hCryptMsg, DWORD dwParamType, DWORD dwIndex, void *pvData, DWORD *pcbData);
  2654. #define CMSG_TYPE_PARAM 1
  2655. #define CMSG_CONTENT_PARAM 2
  2656. #define CMSG_BARE_CONTENT_PARAM 3
  2657. #define CMSG_INNER_CONTENT_TYPE_PARAM 4
  2658. #define CMSG_SIGNER_COUNT_PARAM 5
  2659. #define CMSG_SIGNER_INFO_PARAM 6
  2660. #define CMSG_SIGNER_CERT_INFO_PARAM 7
  2661. #define CMSG_SIGNER_HASH_ALGORITHM_PARAM 8
  2662. #define CMSG_SIGNER_AUTH_ATTR_PARAM 9
  2663. #define CMSG_SIGNER_UNAUTH_ATTR_PARAM 10
  2664. #define CMSG_CERT_COUNT_PARAM 11
  2665. #define CMSG_CERT_PARAM 12
  2666. #define CMSG_CRL_COUNT_PARAM 13
  2667. #define CMSG_CRL_PARAM 14
  2668. #define CMSG_ENVELOPE_ALGORITHM_PARAM 15
  2669. #define CMSG_RECIPIENT_COUNT_PARAM 17
  2670. #define CMSG_RECIPIENT_INDEX_PARAM 18
  2671. #define CMSG_RECIPIENT_INFO_PARAM 19
  2672. #define CMSG_HASH_ALGORITHM_PARAM 20
  2673. #define CMSG_HASH_DATA_PARAM 21
  2674. #define CMSG_COMPUTED_HASH_PARAM 22
  2675. #define CMSG_ENCRYPT_PARAM 26
  2676. #define CMSG_ENCRYPTED_DIGEST 27
  2677. #define CMSG_ENCODED_SIGNER 28
  2678. #define CMSG_ENCODED_MESSAGE 29
  2679. #define CMSG_VERSION_PARAM 30
  2680. #define CMSG_ATTR_CERT_COUNT_PARAM 31
  2681. #define CMSG_ATTR_CERT_PARAM 32
  2682. #define CMSG_CMS_RECIPIENT_COUNT_PARAM 33
  2683. #define CMSG_CMS_RECIPIENT_INDEX_PARAM 34
  2684. #define CMSG_CMS_RECIPIENT_ENCRYPTED_KEY_INDEX_PARAM 35
  2685. #define CMSG_CMS_RECIPIENT_INFO_PARAM 36
  2686. #define CMSG_UNPROTECTED_ATTR_PARAM 37
  2687. #define CMSG_SIGNER_CERT_ID_PARAM 38
  2688. #define CMSG_CMS_SIGNER_INFO_PARAM 39
  2689. typedef struct _CMSG_SIGNER_INFO {
  2690. DWORD dwVersion;
  2691. CERT_NAME_BLOB Issuer;
  2692. CRYPT_INTEGER_BLOB SerialNumber;
  2693. CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
  2694. CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
  2695. CRYPT_DATA_BLOB EncryptedHash;
  2696. CRYPT_ATTRIBUTES AuthAttrs;
  2697. CRYPT_ATTRIBUTES UnauthAttrs;
  2698. } CMSG_SIGNER_INFO,*PCMSG_SIGNER_INFO;
  2699. typedef struct _CMSG_CMS_SIGNER_INFO {
  2700. DWORD dwVersion;
  2701. CERT_ID SignerId;
  2702. CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
  2703. CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
  2704. CRYPT_DATA_BLOB EncryptedHash;
  2705. CRYPT_ATTRIBUTES AuthAttrs;
  2706. CRYPT_ATTRIBUTES UnauthAttrs;
  2707. } CMSG_CMS_SIGNER_INFO,*PCMSG_CMS_SIGNER_INFO;
  2708. typedef CRYPT_ATTRIBUTES CMSG_ATTR;
  2709. typedef CRYPT_ATTRIBUTES *PCMSG_ATTR;
  2710. #define CMSG_SIGNED_DATA_V1 1
  2711. #define CMSG_SIGNED_DATA_V3 3
  2712. #define CMSG_SIGNED_DATA_PKCS_1_5_VERSION CMSG_SIGNED_DATA_V1
  2713. #define CMSG_SIGNED_DATA_CMS_VERSION CMSG_SIGNED_DATA_V3
  2714. #define CMSG_SIGNER_INFO_V1 1
  2715. #define CMSG_SIGNER_INFO_V3 3
  2716. #define CMSG_SIGNER_INFO_PKCS_1_5_VERSION CMSG_SIGNER_INFO_V1
  2717. #define CMSG_SIGNER_INFO_CMS_VERSION CMSG_SIGNER_INFO_V3
  2718. #define CMSG_HASHED_DATA_V0 0
  2719. #define CMSG_HASHED_DATA_V2 2
  2720. #define CMSG_HASHED_DATA_PKCS_1_5_VERSION CMSG_HASHED_DATA_V0
  2721. #define CMSG_HASHED_DATA_CMS_VERSION CMSG_HASHED_DATA_V2
  2722. #define CMSG_ENVELOPED_DATA_V0 0
  2723. #define CMSG_ENVELOPED_DATA_V2 2
  2724. #define CMSG_ENVELOPED_DATA_PKCS_1_5_VERSION CMSG_ENVELOPED_DATA_V0
  2725. #define CMSG_ENVELOPED_DATA_CMS_VERSION CMSG_ENVELOPED_DATA_V2
  2726. typedef struct _CMSG_KEY_TRANS_RECIPIENT_INFO {
  2727. DWORD dwVersion;
  2728. CERT_ID RecipientId;
  2729. CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
  2730. CRYPT_DATA_BLOB EncryptedKey;
  2731. } CMSG_KEY_TRANS_RECIPIENT_INFO,*PCMSG_KEY_TRANS_RECIPIENT_INFO;
  2732. typedef struct _CMSG_RECIPIENT_ENCRYPTED_KEY_INFO {
  2733. CERT_ID RecipientId;
  2734. CRYPT_DATA_BLOB EncryptedKey;
  2735. FILETIME Date;
  2736. PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
  2737. } CMSG_RECIPIENT_ENCRYPTED_KEY_INFO,*PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO;
  2738. typedef struct _CMSG_KEY_AGREE_RECIPIENT_INFO {
  2739. DWORD dwVersion;
  2740. DWORD dwOriginatorChoice;
  2741. __C89_NAMELESS union {
  2742. CERT_ID OriginatorCertId;
  2743. CERT_PUBLIC_KEY_INFO OriginatorPublicKeyInfo;
  2744. };
  2745. CRYPT_DATA_BLOB UserKeyingMaterial;
  2746. CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
  2747. DWORD cRecipientEncryptedKeys;
  2748. PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO *rgpRecipientEncryptedKeys;
  2749. } CMSG_KEY_AGREE_RECIPIENT_INFO,*PCMSG_KEY_AGREE_RECIPIENT_INFO;
  2750. #define CMSG_KEY_AGREE_ORIGINATOR_CERT 1
  2751. #define CMSG_KEY_AGREE_ORIGINATOR_PUBLIC_KEY 2
  2752. typedef struct _CMSG_MAIL_LIST_RECIPIENT_INFO {
  2753. DWORD dwVersion;
  2754. CRYPT_DATA_BLOB KeyId;
  2755. CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
  2756. CRYPT_DATA_BLOB EncryptedKey;
  2757. FILETIME Date;
  2758. PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
  2759. } CMSG_MAIL_LIST_RECIPIENT_INFO,*PCMSG_MAIL_LIST_RECIPIENT_INFO;
  2760. typedef struct _CMSG_CMS_RECIPIENT_INFO {
  2761. DWORD dwRecipientChoice;
  2762. __C89_NAMELESS union {
  2763. PCMSG_KEY_TRANS_RECIPIENT_INFO pKeyTrans;
  2764. PCMSG_KEY_AGREE_RECIPIENT_INFO pKeyAgree;
  2765. PCMSG_MAIL_LIST_RECIPIENT_INFO pMailList;
  2766. };
  2767. } CMSG_CMS_RECIPIENT_INFO,*PCMSG_CMS_RECIPIENT_INFO;
  2768. #define CMSG_ENVELOPED_RECIPIENT_V0 0
  2769. #define CMSG_ENVELOPED_RECIPIENT_V2 2
  2770. #define CMSG_ENVELOPED_RECIPIENT_V3 3
  2771. #define CMSG_ENVELOPED_RECIPIENT_V4 4
  2772. #define CMSG_KEY_TRANS_PKCS_1_5_VERSION CMSG_ENVELOPED_RECIPIENT_V0
  2773. #define CMSG_KEY_TRANS_CMS_VERSION CMSG_ENVELOPED_RECIPIENT_V2
  2774. #define CMSG_KEY_AGREE_VERSION CMSG_ENVELOPED_RECIPIENT_V3
  2775. #define CMSG_MAIL_LIST_VERSION CMSG_ENVELOPED_RECIPIENT_V4
  2776. WINIMPM WINBOOL WINAPI CryptMsgControl (HCRYPTMSG hCryptMsg, DWORD dwFlags, DWORD dwCtrlType, void const *pvCtrlPara);
  2777. #define CMSG_CTRL_VERIFY_SIGNATURE 1
  2778. #define CMSG_CTRL_DECRYPT 2
  2779. #define CMSG_CTRL_VERIFY_HASH 5
  2780. #define CMSG_CTRL_ADD_SIGNER 6
  2781. #define CMSG_CTRL_DEL_SIGNER 7
  2782. #define CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR 8
  2783. #define CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR 9
  2784. #define CMSG_CTRL_ADD_CERT 10
  2785. #define CMSG_CTRL_DEL_CERT 11
  2786. #define CMSG_CTRL_ADD_CRL 12
  2787. #define CMSG_CTRL_DEL_CRL 13
  2788. #define CMSG_CTRL_ADD_ATTR_CERT 14
  2789. #define CMSG_CTRL_DEL_ATTR_CERT 15
  2790. #define CMSG_CTRL_KEY_TRANS_DECRYPT 16
  2791. #define CMSG_CTRL_KEY_AGREE_DECRYPT 17
  2792. #define CMSG_CTRL_MAIL_LIST_DECRYPT 18
  2793. #define CMSG_CTRL_VERIFY_SIGNATURE_EX 19
  2794. #define CMSG_CTRL_ADD_CMS_SIGNER_INFO 20
  2795. #define CMSG_CTRL_ENABLE_STRONG_SIGNATURE 21
  2796. typedef struct _CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA {
  2797. DWORD cbSize;
  2798. HCRYPTPROV_LEGACY hCryptProv;
  2799. DWORD dwSignerIndex;
  2800. DWORD dwSignerType;
  2801. void *pvSigner;
  2802. } CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA,*PCMSG_CTRL_VERIFY_SIGNATURE_EX_PARA;
  2803. #define CMSG_VERIFY_SIGNER_PUBKEY 1
  2804. #define CMSG_VERIFY_SIGNER_CERT 2
  2805. #define CMSG_VERIFY_SIGNER_CHAIN 3
  2806. #define CMSG_VERIFY_SIGNER_NULL 4
  2807. typedef struct _CMSG_CTRL_DECRYPT_PARA {
  2808. DWORD cbSize;
  2809. __C89_NAMELESS union {
  2810. HCRYPTPROV hCryptProv;
  2811. NCRYPT_KEY_HANDLE hNCryptKey;
  2812. };
  2813. DWORD dwKeySpec;
  2814. DWORD dwRecipientIndex;
  2815. } CMSG_CTRL_DECRYPT_PARA,*PCMSG_CTRL_DECRYPT_PARA;
  2816. typedef struct _CMSG_CTRL_KEY_TRANS_DECRYPT_PARA {
  2817. DWORD cbSize;
  2818. __C89_NAMELESS union {
  2819. HCRYPTPROV hCryptProv;
  2820. NCRYPT_KEY_HANDLE hNCryptKey;
  2821. };
  2822. DWORD dwKeySpec;
  2823. PCMSG_KEY_TRANS_RECIPIENT_INFO pKeyTrans;
  2824. DWORD dwRecipientIndex;
  2825. } CMSG_CTRL_KEY_TRANS_DECRYPT_PARA,*PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA;
  2826. typedef struct _CMSG_CTRL_KEY_AGREE_DECRYPT_PARA {
  2827. DWORD cbSize;
  2828. __C89_NAMELESS union {
  2829. HCRYPTPROV hCryptProv;
  2830. NCRYPT_KEY_HANDLE hNCryptKey;
  2831. };
  2832. DWORD dwKeySpec;
  2833. PCMSG_KEY_AGREE_RECIPIENT_INFO pKeyAgree;
  2834. DWORD dwRecipientIndex;
  2835. DWORD dwRecipientEncryptedKeyIndex;
  2836. CRYPT_BIT_BLOB OriginatorPublicKey;
  2837. } CMSG_CTRL_KEY_AGREE_DECRYPT_PARA,*PCMSG_CTRL_KEY_AGREE_DECRYPT_PARA;
  2838. typedef struct _CMSG_CTRL_MAIL_LIST_DECRYPT_PARA {
  2839. DWORD cbSize;
  2840. HCRYPTPROV hCryptProv;
  2841. PCMSG_MAIL_LIST_RECIPIENT_INFO pMailList;
  2842. DWORD dwRecipientIndex;
  2843. DWORD dwKeyChoice;
  2844. __C89_NAMELESS union {
  2845. HCRYPTKEY hKeyEncryptionKey;
  2846. void *pvKeyEncryptionKey;
  2847. };
  2848. } CMSG_CTRL_MAIL_LIST_DECRYPT_PARA,*PCMSG_CTRL_MAIL_LIST_DECRYPT_PARA;
  2849. typedef struct _CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA {
  2850. DWORD cbSize;
  2851. DWORD dwSignerIndex;
  2852. CRYPT_DATA_BLOB blob;
  2853. } CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA,*PCMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA;
  2854. typedef struct _CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA {
  2855. DWORD cbSize;
  2856. DWORD dwSignerIndex;
  2857. DWORD dwUnauthAttrIndex;
  2858. } CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA,*PCMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA;
  2859. #define CMSG_VERIFY_COUNTER_SIGN_ENABLE_STRONG_FLAG 0x1
  2860. WINBOOL WINAPI CryptMsgVerifyCountersignatureEncoded (HCRYPTPROV_LEGACY hCryptProv, DWORD dwEncodingType, PBYTE pbSignerInfo, DWORD cbSignerInfo, PBYTE pbSignerInfoCountersignature, DWORD cbSignerInfoCountersignature, PCERT_INFO pciCountersigner);
  2861. WINBOOL WINAPI CryptMsgVerifyCountersignatureEncodedEx (HCRYPTPROV_LEGACY hCryptProv, DWORD dwEncodingType, PBYTE pbSignerInfo, DWORD cbSignerInfo, PBYTE pbSignerInfoCountersignature, DWORD cbSignerInfoCountersignature, DWORD dwSignerType, void *pvSigner, DWORD dwFlags, void *pvExtra);
  2862. WINBOOL WINAPI CryptMsgCountersign (HCRYPTMSG hCryptMsg, DWORD dwIndex, DWORD cCountersigners, PCMSG_SIGNER_ENCODE_INFO rgCountersigners);
  2863. WINBOOL WINAPI CryptMsgCountersignEncoded (DWORD dwEncodingType, PBYTE pbSignerInfo, DWORD cbSignerInfo, DWORD cCountersigners, PCMSG_SIGNER_ENCODE_INFO rgCountersigners, PBYTE pbCountersignature, PDWORD pcbCountersignature);
  2864. typedef void *(WINAPI *PFN_CMSG_ALLOC) (size_t cb);
  2865. typedef void (WINAPI *PFN_CMSG_FREE) (void *pv);
  2866. #define CMSG_OID_GEN_ENCRYPT_KEY_FUNC "CryptMsgDllGenEncryptKey"
  2867. #define CMSG_OID_EXPORT_ENCRYPT_KEY_FUNC "CryptMsgDllExportEncryptKey"
  2868. #define CMSG_OID_IMPORT_ENCRYPT_KEY_FUNC "CryptMsgDllImportEncryptKey"
  2869. typedef WINBOOL (WINAPI *PFN_CMSG_GEN_ENCRYPT_KEY) (HCRYPTPROV *phCryptProv, PCRYPT_ALGORITHM_IDENTIFIER paiEncrypt, PVOID pvEncryptAuxInfo, PCERT_PUBLIC_KEY_INFO pPublicKeyInfo, PFN_CMSG_ALLOC pfnAlloc, HCRYPTKEY *phEncryptKey, PBYTE *ppbEncryptParameters, PDWORD pcbEncryptParameters);
  2870. typedef WINBOOL (WINAPI *PFN_CMSG_EXPORT_ENCRYPT_KEY) (HCRYPTPROV hCryptProv, HCRYPTKEY hEncryptKey, PCERT_PUBLIC_KEY_INFO pPublicKeyInfo, PBYTE pbData, PDWORD pcbData);
  2871. typedef WINBOOL (WINAPI *PFN_CMSG_IMPORT_ENCRYPT_KEY) (HCRYPTPROV hCryptProv, DWORD dwKeySpec, PCRYPT_ALGORITHM_IDENTIFIER paiEncrypt, PCRYPT_ALGORITHM_IDENTIFIER paiPubKey, PBYTE pbEncodedKey, DWORD cbEncodedKey, HCRYPTKEY *phEncryptKey);
  2872. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
  2873. #define CMSG_DEFAULT_INSTALLABLE_FUNC_OID ((LPCSTR) 1)
  2874. typedef struct _CMSG_CONTENT_ENCRYPT_INFO {
  2875. DWORD cbSize;
  2876. HCRYPTPROV_LEGACY hCryptProv;
  2877. CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
  2878. void *pvEncryptionAuxInfo;
  2879. DWORD cRecipients;
  2880. PCMSG_RECIPIENT_ENCODE_INFO rgCmsRecipients;
  2881. PFN_CMSG_ALLOC pfnAlloc;
  2882. PFN_CMSG_FREE pfnFree;
  2883. DWORD dwEncryptFlags;
  2884. __C89_NAMELESS union {
  2885. HCRYPTKEY hContentEncryptKey;
  2886. BCRYPT_KEY_HANDLE hCNGContentEncryptKey;
  2887. };
  2888. DWORD dwFlags;
  2889. WINBOOL fCNG;
  2890. BYTE *pbCNGContentEncryptKeyObject;
  2891. BYTE *pbContentEncryptKey;
  2892. DWORD cbContentEncryptKey;
  2893. } CMSG_CONTENT_ENCRYPT_INFO,*PCMSG_CONTENT_ENCRYPT_INFO;
  2894. #define CMSG_CONTENT_ENCRYPT_PAD_ENCODED_LEN_FLAG 0x1
  2895. #define CMSG_CONTENT_ENCRYPT_FREE_PARA_FLAG 0x1
  2896. #define CMSG_CONTENT_ENCRYPT_FREE_OBJID_FLAG 0x2
  2897. #define CMSG_CONTENT_ENCRYPT_RELEASE_CONTEXT_FLAG 0x8000
  2898. #define CMSG_OID_GEN_CONTENT_ENCRYPT_KEY_FUNC "CryptMsgDllGenContentEncryptKey"
  2899. #define CMSG_OID_CAPI1_GEN_CONTENT_ENCRYPT_KEY_FUNC CMSG_OID_GEN_CONTENT_ENCRYPT_KEY_FUNC
  2900. #define CMSG_OID_CNG_GEN_CONTENT_ENCRYPT_KEY_FUNC "CryptMsgDllCNGGenContentEncryptKey"
  2901. typedef WINBOOL (WINAPI *PFN_CMSG_GEN_CONTENT_ENCRYPT_KEY) (PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo, DWORD dwFlags, void *pvReserved);
  2902. typedef struct _CMSG_KEY_TRANS_ENCRYPT_INFO {
  2903. DWORD cbSize;
  2904. DWORD dwRecipientIndex;
  2905. CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
  2906. CRYPT_DATA_BLOB EncryptedKey;
  2907. DWORD dwFlags;
  2908. } CMSG_KEY_TRANS_ENCRYPT_INFO,*PCMSG_KEY_TRANS_ENCRYPT_INFO;
  2909. #define CMSG_KEY_TRANS_ENCRYPT_FREE_PARA_FLAG 0x1
  2910. #define CMSG_KEY_TRANS_ENCRYPT_FREE_OBJID_FLAG 0x2
  2911. #define CMSG_OID_EXPORT_KEY_TRANS_FUNC "CryptMsgDllExportKeyTrans"
  2912. #define CMSG_OID_CAPI1_EXPORT_KEY_TRANS_FUNC CMSG_OID_EXPORT_KEY_TRANS_FUNC
  2913. #define CMSG_OID_CNG_EXPORT_KEY_TRANS_FUNC "CryptMsgDllCNGExportKeyTrans"
  2914. typedef WINBOOL (WINAPI *PFN_CMSG_EXPORT_KEY_TRANS) (PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo, PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTransEncodeInfo, PCMSG_KEY_TRANS_ENCRYPT_INFO pKeyTransEncryptInfo, DWORD dwFlags, void *pvReserved);
  2915. typedef struct _CMSG_KEY_AGREE_KEY_ENCRYPT_INFO {
  2916. DWORD cbSize;
  2917. CRYPT_DATA_BLOB EncryptedKey;
  2918. } CMSG_KEY_AGREE_KEY_ENCRYPT_INFO,*PCMSG_KEY_AGREE_KEY_ENCRYPT_INFO;
  2919. typedef struct _CMSG_KEY_AGREE_ENCRYPT_INFO {
  2920. DWORD cbSize;
  2921. DWORD dwRecipientIndex;
  2922. CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
  2923. CRYPT_DATA_BLOB UserKeyingMaterial;
  2924. DWORD dwOriginatorChoice;
  2925. __C89_NAMELESS union {
  2926. CERT_ID OriginatorCertId;
  2927. CERT_PUBLIC_KEY_INFO OriginatorPublicKeyInfo;
  2928. };
  2929. DWORD cKeyAgreeKeyEncryptInfo;
  2930. PCMSG_KEY_AGREE_KEY_ENCRYPT_INFO *rgpKeyAgreeKeyEncryptInfo;
  2931. DWORD dwFlags;
  2932. } CMSG_KEY_AGREE_ENCRYPT_INFO,*PCMSG_KEY_AGREE_ENCRYPT_INFO;
  2933. #define CMSG_KEY_AGREE_ENCRYPT_FREE_PARA_FLAG 0x1
  2934. #define CMSG_KEY_AGREE_ENCRYPT_FREE_MATERIAL_FLAG 0x2
  2935. #define CMSG_KEY_AGREE_ENCRYPT_FREE_PUBKEY_ALG_FLAG 0x4
  2936. #define CMSG_KEY_AGREE_ENCRYPT_FREE_PUBKEY_PARA_FLAG 0x8
  2937. #define CMSG_KEY_AGREE_ENCRYPT_FREE_PUBKEY_BITS_FLAG 0x10
  2938. #define CMSG_KEY_AGREE_ENCRYPT_FREE_OBJID_FLAG 0x20
  2939. #define CMSG_OID_EXPORT_KEY_AGREE_FUNC "CryptMsgDllExportKeyAgree"
  2940. #define CMSG_OID_CAPI1_EXPORT_KEY_AGREE_FUNC CMSG_OID_EXPORT_KEY_AGREE_FUNC
  2941. #define CMSG_OID_CNG_EXPORT_KEY_AGREE_FUNC "CryptMsgDllCNGExportKeyAgree"
  2942. typedef WINBOOL (WINAPI *PFN_CMSG_EXPORT_KEY_AGREE) (PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo, PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO pKeyAgreeEncodeInfo, PCMSG_KEY_AGREE_ENCRYPT_INFO pKeyAgreeEncryptInfo, DWORD dwFlags, void *pvReserved);
  2943. typedef struct _CMSG_MAIL_LIST_ENCRYPT_INFO {
  2944. DWORD cbSize;
  2945. DWORD dwRecipientIndex;
  2946. CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
  2947. CRYPT_DATA_BLOB EncryptedKey;
  2948. DWORD dwFlags;
  2949. } CMSG_MAIL_LIST_ENCRYPT_INFO,*PCMSG_MAIL_LIST_ENCRYPT_INFO;
  2950. #define CMSG_MAIL_LIST_ENCRYPT_FREE_PARA_FLAG 0x1
  2951. #define CMSG_MAIL_LIST_ENCRYPT_FREE_OBJID_FLAG 0x2
  2952. #define CMSG_OID_EXPORT_MAIL_LIST_FUNC "CryptMsgDllExportMailList"
  2953. #define CMSG_OID_CAPI1_EXPORT_MAIL_LIST_FUNC CMSG_OID_EXPORT_MAIL_LIST_FUNC
  2954. #define CMSG_OID_IMPORT_KEY_TRANS_FUNC "CryptMsgDllImportKeyTrans"
  2955. #define CMSG_OID_CAPI1_IMPORT_KEY_TRANS_FUNC CMSG_OID_IMPORT_KEY_TRANS_FUNC
  2956. #define CMSG_OID_IMPORT_KEY_AGREE_FUNC "CryptMsgDllImportKeyAgree"
  2957. #define CMSG_OID_CAPI1_IMPORT_KEY_AGREE_FUNC CMSG_OID_IMPORT_KEY_AGREE_FUNC
  2958. #define CMSG_OID_IMPORT_MAIL_LIST_FUNC "CryptMsgDllImportMailList"
  2959. #define CMSG_OID_CAPI1_IMPORT_MAIL_LIST_FUNC CMSG_OID_IMPORT_MAIL_LIST_FUNC
  2960. typedef WINBOOL (WINAPI *PFN_CMSG_EXPORT_MAIL_LIST) (PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo, PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO pMailListEncodeInfo, PCMSG_MAIL_LIST_ENCRYPT_INFO pMailListEncryptInfo, DWORD dwFlags, void *pvReserved);
  2961. typedef WINBOOL (WINAPI *PFN_CMSG_IMPORT_KEY_TRANS) (PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm, PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA pKeyTransDecryptPara, DWORD dwFlags, void *pvReserved, HCRYPTKEY *phContentEncryptKey);
  2962. typedef WINBOOL (WINAPI *PFN_CMSG_IMPORT_KEY_AGREE) (PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm, PCMSG_CTRL_KEY_AGREE_DECRYPT_PARA pKeyAgreeDecryptPara, DWORD dwFlags, void *pvReserved, HCRYPTKEY *phContentEncryptKey);
  2963. typedef WINBOOL (WINAPI *PFN_CMSG_IMPORT_MAIL_LIST) (PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm, PCMSG_CTRL_MAIL_LIST_DECRYPT_PARA pMailListDecryptPara, DWORD dwFlags, void *pvReserved, HCRYPTKEY *phContentEncryptKey);
  2964. typedef struct _CMSG_CNG_CONTENT_DECRYPT_INFO {
  2965. DWORD cbSize;
  2966. CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
  2967. PFN_CMSG_ALLOC pfnAlloc;
  2968. PFN_CMSG_FREE pfnFree;
  2969. NCRYPT_KEY_HANDLE hNCryptKey;
  2970. BYTE *pbContentEncryptKey;
  2971. DWORD cbContentEncryptKey;
  2972. BCRYPT_KEY_HANDLE hCNGContentEncryptKey;
  2973. BYTE *pbCNGContentEncryptKeyObject;
  2974. } CMSG_CNG_CONTENT_DECRYPT_INFO,*PCMSG_CNG_CONTENT_DECRYPT_INFO;
  2975. #define CMSG_OID_CNG_IMPORT_KEY_TRANS_FUNC "CryptMsgDllCNGImportKeyTrans"
  2976. #define CMSG_OID_CNG_IMPORT_KEY_AGREE_FUNC "CryptMsgDllCNGImportKeyAgree"
  2977. #define CMSG_OID_CNG_IMPORT_CONTENT_ENCRYPT_KEY_FUNC "CryptMsgDllCNGImportContentEncryptKey"
  2978. typedef WINBOOL (WINAPI *PFN_CMSG_CNG_IMPORT_KEY_TRANS) (PCMSG_CNG_CONTENT_DECRYPT_INFO pCNGContentDecryptInfo, PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA pKeyTransDecryptPara, DWORD dwFlags, void *pvReserved);
  2979. typedef WINBOOL (WINAPI *PFN_CMSG_CNG_IMPORT_KEY_AGREE) (PCMSG_CNG_CONTENT_DECRYPT_INFO pCNGContentDecryptInfo, PCMSG_CTRL_KEY_AGREE_DECRYPT_PARA pKeyAgreeDecryptPara, DWORD dwFlags, void *pvReserved);
  2980. typedef WINBOOL (WINAPI *PFN_CMSG_CNG_IMPORT_CONTENT_ENCRYPT_KEY) (PCMSG_CNG_CONTENT_DECRYPT_INFO pCNGContentDecryptInfo, DWORD dwFlags, void *pvReserved);
  2981. #endif
  2982. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
  2983. typedef void *HCERTSTORE;
  2984. typedef struct _CERT_CONTEXT {
  2985. DWORD dwCertEncodingType;
  2986. BYTE *pbCertEncoded;
  2987. DWORD cbCertEncoded;
  2988. PCERT_INFO pCertInfo;
  2989. HCERTSTORE hCertStore;
  2990. } CERT_CONTEXT,*PCERT_CONTEXT;
  2991. typedef const CERT_CONTEXT *PCCERT_CONTEXT;
  2992. #endif
  2993. typedef struct _CRL_CONTEXT {
  2994. DWORD dwCertEncodingType;
  2995. BYTE *pbCrlEncoded;
  2996. DWORD cbCrlEncoded;
  2997. PCRL_INFO pCrlInfo;
  2998. HCERTSTORE hCertStore;
  2999. } CRL_CONTEXT,*PCRL_CONTEXT;
  3000. typedef const CRL_CONTEXT *PCCRL_CONTEXT;
  3001. typedef struct _CTL_CONTEXT {
  3002. DWORD dwMsgAndCertEncodingType;
  3003. BYTE *pbCtlEncoded;
  3004. DWORD cbCtlEncoded;
  3005. PCTL_INFO pCtlInfo;
  3006. HCERTSTORE hCertStore;
  3007. HCRYPTMSG hCryptMsg;
  3008. BYTE *pbCtlContent;
  3009. DWORD cbCtlContent;
  3010. } CTL_CONTEXT,*PCTL_CONTEXT;
  3011. typedef const CTL_CONTEXT *PCCTL_CONTEXT;
  3012. #define CERT_KEY_PROV_HANDLE_PROP_ID 1
  3013. #define CERT_KEY_PROV_INFO_PROP_ID 2
  3014. #define CERT_SHA1_HASH_PROP_ID 3
  3015. #define CERT_MD5_HASH_PROP_ID 4
  3016. #define CERT_HASH_PROP_ID CERT_SHA1_HASH_PROP_ID
  3017. #define CERT_KEY_CONTEXT_PROP_ID 5
  3018. #define CERT_KEY_SPEC_PROP_ID 6
  3019. #define CERT_IE30_RESERVED_PROP_ID 7
  3020. #define CERT_PUBKEY_HASH_RESERVED_PROP_ID 8
  3021. #define CERT_ENHKEY_USAGE_PROP_ID 9
  3022. #define CERT_CTL_USAGE_PROP_ID CERT_ENHKEY_USAGE_PROP_ID
  3023. #define CERT_NEXT_UPDATE_LOCATION_PROP_ID 10
  3024. #define CERT_FRIENDLY_NAME_PROP_ID 11
  3025. #define CERT_PVK_FILE_PROP_ID 12
  3026. #define CERT_DESCRIPTION_PROP_ID 13
  3027. #define CERT_ACCESS_STATE_PROP_ID 14
  3028. #define CERT_SIGNATURE_HASH_PROP_ID 15
  3029. #define CERT_SMART_CARD_DATA_PROP_ID 16
  3030. #define CERT_EFS_PROP_ID 17
  3031. #define CERT_FORTEZZA_DATA_PROP_ID 18
  3032. #define CERT_ARCHIVED_PROP_ID 19
  3033. #define CERT_KEY_IDENTIFIER_PROP_ID 20
  3034. #define CERT_AUTO_ENROLL_PROP_ID 21
  3035. #define CERT_PUBKEY_ALG_PARA_PROP_ID 22
  3036. #define CERT_CROSS_CERT_DIST_POINTS_PROP_ID 23
  3037. #define CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID 24
  3038. #define CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID 25
  3039. #define CERT_ENROLLMENT_PROP_ID 26
  3040. #define CERT_DATE_STAMP_PROP_ID 27
  3041. #define CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID 28
  3042. #define CERT_SUBJECT_NAME_MD5_HASH_PROP_ID 29
  3043. #define CERT_EXTENDED_ERROR_INFO_PROP_ID 30
  3044. #define CERT_RENEWAL_PROP_ID 64
  3045. #define CERT_ARCHIVED_KEY_HASH_PROP_ID 65
  3046. #define CERT_AUTO_ENROLL_RETRY_PROP_ID 66
  3047. #define CERT_AIA_URL_RETRIEVED_PROP_ID 67
  3048. #define CERT_AUTHORITY_INFO_ACCESS_PROP_ID 68
  3049. #define CERT_BACKED_UP_PROP_ID 69
  3050. #define CERT_OCSP_RESPONSE_PROP_ID 70
  3051. #define CERT_REQUEST_ORIGINATOR_PROP_ID 71
  3052. #define CERT_SOURCE_LOCATION_PROP_ID 72
  3053. #define CERT_SOURCE_URL_PROP_ID 73
  3054. #define CERT_NEW_KEY_PROP_ID 74
  3055. #define CERT_OCSP_CACHE_PREFIX_PROP_ID 75
  3056. #define CERT_SMART_CARD_ROOT_INFO_PROP_ID 76
  3057. #define CERT_NO_AUTO_EXPIRE_CHECK_PROP_ID 77
  3058. #define CERT_NCRYPT_KEY_HANDLE_PROP_ID 78
  3059. #define CERT_HCRYPTPROV_OR_NCRYPT_KEY_HANDLE_PROP_ID 79
  3060. #define CERT_SUBJECT_INFO_ACCESS_PROP_ID 80
  3061. #define CERT_CA_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID 81
  3062. #define CERT_CA_DISABLE_CRL_PROP_ID 82
  3063. #define CERT_ROOT_PROGRAM_CERT_POLICIES_PROP_ID 83
  3064. #define CERT_ROOT_PROGRAM_NAME_CONSTRAINTS_PROP_ID 84
  3065. #define CERT_SUBJECT_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID 85
  3066. #define CERT_SUBJECT_DISABLE_CRL_PROP_ID 86
  3067. #define CERT_CEP_PROP_ID 87
  3068. #define CERT_SIGN_HASH_CNG_ALG_PROP_ID 89
  3069. #define CERT_SCARD_PIN_ID_PROP_ID 90
  3070. #define CERT_SCARD_PIN_INFO_PROP_ID 91
  3071. #define CERT_SUBJECT_PUB_KEY_BIT_LENGTH_PROP_ID 92
  3072. #define CERT_PUB_KEY_CNG_ALG_BIT_LENGTH_PROP_ID 93
  3073. #define CERT_ISSUER_PUB_KEY_BIT_LENGTH_PROP_ID 94
  3074. #define CERT_ISSUER_CHAIN_SIGN_HASH_CNG_ALG_PROP_ID 95
  3075. #define CERT_ISSUER_CHAIN_PUB_KEY_CNG_ALG_BIT_LENGTH_PROP_ID 96
  3076. #define CERT_NO_EXPIRE_NOTIFICATION_PROP_ID 97
  3077. #define CERT_AUTH_ROOT_SHA256_HASH_PROP_ID 98
  3078. #define CERT_NCRYPT_KEY_HANDLE_TRANSFER_PROP_ID 99
  3079. #define CERT_HCRYPTPROV_TRANSFER_PROP_ID 100
  3080. #define CERT_SMART_CARD_READER_PROP_ID 101
  3081. #define CERT_SEND_AS_TRUSTED_ISSUER_PROP_ID 102
  3082. #define CERT_KEY_REPAIR_ATTEMPTED_PROP_ID 103
  3083. #define CERT_DISALLOWED_FILETIME_PROP_ID 104
  3084. #define CERT_ROOT_PROGRAM_CHAIN_POLICIES_PROP_ID 105
  3085. #define CERT_SMART_CARD_READER_NON_REMOVABLE_PROP_ID 106
  3086. #define CERT_SHA256_HASH_PROP_ID 107
  3087. #define CERT_SCEP_SERVER_CERTS_PROP_ID 108
  3088. #define CERT_SCEP_RA_SIGNATURE_CERT_PROP_ID 109
  3089. #define CERT_SCEP_RA_ENCRYPTION_CERT_PROP_ID 110
  3090. #define CERT_SCEP_CA_CERT_PROP_ID 111
  3091. #define CERT_SCEP_SIGNER_CERT_PROP_ID 112
  3092. #define CERT_SCEP_NONCE_PROP_ID 113
  3093. #define CERT_SCEP_ENCRYPT_HASH_CNG_ALG_PROP_ID 114
  3094. #define CERT_SCEP_FLAGS_PROP_ID 115
  3095. #define CERT_SCEP_GUID_PROP_ID 116
  3096. #define CERT_SERIALIZABLE_KEY_CONTEXT_PROP_ID 117
  3097. #define CERT_ISOLATED_KEY_PROP_ID 118
  3098. #define CERT_SERIAL_CHAIN_PROP_ID 119
  3099. #define CERT_KEY_CLASSIFICATION_PROP_ID 120
  3100. #define CERT_OCSP_MUST_STAPLE_PROP_ID 121
  3101. #define CERT_DISALLOWED_ENHKEY_USAGE_PROP_ID 122
  3102. #define CERT_NONCOMPLIANT_ROOT_URL_PROP_ID 123
  3103. #define CERT_PIN_SHA256_HASH_PROP_ID 124
  3104. #define CERT_CLR_DELETE_KEY_PROP_ID 125
  3105. #define CERT_NOT_BEFORE_FILETIME_PROP_ID 126
  3106. #define CERT_NOT_BEFORE_ENHKEY_USAGE_PROP_ID 127
  3107. #define CERT_FIRST_RESERVED_PROP_ID 107
  3108. #define CERT_LAST_RESERVED_PROP_ID 0x00007fff
  3109. #define CERT_FIRST_USER_PROP_ID 0x8000
  3110. #define CERT_LAST_USER_PROP_ID 0x0000ffff
  3111. #if defined(__cplusplus) && __cplusplus >= 201103L && !defined(SORTPP_PASS)
  3112. #define WINCRYPT_DWORD_CPP_ONLY : DWORD
  3113. #else
  3114. #define WINCRYPT_DWORD_CPP_ONLY
  3115. #endif
  3116. typedef enum CertKeyType WINCRYPT_DWORD_CPP_ONLY {
  3117. KeyTypeOther = 0,
  3118. KeyTypeVirtualSmartCard = 1,
  3119. KeyTypePhysicalSmartCard = 2,
  3120. KeyTypePassport = 3,
  3121. KeyTypePassportRemote = 4,
  3122. KeyTypePassportSmartCard = 5,
  3123. KeyTypeHardware = 6,
  3124. KeyTypeSoftware = 7,
  3125. KeyTypeSelfSigned = 8
  3126. } CertKeyType;
  3127. #define IS_CERT_HASH_PROP_ID(X) (CERT_SHA1_HASH_PROP_ID == (X) || CERT_MD5_HASH_PROP_ID == (X) || CERT_SIGNATURE_HASH_PROP_ID == (X))
  3128. #define IS_PUBKEY_HASH_PROP_ID(X) (CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID == (X) || CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID == (X))
  3129. #define IS_CHAIN_HASH_PROP_ID(X) (CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID == (X) || CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID == (X) || CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID == (X) || CERT_SUBJECT_NAME_MD5_HASH_PROP_ID == (X))
  3130. #define IS_STRONG_SIGN_PROP_ID(X) (CERT_SIGN_HASH_CNG_ALG_PROP_ID == (X) || CERT_SUBJECT_PUB_KEY_BIT_LENGTH_PROP_ID == (X) || CERT_PUB_KEY_CNG_ALG_BIT_LENGTH_PROP_ID == (X))
  3131. #define szOID_CERT_PROP_ID_PREFIX "1.3.6.1.4.1.311.10.11."
  3132. #define _szPROP_ID(PropId) #PropId
  3133. #define szOID_CERT_PROP_ID(PropId) szOID_CERT_PROP_ID_PREFIX _szPROP_ID (PropId)
  3134. #define __CRYPT32WTEXT(quote) L##quote
  3135. #define _CRYPT32WTEXT(quote) __CRYPT32WTEXT (quote)
  3136. #define wszOID_CERT_PROP_ID(PropId) _CRYPT32WTEXT (szOID_CERT_PROP_ID_PREFIX) _CRYPT32WTEXT (_szPROP_ID (PropId))
  3137. #define szOID_CERT_KEY_IDENTIFIER_PROP_ID "1.3.6.1.4.1.311.10.11.20"
  3138. #define szOID_CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID "1.3.6.1.4.1.311.10.11.28"
  3139. #define szOID_CERT_SUBJECT_NAME_MD5_HASH_PROP_ID "1.3.6.1.4.1.311.10.11.29"
  3140. #define szOID_CERT_MD5_HASH_PROP_ID "1.3.6.1.4.1.311.10.11.4"
  3141. #define szOID_CERT_SIGNATURE_HASH_PROP_ID "1.3.6.1.4.1.311.10.11.15"
  3142. #define szOID_DISALLOWED_HASH szOID_CERT_SIGNATURE_HASH_PROP_ID
  3143. #define szOID_CERT_DISALLOWED_FILETIME_PROP_ID "1.3.6.1.4.1.311.10.11.104"
  3144. #define CERT_ACCESS_STATE_WRITE_PERSIST_FLAG 0x1
  3145. #define CERT_ACCESS_STATE_SYSTEM_STORE_FLAG 0x2
  3146. #define CERT_ACCESS_STATE_LM_SYSTEM_STORE_FLAG 0x4
  3147. #define CERT_ACCESS_STATE_GP_SYSTEM_STORE_FLAG 0x8
  3148. #define CERT_ACCESS_STATE_SHARED_USER_FLAG 0x10
  3149. #define szOID_ROOT_PROGRAM_AUTO_UPDATE_CA_REVOCATION "1.3.6.1.4.1.311.60.3.1"
  3150. #define szOID_ROOT_PROGRAM_AUTO_UPDATE_END_REVOCATION "1.3.6.1.4.1.311.60.3.2"
  3151. #define szOID_ROOT_PROGRAM_NO_OCSP_FAILOVER_TO_CRL "1.3.6.1.4.1.311.60.3.3"
  3152. typedef struct _CRYPT_KEY_PROV_PARAM {
  3153. DWORD dwParam;
  3154. BYTE *pbData;
  3155. DWORD cbData;
  3156. DWORD dwFlags;
  3157. } CRYPT_KEY_PROV_PARAM,*PCRYPT_KEY_PROV_PARAM;
  3158. typedef struct _CRYPT_KEY_PROV_INFO {
  3159. LPWSTR pwszContainerName;
  3160. LPWSTR pwszProvName;
  3161. DWORD dwProvType;
  3162. DWORD dwFlags;
  3163. DWORD cProvParam;
  3164. PCRYPT_KEY_PROV_PARAM rgProvParam;
  3165. DWORD dwKeySpec;
  3166. } CRYPT_KEY_PROV_INFO,*PCRYPT_KEY_PROV_INFO;
  3167. #define CERT_SET_KEY_PROV_HANDLE_PROP_ID 0x1
  3168. #define CERT_SET_KEY_CONTEXT_PROP_ID 0x1
  3169. #define CERT_NCRYPT_KEY_SPEC 0xffffffff
  3170. typedef struct _CERT_KEY_CONTEXT {
  3171. DWORD cbSize;
  3172. __C89_NAMELESS union {
  3173. HCRYPTPROV hCryptProv;
  3174. NCRYPT_KEY_HANDLE hNCryptKey;
  3175. };
  3176. DWORD dwKeySpec;
  3177. } CERT_KEY_CONTEXT,*PCERT_KEY_CONTEXT;
  3178. typedef struct _ROOT_INFO_LUID {
  3179. DWORD LowPart;
  3180. LONG HighPart;
  3181. } ROOT_INFO_LUID,*PROOT_INFO_LUID;
  3182. typedef struct _CRYPT_SMART_CARD_ROOT_INFO {
  3183. BYTE rgbCardID [16];
  3184. ROOT_INFO_LUID luid;
  3185. } CRYPT_SMART_CARD_ROOT_INFO,*PCRYPT_SMART_CARD_ROOT_INFO;
  3186. #define CERT_STORE_PROV_MSG ((LPCSTR) 1)
  3187. #define CERT_STORE_PROV_MEMORY ((LPCSTR) 2)
  3188. #define CERT_STORE_PROV_FILE ((LPCSTR) 3)
  3189. #define CERT_STORE_PROV_REG ((LPCSTR) 4)
  3190. #define CERT_STORE_PROV_PKCS7 ((LPCSTR) 5)
  3191. #define CERT_STORE_PROV_SERIALIZED ((LPCSTR) 6)
  3192. #define CERT_STORE_PROV_FILENAME_A ((LPCSTR) 7)
  3193. #define CERT_STORE_PROV_FILENAME_W ((LPCSTR) 8)
  3194. #define CERT_STORE_PROV_FILENAME CERT_STORE_PROV_FILENAME_W
  3195. #define CERT_STORE_PROV_SYSTEM_A ((LPCSTR) 9)
  3196. #define CERT_STORE_PROV_SYSTEM_W ((LPCSTR) 10)
  3197. #define CERT_STORE_PROV_SYSTEM CERT_STORE_PROV_SYSTEM_W
  3198. #define CERT_STORE_PROV_COLLECTION ((LPCSTR) 11)
  3199. #define CERT_STORE_PROV_SYSTEM_REGISTRY_A ((LPCSTR) 12)
  3200. #define CERT_STORE_PROV_SYSTEM_REGISTRY_W ((LPCSTR) 13)
  3201. #define CERT_STORE_PROV_SYSTEM_REGISTRY CERT_STORE_PROV_SYSTEM_REGISTRY_W
  3202. #define CERT_STORE_PROV_PHYSICAL_W ((LPCSTR) 14)
  3203. #define CERT_STORE_PROV_PHYSICAL CERT_STORE_PROV_PHYSICAL_W
  3204. #define CERT_STORE_PROV_SMART_CARD_W ((LPCSTR) 15)
  3205. #define CERT_STORE_PROV_SMART_CARD CERT_STORE_PROV_SMART_CARD_W
  3206. #define CERT_STORE_PROV_LDAP_W ((LPCSTR) 16)
  3207. #define CERT_STORE_PROV_LDAP CERT_STORE_PROV_LDAP_W
  3208. #define CERT_STORE_PROV_PKCS12 ((LPCSTR) 17)
  3209. #define sz_CERT_STORE_PROV_MEMORY "Memory"
  3210. #define sz_CERT_STORE_PROV_FILENAME_W "File"
  3211. #define sz_CERT_STORE_PROV_FILENAME sz_CERT_STORE_PROV_FILENAME_W
  3212. #define sz_CERT_STORE_PROV_SYSTEM_W "System"
  3213. #define sz_CERT_STORE_PROV_SYSTEM sz_CERT_STORE_PROV_SYSTEM_W
  3214. #define sz_CERT_STORE_PROV_PKCS7 "PKCS7"
  3215. #define sz_CERT_STORE_PROV_PKCS12 "PKCS12"
  3216. #define sz_CERT_STORE_PROV_SERIALIZED "Serialized"
  3217. #define sz_CERT_STORE_PROV_COLLECTION "Collection"
  3218. #define sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W "SystemRegistry"
  3219. #define sz_CERT_STORE_PROV_SYSTEM_REGISTRY sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W
  3220. #define sz_CERT_STORE_PROV_PHYSICAL_W "Physical"
  3221. #define sz_CERT_STORE_PROV_PHYSICAL sz_CERT_STORE_PROV_PHYSICAL_W
  3222. #define sz_CERT_STORE_PROV_SMART_CARD_W "SmartCard"
  3223. #define sz_CERT_STORE_PROV_SMART_CARD sz_CERT_STORE_PROV_SMART_CARD_W
  3224. #define sz_CERT_STORE_PROV_LDAP_W "Ldap"
  3225. #define sz_CERT_STORE_PROV_LDAP sz_CERT_STORE_PROV_LDAP_W
  3226. #define CERT_STORE_SIGNATURE_FLAG 0x1
  3227. #define CERT_STORE_TIME_VALIDITY_FLAG 0x2
  3228. #define CERT_STORE_REVOCATION_FLAG 0x4
  3229. #define CERT_STORE_NO_CRL_FLAG 0x10000
  3230. #define CERT_STORE_NO_ISSUER_FLAG 0x20000
  3231. #define CERT_STORE_BASE_CRL_FLAG 0x100
  3232. #define CERT_STORE_DELTA_CRL_FLAG 0x200
  3233. #define CERT_STORE_NO_CRYPT_RELEASE_FLAG 0x1
  3234. #define CERT_STORE_SET_LOCALIZED_NAME_FLAG 0x2
  3235. #define CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG 0x4
  3236. #define CERT_STORE_DELETE_FLAG 0x10
  3237. #define CERT_STORE_UNSAFE_PHYSICAL_FLAG 0x20
  3238. #define CERT_STORE_SHARE_STORE_FLAG 0x40
  3239. #define CERT_STORE_SHARE_CONTEXT_FLAG 0x80
  3240. #define CERT_STORE_MANIFOLD_FLAG 0x100
  3241. #define CERT_STORE_ENUM_ARCHIVED_FLAG 0x200
  3242. #define CERT_STORE_UPDATE_KEYID_FLAG 0x400
  3243. #define CERT_STORE_BACKUP_RESTORE_FLAG 0x800
  3244. #define CERT_STORE_READONLY_FLAG 0x8000
  3245. #define CERT_STORE_OPEN_EXISTING_FLAG 0x4000
  3246. #define CERT_STORE_CREATE_NEW_FLAG 0x2000
  3247. #define CERT_STORE_MAXIMUM_ALLOWED_FLAG 0x1000
  3248. #define CERT_SYSTEM_STORE_MASK 0xffff0000
  3249. #define CERT_SYSTEM_STORE_RELOCATE_FLAG 0x80000000
  3250. typedef struct _CERT_SYSTEM_STORE_RELOCATE_PARA {
  3251. __C89_NAMELESS union {
  3252. HKEY hKeyBase;
  3253. void *pvBase;
  3254. };
  3255. __C89_NAMELESS union {
  3256. void *pvSystemStore;
  3257. LPCSTR pszSystemStore;
  3258. LPCWSTR pwszSystemStore;
  3259. };
  3260. } CERT_SYSTEM_STORE_RELOCATE_PARA,*PCERT_SYSTEM_STORE_RELOCATE_PARA;
  3261. #define CERT_SYSTEM_STORE_DEFER_READ_FLAG 0x20000000
  3262. #define CERT_SYSTEM_STORE_UNPROTECTED_FLAG 0x40000000
  3263. #define CERT_SYSTEM_STORE_LOCATION_MASK 0x00ff0000
  3264. #define CERT_SYSTEM_STORE_LOCATION_SHIFT 16
  3265. #define CERT_SYSTEM_STORE_CURRENT_USER_ID 1
  3266. #define CERT_SYSTEM_STORE_LOCAL_MACHINE_ID 2
  3267. #define CERT_SYSTEM_STORE_CURRENT_SERVICE_ID 4
  3268. #define CERT_SYSTEM_STORE_SERVICES_ID 5
  3269. #define CERT_SYSTEM_STORE_USERS_ID 6
  3270. #define CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID 7
  3271. #define CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID 8
  3272. #define CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID 9
  3273. #define CERT_SYSTEM_STORE_LOCAL_MACHINE_WCOS_ID 10
  3274. #define CERT_SYSTEM_STORE_CURRENT_USER (CERT_SYSTEM_STORE_CURRENT_USER_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
  3275. #define CERT_SYSTEM_STORE_LOCAL_MACHINE (CERT_SYSTEM_STORE_LOCAL_MACHINE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
  3276. #define CERT_SYSTEM_STORE_CURRENT_SERVICE (CERT_SYSTEM_STORE_CURRENT_SERVICE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
  3277. #define CERT_SYSTEM_STORE_SERVICES (CERT_SYSTEM_STORE_SERVICES_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
  3278. #define CERT_SYSTEM_STORE_USERS (CERT_SYSTEM_STORE_USERS_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
  3279. #define CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY (CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
  3280. #define CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY (CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
  3281. #define CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE (CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
  3282. #define CERT_SYSTEM_STORE_LOCAL_MACHINE_WCOS (CERT_SYSTEM_STORE_LOCAL_MACHINE_WCOS_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
  3283. #define CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L"Software\\Policies\\Microsoft\\SystemCertificates"
  3284. #define CERT_EFSBLOB_REGPATH CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L"\\EFS"
  3285. #define CERT_EFSBLOB_VALUE_NAME L"EFSBlob"
  3286. #define CERT_PROT_ROOT_FLAGS_REGPATH CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L"\\Root\\ProtectedRoots"
  3287. #define CERT_PROT_ROOT_FLAGS_VALUE_NAME L"Flags"
  3288. #define CERT_PROT_ROOT_DISABLE_CURRENT_USER_FLAG 0x1
  3289. #define CERT_PROT_ROOT_INHIBIT_ADD_AT_INIT_FLAG 0x2
  3290. #define CERT_PROT_ROOT_INHIBIT_PURGE_LM_FLAG 0x4
  3291. #define CERT_PROT_ROOT_DISABLE_LM_AUTH_FLAG 0x8
  3292. #define CERT_PROT_ROOT_ONLY_LM_GPT_FLAG 0x8
  3293. #define CERT_PROT_ROOT_DISABLE_NT_AUTH_REQUIRED_FLAG 0x10
  3294. #define CERT_PROT_ROOT_DISABLE_NOT_DEFINED_NAME_CONSTRAINT_FLAG 0x20
  3295. #define CERT_PROT_ROOT_DISABLE_PEER_TRUST 0x10000
  3296. #define CERT_PROT_ROOT_PEER_USAGES_VALUE_NAME L"PeerUsages"
  3297. #define CERT_PROT_ROOT_PEER_USAGES_VALUE_NAME_A "PeerUsages"
  3298. #define CERT_PROT_ROOT_PEER_USAGES_DEFAULT_A szOID_PKIX_KP_CLIENT_AUTH "\0" szOID_PKIX_KP_EMAIL_PROTECTION "\0" szOID_KP_EFS "\0"
  3299. #define CERT_TRUST_PUB_SAFER_GROUP_POLICY_REGPATH CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L"\\TrustedPublisher\\Safer"
  3300. #define CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH L"Software\\Microsoft\\SystemCertificates"
  3301. #define CERT_TRUST_PUB_SAFER_LOCAL_MACHINE_REGPATH CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH L"\\TrustedPublisher\\Safer"
  3302. #define CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME L"AuthenticodeFlags"
  3303. #define CERT_TRUST_PUB_ALLOW_TRUST_MASK 0x3
  3304. #define CERT_TRUST_PUB_ALLOW_END_USER_TRUST 0x0
  3305. #define CERT_TRUST_PUB_ALLOW_MACHINE_ADMIN_TRUST 0x1
  3306. #define CERT_TRUST_PUB_ALLOW_ENTERPRISE_ADMIN_TRUST 0x2
  3307. #define CERT_TRUST_PUB_CHECK_PUBLISHER_REV_FLAG 0x100
  3308. #define CERT_TRUST_PUB_CHECK_TIMESTAMP_REV_FLAG 0x200
  3309. #define CERT_OCM_SUBCOMPONENTS_LOCAL_MACHINE_REGPATH L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Setup\\OC Manager\\Subcomponents"
  3310. #define CERT_OCM_SUBCOMPONENTS_ROOT_AUTO_UPDATE_VALUE_NAME L"RootAutoUpdate"
  3311. #define CERT_DISABLE_ROOT_AUTO_UPDATE_REGPATH CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L"\\AuthRoot"
  3312. #define CERT_DISABLE_ROOT_AUTO_UPDATE_VALUE_NAME L"DisableRootAutoUpdate"
  3313. #define CERT_ENABLE_DISALLOWED_CERT_AUTO_UPDATE_VALUE_NAME L"EnableDisallowedCertAutoUpdate"
  3314. #define CERT_DISABLE_PIN_RULES_AUTO_UPDATE_VALUE_NAME L"DisablePinRulesAutoUpdate"
  3315. #define CERT_AUTO_UPDATE_LOCAL_MACHINE_REGPATH CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH L"\\AuthRoot\\AutoUpdate"
  3316. #define CERT_AUTO_UPDATE_ROOT_DIR_URL_VALUE_NAME L"RootDirUrl"
  3317. #define CERT_AUTO_UPDATE_SYNC_FROM_DIR_URL_VALUE_NAME L"SyncFromDirUrl"
  3318. #define CERT_AUTH_ROOT_AUTO_UPDATE_LOCAL_MACHINE_REGPATH CERT_AUTO_UPDATE_LOCAL_MACHINE_REGPATH
  3319. #define CERT_AUTH_ROOT_AUTO_UPDATE_ROOT_DIR_URL_VALUE_NAME CERT_AUTO_UPDATE_ROOT_DIR_URL_VALUE_NAME
  3320. #define CERT_AUTH_ROOT_AUTO_UPDATE_SYNC_DELTA_TIME_VALUE_NAME L"SyncDeltaTime"
  3321. #define CERT_AUTH_ROOT_AUTO_UPDATE_FLAGS_VALUE_NAME L"Flags"
  3322. #define CERT_AUTH_ROOT_AUTO_UPDATE_DISABLE_UNTRUSTED_ROOT_LOGGING_FLAG 0x1
  3323. #define CERT_AUTH_ROOT_AUTO_UPDATE_DISABLE_PARTIAL_CHAIN_LOGGING_FLAG 0x2
  3324. #define CERT_AUTO_UPDATE_DISABLE_RANDOM_QUERY_STRING_FLAG 0x4
  3325. #define CERT_AUTH_ROOT_AUTO_UPDATE_LAST_SYNC_TIME_VALUE_NAME L"LastSyncTime"
  3326. #define CERT_AUTH_ROOT_AUTO_UPDATE_ENCODED_CTL_VALUE_NAME L"EncodedCtl"
  3327. #define CERT_AUTH_ROOT_CTL_FILENAME L"authroot.stl"
  3328. #define CERT_AUTH_ROOT_CTL_FILENAME_A "authroot.stl"
  3329. #define CERT_AUTH_ROOT_CAB_FILENAME L"authrootstl.cab"
  3330. #define CERT_AUTH_ROOT_SEQ_FILENAME L"authrootseq.txt"
  3331. #define CERT_AUTH_ROOT_CERT_EXT L".crt"
  3332. #define CERT_DISALLOWED_CERT_AUTO_UPDATE_SYNC_DELTA_TIME_VALUE_NAME L"DisallowedCertSyncDeltaTime"
  3333. #define CERT_DISALLOWED_CERT_AUTO_UPDATE_LAST_SYNC_TIME_VALUE_NAME L"DisallowedCertLastSyncTime"
  3334. #define CERT_DISALLOWED_CERT_AUTO_UPDATE_ENCODED_CTL_VALUE_NAME L"DisallowedCertEncodedCtl"
  3335. #define CERT_DISALLOWED_CERT_CTL_FILENAME L"disallowedcert.stl"
  3336. #define CERT_DISALLOWED_CERT_CTL_FILENAME_A "disallowedcert.stl"
  3337. #define CERT_DISALLOWED_CERT_CAB_FILENAME L"disallowedcertstl.cab"
  3338. #define CERT_DISALLOWED_CERT_AUTO_UPDATE_LIST_IDENTIFIER L"DisallowedCert_AutoUpdate_1"
  3339. #define CERT_PIN_RULES_AUTO_UPDATE_SYNC_DELTA_TIME_VALUE_NAME L"PinRulesSyncDeltaTime"
  3340. #define CERT_PIN_RULES_AUTO_UPDATE_LAST_SYNC_TIME_VALUE_NAME L"PinRulesLastSyncTime"
  3341. #define CERT_PIN_RULES_AUTO_UPDATE_ENCODED_CTL_VALUE_NAME L"PinRulesEncodedCtl"
  3342. #define CERT_PIN_RULES_CTL_FILENAME L"pinrules.stl"
  3343. #define CERT_PIN_RULES_CTL_FILENAME_A "pinrules.stl"
  3344. #define CERT_PIN_RULES_CAB_FILENAME L"pinrulesstl.cab"
  3345. #define CERT_PIN_RULES_AUTO_UPDATE_LIST_IDENTIFIER L"PinRules_AutoUpdate_1"
  3346. #define CERT_REGISTRY_STORE_REMOTE_FLAG 0x10000
  3347. #define CERT_REGISTRY_STORE_SERIALIZED_FLAG 0x20000
  3348. #define CERT_REGISTRY_STORE_CLIENT_GPT_FLAG 0x80000000
  3349. #define CERT_REGISTRY_STORE_LM_GPT_FLAG 0x1000000
  3350. typedef struct _CERT_REGISTRY_STORE_CLIENT_GPT_PARA {
  3351. HKEY hKeyBase;
  3352. LPWSTR pwszRegPath;
  3353. } CERT_REGISTRY_STORE_CLIENT_GPT_PARA,*PCERT_REGISTRY_STORE_CLIENT_GPT_PARA;
  3354. #define CERT_REGISTRY_STORE_ROAMING_FLAG 0x40000
  3355. typedef struct _CERT_REGISTRY_STORE_ROAMING_PARA {
  3356. HKEY hKey;
  3357. LPWSTR pwszStoreDirectory;
  3358. } CERT_REGISTRY_STORE_ROAMING_PARA,*PCERT_REGISTRY_STORE_ROAMING_PARA;
  3359. #define CERT_REGISTRY_STORE_MY_IE_DIRTY_FLAG 0x80000
  3360. #define CERT_REGISTRY_STORE_EXTERNAL_FLAG 0x100000
  3361. #define CERT_IE_DIRTY_FLAGS_REGPATH L"Software\\Microsoft\\Cryptography\\IEDirtyFlags"
  3362. #define CERT_FILE_STORE_COMMIT_ENABLE_FLAG 0x10000
  3363. #define CERT_LDAP_STORE_SIGN_FLAG 0x10000
  3364. #define CERT_LDAP_STORE_AREC_EXCLUSIVE_FLAG 0x20000
  3365. #define CERT_LDAP_STORE_OPENED_FLAG 0x40000
  3366. typedef struct _CERT_LDAP_STORE_OPENED_PARA {
  3367. void *pvLdapSessionHandle;
  3368. LPCWSTR pwszLdapUrl;
  3369. } CERT_LDAP_STORE_OPENED_PARA,*PCERT_LDAP_STORE_OPENED_PARA;
  3370. #define CERT_LDAP_STORE_UNBIND_FLAG 0x80000
  3371. WINIMPM HCERTSTORE WINAPI CertOpenStore (LPCSTR lpszStoreProvider, DWORD dwEncodingType, HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const void *pvPara);
  3372. typedef void *HCERTSTOREPROV;
  3373. #define CRYPT_OID_OPEN_STORE_PROV_FUNC "CertDllOpenStoreProv"
  3374. typedef struct _CERT_STORE_PROV_INFO {
  3375. DWORD cbSize;
  3376. DWORD cStoreProvFunc;
  3377. void **rgpvStoreProvFunc;
  3378. HCERTSTOREPROV hStoreProv;
  3379. DWORD dwStoreProvFlags;
  3380. HCRYPTOIDFUNCADDR hStoreProvFuncAddr2;
  3381. } CERT_STORE_PROV_INFO,*PCERT_STORE_PROV_INFO;
  3382. typedef WINBOOL (WINAPI *PFN_CERT_DLL_OPEN_STORE_PROV_FUNC) (LPCSTR lpszStoreProvider, DWORD dwEncodingType, HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const void *pvPara, HCERTSTORE hCertStore, PCERT_STORE_PROV_INFO pStoreProvInfo);
  3383. #define CERT_STORE_PROV_EXTERNAL_FLAG 0x1
  3384. #define CERT_STORE_PROV_DELETED_FLAG 0x2
  3385. #define CERT_STORE_PROV_NO_PERSIST_FLAG 0x4
  3386. #define CERT_STORE_PROV_SYSTEM_STORE_FLAG 0x8
  3387. #define CERT_STORE_PROV_LM_SYSTEM_STORE_FLAG 0x10
  3388. #define CERT_STORE_PROV_GP_SYSTEM_STORE_FLAG 0x20
  3389. #define CERT_STORE_PROV_SHARED_USER_FLAG 0x40
  3390. #define CERT_STORE_PROV_CLOSE_FUNC 0
  3391. #define CERT_STORE_PROV_READ_CERT_FUNC 1
  3392. #define CERT_STORE_PROV_WRITE_CERT_FUNC 2
  3393. #define CERT_STORE_PROV_DELETE_CERT_FUNC 3
  3394. #define CERT_STORE_PROV_SET_CERT_PROPERTY_FUNC 4
  3395. #define CERT_STORE_PROV_READ_CRL_FUNC 5
  3396. #define CERT_STORE_PROV_WRITE_CRL_FUNC 6
  3397. #define CERT_STORE_PROV_DELETE_CRL_FUNC 7
  3398. #define CERT_STORE_PROV_SET_CRL_PROPERTY_FUNC 8
  3399. #define CERT_STORE_PROV_READ_CTL_FUNC 9
  3400. #define CERT_STORE_PROV_WRITE_CTL_FUNC 10
  3401. #define CERT_STORE_PROV_DELETE_CTL_FUNC 11
  3402. #define CERT_STORE_PROV_SET_CTL_PROPERTY_FUNC 12
  3403. #define CERT_STORE_PROV_CONTROL_FUNC 13
  3404. #define CERT_STORE_PROV_FIND_CERT_FUNC 14
  3405. #define CERT_STORE_PROV_FREE_FIND_CERT_FUNC 15
  3406. #define CERT_STORE_PROV_GET_CERT_PROPERTY_FUNC 16
  3407. #define CERT_STORE_PROV_FIND_CRL_FUNC 17
  3408. #define CERT_STORE_PROV_FREE_FIND_CRL_FUNC 18
  3409. #define CERT_STORE_PROV_GET_CRL_PROPERTY_FUNC 19
  3410. #define CERT_STORE_PROV_FIND_CTL_FUNC 20
  3411. #define CERT_STORE_PROV_FREE_FIND_CTL_FUNC 21
  3412. #define CERT_STORE_PROV_GET_CTL_PROPERTY_FUNC 22
  3413. #define CERT_STORE_PROV_WRITE_ADD_FLAG 0x1
  3414. typedef void (WINAPI *PFN_CERT_STORE_PROV_CLOSE) (HCERTSTOREPROV hStoreProv, DWORD dwFlags);
  3415. typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CERT) (HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pStoreCertContext, DWORD dwFlags, PCCERT_CONTEXT *ppProvCertContext);
  3416. typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CERT) (HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwFlags);
  3417. typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CERT) (HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwFlags);
  3418. typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CERT_PROPERTY) (HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwPropId, DWORD dwFlags, const void *pvData);
  3419. typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CRL) (HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pStoreCrlContext, DWORD dwFlags, PCCRL_CONTEXT *ppProvCrlContext);
  3420. typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CRL) (HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, DWORD dwFlags);
  3421. typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CRL) (HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, DWORD dwFlags);
  3422. typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CRL_PROPERTY) (HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, DWORD dwPropId, DWORD dwFlags, const void *pvData);
  3423. typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CTL) (HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pStoreCtlContext, DWORD dwFlags, PCCTL_CONTEXT *ppProvCtlContext);
  3424. typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CTL) (HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwFlags);
  3425. typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CTL) (HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwFlags);
  3426. typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CTL_PROPERTY) (HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwPropId, DWORD dwFlags, const void *pvData);
  3427. typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_CONTROL) (HCERTSTOREPROV hStoreProv, DWORD dwFlags, DWORD dwCtrlType, void const *pvCtrlPara);
  3428. typedef struct _CERT_STORE_PROV_FIND_INFO {
  3429. DWORD cbSize;
  3430. DWORD dwMsgAndCertEncodingType;
  3431. DWORD dwFindFlags;
  3432. DWORD dwFindType;
  3433. const void *pvFindPara;
  3434. } CERT_STORE_PROV_FIND_INFO,*PCERT_STORE_PROV_FIND_INFO;
  3435. typedef const CERT_STORE_PROV_FIND_INFO CCERT_STORE_PROV_FIND_INFO,*PCCERT_STORE_PROV_FIND_INFO;
  3436. typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CERT) (HCERTSTOREPROV hStoreProv, PCCERT_STORE_PROV_FIND_INFO pFindInfo, PCCERT_CONTEXT pPrevCertContext, DWORD dwFlags, void **ppvStoreProvFindInfo, PCCERT_CONTEXT *ppProvCertContext);
  3437. typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CERT) (HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, void *pvStoreProvFindInfo, DWORD dwFlags);
  3438. typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CERT_PROPERTY) (HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwPropId, DWORD dwFlags, void *pvData, DWORD *pcbData);
  3439. typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CRL) (HCERTSTOREPROV hStoreProv, PCCERT_STORE_PROV_FIND_INFO pFindInfo, PCCRL_CONTEXT pPrevCrlContext, DWORD dwFlags, void **ppvStoreProvFindInfo, PCCRL_CONTEXT *ppProvCrlContext);
  3440. typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CRL) (HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, void *pvStoreProvFindInfo, DWORD dwFlags);
  3441. typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CRL_PROPERTY) (HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, DWORD dwPropId, DWORD dwFlags, void *pvData, DWORD *pcbData);
  3442. typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CTL) (HCERTSTOREPROV hStoreProv, PCCERT_STORE_PROV_FIND_INFO pFindInfo, PCCTL_CONTEXT pPrevCtlContext, DWORD dwFlags, void **ppvStoreProvFindInfo, PCCTL_CONTEXT *ppProvCtlContext);
  3443. typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CTL) (HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, void *pvStoreProvFindInfo, DWORD dwFlags);
  3444. typedef WINBOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CTL_PROPERTY) (HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwPropId, DWORD dwFlags, void *pvData, DWORD *pcbData);
  3445. WINIMPM HCERTSTORE WINAPI CertDuplicateStore (HCERTSTORE hCertStore);
  3446. #define CERT_STORE_SAVE_AS_STORE 1
  3447. #define CERT_STORE_SAVE_AS_PKCS7 2
  3448. #define CERT_STORE_SAVE_AS_PKCS12 3
  3449. #define CERT_STORE_SAVE_TO_FILE 1
  3450. #define CERT_STORE_SAVE_TO_MEMORY 2
  3451. #define CERT_STORE_SAVE_TO_FILENAME_A 3
  3452. #define CERT_STORE_SAVE_TO_FILENAME_W 4
  3453. #define CERT_STORE_SAVE_TO_FILENAME CERT_STORE_SAVE_TO_FILENAME_W
  3454. #define CERT_CLOSE_STORE_FORCE_FLAG 0x1
  3455. #define CERT_CLOSE_STORE_CHECK_FLAG 0x2
  3456. WINIMPM WINBOOL WINAPI CertSaveStore (HCERTSTORE hCertStore, DWORD dwEncodingType, DWORD dwSaveAs, DWORD dwSaveTo, void *pvSaveToPara, DWORD dwFlags);
  3457. WINIMPM WINBOOL WINAPI CertCloseStore (HCERTSTORE hCertStore, DWORD dwFlags);
  3458. WINIMPM PCCERT_CONTEXT WINAPI CertGetSubjectCertificateFromStore (HCERTSTORE hCertStore, DWORD dwCertEncodingType, PCERT_INFO pCertId);
  3459. WINIMPM PCCERT_CONTEXT WINAPI CertEnumCertificatesInStore (HCERTSTORE hCertStore, PCCERT_CONTEXT pPrevCertContext);
  3460. WINIMPM PCCERT_CONTEXT WINAPI CertFindCertificateInStore (HCERTSTORE hCertStore, DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, const void *pvFindPara, PCCERT_CONTEXT pPrevCertContext);
  3461. #define CERT_COMPARE_MASK 0xffff
  3462. #define CERT_COMPARE_SHIFT 16
  3463. #define CERT_COMPARE_ANY 0
  3464. #define CERT_COMPARE_SHA1_HASH 1
  3465. #define CERT_COMPARE_NAME 2
  3466. #define CERT_COMPARE_ATTR 3
  3467. #define CERT_COMPARE_MD5_HASH 4
  3468. #define CERT_COMPARE_PROPERTY 5
  3469. #define CERT_COMPARE_PUBLIC_KEY 6
  3470. #define CERT_COMPARE_HASH CERT_COMPARE_SHA1_HASH
  3471. #define CERT_COMPARE_NAME_STR_A 7
  3472. #define CERT_COMPARE_NAME_STR_W 8
  3473. #define CERT_COMPARE_KEY_SPEC 9
  3474. #define CERT_COMPARE_ENHKEY_USAGE 10
  3475. #define CERT_COMPARE_CTL_USAGE CERT_COMPARE_ENHKEY_USAGE
  3476. #define CERT_COMPARE_SUBJECT_CERT 11
  3477. #define CERT_COMPARE_ISSUER_OF 12
  3478. #define CERT_COMPARE_EXISTING 13
  3479. #define CERT_COMPARE_SIGNATURE_HASH 14
  3480. #define CERT_COMPARE_KEY_IDENTIFIER 15
  3481. #define CERT_COMPARE_CERT_ID 16
  3482. #define CERT_COMPARE_CROSS_CERT_DIST_POINTS 17
  3483. #define CERT_COMPARE_PUBKEY_MD5_HASH 18
  3484. #define CERT_COMPARE_SUBJECT_INFO_ACCESS 19
  3485. #define CERT_COMPARE_HASH_STR 20
  3486. #define CERT_COMPARE_HAS_PRIVATE_KEY 21
  3487. #define CERT_FIND_ANY (CERT_COMPARE_ANY << CERT_COMPARE_SHIFT)
  3488. #define CERT_FIND_SHA1_HASH (CERT_COMPARE_SHA1_HASH << CERT_COMPARE_SHIFT)
  3489. #define CERT_FIND_MD5_HASH (CERT_COMPARE_MD5_HASH << CERT_COMPARE_SHIFT)
  3490. #define CERT_FIND_SIGNATURE_HASH (CERT_COMPARE_SIGNATURE_HASH << CERT_COMPARE_SHIFT)
  3491. #define CERT_FIND_KEY_IDENTIFIER (CERT_COMPARE_KEY_IDENTIFIER << CERT_COMPARE_SHIFT)
  3492. #define CERT_FIND_HASH CERT_FIND_SHA1_HASH
  3493. #define CERT_FIND_PROPERTY (CERT_COMPARE_PROPERTY << CERT_COMPARE_SHIFT)
  3494. #define CERT_FIND_PUBLIC_KEY (CERT_COMPARE_PUBLIC_KEY << CERT_COMPARE_SHIFT)
  3495. #define CERT_FIND_SUBJECT_NAME (CERT_COMPARE_NAME << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
  3496. #define CERT_FIND_SUBJECT_ATTR (CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
  3497. #define CERT_FIND_ISSUER_NAME (CERT_COMPARE_NAME << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
  3498. #define CERT_FIND_ISSUER_ATTR (CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
  3499. #define CERT_FIND_SUBJECT_STR_A (CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
  3500. #define CERT_FIND_SUBJECT_STR_W (CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
  3501. #define CERT_FIND_SUBJECT_STR CERT_FIND_SUBJECT_STR_W
  3502. #define CERT_FIND_ISSUER_STR_A (CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
  3503. #define CERT_FIND_ISSUER_STR_W (CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
  3504. #define CERT_FIND_ISSUER_STR CERT_FIND_ISSUER_STR_W
  3505. #define CERT_FIND_KEY_SPEC (CERT_COMPARE_KEY_SPEC << CERT_COMPARE_SHIFT)
  3506. #define CERT_FIND_ENHKEY_USAGE (CERT_COMPARE_ENHKEY_USAGE << CERT_COMPARE_SHIFT)
  3507. #define CERT_FIND_CTL_USAGE CERT_FIND_ENHKEY_USAGE
  3508. #define CERT_FIND_SUBJECT_CERT (CERT_COMPARE_SUBJECT_CERT << CERT_COMPARE_SHIFT)
  3509. #define CERT_FIND_ISSUER_OF (CERT_COMPARE_ISSUER_OF << CERT_COMPARE_SHIFT)
  3510. #define CERT_FIND_EXISTING (CERT_COMPARE_EXISTING << CERT_COMPARE_SHIFT)
  3511. #define CERT_FIND_CERT_ID (CERT_COMPARE_CERT_ID << CERT_COMPARE_SHIFT)
  3512. #define CERT_FIND_CROSS_CERT_DIST_POINTS (CERT_COMPARE_CROSS_CERT_DIST_POINTS << CERT_COMPARE_SHIFT)
  3513. #define CERT_FIND_PUBKEY_MD5_HASH (CERT_COMPARE_PUBKEY_MD5_HASH << CERT_COMPARE_SHIFT)
  3514. #define CERT_FIND_SUBJECT_INFO_ACCESS (CERT_COMPARE_SUBJECT_INFO_ACCESS << CERT_COMPARE_SHIFT)
  3515. #define CERT_FIND_HASH_STR (CERT_COMPARE_HASH_STR << CERT_COMPARE_SHIFT)
  3516. #define CERT_FIND_HAS_PRIVATE_KEY (CERT_COMPARE_HAS_PRIVATE_KEY << CERT_COMPARE_SHIFT)
  3517. #define CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG 0x1
  3518. #define CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG 0x2
  3519. #define CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG 0x4
  3520. #define CERT_FIND_NO_ENHKEY_USAGE_FLAG 0x8
  3521. #define CERT_FIND_OR_ENHKEY_USAGE_FLAG 0x10
  3522. #define CERT_FIND_VALID_ENHKEY_USAGE_FLAG 0x20
  3523. #define CERT_FIND_OPTIONAL_CTL_USAGE_FLAG CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG
  3524. #define CERT_FIND_EXT_ONLY_CTL_USAGE_FLAG CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG
  3525. #define CERT_FIND_PROP_ONLY_CTL_USAGE_FLAG CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG
  3526. #define CERT_FIND_NO_CTL_USAGE_FLAG CERT_FIND_NO_ENHKEY_USAGE_FLAG
  3527. #define CERT_FIND_OR_CTL_USAGE_FLAG CERT_FIND_OR_ENHKEY_USAGE_FLAG
  3528. #define CERT_FIND_VALID_CTL_USAGE_FLAG CERT_FIND_VALID_ENHKEY_USAGE_FLAG
  3529. WINIMPM PCCERT_CONTEXT WINAPI CertGetIssuerCertificateFromStore (HCERTSTORE hCertStore, PCCERT_CONTEXT pSubjectContext, PCCERT_CONTEXT pPrevIssuerContext, DWORD *pdwFlags);
  3530. WINIMPM WINBOOL WINAPI CertVerifySubjectCertificateContext (PCCERT_CONTEXT pSubject, PCCERT_CONTEXT pIssuer, DWORD *pdwFlags);
  3531. WINIMPM PCCERT_CONTEXT WINAPI CertDuplicateCertificateContext (PCCERT_CONTEXT pCertContext);
  3532. WINIMPM PCCERT_CONTEXT WINAPI CertCreateCertificateContext (DWORD dwCertEncodingType, const BYTE *pbCertEncoded, DWORD cbCertEncoded);
  3533. WINIMPM WINBOOL WINAPI CertFreeCertificateContext (PCCERT_CONTEXT pCertContext);
  3534. WINIMPM WINBOOL WINAPI CertSetCertificateContextProperty (PCCERT_CONTEXT pCertContext, DWORD dwPropId, DWORD dwFlags, const void *pvData);
  3535. typedef struct _CRL_FIND_ISSUED_FOR_PARA {
  3536. PCCERT_CONTEXT pSubjectCert;
  3537. PCCERT_CONTEXT pIssuerCert;
  3538. } CRL_FIND_ISSUED_FOR_PARA,*PCRL_FIND_ISSUED_FOR_PARA;
  3539. typedef struct _CTL_ANY_SUBJECT_INFO {
  3540. CRYPT_ALGORITHM_IDENTIFIER SubjectAlgorithm;
  3541. CRYPT_DATA_BLOB SubjectIdentifier;
  3542. } CTL_ANY_SUBJECT_INFO,*PCTL_ANY_SUBJECT_INFO;
  3543. #define CERT_SET_PROPERTY_INHIBIT_PERSIST_FLAG 0x40000000
  3544. #define CERT_SET_PROPERTY_IGNORE_PERSIST_ERROR_FLAG 0x80000000
  3545. #define CTL_ENTRY_FROM_PROP_CHAIN_FLAG 0x1
  3546. #define CRL_FIND_ANY 0
  3547. #define CRL_FIND_ISSUED_BY 1
  3548. #define CRL_FIND_EXISTING 2
  3549. #define CRL_FIND_ISSUED_FOR 3
  3550. #define CRL_FIND_ISSUED_BY_AKI_FLAG 0x1
  3551. #define CRL_FIND_ISSUED_BY_SIGNATURE_FLAG 0x2
  3552. #define CRL_FIND_ISSUED_BY_DELTA_FLAG 0x4
  3553. #define CRL_FIND_ISSUED_BY_BASE_FLAG 0x8
  3554. #define CRL_FIND_ISSUED_FOR_SET_STRONG_PROPERTIES_FLAG 0x10
  3555. #define CERT_STORE_ADD_NEW 1
  3556. #define CERT_STORE_ADD_USE_EXISTING 2
  3557. #define CERT_STORE_ADD_REPLACE_EXISTING 3
  3558. #define CERT_STORE_ADD_ALWAYS 4
  3559. #define CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES 5
  3560. #define CERT_STORE_ADD_NEWER 6
  3561. #define CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES 7
  3562. #define CERT_STORE_CERTIFICATE_CONTEXT 1
  3563. #define CERT_STORE_CRL_CONTEXT 2
  3564. #define CERT_STORE_CTL_CONTEXT 3
  3565. #define CERT_STORE_ALL_CONTEXT_FLAG (~__MSABI_LONG(0U))
  3566. #define CERT_STORE_CERTIFICATE_CONTEXT_FLAG (1 << CERT_STORE_CERTIFICATE_CONTEXT)
  3567. #define CERT_STORE_CRL_CONTEXT_FLAG (1 << CERT_STORE_CRL_CONTEXT)
  3568. #define CERT_STORE_CTL_CONTEXT_FLAG (1 << CERT_STORE_CTL_CONTEXT)
  3569. #define CTL_ANY_SUBJECT_TYPE 1
  3570. #define CTL_CERT_SUBJECT_TYPE 2
  3571. WINIMPM PCCRL_CONTEXT WINAPI CertEnumCRLsInStore (HCERTSTORE hCertStore, PCCRL_CONTEXT pPrevCrlContext);
  3572. WINIMPM WINBOOL WINAPI CertDeleteCRLFromStore (PCCRL_CONTEXT pCrlContext);
  3573. WINIMPM PCCRL_CONTEXT WINAPI CertDuplicateCRLContext (PCCRL_CONTEXT pCrlContext);
  3574. WINIMPM PCCRL_CONTEXT WINAPI CertFindCRLInStore (HCERTSTORE hCertStore, DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, const void *pvFindPara, PCCRL_CONTEXT pPrevCrlContext);
  3575. WINIMPM WINBOOL WINAPI CertFreeCRLContext (PCCRL_CONTEXT pCrlContext);
  3576. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) || _WIN32_WINNT >= 0x0A00
  3577. WINIMPM WINBOOL WINAPI CertGetCertificateContextProperty (PCCERT_CONTEXT pCertContext, DWORD dwPropId, void *pvData, DWORD *pcbData);
  3578. WINIMPM DWORD WINAPI CertEnumCertificateContextProperties (PCCERT_CONTEXT pCertContext, DWORD dwPropId);
  3579. WINIMPM WINBOOL WINAPI CertDeleteCertificateFromStore (PCCERT_CONTEXT pCertContext);
  3580. #endif
  3581. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
  3582. WINIMPM WINBOOL WINAPI CertCreateCTLEntryFromCertificateContextProperties (PCCERT_CONTEXT pCertContext, DWORD cOptAttr, PCRYPT_ATTRIBUTE rgOptAttr, DWORD dwFlags, void *pvReserved, PCTL_ENTRY pCtlEntry, DWORD *pcbCtlEntry);
  3583. WINIMPM WINBOOL WINAPI CertSetCertificateContextPropertiesFromCTLEntry (PCCERT_CONTEXT pCertContext, PCTL_ENTRY pCtlEntry, DWORD dwFlags);
  3584. WINIMPM PCCRL_CONTEXT WINAPI CertGetCRLFromStore (HCERTSTORE hCertStore, PCCERT_CONTEXT pIssuerContext, PCCRL_CONTEXT pPrevCrlContext, DWORD *pdwFlags);
  3585. WINIMPM PCCRL_CONTEXT WINAPI CertCreateCRLContext (DWORD dwCertEncodingType, const BYTE *pbCrlEncoded, DWORD cbCrlEncoded);
  3586. WINIMPM WINBOOL WINAPI CertSetCRLContextProperty (PCCRL_CONTEXT pCrlContext, DWORD dwPropId, DWORD dwFlags, const void *pvData);
  3587. WINIMPM WINBOOL WINAPI CertGetCRLContextProperty (PCCRL_CONTEXT pCrlContext, DWORD dwPropId, void *pvData, DWORD *pcbData);
  3588. WINIMPM DWORD WINAPI CertEnumCRLContextProperties (PCCRL_CONTEXT pCrlContext, DWORD dwPropId);
  3589. WINIMPM WINBOOL WINAPI CertFindCertificateInCRL (PCCERT_CONTEXT pCert, PCCRL_CONTEXT pCrlContext, DWORD dwFlags, void *pvReserved, PCRL_ENTRY *ppCrlEntry);
  3590. WINIMPM WINBOOL WINAPI CertIsValidCRLForCertificate (PCCERT_CONTEXT pCert, PCCRL_CONTEXT pCrl, DWORD dwFlags, void *pvReserved);
  3591. WINIMPM WINBOOL WINAPI CertAddEncodedCertificateToStore (HCERTSTORE hCertStore, DWORD dwCertEncodingType, const BYTE *pbCertEncoded, DWORD cbCertEncoded, DWORD dwAddDisposition, PCCERT_CONTEXT *ppCertContext);
  3592. WINIMPM WINBOOL WINAPI CertAddCertificateContextToStore (HCERTSTORE hCertStore, PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition, PCCERT_CONTEXT *ppStoreContext);
  3593. WINIMPM WINBOOL WINAPI CertAddSerializedElementToStore (HCERTSTORE hCertStore, const BYTE *pbElement, DWORD cbElement, DWORD dwAddDisposition, DWORD dwFlags, DWORD dwContextTypeFlags, DWORD *pdwContextType, const void **ppvContext);
  3594. WINIMPM WINBOOL WINAPI CertAddEncodedCRLToStore (HCERTSTORE hCertStore, DWORD dwCertEncodingType, const BYTE *pbCrlEncoded, DWORD cbCrlEncoded, DWORD dwAddDisposition, PCCRL_CONTEXT *ppCrlContext);
  3595. WINIMPM WINBOOL WINAPI CertAddCRLContextToStore (HCERTSTORE hCertStore, PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition, PCCRL_CONTEXT *ppStoreContext);
  3596. WINIMPM WINBOOL WINAPI CertSerializeCertificateStoreElement (PCCERT_CONTEXT pCertContext, DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement);
  3597. WINIMPM WINBOOL WINAPI CertSerializeCRLStoreElement (PCCRL_CONTEXT pCrlContext, DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement);
  3598. WINIMPM PCCTL_CONTEXT WINAPI CertDuplicateCTLContext (PCCTL_CONTEXT pCtlContext);
  3599. WINIMPM PCCTL_CONTEXT WINAPI CertCreateCTLContext (DWORD dwMsgAndCertEncodingType, const BYTE *pbCtlEncoded, DWORD cbCtlEncoded);
  3600. WINIMPM WINBOOL WINAPI CertFreeCTLContext (PCCTL_CONTEXT pCtlContext);
  3601. WINIMPM WINBOOL WINAPI CertSetCTLContextProperty (PCCTL_CONTEXT pCtlContext, DWORD dwPropId, DWORD dwFlags, const void *pvData);
  3602. WINIMPM WINBOOL WINAPI CertGetCTLContextProperty (PCCTL_CONTEXT pCtlContext, DWORD dwPropId, void *pvData, DWORD *pcbData);
  3603. WINIMPM DWORD WINAPI CertEnumCTLContextProperties (PCCTL_CONTEXT pCtlContext, DWORD dwPropId);
  3604. WINIMPM PCCTL_CONTEXT WINAPI CertEnumCTLsInStore (HCERTSTORE hCertStore, PCCTL_CONTEXT pPrevCtlContext);
  3605. WINIMPM PCTL_ENTRY WINAPI CertFindSubjectInCTL (DWORD dwEncodingType, DWORD dwSubjectType, void *pvSubject, PCCTL_CONTEXT pCtlContext, DWORD dwFlags);
  3606. WINIMPM PCCTL_CONTEXT WINAPI CertFindCTLInStore (HCERTSTORE hCertStore, DWORD dwMsgAndCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, const void *pvFindPara, PCCTL_CONTEXT pPrevCtlContext);
  3607. #define CTL_FIND_ANY 0
  3608. #define CTL_FIND_SHA1_HASH 1
  3609. #define CTL_FIND_MD5_HASH 2
  3610. #define CTL_FIND_USAGE 3
  3611. #define CTL_FIND_SUBJECT 4
  3612. #define CTL_FIND_EXISTING 5
  3613. #define CTL_FIND_SAME_USAGE_FLAG 0x1
  3614. #define CTL_FIND_NO_LIST_ID_CBDATA 0xffffffff
  3615. #define CTL_FIND_NO_SIGNER_PTR ((PCERT_INFO) -1)
  3616. #define CERT_STORE_CTRL_RESYNC 1
  3617. #define CERT_STORE_CTRL_NOTIFY_CHANGE 2
  3618. #define CERT_STORE_CTRL_COMMIT 3
  3619. #define CERT_STORE_CTRL_AUTO_RESYNC 4
  3620. #define CERT_STORE_CTRL_CANCEL_NOTIFY 5
  3621. #define CERT_STORE_CTRL_INHIBIT_DUPLICATE_HANDLE_FLAG 0x1
  3622. #define CERT_STORE_CTRL_COMMIT_FORCE_FLAG 0x1
  3623. #define CERT_STORE_CTRL_COMMIT_CLEAR_FLAG 0x2
  3624. #define CERT_STORE_LOCALIZED_NAME_PROP_ID 0x1000
  3625. #define CERT_CREATE_CONTEXT_NOCOPY_FLAG 0x1
  3626. #define CERT_CREATE_CONTEXT_SORTED_FLAG 0x2
  3627. #define CERT_CREATE_CONTEXT_NO_HCRYPTMSG_FLAG 0x4
  3628. #define CERT_CREATE_CONTEXT_NO_ENTRY_FLAG 0x8
  3629. #define CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG 0x1
  3630. #define CERT_PHYSICAL_STORE_OPEN_DISABLE_FLAG 0x2
  3631. #define CERT_PHYSICAL_STORE_REMOTE_OPEN_DISABLE_FLAG 0x4
  3632. #define CERT_PHYSICAL_STORE_INSERT_COMPUTER_NAME_ENABLE_FLAG 0x8
  3633. typedef struct _CTL_FIND_USAGE_PARA {
  3634. DWORD cbSize;
  3635. CTL_USAGE SubjectUsage;
  3636. CRYPT_DATA_BLOB ListIdentifier;
  3637. PCERT_INFO pSigner;
  3638. } CTL_FIND_USAGE_PARA,*PCTL_FIND_USAGE_PARA;
  3639. typedef struct _CTL_FIND_SUBJECT_PARA {
  3640. DWORD cbSize;
  3641. PCTL_FIND_USAGE_PARA pUsagePara;
  3642. DWORD dwSubjectType;
  3643. void *pvSubject;
  3644. } CTL_FIND_SUBJECT_PARA,*PCTL_FIND_SUBJECT_PARA;
  3645. typedef WINBOOL (WINAPI *PFN_CERT_CREATE_CONTEXT_SORT_FUNC) (DWORD cbTotalEncoded, DWORD cbRemainEncoded, DWORD cEntry, void *pvSort);
  3646. typedef struct _CERT_CREATE_CONTEXT_PARA {
  3647. DWORD cbSize;
  3648. PFN_CRYPT_FREE pfnFree;
  3649. void *pvFree;
  3650. PFN_CERT_CREATE_CONTEXT_SORT_FUNC pfnSort;
  3651. void *pvSort;
  3652. } CERT_CREATE_CONTEXT_PARA,*PCERT_CREATE_CONTEXT_PARA;
  3653. typedef struct _CERT_SYSTEM_STORE_INFO {
  3654. DWORD cbSize;
  3655. } CERT_SYSTEM_STORE_INFO,*PCERT_SYSTEM_STORE_INFO;
  3656. typedef struct _CERT_PHYSICAL_STORE_INFO {
  3657. DWORD cbSize;
  3658. LPSTR pszOpenStoreProvider;
  3659. DWORD dwOpenEncodingType;
  3660. DWORD dwOpenFlags;
  3661. CRYPT_DATA_BLOB OpenParameters;
  3662. DWORD dwFlags;
  3663. DWORD dwPriority;
  3664. } CERT_PHYSICAL_STORE_INFO,*PCERT_PHYSICAL_STORE_INFO;
  3665. WINIMPM WINBOOL WINAPI CertAddEncodedCTLToStore (HCERTSTORE hCertStore, DWORD dwMsgAndCertEncodingType, const BYTE *pbCtlEncoded, DWORD cbCtlEncoded, DWORD dwAddDisposition, PCCTL_CONTEXT *ppCtlContext);
  3666. WINIMPM WINBOOL WINAPI CertAddCTLContextToStore (HCERTSTORE hCertStore, PCCTL_CONTEXT pCtlContext, DWORD dwAddDisposition, PCCTL_CONTEXT *ppStoreContext);
  3667. WINIMPM WINBOOL WINAPI CertSerializeCTLStoreElement (PCCTL_CONTEXT pCtlContext, DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement);
  3668. WINIMPM WINBOOL WINAPI CertDeleteCTLFromStore (PCCTL_CONTEXT pCtlContext);
  3669. WINIMPM WINBOOL WINAPI CertAddCertificateLinkToStore (HCERTSTORE hCertStore, PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition, PCCERT_CONTEXT *ppStoreContext);
  3670. WINIMPM WINBOOL WINAPI CertAddCRLLinkToStore (HCERTSTORE hCertStore, PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition, PCCRL_CONTEXT *ppStoreContext);
  3671. WINIMPM WINBOOL WINAPI CertAddCTLLinkToStore (HCERTSTORE hCertStore, PCCTL_CONTEXT pCtlContext, DWORD dwAddDisposition, PCCTL_CONTEXT *ppStoreContext);
  3672. WINIMPM WINBOOL WINAPI CertAddStoreToCollection (HCERTSTORE hCollectionStore, HCERTSTORE hSiblingStore, DWORD dwUpdateFlags, DWORD dwPriority);
  3673. WINIMPM void WINAPI CertRemoveStoreFromCollection (HCERTSTORE hCollectionStore, HCERTSTORE hSiblingStore);
  3674. WINIMPM WINBOOL WINAPI CertControlStore (HCERTSTORE hCertStore, DWORD dwFlags, DWORD dwCtrlType, void const *pvCtrlPara);
  3675. WINIMPM WINBOOL WINAPI CertSetStoreProperty (HCERTSTORE hCertStore, DWORD dwPropId, DWORD dwFlags, const void *pvData);
  3676. WINIMPM WINBOOL WINAPI CertGetStoreProperty (HCERTSTORE hCertStore, DWORD dwPropId, void *pvData, DWORD *pcbData);
  3677. WINIMPM const void *WINAPI CertCreateContext (DWORD dwContextType, DWORD dwEncodingType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCERT_CREATE_CONTEXT_PARA pCreatePara);
  3678. WINIMPM WINBOOL WINAPI CertRegisterSystemStore (const void *pvSystemStore, DWORD dwFlags, PCERT_SYSTEM_STORE_INFO pStoreInfo, void *pvReserved);
  3679. WINIMPM WINBOOL WINAPI CertRegisterPhysicalStore (const void *pvSystemStore, DWORD dwFlags, LPCWSTR pwszStoreName, PCERT_PHYSICAL_STORE_INFO pStoreInfo, void *pvReserved);
  3680. WINIMPM WINBOOL WINAPI CertUnregisterSystemStore (const void *pvSystemStore, DWORD dwFlags);
  3681. WINIMPM WINBOOL WINAPI CertUnregisterPhysicalStore (const void *pvSystemStore, DWORD dwFlags, LPCWSTR pwszStoreName);
  3682. typedef WINBOOL (WINAPI *PFN_CERT_ENUM_SYSTEM_STORE_LOCATION) (LPCWSTR pwszStoreLocation, DWORD dwFlags, void *pvReserved, void *pvArg);
  3683. typedef WINBOOL (WINAPI *PFN_CERT_ENUM_SYSTEM_STORE) (const void *pvSystemStore, DWORD dwFlags, PCERT_SYSTEM_STORE_INFO pStoreInfo, void *pvReserved, void *pvArg);
  3684. typedef WINBOOL (WINAPI *PFN_CERT_ENUM_PHYSICAL_STORE) (const void *pvSystemStore, DWORD dwFlags, LPCWSTR pwszStoreName, PCERT_PHYSICAL_STORE_INFO pStoreInfo, void *pvReserved, void *pvArg);
  3685. #define CERT_PHYSICAL_STORE_PREDEFINED_ENUM_FLAG 0x1
  3686. #define CERT_PHYSICAL_STORE_DEFAULT_NAME L".Default"
  3687. #define CERT_PHYSICAL_STORE_GROUP_POLICY_NAME L".GroupPolicy"
  3688. #define CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME L".LocalMachine"
  3689. #define CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME L".UserCertificate"
  3690. #define CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME L".LocalMachineGroupPolicy"
  3691. #define CERT_PHYSICAL_STORE_ENTERPRISE_NAME L".Enterprise"
  3692. #define CERT_PHYSICAL_STORE_AUTH_ROOT_NAME L".AuthRoot"
  3693. #define CERT_PHYSICAL_STORE_SMART_CARD_NAME L".SmartCard"
  3694. WINIMPM WINBOOL WINAPI CertEnumSystemStoreLocation (DWORD dwFlags, void *pvArg, PFN_CERT_ENUM_SYSTEM_STORE_LOCATION pfnEnum);
  3695. WINIMPM WINBOOL WINAPI CertEnumSystemStore (DWORD dwFlags, void *pvSystemStoreLocationPara, void *pvArg, PFN_CERT_ENUM_SYSTEM_STORE pfnEnum);
  3696. WINIMPM WINBOOL WINAPI CertEnumPhysicalStore (const void *pvSystemStore, DWORD dwFlags, void *pvArg, PFN_CERT_ENUM_PHYSICAL_STORE pfnEnum);
  3697. #define CRYPT_OID_OPEN_SYSTEM_STORE_PROV_FUNC "CertDllOpenSystemStoreProv"
  3698. #define CRYPT_OID_REGISTER_SYSTEM_STORE_FUNC "CertDllRegisterSystemStore"
  3699. #define CRYPT_OID_UNREGISTER_SYSTEM_STORE_FUNC "CertDllUnregisterSystemStore"
  3700. #define CRYPT_OID_ENUM_SYSTEM_STORE_FUNC "CertDllEnumSystemStore"
  3701. #define CRYPT_OID_REGISTER_PHYSICAL_STORE_FUNC "CertDllRegisterPhysicalStore"
  3702. #define CRYPT_OID_UNREGISTER_PHYSICAL_STORE_FUNC "CertDllUnregisterPhysicalStore"
  3703. #define CRYPT_OID_ENUM_PHYSICAL_STORE_FUNC "CertDllEnumPhysicalStore"
  3704. #define CRYPT_OID_SYSTEM_STORE_LOCATION_VALUE_NAME L"SystemStoreLocation"
  3705. #define CMSG_TRUSTED_SIGNER_FLAG 0x1
  3706. #define CMSG_SIGNER_ONLY_FLAG 0x2
  3707. #define CMSG_USE_SIGNER_INDEX_FLAG 0x4
  3708. #define CMSG_CMS_ENCAPSULATED_CTL_FLAG 0x8000
  3709. #define CMSG_ENCODE_SORTED_CTL_FLAG 0x1
  3710. #define CMSG_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG 0x2
  3711. WINIMPM WINBOOL WINAPI CertGetEnhancedKeyUsage (PCCERT_CONTEXT pCertContext, DWORD dwFlags, PCERT_ENHKEY_USAGE pUsage, DWORD *pcbUsage);
  3712. WINIMPM WINBOOL WINAPI CertSetEnhancedKeyUsage (PCCERT_CONTEXT pCertContext, PCERT_ENHKEY_USAGE pUsage);
  3713. WINIMPM WINBOOL WINAPI CertAddEnhancedKeyUsageIdentifier (PCCERT_CONTEXT pCertContext, LPCSTR pszUsageIdentifier);
  3714. WINIMPM WINBOOL WINAPI CertRemoveEnhancedKeyUsageIdentifier (PCCERT_CONTEXT pCertContext, LPCSTR pszUsageIdentifier);
  3715. WINIMPM WINBOOL WINAPI CertGetValidUsages (DWORD cCerts, PCCERT_CONTEXT *rghCerts, int *cNumOIDs, LPSTR *rghOIDs, DWORD *pcbOIDs);
  3716. WINIMPM WINBOOL WINAPI CryptMsgGetAndVerifySigner (HCRYPTMSG hCryptMsg, DWORD cSignerStore, HCERTSTORE *rghSignerStore, DWORD dwFlags, PCCERT_CONTEXT *ppSigner, DWORD *pdwSignerIndex);
  3717. WINIMPM WINBOOL WINAPI CryptMsgSignCTL (DWORD dwMsgEncodingType, BYTE *pbCtlContent, DWORD cbCtlContent, PCMSG_SIGNED_ENCODE_INFO pSignInfo, DWORD dwFlags, BYTE *pbEncoded, DWORD *pcbEncoded);
  3718. WINIMPM WINBOOL WINAPI CryptMsgEncodeAndSignCTL (DWORD dwMsgEncodingType, PCTL_INFO pCtlInfo, PCMSG_SIGNED_ENCODE_INFO pSignInfo, DWORD dwFlags, BYTE *pbEncoded, DWORD *pcbEncoded);
  3719. WINIMPM WINBOOL WINAPI CertFindSubjectInSortedCTL (PCRYPT_DATA_BLOB pSubjectIdentifier, PCCTL_CONTEXT pCtlContext, DWORD dwFlags, void *pvReserved, PCRYPT_DER_BLOB pEncodedAttributes);
  3720. WINIMPM WINBOOL WINAPI CertEnumSubjectInSortedCTL (PCCTL_CONTEXT pCtlContext, void **ppvNextSubject, PCRYPT_DER_BLOB pSubjectIdentifier, PCRYPT_DER_BLOB pEncodedAttributes);
  3721. typedef struct _CTL_VERIFY_USAGE_PARA {
  3722. DWORD cbSize;
  3723. CRYPT_DATA_BLOB ListIdentifier;
  3724. DWORD cCtlStore;
  3725. HCERTSTORE *rghCtlStore;
  3726. DWORD cSignerStore;
  3727. HCERTSTORE *rghSignerStore;
  3728. } CTL_VERIFY_USAGE_PARA,*PCTL_VERIFY_USAGE_PARA;
  3729. typedef struct _CTL_VERIFY_USAGE_STATUS {
  3730. DWORD cbSize;
  3731. DWORD dwError;
  3732. DWORD dwFlags;
  3733. PCCTL_CONTEXT *ppCtl;
  3734. DWORD dwCtlEntryIndex;
  3735. PCCERT_CONTEXT *ppSigner;
  3736. DWORD dwSignerIndex;
  3737. } CTL_VERIFY_USAGE_STATUS,*PCTL_VERIFY_USAGE_STATUS;
  3738. #define CERT_VERIFY_INHIBIT_CTL_UPDATE_FLAG 0x1
  3739. #define CERT_VERIFY_TRUSTED_SIGNERS_FLAG 0x2
  3740. #define CERT_VERIFY_NO_TIME_CHECK_FLAG 0x4
  3741. #define CERT_VERIFY_ALLOW_MORE_USAGE_FLAG 0x8
  3742. #define CERT_VERIFY_UPDATED_CTL_FLAG 0x1
  3743. WINIMPM WINBOOL WINAPI CertVerifyCTLUsage (DWORD dwEncodingType, DWORD dwSubjectType, void *pvSubject, PCTL_USAGE pSubjectUsage, DWORD dwFlags, PCTL_VERIFY_USAGE_PARA pVerifyUsagePara, PCTL_VERIFY_USAGE_STATUS pVerifyUsageStatus);
  3744. typedef struct _CERT_REVOCATION_CRL_INFO {
  3745. DWORD cbSize;
  3746. PCCRL_CONTEXT pBaseCrlContext;
  3747. PCCRL_CONTEXT pDeltaCrlContext;
  3748. PCRL_ENTRY pCrlEntry;
  3749. WINBOOL fDeltaCrlEntry;
  3750. } CERT_REVOCATION_CRL_INFO,*PCERT_REVOCATION_CRL_INFO;
  3751. typedef struct _CERT_REVOCATION_CHAIN_PARA CERT_REVOCATION_CHAIN_PARA,*PCERT_REVOCATION_CHAIN_PARA;
  3752. typedef struct _CERT_REVOCATION_PARA {
  3753. DWORD cbSize;
  3754. PCCERT_CONTEXT pIssuerCert;
  3755. DWORD cCertStore;
  3756. HCERTSTORE *rgCertStore;
  3757. HCERTSTORE hCrlStore;
  3758. LPFILETIME pftTimeToUse;
  3759. #ifdef CERT_REVOCATION_PARA_HAS_EXTRA_FIELDS
  3760. DWORD dwUrlRetrievalTimeout;
  3761. WINBOOL fCheckFreshnessTime;
  3762. DWORD dwFreshnessTime;
  3763. LPFILETIME pftCurrentTime;
  3764. PCERT_REVOCATION_CRL_INFO pCrlInfo;
  3765. LPFILETIME pftCacheResync;
  3766. PCERT_REVOCATION_CHAIN_PARA pChainPara;
  3767. #endif
  3768. } CERT_REVOCATION_PARA,*PCERT_REVOCATION_PARA;
  3769. typedef struct _CERT_REVOCATION_STATUS {
  3770. DWORD cbSize;
  3771. DWORD dwIndex;
  3772. DWORD dwError;
  3773. DWORD dwReason;
  3774. WINBOOL fHasFreshnessTime;
  3775. DWORD dwFreshnessTime;
  3776. } CERT_REVOCATION_STATUS,*PCERT_REVOCATION_STATUS;
  3777. #define CERT_CONTEXT_REVOCATION_TYPE 1
  3778. #define CERT_VERIFY_REV_CHAIN_FLAG 0x1
  3779. #define CERT_VERIFY_CACHE_ONLY_BASED_REVOCATION 0x2
  3780. #define CERT_VERIFY_REV_ACCUMULATIVE_TIMEOUT_FLAG 0x4
  3781. #define CERT_VERIFY_REV_SERVER_OCSP_FLAG 0x8
  3782. #define CERT_VERIFY_REV_NO_OCSP_FAILOVER_TO_CRL_FLAG 0x10
  3783. #define CERT_UNICODE_IS_RDN_ATTRS_FLAG 0x1
  3784. #define CERT_CASE_INSENSITIVE_IS_RDN_ATTRS_FLAG 0x2
  3785. #define CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB 1
  3786. #define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT 2
  3787. #define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL 3
  3788. #define CRYPT_VERIFY_CERT_SIGN_SUBJECT_OCSP_BASIC_SIGNED_RESPONSE 4
  3789. #define CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY 1
  3790. #define CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT 2
  3791. #define CRYPT_VERIFY_CERT_SIGN_ISSUER_CHAIN 3
  3792. #define CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL 4
  3793. #define CRYPT_VERIFY_CERT_SIGN_DISABLE_MD2_MD4_FLAG 0x1
  3794. #define CRYPT_VERIFY_CERT_SIGN_SET_STRONG_PROPERTIES_FLAG 0x2
  3795. #define CRYPT_VERIFY_CERT_SIGN_RETURN_STRONG_PROPERTIES_FLAG 0x4
  3796. #define CRYPT_OID_EXTRACT_ENCODED_SIGNATURE_PARAMETERS_FUNC "CryptDllExtractEncodedSignatureParameters"
  3797. #define CRYPT_OID_SIGN_AND_ENCODE_HASH_FUNC "CryptDllSignAndEncodeHash"
  3798. #define CRYPT_OID_VERIFY_ENCODED_SIGNATURE_FUNC "CryptDllVerifyEncodedSignature"
  3799. #define CRYPT_DEFAULT_CONTEXT_AUTO_RELEASE_FLAG 0x1
  3800. #define CRYPT_DEFAULT_CONTEXT_PROCESS_FLAG 0x2
  3801. #define CRYPT_DEFAULT_CONTEXT_CERT_SIGN_OID 1
  3802. #define CRYPT_DEFAULT_CONTEXT_MULTI_CERT_SIGN_OID 2
  3803. typedef struct _CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO {
  3804. CRYPT_DATA_BLOB CertSignHashCNGAlgPropData;
  3805. CRYPT_DATA_BLOB CertIssuerPubKeyBitLengthPropData;
  3806. } CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO, *PCRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO;
  3807. typedef WINBOOL (WINAPI *PFN_CRYPT_EXTRACT_ENCODED_SIGNATURE_PARAMETERS_FUNC) (DWORD dwCertEncodingType, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, void **ppvDecodedSignPara, LPWSTR *ppwszCNGHashAlgid);
  3808. typedef WINBOOL (WINAPI *PFN_CRYPT_SIGN_AND_ENCODE_HASH_FUNC) (NCRYPT_KEY_HANDLE hKey, DWORD dwCertEncodingType, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, void *pvDecodedSignPara, LPCWSTR pwszCNGPubKeyAlgid, LPCWSTR pwszCNGHashAlgid, BYTE *pbComputedHash, DWORD cbComputedHash, BYTE *pbSignature, DWORD *pcbSignature);
  3809. typedef WINBOOL (WINAPI *PFN_CRYPT_VERIFY_ENCODED_SIGNATURE_FUNC) (DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pPubKeyInfo, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, void *pvDecodedSignPara, LPCWSTR pwszCNGPubKeyAlgid, LPCWSTR pwszCNGHashAlgid, BYTE *pbComputedHash, DWORD cbComputedHash, BYTE *pbSignature, DWORD cbSignature);
  3810. typedef void *HCRYPTDEFAULTCONTEXT;
  3811. typedef struct _CRYPT_DEFAULT_CONTEXT_MULTI_OID_PARA {
  3812. DWORD cOID;
  3813. LPSTR *rgpszOID;
  3814. } CRYPT_DEFAULT_CONTEXT_MULTI_OID_PARA,*PCRYPT_DEFAULT_CONTEXT_MULTI_OID_PARA;
  3815. WINIMPM WINBOOL WINAPI CertVerifyRevocation (DWORD dwEncodingType, DWORD dwRevType, DWORD cContext, PVOID rgpvContext[], DWORD dwFlags, PCERT_REVOCATION_PARA pRevPara, PCERT_REVOCATION_STATUS pRevStatus);
  3816. WINBOOL WINAPI CertCompareIntegerBlob (PCRYPT_INTEGER_BLOB pInt1, PCRYPT_INTEGER_BLOB pInt2);
  3817. WINIMPM WINBOOL WINAPI CertCompareCertificate (DWORD dwCertEncodingType, PCERT_INFO pCertId1, PCERT_INFO pCertId2);
  3818. WINIMPM WINBOOL WINAPI CertCompareCertificateName (DWORD dwCertEncodingType, PCERT_NAME_BLOB pCertName1, PCERT_NAME_BLOB pCertName2);
  3819. WINIMPM WINBOOL WINAPI CertIsRDNAttrsInCertificateName (DWORD dwCertEncodingType, DWORD dwFlags, PCERT_NAME_BLOB pCertName, PCERT_RDN pRDN);
  3820. WINIMPM WINBOOL WINAPI CertComparePublicKeyInfo (DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pPublicKey1, PCERT_PUBLIC_KEY_INFO pPublicKey2);
  3821. WINIMPM DWORD WINAPI CertGetPublicKeyLength (DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pPublicKey);
  3822. WINIMPM WINBOOL WINAPI CryptVerifyCertificateSignature (HCRYPTPROV_LEGACY hCryptProv, DWORD dwCertEncodingType, const BYTE *pbEncoded, DWORD cbEncoded, PCERT_PUBLIC_KEY_INFO pPublicKey);
  3823. WINIMPM WINBOOL WINAPI CryptVerifyCertificateSignatureEx (HCRYPTPROV_LEGACY hCryptProv, DWORD dwCertEncodingType, DWORD dwSubjectType, void *pvSubject, DWORD dwIssuerType, void *pvIssuer, DWORD dwFlags, void *pvExtra);
  3824. WINIMPM WINBOOL WINAPI CertIsStrongHashToSign (PCCERT_STRONG_SIGN_PARA pStrongSignPara, LPCWSTR pwszCNGHashAlgid, PCCERT_CONTEXT pSigningCert);
  3825. WINIMPM WINBOOL WINAPI CryptHashToBeSigned (HCRYPTPROV_LEGACY hCryptProv, DWORD dwCertEncodingType, const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash, DWORD *pcbComputedHash);
  3826. WINIMPM WINBOOL WINAPI CryptHashCertificate (HCRYPTPROV_LEGACY hCryptProv, ALG_ID Algid, DWORD dwFlags, const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash, DWORD *pcbComputedHash);
  3827. #if NTDDI_VERSION >= NTDDI_VISTA
  3828. WINIMPM WINBOOL WINAPI CryptHashCertificate2 (LPCWSTR pwszCNGHashAlgid, DWORD dwFlags, void *pvReserved, const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash, DWORD *pcbComputedHash);
  3829. #endif
  3830. WINIMPM WINBOOL WINAPI CryptSignCertificate (HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey, DWORD dwKeySpec, DWORD dwCertEncodingType, const BYTE *pbEncodedToBeSigned, DWORD cbEncodedToBeSigned, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, const void *pvHashAuxInfo, BYTE *pbSignature, DWORD *pcbSignature);
  3831. WINIMPM WINBOOL WINAPI CryptSignAndEncodeCertificate (HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey, DWORD dwKeySpec, DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, const void *pvHashAuxInfo, BYTE *pbEncoded, DWORD *pcbEncoded);
  3832. WINIMPM LONG WINAPI CertVerifyTimeValidity (LPFILETIME pTimeToVerify, PCERT_INFO pCertInfo);
  3833. WINIMPM LONG WINAPI CertVerifyCRLTimeValidity (LPFILETIME pTimeToVerify, PCRL_INFO pCrlInfo);
  3834. WINIMPM WINBOOL WINAPI CertVerifyValidityNesting (PCERT_INFO pSubjectInfo, PCERT_INFO pIssuerInfo);
  3835. WINIMPM WINBOOL WINAPI CertVerifyCRLRevocation (DWORD dwCertEncodingType, PCERT_INFO pCertId, DWORD cCrlInfo, PCRL_INFO rgpCrlInfo[]);
  3836. WINIMPM LPCSTR WINAPI CertAlgIdToOID (DWORD dwAlgId);
  3837. WINIMPM DWORD WINAPI CertOIDToAlgId (LPCSTR pszObjId);
  3838. WINIMPM PCERT_EXTENSION WINAPI CertFindExtension (LPCSTR pszObjId, DWORD cExtensions, CERT_EXTENSION rgExtensions[]);
  3839. WINIMPM PCRYPT_ATTRIBUTE WINAPI CertFindAttribute (LPCSTR pszObjId, DWORD cAttr, CRYPT_ATTRIBUTE rgAttr[]);
  3840. WINIMPM PCERT_RDN_ATTR WINAPI CertFindRDNAttr (LPCSTR pszObjId, PCERT_NAME_INFO pName);
  3841. WINIMPM WINBOOL WINAPI CertGetIntendedKeyUsage (DWORD dwCertEncodingType, PCERT_INFO pCertInfo, BYTE *pbKeyUsage, DWORD cbKeyUsage);
  3842. WINIMPM WINBOOL WINAPI CryptInstallDefaultContext (HCRYPTPROV hCryptProv, DWORD dwDefaultType, const void *pvDefaultPara, DWORD dwFlags, void *pvReserved, HCRYPTDEFAULTCONTEXT *phDefaultContext);
  3843. WINIMPM WINBOOL WINAPI CryptUninstallDefaultContext (HCRYPTDEFAULTCONTEXT hDefaultContext, DWORD dwFlags, void *pvReserved);
  3844. WINIMPM WINBOOL WINAPI CryptExportPublicKeyInfo (HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey, DWORD dwKeySpec, DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo);
  3845. WINIMPM WINBOOL WINAPI CryptExportPublicKeyInfoEx (HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey, DWORD dwKeySpec, DWORD dwCertEncodingType, LPSTR pszPublicKeyObjId, DWORD dwFlags, void *pvAuxInfo, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo);
  3846. #define CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_FUNC "CryptDllExportPublicKeyInfoEx"
  3847. #define CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_EX2_FUNC "CryptDllExportPublicKeyInfoEx2"
  3848. typedef WINBOOL (WINAPI *PFN_CRYPT_EXPORT_PUBLIC_KEY_INFO_EX2_FUNC) (NCRYPT_KEY_HANDLE hNCryptKey, DWORD dwCertEncodingType, LPSTR pszPublicKeyObjId, DWORD dwFlags, void *pvAuxInfo, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo);
  3849. #if NTDDI_VERSION >= NTDDI_WIN7
  3850. #define CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_FROM_BCRYPT_HANDLE_FUNC "CryptDllExportPublicKeyInfoFromBCryptKeyHandle"
  3851. typedef WINBOOL (WINAPI *PFN_CRYPT_EXPORT_PUBLIC_KEY_INFO_FROM_BCRYPT_HANDLE_FUNC) (BCRYPT_KEY_HANDLE hBCryptKey, DWORD dwCertEncodingType, LPSTR pszPublicKeyObjId, DWORD dwFlags, void *pvAuxInfo, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo);
  3852. WINIMPM WINBOOL WINAPI CryptExportPublicKeyInfoFromBCryptKeyHandle (BCRYPT_KEY_HANDLE hBCryptKey, DWORD dwCertEncodingType, LPSTR pszPublicKeyObjId, DWORD dwFlags, void *pvAuxInfo, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo);
  3853. #endif
  3854. #define CRYPT_OID_IMPORT_PUBLIC_KEY_INFO_FUNC "CryptDllImportPublicKeyInfoEx"
  3855. #define CRYPT_OID_IMPORT_PRIVATE_KEY_INFO_FUNC "CryptDllImportPrivateKeyInfoEx"
  3856. #define CRYPT_OID_EXPORT_PRIVATE_KEY_INFO_FUNC "CryptDllExportPrivateKeyInfoEx"
  3857. #define CRYPT_ACQUIRE_CACHE_FLAG 0x1
  3858. #define CRYPT_ACQUIRE_USE_PROV_INFO_FLAG 0x2
  3859. #define CRYPT_ACQUIRE_COMPARE_KEY_FLAG 0x4
  3860. #define CRYPT_ACQUIRE_NO_HEALING 0x8
  3861. #define CRYPT_ACQUIRE_SILENT_FLAG 0x40
  3862. #define CRYPT_ACQUIRE_WINDOW_HANDLE_FLAG 0x80
  3863. #define CRYPT_ACQUIRE_NCRYPT_KEY_FLAGS_MASK 0x70000
  3864. #define CRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAG 0x10000
  3865. #define CRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAG 0x20000
  3866. #define CRYPT_ACQUIRE_ONLY_NCRYPT_KEY_FLAG 0x40000
  3867. #define CRYPT_FIND_USER_KEYSET_FLAG 0x1
  3868. #define CRYPT_FIND_MACHINE_KEYSET_FLAG 0x2
  3869. #define CRYPT_FIND_SILENT_KEYSET_FLAG 0x40
  3870. #define CRYPT_DELETE_KEYSET CRYPT_DELETEKEYSET
  3871. typedef WINBOOL (WINAPI *PFN_IMPORT_PRIV_KEY_FUNC) (HCRYPTPROV hCryptProv, CRYPT_PRIVATE_KEY_INFO *pPrivateKeyInfo, DWORD dwFlags, void *pvAuxInfo);
  3872. typedef WINBOOL (WINAPI *PFN_EXPORT_PRIV_KEY_FUNC) (HCRYPTPROV hCryptProv, DWORD dwKeySpec, LPSTR pszPrivateKeyObjId, DWORD dwFlags, void *pvAuxInfo, CRYPT_PRIVATE_KEY_INFO *pPrivateKeyInfo, DWORD *pcbPrivateKeyInfo);
  3873. #define CertRDNValueToStr __MINGW_NAME_AW(CertRDNValueToStr)
  3874. #define CertNameToStr __MINGW_NAME_AW(CertNameToStr)
  3875. WINIMPM WINBOOL WINAPI CryptImportPublicKeyInfo (HCRYPTPROV hCryptProv, DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, HCRYPTKEY *phKey);
  3876. WINIMPM WINBOOL WINAPI CryptImportPublicKeyInfoEx (HCRYPTPROV hCryptProv, DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, ALG_ID aiKeyAlg, DWORD dwFlags, void *pvAuxInfo, HCRYPTKEY *phKey);
  3877. #if NTDDI_VERSION >= NTDDI_VISTA
  3878. #define CRYPT_OID_IMPORT_PUBLIC_KEY_INFO_EX2_FUNC "CryptDllImportPublicKeyInfoEx2"
  3879. typedef WINBOOL (WINAPI *PFN_IMPORT_PUBLIC_KEY_INFO_EX2_FUNC) (DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, DWORD dwFlags, void *pvAuxInfo, BCRYPT_KEY_HANDLE *phKey);
  3880. WINIMPM WINBOOL WINAPI CryptImportPublicKeyInfoEx2 (DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, DWORD dwFlags, void *pvAuxInfo, BCRYPT_KEY_HANDLE *phKey);
  3881. #endif
  3882. WINIMPM WINBOOL WINAPI CryptAcquireCertificatePrivateKey (PCCERT_CONTEXT pCert, DWORD dwFlags, void *pvParameters, HCRYPTPROV_OR_NCRYPT_KEY_HANDLE *phCryptProvOrNCryptKey, DWORD *pdwKeySpec, WINBOOL *pfCallerFreeProvOrNCryptKey);
  3883. WINIMPM WINBOOL WINAPI CryptFindCertificateKeyProvInfo (PCCERT_CONTEXT pCert, DWORD dwFlags, void *pvReserved);
  3884. WINIMPM WINBOOL WINAPI CryptImportPKCS8 (CRYPT_PKCS8_IMPORT_PARAMS sPrivateKeyAndParams, DWORD dwFlags, HCRYPTPROV *phCryptProv, void *pvAuxInfo);
  3885. WINIMPM WINBOOL WINAPI CryptExportPKCS8 (HCRYPTPROV hCryptProv, DWORD dwKeySpec, LPSTR pszPrivateKeyObjId, DWORD dwFlags, void *pvAuxInfo, BYTE *pbPrivateKeyBlob, DWORD *pcbPrivateKeyBlob);
  3886. WINIMPM WINBOOL WINAPI CryptExportPKCS8Ex (CRYPT_PKCS8_EXPORT_PARAMS *psExportParams, DWORD dwFlags, void *pvAuxInfo, BYTE *pbPrivateKeyBlob, DWORD *pcbPrivateKeyBlob);
  3887. WINIMPM WINBOOL WINAPI CryptHashPublicKeyInfo (HCRYPTPROV_LEGACY hCryptProv, ALG_ID Algid, DWORD dwFlags, DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, BYTE *pbComputedHash, DWORD *pcbComputedHash);
  3888. WINIMPM DWORD WINAPI CertRDNValueToStrA (DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue, LPSTR psz, DWORD csz);
  3889. WINIMPM DWORD WINAPI CertRDNValueToStrW (DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue, LPWSTR psz, DWORD csz);
  3890. WINIMPM DWORD WINAPI CertNameToStrA (DWORD dwCertEncodingType, PCERT_NAME_BLOB pName, DWORD dwStrType, LPSTR psz, DWORD csz);
  3891. WINIMPM DWORD WINAPI CertNameToStrW (DWORD dwCertEncodingType, PCERT_NAME_BLOB pName, DWORD dwStrType, LPWSTR psz, DWORD csz);
  3892. #define CERT_SIMPLE_NAME_STR 1
  3893. #define CERT_OID_NAME_STR 2
  3894. #define CERT_X500_NAME_STR 3
  3895. #define CERT_XML_NAME_STR 4
  3896. #define CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG 0x10000
  3897. #define CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG 0x20000
  3898. #define CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG 0x40000
  3899. #define CERT_NAME_STR_FORCE_UTF8_DIR_STR_FLAG 0x80000
  3900. #define CERT_NAME_STR_FORWARD_FLAG 0x1000000
  3901. #define CERT_NAME_STR_REVERSE_FLAG 0x2000000
  3902. #define CERT_NAME_STR_COMMA_FLAG 0x4000000
  3903. #define CERT_NAME_STR_CRLF_FLAG 0x8000000
  3904. #define CERT_NAME_STR_NO_QUOTING_FLAG 0x10000000
  3905. #define CERT_NAME_STR_NO_PLUS_FLAG 0x20000000
  3906. #define CERT_NAME_STR_SEMICOLON_FLAG 0x40000000
  3907. #define CERT_NAME_STR_DISABLE_UTF8_DIR_STR_FLAG 0x100000
  3908. #define CERT_NAME_STR_ENABLE_PUNYCODE_FLAG 0x200000
  3909. #define CertStrToName __MINGW_NAME_AW(CertStrToName)
  3910. #define CertGetNameString __MINGW_NAME_AW(CertGetNameString)
  3911. WINIMPM WINBOOL WINAPI CertStrToNameA (DWORD dwCertEncodingType, LPCSTR pszX500, DWORD dwStrType, void *pvReserved, BYTE *pbEncoded, DWORD *pcbEncoded, LPCSTR *ppszError);
  3912. WINIMPM WINBOOL WINAPI CertStrToNameW (DWORD dwCertEncodingType, LPCWSTR pszX500, DWORD dwStrType, void *pvReserved, BYTE *pbEncoded, DWORD *pcbEncoded, LPCWSTR *ppszError);
  3913. WINIMPM DWORD WINAPI CertGetNameStringA (PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags, void *pvTypePara, LPSTR pszNameString, DWORD cchNameString);
  3914. WINIMPM DWORD WINAPI CertGetNameStringW (PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags, void *pvTypePara, LPWSTR pszNameString, DWORD cchNameString);
  3915. #define CERT_NAME_EMAIL_TYPE 1
  3916. #define CERT_NAME_RDN_TYPE 2
  3917. #define CERT_NAME_ATTR_TYPE 3
  3918. #define CERT_NAME_SIMPLE_DISPLAY_TYPE 4
  3919. #define CERT_NAME_FRIENDLY_DISPLAY_TYPE 5
  3920. #define CERT_NAME_DNS_TYPE 6
  3921. #define CERT_NAME_URL_TYPE 7
  3922. #define CERT_NAME_UPN_TYPE 8
  3923. #define CERT_NAME_ISSUER_FLAG 0x1
  3924. #define CERT_NAME_DISABLE_IE4_UTF8_FLAG 0x10000
  3925. #define CERT_NAME_SEARCH_ALL_NAMES_FLAG 0x2
  3926. typedef PCCERT_CONTEXT (WINAPI *PFN_CRYPT_GET_SIGNER_CERTIFICATE) (void *pvGetArg, DWORD dwCertEncodingType, PCERT_INFO pSignerId, HCERTSTORE hMsgCertStore);
  3927. typedef struct _CRYPT_SIGN_MESSAGE_PARA {
  3928. DWORD cbSize;
  3929. DWORD dwMsgEncodingType;
  3930. PCCERT_CONTEXT pSigningCert;
  3931. CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
  3932. void *pvHashAuxInfo;
  3933. DWORD cMsgCert;
  3934. PCCERT_CONTEXT *rgpMsgCert;
  3935. DWORD cMsgCrl;
  3936. PCCRL_CONTEXT *rgpMsgCrl;
  3937. DWORD cAuthAttr;
  3938. PCRYPT_ATTRIBUTE rgAuthAttr;
  3939. DWORD cUnauthAttr;
  3940. PCRYPT_ATTRIBUTE rgUnauthAttr;
  3941. DWORD dwFlags;
  3942. DWORD dwInnerContentType;
  3943. #ifdef CRYPT_SIGN_MESSAGE_PARA_HAS_CMS_FIELDS
  3944. CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
  3945. void *pvHashEncryptionAuxInfo;
  3946. #endif
  3947. } CRYPT_SIGN_MESSAGE_PARA,*PCRYPT_SIGN_MESSAGE_PARA;
  3948. #define CRYPT_MESSAGE_BARE_CONTENT_OUT_FLAG 0x1
  3949. #define CRYPT_MESSAGE_ENCAPSULATED_CONTENT_OUT_FLAG 0x2
  3950. #define CRYPT_MESSAGE_KEYID_SIGNER_FLAG 0x4
  3951. #define CRYPT_MESSAGE_SILENT_KEYSET_FLAG 0x40
  3952. typedef struct _CRYPT_VERIFY_MESSAGE_PARA {
  3953. DWORD cbSize;
  3954. DWORD dwMsgAndCertEncodingType;
  3955. HCRYPTPROV_LEGACY hCryptProv;
  3956. PFN_CRYPT_GET_SIGNER_CERTIFICATE pfnGetSignerCertificate;
  3957. void *pvGetArg;
  3958. #ifdef CRYPT_VERIFY_MESSAGE_PARA_HAS_EXTRA_FIELDS
  3959. PCCERT_STRONG_SIGN_PARA pStrongSignPara;
  3960. #endif
  3961. } CRYPT_VERIFY_MESSAGE_PARA,*PCRYPT_VERIFY_MESSAGE_PARA;
  3962. typedef struct _CRYPT_ENCRYPT_MESSAGE_PARA {
  3963. DWORD cbSize;
  3964. DWORD dwMsgEncodingType;
  3965. HCRYPTPROV_LEGACY hCryptProv;
  3966. CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
  3967. void *pvEncryptionAuxInfo;
  3968. DWORD dwFlags;
  3969. DWORD dwInnerContentType;
  3970. } CRYPT_ENCRYPT_MESSAGE_PARA,*PCRYPT_ENCRYPT_MESSAGE_PARA;
  3971. #define CRYPT_MESSAGE_KEYID_RECIPIENT_FLAG 0x4
  3972. typedef struct _CRYPT_DECRYPT_MESSAGE_PARA {
  3973. DWORD cbSize;
  3974. DWORD dwMsgAndCertEncodingType;
  3975. DWORD cCertStore;
  3976. HCERTSTORE *rghCertStore;
  3977. #ifdef CRYPT_DECRYPT_MESSAGE_PARA_HAS_EXTRA_FIELDS
  3978. DWORD dwFlags;
  3979. #endif
  3980. } CRYPT_DECRYPT_MESSAGE_PARA,*PCRYPT_DECRYPT_MESSAGE_PARA;
  3981. typedef struct _CRYPT_HASH_MESSAGE_PARA {
  3982. DWORD cbSize;
  3983. DWORD dwMsgEncodingType;
  3984. HCRYPTPROV_LEGACY hCryptProv;
  3985. CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
  3986. void *pvHashAuxInfo;
  3987. } CRYPT_HASH_MESSAGE_PARA,*PCRYPT_HASH_MESSAGE_PARA;
  3988. typedef struct _CRYPT_KEY_SIGN_MESSAGE_PARA {
  3989. DWORD cbSize;
  3990. DWORD dwMsgAndCertEncodingType;
  3991. __C89_NAMELESS union {
  3992. HCRYPTPROV hCryptProv;
  3993. NCRYPT_KEY_HANDLE hNCryptKey;
  3994. };
  3995. DWORD dwKeySpec;
  3996. CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
  3997. void *pvHashAuxInfo;
  3998. CRYPT_ALGORITHM_IDENTIFIER PubKeyAlgorithm;
  3999. } CRYPT_KEY_SIGN_MESSAGE_PARA,*PCRYPT_KEY_SIGN_MESSAGE_PARA;
  4000. typedef struct _CRYPT_KEY_VERIFY_MESSAGE_PARA {
  4001. DWORD cbSize;
  4002. DWORD dwMsgEncodingType;
  4003. HCRYPTPROV_LEGACY hCryptProv;
  4004. } CRYPT_KEY_VERIFY_MESSAGE_PARA,*PCRYPT_KEY_VERIFY_MESSAGE_PARA;
  4005. typedef struct _CERT_CHAIN {
  4006. DWORD cCerts;
  4007. PCERT_BLOB certs;
  4008. CRYPT_KEY_PROV_INFO keyLocatorInfo;
  4009. } CERT_CHAIN,*PCERT_CHAIN;
  4010. #define CertOpenSystemStore __MINGW_NAME_AW(CertOpenSystemStore)
  4011. #define CertAddEncodedCertificateToSystemStore __MINGW_NAME_AW(CertAddEncodedCertificateToSystemStore)
  4012. WINIMPM WINBOOL WINAPI CryptSignMessage (PCRYPT_SIGN_MESSAGE_PARA pSignPara, WINBOOL fDetachedSignature, DWORD cToBeSigned, const BYTE *rgpbToBeSigned[], DWORD rgcbToBeSigned[], BYTE *pbSignedBlob, DWORD *pcbSignedBlob);
  4013. WINIMPM WINBOOL WINAPI CryptVerifyMessageSignature (PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex, const BYTE *pbSignedBlob, DWORD cbSignedBlob, BYTE *pbDecoded, DWORD *pcbDecoded, PCCERT_CONTEXT *ppSignerCert);
  4014. WINIMPM LONG WINAPI CryptGetMessageSignerCount (DWORD dwMsgEncodingType, const BYTE *pbSignedBlob, DWORD cbSignedBlob);
  4015. WINIMPM HCERTSTORE WINAPI CryptGetMessageCertificates (DWORD dwMsgAndCertEncodingType, HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const BYTE *pbSignedBlob, DWORD cbSignedBlob);
  4016. WINIMPM WINBOOL WINAPI CryptVerifyDetachedMessageSignature (PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex, const BYTE *pbDetachedSignBlob, DWORD cbDetachedSignBlob, DWORD cToBeSigned, const BYTE *rgpbToBeSigned[], DWORD rgcbToBeSigned[], PCCERT_CONTEXT *ppSignerCert);
  4017. WINIMPM WINBOOL WINAPI CryptEncryptMessage (PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara, DWORD cRecipientCert, PCCERT_CONTEXT rgpRecipientCert[], const BYTE *pbToBeEncrypted, DWORD cbToBeEncrypted, BYTE *pbEncryptedBlob, DWORD *pcbEncryptedBlob);
  4018. WINIMPM WINBOOL WINAPI CryptDecryptMessage (PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara, const BYTE *pbEncryptedBlob, DWORD cbEncryptedBlob, BYTE *pbDecrypted, DWORD *pcbDecrypted, PCCERT_CONTEXT *ppXchgCert);
  4019. WINIMPM WINBOOL WINAPI CryptSignAndEncryptMessage (PCRYPT_SIGN_MESSAGE_PARA pSignPara, PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara, DWORD cRecipientCert, PCCERT_CONTEXT rgpRecipientCert[], const BYTE *pbToBeSignedAndEncrypted, DWORD cbToBeSignedAndEncrypted, BYTE *pbSignedAndEncryptedBlob, DWORD *pcbSignedAndEncryptedBlob);
  4020. WINIMPM WINBOOL WINAPI CryptDecryptAndVerifyMessageSignature (PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara, PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex, const BYTE *pbEncryptedBlob, DWORD cbEncryptedBlob, BYTE *pbDecrypted, DWORD *pcbDecrypted, PCCERT_CONTEXT *ppXchgCert, PCCERT_CONTEXT *ppSignerCert);
  4021. WINIMPM WINBOOL WINAPI CryptDecodeMessage (DWORD dwMsgTypeFlags, PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara, PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex, const BYTE *pbEncodedBlob, DWORD cbEncodedBlob, DWORD dwPrevInnerContentType, DWORD *pdwMsgType, DWORD *pdwInnerContentType, BYTE *pbDecoded, DWORD *pcbDecoded, PCCERT_CONTEXT *ppXchgCert, PCCERT_CONTEXT *ppSignerCert);
  4022. WINIMPM WINBOOL WINAPI CryptHashMessage (PCRYPT_HASH_MESSAGE_PARA pHashPara, WINBOOL fDetachedHash, DWORD cToBeHashed, const BYTE *rgpbToBeHashed[], DWORD rgcbToBeHashed[], BYTE *pbHashedBlob, DWORD *pcbHashedBlob, BYTE *pbComputedHash, DWORD *pcbComputedHash);
  4023. WINIMPM WINBOOL WINAPI CryptVerifyMessageHash (PCRYPT_HASH_MESSAGE_PARA pHashPara, BYTE *pbHashedBlob, DWORD cbHashedBlob, BYTE *pbToBeHashed, DWORD *pcbToBeHashed, BYTE *pbComputedHash, DWORD *pcbComputedHash);
  4024. WINIMPM WINBOOL WINAPI CryptVerifyDetachedMessageHash (PCRYPT_HASH_MESSAGE_PARA pHashPara, BYTE *pbDetachedHashBlob, DWORD cbDetachedHashBlob, DWORD cToBeHashed, const BYTE *rgpbToBeHashed[], DWORD rgcbToBeHashed[], BYTE *pbComputedHash, DWORD *pcbComputedHash);
  4025. WINIMPM WINBOOL WINAPI CryptSignMessageWithKey (PCRYPT_KEY_SIGN_MESSAGE_PARA pSignPara, const BYTE *pbToBeSigned, DWORD cbToBeSigned, BYTE *pbSignedBlob, DWORD *pcbSignedBlob);
  4026. WINIMPM WINBOOL WINAPI CryptVerifyMessageSignatureWithKey (PCRYPT_KEY_VERIFY_MESSAGE_PARA pVerifyPara, PCERT_PUBLIC_KEY_INFO pPublicKeyInfo, const BYTE *pbSignedBlob, DWORD cbSignedBlob, BYTE *pbDecoded, DWORD *pcbDecoded);
  4027. WINIMPM HCERTSTORE WINAPI CertOpenSystemStoreA (HCRYPTPROV_LEGACY hProv, LPCSTR szSubsystemProtocol);
  4028. WINIMPM HCERTSTORE WINAPI CertOpenSystemStoreW (HCRYPTPROV_LEGACY hProv, LPCWSTR szSubsystemProtocol);
  4029. WINIMPM WINBOOL WINAPI CertAddEncodedCertificateToSystemStoreA (LPCSTR szCertStoreName, const BYTE *pbCertEncoded, DWORD cbCertEncoded);
  4030. WINIMPM WINBOOL WINAPI CertAddEncodedCertificateToSystemStoreW (LPCWSTR szCertStoreName, const BYTE *pbCertEncoded, DWORD cbCertEncoded);
  4031. HRESULT WINAPI FindCertsByIssuer (PCERT_CHAIN pCertChains, DWORD *pcbCertChains, DWORD *pcCertChains, BYTE *pbEncodedIssuerName, DWORD cbEncodedIssuerName, LPCWSTR pwszPurpose, DWORD dwKeySpec);
  4032. WINIMPM WINBOOL WINAPI CryptQueryObject (DWORD dwObjectType, const void *pvObject, DWORD dwExpectedContentTypeFlags, DWORD dwExpectedFormatTypeFlags, DWORD dwFlags, DWORD *pdwMsgAndCertEncodingType, DWORD *pdwContentType, DWORD *pdwFormatType, HCERTSTORE *phCertStore, HCRYPTMSG *phMsg, const void **ppvContext);
  4033. #define CERT_QUERY_OBJECT_FILE 0x1
  4034. #define CERT_QUERY_OBJECT_BLOB 0x2
  4035. #define CERT_QUERY_CONTENT_CERT 1
  4036. #define CERT_QUERY_CONTENT_CTL 2
  4037. #define CERT_QUERY_CONTENT_CRL 3
  4038. #define CERT_QUERY_CONTENT_SERIALIZED_STORE 4
  4039. #define CERT_QUERY_CONTENT_SERIALIZED_CERT 5
  4040. #define CERT_QUERY_CONTENT_SERIALIZED_CTL 6
  4041. #define CERT_QUERY_CONTENT_SERIALIZED_CRL 7
  4042. #define CERT_QUERY_CONTENT_PKCS7_SIGNED 8
  4043. #define CERT_QUERY_CONTENT_PKCS7_UNSIGNED 9
  4044. #define CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED 10
  4045. #define CERT_QUERY_CONTENT_PKCS10 11
  4046. #define CERT_QUERY_CONTENT_PFX 12
  4047. #define CERT_QUERY_CONTENT_CERT_PAIR 13
  4048. #define CERT_QUERY_CONTENT_PFX_AND_LOAD 14
  4049. #define CERT_QUERY_CONTENT_FLAG_CERT (1 << CERT_QUERY_CONTENT_CERT)
  4050. #define CERT_QUERY_CONTENT_FLAG_CTL (1 << CERT_QUERY_CONTENT_CTL)
  4051. #define CERT_QUERY_CONTENT_FLAG_CRL (1 << CERT_QUERY_CONTENT_CRL)
  4052. #define CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE (1 << CERT_QUERY_CONTENT_SERIALIZED_STORE)
  4053. #define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT (1 << CERT_QUERY_CONTENT_SERIALIZED_CERT)
  4054. #define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL (1 << CERT_QUERY_CONTENT_SERIALIZED_CTL)
  4055. #define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL (1 << CERT_QUERY_CONTENT_SERIALIZED_CRL)
  4056. #define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED)
  4057. #define CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED (1 << CERT_QUERY_CONTENT_PKCS7_UNSIGNED)
  4058. #define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED)
  4059. #define CERT_QUERY_CONTENT_FLAG_PKCS10 (1 << CERT_QUERY_CONTENT_PKCS10)
  4060. #define CERT_QUERY_CONTENT_FLAG_PFX (1 << CERT_QUERY_CONTENT_PFX)
  4061. #define CERT_QUERY_CONTENT_FLAG_CERT_PAIR (1 << CERT_QUERY_CONTENT_CERT_PAIR)
  4062. #define CERT_QUERY_CONTENT_FLAG_PFX_AND_LOAD (1 << CERT_QUERY_CONTENT_PFX_AND_LOAD)
  4063. #define CERT_QUERY_CONTENT_FLAG_ALL (CERT_QUERY_CONTENT_FLAG_CERT | CERT_QUERY_CONTENT_FLAG_CTL | CERT_QUERY_CONTENT_FLAG_CRL | CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED | CERT_QUERY_CONTENT_FLAG_PKCS10 | CERT_QUERY_CONTENT_FLAG_PFX | CERT_QUERY_CONTENT_FLAG_CERT_PAIR)
  4064. #define CERT_QUERY_CONTENT_FLAG_ALL_ISSUER_CERT (CERT_QUERY_CONTENT_FLAG_CERT | CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED)
  4065. #define CERT_QUERY_FORMAT_BINARY 1
  4066. #define CERT_QUERY_FORMAT_BASE64_ENCODED 2
  4067. #define CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED 3
  4068. #define CERT_QUERY_FORMAT_FLAG_BINARY (1 << CERT_QUERY_FORMAT_BINARY)
  4069. #define CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED (1 << CERT_QUERY_FORMAT_BASE64_ENCODED)
  4070. #define CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED (1 << CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED)
  4071. #define CERT_QUERY_FORMAT_FLAG_ALL (CERT_QUERY_FORMAT_FLAG_BINARY | CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED | CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED)
  4072. typedef HANDLE HCRYPTASYNC,*PHCRYPTASYNC;
  4073. typedef VOID (WINAPI *PFN_CRYPT_ASYNC_PARAM_FREE_FUNC) (LPSTR pszParamOid, LPVOID pvParam);
  4074. WINIMPM LPVOID WINAPI CryptMemAlloc (ULONG cbSize);
  4075. WINIMPM LPVOID WINAPI CryptMemRealloc (LPVOID pv, ULONG cbSize);
  4076. WINIMPM VOID WINAPI CryptMemFree (LPVOID pv);
  4077. WINIMPM WINBOOL WINAPI CryptCreateAsyncHandle (DWORD dwFlags, PHCRYPTASYNC phAsync);
  4078. WINIMPM WINBOOL WINAPI CryptSetAsyncParam (HCRYPTASYNC hAsync, LPSTR pszParamOid, LPVOID pvParam, PFN_CRYPT_ASYNC_PARAM_FREE_FUNC pfnFree);
  4079. WINIMPM WINBOOL WINAPI CryptGetAsyncParam (HCRYPTASYNC hAsync, LPSTR pszParamOid, LPVOID *ppvParam, PFN_CRYPT_ASYNC_PARAM_FREE_FUNC *ppfnFree);
  4080. WINIMPM WINBOOL WINAPI CryptCloseAsyncHandle (HCRYPTASYNC hAsync);
  4081. typedef struct _CRYPT_BLOB_ARRAY {
  4082. DWORD cBlob;
  4083. PCRYPT_DATA_BLOB rgBlob;
  4084. } CRYPT_BLOB_ARRAY,*PCRYPT_BLOB_ARRAY;
  4085. typedef struct _CRYPT_CREDENTIALS {
  4086. DWORD cbSize;
  4087. LPCSTR pszCredentialsOid;
  4088. LPVOID pvCredentials;
  4089. } CRYPT_CREDENTIALS,*PCRYPT_CREDENTIALS;
  4090. #define CREDENTIAL_OID_PASSWORD_CREDENTIALS_A ((LPCSTR)1)
  4091. #define CREDENTIAL_OID_PASSWORD_CREDENTIALS_W ((LPCSTR)2)
  4092. #define CREDENTIAL_OID_PASSWORD_CREDENTIALS __MINGW_NAME_UAW(CREDENTIAL_OID_PASSWORD_CREDENTIALS)
  4093. typedef struct _CRYPT_PASSWORD_CREDENTIALSA {
  4094. DWORD cbSize;
  4095. LPSTR pszUsername;
  4096. LPSTR pszPassword;
  4097. } CRYPT_PASSWORD_CREDENTIALSA,*PCRYPT_PASSWORD_CREDENTIALSA;
  4098. typedef struct _CRYPT_PASSWORD_CREDENTIALSW {
  4099. DWORD cbSize;
  4100. LPWSTR pszUsername;
  4101. LPWSTR pszPassword;
  4102. } CRYPT_PASSWORD_CREDENTIALSW,*PCRYPT_PASSWORD_CREDENTIALSW;
  4103. typedef __MINGW_NAME_AW(CRYPT_PASSWORD_CREDENTIALS) CRYPT_PASSWORD_CREDENTIALS;
  4104. typedef __MINGW_NAME_AW(PCRYPT_PASSWORD_CREDENTIALS) PCRYPT_PASSWORD_CREDENTIALS;
  4105. #define SCHEME_OID_RETRIEVE_ENCODED_OBJECT_FUNC "SchemeDllRetrieveEncodedObject"
  4106. #define SCHEME_OID_RETRIEVE_ENCODED_OBJECTW_FUNC "SchemeDllRetrieveEncodedObjectW"
  4107. #define CONTEXT_OID_CREATE_OBJECT_CONTEXT_FUNC "ContextDllCreateObjectContext"
  4108. typedef VOID (WINAPI *PFN_FREE_ENCODED_OBJECT_FUNC) (LPCSTR pszObjectOid, PCRYPT_BLOB_ARRAY pObject, LPVOID pvFreeContext);
  4109. #define CONTEXT_OID_CERTIFICATE ((LPCSTR)1)
  4110. #define CONTEXT_OID_CRL ((LPCSTR)2)
  4111. #define CONTEXT_OID_CTL ((LPCSTR)3)
  4112. #define CONTEXT_OID_PKCS7 ((LPCSTR)4)
  4113. #define CONTEXT_OID_CAPI2_ANY ((LPCSTR)5)
  4114. #define CONTEXT_OID_OCSP_RESP ((LPCSTR)6)
  4115. #define CRYPT_RETRIEVE_MULTIPLE_OBJECTS 0x1
  4116. #define CRYPT_CACHE_ONLY_RETRIEVAL 0x2
  4117. #define CRYPT_WIRE_ONLY_RETRIEVAL 0x4
  4118. #define CRYPT_DONT_CACHE_RESULT 0x8
  4119. #define CRYPT_ASYNC_RETRIEVAL 0x10
  4120. #define CRYPT_VERIFY_CONTEXT_SIGNATURE 0x20
  4121. #define CRYPT_VERIFY_DATA_HASH 0x40
  4122. #define CRYPT_KEEP_TIME_VALID 0x80
  4123. #define CRYPT_DONT_VERIFY_SIGNATURE 0x100
  4124. #define CRYPT_DONT_CHECK_TIME_VALIDITY 0x200
  4125. #define CRYPT_CHECK_FRESHNESS_TIME_VALIDITY 0x400
  4126. #define CRYPT_ACCUMULATIVE_TIMEOUT 0x800
  4127. #define CRYPT_STICKY_CACHE_RETRIEVAL 0x1000
  4128. #define CRYPT_LDAP_SCOPE_BASE_ONLY_RETRIEVAL 0x2000
  4129. #define CRYPT_OFFLINE_CHECK_RETRIEVAL 0x4000
  4130. #define CRYPT_LDAP_INSERT_ENTRY_ATTRIBUTE 0x8000
  4131. #define CRYPT_LDAP_SIGN_RETRIEVAL 0x10000
  4132. #define CRYPT_NO_AUTH_RETRIEVAL 0x20000
  4133. #define CRYPT_LDAP_AREC_EXCLUSIVE_RETRIEVAL 0x40000
  4134. #define CRYPT_AIA_RETRIEVAL 0x80000
  4135. #define CRYPT_HTTP_POST_RETRIEVAL 0x100000
  4136. #define CRYPT_PROXY_CACHE_RETRIEVAL 0x200000
  4137. #define CRYPT_NOT_MODIFIED_RETRIEVAL 0x400000
  4138. #define CRYPT_ENABLE_SSL_REVOCATION_RETRIEVAL 0x800000
  4139. #define CRYPT_OCSP_ONLY_RETRIEVAL 0x1000000
  4140. #define CRYPT_NO_OCSP_FAILOVER_TO_CRL_RETRIEVAL 0x2000000
  4141. #define CRYPT_RANDOM_QUERY_STRING_RETRIEVAL 0x4000000
  4142. #define CRYPT_ENABLE_FILE_RETRIEVAL 0x08000000
  4143. #define CRYPT_CREATE_NEW_FLUSH_ENTRY 0x10000000
  4144. typedef struct _CRYPTNET_URL_CACHE_PRE_FETCH_INFO {
  4145. DWORD cbSize;
  4146. DWORD dwObjectType;
  4147. DWORD dwError;
  4148. DWORD dwReserved;
  4149. FILETIME ThisUpdateTime;
  4150. FILETIME NextUpdateTime;
  4151. FILETIME PublishTime;
  4152. } CRYPTNET_URL_CACHE_PRE_FETCH_INFO,*PCRYPTNET_URL_CACHE_PRE_FETCH_INFO;
  4153. #define CRYPTNET_URL_CACHE_PRE_FETCH_NONE 0
  4154. #define CRYPTNET_URL_CACHE_PRE_FETCH_BLOB 1
  4155. #define CRYPTNET_URL_CACHE_PRE_FETCH_CRL 2
  4156. #define CRYPTNET_URL_CACHE_PRE_FETCH_OCSP 3
  4157. #define CRYPTNET_URL_CACHE_PRE_FETCH_AUTOROOT_CAB 5
  4158. #define CRYPTNET_URL_CACHE_PRE_FETCH_DISALLOWED_CERT_CAB 6
  4159. #define CRYPTNET_URL_CACHE_PRE_FETCH_PIN_RULES_CAB 7
  4160. typedef struct _CRYPTNET_URL_CACHE_FLUSH_INFO {
  4161. DWORD cbSize;
  4162. DWORD dwExemptSeconds;
  4163. FILETIME ExpireTime;
  4164. } CRYPTNET_URL_CACHE_FLUSH_INFO,*PCRYPTNET_URL_CACHE_FLUSH_INFO;
  4165. #define CRYPTNET_URL_CACHE_DEFAULT_FLUSH 0
  4166. #define CRYPTNET_URL_CACHE_DISABLE_FLUSH 0xffffffff
  4167. typedef struct _CRYPTNET_URL_CACHE_RESPONSE_INFO {
  4168. DWORD cbSize;
  4169. WORD wResponseType;
  4170. WORD wResponseFlags;
  4171. FILETIME LastModifiedTime;
  4172. DWORD dwMaxAge;
  4173. LPCWSTR pwszETag;
  4174. DWORD dwProxyId;
  4175. } CRYPTNET_URL_CACHE_RESPONSE_INFO,*PCRYPTNET_URL_CACHE_RESPONSE_INFO;
  4176. #define CRYPTNET_URL_CACHE_RESPONSE_NONE 0
  4177. #define CRYPTNET_URL_CACHE_RESPONSE_HTTP 1
  4178. #define CRYPTNET_URL_CACHE_RESPONSE_VALIDATED 0x8000
  4179. typedef struct _CRYPT_RETRIEVE_AUX_INFO {
  4180. DWORD cbSize;
  4181. FILETIME *pLastSyncTime;
  4182. DWORD dwMaxUrlRetrievalByteCount;
  4183. PCRYPTNET_URL_CACHE_PRE_FETCH_INFO pPreFetchInfo;
  4184. PCRYPTNET_URL_CACHE_FLUSH_INFO pFlushInfo;
  4185. PCRYPTNET_URL_CACHE_RESPONSE_INFO *ppResponseInfo;
  4186. LPWSTR pwszCacheFileNamePrefix;
  4187. LPFILETIME pftCacheResync;
  4188. WINBOOL fProxyCacheRetrieval;
  4189. DWORD dwHttpStatusCode;
  4190. } CRYPT_RETRIEVE_AUX_INFO,*PCRYPT_RETRIEVE_AUX_INFO;
  4191. #define CRYPT_RETRIEVE_MAX_ERROR_CONTENT_LENGTH 0x1000
  4192. WINIMPM WINBOOL WINAPI CryptRetrieveObjectByUrlA (LPCSTR pszUrl, LPCSTR pszObjectOid, DWORD dwRetrievalFlags, DWORD dwTimeout, LPVOID *ppvObject, HCRYPTASYNC hAsyncRetrieve, PCRYPT_CREDENTIALS pCredentials, LPVOID pvVerify, PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);
  4193. WINIMPM WINBOOL WINAPI CryptRetrieveObjectByUrlW (LPCWSTR pszUrl, LPCSTR pszObjectOid, DWORD dwRetrievalFlags, DWORD dwTimeout, LPVOID *ppvObject, HCRYPTASYNC hAsyncRetrieve, PCRYPT_CREDENTIALS pCredentials, LPVOID pvVerify, PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);
  4194. #define CryptRetrieveObjectByUrl __MINGW_NAME_AW(CryptRetrieveObjectByUrl)
  4195. typedef WINBOOL (WINAPI *PFN_CRYPT_CANCEL_RETRIEVAL) (DWORD dwFlags, void *pvArg);
  4196. WINIMPM WINBOOL WINAPI CryptInstallCancelRetrieval (PFN_CRYPT_CANCEL_RETRIEVAL pfnCancel, const void *pvArg, DWORD dwFlags, void *pvReserved);
  4197. WINIMPM WINBOOL WINAPI CryptUninstallCancelRetrieval (DWORD dwFlags, void *pvReserved);
  4198. WINIMPM WINBOOL WINAPI CryptCancelAsyncRetrieval (HCRYPTASYNC hAsyncRetrieval);
  4199. #define CRYPT_PARAM_ASYNC_RETRIEVAL_COMPLETION ((LPCSTR)1)
  4200. typedef VOID (WINAPI *PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC) (LPVOID pvCompletion, DWORD dwCompletionCode, LPCSTR pszUrl, LPSTR pszObjectOid, LPVOID pvObject);
  4201. typedef struct _CRYPT_ASYNC_RETRIEVAL_COMPLETION {
  4202. PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC pfnCompletion;
  4203. LPVOID pvCompletion;
  4204. } CRYPT_ASYNC_RETRIEVAL_COMPLETION,*PCRYPT_ASYNC_RETRIEVAL_COMPLETION;
  4205. #define CRYPT_PARAM_CANCEL_ASYNC_RETRIEVAL ((LPCSTR)2)
  4206. typedef WINBOOL (WINAPI *PFN_CANCEL_ASYNC_RETRIEVAL_FUNC) (HCRYPTASYNC hAsyncRetrieve);
  4207. #define CRYPT_GET_URL_FROM_PROPERTY 0x1
  4208. #define CRYPT_GET_URL_FROM_EXTENSION 0x2
  4209. #define CRYPT_GET_URL_FROM_UNAUTH_ATTRIBUTE 0x4
  4210. #define CRYPT_GET_URL_FROM_AUTH_ATTRIBUTE 0x8
  4211. typedef struct _CRYPT_URL_ARRAY {
  4212. DWORD cUrl;
  4213. LPWSTR *rgwszUrl;
  4214. } CRYPT_URL_ARRAY,*PCRYPT_URL_ARRAY;
  4215. typedef struct _CRYPT_URL_INFO {
  4216. DWORD cbSize;
  4217. DWORD dwSyncDeltaTime;
  4218. DWORD cGroup;
  4219. DWORD *rgcGroupEntry;
  4220. } CRYPT_URL_INFO,*PCRYPT_URL_INFO;
  4221. WINIMPM WINBOOL WINAPI CryptGetObjectUrl (LPCSTR pszUrlOid, LPVOID pvPara, DWORD dwFlags, PCRYPT_URL_ARRAY pUrlArray, DWORD *pcbUrlArray, PCRYPT_URL_INFO pUrlInfo, DWORD *pcbUrlInfo, LPVOID pvReserved);
  4222. #define URL_OID_GET_OBJECT_URL_FUNC "UrlDllGetObjectUrl"
  4223. #define URL_OID_CERTIFICATE_ISSUER ((LPCSTR) 1)
  4224. #define URL_OID_CERTIFICATE_CRL_DIST_POINT ((LPCSTR) 2)
  4225. #define URL_OID_CTL_ISSUER ((LPCSTR) 3)
  4226. #define URL_OID_CTL_NEXT_UPDATE ((LPCSTR) 4)
  4227. #define URL_OID_CRL_ISSUER ((LPCSTR) 5)
  4228. #define URL_OID_CERTIFICATE_FRESHEST_CRL ((LPCSTR) 6)
  4229. #define URL_OID_CRL_FRESHEST_CRL ((LPCSTR) 7)
  4230. #define URL_OID_CROSS_CERT_DIST_POINT ((LPCSTR) 8)
  4231. #define URL_OID_CERTIFICATE_OCSP ((LPCSTR) 9)
  4232. #define URL_OID_CERTIFICATE_OCSP_AND_CRL_DIST_POINT ((LPCSTR) 10)
  4233. #define URL_OID_CERTIFICATE_CRL_DIST_POINT_AND_OCSP ((LPCSTR) 11)
  4234. #define URL_OID_CROSS_CERT_SUBJECT_INFO_ACCESS ((LPCSTR) 12)
  4235. #define URL_OID_CERTIFICATE_ONLY_OCSP ((LPCSTR) 13)
  4236. typedef struct _CERT_CRL_CONTEXT_PAIR {
  4237. PCCERT_CONTEXT pCertContext;
  4238. PCCRL_CONTEXT pCrlContext;
  4239. } CERT_CRL_CONTEXT_PAIR,*PCERT_CRL_CONTEXT_PAIR;
  4240. typedef const CERT_CRL_CONTEXT_PAIR *PCCERT_CRL_CONTEXT_PAIR;
  4241. typedef struct _CRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO {
  4242. DWORD cbSize;
  4243. int iDeltaCrlIndicator;
  4244. LPFILETIME pftCacheResync;
  4245. LPFILETIME pLastSyncTime;
  4246. LPFILETIME pMaxAgeTime;
  4247. PCERT_REVOCATION_CHAIN_PARA pChainPara;
  4248. PCRYPT_INTEGER_BLOB pDeltaCrlIndicator;
  4249. } CRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO, *PCRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO;
  4250. typedef WINBOOL (WINAPI *PFN_CRYPT_ENUM_KEYID_PROP) (const CRYPT_HASH_BLOB *pKeyIdentifier, DWORD dwFlags, void *pvReserved, void *pvArg, DWORD cProp, DWORD *rgdwPropId, void **rgpvData, DWORD *rgcbData);
  4251. #define TIME_VALID_OID_GET_OBJECT_FUNC "TimeValidDllGetObject"
  4252. #define CERT_CHAIN_CONFIG_REGPATH L"Software\\Microsoft\\Cryptography\\OID\\EncodingType 0\\CertDllCreateCertificateChainEngine\\Config"
  4253. #define TIME_VALID_OID_GET_CTL ((LPCSTR)1)
  4254. #define TIME_VALID_OID_GET_CRL ((LPCSTR)2)
  4255. #define TIME_VALID_OID_GET_CRL_FROM_CERT ((LPCSTR)3)
  4256. #define TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CERT ((LPCSTR)4)
  4257. #define TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CRL ((LPCSTR)5)
  4258. #define TIME_VALID_OID_FLUSH_OBJECT_FUNC "TimeValidDllFlushObject"
  4259. #define TIME_VALID_OID_FLUSH_CTL ((LPCSTR)1)
  4260. #define TIME_VALID_OID_FLUSH_CRL ((LPCSTR)2)
  4261. #define TIME_VALID_OID_FLUSH_CRL_FROM_CERT ((LPCSTR)3)
  4262. #define TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CERT ((LPCSTR)4)
  4263. #define TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CRL ((LPCSTR)5)
  4264. #define CERT_CREATE_SELFSIGN_NO_SIGN 1
  4265. #define CERT_CREATE_SELFSIGN_NO_KEY_INFO 2
  4266. #define CRYPT_KEYID_DELETE_FLAG 0x10
  4267. #define CRYPT_KEYID_MACHINE_FLAG 0x20
  4268. #define CRYPT_KEYID_SET_NEW_FLAG 0x2000
  4269. #define CRYPT_KEYID_ALLOC_FLAG 0x8000
  4270. WINIMPM WINBOOL WINAPI CryptGetTimeValidObject (LPCSTR pszTimeValidOid, LPVOID pvPara, PCCERT_CONTEXT pIssuer, LPFILETIME pftValidFor, DWORD dwFlags, DWORD dwTimeout, LPVOID *ppvObject, PCRYPT_CREDENTIALS pCredentials, PCRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO pExtraInfo);
  4271. WINIMPM WINBOOL WINAPI CryptFlushTimeValidObject (LPCSTR pszFlushTimeValidOid, LPVOID pvPara, PCCERT_CONTEXT pIssuer, DWORD dwFlags, LPVOID pvReserved);
  4272. WINIMPM PCCERT_CONTEXT WINAPI CertCreateSelfSignCertificate (HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey, PCERT_NAME_BLOB pSubjectIssuerBlob, DWORD dwFlags, PCRYPT_KEY_PROV_INFO pKeyProvInfo, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, PSYSTEMTIME pStartTime, PSYSTEMTIME pEndTime, PCERT_EXTENSIONS pExtensions);
  4273. WINIMPM WINBOOL WINAPI CryptGetKeyIdentifierProperty (const CRYPT_HASH_BLOB *pKeyIdentifier, DWORD dwPropId, DWORD dwFlags, LPCWSTR pwszComputerName, void *pvReserved, void *pvData, DWORD *pcbData);
  4274. WINIMPM WINBOOL WINAPI CryptSetKeyIdentifierProperty (const CRYPT_HASH_BLOB *pKeyIdentifier, DWORD dwPropId, DWORD dwFlags, LPCWSTR pwszComputerName, void *pvReserved, const void *pvData);
  4275. WINIMPM WINBOOL WINAPI CryptEnumKeyIdentifierProperties (const CRYPT_HASH_BLOB *pKeyIdentifier, DWORD dwPropId, DWORD dwFlags, LPCWSTR pwszComputerName, void *pvReserved, void *pvArg, PFN_CRYPT_ENUM_KEYID_PROP pfnEnum);
  4276. WINIMPM WINBOOL WINAPI CryptCreateKeyIdentifierFromCSP (DWORD dwCertEncodingType, LPCSTR pszPubKeyOID, const PUBLICKEYSTRUC *pPubKeyStruc, DWORD cbPubKeyStruc, DWORD dwFlags, void *pvReserved, BYTE *pbHash, DWORD *pcbHash);
  4277. #define CERT_CHAIN_MAX_URL_RETRIEVAL_BYTE_COUNT_VALUE_NAME L"MaxUrlRetrievalByteCount"
  4278. #define CERT_CHAIN_MAX_URL_RETRIEVAL_BYTE_COUNT_DEFAULT (100 *1024 *1024)
  4279. #define CERT_CHAIN_CACHE_RESYNC_FILETIME_VALUE_NAME L"ChainCacheResyncFiletime"
  4280. #define CERT_CHAIN_DISABLE_MANDATORY_BASIC_CONSTRAINTS_VALUE_NAME L"DisableMandatoryBasicConstraints"
  4281. #define CERT_CHAIN_DISABLE_CA_NAME_CONSTRAINTS_VALUE_NAME L"DisableCANameConstraints"
  4282. #define CERT_CHAIN_DISABLE_UNSUPPORTED_CRITICAL_EXTENSIONS_VALUE_NAME L"DisableUnsupportedCriticalExtensions"
  4283. #define CERT_CHAIN_MAX_AIA_URL_COUNT_IN_CERT_VALUE_NAME L"MaxAIAUrlCountInCert"
  4284. #define CERT_CHAIN_MAX_AIA_URL_COUNT_IN_CERT_DEFAULT 5
  4285. #define CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_COUNT_PER_CHAIN_VALUE_NAME L"MaxAIAUrlRetrievalCountPerChain"
  4286. #define CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_COUNT_PER_CHAIN_DEFAULT 3
  4287. #define CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_BYTE_COUNT_VALUE_NAME L"MaxAIAUrlRetrievalByteCount"
  4288. #define CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_BYTE_COUNT_DEFAULT 100000
  4289. #define CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_CERT_COUNT_VALUE_NAME L"MaxAIAUrlRetrievalCertCount"
  4290. #define CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_CERT_COUNT_DEFAULT 10
  4291. #define CERT_CHAIN_OCSP_VALIDITY_SECONDS_VALUE_NAME L"OcspValiditySeconds"
  4292. #define CERT_CHAIN_OCSP_VALIDITY_SECONDS_DEFAULT (12 *60 *60)
  4293. #define CERT_CHAIN_DISABLE_SERIAL_CHAIN_VALUE_NAME L"DisableSerialChain"
  4294. #define CERT_CHAIN_SERIAL_CHAIN_LOG_FILE_NAME_VALUE_NAME L"SerialChainLogFileName"
  4295. #define CERT_CHAIN_DISABLE_SYNC_WITH_SSL_TIME_VALUE_NAME L"DisableSyncWithSslTime"
  4296. #define CERT_CHAIN_MAX_SSL_TIME_UPDATED_EVENT_COUNT_VALUE_NAME L"MaxSslTimeUpdatedEventCount"
  4297. #define CERT_CHAIN_MAX_SSL_TIME_UPDATED_EVENT_COUNT_DEFAULT 5
  4298. #define CERT_CHAIN_MAX_SSL_TIME_UPDATED_EVENT_COUNT_DISABLE 0xFFFFFFFF
  4299. #define CERT_CHAIN_SSL_HANDSHAKE_LOG_FILE_NAME_VALUE_NAME L"SslHandshakeLogFileName"
  4300. #define CERT_CHAIN_ENABLE_WEAK_SIGNATURE_FLAGS_VALUE_NAME L"EnableWeakSignatureFlags"
  4301. #define CERT_CHAIN_ENABLE_MD2_MD4_FLAG 0x1
  4302. #define CERT_CHAIN_ENABLE_WEAK_RSA_ROOT_FLAG 0x2
  4303. #define CERT_CHAIN_ENABLE_WEAK_LOGGING_FLAG 0x4
  4304. #define CERT_CHAIN_ENABLE_ONLY_WEAK_LOGGING_FLAG 0x8
  4305. #define CERT_CHAIN_MIN_RSA_PUB_KEY_BIT_LENGTH_VALUE_NAME L"MinRsaPubKeyBitLength"
  4306. #define CERT_CHAIN_MIN_RSA_PUB_KEY_BIT_LENGTH_DEFAULT 1023
  4307. #define CERT_CHAIN_MIN_RSA_PUB_KEY_BIT_LENGTH_DISABLE 0xffffffff
  4308. #define CERT_CHAIN_WEAK_RSA_PUB_KEY_TIME_VALUE_NAME L"WeakRsaPubKeyTime"
  4309. #define CERT_CHAIN_WEAK_RSA_PUB_KEY_TIME_DEFAULT 0x01ca8a755c6e0000ULL
  4310. #define CERT_CHAIN_WEAK_SIGNATURE_LOG_DIR_VALUE_NAME L"WeakSignatureLogDir"
  4311. #define CERT_CHAIN_DEFAULT_CONFIG_SUBDIR L"Default"
  4312. #define CERT_CHAIN_WEAK_PREFIX_NAME L"Weak"
  4313. #define CERT_CHAIN_WEAK_THIRD_PARTY_CONFIG_NAME L"ThirdParty"
  4314. #define CERT_CHAIN_WEAK_ALL_CONFIG_NAME L"All"
  4315. #define CERT_CHAIN_WEAK_FLAGS_NAME L"Flags"
  4316. #define CERT_CHAIN_WEAK_HYGIENE_NAME L"Hygiene"
  4317. #define CERT_CHAIN_WEAK_AFTER_TIME_NAME L"AfterTime"
  4318. #define CERT_CHAIN_WEAK_FILE_HASH_AFTER_TIME_NAME L"FileHashAfterTime"
  4319. #define CERT_CHAIN_WEAK_TIMESTAMP_HASH_AFTER_TIME_NAME L"TimestampHashAfterTime"
  4320. #define CERT_CHAIN_WEAK_MIN_BIT_LENGTH_NAME L"MinBitLength"
  4321. #define CERT_CHAIN_WEAK_SHA256_ALLOW_NAME L"Sha256Allow"
  4322. #define CERT_CHAIN_MIN_PUB_KEY_BIT_LENGTH_DISABLE 0xFFFFFFFF
  4323. #define CERT_CHAIN_ENABLE_WEAK_SETTINGS_FLAG 0x80000000
  4324. #define CERT_CHAIN_DISABLE_ALL_EKU_WEAK_FLAG 0x00010000
  4325. #define CERT_CHAIN_ENABLE_ALL_EKU_HYGIENE_FLAG 0x00020000
  4326. #define CERT_CHAIN_DISABLE_OPT_IN_SERVER_AUTH_WEAK_FLAG 0x00040000
  4327. #define CERT_CHAIN_DISABLE_SERVER_AUTH_WEAK_FLAG 0x00100000
  4328. #define CERT_CHAIN_ENABLE_SERVER_AUTH_HYGIENE_FLAG 0x00200000
  4329. #define CERT_CHAIN_DISABLE_CODE_SIGNING_WEAK_FLAG 0x00400000
  4330. #define CERT_CHAIN_DISABLE_MOTW_CODE_SIGNING_WEAK_FLAG 0x00800000
  4331. #define CERT_CHAIN_ENABLE_CODE_SIGNING_HYGIENE_FLAG 0x01000000
  4332. #define CERT_CHAIN_ENABLE_MOTW_CODE_SIGNING_HYGIENE_FLAG 0x02000000
  4333. #define CERT_CHAIN_DISABLE_TIMESTAMP_WEAK_FLAG 0x04000000
  4334. #define CERT_CHAIN_DISABLE_MOTW_TIMESTAMP_WEAK_FLAG 0x08000000
  4335. #define CERT_CHAIN_ENABLE_TIMESTAMP_HYGIENE_FLAG 0x10000000
  4336. #define CERT_CHAIN_ENABLE_MOTW_TIMESTAMP_HYGIENE_FLAG 0x20000000
  4337. #define CERT_CHAIN_MOTW_IGNORE_AFTER_TIME_WEAK_FLAG 0x40000000
  4338. #define CERT_CHAIN_DISABLE_FILE_HASH_WEAK_FLAG 0x00001000
  4339. #define CERT_CHAIN_DISABLE_MOTW_FILE_HASH_WEAK_FLAG 0x00002000
  4340. #define CERT_CHAIN_DISABLE_TIMESTAMP_HASH_WEAK_FLAG 0x00004000
  4341. #define CERT_CHAIN_DISABLE_MOTW_TIMESTAMP_HASH_WEAK_FLAG 0x00008000
  4342. #define CERT_CHAIN_DISABLE_WEAK_FLAGS ( CERT_CHAIN_DISABLE_ALL_EKU_WEAK_FLAG | CERT_CHAIN_DISABLE_SERVER_AUTH_WEAK_FLAG | CERT_CHAIN_DISABLE_OPT_IN_SERVER_AUTH_WEAK_FLAG | CERT_CHAIN_DISABLE_CODE_SIGNING_WEAK_FLAG | CERT_CHAIN_DISABLE_MOTW_CODE_SIGNING_WEAK_FLAG | CERT_CHAIN_DISABLE_TIMESTAMP_WEAK_FLAG | CERT_CHAIN_DISABLE_MOTW_TIMESTAMP_WEAK_FLAG )
  4343. #define CERT_CHAIN_DISABLE_FILE_HASH_WEAK_FLAGS ( CERT_CHAIN_DISABLE_FILE_HASH_WEAK_FLAG | CERT_CHAIN_DISABLE_MOTW_FILE_HASH_WEAK_FLAG )
  4344. #define CERT_CHAIN_DISABLE_TIMESTAMP_HASH_WEAK_FLAGS ( CERT_CHAIN_DISABLE_TIMESTAMP_HASH_WEAK_FLAG | CERT_CHAIN_DISABLE_MOTW_TIMESTAMP_HASH_WEAK_FLAG )
  4345. #define CERT_CHAIN_ENABLE_HYGIENE_FLAGS ( CERT_CHAIN_ENABLE_ALL_EKU_HYGIENE_FLAG | CERT_CHAIN_ENABLE_SERVER_AUTH_HYGIENE_FLAG | CERT_CHAIN_ENABLE_CODE_SIGNING_HYGIENE_FLAG | CERT_CHAIN_ENABLE_MOTW_CODE_SIGNING_HYGIENE_FLAG | CERT_CHAIN_ENABLE_TIMESTAMP_HYGIENE_FLAG | CERT_CHAIN_ENABLE_MOTW_TIMESTAMP_HYGIENE_FLAG )
  4346. #define CERT_CHAIN_MOTW_WEAK_FLAGS ( CERT_CHAIN_DISABLE_MOTW_CODE_SIGNING_WEAK_FLAG | CERT_CHAIN_DISABLE_MOTW_TIMESTAMP_WEAK_FLAG | CERT_CHAIN_ENABLE_MOTW_CODE_SIGNING_HYGIENE_FLAG | CERT_CHAIN_ENABLE_MOTW_TIMESTAMP_HYGIENE_FLAG | CERT_CHAIN_MOTW_IGNORE_AFTER_TIME_WEAK_FLAG)
  4347. #define CERT_CHAIN_OPT_IN_WEAK_FLAGS ( CERT_CHAIN_DISABLE_OPT_IN_SERVER_AUTH_WEAK_FLAG)
  4348. #define CERT_CHAIN_AUTO_CURRENT_USER 1
  4349. #define CERT_CHAIN_AUTO_LOCAL_MACHINE 2
  4350. #define CERT_CHAIN_AUTO_IMPERSONATED 3
  4351. #define CERT_CHAIN_AUTO_PROCESS_INFO 4
  4352. #define CERT_CHAIN_AUTO_PINRULE_INFO 5
  4353. #define CERT_CHAIN_AUTO_NETWORK_INFO 6
  4354. #define CERT_CHAIN_AUTO_SERIAL_LOCAL_MACHINE 7
  4355. #define CERT_CHAIN_AUTO_HPKP_RULE_INFO 8
  4356. #define CERT_CHAIN_AUTO_FLAGS_VALUE_NAME L"AutoFlags"
  4357. #define CERT_CHAIN_AUTO_FLUSH_DISABLE_FLAG 0x00000001
  4358. #define CERT_CHAIN_AUTO_LOG_CREATE_FLAG 0x00000002
  4359. #define CERT_CHAIN_AUTO_LOG_FREE_FLAG 0x00000004
  4360. #define CERT_CHAIN_AUTO_LOG_FLUSH_FLAG 0x00000008
  4361. #define CERT_CHAIN_AUTO_LOG_FLAGS ( CERT_CHAIN_AUTO_LOG_CREATE_FLAG | CERT_CHAIN_AUTO_LOG_FREE_FLAG | CERT_CHAIN_AUTO_LOG_FLUSH_FLAG )
  4362. #define CERT_CHAIN_AUTO_FLUSH_FIRST_DELTA_SECONDS_VALUE_NAME L"AutoFlushFirstDeltaSeconds"
  4363. #define CERT_CHAIN_AUTO_FLUSH_FIRST_DELTA_SECONDS_DEFAULT (5 * 60)
  4364. #define CERT_CHAIN_AUTO_FLUSH_NEXT_DELTA_SECONDS_VALUE_NAME L"AutoFlushNextDeltaSeconds"
  4365. #define CERT_CHAIN_AUTO_FLUSH_NEXT_DELTA_SECONDS_DEFAULT (30 * 60)
  4366. #define CERT_CHAIN_AUTO_LOG_FILE_NAME_VALUE_NAME L"AutoLogFileName"
  4367. #define CERT_CHAIN_DISABLE_AUTO_FLUSH_PROCESS_NAME_LIST_VALUE_NAME L"DisableAutoFlushProcessNameList"
  4368. #define CERT_SRV_OCSP_RESP_MIN_VALIDITY_SECONDS_VALUE_NAME L"SrvOcspRespMinValiditySeconds"
  4369. #define CERT_SRV_OCSP_RESP_MIN_VALIDITY_SECONDS_DEFAULT (10 *60)
  4370. #define CERT_SRV_OCSP_RESP_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_VALUE_NAME L"SrvOcspRespUrlRetrievalTimeoutMilliseconds"
  4371. #define CERT_SRV_OCSP_RESP_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_DEFAULT (15 *1000)
  4372. #define CERT_SRV_OCSP_RESP_MAX_BEFORE_NEXT_UPDATE_SECONDS_VALUE_NAME L"SrvOcspRespMaxBeforeNextUpdateSeconds"
  4373. #define CERT_SRV_OCSP_RESP_MAX_BEFORE_NEXT_UPDATE_SECONDS_DEFAULT (4 *60 *60)
  4374. #define CERT_SRV_OCSP_RESP_MIN_BEFORE_NEXT_UPDATE_SECONDS_VALUE_NAME L"SrvOcspRespMinBeforeNextUpdateSeconds"
  4375. #define CERT_SRV_OCSP_RESP_MIN_BEFORE_NEXT_UPDATE_SECONDS_DEFAULT (2 *60)
  4376. #define CERT_SRV_OCSP_RESP_MIN_AFTER_NEXT_UPDATE_SECONDS_VALUE_NAME L"SrvOcspRespMinAfterNextUpdateSeconds"
  4377. #define CERT_SRV_OCSP_RESP_MIN_AFTER_NEXT_UPDATE_SECONDS_DEFAULT (1 *60)
  4378. #define CERT_SRV_OCSP_RESP_MIN_SYNC_CERT_FILE_SECONDS_VALUE_NAME L"SrvOcspRespMinSyncCertFileSeconds"
  4379. #define CERT_SRV_OCSP_RESP_MIN_SYNC_CERT_FILE_SECONDS_DEFAULT 5
  4380. #define CERT_SRV_OCSP_RESP_MAX_SYNC_CERT_FILE_SECONDS_VALUE_NAME L"SrvOcspRespMaxSyncCertFileSeconds"
  4381. #define CERT_SRV_OCSP_RESP_MAX_SYNC_CERT_FILE_SECONDS_DEFAULT (1 * 60 * 60)
  4382. #define CRYPTNET_MAX_CACHED_OCSP_PER_CRL_COUNT_VALUE_NAME L"CryptnetMaxCachedOcspPerCrlCount"
  4383. #define CRYPTNET_MAX_CACHED_OCSP_PER_CRL_COUNT_DEFAULT 500
  4384. #define CRYPTNET_OCSP_AFTER_CRL_DISABLE 0xffffffff
  4385. #define CRYPTNET_URL_CACHE_DEFAULT_FLUSH_EXEMPT_SECONDS_VALUE_NAME L"CryptnetDefaultFlushExemptSeconds"
  4386. #define CRYPTNET_URL_CACHE_DEFAULT_FLUSH_EXEMPT_SECONDS_DEFAULT (28 *24 *60 *60)
  4387. #define CRYPTNET_PRE_FETCH_MIN_MAX_AGE_SECONDS_VALUE_NAME L"CryptnetPreFetchMinMaxAgeSeconds"
  4388. #define CRYPTNET_PRE_FETCH_MIN_MAX_AGE_SECONDS_DEFAULT (1 *60 *60)
  4389. #define CRYPTNET_PRE_FETCH_MAX_MAX_AGE_SECONDS_VALUE_NAME L"CryptnetPreFetchMaxMaxAgeSeconds"
  4390. #define CRYPTNET_PRE_FETCH_MAX_MAX_AGE_SECONDS_DEFAULT (14 *24 *60 *60)
  4391. #define CRYPTNET_PRE_FETCH_MIN_OCSP_VALIDITY_PERIOD_SECONDS_VALUE_NAME L"CryptnetPreFetchMinOcspValidityPeriodSeconds"
  4392. #define CRYPTNET_PRE_FETCH_MIN_OCSP_VALIDITY_PERIOD_SECONDS_DEFAULT (14 *24 *60 *60)
  4393. #define CRYPTNET_PRE_FETCH_AFTER_PUBLISH_PRE_FETCH_DIVISOR_VALUE_NAME L"CryptnetPreFetchAfterPublishPreFetchDivisor"
  4394. #define CRYPTNET_PRE_FETCH_AFTER_PUBLISH_PRE_FETCH_DIVISOR_DEFAULT 10
  4395. #define CRYPTNET_PRE_FETCH_BEFORE_NEXT_UPDATE_PRE_FETCH_DIVISOR_VALUE_NAME L"CryptnetPreFetchBeforeNextUpdatePreFetchDivisor"
  4396. #define CRYPTNET_PRE_FETCH_BEFORE_NEXT_UPDATE_PRE_FETCH_DIVISOR_DEFAULT 20
  4397. #define CRYPTNET_PRE_FETCH_MIN_BEFORE_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_VALUE_NAME L"CryptnetPreFetchMinBeforeNextUpdatePreFetchSeconds"
  4398. #define CRYPTNET_PRE_FETCH_MIN_BEFORE_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_DEFAULT (1 *60 *60)
  4399. #define CRYPTNET_PRE_FETCH_VALIDITY_PERIOD_AFTER_NEXT_UPDATE_PRE_FETCH_DIVISOR_VALUE_NAME L"CryptnetPreFetchValidityPeriodAfterNextUpdatePreFetchDivisor"
  4400. #define CRYPTNET_PRE_FETCH_VALIDITY_PERIOD_AFTER_NEXT_UPDATE_PRE_FETCH_DIVISOR_DEFAULT 10
  4401. #define CRYPTNET_PRE_FETCH_MAX_AFTER_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_VALUE_NAME L"CryptnetPreFetchMaxAfterNextUpdatePreFetchPeriodSeconds"
  4402. #define CRYPTNET_PRE_FETCH_MAX_AFTER_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_DEFAULT (4 *60 *60)
  4403. #define CRYPTNET_PRE_FETCH_MIN_AFTER_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_VALUE_NAME L"CryptnetPreFetchMinAfterNextUpdatePreFetchPeriodSeconds"
  4404. #define CRYPTNET_PRE_FETCH_MIN_AFTER_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_DEFAULT (30 *60)
  4405. #define CRYPTNET_PRE_FETCH_AFTER_CURRENT_TIME_PRE_FETCH_PERIOD_SECONDS_VALUE_NAME L"CryptnetPreFetchAfterCurrentTimePreFetchPeriodSeconds"
  4406. #define CRYPTNET_PRE_FETCH_AFTER_CURRENT_TIME_PRE_FETCH_PERIOD_SECONDS_DEFAULT (30 *60)
  4407. #define CRYPTNET_PRE_FETCH_TRIGGER_PERIOD_SECONDS_VALUE_NAME L"CryptnetPreFetchTriggerPeriodSeconds"
  4408. #define CRYPTNET_PRE_FETCH_TRIGGER_PERIOD_SECONDS_DEFAULT (10 *60)
  4409. #define CRYPTNET_PRE_FETCH_TRIGGER_DISABLE 0xffffffff
  4410. #define CRYPTNET_PRE_FETCH_SCAN_AFTER_TRIGGER_DELAY_SECONDS_VALUE_NAME L"CryptnetPreFetchScanAfterTriggerDelaySeconds"
  4411. #define CRYPTNET_PRE_FETCH_SCAN_AFTER_TRIGGER_DELAY_SECONDS_DEFAULT 30
  4412. #define CRYPTNET_PRE_FETCH_RETRIEVAL_TIMEOUT_SECONDS_VALUE_NAME L"CryptnetPreFetchRetrievalTimeoutSeconds"
  4413. #define CRYPTNET_PRE_FETCH_RETRIEVAL_TIMEOUT_SECONDS_DEFAULT (5 *60)
  4414. #define CRYPTNET_CRL_PRE_FETCH_CONFIG_REGPATH CERT_CHAIN_CONFIG_REGPATH L"\\CrlPreFetch"
  4415. #define CRYPTNET_CRL_PRE_FETCH_PROCESS_NAME_LIST_VALUE_NAME L"ProcessNameList"
  4416. #define CRYPTNET_CRL_PRE_FETCH_URL_LIST_VALUE_NAME L"PreFetchUrlList"
  4417. #define CRYPTNET_CRL_PRE_FETCH_DISABLE_INFORMATION_EVENTS_VALUE_NAME L"DisableInformationEvents"
  4418. #define CRYPTNET_CRL_PRE_FETCH_LOG_FILE_NAME_VALUE_NAME L"LogFileName"
  4419. #define CRYPTNET_CRL_PRE_FETCH_TIMEOUT_SECONDS_VALUE_NAME L"TimeoutSeconds"
  4420. #define CRYPTNET_CRL_PRE_FETCH_TIMEOUT_SECONDS_DEFAULT (5 * 60)
  4421. #define CRYPTNET_CRL_PRE_FETCH_MAX_AGE_SECONDS_VALUE_NAME L"MaxAgeSeconds"
  4422. #define CRYPTNET_CRL_PRE_FETCH_MAX_AGE_SECONDS_DEFAULT (2 * 60 * 60)
  4423. #define CRYPTNET_CRL_PRE_FETCH_MAX_AGE_SECONDS_MIN (5 * 60)
  4424. #define CRYPTNET_CRL_PRE_FETCH_PUBLISH_BEFORE_NEXT_UPDATE_SECONDS_VALUE_NAME L"PublishBeforeNextUpdateSeconds"
  4425. #define CRYPTNET_CRL_PRE_FETCH_PUBLISH_BEFORE_NEXT_UPDATE_SECONDS_DEFAULT (1 * 60 * 60)
  4426. #define CRYPTNET_CRL_PRE_FETCH_PUBLISH_RANDOM_INTERVAL_SECONDS_VALUE_NAME L"PublishRandomIntervalSeconds"
  4427. #define CRYPTNET_CRL_PRE_FETCH_PUBLISH_RANDOM_INTERVAL_SECONDS_DEFAULT (5 * 60)
  4428. #define CRYPTNET_CRL_PRE_FETCH_MIN_BEFORE_NEXT_UPDATE_SECONDS_VALUE_NAME L"MinBeforeNextUpdateSeconds"
  4429. #define CRYPTNET_CRL_PRE_FETCH_MIN_BEFORE_NEXT_UPDATE_SECONDS_DEFAULT (5 * 60)
  4430. #define CRYPTNET_CRL_PRE_FETCH_MIN_AFTER_NEXT_UPDATE_SECONDS_VALUE_NAME L"MinAfterNextUpdateSeconds"
  4431. #define CRYPTNET_CRL_PRE_FETCH_MIN_AFTER_NEXT_UPDATE_SECONDS_DEFAULT (5 * 60)
  4432. #define CERT_GROUP_POLICY_CHAIN_CONFIG_REGPATH CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L"\\ChainEngine\\Config"
  4433. #define CERT_CHAIN_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_VALUE_NAME L"ChainUrlRetrievalTimeoutMilliseconds"
  4434. #define CERT_CHAIN_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_DEFAULT (15 *1000)
  4435. #define CERT_CHAIN_REV_ACCUMULATIVE_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_VALUE_NAME L"ChainRevAccumulativeUrlRetrievalTimeoutMilliseconds"
  4436. #define CERT_CHAIN_REV_ACCUMULATIVE_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_DEFAULT (20 *1000)
  4437. #define CERT_RETR_BEHAVIOR_INET_AUTH_VALUE_NAME L"EnableInetUnknownAuth"
  4438. #define CERT_RETR_BEHAVIOR_INET_STATUS_VALUE_NAME L"EnableInetLocal"
  4439. #define CERT_RETR_BEHAVIOR_FILE_VALUE_NAME L"AllowFileUrlScheme"
  4440. #define CERT_RETR_BEHAVIOR_LDAP_VALUE_NAME L"DisableLDAPSignAndEncrypt"
  4441. #define CRYPTNET_CACHED_OCSP_SWITCH_TO_CRL_COUNT_VALUE_NAME L"CryptnetCachedOcspSwitchToCrlCount"
  4442. #define CRYPTNET_CACHED_OCSP_SWITCH_TO_CRL_COUNT_DEFAULT 50
  4443. #define CRYPTNET_CRL_BEFORE_OCSP_ENABLE 0xffffffff
  4444. #define CERT_CHAIN_DISABLE_AIA_URL_RETRIEVAL_VALUE_NAME L"DisableAIAUrlRetrieval"
  4445. #define CERT_CHAIN_OPTIONS_VALUE_NAME L"Options"
  4446. #define CERT_CHAIN_OPTION_DISABLE_AIA_URL_RETRIEVAL 0x2
  4447. #define CERT_CHAIN_OPTION_ENABLE_SIA_URL_RETRIEVAL 0x4
  4448. #define CERT_CHAIN_CROSS_CERT_DOWNLOAD_INTERVAL_HOURS_VALUE_NAME L"CrossCertDownloadIntervalHours"
  4449. #define CERT_CHAIN_CROSS_CERT_DOWNLOAD_INTERVAL_HOURS_DEFAULT (24 *7)
  4450. #define CERT_CHAIN_CRL_VALIDITY_EXT_PERIOD_HOURS_VALUE_NAME L"CRLValidityExtensionPeriod"
  4451. #define CERT_CHAIN_CRL_VALIDITY_EXT_PERIOD_HOURS_DEFAULT 12
  4452. #define HCCE_CURRENT_USER ((HCERTCHAINENGINE)NULL)
  4453. #define HCCE_LOCAL_MACHINE ((HCERTCHAINENGINE)0x1)
  4454. #define HCCE_SERIAL_LOCAL_MACHINE ((HCERTCHAINENGINE)0x2)
  4455. #define CERT_CHAIN_CACHE_END_CERT 0x1
  4456. #define CERT_CHAIN_THREAD_STORE_SYNC 0x2
  4457. #define CERT_CHAIN_CACHE_ONLY_URL_RETRIEVAL 0x4
  4458. #define CERT_CHAIN_USE_LOCAL_MACHINE_STORE 0x8
  4459. #define CERT_CHAIN_ENABLE_CACHE_AUTO_UPDATE 0x10
  4460. #define CERT_CHAIN_ENABLE_SHARE_STORE 0x20
  4461. typedef HANDLE HCERTCHAINENGINE;
  4462. typedef struct _CERT_CHAIN_ENGINE_CONFIG {
  4463. DWORD cbSize;
  4464. HCERTSTORE hRestrictedRoot;
  4465. HCERTSTORE hRestrictedTrust;
  4466. HCERTSTORE hRestrictedOther;
  4467. DWORD cAdditionalStore;
  4468. HCERTSTORE *rghAdditionalStore;
  4469. DWORD dwFlags;
  4470. DWORD dwUrlRetrievalTimeout;
  4471. DWORD MaximumCachedCertificates;
  4472. DWORD CycleDetectionModulus;
  4473. #if NTDDI_VERSION >= NTDDI_WIN7
  4474. HCERTSTORE hExclusiveRoot;
  4475. HCERTSTORE hExclusiveTrustedPeople;
  4476. #endif
  4477. #if NTDDI_VERSION >= NTDDI_WIN8
  4478. DWORD dwExclusiveFlags;
  4479. #endif
  4480. } CERT_CHAIN_ENGINE_CONFIG,*PCERT_CHAIN_ENGINE_CONFIG;
  4481. #if NTDDI_VERSION >= NTDDI_WIN8
  4482. #define CERT_CHAIN_EXCLUSIVE_ENABLE_CA_FLAG 0x1
  4483. #endif
  4484. WINIMPM WINBOOL WINAPI CertCreateCertificateChainEngine (PCERT_CHAIN_ENGINE_CONFIG pConfig, HCERTCHAINENGINE *phChainEngine);
  4485. WINIMPM VOID WINAPI CertFreeCertificateChainEngine (HCERTCHAINENGINE hChainEngine);
  4486. WINIMPM WINBOOL WINAPI CertResyncCertificateChainEngine (HCERTCHAINENGINE hChainEngine);
  4487. typedef struct _CERT_TRUST_STATUS {
  4488. DWORD dwErrorStatus;
  4489. DWORD dwInfoStatus;
  4490. } CERT_TRUST_STATUS,*PCERT_TRUST_STATUS;
  4491. #define CERT_TRUST_NO_ERROR 0x0
  4492. #define CERT_TRUST_IS_NOT_TIME_VALID 0x1
  4493. #define CERT_TRUST_IS_NOT_TIME_NESTED 0x2
  4494. #define CERT_TRUST_IS_REVOKED 0x4
  4495. #define CERT_TRUST_IS_NOT_SIGNATURE_VALID 0x8
  4496. #define CERT_TRUST_IS_NOT_VALID_FOR_USAGE 0x10
  4497. #define CERT_TRUST_IS_UNTRUSTED_ROOT 0x20
  4498. #define CERT_TRUST_REVOCATION_STATUS_UNKNOWN 0x40
  4499. #define CERT_TRUST_IS_CYCLIC 0x80
  4500. #define CERT_TRUST_INVALID_EXTENSION 0x100
  4501. #define CERT_TRUST_INVALID_POLICY_CONSTRAINTS 0x200
  4502. #define CERT_TRUST_INVALID_BASIC_CONSTRAINTS 0x400
  4503. #define CERT_TRUST_INVALID_NAME_CONSTRAINTS 0x800
  4504. #define CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT 0x1000
  4505. #define CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT 0x2000
  4506. #define CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT 0x4000
  4507. #define CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT 0x8000
  4508. #define CERT_TRUST_IS_PARTIAL_CHAIN 0x10000
  4509. #define CERT_TRUST_CTL_IS_NOT_TIME_VALID 0x20000
  4510. #define CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID 0x40000
  4511. #define CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE 0x80000
  4512. #define CERT_TRUST_IS_OFFLINE_REVOCATION 0x1000000
  4513. #define CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY 0x2000000
  4514. #define CERT_TRUST_IS_EXPLICIT_DISTRUST 0x4000000
  4515. #define CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT 0x8000000
  4516. #define CERT_TRUST_HAS_WEAK_SIGNATURE 0x100000
  4517. #define CERT_TRUST_HAS_EXACT_MATCH_ISSUER 0x1
  4518. #define CERT_TRUST_HAS_KEY_MATCH_ISSUER 0x2
  4519. #define CERT_TRUST_HAS_NAME_MATCH_ISSUER 0x4
  4520. #define CERT_TRUST_IS_SELF_SIGNED 0x8
  4521. #define CERT_TRUST_AUTO_UPDATE_CA_REVOCATION 0x10
  4522. #define CERT_TRUST_AUTO_UPDATE_END_REVOCATION 0x20
  4523. #define CERT_TRUST_NO_OCSP_FAILOVER_TO_CRL 0x40
  4524. #define CERT_TRUST_IS_KEY_ROLLOVER 0x00000080
  4525. #define CERT_TRUST_SSL_HANDSHAKE_OCSP 0x00040000
  4526. #define CERT_TRUST_SSL_TIME_VALID_OCSP 0x00080000
  4527. #define CERT_TRUST_SSL_RECONNECT_OCSP 0x00100000
  4528. #define CERT_TRUST_HAS_PREFERRED_ISSUER 0x100
  4529. #define CERT_TRUST_HAS_ISSUANCE_CHAIN_POLICY 0x200
  4530. #define CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS 0x400
  4531. #define CERT_TRUST_IS_PEER_TRUSTED 0x800
  4532. #define CERT_TRUST_HAS_CRL_VALIDITY_EXTENDED 0x1000
  4533. #define CERT_TRUST_IS_FROM_EXCLUSIVE_TRUST_STORE 0x2000
  4534. #if NTDDI_VERSION >= NTDDI_WIN8
  4535. #define CERT_TRUST_IS_CA_TRUSTED 0x00004000
  4536. #define CERT_TRUST_HAS_AUTO_UPDATE_WEAK_SIGNATURE 0x00008000
  4537. #define CERT_TRUST_HAS_ALLOW_WEAK_SIGNATURE 0x00020000
  4538. #endif
  4539. #define CERT_TRUST_IS_COMPLEX_CHAIN 0x00010000
  4540. #define CERT_TRUST_SSL_TIME_VALID 0x01000000
  4541. #define CERT_TRUST_NO_TIME_CHECK 0x02000000
  4542. typedef struct _CERT_REVOCATION_INFO {
  4543. DWORD cbSize;
  4544. DWORD dwRevocationResult;
  4545. LPCSTR pszRevocationOid;
  4546. LPVOID pvOidSpecificInfo;
  4547. WINBOOL fHasFreshnessTime;
  4548. DWORD dwFreshnessTime;
  4549. PCERT_REVOCATION_CRL_INFO pCrlInfo;
  4550. } CERT_REVOCATION_INFO,*PCERT_REVOCATION_INFO;
  4551. typedef struct _CERT_TRUST_LIST_INFO {
  4552. DWORD cbSize;
  4553. PCTL_ENTRY pCtlEntry;
  4554. PCCTL_CONTEXT pCtlContext;
  4555. } CERT_TRUST_LIST_INFO,*PCERT_TRUST_LIST_INFO;
  4556. typedef struct _CERT_CHAIN_ELEMENT {
  4557. DWORD cbSize;
  4558. PCCERT_CONTEXT pCertContext;
  4559. CERT_TRUST_STATUS TrustStatus;
  4560. PCERT_REVOCATION_INFO pRevocationInfo;
  4561. PCERT_ENHKEY_USAGE pIssuanceUsage;
  4562. PCERT_ENHKEY_USAGE pApplicationUsage;
  4563. LPCWSTR pwszExtendedErrorInfo;
  4564. } CERT_CHAIN_ELEMENT,*PCERT_CHAIN_ELEMENT;
  4565. typedef const CERT_CHAIN_ELEMENT *PCCERT_CHAIN_ELEMENT;
  4566. typedef struct _CERT_SIMPLE_CHAIN {
  4567. DWORD cbSize;
  4568. CERT_TRUST_STATUS TrustStatus;
  4569. DWORD cElement;
  4570. PCERT_CHAIN_ELEMENT *rgpElement;
  4571. PCERT_TRUST_LIST_INFO pTrustListInfo;
  4572. WINBOOL fHasRevocationFreshnessTime;
  4573. DWORD dwRevocationFreshnessTime;
  4574. } CERT_SIMPLE_CHAIN,*PCERT_SIMPLE_CHAIN;
  4575. typedef const CERT_SIMPLE_CHAIN *PCCERT_SIMPLE_CHAIN;
  4576. typedef struct _CERT_CHAIN_CONTEXT CERT_CHAIN_CONTEXT,*PCERT_CHAIN_CONTEXT;
  4577. typedef const CERT_CHAIN_CONTEXT *PCCERT_CHAIN_CONTEXT;
  4578. struct _CERT_CHAIN_CONTEXT {
  4579. DWORD cbSize;
  4580. CERT_TRUST_STATUS TrustStatus;
  4581. DWORD cChain;
  4582. PCERT_SIMPLE_CHAIN *rgpChain;
  4583. DWORD cLowerQualityChainContext;
  4584. PCCERT_CHAIN_CONTEXT *rgpLowerQualityChainContext;
  4585. WINBOOL fHasRevocationFreshnessTime;
  4586. DWORD dwRevocationFreshnessTime;
  4587. DWORD dwCreateFlags;
  4588. GUID ChainId;
  4589. };
  4590. #define USAGE_MATCH_TYPE_AND 0x0
  4591. #define USAGE_MATCH_TYPE_OR 0x1
  4592. typedef struct _CERT_USAGE_MATCH {
  4593. DWORD dwType;
  4594. CERT_ENHKEY_USAGE Usage;
  4595. } CERT_USAGE_MATCH,*PCERT_USAGE_MATCH;
  4596. typedef struct _CTL_USAGE_MATCH {
  4597. DWORD dwType;
  4598. CTL_USAGE Usage;
  4599. } CTL_USAGE_MATCH,*PCTL_USAGE_MATCH;
  4600. typedef struct _CERT_CHAIN_PARA {
  4601. DWORD cbSize;
  4602. CERT_USAGE_MATCH RequestedUsage;
  4603. #ifdef CERT_CHAIN_PARA_HAS_EXTRA_FIELDS
  4604. CERT_USAGE_MATCH RequestedIssuancePolicy;
  4605. DWORD dwUrlRetrievalTimeout;
  4606. WINBOOL fCheckRevocationFreshnessTime;
  4607. DWORD dwRevocationFreshnessTime;
  4608. LPFILETIME pftCacheResync;
  4609. PCCERT_STRONG_SIGN_PARA pStrongSignPara;
  4610. DWORD dwStrongSignFlags;
  4611. #endif
  4612. } CERT_CHAIN_PARA,*PCERT_CHAIN_PARA;
  4613. #define CERT_CHAIN_STRONG_SIGN_DISABLE_END_CHECK_FLAG 0x1
  4614. #define CERT_CHAIN_DISABLE_PASS1_QUALITY_FILTERING 0x40
  4615. #define CERT_CHAIN_RETURN_LOWER_QUALITY_CONTEXTS 0x80
  4616. #define CERT_CHAIN_DISABLE_AUTH_ROOT_AUTO_UPDATE 0x100
  4617. #define CERT_CHAIN_TIMESTAMP_TIME 0x200
  4618. #define CERT_CHAIN_ENABLE_PEER_TRUST 0x400
  4619. #define CERT_CHAIN_DISABLE_MY_PEER_TRUST 0x800
  4620. #define CERT_CHAIN_DISABLE_MD2_MD4 0x1000
  4621. #define CERT_CHAIN_DISABLE_AIA 0x2000
  4622. #define CERT_CHAIN_HAS_MOTW 0x4000
  4623. #define CERT_CHAIN_ONLY_ADDITIONAL_AND_AUTH_ROOT 0x8000
  4624. #define CERT_CHAIN_OPT_IN_WEAK_SIGNATURE 0x10000
  4625. #define CERT_CHAIN_REVOCATION_CHECK_END_CERT 0x10000000
  4626. #define CERT_CHAIN_REVOCATION_CHECK_CHAIN 0x20000000
  4627. #define CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x40000000
  4628. #define CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY 0x80000000
  4629. #define CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT 0x8000000
  4630. #define CERT_CHAIN_REVOCATION_CHECK_OCSP_CERT 0x4000000
  4631. WINIMPM WINBOOL WINAPI CertGetCertificateChain (HCERTCHAINENGINE hChainEngine, PCCERT_CONTEXT pCertContext, LPFILETIME pTime, HCERTSTORE hAdditionalStore, PCERT_CHAIN_PARA pChainPara, DWORD dwFlags, LPVOID pvReserved, PCCERT_CHAIN_CONTEXT *ppChainContext);
  4632. WINIMPM VOID WINAPI CertFreeCertificateChain (PCCERT_CHAIN_CONTEXT pChainContext);
  4633. WINIMPM PCCERT_CHAIN_CONTEXT WINAPI CertDuplicateCertificateChain (PCCERT_CHAIN_CONTEXT pChainContext);
  4634. struct _CERT_REVOCATION_CHAIN_PARA {
  4635. DWORD cbSize;
  4636. HCERTCHAINENGINE hChainEngine;
  4637. HCERTSTORE hAdditionalStore;
  4638. DWORD dwChainFlags;
  4639. DWORD dwUrlRetrievalTimeout;
  4640. LPFILETIME pftCurrentTime;
  4641. LPFILETIME pftCacheResync;
  4642. DWORD cbMaxUrlRetrievalByteCount;
  4643. };
  4644. #define REVOCATION_OID_CRL_REVOCATION ((LPCSTR)1)
  4645. typedef struct _CRL_REVOCATION_INFO {
  4646. PCRL_ENTRY pCrlEntry;
  4647. PCCRL_CONTEXT pCrlContext;
  4648. PCCERT_CHAIN_CONTEXT pCrlIssuerChain;
  4649. } CRL_REVOCATION_INFO,*PCRL_REVOCATION_INFO;
  4650. WINIMPM PCCERT_CHAIN_CONTEXT WINAPI CertFindChainInStore (HCERTSTORE hCertStore, DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, const void *pvFindPara, PCCERT_CHAIN_CONTEXT pPrevChainContext);
  4651. #define CERT_CHAIN_FIND_BY_ISSUER 1
  4652. typedef WINBOOL (WINAPI *PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK) (PCCERT_CONTEXT pCert, void *pvFindArg);
  4653. typedef struct _CERT_CHAIN_FIND_BY_ISSUER_PARA {
  4654. DWORD cbSize;
  4655. LPCSTR pszUsageIdentifier;
  4656. DWORD dwKeySpec;
  4657. DWORD dwAcquirePrivateKeyFlags;
  4658. DWORD cIssuer;
  4659. CERT_NAME_BLOB *rgIssuer;
  4660. PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK pfnFindCallback;
  4661. void *pvFindArg;
  4662. #ifdef CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS
  4663. DWORD *pdwIssuerChainIndex;
  4664. DWORD *pdwIssuerElementIndex;
  4665. #endif
  4666. } CERT_CHAIN_FIND_ISSUER_PARA,*PCERT_CHAIN_FIND_ISSUER_PARA,CERT_CHAIN_FIND_BY_ISSUER_PARA,*PCERT_CHAIN_FIND_BY_ISSUER_PARA;
  4667. #define CERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAG 0x1
  4668. #define CERT_CHAIN_FIND_BY_ISSUER_COMPLEX_CHAIN_FLAG 0x2
  4669. #define CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_URL_FLAG 0x4
  4670. #define CERT_CHAIN_FIND_BY_ISSUER_LOCAL_MACHINE_FLAG 0x8
  4671. #define CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG 0x4000
  4672. #define CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_FLAG 0x8000
  4673. typedef struct _CERT_CHAIN_POLICY_PARA {
  4674. DWORD cbSize;
  4675. DWORD dwFlags;
  4676. void *pvExtraPolicyPara;
  4677. } CERT_CHAIN_POLICY_PARA,*PCERT_CHAIN_POLICY_PARA;
  4678. typedef struct _CERT_CHAIN_POLICY_STATUS {
  4679. DWORD cbSize;
  4680. DWORD dwError;
  4681. LONG lChainIndex;
  4682. LONG lElementIndex;
  4683. void *pvExtraPolicyStatus;
  4684. } CERT_CHAIN_POLICY_STATUS,*PCERT_CHAIN_POLICY_STATUS;
  4685. #define CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG 0x1
  4686. #define CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG 0x2
  4687. #define CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG 0x4
  4688. #define CERT_CHAIN_POLICY_IGNORE_INVALID_BASIC_CONSTRAINTS_FLAG 0x8
  4689. #define CERT_CHAIN_POLICY_IGNORE_ALL_NOT_TIME_VALID_FLAGS (CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG | CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG | CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG)
  4690. #define CERT_CHAIN_POLICY_ALLOW_UNKNOWN_CA_FLAG 0x10
  4691. #define CERT_CHAIN_POLICY_IGNORE_WRONG_USAGE_FLAG 0x20
  4692. #define CERT_CHAIN_POLICY_IGNORE_INVALID_NAME_FLAG 0x40
  4693. #define CERT_CHAIN_POLICY_IGNORE_INVALID_POLICY_FLAG 0x80
  4694. #define CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG 0x100
  4695. #define CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG 0x200
  4696. #define CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG 0x400
  4697. #define CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG 0x800
  4698. #define CERT_CHAIN_POLICY_IGNORE_ALL_REV_UNKNOWN_FLAGS (CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG | CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG | CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG | CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG)
  4699. #define CERT_CHAIN_POLICY_IGNORE_PEER_TRUST_FLAG 0x1000
  4700. #define CERT_CHAIN_POLICY_IGNORE_NOT_SUPPORTED_CRITICAL_EXT_FLAG 0x2000
  4701. #define CERT_CHAIN_POLICY_TRUST_TESTROOT_FLAG 0x4000
  4702. #define CERT_CHAIN_POLICY_ALLOW_TESTROOT_FLAG 0x8000
  4703. WINIMPM WINBOOL WINAPI CertVerifyCertificateChainPolicy (LPCSTR pszPolicyOID, PCCERT_CHAIN_CONTEXT pChainContext, PCERT_CHAIN_POLICY_PARA pPolicyPara, PCERT_CHAIN_POLICY_STATUS pPolicyStatus);
  4704. #define CRYPT_OID_VERIFY_CERTIFICATE_CHAIN_POLICY_FUNC "CertDllVerifyCertificateChainPolicy"
  4705. #define CERT_CHAIN_POLICY_BASE ((LPCSTR) 1)
  4706. #define CERT_CHAIN_POLICY_AUTHENTICODE ((LPCSTR) 2)
  4707. #define CERT_CHAIN_POLICY_AUTHENTICODE_TS ((LPCSTR) 3)
  4708. #define CERT_CHAIN_POLICY_SSL ((LPCSTR) 4)
  4709. #define CERT_CHAIN_POLICY_BASIC_CONSTRAINTS ((LPCSTR) 5)
  4710. #define CERT_CHAIN_POLICY_NT_AUTH ((LPCSTR) 6)
  4711. #define CERT_CHAIN_POLICY_MICROSOFT_ROOT ((LPCSTR) 7)
  4712. #define CERT_CHAIN_POLICY_EV ((LPCSTR) 8)
  4713. #define CERT_CHAIN_POLICY_SSL_F12 ((LPCSTR) 9)
  4714. #define CERT_CHAIN_POLICY_SSL_HPKP_HEADER ((LPCSTR) 10)
  4715. #define CERT_CHAIN_POLICY_THIRD_PARTY_ROOT ((LPCSTR) 11)
  4716. #define CERT_CHAIN_POLICY_SSL_KEY_PIN ((LPCSTR) 12)
  4717. typedef struct _AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA {
  4718. DWORD cbSize;
  4719. DWORD dwRegPolicySettings;
  4720. PCMSG_SIGNER_INFO pSignerInfo;
  4721. } AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA, *PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA;
  4722. typedef struct _AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS {
  4723. DWORD cbSize;
  4724. WINBOOL fCommercial;
  4725. } AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS, *PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS;
  4726. typedef struct _AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA {
  4727. DWORD cbSize;
  4728. DWORD dwRegPolicySettings;
  4729. WINBOOL fCommercial;
  4730. } AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA,*PAUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA;
  4731. #define AUTHTYPE_CLIENT 1
  4732. #define AUTHTYPE_SERVER 2
  4733. typedef struct _HTTPSPolicyCallbackData {
  4734. __C89_NAMELESS union {
  4735. DWORD cbStruct;
  4736. DWORD cbSize;
  4737. };
  4738. DWORD dwAuthType;
  4739. DWORD fdwChecks;
  4740. WCHAR *pwszServerName;
  4741. } HTTPSPolicyCallbackData,*PHTTPSPolicyCallbackData,SSL_EXTRA_CERT_CHAIN_POLICY_PARA,*PSSL_EXTRA_CERT_CHAIN_POLICY_PARA;
  4742. #define BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_CA_FLAG 0x80000000
  4743. #define BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_END_ENTITY_FLAG 0x40000000
  4744. #define MICROSOFT_ROOT_CERT_CHAIN_POLICY_ENABLE_TEST_ROOT_FLAG 0x00010000
  4745. #define MICROSOFT_ROOT_CERT_CHAIN_POLICY_CHECK_APPLICATION_ROOT_FLAG 0x00020000
  4746. #define MICROSOFT_ROOT_CERT_CHAIN_POLICY_DISABLE_FLIGHT_ROOT_FLAG 0x00040000
  4747. typedef struct _EV_EXTRA_CERT_CHAIN_POLICY_PARA {
  4748. DWORD cbSize;
  4749. DWORD dwRootProgramQualifierFlags;
  4750. } EV_EXTRA_CERT_CHAIN_POLICY_PARA,*PEV_EXTRA_CERT_CHAIN_POLICY_PARA;
  4751. typedef struct _EV_EXTRA_CERT_CHAIN_POLICY_STATUS {
  4752. DWORD cbSize;
  4753. DWORD dwQualifiers;
  4754. DWORD dwIssuanceUsageIndex;
  4755. } EV_EXTRA_CERT_CHAIN_POLICY_STATUS,*PEV_EXTRA_CERT_CHAIN_POLICY_STATUS;
  4756. #define SSL_F12_ERROR_TEXT_LENGTH 256
  4757. typedef struct _SSL_F12_EXTRA_CERT_CHAIN_POLICY_STATUS {
  4758. DWORD cbSize;
  4759. DWORD dwErrorLevel;
  4760. DWORD dwErrorCategory;
  4761. DWORD dwReserved;
  4762. WCHAR wszErrorText[SSL_F12_ERROR_TEXT_LENGTH]; /* Localized */
  4763. } SSL_F12_EXTRA_CERT_CHAIN_POLICY_STATUS, *PSSL_F12_EXTRA_CERT_CHAIN_POLICY_STATUS;
  4764. #define CERT_CHAIN_POLICY_SSL_F12_SUCCESS_LEVEL 0
  4765. #define CERT_CHAIN_POLICY_SSL_F12_WARNING_LEVEL 1
  4766. #define CERT_CHAIN_POLICY_SSL_F12_ERROR_LEVEL 2
  4767. #define CERT_CHAIN_POLICY_SSL_F12_NONE_CATEGORY 0
  4768. #define CERT_CHAIN_POLICY_SSL_F12_WEAK_CRYPTO_CATEGORY 1
  4769. #define CERT_CHAIN_POLICY_SSL_F12_ROOT_PROGRAM_CATEGORY 2
  4770. #define SSL_HPKP_PKP_HEADER_INDEX 0
  4771. #define SSL_HPKP_PKP_RO_HEADER_INDEX 1
  4772. #define SSL_HPKP_HEADER_COUNT 2
  4773. typedef struct _SSL_HPKP_HEADER_EXTRA_CERT_CHAIN_POLICY_PARA {
  4774. DWORD cbSize;
  4775. DWORD dwReserved;
  4776. LPWSTR pwszServerName;
  4777. LPSTR rgpszHpkpValue[SSL_HPKP_HEADER_COUNT];
  4778. } SSL_HPKP_HEADER_EXTRA_CERT_CHAIN_POLICY_PARA, *PSSL_HPKP_HEADER_EXTRA_CERT_CHAIN_POLICY_PARA;
  4779. typedef struct _SSL_KEY_PIN_EXTRA_CERT_CHAIN_POLICY_PARA {
  4780. DWORD cbSize;
  4781. DWORD dwReserved;
  4782. PCWSTR pwszServerName;
  4783. } SSL_KEY_PIN_EXTRA_CERT_CHAIN_POLICY_PARA, *PSSL_KEY_PIN_EXTRA_CERT_CHAIN_POLICY_PARA;
  4784. #define SSL_KEY_PIN_ERROR_TEXT_LENGTH 512
  4785. typedef struct _SSL_KEY_PIN_EXTRA_CERT_CHAIN_POLICY_STATUS {
  4786. DWORD cbSize;
  4787. LONG lError;
  4788. WCHAR wszErrorText[SSL_KEY_PIN_ERROR_TEXT_LENGTH];
  4789. } SSL_KEY_PIN_EXTRA_CERT_CHAIN_POLICY_STATUS, *PSSL_KEY_PIN_EXTRA_CERT_CHAIN_POLICY_STATUS;
  4790. #define CERT_CHAIN_POLICY_SSL_KEY_PIN_MISMATCH_ERROR -2
  4791. #define CERT_CHAIN_POLICY_SSL_KEY_PIN_MITM_ERROR -1
  4792. #define CERT_CHAIN_POLICY_SSL_KEY_PIN_SUCCESS 0
  4793. #define CERT_CHAIN_POLICY_SSL_KEY_PIN_MITM_WARNING 1
  4794. #define CERT_CHAIN_POLICY_SSL_KEY_PIN_MISMATCH_WARNING 2
  4795. #define CryptStringToBinary __MINGW_NAME_AW(CryptStringToBinary)
  4796. #define CryptBinaryToString __MINGW_NAME_AW(CryptBinaryToString)
  4797. WINIMPM WINBOOL WINAPI CryptStringToBinaryA (LPCSTR pszString, DWORD cchString, DWORD dwFlags, BYTE *pbBinary, DWORD *pcbBinary, DWORD *pdwSkip, DWORD *pdwFlags);
  4798. WINIMPM WINBOOL WINAPI CryptStringToBinaryW (LPCWSTR pszString, DWORD cchString, DWORD dwFlags, BYTE *pbBinary, DWORD *pcbBinary, DWORD *pdwSkip, DWORD *pdwFlags);
  4799. WINIMPM WINBOOL WINAPI CryptBinaryToStringA (CONST BYTE *pbBinary, DWORD cbBinary, DWORD dwFlags, LPSTR pszString, DWORD *pcchString);
  4800. WINIMPM WINBOOL WINAPI CryptBinaryToStringW (CONST BYTE *pbBinary, DWORD cbBinary, DWORD dwFlags, LPWSTR pszString, DWORD *pcchString);
  4801. #define CRYPT_STRING_BASE64HEADER 0x0
  4802. #define CRYPT_STRING_BASE64 0x1
  4803. #define CRYPT_STRING_BINARY 0x2
  4804. #define CRYPT_STRING_BASE64REQUESTHEADER 0x00000003
  4805. #define CRYPT_STRING_HEX 0x4
  4806. #define CRYPT_STRING_HEXASCII 0x00000005
  4807. #define CRYPT_STRING_BASE64_ANY 0x00000006
  4808. #define CRYPT_STRING_ANY 0x00000007
  4809. #define CRYPT_STRING_HEX_ANY 0x8
  4810. #define CRYPT_STRING_BASE64X509CRLHEADER 0x00000009
  4811. #define CRYPT_STRING_HEXADDR 0x0000000a
  4812. #define CRYPT_STRING_HEXASCIIADDR 0x0000000b
  4813. #define CRYPT_STRING_HEXRAW 0x0000000c
  4814. #define CRYPT_STRING_BASE64URI 0x0000000d
  4815. #define CRYPT_STRING_ENCODEMASK 0x000000ff
  4816. #define CRYPT_STRING_RESERVED100 0x00000100
  4817. #define CRYPT_STRING_RESERVED200 0x00000200
  4818. #define CRYPT_STRING_PERCENTESCAPE 0x08000000
  4819. #define CRYPT_STRING_HASHDATA 0x10000000
  4820. #define CRYPT_STRING_STRICT 0x20000000
  4821. #define CRYPT_STRING_NOCRLF 0x40000000
  4822. #define CRYPT_STRING_NOCR 0x80000000
  4823. #define szOID_PKCS_12_PbeIds "1.2.840.113549.1.12.1"
  4824. #define szOID_PKCS_12_pbeWithSHA1And128BitRC4 "1.2.840.113549.1.12.1.1"
  4825. #define szOID_PKCS_12_pbeWithSHA1And40BitRC4 "1.2.840.113549.1.12.1.2"
  4826. #define szOID_PKCS_12_pbeWithSHA1And3KeyTripleDES "1.2.840.113549.1.12.1.3"
  4827. #define szOID_PKCS_12_pbeWithSHA1And2KeyTripleDES "1.2.840.113549.1.12.1.4"
  4828. #define szOID_PKCS_12_pbeWithSHA1And128BitRC2 "1.2.840.113549.1.12.1.5"
  4829. #define szOID_PKCS_12_pbeWithSHA1And40BitRC2 "1.2.840.113549.1.12.1.6"
  4830. #define szOID_PKCS_5_PBKDF2 "1.2.840.113549.1.5.12"
  4831. #define szOID_PKCS_5_PBES2 "1.2.840.113549.1.5.13"
  4832. typedef struct _CRYPT_PKCS12_PBE_PARAMS {
  4833. int iIterations;
  4834. ULONG cbSalt;
  4835. } CRYPT_PKCS12_PBE_PARAMS;
  4836. #endif
  4837. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) || _WIN32_WINNT >= 0x0A00
  4838. WINIMPM HCERTSTORE WINAPI PFXImportCertStore (CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword, DWORD dwFlags);
  4839. #endif
  4840. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
  4841. #define PKCS12_IMPORT_SILENT 0x40
  4842. #define CRYPT_USER_KEYSET 0x1000
  4843. #define PKCS12_PREFER_CNG_KSP 0x100
  4844. #define PKCS12_ALWAYS_CNG_KSP 0x200
  4845. #define PKCS12_ONLY_CERTIFICATES 0x00000400
  4846. #define PKCS12_ONLY_NOT_ENCRYPTED_CERTIFICATES 0x00000800
  4847. #define PKCS12_ALLOW_OVERWRITE_KEY 0x4000
  4848. #define PKCS12_NO_PERSIST_KEY 0x8000
  4849. #define PKCS12_VIRTUAL_ISOLATION_KEY 0x00010000
  4850. #define PKCS12_IMPORT_RESERVED_MASK 0xffff0000
  4851. #define PKCS12_OBJECT_LOCATOR_ALL_IMPORT_FLAGS (PKCS12_ALWAYS_CNG_KSP | PKCS12_NO_PERSIST_KEY | PKCS12_IMPORT_SILENT | PKCS12_INCLUDE_EXTENDED_PROPERTIES)
  4852. #define PKCS12_ONLY_CERTIFICATES_PROVIDER_TYPE 0
  4853. #define PKCS12_ONLY_CERTIFICATES_PROVIDER_NAME L"PfxProvider"
  4854. #define PKCS12_ONLY_CERTIFICATES_CONTAINER_NAME L"PfxContainer"
  4855. WINIMPM WINBOOL WINAPI PFXIsPFXBlob (CRYPT_DATA_BLOB *pPFX);
  4856. WINIMPM WINBOOL WINAPI PFXVerifyPassword (CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword, DWORD dwFlags);
  4857. WINIMPM WINBOOL WINAPI PFXExportCertStoreEx (HCERTSTORE hStore, CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword, void *pvPara, DWORD dwFlags);
  4858. #define REPORT_NO_PRIVATE_KEY 0x1
  4859. #define REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY 0x2
  4860. #define EXPORT_PRIVATE_KEYS 0x4
  4861. #define PKCS12_INCLUDE_EXTENDED_PROPERTIES 0x10
  4862. #define PKCS12_PROTECT_TO_DOMAIN_SIDS 0x20
  4863. #define PKCS12_EXPORT_SILENT 0x40
  4864. #define PKCS12_EXPORT_PBES2_PARAMS 0x0080
  4865. #define PKCS12_DISABLE_ENCRYPT_CERTIFICATES 0x0100
  4866. #define PKCS12_ENCRYPT_CERTIFICATES 0x0200
  4867. #define PKCS12_EXPORT_ECC_CURVE_PARAMETERS 0x1000
  4868. #define PKCS12_EXPORT_ECC_CURVE_OID 0x2000
  4869. #define PKCS12_EXPORT_RESERVED_MASK 0xffff0000
  4870. #define PKCS12_PBKDF2_ID_HMAC_SHA1 "1.2.840.113549.2.7"
  4871. #define PKCS12_PBKDF2_ID_HMAC_SHA256 "1.2.840.113549.2.9"
  4872. #define PKCS12_PBKDF2_ID_HMAC_SHA384 "1.2.840.113549.2.10"
  4873. #define PKCS12_PBKDF2_ID_HMAC_SHA512 "1.2.840.113549.2.11"
  4874. typedef struct _PKCS12_PBES2_EXPORT_PARAMS {
  4875. DWORD dwSize;
  4876. PVOID hNcryptDescriptor;
  4877. LPWSTR pwszPbes2Alg;
  4878. } PKCS12_PBES2_EXPORT_PARAMS, *PPKCS12_PBES2_EXPORT_PARAMS;
  4879. #define PKCS12_PBES2_ALG_AES256_SHA256 L"AES256-SHA256"
  4880. #define PKCS12_CONFIG_REGPATH L"Software\\Microsoft\\Windows\\CurrentVersion\\PFX"
  4881. #define PKCS12_ENCRYPT_CERTIFICATES_VALUE_NAME L"EncryptCertificates"
  4882. WINIMPM WINBOOL WINAPI PFXExportCertStore (HCERTSTORE hStore, CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword, DWORD dwFlags);
  4883. #if NTDDI_VERSION >= NTDDI_VISTA
  4884. typedef VOID *HCERT_SERVER_OCSP_RESPONSE;
  4885. WINIMPM HCERT_SERVER_OCSP_RESPONSE WINAPI CertOpenServerOcspResponse (PCCERT_CHAIN_CONTEXT pChainContext, DWORD dwFlags, LPVOID pvReserved);
  4886. #define CERT_SERVER_OCSP_RESPONSE_ASYNC_FLAG 0x1
  4887. WINIMPM VOID WINAPI CertAddRefServerOcspResponse (HCERT_SERVER_OCSP_RESPONSE hServerOcspResponse);
  4888. WINIMPM VOID WINAPI CertCloseServerOcspResponse (HCERT_SERVER_OCSP_RESPONSE hServerOcspResponse, DWORD dwFlags);
  4889. typedef struct _CERT_SERVER_OCSP_RESPONSE_CONTEXT CERT_SERVER_OCSP_RESPONSE_CONTEXT,*PCERT_SERVER_OCSP_RESPONSE_CONTEXT;
  4890. typedef const CERT_SERVER_OCSP_RESPONSE_CONTEXT *PCCERT_SERVER_OCSP_RESPONSE_CONTEXT;
  4891. struct _CERT_SERVER_OCSP_RESPONSE_CONTEXT {
  4892. DWORD cbSize;
  4893. BYTE *pbEncodedOcspResponse;
  4894. DWORD cbEncodedOcspResponse;
  4895. };
  4896. typedef VOID (CALLBACK *PFN_CERT_SERVER_OCSP_RESPONSE_UPDATE_CALLBACK)(PCCERT_CHAIN_CONTEXT pChainContext, PCCERT_SERVER_OCSP_RESPONSE_CONTEXT pServerOcspResponseContext, PCCRL_CONTEXT pNewCrlContext, PCCRL_CONTEXT pPrevCrlContext, PVOID pvArg, DWORD dwWriteOcspFileError);
  4897. typedef struct _CERT_SERVER_OCSP_RESPONSE_OPEN_PARA {
  4898. DWORD cbSize;
  4899. DWORD dwFlags;
  4900. DWORD *pcbUsedSize;
  4901. PWSTR pwszOcspDirectory;
  4902. PFN_CERT_SERVER_OCSP_RESPONSE_UPDATE_CALLBACK pfnUpdateCallback;
  4903. PVOID pvUpdateCallbackArg;
  4904. } CERT_SERVER_OCSP_RESPONSE_OPEN_PARA, *PCERT_SERVER_OCSP_RESPONSE_OPEN_PARA;
  4905. #define CERT_SERVER_OCSP_RESPONSE_OPEN_PARA_READ_FLAG 0x00000001
  4906. #define CERT_SERVER_OCSP_RESPONSE_OPEN_PARA_WRITE_FLAG 0x00000002
  4907. WINIMPM PCCERT_SERVER_OCSP_RESPONSE_CONTEXT WINAPI CertGetServerOcspResponseContext (HCERT_SERVER_OCSP_RESPONSE hServerOcspResponse, DWORD dwFlags, LPVOID pvReserved);
  4908. WINIMPM VOID WINAPI CertAddRefServerOcspResponseContext (PCCERT_SERVER_OCSP_RESPONSE_CONTEXT pServerOcspResponseContext);
  4909. WINIMPM VOID WINAPI CertFreeServerOcspResponseContext (PCCERT_SERVER_OCSP_RESPONSE_CONTEXT pServerOcspResponseContext);
  4910. #endif
  4911. WINIMPM WINBOOL WINAPI CertRetrieveLogoOrBiometricInfo (PCCERT_CONTEXT pCertContext, LPCSTR lpszLogoOrBiometricType, DWORD dwRetrievalFlags, DWORD dwTimeout, DWORD dwFlags, void *pvReserved, BYTE **ppbData, DWORD *pcbData, LPWSTR *ppwszMimeType);
  4912. #define CERT_RETRIEVE_ISSUER_LOGO ((LPCSTR) 1)
  4913. #define CERT_RETRIEVE_SUBJECT_LOGO ((LPCSTR) 2)
  4914. #define CERT_RETRIEVE_COMMUNITY_LOGO ((LPCSTR) 3)
  4915. #define CERT_RETRIEVE_BIOMETRIC_PREDEFINED_BASE_TYPE ((LPCSTR) 1000)
  4916. #define CERT_RETRIEVE_BIOMETRIC_PICTURE_TYPE (CERT_RETRIEVE_BIOMETRIC_PREDEFINED_BASE_TYPE + CERT_BIOMETRIC_PICTURE_TYPE)
  4917. #define CERT_RETRIEVE_BIOMETRIC_SIGNATURE_TYPE (CERT_RETRIEVE_BIOMETRIC_PREDEFINED_BASE_TYPE + CERT_BIOMETRIC_SIGNATURE_TYPE)
  4918. #if NTDDI_VERSION >= NTDDI_WIN7
  4919. typedef struct _CERT_SELECT_CHAIN_PARA {
  4920. HCERTCHAINENGINE hChainEngine;
  4921. PFILETIME pTime;
  4922. HCERTSTORE hAdditionalStore;
  4923. PCERT_CHAIN_PARA pChainPara;
  4924. DWORD dwFlags;
  4925. } CERT_SELECT_CHAIN_PARA,*PCERT_SELECT_CHAIN_PARA;
  4926. typedef const CERT_SELECT_CHAIN_PARA *PCCERT_SELECT_CHAIN_PARA;
  4927. #define CERT_SELECT_MAX_PARA 500
  4928. typedef struct _CERT_SELECT_CRITERIA {
  4929. DWORD dwType;
  4930. DWORD cPara;
  4931. void **ppPara;
  4932. } CERT_SELECT_CRITERIA,*PCERT_SELECT_CRITERIA;
  4933. typedef const CERT_SELECT_CRITERIA *PCCERT_SELECT_CRITERIA;
  4934. #define CERT_SELECT_BY_ENHKEY_USAGE 1
  4935. #define CERT_SELECT_BY_KEY_USAGE 2
  4936. #define CERT_SELECT_BY_POLICY_OID 3
  4937. #define CERT_SELECT_BY_PROV_NAME 4
  4938. #define CERT_SELECT_BY_EXTENSION 5
  4939. #define CERT_SELECT_BY_SUBJECT_HOST_NAME 6
  4940. #define CERT_SELECT_BY_ISSUER_ATTR 7
  4941. #define CERT_SELECT_BY_SUBJECT_ATTR 8
  4942. #define CERT_SELECT_BY_ISSUER_NAME 9
  4943. #define CERT_SELECT_BY_PUBLIC_KEY 10
  4944. #define CERT_SELECT_BY_TLS_SIGNATURES 11
  4945. #define CERT_SELECT_BY_ISSUER_DISPLAYNAME 12
  4946. #define CERT_SELECT_BY_FRIENDLYNAME 13
  4947. #define CERT_SELECT_BY_THUMBPRINT 14
  4948. #define CERT_SELECT_LAST CERT_SELECT_BY_TLS_SIGNATURES
  4949. #define CERT_SELECT_MAX (CERT_SELECT_LAST *3)
  4950. #define CERT_SELECT_ALLOW_EXPIRED 0x1
  4951. #define CERT_SELECT_TRUSTED_ROOT 0x2
  4952. #define CERT_SELECT_DISALLOW_SELFSIGNED 0x4
  4953. #define CERT_SELECT_HAS_PRIVATE_KEY 0x8
  4954. #define CERT_SELECT_HAS_KEY_FOR_SIGNATURE 0x10
  4955. #define CERT_SELECT_HAS_KEY_FOR_KEY_EXCHANGE 0x20
  4956. #define CERT_SELECT_HARDWARE_ONLY 0x40
  4957. #define CERT_SELECT_ALLOW_DUPLICATES 0x80
  4958. #define CERT_SELECT_IGNORE_AUTOSELECT 0x00000100
  4959. WINIMPM WINBOOL WINAPI CertSelectCertificateChains (LPCGUID pSelectionContext, DWORD dwFlags, PCCERT_SELECT_CHAIN_PARA pChainParameters, DWORD cCriteria, PCCERT_SELECT_CRITERIA rgpCriteria, HCERTSTORE hStore, PDWORD pcSelection, PCCERT_CHAIN_CONTEXT **pprgpSelection);
  4960. WINIMPM VOID WINAPI CertFreeCertificateChainList (PCCERT_CHAIN_CONTEXT *prgpSelection);
  4961. #endif
  4962. #if NTDDI_VERSION >= NTDDI_WIN7
  4963. #define TIMESTAMP_VERSION 1
  4964. typedef struct _CRYPT_TIMESTAMP_REQUEST {
  4965. DWORD dwVersion;
  4966. CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
  4967. CRYPT_DER_BLOB HashedMessage;
  4968. LPSTR pszTSAPolicyId;
  4969. CRYPT_INTEGER_BLOB Nonce;
  4970. WINBOOL fCertReq;
  4971. DWORD cExtension;
  4972. PCERT_EXTENSION rgExtension;
  4973. } CRYPT_TIMESTAMP_REQUEST,*PCRYPT_TIMESTAMP_REQUEST;
  4974. typedef struct _CRYPT_TIMESTAMP_RESPONSE {
  4975. DWORD dwStatus;
  4976. DWORD cFreeText;
  4977. LPWSTR *rgFreeText;
  4978. CRYPT_BIT_BLOB FailureInfo;
  4979. CRYPT_DER_BLOB ContentInfo;
  4980. } CRYPT_TIMESTAMP_RESPONSE,*PCRYPT_TIMESTAMP_RESPONSE;
  4981. #define TIMESTAMP_STATUS_GRANTED 0
  4982. #define TIMESTAMP_STATUS_GRANTED_WITH_MODS 1
  4983. #define TIMESTAMP_STATUS_REJECTED 2
  4984. #define TIMESTAMP_STATUS_WAITING 3
  4985. #define TIMESTAMP_STATUS_REVOCATION_WARNING 4
  4986. #define TIMESTAMP_STATUS_REVOKED 5
  4987. #define TIMESTAMP_FAILURE_BAD_ALG 0
  4988. #define TIMESTAMP_FAILURE_BAD_REQUEST 2
  4989. #define TIMESTAMP_FAILURE_BAD_FORMAT 5
  4990. #define TIMESTAMP_FAILURE_TIME_NOT_AVAILABLE 14
  4991. #define TIMESTAMP_FAILURE_POLICY_NOT_SUPPORTED 15
  4992. #define TIMESTAMP_FAILURE_EXTENSION_NOT_SUPPORTED 16
  4993. #define TIMESTAMP_FAILURE_INFO_NOT_AVAILABLE 17
  4994. #define TIMESTAMP_FAILURE_SYSTEM_FAILURE 25
  4995. typedef struct _CRYPT_TIMESTAMP_ACCURACY {
  4996. DWORD dwSeconds;
  4997. DWORD dwMillis;
  4998. DWORD dwMicros;
  4999. } CRYPT_TIMESTAMP_ACCURACY,*PCRYPT_TIMESTAMP_ACCURACY;
  5000. typedef struct _CRYPT_TIMESTAMP_INFO {
  5001. DWORD dwVersion;
  5002. LPSTR pszTSAPolicyId;
  5003. CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
  5004. CRYPT_DER_BLOB HashedMessage;
  5005. CRYPT_INTEGER_BLOB SerialNumber;
  5006. FILETIME ftTime;
  5007. PCRYPT_TIMESTAMP_ACCURACY pvAccuracy;
  5008. WINBOOL fOrdering;
  5009. CRYPT_DER_BLOB Nonce;
  5010. CRYPT_DER_BLOB Tsa;
  5011. DWORD cExtension;
  5012. PCERT_EXTENSION rgExtension;
  5013. } CRYPT_TIMESTAMP_INFO,*PCRYPT_TIMESTAMP_INFO;
  5014. typedef struct _CRYPT_TIMESTAMP_CONTEXT {
  5015. DWORD cbEncoded;
  5016. BYTE *pbEncoded;
  5017. PCRYPT_TIMESTAMP_INFO pTimeStamp;
  5018. } CRYPT_TIMESTAMP_CONTEXT,*PCRYPT_TIMESTAMP_CONTEXT;
  5019. typedef struct _CRYPT_TIMESTAMP_PARA {
  5020. LPCSTR pszTSAPolicyId;
  5021. WINBOOL fRequestCerts;
  5022. CRYPT_INTEGER_BLOB Nonce;
  5023. DWORD cExtension;
  5024. PCERT_EXTENSION rgExtension;
  5025. } CRYPT_TIMESTAMP_PARA,*PCRYPT_TIMESTAMP_PARA;
  5026. WINBOOL WINAPI CryptRetrieveTimeStamp (LPCWSTR wszUrl, DWORD dwRetrievalFlags, DWORD dwTimeout, LPCSTR pszHashId, const CRYPT_TIMESTAMP_PARA *pPara, const BYTE *pbData, DWORD cbData, PCRYPT_TIMESTAMP_CONTEXT *ppTsContext, PCCERT_CONTEXT *ppTsSigner, HCERTSTORE *phStore);
  5027. #define TIMESTAMP_DONT_HASH_DATA 0x1
  5028. #define TIMESTAMP_VERIFY_CONTEXT_SIGNATURE 0x20
  5029. #define TIMESTAMP_NO_AUTH_RETRIEVAL 0x20000
  5030. WINBOOL WINAPI CryptVerifyTimeStampSignature (const BYTE *pbTSContentInfo, DWORD cbTSContentInfo, const BYTE *pbData, DWORD cbData, HCERTSTORE hAdditionalStore, PCRYPT_TIMESTAMP_CONTEXT *ppTsContext, PCCERT_CONTEXT *ppTsSigner, HCERTSTORE *phStore);
  5031. #endif
  5032. #if NTDDI_VERSION >= NTDDI_WIN8
  5033. #define CRYPT_OBJECT_LOCATOR_SPN_NAME_TYPE 1
  5034. #define CRYPT_OBJECT_LOCATOR_LAST_RESERVED_NAME_TYPE 32
  5035. #define CRYPT_OBJECT_LOCATOR_FIRST_RESERVED_USER_NAME_TYPE 33
  5036. #define CRYPT_OBJECT_LOCATOR_LAST_RESERVED_USER_NAME_TYPE 0x0000ffff
  5037. #define SSL_OBJECT_LOCATOR_PFX_FUNC "SslObjectLocatorInitializePfx"
  5038. #define SSL_OBJECT_LOCATOR_ISSUER_LIST_FUNC "SslObjectLocatorInitializeIssuerList"
  5039. #define SSL_OBJECT_LOCATOR_CERT_VALIDATION_CONFIG_FUNC "SslObjectLocatorInitializeCertValidationConfig"
  5040. #define CRYPT_OBJECT_LOCATOR_RELEASE_SYSTEM_SHUTDOWN 1
  5041. #define CRYPT_OBJECT_LOCATOR_RELEASE_SERVICE_STOP 2
  5042. #define CRYPT_OBJECT_LOCATOR_RELEASE_PROCESS_EXIT 3
  5043. #define CRYPT_OBJECT_LOCATOR_RELEASE_DLL_UNLOAD 4
  5044. typedef WINBOOL (WINAPI *PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FLUSH) (LPVOID pContext, PCERT_NAME_BLOB *rgIdentifierOrNameList, DWORD dwIdentifierOrNameListCount);
  5045. typedef WINBOOL (WINAPI *PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_GET) (LPVOID pPluginContext, PCRYPT_DATA_BLOB pIdentifier, DWORD dwNameType, PCERT_NAME_BLOB pNameBlob, PBYTE *ppbContent, DWORD *pcbContent, PCWSTR *ppwszPassword, PCRYPT_DATA_BLOB *ppIdentifier);
  5046. typedef void (WINAPI *PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_RELEASE) (DWORD dwReason, LPVOID pPluginContext);
  5047. typedef void (WINAPI *PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE_PASSWORD) (LPVOID pPluginContext, PCWSTR pwszPassword);
  5048. typedef void (WINAPI *PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE) (LPVOID pPluginContext, PBYTE pbData);
  5049. typedef void (WINAPI *PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE_IDENTIFIER) (LPVOID pPluginContext, PCRYPT_DATA_BLOB pIdentifier);
  5050. typedef struct _CRYPT_OBJECT_LOCATOR_PROVIDER_TABLE {
  5051. DWORD cbSize;
  5052. PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_GET pfnGet;
  5053. PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_RELEASE pfnRelease;
  5054. PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE_PASSWORD pfnFreePassword;
  5055. PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE pfnFree;
  5056. PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE_IDENTIFIER pfnFreeIdentifier;
  5057. } CRYPT_OBJECT_LOCATOR_PROVIDER_TABLE,*PCRYPT_OBJECT_LOCATOR_PROVIDER_TABLE;
  5058. typedef WINBOOL (WINAPI *PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_INITIALIZE) (PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FLUSH pfnFlush, LPVOID pContext, DWORD *pdwExpectedObjectCount, PCRYPT_OBJECT_LOCATOR_PROVIDER_TABLE *ppFuncTable, void **ppPluginContext);
  5059. WINIMPM WINBOOL WINAPI CertIsWeakHash(DWORD dwHashUseType, LPCWSTR pwszCNGHashAlgid, DWORD dwChainFlags, PCCERT_CHAIN_CONTEXT pSignerChainContext, LPFILETIME pTimeStamp, LPCWSTR pwszFileName);
  5060. typedef WINBOOL (WINAPI *PFN_CERT_IS_WEAK_HASH)(DWORD dwHashUseType, LPCWSTR pwszCNGHashAlgid, DWORD dwChainFlags, PCCERT_CHAIN_CONTEXT pSignerChainContext, LPFILETIME pTimeStamp, LPCWSTR pwszFileName);
  5061. #define CERT_FILE_HASH_USE_TYPE 1
  5062. #define CERT_TIMESTAMP_HASH_USE_TYPE 2
  5063. #endif
  5064. #endif
  5065. #endif
  5066. #ifdef __cplusplus
  5067. }
  5068. #endif
  5069. #ifndef _WINCRYPT_NO_DPAPI
  5070. #include <dpapi.h>
  5071. #endif
  5072. #endif