Hex Artifact Content

Not logged in

Artifact 01dc6f0e64f6c54b8f9352b48a710ec869839f5b:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0040: 2a 2a 2a 2a 2a 2a 2a 2a 5c 0a 2a 20 20 20 20 20  ********\.*     
0050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0060: 20 20 20 20 20 20 20 20 20 20 77 69 6e 63 72 79            wincry
0070: 70 74 2e 64 20 20 20 20 20 20 20 20 20 20 20 20  pt.d            
0080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0090: 20 20 2a 0a 2a 20 20 20 20 20 20 20 20 20 20 20    *.*           
00a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
00b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
00c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
00d0: 20 20 20 20 20 20 20 20 20 20 20 20 2a 0a 2a 20              *.* 
00e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
00f0: 20 20 20 20 20 20 57 69 6e 64 6f 77 73 20 41 50        Windows AP
0100: 49 20 68 65 61 64 65 72 20 6d 6f 64 75 6c 65 20  I header module 
0110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0120: 20 20 20 20 20 20 2a 0a 2a 20 20 20 20 20 20 20        *.*       
0130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0170: 2a 0a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  *.*             
0180: 20 20 20 20 54 72 61 6e 73 6c 61 74 65 64 20 66      Translated f
0190: 72 6f 6d 20 4d 69 6e 47 57 20 57 69 6e 64 6f 77  rom MinGW Window
01a0: 73 20 68 65 61 64 65 72 73 20 20 20 20 20 20 20  s headers       
01b0: 20 20 20 20 20 20 20 20 20 20 2a 0a 2a 20 20 20            *.*   
01c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
01d0: 20 20 20 20 20 20 20 20 62 79 20 53 74 65 77 61          by Stewa
01e0: 72 74 20 47 6f 72 64 6f 6e 20 20 20 20 20 20 20  rt Gordon       
01f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0200: 20 20 20 20 2a 0a 2a 20 20 20 20 20 20 20 20 20      *.*         
0210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 0a                *.
0250: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
0260: 20 20 20 20 20 20 20 20 50 6c 61 63 65 64 20 69          Placed i
0270: 6e 74 6f 20 70 75 62 6c 69 63 20 64 6f 6d 61 69  nto public domai
0280: 6e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n               
0290: 20 20 20 20 20 20 20 20 2a 0a 5c 2a 2a 2a 2a 2a          *.\*****
02a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02e0: 2a 2a 2f 0a 6d 6f 64 75 6c 65 20 77 69 6e 33 32  **/.module win32
02f0: 2e 77 69 6e 63 72 79 70 74 3b 0a 0a 70 72 69 76  .wincrypt;..priv
0300: 61 74 65 20 69 6d 70 6f 72 74 20 77 69 6e 33 32  ate import win32
0310: 2e 77 33 32 61 70 69 2c 20 77 69 6e 33 32 2e 77  .w32api, win32.w
0320: 69 6e 62 61 73 65 2c 20 77 69 6e 33 32 2e 77 69  inbase, win32.wi
0330: 6e 64 65 66 3b 0a 0a 2f 2a 20 46 49 58 4d 45 3a  ndef;../* FIXME:
0340: 0a 20 2a 09 54 79 70 65 73 20 6f 66 20 73 6f 6d  . *.Types of som
0350: 65 20 63 6f 6e 73 74 61 6e 74 73 0a 20 2a 09 54  e constants. *.T
0360: 79 70 65 73 20 6f 66 20 6d 61 63 72 6f 73 0a 20  ypes of macros. 
0370: 2a 09 49 6e 69 74 73 20 6f 66 20 76 61 72 69 6f  *.Inits of vario
0380: 75 73 20 22 73 69 7a 65 22 20 61 6e 64 20 22 76  us "size" and "v
0390: 65 72 73 69 6f 6e 22 20 6d 65 6d 62 65 72 73 0a  ersion" members.
03a0: 20 2a 09 57 68 79 20 61 72 65 20 73 6f 6d 65 20   *.Why are some 
03b0: 23 69 66 64 65 66 73 20 63 6f 6d 6d 65 6e 74 65  #ifdefs commente
03c0: 64 20 6f 75 74 3f 0a 20 2a 2f 0a 0a 63 6f 6e 73  d out?. */..cons
03d0: 74 20 54 43 48 41 52 5b 5d 0a 09 4d 53 5f 44 45  t TCHAR[]..MS_DE
03e0: 46 5f 50 52 4f 56 20 3d 20 22 4d 69 63 72 6f 73  F_PROV = "Micros
03f0: 6f 66 74 20 42 61 73 65 20 43 72 79 70 74 6f 67  oft Base Cryptog
0400: 72 61 70 68 69 63 20 50 72 6f 76 69 64 65 72 20  raphic Provider 
0410: 76 31 2e 30 22 2c 0a 09 4d 53 5f 45 4e 48 41 4e  v1.0",..MS_ENHAN
0420: 43 45 44 5f 50 52 4f 56 20 3d 20 22 4d 69 63 72  CED_PROV = "Micr
0430: 6f 73 6f 66 74 20 45 6e 68 61 6e 63 65 64 20 43  osoft Enhanced C
0440: 72 79 70 74 6f 67 72 61 70 68 69 63 20 50 72 6f  ryptographic Pro
0450: 76 69 64 65 72 20 76 31 2e 30 22 2c 0a 09 4d 53  vider v1.0",..MS
0460: 5f 53 54 52 4f 4e 47 5f 50 52 4f 56 20 3d 20 22  _STRONG_PROV = "
0470: 4d 69 63 72 6f 73 6f 66 74 20 53 74 72 6f 6e 67  Microsoft Strong
0480: 20 43 72 79 70 74 6f 67 72 61 70 68 69 63 20 50   Cryptographic P
0490: 72 6f 76 69 64 65 72 22 2c 0a 09 4d 53 5f 44 45  rovider",..MS_DE
04a0: 46 5f 52 53 41 5f 53 49 47 5f 50 52 4f 56 20 3d  F_RSA_SIG_PROV =
04b0: 20 22 4d 69 63 72 6f 73 6f 66 74 20 52 53 41 20   "Microsoft RSA 
04c0: 53 69 67 6e 61 74 75 72 65 20 43 72 79 70 74 6f  Signature Crypto
04d0: 67 72 61 70 68 69 63 20 50 72 6f 76 69 64 65 72  graphic Provider
04e0: 22 2c 0a 09 4d 53 5f 44 45 46 5f 52 53 41 5f 53  ",..MS_DEF_RSA_S
04f0: 43 48 41 4e 4e 45 4c 5f 50 52 4f 56 20 3d 20 22  CHANNEL_PROV = "
0500: 4d 69 63 72 6f 73 6f 66 74 20 52 53 41 20 53 43  Microsoft RSA SC
0510: 68 61 6e 6e 65 6c 20 43 72 79 70 74 6f 67 72 61  hannel Cryptogra
0520: 70 68 69 63 20 50 72 6f 76 69 64 65 72 22 2c 0a  phic Provider",.
0530: 09 4d 53 5f 44 45 46 5f 44 53 53 5f 50 52 4f 56  .MS_DEF_DSS_PROV
0540: 20 3d 20 22 4d 69 63 72 6f 73 6f 66 74 20 42 61   = "Microsoft Ba
0550: 73 65 20 44 53 53 20 43 72 79 70 74 6f 67 72 61  se DSS Cryptogra
0560: 70 68 69 63 20 50 72 6f 76 69 64 65 72 22 2c 0a  phic Provider",.
0570: 09 4d 53 5f 44 45 46 5f 44 53 53 5f 44 48 5f 50  .MS_DEF_DSS_DH_P
0580: 52 4f 56 0a 09 20 20 3d 20 22 4d 69 63 72 6f 73  ROV..  = "Micros
0590: 6f 66 74 20 42 61 73 65 20 44 53 53 20 61 6e 64  oft Base DSS and
05a0: 20 44 69 66 66 69 65 2d 48 65 6c 6c 6d 61 6e 20   Diffie-Hellman 
05b0: 43 72 79 70 74 6f 67 72 61 70 68 69 63 20 50 72  Cryptographic Pr
05c0: 6f 76 69 64 65 72 22 2c 0a 09 4d 53 5f 45 4e 48  ovider",..MS_ENH
05d0: 5f 44 53 53 5f 44 48 5f 50 52 4f 56 0a 09 20 20  _DSS_DH_PROV..  
05e0: 3d 20 22 4d 69 63 72 6f 73 6f 66 74 20 45 6e 68  = "Microsoft Enh
05f0: 61 6e 63 65 64 20 44 53 53 20 61 6e 64 20 44 69  anced DSS and Di
0600: 66 66 69 65 2d 48 65 6c 6c 6d 61 6e 20 43 72 79  ffie-Hellman Cry
0610: 70 74 6f 67 72 61 70 68 69 63 20 50 72 6f 76 69  ptographic Provi
0620: 64 65 72 22 2c 0a 09 4d 53 5f 44 45 46 5f 44 48  der",..MS_DEF_DH
0630: 5f 53 43 48 41 4e 4e 45 4c 5f 50 52 4f 56 20 3d  _SCHANNEL_PROV =
0640: 20 22 4d 69 63 72 6f 73 6f 66 74 20 44 48 20 53   "Microsoft DH S
0650: 43 68 61 6e 6e 65 6c 20 43 72 79 70 74 6f 67 72  Channel Cryptogr
0660: 61 70 68 69 63 20 50 72 6f 76 69 64 65 72 22 2c  aphic Provider",
0670: 0a 09 4d 53 5f 53 43 41 52 44 5f 50 52 4f 56 20  ..MS_SCARD_PROV 
0680: 3d 20 22 4d 69 63 72 6f 73 6f 66 74 20 42 61 73  = "Microsoft Bas
0690: 65 20 53 6d 61 72 74 20 43 61 72 64 20 43 72 79  e Smart Card Cry
06a0: 70 74 6f 20 50 72 6f 76 69 64 65 72 22 3b 0a 0a  pto Provider";..
06b0: 73 74 61 74 69 63 20 69 66 20 28 57 49 4e 56 45  static if (WINVE
06c0: 52 20 3e 20 30 78 35 30 31 29 20 7b 0a 09 63 6f  R > 0x501) {..co
06d0: 6e 73 74 20 54 43 48 41 52 5b 5d 20 4d 53 5f 45  nst TCHAR[] MS_E
06e0: 4e 48 5f 52 53 41 5f 41 45 53 5f 50 52 4f 56 0a  NH_RSA_AES_PROV.
06f0: 09 20 20 3d 20 22 4d 69 63 72 6f 73 6f 66 74 20  .  = "Microsoft 
0700: 45 6e 68 61 6e 63 65 64 20 52 53 41 20 61 6e 64  Enhanced RSA and
0710: 20 41 45 53 20 43 72 79 70 74 6f 67 72 61 70 68   AES Cryptograph
0720: 69 63 20 50 72 6f 76 69 64 65 72 22 3b 0a 7d 20  ic Provider";.} 
0730: 65 6c 73 65 20 73 74 61 74 69 63 20 69 66 20 28  else static if (
0740: 57 49 4e 56 45 52 20 3d 3d 20 30 78 35 30 31 29  WINVER == 0x501)
0750: 20 7b 0a 09 63 6f 6e 73 74 20 54 43 48 41 52 5b   {..const TCHAR[
0760: 5d 20 4d 53 5f 45 4e 48 5f 52 53 41 5f 41 45 53  ] MS_ENH_RSA_AES
0770: 5f 50 52 4f 56 0a 09 20 20 3d 20 22 4d 69 63 72  _PROV..  = "Micr
0780: 6f 73 6f 66 74 20 45 6e 68 61 6e 63 65 64 20 52  osoft Enhanced R
0790: 53 41 20 61 6e 64 20 41 45 53 20 43 72 79 70 74  SA and AES Crypt
07a0: 6f 67 72 61 70 68 69 63 20 50 72 6f 76 69 64 65  ographic Provide
07b0: 72 20 28 50 72 6f 74 6f 74 79 70 65 29 22 3b 0a  r (Prototype)";.
07c0: 7d 0a 0a 41 4c 47 5f 49 44 20 47 45 54 5f 41 4c  }..ALG_ID GET_AL
07d0: 47 5f 43 4c 41 53 53 28 41 4c 47 5f 49 44 20 78  G_CLASS(ALG_ID x
07e0: 29 20 7b 20 72 65 74 75 72 6e 20 78 20 26 20 30  ) { return x & 0
07f0: 78 45 30 30 30 3b 20 7d 0a 41 4c 47 5f 49 44 20  xE000; }.ALG_ID 
0800: 47 45 54 5f 41 4c 47 5f 54 59 50 45 20 28 41 4c  GET_ALG_TYPE (AL
0810: 47 5f 49 44 20 78 29 20 7b 20 72 65 74 75 72 6e  G_ID x) { return
0820: 20 78 20 26 20 30 78 31 45 30 30 3b 20 7d 0a 41   x & 0x1E00; }.A
0830: 4c 47 5f 49 44 20 47 45 54 5f 41 4c 47 5f 53 49  LG_ID GET_ALG_SI
0840: 44 20 20 28 41 4c 47 5f 49 44 20 78 29 20 7b 20  D  (ALG_ID x) { 
0850: 72 65 74 75 72 6e 20 78 20 26 20 30 78 30 31 46  return x & 0x01F
0860: 46 3b 20 7d 0a 0a 65 6e 75 6d 20 3a 20 41 4c 47  F; }..enum : ALG
0870: 5f 49 44 20 7b 0a 09 41 4c 47 5f 43 4c 41 53 53  _ID {..ALG_CLASS
0880: 5f 41 4e 59 20 20 20 20 20 20 20 20 20 20 20 3d  _ANY           =
0890: 20 30 2c 0a 09 41 4c 47 5f 43 4c 41 53 53 5f 53   0,..ALG_CLASS_S
08a0: 49 47 4e 41 54 55 52 45 20 20 20 20 20 3d 20 30  IGNATURE     = 0
08b0: 78 32 30 30 30 2c 0a 09 41 4c 47 5f 43 4c 41 53  x2000,..ALG_CLAS
08c0: 53 5f 4d 53 47 5f 45 4e 43 52 59 50 54 20 20 20  S_MSG_ENCRYPT   
08d0: 3d 20 30 78 34 30 30 30 2c 0a 09 41 4c 47 5f 43  = 0x4000,..ALG_C
08e0: 4c 41 53 53 5f 44 41 54 41 5f 45 4e 43 52 59 50  LASS_DATA_ENCRYP
08f0: 54 20 20 3d 20 30 78 36 30 30 30 2c 0a 09 41 4c  T  = 0x6000,..AL
0900: 47 5f 43 4c 41 53 53 5f 48 41 53 48 20 20 20 20  G_CLASS_HASH    
0910: 20 20 20 20 20 20 3d 20 30 78 38 30 30 30 2c 0a        = 0x8000,.
0920: 09 41 4c 47 5f 43 4c 41 53 53 5f 4b 45 59 5f 45  .ALG_CLASS_KEY_E
0930: 58 43 48 41 4e 47 45 20 20 3d 20 30 78 41 30 30  XCHANGE  = 0xA00
0940: 30 2c 0a 09 41 4c 47 5f 43 4c 41 53 53 5f 41 4c  0,..ALG_CLASS_AL
0950: 4c 20 20 20 20 20 20 20 20 20 20 20 3d 20 30 78  L           = 0x
0960: 45 30 30 30 0a 7d 0a 0a 65 6e 75 6d 20 3a 20 41  E000.}..enum : A
0970: 4c 47 5f 49 44 20 7b 0a 09 41 4c 47 5f 54 59 50  LG_ID {..ALG_TYP
0980: 45 5f 41 4e 59 20 20 20 20 20 20 20 20 20 20 20  E_ANY           
0990: 3d 20 30 2c 0a 09 41 4c 47 5f 54 59 50 45 5f 44  = 0,..ALG_TYPE_D
09a0: 53 53 20 20 20 20 20 20 20 20 20 20 20 3d 20 30  SS           = 0
09b0: 78 30 32 30 30 2c 0a 09 41 4c 47 5f 54 59 50 45  x0200,..ALG_TYPE
09c0: 5f 52 53 41 20 20 20 20 20 20 20 20 20 20 20 3d  _RSA           =
09d0: 20 30 78 30 34 30 30 2c 0a 09 41 4c 47 5f 54 59   0x0400,..ALG_TY
09e0: 50 45 5f 42 4c 4f 43 4b 20 20 20 20 20 20 20 20  PE_BLOCK        
09f0: 20 3d 20 30 78 30 36 30 30 2c 0a 09 41 4c 47 5f   = 0x0600,..ALG_
0a00: 54 59 50 45 5f 53 54 52 45 41 4d 20 20 20 20 20  TYPE_STREAM     
0a10: 20 20 20 3d 20 30 78 30 38 30 30 2c 0a 09 41 4c     = 0x0800,..AL
0a20: 47 5f 54 59 50 45 5f 44 48 20 20 20 20 20 20 20  G_TYPE_DH       
0a30: 20 20 20 20 20 3d 20 30 78 30 41 30 30 2c 0a 09       = 0x0A00,..
0a40: 41 4c 47 5f 54 59 50 45 5f 53 45 43 55 52 45 43  ALG_TYPE_SECUREC
0a50: 48 41 4e 4e 45 4c 20 3d 20 30 78 30 43 30 30 0a  HANNEL = 0x0C00.
0a60: 7d 0a 0a 65 6e 75 6d 20 3a 20 41 4c 47 5f 49 44  }..enum : ALG_ID
0a70: 20 7b 0a 09 41 4c 47 5f 53 49 44 5f 41 4e 59 20   {..ALG_SID_ANY 
0a80: 20 20 20 20 20 20 20 20 20 3d 20 20 30 2c 0a 09           =  0,..
0a90: 41 4c 47 5f 53 49 44 5f 52 53 41 5f 41 4e 59 20  ALG_SID_RSA_ANY 
0aa0: 20 20 20 20 20 3d 20 20 30 2c 0a 09 41 4c 47 5f       =  0,..ALG_
0ab0: 53 49 44 5f 52 53 41 5f 50 4b 43 53 2c 0a 09 41  SID_RSA_PKCS,..A
0ac0: 4c 47 5f 53 49 44 5f 52 53 41 5f 4d 53 41 54 57  LG_SID_RSA_MSATW
0ad0: 4f 52 4b 2c 0a 09 41 4c 47 5f 53 49 44 5f 52 53  ORK,..ALG_SID_RS
0ae0: 41 5f 45 4e 54 52 55 53 54 2c 0a 09 41 4c 47 5f  A_ENTRUST,..ALG_
0af0: 53 49 44 5f 52 53 41 5f 50 47 50 2c 20 20 2f 2f  SID_RSA_PGP,  //
0b00: 20 3d 20 20 34 0a 09 41 4c 47 5f 53 49 44 5f 44   =  4..ALG_SID_D
0b10: 53 53 5f 41 4e 59 20 20 20 20 20 20 3d 20 20 30  SS_ANY      =  0
0b20: 2c 0a 09 41 4c 47 5f 53 49 44 5f 44 53 53 5f 50  ,..ALG_SID_DSS_P
0b30: 4b 43 53 2c 0a 09 41 4c 47 5f 53 49 44 5f 44 53  KCS,..ALG_SID_DS
0b40: 53 5f 44 4d 53 2c 20 20 2f 2f 20 3d 20 20 32 0a  S_DMS,  // =  2.
0b50: 09 41 4c 47 5f 53 49 44 5f 44 45 53 20 20 20 20  .ALG_SID_DES    
0b60: 20 20 20 20 20 20 3d 20 20 31 2c 0a 09 41 4c 47        =  1,..ALG
0b70: 5f 53 49 44 5f 33 44 45 53 20 20 20 20 20 20 20  _SID_3DES       
0b80: 20 20 3d 20 20 33 2c 0a 09 41 4c 47 5f 53 49 44    =  3,..ALG_SID
0b90: 5f 44 45 53 58 2c 0a 09 41 4c 47 5f 53 49 44 5f  _DESX,..ALG_SID_
0ba0: 49 44 45 41 2c 0a 09 41 4c 47 5f 53 49 44 5f 43  IDEA,..ALG_SID_C
0bb0: 41 53 54 2c 0a 09 41 4c 47 5f 53 49 44 5f 53 41  AST,..ALG_SID_SA
0bc0: 46 45 52 53 4b 36 34 2c 0a 09 41 4c 47 5f 53 49  FERSK64,..ALG_SI
0bd0: 44 5f 53 41 46 45 52 53 4b 31 32 38 2c 0a 09 41  D_SAFERSK128,..A
0be0: 4c 47 5f 53 49 44 5f 33 44 45 53 5f 31 31 32 2c  LG_SID_3DES_112,
0bf0: 0a 09 41 4c 47 5f 53 49 44 5f 53 4b 49 50 4a 41  ..ALG_SID_SKIPJA
0c00: 43 4b 2c 0a 09 41 4c 47 5f 53 49 44 5f 54 45 4b  CK,..ALG_SID_TEK
0c10: 2c 0a 09 41 4c 47 5f 53 49 44 5f 43 59 4c 49 4e  ,..ALG_SID_CYLIN
0c20: 4b 5f 4d 45 4b 2c 0a 09 41 4c 47 5f 53 49 44 5f  K_MEK,..ALG_SID_
0c30: 52 43 35 2c 20 20 20 20 20 20 2f 2f 20 3d 20 31  RC5,      // = 1
0c40: 33 0a 09 41 4c 47 5f 53 49 44 5f 52 43 32 20 20  3..ALG_SID_RC2  
0c50: 20 20 20 20 20 20 20 20 3d 20 20 32 2c 0a 09 41          =  2,..A
0c60: 4c 47 5f 53 49 44 5f 52 43 34 20 20 20 20 20 20  LG_SID_RC4      
0c70: 20 20 20 20 3d 20 20 31 2c 0a 09 41 4c 47 5f 53      =  1,..ALG_S
0c80: 49 44 5f 53 45 41 4c 20 20 20 20 20 20 20 20 20  ID_SEAL         
0c90: 3d 20 20 32 2c 0a 09 41 4c 47 5f 53 49 44 5f 4d  =  2,..ALG_SID_M
0ca0: 44 32 20 20 20 20 20 20 20 20 20 20 3d 20 20 31  D2          =  1
0cb0: 2c 0a 09 41 4c 47 5f 53 49 44 5f 4d 44 34 2c 0a  ,..ALG_SID_MD4,.
0cc0: 09 41 4c 47 5f 53 49 44 5f 4d 44 35 2c 0a 09 41  .ALG_SID_MD5,..A
0cd0: 4c 47 5f 53 49 44 5f 53 48 41 2c 0a 09 41 4c 47  LG_SID_SHA,..ALG
0ce0: 5f 53 49 44 5f 4d 41 43 2c 0a 09 41 4c 47 5f 53  _SID_MAC,..ALG_S
0cf0: 49 44 5f 52 49 50 45 4d 44 2c 0a 09 41 4c 47 5f  ID_RIPEMD,..ALG_
0d00: 53 49 44 5f 52 49 50 45 4d 44 31 36 30 2c 0a 09  SID_RIPEMD160,..
0d10: 41 4c 47 5f 53 49 44 5f 53 53 4c 33 53 48 41 4d  ALG_SID_SSL3SHAM
0d20: 44 35 2c 0a 09 41 4c 47 5f 53 49 44 5f 48 4d 41  D5,..ALG_SID_HMA
0d30: 43 2c 0a 09 41 4c 47 5f 53 49 44 5f 54 4c 53 31  C,..ALG_SID_TLS1
0d40: 50 52 46 2c 20 20 2f 2f 20 3d 20 31 30 0a 09 41  PRF,  // = 10..A
0d50: 4c 47 5f 53 49 44 5f 41 45 53 5f 31 32 38 20 20  LG_SID_AES_128  
0d60: 20 20 20 20 3d 20 31 34 2c 0a 09 41 4c 47 5f 53      = 14,..ALG_S
0d70: 49 44 5f 41 45 53 5f 31 39 32 2c 0a 09 41 4c 47  ID_AES_192,..ALG
0d80: 5f 53 49 44 5f 41 45 53 5f 32 35 36 2c 0a 09 41  _SID_AES_256,..A
0d90: 4c 47 5f 53 49 44 5f 41 45 53 2c 20 20 20 20 20  LG_SID_AES,     
0da0: 20 2f 2f 20 3d 20 31 37 0a 09 41 4c 47 5f 53 49   // = 17..ALG_SI
0db0: 44 5f 45 58 41 4d 50 4c 45 20 20 20 20 20 20 3d  D_EXAMPLE      =
0dc0: 20 38 30 0a 7d 0a 0a 65 6e 75 6d 20 3a 20 41 4c   80.}..enum : AL
0dd0: 47 5f 49 44 20 7b 0a 09 43 41 4c 47 5f 4d 44 32  G_ID {..CALG_MD2
0de0: 20 20 20 20 20 20 20 20 3d 20 41 4c 47 5f 43 4c          = ALG_CL
0df0: 41 53 53 5f 48 41 53 48 20 7c 20 41 4c 47 5f 54  ASS_HASH | ALG_T
0e00: 59 50 45 5f 41 4e 59 20 7c 20 41 4c 47 5f 53 49  YPE_ANY | ALG_SI
0e10: 44 5f 4d 44 32 2c 0a 09 43 41 4c 47 5f 4d 44 34  D_MD2,..CALG_MD4
0e20: 20 20 20 20 20 20 20 20 3d 20 41 4c 47 5f 43 4c          = ALG_CL
0e30: 41 53 53 5f 48 41 53 48 20 7c 20 41 4c 47 5f 54  ASS_HASH | ALG_T
0e40: 59 50 45 5f 41 4e 59 20 7c 20 41 4c 47 5f 53 49  YPE_ANY | ALG_SI
0e50: 44 5f 4d 44 34 2c 0a 09 43 41 4c 47 5f 4d 44 35  D_MD4,..CALG_MD5
0e60: 20 20 20 20 20 20 20 20 3d 20 41 4c 47 5f 43 4c          = ALG_CL
0e70: 41 53 53 5f 48 41 53 48 20 7c 20 41 4c 47 5f 54  ASS_HASH | ALG_T
0e80: 59 50 45 5f 41 4e 59 20 7c 20 41 4c 47 5f 53 49  YPE_ANY | ALG_SI
0e90: 44 5f 4d 44 35 2c 0a 09 43 41 4c 47 5f 53 48 41  D_MD5,..CALG_SHA
0ea0: 20 20 20 20 20 20 20 20 3d 20 41 4c 47 5f 43 4c          = ALG_CL
0eb0: 41 53 53 5f 48 41 53 48 20 7c 20 41 4c 47 5f 54  ASS_HASH | ALG_T
0ec0: 59 50 45 5f 41 4e 59 20 7c 20 41 4c 47 5f 53 49  YPE_ANY | ALG_SI
0ed0: 44 5f 53 48 41 2c 0a 09 43 41 4c 47 5f 53 48 41  D_SHA,..CALG_SHA
0ee0: 31 20 20 20 20 20 20 20 3d 20 43 41 4c 47 5f 53  1       = CALG_S
0ef0: 48 41 2c 0a 09 43 41 4c 47 5f 4d 41 43 20 20 20  HA,..CALG_MAC   
0f00: 20 20 20 20 20 3d 20 41 4c 47 5f 43 4c 41 53 53       = ALG_CLASS
0f10: 5f 48 41 53 48 20 7c 20 41 4c 47 5f 54 59 50 45  _HASH | ALG_TYPE
0f20: 5f 41 4e 59 20 7c 20 41 4c 47 5f 53 49 44 5f 4d  _ANY | ALG_SID_M
0f30: 41 43 2c 0a 09 43 41 4c 47 5f 33 44 45 53 20 20  AC,..CALG_3DES  
0f40: 20 20 20 20 20 3d 20 41 4c 47 5f 43 4c 41 53 53       = ALG_CLASS
0f50: 5f 44 41 54 41 5f 45 4e 43 52 59 50 54 20 7c 20  _DATA_ENCRYPT | 
0f60: 41 4c 47 5f 54 59 50 45 5f 42 4c 4f 43 4b 20 7c  ALG_TYPE_BLOCK |
0f70: 20 33 2c 0a 09 43 41 4c 47 5f 43 59 4c 49 4e 4b   3,..CALG_CYLINK
0f80: 5f 4d 45 4b 20 3d 20 41 4c 47 5f 43 4c 41 53 53  _MEK = ALG_CLASS
0f90: 5f 44 41 54 41 5f 45 4e 43 52 59 50 54 20 7c 20  _DATA_ENCRYPT | 
0fa0: 41 4c 47 5f 54 59 50 45 5f 42 4c 4f 43 4b 20 7c  ALG_TYPE_BLOCK |
0fb0: 20 31 32 2c 0a 09 43 41 4c 47 5f 53 4b 49 50 4a   12,..CALG_SKIPJ
0fc0: 41 43 4b 20 20 20 3d 20 41 4c 47 5f 43 4c 41 53  ACK   = ALG_CLAS
0fd0: 53 5f 44 41 54 41 5f 45 4e 43 52 59 50 54 20 7c  S_DATA_ENCRYPT |
0fe0: 20 41 4c 47 5f 54 59 50 45 5f 42 4c 4f 43 4b 20   ALG_TYPE_BLOCK 
0ff0: 7c 20 31 30 2c 0a 09 43 41 4c 47 5f 4b 45 41 5f  | 10,..CALG_KEA_
1000: 4b 45 59 58 20 20 20 3d 20 41 4c 47 5f 43 4c 41  KEYX   = ALG_CLA
1010: 53 53 5f 4b 45 59 5f 45 58 43 48 41 4e 47 45 20  SS_KEY_EXCHANGE 
1020: 7c 20 41 4c 47 5f 54 59 50 45 5f 53 54 52 45 41  | ALG_TYPE_STREA
1030: 4d 20 7c 20 41 4c 47 5f 54 59 50 45 5f 44 53 53  M | ALG_TYPE_DSS
1040: 20 7c 20 34 2c 0a 09 43 41 4c 47 5f 52 53 41 5f   | 4,..CALG_RSA_
1050: 53 49 47 4e 20 20 20 3d 20 41 4c 47 5f 43 4c 41  SIGN   = ALG_CLA
1060: 53 53 5f 53 49 47 4e 41 54 55 52 45 20 7c 20 41  SS_SIGNATURE | A
1070: 4c 47 5f 54 59 50 45 5f 52 53 41 20 7c 20 41 4c  LG_TYPE_RSA | AL
1080: 47 5f 53 49 44 5f 52 53 41 5f 41 4e 59 2c 0a 09  G_SID_RSA_ANY,..
1090: 43 41 4c 47 5f 44 53 53 5f 53 49 47 4e 20 20 20  CALG_DSS_SIGN   
10a0: 3d 20 41 4c 47 5f 43 4c 41 53 53 5f 53 49 47 4e  = ALG_CLASS_SIGN
10b0: 41 54 55 52 45 20 7c 20 41 4c 47 5f 54 59 50 45  ATURE | ALG_TYPE
10c0: 5f 44 53 53 20 7c 20 41 4c 47 5f 53 49 44 5f 44  _DSS | ALG_SID_D
10d0: 53 53 5f 41 4e 59 2c 0a 09 43 41 4c 47 5f 52 53  SS_ANY,..CALG_RS
10e0: 41 5f 4b 45 59 58 20 20 20 3d 20 41 4c 47 5f 43  A_KEYX   = ALG_C
10f0: 4c 41 53 53 5f 4b 45 59 5f 45 58 43 48 41 4e 47  LASS_KEY_EXCHANG
1100: 45 20 7c 20 41 4c 47 5f 54 59 50 45 5f 52 53 41  E | ALG_TYPE_RSA
1110: 20 7c 20 41 4c 47 5f 53 49 44 5f 52 53 41 5f 41   | ALG_SID_RSA_A
1120: 4e 59 2c 0a 09 43 41 4c 47 5f 44 45 53 20 20 20  NY,..CALG_DES   
1130: 20 20 20 20 20 3d 20 41 4c 47 5f 43 4c 41 53 53       = ALG_CLASS
1140: 5f 44 41 54 41 5f 45 4e 43 52 59 50 54 20 7c 20  _DATA_ENCRYPT | 
1150: 41 4c 47 5f 54 59 50 45 5f 42 4c 4f 43 4b 20 7c  ALG_TYPE_BLOCK |
1160: 20 41 4c 47 5f 53 49 44 5f 44 45 53 2c 0a 09 43   ALG_SID_DES,..C
1170: 41 4c 47 5f 52 43 32 20 20 20 20 20 20 20 20 3d  ALG_RC2        =
1180: 20 41 4c 47 5f 43 4c 41 53 53 5f 44 41 54 41 5f   ALG_CLASS_DATA_
1190: 45 4e 43 52 59 50 54 20 7c 20 41 4c 47 5f 54 59  ENCRYPT | ALG_TY
11a0: 50 45 5f 42 4c 4f 43 4b 20 7c 20 41 4c 47 5f 53  PE_BLOCK | ALG_S
11b0: 49 44 5f 52 43 32 2c 0a 09 43 41 4c 47 5f 52 43  ID_RC2,..CALG_RC
11c0: 34 20 20 20 20 20 20 20 20 3d 20 41 4c 47 5f 43  4        = ALG_C
11d0: 4c 41 53 53 5f 44 41 54 41 5f 45 4e 43 52 59 50  LASS_DATA_ENCRYP
11e0: 54 20 7c 20 41 4c 47 5f 54 59 50 45 5f 53 54 52  T | ALG_TYPE_STR
11f0: 45 41 4d 20 7c 20 41 4c 47 5f 53 49 44 5f 52 43  EAM | ALG_SID_RC
1200: 34 2c 0a 09 43 41 4c 47 5f 53 45 41 4c 20 20 20  4,..CALG_SEAL   
1210: 20 20 20 20 3d 20 41 4c 47 5f 43 4c 41 53 53 5f      = ALG_CLASS_
1220: 44 41 54 41 5f 45 4e 43 52 59 50 54 20 7c 20 41  DATA_ENCRYPT | A
1230: 4c 47 5f 54 59 50 45 5f 53 54 52 45 41 4d 20 7c  LG_TYPE_STREAM |
1240: 20 41 4c 47 5f 53 49 44 5f 53 45 41 4c 2c 0a 09   ALG_SID_SEAL,..
1250: 43 41 4c 47 5f 44 48 5f 45 50 48 45 4d 20 20 20  CALG_DH_EPHEM   
1260: 3d 20 41 4c 47 5f 43 4c 41 53 53 5f 4b 45 59 5f  = ALG_CLASS_KEY_
1270: 45 58 43 48 41 4e 47 45 20 7c 20 41 4c 47 5f 54  EXCHANGE | ALG_T
1280: 59 50 45 5f 53 54 52 45 41 4d 20 7c 20 41 4c 47  YPE_STREAM | ALG
1290: 5f 54 59 50 45 5f 44 53 53 0a 09 20 20 20 20 20  _TYPE_DSS..     
12a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 20 41               | A
12b0: 4c 47 5f 53 49 44 5f 44 53 53 5f 44 4d 53 2c 0a  LG_SID_DSS_DMS,.
12c0: 09 43 41 4c 47 5f 44 45 53 58 20 20 20 20 20 20  .CALG_DESX      
12d0: 20 3d 20 41 4c 47 5f 43 4c 41 53 53 5f 44 41 54   = ALG_CLASS_DAT
12e0: 41 5f 45 4e 43 52 59 50 54 20 7c 20 41 4c 47 5f  A_ENCRYPT | ALG_
12f0: 54 59 50 45 5f 42 4c 4f 43 4b 20 7c 20 41 4c 47  TYPE_BLOCK | ALG
1300: 5f 53 49 44 5f 44 45 53 58 2c 0a 2f 2f 20 69 73  _SID_DESX,.// is
1310: 20 75 6e 64 65 66 69 6e 65 64 20 41 4c 47 5f 43   undefined ALG_C
1320: 4c 41 53 53 5f 44 48 41 53 48 20 69 6e 20 4d 69  LASS_DHASH in Mi
1330: 6e 47 57 20 2d 20 70 72 65 73 75 6d 69 6e 67 20  nGW - presuming 
1340: 74 79 70 6f 0a 09 43 41 4c 47 5f 54 4c 53 31 50  typo..CALG_TLS1P
1350: 52 46 20 20 20 20 3d 20 41 4c 47 5f 43 4c 41 53  RF    = ALG_CLAS
1360: 53 5f 48 41 53 48 20 7c 20 41 4c 47 5f 54 59 50  S_HASH | ALG_TYP
1370: 45 5f 41 4e 59 20 7c 20 41 4c 47 5f 53 49 44 5f  E_ANY | ALG_SID_
1380: 54 4c 53 31 50 52 46 2c 0a 09 43 41 4c 47 5f 41  TLS1PRF,..CALG_A
1390: 45 53 5f 31 32 38 20 20 20 20 3d 20 41 4c 47 5f  ES_128    = ALG_
13a0: 43 4c 41 53 53 5f 44 41 54 41 5f 45 4e 43 52 59  CLASS_DATA_ENCRY
13b0: 50 54 20 7c 20 41 4c 47 5f 54 59 50 45 5f 42 4c  PT | ALG_TYPE_BL
13c0: 4f 43 4b 20 7c 20 41 4c 47 5f 53 49 44 5f 41 45  OCK | ALG_SID_AE
13d0: 53 5f 31 32 38 2c 0a 09 43 41 4c 47 5f 41 45 53  S_128,..CALG_AES
13e0: 5f 31 39 32 20 20 20 20 3d 20 41 4c 47 5f 43 4c  _192    = ALG_CL
13f0: 41 53 53 5f 44 41 54 41 5f 45 4e 43 52 59 50 54  ASS_DATA_ENCRYPT
1400: 20 7c 20 41 4c 47 5f 54 59 50 45 5f 42 4c 4f 43   | ALG_TYPE_BLOC
1410: 4b 20 7c 20 41 4c 47 5f 53 49 44 5f 41 45 53 5f  K | ALG_SID_AES_
1420: 31 39 32 2c 0a 09 43 41 4c 47 5f 41 45 53 5f 32  192,..CALG_AES_2
1430: 35 36 20 20 20 20 3d 20 41 4c 47 5f 43 4c 41 53  56    = ALG_CLAS
1440: 53 5f 44 41 54 41 5f 45 4e 43 52 59 50 54 20 7c  S_DATA_ENCRYPT |
1450: 20 41 4c 47 5f 54 59 50 45 5f 42 4c 4f 43 4b 20   ALG_TYPE_BLOCK 
1460: 7c 20 41 4c 47 5f 53 49 44 5f 41 45 53 5f 32 35  | ALG_SID_AES_25
1470: 36 2c 0a 09 43 41 4c 47 5f 41 45 53 20 20 20 20  6,..CALG_AES    
1480: 20 20 20 20 3d 20 41 4c 47 5f 43 4c 41 53 53 5f      = ALG_CLASS_
1490: 44 41 54 41 5f 45 4e 43 52 59 50 54 20 7c 20 41  DATA_ENCRYPT | A
14a0: 4c 47 5f 54 59 50 45 5f 42 4c 4f 43 4b 20 7c 20  LG_TYPE_BLOCK | 
14b0: 41 4c 47 5f 53 49 44 5f 41 45 53 2c 0a 7d 0a 0a  ALG_SID_AES,.}..
14c0: 2f 2b 0a 23 64 65 66 69 6e 65 20 43 52 59 50 54  /+.#define CRYPT
14d0: 5f 56 45 52 49 46 59 43 4f 4e 54 45 58 54 20 30  _VERIFYCONTEXT 0
14e0: 78 46 30 30 30 30 30 30 30 0a 23 64 65 66 69 6e  xF0000000.#defin
14f0: 65 20 43 52 59 50 54 5f 4e 45 57 4b 45 59 53 45  e CRYPT_NEWKEYSE
1500: 54 20 38 0a 23 64 65 66 69 6e 65 20 43 52 59 50  T 8.#define CRYP
1510: 54 5f 44 45 4c 45 54 45 4b 45 59 53 45 54 20 31  T_DELETEKEYSET 1
1520: 36 0a 23 64 65 66 69 6e 65 20 43 52 59 50 54 5f  6.#define CRYPT_
1530: 4d 41 43 48 49 4e 45 5f 4b 45 59 53 45 54 20 33  MACHINE_KEYSET 3
1540: 32 0a 23 64 65 66 69 6e 65 20 43 52 59 50 54 5f  2.#define CRYPT_
1550: 53 49 4c 45 4e 54 20 36 34 0a 23 64 65 66 69 6e  SILENT 64.#defin
1560: 65 20 43 52 59 50 54 5f 45 58 50 4f 52 54 41 42  e CRYPT_EXPORTAB
1570: 4c 45 20 31 0a 23 64 65 66 69 6e 65 20 43 52 59  LE 1.#define CRY
1580: 50 54 5f 55 53 45 52 5f 50 52 4f 54 45 43 54 45  PT_USER_PROTECTE
1590: 44 20 32 0a 23 64 65 66 69 6e 65 20 43 52 59 50  D 2.#define CRYP
15a0: 54 5f 43 52 45 41 54 45 5f 53 41 4c 54 20 34 0a  T_CREATE_SALT 4.
15b0: 23 64 65 66 69 6e 65 20 43 52 59 50 54 5f 55 50  #define CRYPT_UP
15c0: 44 41 54 45 5f 4b 45 59 20 38 0a 23 64 65 66 69  DATE_KEY 8.#defi
15d0: 6e 65 20 53 49 4d 50 4c 45 42 4c 4f 42 20 31 0a  ne SIMPLEBLOB 1.
15e0: 23 64 65 66 69 6e 65 20 50 55 42 4c 49 43 4b 45  #define PUBLICKE
15f0: 59 42 4c 4f 42 20 36 0a 23 64 65 66 69 6e 65 20  YBLOB 6.#define 
1600: 50 52 49 56 41 54 45 4b 45 59 42 4c 4f 42 20 37  PRIVATEKEYBLOB 7
1610: 0a 23 64 65 66 69 6e 65 20 50 4c 41 49 4e 54 45  .#define PLAINTE
1620: 58 54 4b 45 59 42 4c 4f 42 20 38 0a 23 64 65 66  XTKEYBLOB 8.#def
1630: 69 6e 65 20 4f 50 41 51 55 45 4b 45 59 42 4c 4f  ine OPAQUEKEYBLO
1640: 42 20 39 0a 23 64 65 66 69 6e 65 20 50 55 42 4c  B 9.#define PUBL
1650: 49 43 4b 45 59 42 4c 4f 42 45 58 20 31 30 0a 23  ICKEYBLOBEX 10.#
1660: 64 65 66 69 6e 65 20 53 59 4d 4d 45 54 52 49 43  define SYMMETRIC
1670: 57 52 41 50 4b 45 59 42 4c 4f 42 20 31 31 0a 23  WRAPKEYBLOB 11.#
1680: 64 65 66 69 6e 65 20 41 54 5f 4b 45 59 45 58 43  define AT_KEYEXC
1690: 48 41 4e 47 45 20 31 0a 23 64 65 66 69 6e 65 20  HANGE 1.#define 
16a0: 41 54 5f 53 49 47 4e 41 54 55 52 45 20 32 0a 23  AT_SIGNATURE 2.#
16b0: 64 65 66 69 6e 65 20 43 52 59 50 54 5f 55 53 45  define CRYPT_USE
16c0: 52 44 41 54 41 20 31 0a 23 64 65 66 69 6e 65 20  RDATA 1.#define 
16d0: 50 4b 43 53 35 5f 50 41 44 44 49 4e 47 20 31 0a  PKCS5_PADDING 1.
16e0: 23 64 65 66 69 6e 65 20 43 52 59 50 54 5f 4d 4f  #define CRYPT_MO
16f0: 44 45 5f 43 42 43 20 31 0a 23 64 65 66 69 6e 65  DE_CBC 1.#define
1700: 20 43 52 59 50 54 5f 4d 4f 44 45 5f 45 43 42 20   CRYPT_MODE_ECB 
1710: 32 0a 23 64 65 66 69 6e 65 20 43 52 59 50 54 5f  2.#define CRYPT_
1720: 4d 4f 44 45 5f 4f 46 42 20 33 0a 23 64 65 66 69  MODE_OFB 3.#defi
1730: 6e 65 20 43 52 59 50 54 5f 4d 4f 44 45 5f 43 46  ne CRYPT_MODE_CF
1740: 42 20 34 0a 23 64 65 66 69 6e 65 20 43 52 59 50  B 4.#define CRYP
1750: 54 5f 4d 4f 44 45 5f 43 54 53 20 35 0a 23 64 65  T_MODE_CTS 5.#de
1760: 66 69 6e 65 20 43 52 59 50 54 5f 4d 4f 44 45 5f  fine CRYPT_MODE_
1770: 43 42 43 49 20 36 0a 23 64 65 66 69 6e 65 20 43  CBCI 6.#define C
1780: 52 59 50 54 5f 4d 4f 44 45 5f 43 46 42 50 20 37  RYPT_MODE_CFBP 7
1790: 0a 23 64 65 66 69 6e 65 20 43 52 59 50 54 5f 4d  .#define CRYPT_M
17a0: 4f 44 45 5f 4f 46 42 50 20 38 0a 23 64 65 66 69  ODE_OFBP 8.#defi
17b0: 6e 65 20 43 52 59 50 54 5f 4d 4f 44 45 5f 43 42  ne CRYPT_MODE_CB
17c0: 43 4f 46 4d 20 39 0a 23 64 65 66 69 6e 65 20 43  COFM 9.#define C
17d0: 52 59 50 54 5f 4d 4f 44 45 5f 43 42 43 4f 46 4d  RYPT_MODE_CBCOFM
17e0: 49 20 31 30 0a 23 64 65 66 69 6e 65 20 43 52 59  I 10.#define CRY
17f0: 50 54 5f 45 4e 43 52 59 50 54 20 31 0a 23 64 65  PT_ENCRYPT 1.#de
1800: 66 69 6e 65 20 43 52 59 50 54 5f 44 45 43 52 59  fine CRYPT_DECRY
1810: 50 54 20 32 0a 23 64 65 66 69 6e 65 20 43 52 59  PT 2.#define CRY
1820: 50 54 5f 45 58 50 4f 52 54 20 34 0a 23 64 65 66  PT_EXPORT 4.#def
1830: 69 6e 65 20 43 52 59 50 54 5f 52 45 41 44 20 38  ine CRYPT_READ 8
1840: 0a 23 64 65 66 69 6e 65 20 43 52 59 50 54 5f 57  .#define CRYPT_W
1850: 52 49 54 45 20 31 36 0a 23 64 65 66 69 6e 65 20  RITE 16.#define 
1860: 43 52 59 50 54 5f 4d 41 43 20 33 32 0a 23 64 65  CRYPT_MAC 32.#de
1870: 66 69 6e 65 20 48 50 5f 41 4c 47 49 44 20 31 0a  fine HP_ALGID 1.
1880: 23 64 65 66 69 6e 65 20 48 50 5f 48 41 53 48 56  #define HP_HASHV
1890: 41 4c 20 32 0a 23 64 65 66 69 6e 65 20 48 50 5f  AL 2.#define HP_
18a0: 48 41 53 48 53 49 5a 45 20 34 0a 23 64 65 66 69  HASHSIZE 4.#defi
18b0: 6e 65 20 48 50 5f 48 4d 41 43 5f 49 4e 46 4f 20  ne HP_HMAC_INFO 
18c0: 35 0a 23 64 65 66 69 6e 65 20 43 52 59 50 54 5f  5.#define CRYPT_
18d0: 46 41 49 4c 45 44 20 46 41 4c 53 45 0a 23 64 65  FAILED FALSE.#de
18e0: 66 69 6e 65 20 43 52 59 50 54 5f 53 55 43 43 45  fine CRYPT_SUCCE
18f0: 45 44 20 54 52 55 45 0a 23 64 65 66 69 6e 65 20  ED TRUE.#define 
1900: 52 43 52 59 50 54 5f 53 55 43 43 45 45 44 45 44  RCRYPT_SUCCEEDED
1910: 28 72 29 20 28 28 72 29 3d 3d 43 52 59 50 54 5f  (r) ((r)==CRYPT_
1920: 53 55 43 43 45 45 44 29 0a 23 64 65 66 69 6e 65  SUCCEED).#define
1930: 20 52 43 52 59 50 54 5f 46 41 49 4c 45 44 28 72   RCRYPT_FAILED(r
1940: 29 20 28 28 72 29 3d 3d 43 52 59 50 54 5f 46 41  ) ((r)==CRYPT_FA
1950: 49 4c 45 44 29 0a 23 64 65 66 69 6e 65 20 50 50  ILED).#define PP
1960: 5f 45 4e 55 4d 41 4c 47 53 20 31 0a 23 64 65 66  _ENUMALGS 1.#def
1970: 69 6e 65 20 50 50 5f 45 4e 55 4d 43 4f 4e 54 41  ine PP_ENUMCONTA
1980: 49 4e 45 52 53 20 32 0a 23 64 65 66 69 6e 65 20  INERS 2.#define 
1990: 50 50 5f 49 4d 50 54 59 50 45 20 33 0a 23 64 65  PP_IMPTYPE 3.#de
19a0: 66 69 6e 65 20 50 50 5f 4e 41 4d 45 20 34 0a 23  fine PP_NAME 4.#
19b0: 64 65 66 69 6e 65 20 50 50 5f 56 45 52 53 49 4f  define PP_VERSIO
19c0: 4e 20 35 0a 23 64 65 66 69 6e 65 20 50 50 5f 43  N 5.#define PP_C
19d0: 4f 4e 54 41 49 4e 45 52 20 36 0a 23 64 65 66 69  ONTAINER 6.#defi
19e0: 6e 65 20 50 50 5f 43 48 41 4e 47 45 5f 50 41 53  ne PP_CHANGE_PAS
19f0: 53 57 4f 52 44 09 37 0a 23 64 65 66 69 6e 65 20  SWORD.7.#define 
1a00: 50 50 5f 4b 45 59 53 45 54 5f 53 45 43 5f 44 45  PP_KEYSET_SEC_DE
1a10: 53 43 52 09 38 0a 23 64 65 66 69 6e 65 20 50 50  SCR.8.#define PP
1a20: 5f 43 45 52 54 43 48 41 49 4e 09 39 0a 23 64 65  _CERTCHAIN.9.#de
1a30: 66 69 6e 65 20 50 50 5f 4b 45 59 5f 54 59 50 45  fine PP_KEY_TYPE
1a40: 5f 53 55 42 54 59 50 45 09 31 30 0a 23 64 65 66  _SUBTYPE.10.#def
1a50: 69 6e 65 20 50 50 5f 50 52 4f 56 54 59 50 45 09  ine PP_PROVTYPE.
1a60: 31 36 0a 23 64 65 66 69 6e 65 20 50 50 5f 4b 45  16.#define PP_KE
1a70: 59 53 54 4f 52 41 47 45 09 31 37 0a 23 64 65 66  YSTORAGE.17.#def
1a80: 69 6e 65 20 50 50 5f 41 50 50 4c 49 5f 43 45 52  ine PP_APPLI_CER
1a90: 54 09 31 38 0a 23 64 65 66 69 6e 65 20 50 50 5f  T.18.#define PP_
1aa0: 53 59 4d 5f 4b 45 59 53 49 5a 45 09 31 39 0a 23  SYM_KEYSIZE.19.#
1ab0: 64 65 66 69 6e 65 20 50 50 5f 53 45 53 53 49 4f  define PP_SESSIO
1ac0: 4e 5f 4b 45 59 53 49 5a 45 09 32 30 0a 23 64 65  N_KEYSIZE.20.#de
1ad0: 66 69 6e 65 20 50 50 5f 55 49 5f 50 52 4f 4d 50  fine PP_UI_PROMP
1ae0: 54 09 32 31 0a 23 64 65 66 69 6e 65 20 50 50 5f  T.21.#define PP_
1af0: 45 4e 55 4d 41 4c 47 53 5f 45 58 09 32 32 0a 23  ENUMALGS_EX.22.#
1b00: 64 65 66 69 6e 65 20 50 50 5f 45 4e 55 4d 4d 41  define PP_ENUMMA
1b10: 4e 44 52 4f 4f 54 53 20 32 35 0a 23 64 65 66 69  NDROOTS 25.#defi
1b20: 6e 65 20 50 50 5f 45 4e 55 4d 45 4c 45 43 54 52  ne PP_ENUMELECTR
1b30: 4f 4f 54 53 20 32 36 0a 23 64 65 66 69 6e 65 20  OOTS 26.#define 
1b40: 50 50 5f 4b 45 59 53 45 54 5f 54 59 50 45 20 32  PP_KEYSET_TYPE 2
1b50: 37 0a 23 64 65 66 69 6e 65 20 50 50 5f 41 44 4d  7.#define PP_ADM
1b60: 49 4e 5f 50 49 4e 20 33 31 0a 23 64 65 66 69 6e  IN_PIN 31.#defin
1b70: 65 20 50 50 5f 4b 45 59 45 58 43 48 41 4e 47 45  e PP_KEYEXCHANGE
1b80: 5f 50 49 4e 20 33 32 0a 23 64 65 66 69 6e 65 20  _PIN 32.#define 
1b90: 50 50 5f 53 49 47 4e 41 54 55 52 45 5f 50 49 4e  PP_SIGNATURE_PIN
1ba0: 20 33 33 0a 23 64 65 66 69 6e 65 20 50 50 5f 53   33.#define PP_S
1bb0: 49 47 5f 4b 45 59 53 49 5a 45 5f 49 4e 43 20 33  IG_KEYSIZE_INC 3
1bc0: 34 0a 23 64 65 66 69 6e 65 20 50 50 5f 4b 45 59  4.#define PP_KEY
1bd0: 58 5f 4b 45 59 53 49 5a 45 5f 49 4e 43 20 33 35  X_KEYSIZE_INC 35
1be0: 0a 23 64 65 66 69 6e 65 20 50 50 5f 55 4e 49 51  .#define PP_UNIQ
1bf0: 55 45 5f 43 4f 4e 54 41 49 4e 45 52 20 33 36 0a  UE_CONTAINER 36.
1c00: 23 64 65 66 69 6e 65 20 50 50 5f 53 47 43 5f 49  #define PP_SGC_I
1c10: 4e 46 4f 20 33 37 0a 23 64 65 66 69 6e 65 20 50  NFO 37.#define P
1c20: 50 5f 55 53 45 5f 48 41 52 44 57 41 52 45 5f 52  P_USE_HARDWARE_R
1c30: 4e 47 20 33 38 0a 23 64 65 66 69 6e 65 20 50 50  NG 38.#define PP
1c40: 5f 4b 45 59 53 50 45 43 20 33 39 0a 23 64 65 66  _KEYSPEC 39.#def
1c50: 69 6e 65 20 50 50 5f 45 4e 55 4d 45 58 5f 53 49  ine PP_ENUMEX_SI
1c60: 47 4e 49 4e 47 5f 50 52 4f 54 20 34 30 0a 23 64  GNING_PROT 40.#d
1c70: 65 66 69 6e 65 20 43 52 59 50 54 5f 46 49 52 53  efine CRYPT_FIRS
1c80: 54 20 31 0a 23 64 65 66 69 6e 65 20 43 52 59 50  T 1.#define CRYP
1c90: 54 5f 4e 45 58 54 20 32 0a 23 64 65 66 69 6e 65  T_NEXT 2.#define
1ca0: 20 43 52 59 50 54 5f 49 4d 50 4c 5f 48 41 52 44   CRYPT_IMPL_HARD
1cb0: 57 41 52 45 20 31 0a 23 64 65 66 69 6e 65 20 43  WARE 1.#define C
1cc0: 52 59 50 54 5f 49 4d 50 4c 5f 53 4f 46 54 57 41  RYPT_IMPL_SOFTWA
1cd0: 52 45 20 32 0a 23 64 65 66 69 6e 65 20 43 52 59  RE 2.#define CRY
1ce0: 50 54 5f 49 4d 50 4c 5f 4d 49 58 45 44 20 33 0a  PT_IMPL_MIXED 3.
1cf0: 23 64 65 66 69 6e 65 20 43 52 59 50 54 5f 49 4d  #define CRYPT_IM
1d00: 50 4c 5f 55 4e 4b 4e 4f 57 4e 20 34 0a 23 64 65  PL_UNKNOWN 4.#de
1d10: 66 69 6e 65 20 50 52 4f 56 5f 52 53 41 5f 46 55  fine PROV_RSA_FU
1d20: 4c 4c 20 31 0a 23 64 65 66 69 6e 65 20 50 52 4f  LL 1.#define PRO
1d30: 56 5f 52 53 41 5f 53 49 47 20 32 0a 23 64 65 66  V_RSA_SIG 2.#def
1d40: 69 6e 65 20 50 52 4f 56 5f 44 53 53 20 33 0a 23  ine PROV_DSS 3.#
1d50: 64 65 66 69 6e 65 20 50 52 4f 56 5f 46 4f 52 54  define PROV_FORT
1d60: 45 5a 5a 41 20 34 0a 23 64 65 66 69 6e 65 20 50  EZZA 4.#define P
1d70: 52 4f 56 5f 4d 53 5f 4d 41 49 4c 20 35 0a 23 64  ROV_MS_MAIL 5.#d
1d80: 65 66 69 6e 65 20 50 52 4f 56 5f 53 53 4c 20 36  efine PROV_SSL 6
1d90: 0a 23 64 65 66 69 6e 65 20 50 52 4f 56 5f 53 54  .#define PROV_ST
1da0: 54 5f 4d 45 52 20 37 0a 23 64 65 66 69 6e 65 20  T_MER 7.#define 
1db0: 50 52 4f 56 5f 53 54 54 5f 41 43 51 20 38 0a 23  PROV_STT_ACQ 8.#
1dc0: 64 65 66 69 6e 65 20 50 52 4f 56 5f 53 54 54 5f  define PROV_STT_
1dd0: 42 52 4e 44 20 39 0a 23 64 65 66 69 6e 65 20 50  BRND 9.#define P
1de0: 52 4f 56 5f 53 54 54 5f 52 4f 4f 54 20 31 30 0a  ROV_STT_ROOT 10.
1df0: 23 64 65 66 69 6e 65 20 50 52 4f 56 5f 53 54 54  #define PROV_STT
1e00: 5f 49 53 53 20 31 31 0a 23 64 65 66 69 6e 65 20  _ISS 11.#define 
1e10: 50 52 4f 56 5f 52 53 41 5f 53 43 48 41 4e 4e 45  PROV_RSA_SCHANNE
1e20: 4c 20 31 32 0a 23 64 65 66 69 6e 65 20 50 52 4f  L 12.#define PRO
1e30: 56 5f 44 53 53 5f 44 48 20 31 33 0a 23 64 65 66  V_DSS_DH 13.#def
1e40: 69 6e 65 20 50 52 4f 56 5f 45 43 5f 45 43 44 53  ine PROV_EC_ECDS
1e50: 41 5f 53 49 47 20 31 34 0a 23 64 65 66 69 6e 65  A_SIG 14.#define
1e60: 20 50 52 4f 56 5f 45 43 5f 45 43 4e 52 41 5f 53   PROV_EC_ECNRA_S
1e70: 49 47 20 31 35 0a 23 64 65 66 69 6e 65 20 50 52  IG 15.#define PR
1e80: 4f 56 5f 45 43 5f 45 43 44 53 41 5f 46 55 4c 4c  OV_EC_ECDSA_FULL
1e90: 20 31 36 0a 23 64 65 66 69 6e 65 20 50 52 4f 56   16.#define PROV
1ea0: 5f 45 43 5f 45 43 4e 52 41 5f 46 55 4c 4c 20 31  _EC_ECNRA_FULL 1
1eb0: 37 0a 23 64 65 66 69 6e 65 20 50 52 4f 56 5f 44  7.#define PROV_D
1ec0: 48 5f 53 43 48 41 4e 4e 45 4c 20 31 38 0a 23 64  H_SCHANNEL 18.#d
1ed0: 65 66 69 6e 65 20 50 52 4f 56 5f 53 50 59 52 55  efine PROV_SPYRU
1ee0: 53 5f 4c 59 4e 4b 53 20 32 30 0a 23 64 65 66 69  S_LYNKS 20.#defi
1ef0: 6e 65 20 50 52 4f 56 5f 52 4e 47 20 32 31 0a 23  ne PROV_RNG 21.#
1f00: 64 65 66 69 6e 65 20 50 52 4f 56 5f 49 4e 54 45  define PROV_INTE
1f10: 4c 5f 53 45 43 20 32 32 0a 23 64 65 66 69 6e 65  L_SEC 22.#define
1f20: 20 50 52 4f 56 5f 52 53 41 5f 41 45 53 20 32 34   PROV_RSA_AES 24
1f30: 0a 23 64 65 66 69 6e 65 20 4d 41 58 55 49 44 4c  .#define MAXUIDL
1f40: 45 4e 20 36 34 0a 23 64 65 66 69 6e 65 20 43 55  EN 64.#define CU
1f50: 52 5f 42 4c 4f 42 5f 56 45 52 53 49 4f 4e 20 32  R_BLOB_VERSION 2
1f60: 0a 23 64 65 66 69 6e 65 20 58 35 30 39 5f 41 53  .#define X509_AS
1f70: 4e 5f 45 4e 43 4f 44 49 4e 47 20 31 0a 23 64 65  N_ENCODING 1.#de
1f80: 66 69 6e 65 20 50 4b 43 53 5f 37 5f 41 53 4e 5f  fine PKCS_7_ASN_
1f90: 45 4e 43 4f 44 49 4e 47 20 20 36 35 35 33 36 0a  ENCODING  65536.
1fa0: 23 64 65 66 69 6e 65 20 43 45 52 54 5f 56 31 20  #define CERT_V1 
1fb0: 30 0a 23 64 65 66 69 6e 65 20 43 45 52 54 5f 56  0.#define CERT_V
1fc0: 32 20 31 0a 23 64 65 66 69 6e 65 20 43 45 52 54  2 1.#define CERT
1fd0: 5f 56 33 20 32 0a 23 64 65 66 69 6e 65 20 43 45  _V3 2.#define CE
1fe0: 52 54 5f 45 5f 43 48 41 49 4e 49 4e 47 20 28 2d  RT_E_CHAINING (-
1ff0: 32 31 34 36 37 36 32 34 38 36 29 0a 23 64 65 66  2146762486).#def
2000: 69 6e 65 20 43 45 52 54 5f 45 5f 43 4e 5f 4e 4f  ine CERT_E_CN_NO
2010: 5f 4d 41 54 43 48 20 28 2d 32 31 34 36 37 36 32  _MATCH (-2146762
2020: 34 38 31 29 0a 23 64 65 66 69 6e 65 20 43 45 52  481).#define CER
2030: 54 5f 45 5f 45 58 50 49 52 45 44 20 28 2d 32 31  T_E_EXPIRED (-21
2040: 34 36 37 36 32 34 39 35 29 0a 23 64 65 66 69 6e  46762495).#defin
2050: 65 20 43 45 52 54 5f 45 5f 50 55 52 50 4f 53 45  e CERT_E_PURPOSE
2060: 20 28 2d 32 31 34 36 37 36 32 34 39 30 29 0a 23   (-2146762490).#
2070: 64 65 66 69 6e 65 20 43 45 52 54 5f 45 5f 52 45  define CERT_E_RE
2080: 56 4f 43 41 54 49 4f 4e 5f 46 41 49 4c 55 52 45  VOCATION_FAILURE
2090: 20 28 2d 32 31 34 36 37 36 32 34 38 32 29 0a 23   (-2146762482).#
20a0: 64 65 66 69 6e 65 20 43 45 52 54 5f 45 5f 52 45  define CERT_E_RE
20b0: 56 4f 4b 45 44 20 28 2d 32 31 34 36 37 36 32 34  VOKED (-21467624
20c0: 38 34 29 0a 23 64 65 66 69 6e 65 20 43 45 52 54  84).#define CERT
20d0: 5f 45 5f 52 4f 4c 45 20 28 2d 32 31 34 36 37 36  _E_ROLE (-214676
20e0: 32 34 39 33 29 0a 23 64 65 66 69 6e 65 20 43 45  2493).#define CE
20f0: 52 54 5f 45 5f 55 4e 54 52 55 53 54 45 44 52 4f  RT_E_UNTRUSTEDRO
2100: 4f 54 20 28 2d 32 31 34 36 37 36 32 34 38 37 29  OT (-2146762487)
2110: 0a 23 64 65 66 69 6e 65 20 43 45 52 54 5f 45 5f  .#define CERT_E_
2120: 55 4e 54 52 55 53 54 45 44 54 45 53 54 52 4f 4f  UNTRUSTEDTESTROO
2130: 54 20 28 2d 32 31 34 36 37 36 32 34 38 33 29 0a  T (-2146762483).
2140: 23 64 65 66 69 6e 65 20 43 45 52 54 5f 45 5f 56  #define CERT_E_V
2150: 41 4c 49 44 49 54 59 50 45 52 49 4f 44 4e 45 53  ALIDITYPERIODNES
2160: 54 49 4e 47 20 28 2d 32 31 34 36 37 36 32 34 39  TING (-214676249
2170: 34 29 0a 23 64 65 66 69 6e 65 20 43 45 52 54 5f  4).#define CERT_
2180: 45 5f 57 52 4f 4e 47 5f 55 53 41 47 45 20 28 2d  E_WRONG_USAGE (-
2190: 32 31 34 36 37 36 32 34 38 30 29 0a 23 64 65 66  2146762480).#def
21a0: 69 6e 65 20 43 45 52 54 5f 45 5f 50 41 54 48 4c  ine CERT_E_PATHL
21b0: 45 4e 43 4f 4e 53 54 20 28 2d 32 31 34 36 37 36  ENCONST (-214676
21c0: 32 34 39 32 29 0a 23 64 65 66 69 6e 65 20 43 45  2492).#define CE
21d0: 52 54 5f 45 5f 43 52 49 54 49 43 41 4c 20 28 2d  RT_E_CRITICAL (-
21e0: 32 31 34 36 37 36 32 34 39 31 29 0a 23 64 65 66  2146762491).#def
21f0: 69 6e 65 20 43 45 52 54 5f 45 5f 49 53 53 55 45  ine CERT_E_ISSUE
2200: 52 43 48 41 49 4e 49 4e 47 20 28 2d 32 31 34 36  RCHAINING (-2146
2210: 37 36 32 34 38 39 29 0a 23 64 65 66 69 6e 65 20  762489).#define 
2220: 43 45 52 54 5f 45 5f 4d 41 4c 46 4f 52 4d 45 44  CERT_E_MALFORMED
2230: 20 28 2d 32 31 34 36 37 36 32 34 38 38 29 0a 23   (-2146762488).#
2240: 64 65 66 69 6e 65 20 43 52 59 50 54 5f 45 5f 52  define CRYPT_E_R
2250: 45 56 4f 43 41 54 49 4f 4e 5f 4f 46 46 4c 49 4e  EVOCATION_OFFLIN
2260: 45 20 28 2d 32 31 34 36 38 38 35 36 31 33 29 0a  E (-2146885613).
2270: 23 64 65 66 69 6e 65 20 43 52 59 50 54 5f 45 5f  #define CRYPT_E_
2280: 52 45 56 4f 4b 45 44 20 28 2d 32 31 34 36 38 38  REVOKED (-214688
2290: 35 36 31 36 29 0a 23 64 65 66 69 6e 65 20 54 52  5616).#define TR
22a0: 55 53 54 5f 45 5f 42 41 53 49 43 5f 43 4f 4e 53  UST_E_BASIC_CONS
22b0: 54 52 41 49 4e 54 53 20 28 2d 32 31 34 36 38 36  TRAINTS (-214686
22c0: 39 32 32 33 29 0a 23 64 65 66 69 6e 65 20 54 52  9223).#define TR
22d0: 55 53 54 5f 45 5f 43 45 52 54 5f 53 49 47 4e 41  UST_E_CERT_SIGNA
22e0: 54 55 52 45 20 28 2d 32 31 34 36 38 36 39 32 34  TURE (-214686924
22f0: 34 29 0a 23 64 65 66 69 6e 65 20 54 52 55 53 54  4).#define TRUST
2300: 5f 45 5f 46 41 49 4c 20 28 2d 32 31 34 36 37 36  _E_FAIL (-214676
2310: 32 34 38 35 29 0a 23 64 65 66 69 6e 65 20 43 45  2485).#define CE
2320: 52 54 5f 54 52 55 53 54 5f 4e 4f 5f 45 52 52 4f  RT_TRUST_NO_ERRO
2330: 52 20 30 0a 23 64 65 66 69 6e 65 20 43 45 52 54  R 0.#define CERT
2340: 5f 54 52 55 53 54 5f 49 53 5f 4e 4f 54 5f 54 49  _TRUST_IS_NOT_TI
2350: 4d 45 5f 56 41 4c 49 44 20 31 0a 23 64 65 66 69  ME_VALID 1.#defi
2360: 6e 65 20 43 45 52 54 5f 54 52 55 53 54 5f 49 53  ne CERT_TRUST_IS
2370: 5f 4e 4f 54 5f 54 49 4d 45 5f 4e 45 53 54 45 44  _NOT_TIME_NESTED
2380: 20 32 0a 23 64 65 66 69 6e 65 20 43 45 52 54 5f   2.#define CERT_
2390: 54 52 55 53 54 5f 49 53 5f 52 45 56 4f 4b 45 44  TRUST_IS_REVOKED
23a0: 20 34 0a 23 64 65 66 69 6e 65 20 43 45 52 54 5f   4.#define CERT_
23b0: 54 52 55 53 54 5f 49 53 5f 4e 4f 54 5f 53 49 47  TRUST_IS_NOT_SIG
23c0: 4e 41 54 55 52 45 5f 56 41 4c 49 44 20 38 0a 23  NATURE_VALID 8.#
23d0: 64 65 66 69 6e 65 20 43 45 52 54 5f 54 52 55 53  define CERT_TRUS
23e0: 54 5f 49 53 5f 4e 4f 54 5f 56 41 4c 49 44 5f 46  T_IS_NOT_VALID_F
23f0: 4f 52 5f 55 53 41 47 45 20 31 36 0a 23 64 65 66  OR_USAGE 16.#def
2400: 69 6e 65 20 43 45 52 54 5f 54 52 55 53 54 5f 49  ine CERT_TRUST_I
2410: 53 5f 55 4e 54 52 55 53 54 45 44 5f 52 4f 4f 54  S_UNTRUSTED_ROOT
2420: 20 33 32 0a 23 64 65 66 69 6e 65 20 43 45 52 54   32.#define CERT
2430: 5f 54 52 55 53 54 5f 52 45 56 4f 43 41 54 49 4f  _TRUST_REVOCATIO
2440: 4e 5f 53 54 41 54 55 53 5f 55 4e 4b 4e 4f 57 4e  N_STATUS_UNKNOWN
2450: 20 36 34 0a 23 64 65 66 69 6e 65 20 43 45 52 54   64.#define CERT
2460: 5f 54 52 55 53 54 5f 49 53 5f 43 59 43 4c 49 43  _TRUST_IS_CYCLIC
2470: 20 31 32 38 0a 23 64 65 66 69 6e 65 20 43 45 52   128.#define CER
2480: 54 5f 54 52 55 53 54 5f 49 53 5f 50 41 52 54 49  T_TRUST_IS_PARTI
2490: 41 4c 5f 43 48 41 49 4e 20 36 35 35 33 36 0a 23  AL_CHAIN 65536.#
24a0: 64 65 66 69 6e 65 20 43 45 52 54 5f 54 52 55 53  define CERT_TRUS
24b0: 54 5f 43 54 4c 5f 49 53 5f 4e 4f 54 5f 54 49 4d  T_CTL_IS_NOT_TIM
24c0: 45 5f 56 41 4c 49 44 20 31 33 31 30 37 32 0a 23  E_VALID 131072.#
24d0: 64 65 66 69 6e 65 20 43 45 52 54 5f 54 52 55 53  define CERT_TRUS
24e0: 54 5f 43 54 4c 5f 49 53 5f 4e 4f 54 5f 53 49 47  T_CTL_IS_NOT_SIG
24f0: 4e 41 54 55 52 45 5f 56 41 4c 49 44 20 32 36 32  NATURE_VALID 262
2500: 31 34 34 0a 23 64 65 66 69 6e 65 20 43 45 52 54  144.#define CERT
2510: 5f 54 52 55 53 54 5f 43 54 4c 5f 49 53 5f 4e 4f  _TRUST_CTL_IS_NO
2520: 54 5f 56 41 4c 49 44 5f 46 4f 52 5f 55 53 41 47  T_VALID_FOR_USAG
2530: 45 20 35 32 34 32 38 38 0a 23 64 65 66 69 6e 65  E 524288.#define
2540: 20 43 45 52 54 5f 54 52 55 53 54 5f 48 41 53 5f   CERT_TRUST_HAS_
2550: 45 58 41 43 54 5f 4d 41 54 43 48 5f 49 53 53 55  EXACT_MATCH_ISSU
2560: 45 52 20 31 0a 23 64 65 66 69 6e 65 20 43 45 52  ER 1.#define CER
2570: 54 5f 54 52 55 53 54 5f 48 41 53 5f 4b 45 59 5f  T_TRUST_HAS_KEY_
2580: 4d 41 54 43 48 5f 49 53 53 55 45 52 20 32 0a 23  MATCH_ISSUER 2.#
2590: 64 65 66 69 6e 65 20 43 45 52 54 5f 54 52 55 53  define CERT_TRUS
25a0: 54 5f 48 41 53 5f 4e 41 4d 45 5f 4d 41 54 43 48  T_HAS_NAME_MATCH
25b0: 5f 49 53 53 55 45 52 20 34 0a 23 64 65 66 69 6e  _ISSUER 4.#defin
25c0: 65 20 43 45 52 54 5f 54 52 55 53 54 5f 49 53 5f  e CERT_TRUST_IS_
25d0: 53 45 4c 46 5f 53 49 47 4e 45 44 20 38 0a 23 64  SELF_SIGNED 8.#d
25e0: 65 66 69 6e 65 20 43 45 52 54 5f 54 52 55 53 54  efine CERT_TRUST
25f0: 5f 49 53 5f 43 4f 4d 50 4c 45 58 5f 43 48 41 49  _IS_COMPLEX_CHAI
2600: 4e 20 36 35 35 33 36 0a 23 64 65 66 69 6e 65 20  N 65536.#define 
2610: 43 45 52 54 5f 43 48 41 49 4e 5f 50 4f 4c 49 43  CERT_CHAIN_POLIC
2620: 59 5f 42 41 53 45 20 28 28 4c 50 43 53 54 52 29  Y_BASE ((LPCSTR)
2630: 20 31 29 0a 23 64 65 66 69 6e 65 20 43 45 52 54   1).#define CERT
2640: 5f 43 48 41 49 4e 5f 50 4f 4c 49 43 59 5f 41 55  _CHAIN_POLICY_AU
2650: 54 48 45 4e 54 49 43 4f 44 45 20 20 28 28 4c 50  THENTICODE  ((LP
2660: 43 53 54 52 29 20 32 29 0a 23 64 65 66 69 6e 65  CSTR) 2).#define
2670: 20 43 45 52 54 5f 43 48 41 49 4e 5f 50 4f 4c 49   CERT_CHAIN_POLI
2680: 43 59 5f 41 55 54 48 45 4e 54 49 43 4f 44 45 5f  CY_AUTHENTICODE_
2690: 54 53 20 20 28 28 4c 50 43 53 54 52 29 20 33 29  TS  ((LPCSTR) 3)
26a0: 0a 23 64 65 66 69 6e 65 20 43 45 52 54 5f 43 48  .#define CERT_CH
26b0: 41 49 4e 5f 50 4f 4c 49 43 59 5f 53 53 4c 20 20  AIN_POLICY_SSL  
26c0: 28 28 4c 50 43 53 54 52 29 20 34 29 0a 23 64 65  ((LPCSTR) 4).#de
26d0: 66 69 6e 65 20 43 45 52 54 5f 43 48 41 49 4e 5f  fine CERT_CHAIN_
26e0: 50 4f 4c 49 43 59 5f 42 41 53 49 43 5f 43 4f 4e  POLICY_BASIC_CON
26f0: 53 54 52 41 49 4e 54 53 20 28 28 4c 50 43 53 54  STRAINTS ((LPCST
2700: 52 29 20 35 29 0a 23 64 65 66 69 6e 65 20 43 45  R) 5).#define CE
2710: 52 54 5f 43 48 41 49 4e 5f 50 4f 4c 49 43 59 5f  RT_CHAIN_POLICY_
2720: 4e 54 5f 41 55 54 48 20 28 28 4c 50 43 53 54 52  NT_AUTH ((LPCSTR
2730: 29 20 36 29 0a 23 64 65 66 69 6e 65 20 55 53 41  ) 6).#define USA
2740: 47 45 5f 4d 41 54 43 48 5f 54 59 50 45 5f 41 4e  GE_MATCH_TYPE_AN
2750: 44 20 30 0a 23 64 65 66 69 6e 65 20 55 53 41 47  D 0.#define USAG
2760: 45 5f 4d 41 54 43 48 5f 54 59 50 45 5f 4f 52 20  E_MATCH_TYPE_OR 
2770: 31 0a 23 64 65 66 69 6e 65 20 43 45 52 54 5f 53  1.#define CERT_S
2780: 49 4d 50 4c 45 5f 4e 41 4d 45 5f 53 54 52 20 31  IMPLE_NAME_STR 1
2790: 0a 23 64 65 66 69 6e 65 20 43 45 52 54 5f 4f 49  .#define CERT_OI
27a0: 44 5f 4e 41 4d 45 5f 53 54 52 20 32 0a 23 64 65  D_NAME_STR 2.#de
27b0: 66 69 6e 65 20 43 45 52 54 5f 58 35 30 30 5f 4e  fine CERT_X500_N
27c0: 41 4d 45 5f 53 54 52 20 33 0a 23 64 65 66 69 6e  AME_STR 3.#defin
27d0: 65 20 43 45 52 54 5f 4e 41 4d 45 5f 53 54 52 5f  e CERT_NAME_STR_
27e0: 53 45 4d 49 43 4f 4c 4f 4e 5f 46 4c 41 47 20 31  SEMICOLON_FLAG 1
27f0: 30 37 33 37 34 31 38 32 34 0a 23 64 65 66 69 6e  073741824.#defin
2800: 65 20 43 45 52 54 5f 4e 41 4d 45 5f 53 54 52 5f  e CERT_NAME_STR_
2810: 43 52 4c 46 5f 46 4c 41 47 20 31 33 34 32 31 37  CRLF_FLAG 134217
2820: 37 32 38 0a 23 64 65 66 69 6e 65 20 43 45 52 54  728.#define CERT
2830: 5f 4e 41 4d 45 5f 53 54 52 5f 4e 4f 5f 50 4c 55  _NAME_STR_NO_PLU
2840: 53 5f 46 4c 41 47 20 35 33 36 38 37 30 39 31 32  S_FLAG 536870912
2850: 0a 23 64 65 66 69 6e 65 20 43 45 52 54 5f 4e 41  .#define CERT_NA
2860: 4d 45 5f 53 54 52 5f 4e 4f 5f 51 55 4f 54 49 4e  ME_STR_NO_QUOTIN
2870: 47 5f 46 4c 41 47 20 32 36 38 34 33 35 34 35 36  G_FLAG 268435456
2880: 0a 23 64 65 66 69 6e 65 20 43 45 52 54 5f 4e 41  .#define CERT_NA
2890: 4d 45 5f 53 54 52 5f 52 45 56 45 52 53 45 5f 46  ME_STR_REVERSE_F
28a0: 4c 41 47 20 33 33 35 35 34 34 33 32 0a 23 64 65  LAG 33554432.#de
28b0: 66 69 6e 65 20 43 45 52 54 5f 4e 41 4d 45 5f 53  fine CERT_NAME_S
28c0: 54 52 5f 45 4e 41 42 4c 45 5f 54 36 31 5f 55 4e  TR_ENABLE_T61_UN
28d0: 49 43 4f 44 45 5f 46 4c 41 47 20 31 33 31 30 37  ICODE_FLAG 13107
28e0: 32 0a 23 64 65 66 69 6e 65 20 43 45 52 54 5f 46  2.#define CERT_F
28f0: 49 4e 44 5f 41 4e 59 20 30 0a 23 64 65 66 69 6e  IND_ANY 0.#defin
2900: 65 20 43 45 52 54 5f 46 49 4e 44 5f 43 45 52 54  e CERT_FIND_CERT
2910: 5f 49 44 20 31 30 34 38 35 37 36 0a 23 64 65 66  _ID 1048576.#def
2920: 69 6e 65 20 43 45 52 54 5f 46 49 4e 44 5f 43 54  ine CERT_FIND_CT
2930: 4c 5f 55 53 41 47 45 20 36 35 35 33 36 30 0a 23  L_USAGE 655360.#
2940: 64 65 66 69 6e 65 20 43 45 52 54 5f 46 49 4e 44  define CERT_FIND
2950: 5f 45 4e 48 4b 45 59 5f 55 53 41 47 45 20 36 35  _ENHKEY_USAGE 65
2960: 35 33 36 30 0a 23 64 65 66 69 6e 65 20 43 45 52  5360.#define CER
2970: 54 5f 46 49 4e 44 5f 45 58 49 53 54 49 4e 47 20  T_FIND_EXISTING 
2980: 38 35 31 39 36 38 0a 23 64 65 66 69 6e 65 20 43  851968.#define C
2990: 45 52 54 5f 46 49 4e 44 5f 48 41 53 48 20 36 35  ERT_FIND_HASH 65
29a0: 35 33 36 0a 23 64 65 66 69 6e 65 20 43 45 52 54  536.#define CERT
29b0: 5f 46 49 4e 44 5f 49 53 53 55 45 52 5f 41 54 54  _FIND_ISSUER_ATT
29c0: 52 20 31 39 36 36 31 32 0a 23 64 65 66 69 6e 65  R 196612.#define
29d0: 20 43 45 52 54 5f 46 49 4e 44 5f 49 53 53 55 45   CERT_FIND_ISSUE
29e0: 52 5f 4e 41 4d 45 20 31 33 31 30 37 36 0a 23 64  R_NAME 131076.#d
29f0: 65 66 69 6e 65 20 43 45 52 54 5f 46 49 4e 44 5f  efine CERT_FIND_
2a00: 49 53 53 55 45 52 5f 4f 46 20 37 38 36 34 33 32  ISSUER_OF 786432
2a10: 0a 23 64 65 66 69 6e 65 20 43 45 52 54 5f 46 49  .#define CERT_FI
2a20: 4e 44 5f 4b 45 59 5f 49 44 45 4e 54 49 46 49 45  ND_KEY_IDENTIFIE
2a30: 52 20 39 38 33 30 34 30 0a 23 64 65 66 69 6e 65  R 983040.#define
2a40: 20 43 45 52 54 5f 46 49 4e 44 5f 4b 45 59 5f 53   CERT_FIND_KEY_S
2a50: 50 45 43 20 35 38 39 38 32 34 0a 23 64 65 66 69  PEC 589824.#defi
2a60: 6e 65 20 43 45 52 54 5f 46 49 4e 44 5f 4d 44 35  ne CERT_FIND_MD5
2a70: 5f 48 41 53 48 20 32 36 32 31 34 34 0a 23 64 65  _HASH 262144.#de
2a80: 66 69 6e 65 20 43 45 52 54 5f 46 49 4e 44 5f 50  fine CERT_FIND_P
2a90: 52 4f 50 45 52 54 59 20 33 32 37 36 38 30 0a 23  ROPERTY 327680.#
2aa0: 64 65 66 69 6e 65 20 43 45 52 54 5f 46 49 4e 44  define CERT_FIND
2ab0: 5f 50 55 42 4c 49 43 5f 4b 45 59 20 33 39 33 32  _PUBLIC_KEY 3932
2ac0: 31 36 0a 23 64 65 66 69 6e 65 20 43 45 52 54 5f  16.#define CERT_
2ad0: 46 49 4e 44 5f 53 48 41 31 5f 48 41 53 48 20 36  FIND_SHA1_HASH 6
2ae0: 35 35 33 36 0a 23 64 65 66 69 6e 65 20 43 45 52  5536.#define CER
2af0: 54 5f 46 49 4e 44 5f 53 49 47 4e 41 54 55 52 45  T_FIND_SIGNATURE
2b00: 5f 48 41 53 48 20 39 31 37 35 30 34 0a 23 64 65  _HASH 917504.#de
2b10: 66 69 6e 65 20 43 45 52 54 5f 46 49 4e 44 5f 53  fine CERT_FIND_S
2b20: 55 42 4a 45 43 54 5f 41 54 54 52 20 31 39 36 36  UBJECT_ATTR 1966
2b30: 31 35 0a 23 64 65 66 69 6e 65 20 43 45 52 54 5f  15.#define CERT_
2b40: 46 49 4e 44 5f 53 55 42 4a 45 43 54 5f 43 45 52  FIND_SUBJECT_CER
2b50: 54 20 37 32 30 38 39 36 0a 23 64 65 66 69 6e 65  T 720896.#define
2b60: 20 43 45 52 54 5f 46 49 4e 44 5f 53 55 42 4a 45   CERT_FIND_SUBJE
2b70: 43 54 5f 4e 41 4d 45 20 31 33 31 30 37 39 0a 23  CT_NAME 131079.#
2b80: 64 65 66 69 6e 65 20 43 45 52 54 5f 46 49 4e 44  define CERT_FIND
2b90: 5f 53 55 42 4a 45 43 54 5f 53 54 52 5f 41 20 34  _SUBJECT_STR_A 4
2ba0: 35 38 37 35 39 0a 23 64 65 66 69 6e 65 20 43 45  58759.#define CE
2bb0: 52 54 5f 46 49 4e 44 5f 53 55 42 4a 45 43 54 5f  RT_FIND_SUBJECT_
2bc0: 53 54 52 5f 57 20 35 32 34 32 39 35 0a 23 64 65  STR_W 524295.#de
2bd0: 66 69 6e 65 20 43 45 52 54 5f 46 49 4e 44 5f 49  fine CERT_FIND_I
2be0: 53 53 55 45 52 5f 53 54 52 5f 41 20 34 35 38 37  SSUER_STR_A 4587
2bf0: 35 36 0a 23 64 65 66 69 6e 65 20 43 45 52 54 5f  56.#define CERT_
2c00: 46 49 4e 44 5f 49 53 53 55 45 52 5f 53 54 52 5f  FIND_ISSUER_STR_
2c10: 57 20 35 32 34 32 39 32 0a 23 64 65 66 69 6e 65  W 524292.#define
2c20: 20 43 45 52 54 5f 46 49 4e 44 5f 4f 52 5f 45 4e   CERT_FIND_OR_EN
2c30: 48 4b 45 59 5f 55 53 41 47 45 5f 46 4c 41 47 20  HKEY_USAGE_FLAG 
2c40: 31 36 0a 23 64 65 66 69 6e 65 20 43 45 52 54 5f  16.#define CERT_
2c50: 46 49 4e 44 5f 4f 50 54 49 4f 4e 41 4c 5f 45 4e  FIND_OPTIONAL_EN
2c60: 48 4b 45 59 5f 55 53 41 47 45 5f 46 4c 41 47 20  HKEY_USAGE_FLAG 
2c70: 20 31 0a 23 64 65 66 69 6e 65 20 43 45 52 54 5f   1.#define CERT_
2c80: 46 49 4e 44 5f 4e 4f 5f 45 4e 48 4b 45 59 5f 55  FIND_NO_ENHKEY_U
2c90: 53 41 47 45 5f 46 4c 41 47 20 20 38 0a 23 64 65  SAGE_FLAG  8.#de
2ca0: 66 69 6e 65 20 43 45 52 54 5f 46 49 4e 44 5f 56  fine CERT_FIND_V
2cb0: 41 4c 49 44 5f 45 4e 48 4b 45 59 5f 55 53 41 47  ALID_ENHKEY_USAG
2cc0: 45 5f 46 4c 41 47 20 20 33 32 0a 23 64 65 66 69  E_FLAG  32.#defi
2cd0: 6e 65 20 43 45 52 54 5f 46 49 4e 44 5f 45 58 54  ne CERT_FIND_EXT
2ce0: 5f 4f 4e 4c 59 5f 45 4e 48 4b 45 59 5f 55 53 41  _ONLY_ENHKEY_USA
2cf0: 47 45 5f 46 4c 41 47 20 20 32 0a 23 64 65 66 69  GE_FLAG  2.#defi
2d00: 6e 65 20 43 45 52 54 5f 43 41 53 45 5f 49 4e 53  ne CERT_CASE_INS
2d10: 45 4e 53 49 54 49 56 45 5f 49 53 5f 52 44 4e 5f  ENSITIVE_IS_RDN_
2d20: 41 54 54 52 53 5f 46 4c 41 47 20 20 32 0a 23 64  ATTRS_FLAG  2.#d
2d30: 65 66 69 6e 65 20 43 45 52 54 5f 55 4e 49 43 4f  efine CERT_UNICO
2d40: 44 45 5f 49 53 5f 52 44 4e 5f 41 54 54 52 53 5f  DE_IS_RDN_ATTRS_
2d50: 46 4c 41 47 20 31 0a 23 64 65 66 69 6e 65 20 43  FLAG 1.#define C
2d60: 45 52 54 5f 43 48 41 49 4e 5f 46 49 4e 44 5f 42  ERT_CHAIN_FIND_B
2d70: 59 5f 49 53 53 55 45 52 20 31 0a 23 64 65 66 69  Y_ISSUER 1.#defi
2d80: 6e 65 20 43 45 52 54 5f 43 48 41 49 4e 5f 46 49  ne CERT_CHAIN_FI
2d90: 4e 44 5f 42 59 5f 49 53 53 55 45 52 5f 43 4f 4d  ND_BY_ISSUER_COM
2da0: 50 41 52 45 5f 4b 45 59 5f 46 4c 41 47 20 31 0a  PARE_KEY_FLAG 1.
2db0: 23 64 65 66 69 6e 65 20 43 45 52 54 5f 43 48 41  #define CERT_CHA
2dc0: 49 4e 5f 46 49 4e 44 5f 42 59 5f 49 53 53 55 45  IN_FIND_BY_ISSUE
2dd0: 52 5f 43 4f 4d 50 4c 45 58 5f 43 48 41 49 4e 5f  R_COMPLEX_CHAIN_
2de0: 46 4c 41 47 20 32 0a 23 64 65 66 69 6e 65 20 43  FLAG 2.#define C
2df0: 45 52 54 5f 43 48 41 49 4e 5f 46 49 4e 44 5f 42  ERT_CHAIN_FIND_B
2e00: 59 5f 49 53 53 55 45 52 5f 43 41 43 48 45 5f 4f  Y_ISSUER_CACHE_O
2e10: 4e 4c 59 5f 46 4c 41 47 20 33 32 37 36 38 0a 23  NLY_FLAG 32768.#
2e20: 64 65 66 69 6e 65 20 43 45 52 54 5f 43 48 41 49  define CERT_CHAI
2e30: 4e 5f 46 49 4e 44 5f 42 59 5f 49 53 53 55 45 52  N_FIND_BY_ISSUER
2e40: 5f 43 41 43 48 45 5f 4f 4e 4c 59 5f 55 52 4c 5f  _CACHE_ONLY_URL_
2e50: 46 4c 41 47 20 34 0a 23 64 65 66 69 6e 65 20 43  FLAG 4.#define C
2e60: 45 52 54 5f 43 48 41 49 4e 5f 46 49 4e 44 5f 42  ERT_CHAIN_FIND_B
2e70: 59 5f 49 53 53 55 45 52 5f 4c 4f 43 41 4c 5f 4d  Y_ISSUER_LOCAL_M
2e80: 41 43 48 49 4e 45 5f 46 4c 41 47 20 38 0a 23 64  ACHINE_FLAG 8.#d
2e90: 65 66 69 6e 65 20 43 45 52 54 5f 43 48 41 49 4e  efine CERT_CHAIN
2ea0: 5f 46 49 4e 44 5f 42 59 5f 49 53 53 55 45 52 5f  _FIND_BY_ISSUER_
2eb0: 4e 4f 5f 4b 45 59 5f 46 4c 41 47 20 31 36 33 38  NO_KEY_FLAG 1638
2ec0: 34 0a 23 64 65 66 69 6e 65 20 43 45 52 54 5f 53  4.#define CERT_S
2ed0: 54 4f 52 45 5f 50 52 4f 56 5f 53 59 53 54 45 4d  TORE_PROV_SYSTEM
2ee0: 20 31 30 0a 23 64 65 66 69 6e 65 20 43 45 52 54   10.#define CERT
2ef0: 5f 53 59 53 54 45 4d 5f 53 54 4f 52 45 5f 4c 4f  _SYSTEM_STORE_LO
2f00: 43 41 4c 5f 4d 41 43 48 49 4e 45 20 31 33 31 30  CAL_MACHINE 1310
2f10: 37 32 0a 23 64 65 66 69 6e 65 20 73 7a 4f 49 44  72.#define szOID
2f20: 5f 50 4b 49 58 5f 4b 50 5f 53 45 52 56 45 52 5f  _PKIX_KP_SERVER_
2f30: 41 55 54 48 20 22 34 32 33 35 36 30 30 22 0a 23  AUTH "4235600".#
2f40: 64 65 66 69 6e 65 20 73 7a 4f 49 44 5f 53 45 52  define szOID_SER
2f50: 56 45 52 5f 47 41 54 45 44 5f 43 52 59 50 54 4f  VER_GATED_CRYPTO
2f60: 20 22 34 32 33 35 36 35 38 22 0a 23 64 65 66 69   "4235658".#defi
2f70: 6e 65 20 73 7a 4f 49 44 5f 53 47 43 5f 4e 45 54  ne szOID_SGC_NET
2f80: 53 43 41 50 45 20 22 32 2e 31 36 2e 38 34 30 2e  SCAPE "2.16.840.
2f90: 31 2e 31 31 33 37 33 30 2e 34 2e 31 22 0a 23 64  1.113730.4.1".#d
2fa0: 65 66 69 6e 65 20 73 7a 4f 49 44 5f 50 4b 49 58  efine szOID_PKIX
2fb0: 5f 4b 50 5f 43 4c 49 45 4e 54 5f 41 55 54 48 20  _KP_CLIENT_AUTH 
2fc0: 22 31 2e 33 2e 36 2e 31 2e 35 2e 35 2e 37 2e 33  "1.3.6.1.5.5.7.3
2fd0: 2e 32 22 0a 23 64 65 66 69 6e 65 20 43 52 59 50  .2".#define CRYP
2fe0: 54 5f 4e 4f 48 41 53 48 4f 49 44 20 30 78 30 30  T_NOHASHOID 0x00
2ff0: 30 30 30 30 30 31 0a 23 64 65 66 69 6e 65 20 43  000001.#define C
3000: 52 59 50 54 5f 4e 4f 5f 53 41 4c 54 20 30 78 31  RYPT_NO_SALT 0x1
3010: 30 0a 23 64 65 66 69 6e 65 20 43 52 59 50 54 5f  0.#define CRYPT_
3020: 50 52 45 47 45 4e 20 30 78 34 30 0a 23 64 65 66  PREGEN 0x40.#def
3030: 69 6e 65 20 43 52 59 50 54 5f 52 45 43 49 50 49  ine CRYPT_RECIPI
3040: 45 4e 54 20 30 78 31 30 0a 23 64 65 66 69 6e 65  ENT 0x10.#define
3050: 20 43 52 59 50 54 5f 49 4e 49 54 49 41 54 4f 52   CRYPT_INITIATOR
3060: 20 30 78 34 30 0a 23 64 65 66 69 6e 65 20 43 52   0x40.#define CR
3070: 59 50 54 5f 4f 4e 4c 49 4e 45 20 30 78 38 30 0a  YPT_ONLINE 0x80.
3080: 23 64 65 66 69 6e 65 20 43 52 59 50 54 5f 53 46  #define CRYPT_SF
3090: 20 30 78 31 30 30 0a 23 64 65 66 69 6e 65 20 43   0x100.#define C
30a0: 52 59 50 54 5f 43 52 45 41 54 45 5f 49 56 20 30  RYPT_CREATE_IV 0
30b0: 78 32 30 30 0a 23 64 65 66 69 6e 65 20 43 52 59  x200.#define CRY
30c0: 50 54 5f 4b 45 4b 20 30 78 34 30 30 0a 23 64 65  PT_KEK 0x400.#de
30d0: 66 69 6e 65 20 43 52 59 50 54 5f 44 41 54 41 5f  fine CRYPT_DATA_
30e0: 4b 45 59 20 30 78 38 30 30 0a 23 64 65 66 69 6e  KEY 0x800.#defin
30f0: 65 20 43 52 59 50 54 5f 56 4f 4c 41 54 49 4c 45  e CRYPT_VOLATILE
3100: 20 30 78 31 30 30 30 0a 23 64 65 66 69 6e 65 20   0x1000.#define 
3110: 43 52 59 50 54 5f 53 47 43 4b 45 59 20 30 78 32  CRYPT_SGCKEY 0x2
3120: 30 30 30 0a 23 64 65 66 69 6e 65 20 4b 50 5f 49  000.#define KP_I
3130: 56 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  V               
3140: 30 78 30 30 30 30 30 30 30 31 0a 23 64 65 66 69  0x00000001.#defi
3150: 6e 65 20 4b 50 5f 53 41 4c 54 20 20 20 20 20 20  ne KP_SALT      
3160: 20 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30         0x0000000
3170: 32 0a 23 64 65 66 69 6e 65 20 4b 50 5f 50 41 44  2.#define KP_PAD
3180: 44 49 4e 47 20 20 20 20 20 20 20 20 20 20 30 78  DING          0x
3190: 30 30 30 30 30 30 30 33 0a 23 64 65 66 69 6e 65  00000003.#define
31a0: 20 4b 50 5f 4d 4f 44 45 20 20 20 20 20 20 20 20   KP_MODE        
31b0: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 34 0a       0x00000004.
31c0: 23 64 65 66 69 6e 65 20 4b 50 5f 4d 4f 44 45 5f  #define KP_MODE_
31d0: 42 49 54 53 20 20 20 20 20 20 20 20 30 78 30 30  BITS        0x00
31e0: 30 30 30 30 30 35 0a 23 64 65 66 69 6e 65 20 4b  000005.#define K
31f0: 50 5f 50 45 52 4d 49 53 53 49 4f 4e 53 20 20 20  P_PERMISSIONS   
3200: 20 20 20 30 78 30 30 30 30 30 30 30 36 0a 23 64     0x00000006.#d
3210: 65 66 69 6e 65 20 4b 50 5f 41 4c 47 49 44 20 20  efine KP_ALGID  
3220: 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30 30            0x0000
3230: 30 30 30 37 0a 23 64 65 66 69 6e 65 20 4b 50 5f  0007.#define KP_
3240: 42 4c 4f 43 4b 4c 45 4e 20 20 20 20 20 20 20 20  BLOCKLEN        
3250: 20 30 78 30 30 30 30 30 30 30 38 0a 23 64 65 66   0x00000008.#def
3260: 69 6e 65 20 4b 50 5f 4b 45 59 4c 45 4e 20 20 20  ine KP_KEYLEN   
3270: 20 20 20 20 20 20 20 20 30 78 30 30 30 30 30 30          0x000000
3280: 30 39 0a 23 64 65 66 69 6e 65 20 4b 50 5f 53 41  09.#define KP_SA
3290: 4c 54 5f 45 58 20 20 20 20 20 20 20 20 20 20 30  LT_EX          0
32a0: 78 30 30 30 30 30 30 30 61 0a 23 64 65 66 69 6e  x0000000a.#defin
32b0: 65 20 4b 50 5f 50 20 20 20 20 20 20 20 20 20 20  e KP_P          
32c0: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30 62        0x0000000b
32d0: 0a 23 64 65 66 69 6e 65 20 4b 50 5f 47 20 20 20  .#define KP_G   
32e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78 30               0x0
32f0: 30 30 30 30 30 30 63 0a 23 64 65 66 69 6e 65 20  000000c.#define 
3300: 4b 50 5f 51 20 20 20 20 20 20 20 20 20 20 20 20  KP_Q            
3310: 20 20 20 20 30 78 30 30 30 30 30 30 30 64 0a 23      0x0000000d.#
3320: 64 65 66 69 6e 65 20 4b 50 5f 58 20 20 20 20 20  define KP_X     
3330: 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30             0x000
3340: 30 30 30 30 65 0a 23 64 65 66 69 6e 65 20 4b 50  0000e.#define KP
3350: 5f 59 20 20 20 20 20 20 20 20 20 20 20 20 20 20  _Y              
3360: 20 20 30 78 30 30 30 30 30 30 30 66 0a 23 64 65    0x0000000f.#de
3370: 66 69 6e 65 20 4b 50 5f 52 41 20 20 20 20 20 20  fine KP_RA      
3380: 20 20 20 20 20 20 20 20 20 30 78 30 30 30 30 30           0x00000
3390: 30 31 30 0a 23 64 65 66 69 6e 65 20 4b 50 5f 52  010.#define KP_R
33a0: 42 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  B               
33b0: 30 78 30 30 30 30 30 30 31 31 0a 23 64 65 66 69  0x00000011.#defi
33c0: 6e 65 20 4b 50 5f 49 4e 46 4f 20 20 20 20 20 20  ne KP_INFO      
33d0: 20 20 20 20 20 20 20 30 78 30 30 30 30 30 30 31         0x0000001
33e0: 32 0a 23 64 65 66 69 6e 65 20 4b 50 5f 45 46 46  2.#define KP_EFF
33f0: 45 43 54 49 56 45 5f 4b 45 59 4c 45 4e 20 30 78  ECTIVE_KEYLEN 0x
3400: 30 30 30 30 30 30 31 33 0a 23 64 65 66 69 6e 65  00000013.#define
3410: 20 4b 50 5f 53 43 48 41 4e 4e 45 4c 5f 41 4c 47   KP_SCHANNEL_ALG
3420: 20 20 20 20 20 30 78 30 30 30 30 30 30 31 34 0a       0x00000014.
3430: 23 64 65 66 69 6e 65 20 4b 50 5f 50 55 42 5f 50  #define KP_PUB_P
3440: 41 52 41 4d 53 20 20 20 20 20 20 20 30 78 30 30  ARAMS       0x00
3450: 30 30 30 30 32 37 0a 23 64 65 66 69 6e 65 20 43  000027.#define C
3460: 52 59 50 54 5f 46 4c 41 47 5f 50 43 54 31 20 20  RYPT_FLAG_PCT1  
3470: 20 20 30 78 30 30 30 31 0a 23 64 65 66 69 6e 65    0x0001.#define
3480: 20 43 52 59 50 54 5f 46 4c 41 47 5f 53 53 4c 32   CRYPT_FLAG_SSL2
3490: 20 20 20 20 30 78 30 30 30 32 0a 23 64 65 66 69      0x0002.#defi
34a0: 6e 65 20 43 52 59 50 54 5f 46 4c 41 47 5f 53 53  ne CRYPT_FLAG_SS
34b0: 4c 33 20 20 20 20 30 78 30 30 30 34 0a 23 64 65  L3    0x0004.#de
34c0: 66 69 6e 65 20 43 52 59 50 54 5f 46 4c 41 47 5f  fine CRYPT_FLAG_
34d0: 54 4c 53 31 20 20 20 20 30 78 30 30 30 38 0a 23  TLS1    0x0008.#
34e0: 64 65 66 69 6e 65 20 43 52 59 50 54 5f 46 4c 41  define CRYPT_FLA
34f0: 47 5f 49 50 53 45 43 20 20 20 30 78 30 30 31 30  G_IPSEC   0x0010
3500: 0a 23 64 65 66 69 6e 65 20 43 52 59 50 54 5f 46  .#define CRYPT_F
3510: 4c 41 47 5f 53 49 47 4e 49 4e 47 20 30 78 30 30  LAG_SIGNING 0x00
3520: 32 30 0a 23 64 65 66 69 6e 65 20 53 43 48 41 4e  20.#define SCHAN
3530: 4e 45 4c 5f 4d 41 43 5f 4b 45 59 20 20 20 20 30  NEL_MAC_KEY    0
3540: 78 30 30 30 30 30 30 30 30 0a 23 64 65 66 69 6e  x00000000.#defin
3550: 65 20 53 43 48 41 4e 4e 45 4c 5f 45 4e 43 5f 4b  e SCHANNEL_ENC_K
3560: 45 59 20 20 20 20 30 78 30 30 30 30 30 30 30 31  EY    0x00000001
3570: 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52 4e 41  .#define INTERNA
3580: 54 49 4f 4e 41 4c 5f 55 53 41 47 45 20 30 78 30  TIONAL_USAGE 0x0
3590: 30 30 30 30 30 30 31 0a 2b 2f 0a 0a 61 6c 69 61  0000001.+/..alia
35a0: 73 20 55 49 4e 54 20 41 4c 47 5f 49 44 3b 0a 61  s UINT ALG_ID;.a
35b0: 6c 69 61 73 20 55 4c 4f 4e 47 20 48 43 52 59 50  lias ULONG HCRYP
35c0: 54 50 52 4f 56 2c 20 48 43 52 59 50 54 4b 45 59  TPROV, HCRYPTKEY
35d0: 2c 20 48 43 52 59 50 54 48 41 53 48 3b 0a 61 6c  , HCRYPTHASH;.al
35e0: 69 61 73 20 50 56 4f 49 44 20 48 43 45 52 54 53  ias PVOID HCERTS
35f0: 54 4f 52 45 2c 20 48 43 52 59 50 54 4d 53 47 2c  TORE, HCRYPTMSG,
3600: 20 48 43 45 52 54 43 48 41 49 4e 45 4e 47 49 4e   HCERTCHAINENGIN
3610: 45 3b 0a 0a 73 74 72 75 63 74 20 56 54 61 62 6c  E;..struct VTabl
3620: 65 50 72 6f 76 53 74 72 75 63 20 7b 0a 09 46 41  eProvStruc {..FA
3630: 52 50 52 4f 43 20 46 75 6e 63 56 65 72 69 66 79  RPROC FuncVerify
3640: 49 6d 61 67 65 3b 0a 7d 0a 61 6c 69 61 73 20 56  Image;.}.alias V
3650: 54 61 62 6c 65 50 72 6f 76 53 74 72 75 63 2a 20  TableProvStruc* 
3660: 50 56 54 61 62 6c 65 50 72 6f 76 53 74 72 75 63  PVTableProvStruc
3670: 3b 0a 0a 73 74 72 75 63 74 20 5f 43 52 59 50 54  ;..struct _CRYPT
3680: 4f 41 50 49 5f 42 4c 4f 42 20 7b 0a 09 44 57 4f  OAPI_BLOB {..DWO
3690: 52 44 20 63 62 44 61 74 61 3b 0a 09 42 59 54 45  RD cbData;..BYTE
36a0: 2a 20 70 62 44 61 74 61 3b 0a 7d 0a 61 6c 69 61  * pbData;.}.alia
36b0: 73 20 5f 43 52 59 50 54 4f 41 50 49 5f 42 4c 4f  s _CRYPTOAPI_BLO
36c0: 42 20 43 52 59 50 54 5f 49 4e 54 45 47 45 52 5f  B CRYPT_INTEGER_
36d0: 42 4c 4f 42 2c 20 43 52 59 50 54 5f 55 49 4e 54  BLOB, CRYPT_UINT
36e0: 5f 42 4c 4f 42 2c 0a 20 20 43 52 59 50 54 5f 4f  _BLOB,.  CRYPT_O
36f0: 42 4a 49 44 5f 42 4c 4f 42 2c 20 43 45 52 54 5f  BJID_BLOB, CERT_
3700: 4e 41 4d 45 5f 42 4c 4f 42 2c 20 43 45 52 54 5f  NAME_BLOB, CERT_
3710: 52 44 4e 5f 56 41 4c 55 45 5f 42 4c 4f 42 2c 20  RDN_VALUE_BLOB, 
3720: 43 45 52 54 5f 42 4c 4f 42 2c 0a 20 20 43 52 4c  CERT_BLOB,.  CRL
3730: 5f 42 4c 4f 42 2c 20 44 41 54 41 5f 42 4c 4f 42  _BLOB, DATA_BLOB
3740: 2c 20 43 52 59 50 54 5f 44 41 54 41 5f 42 4c 4f  , CRYPT_DATA_BLO
3750: 42 2c 20 43 52 59 50 54 5f 48 41 53 48 5f 42 4c  B, CRYPT_HASH_BL
3760: 4f 42 2c 0a 20 20 43 52 59 50 54 5f 44 49 47 45  OB,.  CRYPT_DIGE
3770: 53 54 5f 42 4c 4f 42 2c 20 43 52 59 50 54 5f 44  ST_BLOB, CRYPT_D
3780: 45 52 5f 42 4c 4f 42 2c 20 43 52 59 50 54 5f 41  ER_BLOB, CRYPT_A
3790: 54 54 52 5f 42 4c 4f 42 3b 0a 61 6c 69 61 73 20  TTR_BLOB;.alias 
37a0: 5f 43 52 59 50 54 4f 41 50 49 5f 42 4c 4f 42 2a  _CRYPTOAPI_BLOB*
37b0: 20 50 43 52 59 50 54 5f 49 4e 54 45 47 45 52 5f   PCRYPT_INTEGER_
37c0: 42 4c 4f 42 2c 20 50 43 52 59 50 54 5f 55 49 4e  BLOB, PCRYPT_UIN
37d0: 54 5f 42 4c 4f 42 2c 0a 20 20 50 43 52 59 50 54  T_BLOB,.  PCRYPT
37e0: 5f 4f 42 4a 49 44 5f 42 4c 4f 42 2c 20 50 43 45  _OBJID_BLOB, PCE
37f0: 52 54 5f 4e 41 4d 45 5f 42 4c 4f 42 2c 20 50 43  RT_NAME_BLOB, PC
3800: 45 52 54 5f 52 44 4e 5f 56 41 4c 55 45 5f 42 4c  ERT_RDN_VALUE_BL
3810: 4f 42 2c 20 50 43 45 52 54 5f 42 4c 4f 42 2c 0a  OB, PCERT_BLOB,.
3820: 20 20 50 43 52 4c 5f 42 4c 4f 42 2c 20 50 44 41    PCRL_BLOB, PDA
3830: 54 41 5f 42 4c 4f 42 2c 20 50 43 52 59 50 54 5f  TA_BLOB, PCRYPT_
3840: 44 41 54 41 5f 42 4c 4f 42 2c 20 50 43 52 59 50  DATA_BLOB, PCRYP
3850: 54 5f 48 41 53 48 5f 42 4c 4f 42 2c 0a 20 20 50  T_HASH_BLOB,.  P
3860: 43 52 59 50 54 5f 44 49 47 45 53 54 5f 42 4c 4f  CRYPT_DIGEST_BLO
3870: 42 2c 20 50 43 52 59 50 54 5f 44 45 52 5f 42 4c  B, PCRYPT_DER_BL
3880: 4f 42 2c 20 50 43 52 59 50 54 5f 41 54 54 52 5f  OB, PCRYPT_ATTR_
3890: 42 4c 4f 42 3b 0a 0a 2f 2f 20 6e 6f 74 20 64 65  BLOB;..// not de
38a0: 73 63 72 69 62 65 64 20 69 6e 20 53 44 4b 3b 20  scribed in SDK; 
38b0: 68 61 73 20 74 68 65 20 73 61 6d 65 20 6c 61 79  has the same lay
38c0: 6f 75 74 20 61 73 20 48 54 54 50 53 50 6f 6c 69  out as HTTPSPoli
38d0: 63 79 43 61 6c 6c 62 61 63 6b 44 61 74 61 0a 73  cyCallbackData.s
38e0: 74 72 75 63 74 20 53 53 4c 5f 45 58 54 52 41 5f  truct SSL_EXTRA_
38f0: 43 45 52 54 5f 43 48 41 49 4e 5f 50 4f 4c 49 43  CERT_CHAIN_POLIC
3900: 59 5f 50 41 52 41 20 7b 0a 09 44 57 4f 52 44 20  Y_PARA {..DWORD 
3910: 20 63 62 53 74 72 75 63 74 3b 0a 09 44 57 4f 52   cbStruct;..DWOR
3920: 44 20 20 64 77 41 75 74 68 54 79 70 65 3b 0a 09  D  dwAuthType;..
3930: 44 57 4f 52 44 20 20 66 64 77 43 68 65 63 6b 73  DWORD  fdwChecks
3940: 3b 0a 09 4c 50 57 53 54 52 20 70 77 73 7a 53 65  ;..LPWSTR pwszSe
3950: 72 76 65 72 4e 61 6d 65 3b 0a 7d 0a 61 6c 69 61  rverName;.}.alia
3960: 73 20 53 53 4c 5f 45 58 54 52 41 5f 43 45 52 54  s SSL_EXTRA_CERT
3970: 5f 43 48 41 49 4e 5f 50 4f 4c 49 43 59 5f 50 41  _CHAIN_POLICY_PA
3980: 52 41 20 48 54 54 50 53 50 6f 6c 69 63 79 43 61  RA HTTPSPolicyCa
3990: 6c 6c 62 61 63 6b 44 61 74 61 3b 0a 61 6c 69 61  llbackData;.alia
39a0: 73 20 53 53 4c 5f 45 58 54 52 41 5f 43 45 52 54  s SSL_EXTRA_CERT
39b0: 5f 43 48 41 49 4e 5f 50 4f 4c 49 43 59 5f 50 41  _CHAIN_POLICY_PA
39c0: 52 41 2a 20 50 53 53 4c 5f 45 58 54 52 41 5f 43  RA* PSSL_EXTRA_C
39d0: 45 52 54 5f 43 48 41 49 4e 5f 50 4f 4c 49 43 59  ERT_CHAIN_POLICY
39e0: 5f 50 41 52 41 2c 0a 20 20 50 48 54 54 50 53 50  _PARA,.  PHTTPSP
39f0: 6f 6c 69 63 79 43 61 6c 6c 62 61 63 6b 44 61 74  olicyCallbackDat
3a00: 61 3b 0a 0a 2f 2a 20 23 69 66 20 28 5f 57 49 4e  a;../* #if (_WIN
3a10: 33 32 5f 57 49 4e 4e 54 3e 3d 30 78 35 30 30 29  32_WINNT>=0x500)
3a20: 20 2a 2f 0a 73 74 72 75 63 74 20 43 45 52 54 5f   */.struct CERT_
3a30: 43 48 41 49 4e 5f 50 4f 4c 49 43 59 5f 50 41 52  CHAIN_POLICY_PAR
3a40: 41 20 7b 0a 09 44 57 4f 52 44 20 63 62 53 69 7a  A {..DWORD cbSiz
3a50: 65 20 3d 20 43 45 52 54 5f 43 48 41 49 4e 5f 50  e = CERT_CHAIN_P
3a60: 4f 4c 49 43 59 5f 50 41 52 41 2e 73 69 7a 65 6f  OLICY_PARA.sizeo
3a70: 66 3b 0a 09 44 57 4f 52 44 20 64 77 46 6c 61 67  f;..DWORD dwFlag
3a80: 73 3b 0a 09 76 6f 69 64 2a 20 70 76 45 78 74 72  s;..void* pvExtr
3a90: 61 50 6f 6c 69 63 79 50 61 72 61 3b 0a 7d 0a 61  aPolicyPara;.}.a
3aa0: 6c 69 61 73 20 43 45 52 54 5f 43 48 41 49 4e 5f  lias CERT_CHAIN_
3ab0: 50 4f 4c 49 43 59 5f 50 41 52 41 2a 20 50 43 45  POLICY_PARA* PCE
3ac0: 52 54 5f 43 48 41 49 4e 5f 50 4f 4c 49 43 59 5f  RT_CHAIN_POLICY_
3ad0: 50 41 52 41 3b 0a 0a 73 74 72 75 63 74 20 43 45  PARA;..struct CE
3ae0: 52 54 5f 43 48 41 49 4e 5f 50 4f 4c 49 43 59 5f  RT_CHAIN_POLICY_
3af0: 53 54 41 54 55 53 20 7b 0a 09 44 57 4f 52 44 20  STATUS {..DWORD 
3b00: 63 62 53 69 7a 65 20 3d 20 43 45 52 54 5f 43 48  cbSize = CERT_CH
3b10: 41 49 4e 5f 50 4f 4c 49 43 59 5f 53 54 41 54 55  AIN_POLICY_STATU
3b20: 53 2e 73 69 7a 65 6f 66 3b 0a 09 44 57 4f 52 44  S.sizeof;..DWORD
3b30: 20 64 77 45 72 72 6f 72 3b 0a 09 4c 4f 4e 47 20   dwError;..LONG 
3b40: 20 6c 43 68 61 69 6e 49 6e 64 65 78 3b 0a 09 4c   lChainIndex;..L
3b50: 4f 4e 47 20 20 6c 45 6c 65 6d 65 6e 74 49 6e 64  ONG  lElementInd
3b60: 65 78 3b 0a 09 76 6f 69 64 2a 20 70 76 45 78 74  ex;..void* pvExt
3b70: 72 61 50 6f 6c 69 63 79 53 74 61 74 75 73 3b 0a  raPolicyStatus;.
3b80: 7d 0a 61 6c 69 61 73 20 43 45 52 54 5f 43 48 41  }.alias CERT_CHA
3b90: 49 4e 5f 50 4f 4c 49 43 59 5f 53 54 41 54 55 53  IN_POLICY_STATUS
3ba0: 2a 20 50 43 45 52 54 5f 43 48 41 49 4e 5f 50 4f  * PCERT_CHAIN_PO
3bb0: 4c 49 43 59 5f 53 54 41 54 55 53 3b 0a 2f 2a 20  LICY_STATUS;./* 
3bc0: 23 65 6e 64 69 66 20 2a 2f 0a 0a 73 74 72 75 63  #endif */..struc
3bd0: 74 20 43 52 59 50 54 5f 41 4c 47 4f 52 49 54 48  t CRYPT_ALGORITH
3be0: 4d 5f 49 44 45 4e 54 49 46 49 45 52 20 7b 0a 09  M_IDENTIFIER {..
3bf0: 4c 50 53 54 52 20 70 73 7a 4f 62 6a 49 64 3b 0a  LPSTR pszObjId;.
3c00: 09 43 52 59 50 54 5f 4f 42 4a 49 44 5f 42 4c 4f  .CRYPT_OBJID_BLO
3c10: 42 20 50 61 72 61 6d 65 74 65 72 73 3b 0a 7d 0a  B Parameters;.}.
3c20: 61 6c 69 61 73 20 43 52 59 50 54 5f 41 4c 47 4f  alias CRYPT_ALGO
3c30: 52 49 54 48 4d 5f 49 44 45 4e 54 49 46 49 45 52  RITHM_IDENTIFIER
3c40: 2a 20 50 43 52 59 50 54 5f 41 4c 47 4f 52 49 54  * PCRYPT_ALGORIT
3c50: 48 4d 5f 49 44 45 4e 54 49 46 49 45 52 3b 0a 0a  HM_IDENTIFIER;..
3c60: 73 74 72 75 63 74 20 43 52 59 50 54 5f 42 49 54  struct CRYPT_BIT
3c70: 5f 42 4c 4f 42 20 7b 0a 09 44 57 4f 52 44 20 63  _BLOB {..DWORD c
3c80: 62 44 61 74 61 3b 0a 09 42 59 54 45 2a 20 70 62  bData;..BYTE* pb
3c90: 44 61 74 61 3b 0a 09 44 57 4f 52 44 20 63 55 6e  Data;..DWORD cUn
3ca0: 75 73 65 64 42 69 74 73 3b 0a 7d 0a 61 6c 69 61  usedBits;.}.alia
3cb0: 73 20 43 52 59 50 54 5f 42 49 54 5f 42 4c 4f 42  s CRYPT_BIT_BLOB
3cc0: 2a 20 50 43 52 59 50 54 5f 42 49 54 5f 42 4c 4f  * PCRYPT_BIT_BLO
3cd0: 42 3b 0a 0a 73 74 72 75 63 74 20 43 45 52 54 5f  B;..struct CERT_
3ce0: 50 55 42 4c 49 43 5f 4b 45 59 5f 49 4e 46 4f 20  PUBLIC_KEY_INFO 
3cf0: 7b 0a 09 43 52 59 50 54 5f 41 4c 47 4f 52 49 54  {..CRYPT_ALGORIT
3d00: 48 4d 5f 49 44 45 4e 54 49 46 49 45 52 20 41 6c  HM_IDENTIFIER Al
3d10: 67 6f 72 69 74 68 6d 3b 0a 09 43 52 59 50 54 5f  gorithm;..CRYPT_
3d20: 42 49 54 5f 42 4c 4f 42 20 20 20 20 20 20 20 20  BIT_BLOB        
3d30: 20 20 20 20 20 50 75 62 6c 69 63 4b 65 79 3b 0a       PublicKey;.
3d40: 7d 0a 61 6c 69 61 73 20 43 45 52 54 5f 50 55 42  }.alias CERT_PUB
3d50: 4c 49 43 5f 4b 45 59 5f 49 4e 46 4f 2a 20 50 43  LIC_KEY_INFO* PC
3d60: 45 52 54 5f 50 55 42 4c 49 43 5f 4b 45 59 5f 49  ERT_PUBLIC_KEY_I
3d70: 4e 46 4f 3b 0a 0a 73 74 72 75 63 74 20 43 45 52  NFO;..struct CER
3d80: 54 5f 45 58 54 45 4e 53 49 4f 4e 20 7b 0a 09 4c  T_EXTENSION {..L
3d90: 50 53 54 52 20 20 20 20 20 20 20 20 20 20 20 20  PSTR            
3da0: 70 73 7a 4f 62 6a 49 64 3b 0a 09 42 4f 4f 4c 20  pszObjId;..BOOL 
3db0: 20 20 20 20 20 20 20 20 20 20 20 20 66 43 72 69              fCri
3dc0: 74 69 63 61 6c 3b 0a 09 43 52 59 50 54 5f 4f 42  tical;..CRYPT_OB
3dd0: 4a 49 44 5f 42 4c 4f 42 20 56 61 6c 75 65 3b 0a  JID_BLOB Value;.
3de0: 7d 0a 61 6c 69 61 73 20 43 45 52 54 5f 45 58 54  }.alias CERT_EXT
3df0: 45 4e 53 49 4f 4e 2a 20 50 43 45 52 54 5f 45 58  ENSION* PCERT_EX
3e00: 54 45 4e 53 49 4f 4e 3b 0a 0a 73 74 72 75 63 74  TENSION;..struct
3e10: 20 43 45 52 54 5f 49 4e 46 4f 20 7b 0a 09 44 57   CERT_INFO {..DW
3e20: 4f 52 44 20 64 77 56 65 72 73 69 6f 6e 3b 0a 09  ORD dwVersion;..
3e30: 43 52 59 50 54 5f 49 4e 54 45 47 45 52 5f 42 4c  CRYPT_INTEGER_BL
3e40: 4f 42 20 53 65 72 69 61 6c 4e 75 6d 62 65 72 3b  OB SerialNumber;
3e50: 0a 09 43 52 59 50 54 5f 41 4c 47 4f 52 49 54 48  ..CRYPT_ALGORITH
3e60: 4d 5f 49 44 45 4e 54 49 46 49 45 52 20 53 69 67  M_IDENTIFIER Sig
3e70: 6e 61 74 75 72 65 41 6c 67 6f 72 69 74 68 6d 3b  natureAlgorithm;
3e80: 0a 09 43 45 52 54 5f 4e 41 4d 45 5f 42 4c 4f 42  ..CERT_NAME_BLOB
3e90: 20 49 73 73 75 65 72 3b 0a 09 46 49 4c 45 54 49   Issuer;..FILETI
3ea0: 4d 45 20 4e 6f 74 42 65 66 6f 72 65 3b 0a 09 46  ME NotBefore;..F
3eb0: 49 4c 45 54 49 4d 45 20 4e 6f 74 41 66 74 65 72  ILETIME NotAfter
3ec0: 3b 0a 09 43 45 52 54 5f 4e 41 4d 45 5f 42 4c 4f  ;..CERT_NAME_BLO
3ed0: 42 20 53 75 62 6a 65 63 74 3b 0a 09 43 45 52 54  B Subject;..CERT
3ee0: 5f 50 55 42 4c 49 43 5f 4b 45 59 5f 49 4e 46 4f  _PUBLIC_KEY_INFO
3ef0: 20 53 75 62 6a 65 63 74 50 75 62 6c 69 63 4b 65   SubjectPublicKe
3f00: 79 49 6e 66 6f 3b 0a 09 43 52 59 50 54 5f 42 49  yInfo;..CRYPT_BI
3f10: 54 5f 42 4c 4f 42 20 49 73 73 75 65 72 55 6e 69  T_BLOB IssuerUni
3f20: 71 75 65 49 64 3b 0a 09 43 52 59 50 54 5f 42 49  queId;..CRYPT_BI
3f30: 54 5f 42 4c 4f 42 20 53 75 62 6a 65 63 74 55 6e  T_BLOB SubjectUn
3f40: 69 71 75 65 49 64 3b 0a 09 44 57 4f 52 44 20 63  iqueId;..DWORD c
3f50: 45 78 74 65 6e 73 69 6f 6e 3b 0a 09 50 43 45 52  Extension;..PCER
3f60: 54 5f 45 58 54 45 4e 53 49 4f 4e 20 72 67 45 78  T_EXTENSION rgEx
3f70: 74 65 6e 73 69 6f 6e 3b 0a 7d 0a 61 6c 69 61 73  tension;.}.alias
3f80: 20 43 45 52 54 5f 49 4e 46 4f 2a 20 50 43 45 52   CERT_INFO* PCER
3f90: 54 5f 49 4e 46 4f 3b 0a 0a 73 74 72 75 63 74 20  T_INFO;..struct 
3fa0: 43 45 52 54 5f 43 4f 4e 54 45 58 54 20 7b 0a 09  CERT_CONTEXT {..
3fb0: 44 57 4f 52 44 20 20 20 20 20 20 64 77 43 65 72  DWORD      dwCer
3fc0: 74 45 6e 63 6f 64 69 6e 67 54 79 70 65 3b 0a 09  tEncodingType;..
3fd0: 42 59 54 45 2a 20 20 20 20 20 20 70 62 43 65 72  BYTE*      pbCer
3fe0: 74 45 6e 63 6f 64 65 64 3b 0a 09 44 57 4f 52 44  tEncoded;..DWORD
3ff0: 20 20 20 20 20 20 63 62 43 65 72 74 45 6e 63 6f        cbCertEnco
4000: 64 65 64 3b 0a 09 50 43 45 52 54 5f 49 4e 46 4f  ded;..PCERT_INFO
4010: 20 70 43 65 72 74 49 6e 66 6f 3b 0a 09 48 43 45   pCertInfo;..HCE
4020: 52 54 53 54 4f 52 45 20 68 43 65 72 74 53 74 6f  RTSTORE hCertSto
4030: 72 65 3b 0a 7d 0a 61 6c 69 61 73 20 43 45 52 54  re;.}.alias CERT
4040: 5f 43 4f 4e 54 45 58 54 2a 20 20 20 20 20 20 20  _CONTEXT*       
4050: 50 43 45 52 54 5f 43 4f 4e 54 45 58 54 3b 0a 61  PCERT_CONTEXT;.a
4060: 6c 69 61 73 20 43 50 74 72 21 28 43 45 52 54 5f  lias CPtr!(CERT_
4070: 43 4f 4e 54 45 58 54 29 20 50 43 43 45 52 54 5f  CONTEXT) PCCERT_
4080: 43 4f 4e 54 45 58 54 3b 0a 0a 73 74 72 75 63 74  CONTEXT;..struct
4090: 20 43 54 4c 5f 55 53 41 47 45 20 7b 0a 09 44 57   CTL_USAGE {..DW
40a0: 4f 52 44 20 20 63 55 73 61 67 65 49 64 65 6e 74  ORD  cUsageIdent
40b0: 69 66 69 65 72 3b 0a 09 4c 50 53 54 52 2a 20 72  ifier;..LPSTR* r
40c0: 67 70 73 7a 55 73 61 67 65 49 64 65 6e 74 69 66  gpszUsageIdentif
40d0: 69 65 72 3b 0a 7d 0a 61 6c 69 61 73 20 43 54 4c  ier;.}.alias CTL
40e0: 5f 55 53 41 47 45 20 43 45 52 54 5f 45 4e 48 4b  _USAGE CERT_ENHK
40f0: 45 59 5f 55 53 41 47 45 3b 0a 61 6c 69 61 73 20  EY_USAGE;.alias 
4100: 43 54 4c 5f 55 53 41 47 45 2a 20 50 43 54 52 4c  CTL_USAGE* PCTRL
4110: 5f 55 53 41 47 45 2c 20 50 43 45 52 54 5f 45 4e  _USAGE, PCERT_EN
4120: 48 4b 45 59 5f 55 53 41 47 45 3b 0a 0a 73 74 72  HKEY_USAGE;..str
4130: 75 63 74 20 43 45 52 54 5f 55 53 41 47 45 5f 4d  uct CERT_USAGE_M
4140: 41 54 43 48 20 7b 0a 09 44 57 4f 52 44 20 20 20  ATCH {..DWORD   
4150: 20 20 20 20 20 20 20 20 20 20 64 77 54 79 70 65            dwType
4160: 3b 0a 09 43 45 52 54 5f 45 4e 48 4b 45 59 5f 55  ;..CERT_ENHKEY_U
4170: 53 41 47 45 20 55 73 61 67 65 3b 0a 7d 0a 61 6c  SAGE Usage;.}.al
4180: 69 61 73 20 43 45 52 54 5f 55 53 41 47 45 5f 4d  ias CERT_USAGE_M
4190: 41 54 43 48 2a 20 50 43 45 52 54 5f 55 53 41 47  ATCH* PCERT_USAG
41a0: 45 5f 4d 41 54 43 48 3b 0a 2f 2a 20 23 69 66 20  E_MATCH;./* #if 
41b0: 28 5f 57 49 4e 33 32 5f 57 49 4e 4e 54 3e 3d 30  (_WIN32_WINNT>=0
41c0: 78 35 30 30 29 20 2a 2f 0a 0a 73 74 72 75 63 74  x500) */..struct
41d0: 20 43 45 52 54 5f 43 48 41 49 4e 5f 50 41 52 41   CERT_CHAIN_PARA
41e0: 20 7b 0a 09 44 57 4f 52 44 20 20 20 20 20 20 20   {..DWORD       
41f0: 20 20 20 20 20 63 62 53 69 7a 65 20 3d 20 43 45       cbSize = CE
4200: 52 54 5f 43 48 41 49 4e 5f 50 41 52 41 2e 73 69  RT_CHAIN_PARA.si
4210: 7a 65 6f 66 3b 0a 09 43 45 52 54 5f 55 53 41 47  zeof;..CERT_USAG
4220: 45 5f 4d 41 54 43 48 20 52 65 71 75 65 73 74 65  E_MATCH Requeste
4230: 64 55 73 61 67 65 3b 0a 2f 2f 23 69 66 20 43 45  dUsage;.//#if CE
4240: 52 54 5f 43 48 41 49 4e 5f 50 41 52 41 5f 48 41  RT_CHAIN_PARA_HA
4250: 53 5f 45 58 54 52 41 5f 46 49 45 4c 44 53 0a 09  S_EXTRA_FIELDS..
4260: 43 45 52 54 5f 55 53 41 47 45 5f 4d 41 54 43 48  CERT_USAGE_MATCH
4270: 20 52 65 71 75 65 73 74 65 64 49 73 73 75 61 6e   RequestedIssuan
4280: 63 65 50 6f 6c 69 63 79 3b 0a 09 44 57 4f 52 44  cePolicy;..DWORD
4290: 20 20 20 20 20 20 20 20 20 20 20 20 64 77 55 72              dwUr
42a0: 6c 52 65 74 72 69 65 76 61 6c 54 69 6d 65 6f 75  lRetrievalTimeou
42b0: 74 3b 0a 09 42 4f 4f 4c 20 20 20 20 20 20 20 20  t;..BOOL        
42c0: 20 20 20 20 20 66 43 68 65 63 6b 52 65 76 6f 63       fCheckRevoc
42d0: 61 74 69 6f 6e 46 72 65 73 68 6e 65 73 73 54 69  ationFreshnessTi
42e0: 6d 65 3b 0a 09 44 57 4f 52 44 20 20 20 20 20 20  me;..DWORD      
42f0: 20 20 20 20 20 20 64 77 52 65 76 6f 63 61 74 69        dwRevocati
4300: 6f 6e 46 72 65 73 68 6e 65 73 73 54 69 6d 65 3b  onFreshnessTime;
4310: 0a 2f 2f 23 65 6e 64 69 66 0a 7d 0a 61 6c 69 61  .//#endif.}.alia
4320: 73 20 43 45 52 54 5f 43 48 41 49 4e 5f 50 41 52  s CERT_CHAIN_PAR
4330: 41 2a 20 50 43 45 52 54 5f 43 48 41 49 4e 5f 50  A* PCERT_CHAIN_P
4340: 41 52 41 3b 0a 0a 65 78 74 65 72 6e 20 28 57 69  ARA;..extern (Wi
4350: 6e 64 6f 77 73 29 20 61 6c 69 61 73 20 42 4f 4f  ndows) alias BOO
4360: 4c 20 66 75 6e 63 74 69 6f 6e 28 50 43 43 45 52  L function(PCCER
4370: 54 5f 43 4f 4e 54 45 58 54 2c 20 76 6f 69 64 2a  T_CONTEXT, void*
4380: 29 0a 20 20 50 46 4e 5f 43 45 52 54 5f 43 48 41  ).  PFN_CERT_CHA
4390: 49 4e 5f 46 49 4e 44 5f 42 59 5f 49 53 53 55 45  IN_FIND_BY_ISSUE
43a0: 52 5f 43 41 4c 4c 42 41 43 4b 3b 0a 0a 73 74 72  R_CALLBACK;..str
43b0: 75 63 74 20 43 45 52 54 5f 43 48 41 49 4e 5f 46  uct CERT_CHAIN_F
43c0: 49 4e 44 5f 42 59 5f 49 53 53 55 45 52 5f 50 41  IND_BY_ISSUER_PA
43d0: 52 41 20 7b 0a 09 44 57 4f 52 44 20 20 63 62 53  RA {..DWORD  cbS
43e0: 69 7a 65 20 3d 20 43 45 52 54 5f 43 48 41 49 4e  ize = CERT_CHAIN
43f0: 5f 46 49 4e 44 5f 42 59 5f 49 53 53 55 45 52 5f  _FIND_BY_ISSUER_
4400: 50 41 52 41 2e 73 69 7a 65 6f 66 3b 0a 09 4c 50  PARA.sizeof;..LP
4410: 43 53 54 52 20 70 73 7a 55 73 61 67 65 49 64 65  CSTR pszUsageIde
4420: 6e 74 69 66 69 65 72 3b 0a 09 44 57 4f 52 44 20  ntifier;..DWORD 
4430: 20 64 77 4b 65 79 53 70 65 63 3b 0a 09 44 57 4f   dwKeySpec;..DWO
4440: 52 44 20 20 64 77 41 63 71 75 69 72 65 50 72 69  RD  dwAcquirePri
4450: 76 61 74 65 4b 65 79 46 6c 61 67 73 3b 0a 09 44  vateKeyFlags;..D
4460: 57 4f 52 44 20 20 63 49 73 73 75 65 72 3b 0a 09  WORD  cIssuer;..
4470: 43 45 52 54 5f 4e 41 4d 45 5f 42 4c 4f 42 2a 20  CERT_NAME_BLOB* 
4480: 72 67 49 73 73 75 65 72 3b 0a 09 50 46 4e 5f 43  rgIssuer;..PFN_C
4490: 45 52 54 5f 43 48 41 49 4e 5f 46 49 4e 44 5f 42  ERT_CHAIN_FIND_B
44a0: 59 5f 49 53 53 55 45 52 5f 43 41 4c 4c 42 41 43  Y_ISSUER_CALLBAC
44b0: 4b 20 70 66 6e 46 49 6e 64 43 61 6c 6c 62 61 63  K pfnFIndCallbac
44c0: 6b 3b 0a 09 76 6f 69 64 2a 20 20 70 76 46 69 6e  k;..void*  pvFin
44d0: 64 41 72 67 3b 0a 09 44 57 4f 52 44 2a 20 70 64  dArg;..DWORD* pd
44e0: 77 49 73 73 75 65 72 43 68 61 69 6e 49 6e 64 65  wIssuerChainInde
44f0: 78 3b 0a 09 44 57 4f 52 44 2a 20 70 64 77 49 73  x;..DWORD* pdwIs
4500: 73 75 65 72 45 6c 65 6d 65 6e 74 49 6e 64 65 78  suerElementIndex
4510: 3b 0a 7d 0a 61 6c 69 61 73 20 43 45 52 54 5f 43  ;.}.alias CERT_C
4520: 48 41 49 4e 5f 46 49 4e 44 5f 42 59 5f 49 53 53  HAIN_FIND_BY_ISS
4530: 55 45 52 5f 50 41 52 41 2a 20 50 43 45 52 54 5f  UER_PARA* PCERT_
4540: 43 48 41 49 4e 5f 46 49 4e 44 5f 42 59 5f 49 53  CHAIN_FIND_BY_IS
4550: 53 55 45 52 5f 50 41 52 41 3b 0a 2f 2a 20 23 65  SUER_PARA;./* #e
4560: 6e 64 69 66 20 2a 2f 0a 0a 73 74 72 75 63 74 20  ndif */..struct 
4570: 43 45 52 54 5f 54 52 55 53 54 5f 53 54 41 54 55  CERT_TRUST_STATU
4580: 53 20 7b 0a 09 44 57 4f 52 44 20 64 77 45 72 72  S {..DWORD dwErr
4590: 6f 72 53 74 61 74 75 73 3b 0a 09 44 57 4f 52 44  orStatus;..DWORD
45a0: 20 64 77 49 6e 66 6f 53 74 61 74 75 73 3b 0a 7d   dwInfoStatus;.}
45b0: 0a 61 6c 69 61 73 20 43 45 52 54 5f 54 52 55 53  .alias CERT_TRUS
45c0: 54 5f 53 54 41 54 55 53 2a 20 50 43 45 52 54 5f  T_STATUS* PCERT_
45d0: 54 52 55 53 54 5f 53 54 41 54 55 53 3b 0a 0a 73  TRUST_STATUS;..s
45e0: 74 72 75 63 74 20 43 52 4c 5f 45 4e 54 52 59 20  truct CRL_ENTRY 
45f0: 7b 0a 09 43 52 59 50 54 5f 49 4e 54 45 47 45 52  {..CRYPT_INTEGER
4600: 5f 42 4c 4f 42 20 53 65 72 69 61 6c 4e 75 6d 62  _BLOB SerialNumb
4610: 65 72 3b 0a 09 46 49 4c 45 54 49 4d 45 20 20 20  er;..FILETIME   
4620: 20 20 20 20 20 20 20 20 52 65 76 6f 63 61 74 69          Revocati
4630: 6f 6e 44 61 74 65 3b 0a 09 44 57 4f 52 44 20 20  onDate;..DWORD  
4640: 20 20 20 20 20 20 20 20 20 20 20 20 63 45 78 74              cExt
4650: 65 6e 73 69 6f 6e 3b 0a 09 50 43 45 52 54 5f 45  ension;..PCERT_E
4660: 58 54 45 4e 53 49 4f 4e 20 20 20 20 72 67 45 78  XTENSION    rgEx
4670: 74 65 6e 73 69 6f 6e 3b 0a 7d 0a 61 6c 69 61 73  tension;.}.alias
4680: 20 43 52 4c 5f 45 4e 54 52 59 2a 20 50 43 52 4c   CRL_ENTRY* PCRL
4690: 5f 45 4e 54 52 59 3b 0a 0a 73 74 72 75 63 74 20  _ENTRY;..struct 
46a0: 43 52 4c 5f 49 4e 46 4f 20 7b 0a 09 44 57 4f 52  CRL_INFO {..DWOR
46b0: 44 20 20 20 20 20 20 20 20 20 20 20 64 77 56 65  D           dwVe
46c0: 72 73 69 6f 6e 3b 0a 09 43 52 59 50 54 5f 41 4c  rsion;..CRYPT_AL
46d0: 47 4f 52 49 54 48 4d 5f 49 44 45 4e 54 49 46 49  GORITHM_IDENTIFI
46e0: 45 52 20 53 69 67 6e 61 74 75 72 65 41 6c 67 6f  ER SignatureAlgo
46f0: 72 69 74 68 6d 3b 0a 09 43 45 52 54 5f 4e 41 4d  rithm;..CERT_NAM
4700: 45 5f 42 4c 4f 42 20 20 49 73 73 75 65 72 3b 0a  E_BLOB  Issuer;.
4710: 09 46 49 4c 45 54 49 4d 45 20 20 20 20 20 20 20  .FILETIME       
4720: 20 54 68 69 73 55 70 64 61 74 65 3b 0a 09 46 49   ThisUpdate;..FI
4730: 4c 45 54 49 4d 45 20 20 20 20 20 20 20 20 4e 65  LETIME        Ne
4740: 78 74 55 70 64 61 74 65 3b 0a 09 44 57 4f 52 44  xtUpdate;..DWORD
4750: 20 20 20 20 20 20 20 20 20 20 20 63 43 52 4c 45             cCRLE
4760: 6e 74 72 79 3b 0a 09 50 43 52 4c 5f 45 4e 54 52  ntry;..PCRL_ENTR
4770: 59 20 20 20 20 20 20 72 67 43 52 4c 45 6e 74 72  Y      rgCRLEntr
4780: 79 3b 0a 09 44 57 4f 52 44 20 20 20 20 20 20 20  y;..DWORD       
4790: 20 20 20 20 63 45 78 74 65 6e 73 69 6f 6e 3b 0a      cExtension;.
47a0: 09 50 43 45 52 54 5f 45 58 54 45 4e 53 49 4f 4e  .PCERT_EXTENSION
47b0: 20 72 67 45 78 74 65 6e 73 69 6f 6e 3b 0a 7d 0a   rgExtension;.}.
47c0: 61 6c 69 61 73 20 43 52 4c 5f 49 4e 46 4f 2a 20  alias CRL_INFO* 
47d0: 50 43 52 4c 5f 49 4e 46 4f 3b 0a 0a 73 74 72 75  PCRL_INFO;..stru
47e0: 63 74 20 43 52 4c 5f 43 4f 4e 54 45 58 54 20 7b  ct CRL_CONTEXT {
47f0: 0a 09 44 57 4f 52 44 20 20 20 20 20 20 64 77 43  ..DWORD      dwC
4800: 65 72 74 45 6e 63 6f 64 69 6e 67 54 79 70 65 3b  ertEncodingType;
4810: 0a 09 42 59 54 45 2a 20 20 20 20 20 20 70 62 43  ..BYTE*      pbC
4820: 72 6c 45 6e 63 6f 64 65 64 3b 0a 09 44 57 4f 52  rlEncoded;..DWOR
4830: 44 20 20 20 20 20 20 63 62 43 72 6c 45 6e 63 6f  D      cbCrlEnco
4840: 64 65 64 3b 0a 09 50 43 52 4c 5f 49 4e 46 4f 20  ded;..PCRL_INFO 
4850: 20 70 43 72 6c 49 6e 66 6f 3b 0a 09 48 43 45 52   pCrlInfo;..HCER
4860: 54 53 54 4f 52 45 20 68 43 65 72 74 53 74 6f 72  TSTORE hCertStor
4870: 65 3b 0a 7d 0a 61 6c 69 61 73 20 43 52 4c 5f 43  e;.}.alias CRL_C
4880: 4f 4e 54 45 58 54 2a 20 20 20 20 20 20 20 50 43  ONTEXT*       PC
4890: 52 4c 5f 43 4f 4e 54 45 58 54 3b 0a 61 6c 69 61  RL_CONTEXT;.alia
48a0: 73 20 43 50 74 72 21 28 43 52 4c 5f 43 4f 4e 54  s CPtr!(CRL_CONT
48b0: 45 58 54 29 20 50 43 43 52 4c 5f 43 4f 4e 54 45  EXT) PCCRL_CONTE
48c0: 58 54 3b 0a 0a 73 74 72 75 63 74 20 43 45 52 54  XT;..struct CERT
48d0: 5f 52 45 56 4f 43 41 54 49 4f 4e 5f 43 52 4c 5f  _REVOCATION_CRL_
48e0: 49 4e 46 4f 20 7b 0a 09 44 57 4f 52 44 20 20 20  INFO {..DWORD   
48f0: 20 20 20 20 20 20 63 62 53 69 7a 65 20 3d 20 43        cbSize = C
4900: 45 52 54 5f 52 45 56 4f 43 41 54 49 4f 4e 5f 43  ERT_REVOCATION_C
4910: 52 4c 5f 49 4e 46 4f 2e 73 69 7a 65 6f 66 3b 0a  RL_INFO.sizeof;.
4920: 09 50 43 43 52 4c 5f 43 4f 4e 54 45 58 54 20 70  .PCCRL_CONTEXT p
4930: 42 61 73 65 43 52 4c 43 6f 6e 74 65 78 74 3b 0a  BaseCRLContext;.
4940: 09 50 43 43 52 4c 5f 43 4f 4e 54 45 58 54 20 70  .PCCRL_CONTEXT p
4950: 44 65 6c 74 61 43 52 4c 43 6f 6e 74 65 78 74 3b  DeltaCRLContext;
4960: 0a 09 50 43 52 4c 5f 45 4e 54 52 59 20 20 20 20  ..PCRL_ENTRY    
4970: 70 43 72 6c 45 6e 74 72 79 3b 0a 09 42 4f 4f 4c  pCrlEntry;..BOOL
4980: 20 20 20 20 20 20 20 20 20 20 66 44 65 6c 74 61            fDelta
4990: 43 72 6c 45 6e 74 72 79 3b 0a 7d 0a 61 6c 69 61  CrlEntry;.}.alia
49a0: 73 20 43 45 52 54 5f 52 45 56 4f 43 41 54 49 4f  s CERT_REVOCATIO
49b0: 4e 5f 43 52 4c 5f 49 4e 46 4f 2a 20 50 43 45 52  N_CRL_INFO* PCER
49c0: 54 5f 52 45 56 4f 43 41 54 49 4f 4e 5f 43 52 4c  T_REVOCATION_CRL
49d0: 5f 49 4e 46 4f 3b 0a 0a 73 74 72 75 63 74 20 43  _INFO;..struct C
49e0: 45 52 54 5f 52 45 56 4f 43 41 54 49 4f 4e 5f 49  ERT_REVOCATION_I
49f0: 4e 46 4f 20 7b 0a 09 44 57 4f 52 44 20 20 63 62  NFO {..DWORD  cb
4a00: 53 69 7a 65 20 3d 20 43 45 52 54 5f 52 45 56 4f  Size = CERT_REVO
4a10: 43 41 54 49 4f 4e 5f 49 4e 46 4f 2e 73 69 7a 65  CATION_INFO.size
4a20: 6f 66 3b 0a 09 44 57 4f 52 44 20 20 64 77 52 65  of;..DWORD  dwRe
4a30: 76 6f 63 61 74 69 6f 6e 52 65 73 75 6c 74 3b 0a  vocationResult;.
4a40: 09 4c 50 43 53 54 52 20 70 73 7a 52 65 76 6f 63  .LPCSTR pszRevoc
4a50: 61 74 69 6f 6e 4f 69 64 3b 0a 09 4c 50 56 4f 49  ationOid;..LPVOI
4a60: 44 20 70 76 4f 69 64 53 70 65 63 69 66 69 63 49  D pvOidSpecificI
4a70: 6e 66 6f 3b 0a 09 42 4f 4f 4c 20 20 20 66 48 61  nfo;..BOOL   fHa
4a80: 73 46 72 65 73 68 6e 65 73 73 54 69 6d 65 3b 0a  sFreshnessTime;.
4a90: 09 44 57 4f 52 44 20 20 64 77 46 72 65 73 68 6e  .DWORD  dwFreshn
4aa0: 65 73 73 54 69 6d 65 3b 0a 09 50 43 45 52 54 5f  essTime;..PCERT_
4ab0: 52 45 56 4f 43 41 54 49 4f 4e 5f 43 52 4c 5f 49  REVOCATION_CRL_I
4ac0: 4e 46 4f 20 70 43 72 6c 49 6e 66 6f 3b 0a 7d 0a  NFO pCrlInfo;.}.
4ad0: 61 6c 69 61 73 20 43 45 52 54 5f 52 45 56 4f 43  alias CERT_REVOC
4ae0: 41 54 49 4f 4e 5f 49 4e 46 4f 2a 20 50 43 45 52  ATION_INFO* PCER
4af0: 54 5f 52 45 56 4f 43 41 54 49 4f 4e 5f 49 4e 46  T_REVOCATION_INF
4b00: 4f 3b 0a 0a 2f 2a 20 23 69 66 20 28 5f 57 49 4e  O;../* #if (_WIN
4b10: 33 32 5f 57 49 4e 4e 54 3e 3d 30 78 35 30 30 29  32_WINNT>=0x500)
4b20: 20 2a 2f 0a 73 74 72 75 63 74 20 43 45 52 54 5f   */.struct CERT_
4b30: 43 48 41 49 4e 5f 45 4c 45 4d 45 4e 54 20 7b 0a  CHAIN_ELEMENT {.
4b40: 09 44 57 4f 52 44 20 20 20 20 20 20 20 20 20 20  .DWORD          
4b50: 20 20 20 20 20 20 20 63 62 53 69 7a 65 20 3d 20         cbSize = 
4b60: 43 45 52 54 5f 43 48 41 49 4e 5f 45 4c 45 4d 45  CERT_CHAIN_ELEME
4b70: 4e 54 2e 73 69 7a 65 6f 66 3b 0a 09 50 43 43 45  NT.sizeof;..PCCE
4b80: 52 54 5f 43 4f 4e 54 45 58 54 20 20 20 20 20 20  RT_CONTEXT      
4b90: 20 20 70 43 65 72 74 43 6f 6e 74 65 78 74 3b 0a    pCertContext;.
4ba0: 09 43 45 52 54 5f 54 52 55 53 54 5f 53 54 41 54  .CERT_TRUST_STAT
4bb0: 55 53 20 20 20 20 20 54 72 75 73 74 53 74 61 74  US     TrustStat
4bc0: 75 73 3b 0a 09 50 43 45 52 54 5f 52 45 56 4f 43  us;..PCERT_REVOC
4bd0: 41 54 49 4f 4e 5f 49 4e 46 4f 20 70 52 65 76 6f  ATION_INFO pRevo
4be0: 63 61 74 69 6f 6e 49 6e 66 6f 3b 0a 09 50 43 45  cationInfo;..PCE
4bf0: 52 54 5f 45 4e 48 4b 45 59 5f 55 53 41 47 45 20  RT_ENHKEY_USAGE 
4c00: 20 20 20 70 49 73 73 75 61 6e 63 65 55 73 61 67     pIssuanceUsag
4c10: 65 3b 0a 09 50 43 45 52 54 5f 45 4e 48 4b 45 59  e;..PCERT_ENHKEY
4c20: 5f 55 53 41 47 45 20 20 20 20 70 41 70 70 6c 69  _USAGE    pAppli
4c30: 63 61 74 69 6f 6e 55 73 61 67 65 3b 0a 7d 0a 61  cationUsage;.}.a
4c40: 6c 69 61 73 20 43 45 52 54 5f 43 48 41 49 4e 5f  lias CERT_CHAIN_
4c50: 45 4c 45 4d 45 4e 54 2a 20 50 43 45 52 54 5f 43  ELEMENT* PCERT_C
4c60: 48 41 49 4e 5f 45 4c 45 4d 45 4e 54 3b 0a 2f 2a  HAIN_ELEMENT;./*
4c70: 20 23 65 6e 64 69 66 20 2a 2f 0a 0a 73 74 72 75   #endif */..stru
4c80: 63 74 20 43 52 59 50 54 5f 41 54 54 52 49 42 55  ct CRYPT_ATTRIBU
4c90: 54 45 20 7b 0a 09 4c 50 53 54 52 20 20 20 20 20  TE {..LPSTR     
4ca0: 20 20 20 20 20 20 20 70 73 7a 4f 62 6a 49 64 3b         pszObjId;
4cb0: 0a 09 44 57 4f 52 44 20 20 20 20 20 20 20 20 20  ..DWORD         
4cc0: 20 20 20 63 56 61 6c 75 65 3b 0a 09 50 43 52 59     cValue;..PCRY
4cd0: 50 54 5f 41 54 54 52 5f 42 4c 4f 42 20 72 67 56  PT_ATTR_BLOB rgV
4ce0: 61 6c 75 65 3b 0a 7d 0a 61 6c 69 61 73 20 43 52  alue;.}.alias CR
4cf0: 59 50 54 5f 41 54 54 52 49 42 55 54 45 2a 20 50  YPT_ATTRIBUTE* P
4d00: 43 52 59 50 54 5f 41 54 54 52 49 42 55 54 45 3b  CRYPT_ATTRIBUTE;
4d10: 0a 0a 73 74 72 75 63 74 20 43 54 4c 5f 45 4e 54  ..struct CTL_ENT
4d20: 52 59 20 7b 0a 09 43 52 59 50 54 5f 44 41 54 41  RY {..CRYPT_DATA
4d30: 5f 42 4c 4f 42 20 20 53 75 62 6a 65 63 74 49 64  _BLOB  SubjectId
4d40: 65 6e 74 69 66 69 65 72 3b 0a 09 44 57 4f 52 44  entifier;..DWORD
4d50: 20 20 20 20 20 20 20 20 20 20 20 20 63 41 74 74              cAtt
4d60: 72 69 62 75 74 65 3b 0a 09 50 43 52 59 50 54 5f  ribute;..PCRYPT_
4d70: 41 54 54 52 49 42 55 54 45 20 72 67 41 74 74 72  ATTRIBUTE rgAttr
4d80: 69 62 75 74 65 3b 0a 7d 0a 61 6c 69 61 73 20 43  ibute;.}.alias C
4d90: 54 4c 5f 45 4e 54 52 59 2a 20 50 43 54 4c 5f 45  TL_ENTRY* PCTL_E
4da0: 4e 54 52 59 3b 0a 0a 73 74 72 75 63 74 20 43 54  NTRY;..struct CT
4db0: 4c 5f 49 4e 46 4f 20 7b 0a 09 44 57 4f 52 44 20  L_INFO {..DWORD 
4dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 77 56               dwV
4dd0: 65 72 73 69 6f 6e 3b 0a 09 43 54 4c 5f 55 53 41  ersion;..CTL_USA
4de0: 47 45 20 20 20 20 20 20 20 20 20 20 53 75 62 6a  GE          Subj
4df0: 65 63 74 55 73 61 67 65 3b 0a 09 43 52 59 50 54  ectUsage;..CRYPT
4e00: 5f 44 41 54 41 5f 42 4c 4f 42 20 20 20 20 4c 69  _DATA_BLOB    Li
4e10: 73 74 49 64 65 6e 74 69 66 69 65 72 3b 0a 09 43  stIdentifier;..C
4e20: 52 59 50 54 5f 49 4e 54 45 47 45 52 5f 42 4c 4f  RYPT_INTEGER_BLO
4e30: 42 20 53 65 71 75 65 6e 63 65 4e 75 6d 62 65 72  B SequenceNumber
4e40: 3b 0a 09 46 49 4c 45 54 49 4d 45 20 20 20 20 20  ;..FILETIME     
4e50: 20 20 20 20 20 20 54 68 69 73 55 70 64 61 74 65        ThisUpdate
4e60: 3b 0a 09 46 49 4c 45 54 49 4d 45 20 20 20 20 20  ;..FILETIME     
4e70: 20 20 20 20 20 20 4e 65 78 74 55 70 64 61 74 65        NextUpdate
4e80: 3b 0a 09 43 52 59 50 54 5f 41 4c 47 4f 52 49 54  ;..CRYPT_ALGORIT
4e90: 48 4d 5f 49 44 45 4e 54 49 46 49 45 52 20 53 75  HM_IDENTIFIER Su
4ea0: 62 6a 65 63 74 41 6c 67 6f 72 69 74 68 6d 3b 0a  bjectAlgorithm;.
4eb0: 09 44 57 4f 52 44 20 20 20 20 20 20 20 20 20 20  .DWORD          
4ec0: 20 20 20 20 63 43 54 4c 45 6e 74 72 79 3b 0a 09      cCTLEntry;..
4ed0: 50 43 54 4c 5f 45 4e 54 52 59 20 20 20 20 20 20  PCTL_ENTRY      
4ee0: 20 20 20 72 67 43 54 4c 45 6e 74 72 79 3b 0a 09     rgCTLEntry;..
4ef0: 44 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 20  DWORD           
4f00: 20 20 20 63 45 78 74 65 6e 73 69 6f 6e 3b 0a 09     cExtension;..
4f10: 50 43 45 52 54 5f 45 58 54 45 4e 53 49 4f 4e 20  PCERT_EXTENSION 
4f20: 20 20 20 72 67 45 78 74 65 6e 73 69 6f 6e 3b 0a     rgExtension;.
4f30: 7d 0a 61 6c 69 61 73 20 43 54 4c 5f 49 4e 46 4f  }.alias CTL_INFO
4f40: 2a 20 50 43 54 4c 5f 49 4e 46 4f 3b 0a 0a 73 74  * PCTL_INFO;..st
4f50: 72 75 63 74 20 43 54 4c 5f 43 4f 4e 54 45 58 54  ruct CTL_CONTEXT
4f60: 20 7b 0a 09 44 57 4f 52 44 20 20 20 20 20 20 64   {..DWORD      d
4f70: 77 4d 73 67 41 6e 64 43 65 72 74 45 6e 63 6f 64  wMsgAndCertEncod
4f80: 69 6e 67 54 79 70 65 3b 0a 09 42 59 54 45 2a 20  ingType;..BYTE* 
4f90: 20 20 20 20 20 70 62 43 74 6c 45 6e 63 6f 64 65       pbCtlEncode
4fa0: 64 3b 0a 09 44 57 4f 52 44 20 20 20 20 20 20 63  d;..DWORD      c
4fb0: 62 43 74 6c 45 6e 63 6f 64 65 64 3b 0a 09 50 43  bCtlEncoded;..PC
4fc0: 54 4c 5f 49 4e 46 4f 20 20 70 43 74 6c 49 6e 66  TL_INFO  pCtlInf
4fd0: 6f 3b 0a 09 48 43 45 52 54 53 54 4f 52 45 20 68  o;..HCERTSTORE h
4fe0: 43 65 72 74 53 74 6f 72 65 3b 0a 09 48 43 52 59  CertStore;..HCRY
4ff0: 50 54 4d 53 47 20 20 68 43 72 79 70 74 4d 73 67  PTMSG  hCryptMsg
5000: 3b 0a 09 42 59 54 45 2a 20 20 20 20 20 20 70 62  ;..BYTE*      pb
5010: 43 74 6c 43 6f 6e 74 65 6e 74 3b 0a 09 44 57 4f  CtlContent;..DWO
5020: 52 44 20 20 20 20 20 20 63 62 43 74 6c 43 6f 6e  RD      cbCtlCon
5030: 74 65 6e 74 3b 0a 7d 0a 61 6c 69 61 73 20 43 54  tent;.}.alias CT
5040: 4c 5f 43 4f 4e 54 45 58 54 2a 20 20 20 20 20 20  L_CONTEXT*      
5050: 20 50 43 54 4c 5f 43 4f 4e 54 45 58 54 3b 0a 61   PCTL_CONTEXT;.a
5060: 6c 69 61 73 20 43 50 74 72 21 28 43 54 4c 5f 43  lias CPtr!(CTL_C
5070: 4f 4e 54 45 58 54 29 20 50 43 43 54 4c 5f 43 4f  ONTEXT) PCCTL_CO
5080: 4e 54 45 58 54 3b 0a 0a 73 74 72 75 63 74 20 43  NTEXT;..struct C
5090: 45 52 54 5f 54 52 55 53 54 5f 4c 49 53 54 5f 49  ERT_TRUST_LIST_I
50a0: 4e 46 4f 20 7b 0a 09 44 57 4f 52 44 20 20 20 20  NFO {..DWORD    
50b0: 20 20 20 20 20 63 62 53 69 7a 65 20 3d 20 43 45       cbSize = CE
50c0: 52 54 5f 54 52 55 53 54 5f 4c 49 53 54 5f 49 4e  RT_TRUST_LIST_IN
50d0: 46 4f 2e 73 69 7a 65 6f 66 3b 0a 09 50 43 54 4c  FO.sizeof;..PCTL
50e0: 5f 45 4e 54 52 59 20 20 20 20 70 43 74 6c 45 6e  _ENTRY    pCtlEn
50f0: 74 72 79 3b 0a 09 50 43 43 54 4c 5f 43 4f 4e 54  try;..PCCTL_CONT
5100: 45 58 54 20 70 43 74 6c 43 6f 6e 74 65 78 74 3b  EXT pCtlContext;
5110: 0a 7d 0a 61 6c 69 61 73 20 43 45 52 54 5f 54 52  .}.alias CERT_TR
5120: 55 53 54 5f 4c 49 53 54 5f 49 4e 46 4f 2a 20 50  UST_LIST_INFO* P
5130: 43 45 52 54 5f 54 52 55 53 54 5f 4c 49 53 54 5f  CERT_TRUST_LIST_
5140: 49 4e 46 4f 3b 0a 0a 73 74 72 75 63 74 20 43 45  INFO;..struct CE
5150: 52 54 5f 53 49 4d 50 4c 45 5f 43 48 41 49 4e 20  RT_SIMPLE_CHAIN 
5160: 7b 0a 09 44 57 4f 52 44 20 20 20 20 20 20 20 20  {..DWORD        
5170: 20 20 20 20 20 20 20 20 20 63 62 53 69 7a 65 20           cbSize 
5180: 3d 20 43 45 52 54 5f 53 49 4d 50 4c 45 5f 43 48  = CERT_SIMPLE_CH
5190: 41 49 4e 2e 73 69 7a 65 6f 66 3b 0a 09 43 45 52  AIN.sizeof;..CER
51a0: 54 5f 54 52 55 53 54 5f 53 54 41 54 55 53 20 20  T_TRUST_STATUS  
51b0: 20 20 20 54 72 75 73 74 53 74 61 74 75 73 3b 0a     TrustStatus;.
51c0: 09 44 57 4f 52 44 20 20 20 20 20 20 20 20 20 20  .DWORD          
51d0: 20 20 20 20 20 20 20 63 45 6c 65 6d 65 6e 74 3b         cElement;
51e0: 0a 09 50 43 45 52 54 5f 43 48 41 49 4e 5f 45 4c  ..PCERT_CHAIN_EL
51f0: 45 4d 45 4e 54 2a 20 20 72 67 70 45 6c 65 6d 65  EMENT*  rgpEleme
5200: 6e 74 3b 0a 09 50 43 45 52 54 5f 54 52 55 53 54  nt;..PCERT_TRUST
5210: 5f 4c 49 53 54 5f 49 4e 46 4f 20 70 54 72 75 73  _LIST_INFO pTrus
5220: 74 4c 69 73 74 49 6e 66 6f 3b 0a 09 42 4f 4f 4c  tListInfo;..BOOL
5230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5240: 20 20 66 48 61 73 52 65 76 6f 63 61 74 69 6f 6e    fHasRevocation
5250: 46 72 65 73 68 6e 65 73 73 54 69 6d 65 3b 0a 09  FreshnessTime;..
5260: 44 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 20  DWORD           
5270: 20 20 20 20 20 20 64 77 52 65 76 6f 63 61 74 69        dwRevocati
5280: 6f 6e 46 72 65 73 68 6e 65 73 73 54 69 6d 65 3b  onFreshnessTime;
5290: 0a 7d 0a 61 6c 69 61 73 20 43 45 52 54 5f 53 49  .}.alias CERT_SI
52a0: 4d 50 4c 45 5f 43 48 41 49 4e 2a 20 50 43 45 52  MPLE_CHAIN* PCER
52b0: 54 5f 53 49 4d 50 4c 45 5f 43 48 41 49 4e 3b 0a  T_SIMPLE_CHAIN;.
52c0: 0a 2f 2a 20 23 69 66 20 28 5f 57 49 4e 33 32 5f  ./* #if (_WIN32_
52d0: 57 49 4e 4e 54 3e 3d 30 78 35 30 30 29 20 2a 2f  WINNT>=0x500) */
52e0: 0a 61 6c 69 61 73 20 43 50 74 72 21 28 43 45 52  .alias CPtr!(CER
52f0: 54 5f 43 48 41 49 4e 5f 43 4f 4e 54 45 58 54 29  T_CHAIN_CONTEXT)
5300: 20 50 43 43 45 52 54 5f 43 48 41 49 4e 5f 43 4f   PCCERT_CHAIN_CO
5310: 4e 54 45 58 54 3b 0a 73 74 72 75 63 74 20 43 45  NTEXT;.struct CE
5320: 52 54 5f 43 48 41 49 4e 5f 43 4f 4e 54 45 58 54  RT_CHAIN_CONTEXT
5330: 20 7b 0a 09 44 57 4f 52 44 20 20 20 20 20 20 20   {..DWORD       
5340: 20 20 20 20 20 20 20 20 20 20 63 62 53 69 7a 65            cbSize
5350: 20 3d 20 43 45 52 54 5f 43 48 41 49 4e 5f 43 4f   = CERT_CHAIN_CO
5360: 4e 54 45 58 54 2e 73 69 7a 65 6f 66 3b 0a 09 43  NTEXT.sizeof;..C
5370: 45 52 54 5f 54 52 55 53 54 5f 53 54 41 54 55 53  ERT_TRUST_STATUS
5380: 20 20 20 20 20 54 72 75 73 74 53 74 61 74 75 73       TrustStatus
5390: 3b 0a 09 44 57 4f 52 44 20 20 20 20 20 20 20 20  ;..DWORD        
53a0: 20 20 20 20 20 20 20 20 20 63 43 68 61 69 6e 3b           cChain;
53b0: 0a 09 50 43 45 52 54 5f 53 49 4d 50 4c 45 5f 43  ..PCERT_SIMPLE_C
53c0: 48 41 49 4e 2a 20 20 20 72 67 70 43 68 61 69 6e  HAIN*   rgpChain
53d0: 3b 0a 09 44 57 4f 52 44 20 20 20 20 20 20 20 20  ;..DWORD        
53e0: 20 20 20 20 20 20 20 20 20 63 4c 6f 77 65 72 51           cLowerQ
53f0: 75 61 6c 69 74 79 43 68 61 69 6e 43 6f 6e 74 65  ualityChainConte
5400: 78 74 3b 0a 09 50 43 43 45 52 54 5f 43 48 41 49  xt;..PCCERT_CHAI
5410: 4e 5f 43 4f 4e 54 45 58 54 2a 20 72 67 70 4c 6f  N_CONTEXT* rgpLo
5420: 77 65 72 51 75 61 6c 69 74 79 43 68 61 69 6e 43  werQualityChainC
5430: 6f 6e 74 65 78 74 3b 0a 09 42 4f 4f 4c 20 20 20  ontext;..BOOL   
5440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
5450: 48 61 73 52 65 76 6f 63 61 74 69 6f 6e 46 72 65  HasRevocationFre
5460: 73 68 6e 65 73 73 54 69 6d 65 3b 0a 09 44 57 4f  shnessTime;..DWO
5470: 52 44 20 20 20 20 20 20 20 20 20 20 20 20 20 20  RD              
5480: 20 20 20 64 77 52 65 76 6f 63 61 74 69 6f 6e 46     dwRevocationF
5490: 72 65 73 68 6e 65 73 73 54 69 6d 65 3b 0a 7d 0a  reshnessTime;.}.
54a0: 61 6c 69 61 73 20 43 45 52 54 5f 43 48 41 49 4e  alias CERT_CHAIN
54b0: 5f 43 4f 4e 54 45 58 54 2a 20 50 43 45 52 54 5f  _CONTEXT* PCERT_
54c0: 43 48 41 49 4e 5f 43 4f 4e 54 45 58 54 3b 0a 2f  CHAIN_CONTEXT;./
54d0: 2a 20 23 65 6e 64 69 66 20 2a 2f 0a 0a 73 74 72  * #endif */..str
54e0: 75 63 74 20 50 52 4f 56 5f 45 4e 55 4d 41 4c 47  uct PROV_ENUMALG
54f0: 53 20 7b 0a 09 41 4c 47 5f 49 44 20 20 20 61 69  S {..ALG_ID   ai
5500: 41 6c 67 69 64 3b 0a 09 44 57 4f 52 44 20 20 20  Algid;..DWORD   
5510: 20 64 77 42 69 74 4c 65 6e 3b 0a 09 44 57 4f 52   dwBitLen;..DWOR
5520: 44 20 20 20 20 64 77 4e 61 6d 65 4c 65 6e 3b 0a  D    dwNameLen;.
5530: 09 43 48 41 52 5b 32 30 5d 20 73 7a 4e 61 6d 65  .CHAR[20] szName
5540: 3b 0a 7d 0a 0a 73 74 72 75 63 74 20 50 55 42 4c  ;.}..struct PUBL
5550: 49 43 4b 45 59 53 54 52 55 43 20 7b 0a 09 42 59  ICKEYSTRUC {..BY
5560: 54 45 20 20 20 62 54 79 70 65 3b 0a 09 42 59 54  TE   bType;..BYT
5570: 45 20 20 20 62 56 65 72 73 69 6f 6e 3b 0a 09 57  E   bVersion;..W
5580: 4f 52 44 20 20 20 72 65 73 65 72 76 65 64 3b 0a  ORD   reserved;.
5590: 09 41 4c 47 5f 49 44 20 61 69 4b 65 79 41 6c 67  .ALG_ID aiKeyAlg
55a0: 3b 0a 7d 0a 61 6c 69 61 73 20 50 55 42 4c 49 43  ;.}.alias PUBLIC
55b0: 4b 45 59 53 54 52 55 43 20 42 4c 4f 42 48 45 41  KEYSTRUC BLOBHEA
55c0: 44 45 52 3b 0a 0a 73 74 72 75 63 74 20 52 53 41  DER;..struct RSA
55d0: 50 55 42 4b 45 59 20 7b 0a 09 44 57 4f 52 44 20  PUBKEY {..DWORD 
55e0: 6d 61 67 69 63 3b 0a 09 44 57 4f 52 44 20 62 69  magic;..DWORD bi
55f0: 74 6c 65 6e 3b 0a 09 44 57 4f 52 44 20 70 75 62  tlen;..DWORD pub
5600: 65 78 70 3b 0a 7d 0a 0a 73 74 72 75 63 74 20 48  exp;.}..struct H
5610: 4d 41 43 5f 49 4e 46 4f 20 7b 0a 09 41 4c 47 5f  MAC_INFO {..ALG_
5620: 49 44 20 48 61 73 68 41 6c 67 69 64 3b 0a 09 42  ID HashAlgid;..B
5630: 59 54 45 2a 20 20 70 62 49 6e 6e 65 72 53 74 72  YTE*  pbInnerStr
5640: 69 6e 67 3b 0a 09 44 57 4f 52 44 20 20 63 62 49  ing;..DWORD  cbI
5650: 6e 6e 65 72 53 74 72 69 6e 67 3b 0a 09 42 59 54  nnerString;..BYT
5660: 45 2a 20 20 70 62 4f 75 74 65 72 53 74 72 69 6e  E*  pbOuterStrin
5670: 67 3b 0a 09 44 57 4f 52 44 20 20 63 62 4f 75 74  g;..DWORD  cbOut
5680: 65 72 53 74 72 69 6e 67 3b 0a 7d 0a 61 6c 69 61  erString;.}.alia
5690: 73 20 48 4d 41 43 5f 49 4e 46 4f 2a 20 50 48 4d  s HMAC_INFO* PHM
56a0: 41 43 5f 49 4e 46 4f 3b 0a 0a 65 78 74 65 72 6e  AC_INFO;..extern
56b0: 20 28 57 69 6e 64 6f 77 73 29 20 7b 0a 09 42 4f   (Windows) {..BO
56c0: 4f 4c 20 43 65 72 74 43 6c 6f 73 65 53 74 6f 72  OL CertCloseStor
56d0: 65 28 48 43 45 52 54 53 54 4f 52 45 2c 20 44 57  e(HCERTSTORE, DW
56e0: 4f 52 44 29 3b 0a 09 42 4f 4f 4c 20 43 65 72 74  ORD);..BOOL Cert
56f0: 47 65 74 43 65 72 74 69 66 69 63 61 74 65 43 68  GetCertificateCh
5700: 61 69 6e 28 48 43 45 52 54 43 48 41 49 4e 45 4e  ain(HCERTCHAINEN
5710: 47 49 4e 45 2c 20 50 43 43 45 52 54 5f 43 4f 4e  GINE, PCCERT_CON
5720: 54 45 58 54 2c 20 4c 50 46 49 4c 45 54 49 4d 45  TEXT, LPFILETIME
5730: 2c 0a 09 20 20 48 43 45 52 54 53 54 4f 52 45 2c  ,..  HCERTSTORE,
5740: 20 50 43 45 52 54 5f 43 48 41 49 4e 5f 50 41 52   PCERT_CHAIN_PAR
5750: 41 2c 20 44 57 4f 52 44 2c 20 4c 50 56 4f 49 44  A, DWORD, LPVOID
5760: 2c 20 50 43 43 45 52 54 5f 43 48 41 49 4e 5f 43  , PCCERT_CHAIN_C
5770: 4f 4e 54 45 58 54 2a 29 3b 0a 09 42 4f 4f 4c 20  ONTEXT*);..BOOL 
5780: 43 65 72 74 56 65 72 69 66 79 43 65 72 74 69 66  CertVerifyCertif
5790: 69 63 61 74 65 43 68 61 69 6e 50 6f 6c 69 63 79  icateChainPolicy
57a0: 28 4c 50 43 53 54 52 2c 20 50 43 43 45 52 54 5f  (LPCSTR, PCCERT_
57b0: 43 48 41 49 4e 5f 43 4f 4e 54 45 58 54 2c 0a 09  CHAIN_CONTEXT,..
57c0: 20 20 50 43 45 52 54 5f 43 48 41 49 4e 5f 50 4f    PCERT_CHAIN_PO
57d0: 4c 49 43 59 5f 50 41 52 41 2c 20 50 43 45 52 54  LICY_PARA, PCERT
57e0: 5f 43 48 41 49 4e 5f 50 4f 4c 49 43 59 5f 53 54  _CHAIN_POLICY_ST
57f0: 41 54 55 53 29 3b 0a 09 76 6f 69 64 20 43 65 72  ATUS);..void Cer
5800: 74 46 72 65 65 43 65 72 74 69 66 69 63 61 74 65  tFreeCertificate
5810: 43 68 61 69 6e 28 50 43 43 45 52 54 5f 43 48 41  Chain(PCCERT_CHA
5820: 49 4e 5f 43 4f 4e 54 45 58 54 29 3b 0a 09 44 57  IN_CONTEXT);..DW
5830: 4f 52 44 20 43 65 72 74 4e 61 6d 65 54 6f 53 74  ORD CertNameToSt
5840: 72 41 28 44 57 4f 52 44 2c 20 50 43 45 52 54 5f  rA(DWORD, PCERT_
5850: 4e 41 4d 45 5f 42 4c 4f 42 2c 20 44 57 4f 52 44  NAME_BLOB, DWORD
5860: 2c 20 4c 50 53 54 52 2c 20 44 57 4f 52 44 29 3b  , LPSTR, DWORD);
5870: 0a 09 44 57 4f 52 44 20 43 65 72 74 4e 61 6d 65  ..DWORD CertName
5880: 54 6f 53 74 72 57 28 44 57 4f 52 44 2c 20 50 43  ToStrW(DWORD, PC
5890: 45 52 54 5f 4e 41 4d 45 5f 42 4c 4f 42 2c 20 44  ERT_NAME_BLOB, D
58a0: 57 4f 52 44 2c 20 4c 50 57 53 54 52 2c 20 44 57  WORD, LPWSTR, DW
58b0: 4f 52 44 29 3b 0a 09 48 43 45 52 54 53 54 4f 52  ORD);..HCERTSTOR
58c0: 45 20 43 65 72 74 4f 70 65 6e 53 79 73 74 65 6d  E CertOpenSystem
58d0: 53 74 6f 72 65 41 28 48 43 52 59 50 54 50 52 4f  StoreA(HCRYPTPRO
58e0: 56 2c 20 4c 50 43 53 54 52 29 3b 0a 09 48 43 45  V, LPCSTR);..HCE
58f0: 52 54 53 54 4f 52 45 20 43 65 72 74 4f 70 65 6e  RTSTORE CertOpen
5900: 53 79 73 74 65 6d 53 74 6f 72 65 57 28 48 43 52  SystemStoreW(HCR
5910: 59 50 54 50 52 4f 56 2c 20 4c 50 43 57 53 54 52  YPTPROV, LPCWSTR
5920: 29 3b 0a 09 48 43 45 52 54 53 54 4f 52 45 20 43  );..HCERTSTORE C
5930: 65 72 74 4f 70 65 6e 53 74 6f 72 65 28 4c 50 43  ertOpenStore(LPC
5940: 53 54 52 2c 20 44 57 4f 52 44 2c 20 48 43 52 59  STR, DWORD, HCRY
5950: 50 54 50 52 4f 56 2c 20 44 57 4f 52 44 2c 20 43  PTPROV, DWORD, C
5960: 50 74 72 21 28 76 6f 69 64 29 29 3b 0a 09 50 43  Ptr!(void));..PC
5970: 43 45 52 54 5f 43 4f 4e 54 45 58 54 20 43 65 72  CERT_CONTEXT Cer
5980: 74 46 69 6e 64 43 65 72 74 69 66 69 63 61 74 65  tFindCertificate
5990: 49 6e 53 74 6f 72 65 28 48 43 45 52 54 53 54 4f  InStore(HCERTSTO
59a0: 52 45 2c 20 44 57 4f 52 44 2c 20 44 57 4f 52 44  RE, DWORD, DWORD
59b0: 2c 20 44 57 4f 52 44 2c 0a 09 20 20 43 50 74 72  , DWORD,..  CPtr
59c0: 21 28 76 6f 69 64 29 2c 20 50 43 43 45 52 54 5f  !(void), PCCERT_
59d0: 43 4f 4e 54 45 58 54 29 3b 0a 09 42 4f 4f 4c 20  CONTEXT);..BOOL 
59e0: 43 65 72 74 46 72 65 65 43 65 72 74 69 66 69 63  CertFreeCertific
59f0: 61 74 65 43 6f 6e 74 65 78 74 28 50 43 43 45 52  ateContext(PCCER
5a00: 54 5f 43 4f 4e 54 45 58 54 29 3b 0a 09 50 43 43  T_CONTEXT);..PCC
5a10: 45 52 54 5f 43 4f 4e 54 45 58 54 20 43 65 72 74  ERT_CONTEXT Cert
5a20: 47 65 74 49 73 73 75 65 72 43 65 72 74 69 66 69  GetIssuerCertifi
5a30: 63 61 74 65 46 72 6f 6d 53 74 6f 72 65 28 48 43  cateFromStore(HC
5a40: 45 52 54 53 54 4f 52 45 2c 0a 09 20 20 50 43 43  ERTSTORE,..  PCC
5a50: 45 52 54 5f 43 4f 4e 54 45 58 54 2c 20 50 43 43  ERT_CONTEXT, PCC
5a60: 45 52 54 5f 43 4f 4e 54 45 58 54 2c 20 44 57 4f  ERT_CONTEXT, DWO
5a70: 52 44 2a 29 3b 0a 09 50 43 43 45 52 54 5f 43 48  RD*);..PCCERT_CH
5a80: 41 49 4e 5f 43 4f 4e 54 45 58 54 20 43 65 72 74  AIN_CONTEXT Cert
5a90: 46 69 6e 64 43 68 61 69 6e 49 6e 53 74 6f 72 65  FindChainInStore
5aa0: 28 48 43 45 52 54 53 54 4f 52 45 2c 20 44 57 4f  (HCERTSTORE, DWO
5ab0: 52 44 2c 20 44 57 4f 52 44 2c 20 44 57 4f 52 44  RD, DWORD, DWORD
5ac0: 2c 0a 09 20 20 43 50 74 72 21 28 76 6f 69 64 29  ,..  CPtr!(void)
5ad0: 2c 20 50 43 43 45 52 54 5f 43 48 41 49 4e 5f 43  , PCCERT_CHAIN_C
5ae0: 4f 4e 54 45 58 54 29 3b 0a 0a 09 42 4f 4f 4c 20  ONTEXT);...BOOL 
5af0: 43 72 79 70 74 41 63 71 75 69 72 65 43 6f 6e 74  CryptAcquireCont
5b00: 65 78 74 41 28 48 43 52 59 50 54 50 52 4f 56 2a  extA(HCRYPTPROV*
5b10: 2c 20 4c 50 43 53 54 52 2c 20 4c 50 43 53 54 52  , LPCSTR, LPCSTR
5b20: 2c 20 44 57 4f 52 44 2c 20 44 57 4f 52 44 29 3b  , DWORD, DWORD);
5b30: 0a 09 42 4f 4f 4c 20 43 72 79 70 74 41 63 71 75  ..BOOL CryptAcqu
5b40: 69 72 65 43 6f 6e 74 65 78 74 57 28 48 43 52 59  ireContextW(HCRY
5b50: 50 54 50 52 4f 56 2a 2c 20 4c 50 43 57 53 54 52  PTPROV*, LPCWSTR
5b60: 2c 20 4c 50 43 57 53 54 52 2c 20 44 57 4f 52 44  , LPCWSTR, DWORD
5b70: 2c 20 44 57 4f 52 44 29 3b 0a 09 20 42 4f 4f 4c  , DWORD);.. BOOL
5b80: 20 43 72 79 70 74 43 6f 6e 74 65 78 74 41 64 64   CryptContextAdd
5b90: 52 65 66 28 48 43 52 59 50 54 50 52 4f 56 2c 20  Ref(HCRYPTPROV, 
5ba0: 44 57 4f 52 44 2a 2c 20 44 57 4f 52 44 29 3b 0a  DWORD*, DWORD);.
5bb0: 09 42 4f 4f 4c 20 43 72 79 70 74 52 65 6c 65 61  .BOOL CryptRelea
5bc0: 73 65 43 6f 6e 74 65 78 74 28 48 43 52 59 50 54  seContext(HCRYPT
5bd0: 50 52 4f 56 2c 20 44 57 4f 52 44 29 3b 0a 09 42  PROV, DWORD);..B
5be0: 4f 4f 4c 20 43 72 79 70 74 47 65 6e 4b 65 79 28  OOL CryptGenKey(
5bf0: 48 43 52 59 50 54 50 52 4f 56 2c 20 41 4c 47 5f  HCRYPTPROV, ALG_
5c00: 49 44 2c 20 44 57 4f 52 44 2c 20 48 43 52 59 50  ID, DWORD, HCRYP
5c10: 54 4b 45 59 2a 29 3b 0a 09 42 4f 4f 4c 20 43 72  TKEY*);..BOOL Cr
5c20: 79 70 74 44 65 72 69 76 65 4b 65 79 28 48 43 52  yptDeriveKey(HCR
5c30: 59 50 54 50 52 4f 56 2c 20 41 4c 47 5f 49 44 2c  YPTPROV, ALG_ID,
5c40: 20 48 43 52 59 50 54 48 41 53 48 2c 20 44 57 4f   HCRYPTHASH, DWO
5c50: 52 44 2c 20 48 43 52 59 50 54 4b 45 59 2a 29 3b  RD, HCRYPTKEY*);
5c60: 0a 09 42 4f 4f 4c 20 43 72 79 70 74 44 65 73 74  ..BOOL CryptDest
5c70: 72 6f 79 4b 65 79 28 48 43 52 59 50 54 4b 45 59  royKey(HCRYPTKEY
5c80: 29 3b 0a 09 73 74 61 74 69 63 20 69 66 20 28 57  );..static if (W
5c90: 49 4e 56 45 52 20 3e 3d 20 30 78 30 35 30 30 29  INVER >= 0x0500)
5ca0: 20 7b 0a 09 09 42 4f 4f 4c 20 43 72 79 70 74 44   {...BOOL CryptD
5cb0: 75 70 6c 69 63 61 74 65 48 61 73 68 28 48 43 52  uplicateHash(HCR
5cc0: 59 50 54 48 41 53 48 2c 20 44 57 4f 52 44 2a 2c  YPTHASH, DWORD*,
5cd0: 20 44 57 4f 52 44 2c 20 48 43 52 59 50 54 48 41   DWORD, HCRYPTHA
5ce0: 53 48 2a 29 3b 0a 09 09 42 4f 4f 4c 20 43 72 79  SH*);...BOOL Cry
5cf0: 70 74 44 75 70 6c 69 63 61 74 65 4b 65 79 28 48  ptDuplicateKey(H
5d00: 43 52 59 50 54 4b 45 59 2c 20 44 57 4f 52 44 2a  CRYPTKEY, DWORD*
5d10: 2c 20 44 57 4f 52 44 2c 20 48 43 52 59 50 54 4b  , DWORD, HCRYPTK
5d20: 45 59 2a 29 3b 0a 09 7d 0a 09 42 4f 4f 4c 20 43  EY*);..}..BOOL C
5d30: 72 79 70 74 53 65 74 4b 65 79 50 61 72 61 6d 28  ryptSetKeyParam(
5d40: 48 43 52 59 50 54 4b 45 59 2c 20 44 57 4f 52 44  HCRYPTKEY, DWORD
5d50: 2c 20 50 42 59 54 45 2c 20 44 57 4f 52 44 29 3b  , PBYTE, DWORD);
5d60: 0a 09 42 4f 4f 4c 20 43 72 79 70 74 47 65 74 4b  ..BOOL CryptGetK
5d70: 65 79 50 61 72 61 6d 28 48 43 52 59 50 54 4b 45  eyParam(HCRYPTKE
5d80: 59 2c 20 44 57 4f 52 44 2c 20 50 42 59 54 45 2c  Y, DWORD, PBYTE,
5d90: 20 50 44 57 4f 52 44 2c 20 44 57 4f 52 44 29 3b   PDWORD, DWORD);
5da0: 0a 09 42 4f 4f 4c 20 43 72 79 70 74 53 65 74 48  ..BOOL CryptSetH
5db0: 61 73 68 50 61 72 61 6d 28 48 43 52 59 50 54 48  ashParam(HCRYPTH
5dc0: 41 53 48 2c 20 44 57 4f 52 44 2c 20 50 42 59 54  ASH, DWORD, PBYT
5dd0: 45 2c 20 44 57 4f 52 44 29 3b 0a 09 42 4f 4f 4c  E, DWORD);..BOOL
5de0: 20 43 72 79 70 74 47 65 74 48 61 73 68 50 61 72   CryptGetHashPar
5df0: 61 6d 28 48 43 52 59 50 54 48 41 53 48 2c 20 44  am(HCRYPTHASH, D
5e00: 57 4f 52 44 2c 20 50 42 59 54 45 2c 20 50 44 57  WORD, PBYTE, PDW
5e10: 4f 52 44 2c 20 44 57 4f 52 44 29 3b 0a 09 42 4f  ORD, DWORD);..BO
5e20: 4f 4c 20 43 72 79 70 74 53 65 74 50 72 6f 76 50  OL CryptSetProvP
5e30: 61 72 61 6d 28 48 43 52 59 50 54 50 52 4f 56 2c  aram(HCRYPTPROV,
5e40: 20 44 57 4f 52 44 2c 20 50 42 59 54 45 2c 20 44   DWORD, PBYTE, D
5e50: 57 4f 52 44 29 3b 0a 09 42 4f 4f 4c 20 43 72 79  WORD);..BOOL Cry
5e60: 70 74 47 65 74 50 72 6f 76 50 61 72 61 6d 28 48  ptGetProvParam(H
5e70: 43 52 59 50 54 50 52 4f 56 2c 20 44 57 4f 52 44  CRYPTPROV, DWORD
5e80: 2c 20 50 42 59 54 45 2c 20 50 44 57 4f 52 44 2c  , PBYTE, PDWORD,
5e90: 20 44 57 4f 52 44 29 3b 0a 09 42 4f 4f 4c 20 43   DWORD);..BOOL C
5ea0: 72 79 70 74 47 65 6e 52 61 6e 64 6f 6d 28 48 43  ryptGenRandom(HC
5eb0: 52 59 50 54 50 52 4f 56 2c 20 44 57 4f 52 44 2c  RYPTPROV, DWORD,
5ec0: 20 50 42 59 54 45 29 3b 0a 09 42 4f 4f 4c 20 43   PBYTE);..BOOL C
5ed0: 72 79 70 74 47 65 74 55 73 65 72 4b 65 79 28 48  ryptGetUserKey(H
5ee0: 43 52 59 50 54 50 52 4f 56 2c 20 44 57 4f 52 44  CRYPTPROV, DWORD
5ef0: 2c 20 48 43 52 59 50 54 4b 45 59 2a 29 3b 0a 09  , HCRYPTKEY*);..
5f00: 42 4f 4f 4c 20 43 72 79 70 74 45 78 70 6f 72 74  BOOL CryptExport
5f10: 4b 65 79 28 48 43 52 59 50 54 4b 45 59 2c 20 48  Key(HCRYPTKEY, H
5f20: 43 52 59 50 54 4b 45 59 2c 20 44 57 4f 52 44 2c  CRYPTKEY, DWORD,
5f30: 20 44 57 4f 52 44 2c 20 50 42 59 54 45 2c 20 50   DWORD, PBYTE, P
5f40: 44 57 4f 52 44 29 3b 0a 09 42 4f 4f 4c 20 43 72  DWORD);..BOOL Cr
5f50: 79 70 74 49 6d 70 6f 72 74 4b 65 79 28 48 43 52  yptImportKey(HCR
5f60: 59 50 54 50 52 4f 56 2c 20 50 42 59 54 45 2c 20  YPTPROV, PBYTE, 
5f70: 44 57 4f 52 44 2c 20 48 43 52 59 50 54 4b 45 59  DWORD, HCRYPTKEY
5f80: 2c 20 44 57 4f 52 44 2c 0a 09 20 20 48 43 52 59  , DWORD,..  HCRY
5f90: 50 54 4b 45 59 2a 29 3b 0a 09 42 4f 4f 4c 20 43  PTKEY*);..BOOL C
5fa0: 72 79 70 74 45 6e 63 72 79 70 74 28 48 43 52 59  ryptEncrypt(HCRY
5fb0: 50 54 4b 45 59 2c 20 48 43 52 59 50 54 48 41 53  PTKEY, HCRYPTHAS
5fc0: 48 2c 20 42 4f 4f 4c 2c 20 44 57 4f 52 44 2c 20  H, BOOL, DWORD, 
5fd0: 50 42 59 54 45 2c 20 50 44 57 4f 52 44 2c 0a 09  PBYTE, PDWORD,..
5fe0: 20 20 44 57 4f 52 44 29 3b 0a 09 42 4f 4f 4c 20    DWORD);..BOOL 
5ff0: 43 72 79 70 74 44 65 63 72 79 70 74 28 48 43 52  CryptDecrypt(HCR
6000: 59 50 54 4b 45 59 2c 20 48 43 52 59 50 54 48 41  YPTKEY, HCRYPTHA
6010: 53 48 2c 20 42 4f 4f 4c 2c 20 44 57 4f 52 44 2c  SH, BOOL, DWORD,
6020: 20 50 42 59 54 45 2c 20 50 44 57 4f 52 44 29 3b   PBYTE, PDWORD);
6030: 0a 09 42 4f 4f 4c 20 43 72 79 70 74 43 72 65 61  ..BOOL CryptCrea
6040: 74 65 48 61 73 68 28 48 43 52 59 50 54 50 52 4f  teHash(HCRYPTPRO
6050: 56 2c 20 41 4c 47 5f 49 44 2c 20 48 43 52 59 50  V, ALG_ID, HCRYP
6060: 54 4b 45 59 2c 20 44 57 4f 52 44 2c 20 48 43 52  TKEY, DWORD, HCR
6070: 59 50 54 48 41 53 48 2a 29 3b 0a 09 42 4f 4f 4c  YPTHASH*);..BOOL
6080: 20 43 72 79 70 74 48 61 73 68 44 61 74 61 28 48   CryptHashData(H
6090: 43 52 59 50 54 48 41 53 48 2c 20 50 42 59 54 45  CRYPTHASH, PBYTE
60a0: 2c 20 44 57 4f 52 44 2c 20 44 57 4f 52 44 29 3b  , DWORD, DWORD);
60b0: 0a 09 42 4f 4f 4c 20 43 72 79 70 74 48 61 73 68  ..BOOL CryptHash
60c0: 53 65 73 73 69 6f 6e 4b 65 79 28 48 43 52 59 50  SessionKey(HCRYP
60d0: 54 48 41 53 48 2c 20 48 43 52 59 50 54 4b 45 59  THASH, HCRYPTKEY
60e0: 2c 20 44 57 4f 52 44 29 3b 0a 09 42 4f 4f 4c 20  , DWORD);..BOOL 
60f0: 43 72 79 70 74 47 65 74 48 61 73 68 56 61 6c 75  CryptGetHashValu
6100: 65 28 48 43 52 59 50 54 48 41 53 48 2c 20 44 57  e(HCRYPTHASH, DW
6110: 4f 52 44 2c 20 50 42 59 54 45 2c 20 50 44 57 4f  ORD, PBYTE, PDWO
6120: 52 44 29 3b 0a 09 42 4f 4f 4c 20 43 72 79 70 74  RD);..BOOL Crypt
6130: 44 65 73 74 72 6f 79 48 61 73 68 28 48 43 52 59  DestroyHash(HCRY
6140: 50 54 48 41 53 48 29 3b 0a 09 42 4f 4f 4c 20 43  PTHASH);..BOOL C
6150: 72 79 70 74 53 69 67 6e 48 61 73 68 41 28 48 43  ryptSignHashA(HC
6160: 52 59 50 54 48 41 53 48 2c 20 44 57 4f 52 44 2c  RYPTHASH, DWORD,
6170: 20 4c 50 43 53 54 52 2c 20 44 57 4f 52 44 2c 20   LPCSTR, DWORD, 
6180: 50 42 59 54 45 2c 20 50 44 57 4f 52 44 29 3b 0a  PBYTE, PDWORD);.
6190: 09 42 4f 4f 4c 20 43 72 79 70 74 53 69 67 6e 48  .BOOL CryptSignH
61a0: 61 73 68 57 28 48 43 52 59 50 54 48 41 53 48 2c  ashW(HCRYPTHASH,
61b0: 20 44 57 4f 52 44 2c 20 4c 50 43 57 53 54 52 2c   DWORD, LPCWSTR,
61c0: 20 44 57 4f 52 44 2c 20 50 42 59 54 45 2c 20 50   DWORD, PBYTE, P
61d0: 44 57 4f 52 44 29 3b 0a 09 42 4f 4f 4c 20 43 72  DWORD);..BOOL Cr
61e0: 79 70 74 56 65 72 69 66 79 53 69 67 6e 61 74 75  yptVerifySignatu
61f0: 72 65 41 28 48 43 52 59 50 54 48 41 53 48 2c 20  reA(HCRYPTHASH, 
6200: 50 42 59 54 45 2c 20 44 57 4f 52 44 2c 20 48 43  PBYTE, DWORD, HC
6210: 52 59 50 54 4b 45 59 2c 20 4c 50 43 53 54 52 2c  RYPTKEY, LPCSTR,
6220: 0a 09 20 20 44 57 4f 52 44 29 3b 0a 09 42 4f 4f  ..  DWORD);..BOO
6230: 4c 20 43 72 79 70 74 56 65 72 69 66 79 53 69 67  L CryptVerifySig
6240: 6e 61 74 75 72 65 57 28 48 43 52 59 50 54 48 41  natureW(HCRYPTHA
6250: 53 48 2c 20 50 42 59 54 45 2c 20 44 57 4f 52 44  SH, PBYTE, DWORD
6260: 2c 20 48 43 52 59 50 54 4b 45 59 2c 20 4c 50 43  , HCRYPTKEY, LPC
6270: 57 53 54 52 2c 0a 09 20 20 44 57 4f 52 44 29 3b  WSTR,..  DWORD);
6280: 0a 09 42 4f 4f 4c 20 43 72 79 70 74 53 65 74 50  ..BOOL CryptSetP
6290: 72 6f 76 69 64 65 72 41 28 4c 50 43 53 54 52 2c  roviderA(LPCSTR,
62a0: 20 44 57 4f 52 44 29 3b 0a 09 42 4f 4f 4c 20 43   DWORD);..BOOL C
62b0: 72 79 70 74 53 65 74 50 72 6f 76 69 64 65 72 57  ryptSetProviderW
62c0: 28 4c 50 43 57 53 54 52 2c 20 44 57 4f 52 44 29  (LPCWSTR, DWORD)
62d0: 3b 0a 7d 0a 0a 76 65 72 73 69 6f 6e 20 28 55 6e  ;.}..version (Un
62e0: 69 63 6f 64 65 29 20 7b 0a 09 61 6c 69 61 73 20  icode) {..alias 
62f0: 43 65 72 74 4e 61 6d 65 54 6f 53 74 72 57 20 43  CertNameToStrW C
6300: 65 72 74 4e 61 6d 65 54 6f 53 74 72 3b 0a 09 61  ertNameToStr;..a
6310: 6c 69 61 73 20 43 72 79 70 74 41 63 71 75 69 72  lias CryptAcquir
6320: 65 43 6f 6e 74 65 78 74 57 20 43 72 79 70 74 41  eContextW CryptA
6330: 63 71 75 69 72 65 43 6f 6e 74 65 78 74 3b 0a 09  cquireContext;..
6340: 61 6c 69 61 73 20 43 72 79 70 74 53 69 67 6e 48  alias CryptSignH
6350: 61 73 68 57 20 43 72 79 70 74 53 69 67 6e 48 61  ashW CryptSignHa
6360: 73 68 3b 0a 09 61 6c 69 61 73 20 43 72 79 70 74  sh;..alias Crypt
6370: 56 65 72 69 66 79 53 69 67 6e 61 74 75 72 65 57  VerifySignatureW
6380: 20 43 72 79 70 74 56 65 72 69 66 79 53 69 67 6e   CryptVerifySign
6390: 61 74 75 72 65 3b 0a 09 61 6c 69 61 73 20 43 72  ature;..alias Cr
63a0: 79 70 74 53 65 74 50 72 6f 76 69 64 65 72 57 20  yptSetProviderW 
63b0: 43 72 79 70 74 53 65 74 50 72 6f 76 69 64 65 72  CryptSetProvider
63c0: 3b 0a 09 61 6c 69 61 73 20 43 65 72 74 4f 70 65  ;..alias CertOpe
63d0: 6e 53 79 73 74 65 6d 53 74 6f 72 65 57 20 43 65  nSystemStoreW Ce
63e0: 72 74 4f 70 65 6e 53 79 73 74 65 6d 53 74 6f 72  rtOpenSystemStor
63f0: 65 3b 0a 09 2f 2b 61 6c 69 61 73 20 43 45 52 54  e;../+alias CERT
6400: 5f 46 49 4e 44 5f 53 55 42 4a 45 43 54 5f 53 54  _FIND_SUBJECT_ST
6410: 52 5f 57 20 43 45 52 54 5f 46 49 4e 44 5f 53 55  R_W CERT_FIND_SU
6420: 42 4a 45 43 54 5f 53 54 52 3b 0a 09 61 6c 69 61  BJECT_STR;..alia
6430: 73 20 43 45 52 54 5f 46 49 4e 44 5f 49 53 53 55  s CERT_FIND_ISSU
6440: 45 52 5f 53 54 52 5f 57 20 43 45 52 54 5f 46 49  ER_STR_W CERT_FI
6450: 4e 44 5f 49 53 53 55 45 52 5f 53 54 52 3b 2b 2f  ND_ISSUER_STR;+/
6460: 0a 7d 20 65 6c 73 65 20 7b 0a 09 61 6c 69 61 73  .} else {..alias
6470: 20 43 65 72 74 4e 61 6d 65 54 6f 53 74 72 41 20   CertNameToStrA 
6480: 43 65 72 74 4e 61 6d 65 54 6f 53 74 72 3b 0a 09  CertNameToStr;..
6490: 61 6c 69 61 73 20 43 72 79 70 74 41 63 71 75 69  alias CryptAcqui
64a0: 72 65 43 6f 6e 74 65 78 74 41 20 43 72 79 70 74  reContextA Crypt
64b0: 41 63 71 75 69 72 65 43 6f 6e 74 65 78 74 3b 0a  AcquireContext;.
64c0: 09 61 6c 69 61 73 20 43 72 79 70 74 53 69 67 6e  .alias CryptSign
64d0: 48 61 73 68 41 20 43 72 79 70 74 53 69 67 6e 48  HashA CryptSignH
64e0: 61 73 68 3b 0a 09 61 6c 69 61 73 20 43 72 79 70  ash;..alias Cryp
64f0: 74 56 65 72 69 66 79 53 69 67 6e 61 74 75 72 65  tVerifySignature
6500: 41 20 43 72 79 70 74 56 65 72 69 66 79 53 69 67  A CryptVerifySig
6510: 6e 61 74 75 72 65 3b 0a 09 61 6c 69 61 73 20 43  nature;..alias C
6520: 72 79 70 74 53 65 74 50 72 6f 76 69 64 65 72 41  ryptSetProviderA
6530: 20 43 72 79 70 74 53 65 74 50 72 6f 76 69 64 65   CryptSetProvide
6540: 72 3b 0a 09 61 6c 69 61 73 20 43 65 72 74 4f 70  r;..alias CertOp
6550: 65 6e 53 79 73 74 65 6d 53 74 6f 72 65 41 20 43  enSystemStoreA C
6560: 65 72 74 4f 70 65 6e 53 79 73 74 65 6d 53 74 6f  ertOpenSystemSto
6570: 72 65 3b 0a 09 2f 2b 61 6c 69 61 73 20 43 45 52  re;../+alias CER
6580: 54 5f 46 49 4e 44 5f 53 55 42 4a 45 43 54 5f 53  T_FIND_SUBJECT_S
6590: 54 52 5f 41 20 43 45 52 54 5f 46 49 4e 44 5f 53  TR_A CERT_FIND_S
65a0: 55 42 4a 45 43 54 5f 53 54 52 3b 0a 09 61 6c 69  UBJECT_STR;..ali
65b0: 61 73 20 43 45 52 54 5f 46 49 4e 44 5f 49 53 53  as CERT_FIND_ISS
65c0: 55 45 52 5f 53 54 52 5f 41 20 43 45 52 54 5f 46  UER_STR_A CERT_F
65d0: 49 4e 44 5f 49 53 53 55 45 52 5f 53 54 52 3b 2b  IND_ISSUER_STR;+
65e0: 2f 0a 7d 0a                                      /.}.