1extern crate libloading;
4pub struct SSP {
5 __library: ::libloading::Library,
6 pub GetLastError: unsafe extern "C" fn() -> DWORD,
7 pub CertOpenStore: unsafe extern "C" fn(
8 lpszStoreProvider: LPCSTR,
9 dwEncodingType: DWORD,
10 hCryptProv: HCRYPTPROV,
11 dwFlags: DWORD,
12 pvPara: *const ::std::os::raw::c_void,
13 ) -> HCERTSTORE,
14 pub CertCloseStore: unsafe extern "C" fn(hCertStore: HCERTSTORE, dwFlags: DWORD) -> BOOL,
15 pub CertEnumCertificatesInStore: unsafe extern "C" fn(
16 hCertStore: HCERTSTORE,
17 pPrevCertContext: PCCERT_CONTEXT,
18 ) -> PCCERT_CONTEXT,
19 pub CertFindCertificateInStore: unsafe extern "C" fn(
20 hCertStore: HCERTSTORE,
21 dwCertEncodingType: DWORD,
22 dwFindFlags: DWORD,
23 dwFindType: DWORD,
24 pvFindPara: *const ::std::os::raw::c_void,
25 pPrevCertContext: PCCERT_CONTEXT,
26 ) -> PCCERT_CONTEXT,
27 pub CertFreeCertificateContext: unsafe extern "C" fn(pCertContext: PCCERT_CONTEXT) -> BOOL,
28 pub CertGetCertificateContextProperty: unsafe extern "C" fn(
29 pCertContext: PCCERT_CONTEXT,
30 dwPropId: DWORD,
31 pvData: *mut ::std::os::raw::c_void,
32 pcbData: *mut DWORD,
33 ) -> BOOL,
34 pub CertEnumCertificateContextProperties:
35 unsafe extern "C" fn(pCertContext: PCCERT_CONTEXT, dwPropId: DWORD) -> DWORD,
36 pub CryptAcquireContextW: unsafe extern "C" fn(
37 phProv: *mut HCRYPTPROV,
38 pszContainer: LPCWSTR,
39 pszProvider: LPCWSTR,
40 dwProvType: DWORD,
41 dwFlags: DWORD,
42 ) -> BOOL,
43 pub CryptReleaseContext: unsafe extern "C" fn(hProv: HCRYPTPROV, dwFlags: DWORD) -> BOOL,
44 pub CryptGenKey: unsafe extern "C" fn(
45 hProv: HCRYPTPROV,
46 Algid: ALG_ID,
47 dwFlags: DWORD,
48 phKey: *mut HCRYPTKEY,
49 ) -> BOOL,
50 pub CryptDeriveKey: unsafe extern "C" fn(
51 hProv: HCRYPTPROV,
52 Algid: ALG_ID,
53 hBaseData: HCRYPTHASH,
54 dwFlags: DWORD,
55 phKey: *mut HCRYPTKEY,
56 ) -> BOOL,
57 pub CryptDestroyKey: unsafe extern "C" fn(hKey: HCRYPTKEY) -> BOOL,
58 pub CryptSetKeyParam: unsafe extern "C" fn(
59 hKey: HCRYPTKEY,
60 dwParam: DWORD,
61 pbData: *const BYTE,
62 dwFlags: DWORD,
63 ) -> BOOL,
64 pub CryptGetKeyParam: unsafe extern "C" fn(
65 hKey: HCRYPTKEY,
66 dwParam: DWORD,
67 pbData: *mut BYTE,
68 pdwDataLen: *mut DWORD,
69 dwFlags: DWORD,
70 ) -> BOOL,
71 pub CryptSetHashParam: unsafe extern "C" fn(
72 hHash: HCRYPTHASH,
73 dwParam: DWORD,
74 pbData: *const BYTE,
75 dwFlags: DWORD,
76 ) -> BOOL,
77 pub CryptGetHashParam: unsafe extern "C" fn(
78 hHash: HCRYPTHASH,
79 dwParam: DWORD,
80 pbData: *mut BYTE,
81 pdwDataLen: *mut DWORD,
82 dwFlags: DWORD,
83 ) -> BOOL,
84 pub CryptSetProvParam: unsafe extern "C" fn(
85 hProv: HCRYPTPROV,
86 dwParam: DWORD,
87 pbData: *const BYTE,
88 dwFlags: DWORD,
89 ) -> BOOL,
90 pub CryptGetProvParam: unsafe extern "C" fn(
91 hProv: HCRYPTPROV,
92 dwParam: DWORD,
93 pbData: *mut BYTE,
94 pdwDataLen: *mut DWORD,
95 dwFlags: DWORD,
96 ) -> BOOL,
97 pub CryptGenRandom:
98 unsafe extern "C" fn(hProv: HCRYPTPROV, dwLen: DWORD, pbBuffer: *mut BYTE) -> BOOL,
99 pub CryptGetUserKey: unsafe extern "C" fn(
100 hProv: HCRYPTPROV,
101 dwKeySpec: DWORD,
102 phUserKey: *mut HCRYPTKEY,
103 ) -> BOOL,
104 pub CryptExportKey: unsafe extern "C" fn(
105 hKey: HCRYPTKEY,
106 hExpKey: HCRYPTKEY,
107 dwBlobType: DWORD,
108 dwFlags: DWORD,
109 pbData: *mut BYTE,
110 pdwDataLen: *mut DWORD,
111 ) -> BOOL,
112 pub CryptImportKey: unsafe extern "C" fn(
113 hProv: HCRYPTPROV,
114 pbData: *const BYTE,
115 dwDataLen: DWORD,
116 hPubKey: HCRYPTKEY,
117 dwFlags: DWORD,
118 phKey: *mut HCRYPTKEY,
119 ) -> BOOL,
120 pub CryptEncrypt: unsafe extern "C" fn(
121 hKey: HCRYPTKEY,
122 hHash: HCRYPTHASH,
123 Final: BOOL,
124 dwFlags: DWORD,
125 pbData: *mut BYTE,
126 pdwDataLen: *mut DWORD,
127 dwBufLen: DWORD,
128 ) -> BOOL,
129 pub CryptDecrypt: unsafe extern "C" fn(
130 hKey: HCRYPTKEY,
131 hHash: HCRYPTHASH,
132 Final: BOOL,
133 dwFlags: DWORD,
134 pbData: *mut BYTE,
135 pdwDataLen: *mut DWORD,
136 ) -> BOOL,
137 pub CryptCreateHash: unsafe extern "C" fn(
138 hProv: HCRYPTPROV,
139 Algid: ALG_ID,
140 hKey: HCRYPTKEY,
141 dwFlags: DWORD,
142 phHash: *mut HCRYPTHASH,
143 ) -> BOOL,
144 pub CryptHashData: unsafe extern "C" fn(
145 hHash: HCRYPTHASH,
146 pbData: *const BYTE,
147 dwDataLen: DWORD,
148 dwFlags: DWORD,
149 ) -> BOOL,
150 pub CryptHashSessionKey:
151 unsafe extern "C" fn(hHash: HCRYPTHASH, hKey: HCRYPTKEY, dwFlags: DWORD) -> BOOL,
152 pub CryptDestroyHash: unsafe extern "C" fn(hHash: HCRYPTHASH) -> BOOL,
153 pub CryptSignHashA: unsafe extern "C" fn(
154 hHash: HCRYPTHASH,
155 dwKeySpec: DWORD,
156 szDescription: LPCSTR,
157 dwFlags: DWORD,
158 pbSignature: *mut BYTE,
159 pdwSigLen: *mut DWORD,
160 ) -> BOOL,
161 pub CryptVerifySignatureA: unsafe extern "C" fn(
162 hHash: HCRYPTHASH,
163 pbSignature: *const BYTE,
164 dwSigLen: DWORD,
165 hPubKey: HCRYPTKEY,
166 szDescription: LPCSTR,
167 dwFlags: DWORD,
168 ) -> BOOL,
169 pub CryptDuplicateKey: unsafe extern "C" fn(
170 hKey: HCRYPTKEY,
171 pdwReserved: *mut DWORD,
172 dwFlags: DWORD,
173 phKey: *mut HCRYPTKEY,
174 ) -> BOOL,
175 pub CryptDuplicateHash: unsafe extern "C" fn(
176 hHash: HCRYPTHASH,
177 pdwReserved: *mut DWORD,
178 dwFlags: DWORD,
179 phHash: *mut HCRYPTHASH,
180 ) -> BOOL,
181 pub CryptEnumProvidersA: unsafe extern "C" fn(
182 dwIndex: DWORD,
183 pdwReserved: *mut DWORD,
184 dwFlags: DWORD,
185 pdwProvType: *mut DWORD,
186 szProvName: LPSTR,
187 pcbProvName: *mut DWORD,
188 ) -> BOOL,
189}
190impl SSP {
191 pub unsafe fn new<P>(path: P) -> Result<Self, ::libloading::Error>
192 where
193 P: AsRef<::std::ffi::OsStr>,
194 {
195 let library = ::libloading::Library::new(path)?;
196 Self::from_library(library)
197 }
198 pub unsafe fn from_library<L>(library: L) -> Result<Self, ::libloading::Error>
199 where
200 L: Into<::libloading::Library>,
201 {
202 let __library = library.into();
203 let GetLastError = __library.get(b"GetLastError\0").map(|sym| *sym)?;
204 let CertOpenStore = __library.get(b"CertOpenStore\0").map(|sym| *sym)?;
205 let CertCloseStore = __library.get(b"CertCloseStore\0").map(|sym| *sym)?;
206 let CertEnumCertificatesInStore = __library
207 .get(b"CertEnumCertificatesInStore\0")
208 .map(|sym| *sym)?;
209 let CertFindCertificateInStore = __library
210 .get(b"CertFindCertificateInStore\0")
211 .map(|sym| *sym)?;
212 let CertFreeCertificateContext = __library
213 .get(b"CertFreeCertificateContext\0")
214 .map(|sym| *sym)?;
215 let CertGetCertificateContextProperty = __library
216 .get(b"CertGetCertificateContextProperty\0")
217 .map(|sym| *sym)?;
218 let CertEnumCertificateContextProperties = __library
219 .get(b"CertEnumCertificateContextProperties\0")
220 .map(|sym| *sym)?;
221 let CryptAcquireContextW = __library.get(b"CryptAcquireContextW\0").map(|sym| *sym)?;
222 let CryptReleaseContext = __library.get(b"CryptReleaseContext\0").map(|sym| *sym)?;
223 let CryptGenKey = __library.get(b"CryptGenKey\0").map(|sym| *sym)?;
224 let CryptDeriveKey = __library.get(b"CryptDeriveKey\0").map(|sym| *sym)?;
225 let CryptDestroyKey = __library.get(b"CryptDestroyKey\0").map(|sym| *sym)?;
226 let CryptSetKeyParam = __library.get(b"CryptSetKeyParam\0").map(|sym| *sym)?;
227 let CryptGetKeyParam = __library.get(b"CryptGetKeyParam\0").map(|sym| *sym)?;
228 let CryptSetHashParam = __library.get(b"CryptSetHashParam\0").map(|sym| *sym)?;
229 let CryptGetHashParam = __library.get(b"CryptGetHashParam\0").map(|sym| *sym)?;
230 let CryptSetProvParam = __library.get(b"CryptSetProvParam\0").map(|sym| *sym)?;
231 let CryptGetProvParam = __library.get(b"CryptGetProvParam\0").map(|sym| *sym)?;
232 let CryptGenRandom = __library.get(b"CryptGenRandom\0").map(|sym| *sym)?;
233 let CryptGetUserKey = __library.get(b"CryptGetUserKey\0").map(|sym| *sym)?;
234 let CryptExportKey = __library.get(b"CryptExportKey\0").map(|sym| *sym)?;
235 let CryptImportKey = __library.get(b"CryptImportKey\0").map(|sym| *sym)?;
236 let CryptEncrypt = __library.get(b"CryptEncrypt\0").map(|sym| *sym)?;
237 let CryptDecrypt = __library.get(b"CryptDecrypt\0").map(|sym| *sym)?;
238 let CryptCreateHash = __library.get(b"CryptCreateHash\0").map(|sym| *sym)?;
239 let CryptHashData = __library.get(b"CryptHashData\0").map(|sym| *sym)?;
240 let CryptHashSessionKey = __library.get(b"CryptHashSessionKey\0").map(|sym| *sym)?;
241 let CryptDestroyHash = __library.get(b"CryptDestroyHash\0").map(|sym| *sym)?;
242 let CryptSignHashA = __library.get(b"CryptSignHashA\0").map(|sym| *sym)?;
243 let CryptVerifySignatureA = __library.get(b"CryptVerifySignatureA\0").map(|sym| *sym)?;
244 let CryptDuplicateKey = __library.get(b"CryptDuplicateKey\0").map(|sym| *sym)?;
245 let CryptDuplicateHash = __library.get(b"CryptDuplicateHash\0").map(|sym| *sym)?;
246 let CryptEnumProvidersA = __library.get(b"CryptEnumProvidersA\0").map(|sym| *sym)?;
247 Ok(SSP {
248 __library,
249 GetLastError,
250 CertOpenStore,
251 CertCloseStore,
252 CertEnumCertificatesInStore,
253 CertFindCertificateInStore,
254 CertFreeCertificateContext,
255 CertGetCertificateContextProperty,
256 CertEnumCertificateContextProperties,
257 CryptAcquireContextW,
258 CryptReleaseContext,
259 CryptGenKey,
260 CryptDeriveKey,
261 CryptDestroyKey,
262 CryptSetKeyParam,
263 CryptGetKeyParam,
264 CryptSetHashParam,
265 CryptGetHashParam,
266 CryptSetProvParam,
267 CryptGetProvParam,
268 CryptGenRandom,
269 CryptGetUserKey,
270 CryptExportKey,
271 CryptImportKey,
272 CryptEncrypt,
273 CryptDecrypt,
274 CryptCreateHash,
275 CryptHashData,
276 CryptHashSessionKey,
277 CryptDestroyHash,
278 CryptSignHashA,
279 CryptVerifySignatureA,
280 CryptDuplicateKey,
281 CryptDuplicateHash,
282 CryptEnumProvidersA,
283 })
284 }
285 pub unsafe fn GetLastError(&self) -> DWORD {
286 (self.GetLastError)()
287 }
288 pub unsafe fn CertOpenStore(
289 &self,
290 lpszStoreProvider: LPCSTR,
291 dwEncodingType: DWORD,
292 hCryptProv: HCRYPTPROV,
293 dwFlags: DWORD,
294 pvPara: *const ::std::os::raw::c_void,
295 ) -> HCERTSTORE {
296 (self.CertOpenStore)(
297 lpszStoreProvider,
298 dwEncodingType,
299 hCryptProv,
300 dwFlags,
301 pvPara,
302 )
303 }
304 pub unsafe fn CertCloseStore(&self, hCertStore: HCERTSTORE, dwFlags: DWORD) -> BOOL {
305 (self.CertCloseStore)(hCertStore, dwFlags)
306 }
307 pub unsafe fn CertEnumCertificatesInStore(
308 &self,
309 hCertStore: HCERTSTORE,
310 pPrevCertContext: PCCERT_CONTEXT,
311 ) -> PCCERT_CONTEXT {
312 (self.CertEnumCertificatesInStore)(hCertStore, pPrevCertContext)
313 }
314 pub unsafe fn CertFindCertificateInStore(
315 &self,
316 hCertStore: HCERTSTORE,
317 dwCertEncodingType: DWORD,
318 dwFindFlags: DWORD,
319 dwFindType: DWORD,
320 pvFindPara: *const ::std::os::raw::c_void,
321 pPrevCertContext: PCCERT_CONTEXT,
322 ) -> PCCERT_CONTEXT {
323 (self.CertFindCertificateInStore)(
324 hCertStore,
325 dwCertEncodingType,
326 dwFindFlags,
327 dwFindType,
328 pvFindPara,
329 pPrevCertContext,
330 )
331 }
332 pub unsafe fn CertFreeCertificateContext(&self, pCertContext: PCCERT_CONTEXT) -> BOOL {
333 (self.CertFreeCertificateContext)(pCertContext)
334 }
335 pub unsafe fn CertGetCertificateContextProperty(
336 &self,
337 pCertContext: PCCERT_CONTEXT,
338 dwPropId: DWORD,
339 pvData: *mut ::std::os::raw::c_void,
340 pcbData: *mut DWORD,
341 ) -> BOOL {
342 (self.CertGetCertificateContextProperty)(pCertContext, dwPropId, pvData, pcbData)
343 }
344 pub unsafe fn CertEnumCertificateContextProperties(
345 &self,
346 pCertContext: PCCERT_CONTEXT,
347 dwPropId: DWORD,
348 ) -> DWORD {
349 (self.CertEnumCertificateContextProperties)(pCertContext, dwPropId)
350 }
351 pub unsafe fn CryptAcquireContextW(
352 &self,
353 phProv: *mut HCRYPTPROV,
354 pszContainer: LPCWSTR,
355 pszProvider: LPCWSTR,
356 dwProvType: DWORD,
357 dwFlags: DWORD,
358 ) -> BOOL {
359 (self.CryptAcquireContextW)(phProv, pszContainer, pszProvider, dwProvType, dwFlags)
360 }
361 pub unsafe fn CryptReleaseContext(&self, hProv: HCRYPTPROV, dwFlags: DWORD) -> BOOL {
362 (self.CryptReleaseContext)(hProv, dwFlags)
363 }
364 pub unsafe fn CryptGenKey(
365 &self,
366 hProv: HCRYPTPROV,
367 Algid: ALG_ID,
368 dwFlags: DWORD,
369 phKey: *mut HCRYPTKEY,
370 ) -> BOOL {
371 (self.CryptGenKey)(hProv, Algid, dwFlags, phKey)
372 }
373 pub unsafe fn CryptDeriveKey(
374 &self,
375 hProv: HCRYPTPROV,
376 Algid: ALG_ID,
377 hBaseData: HCRYPTHASH,
378 dwFlags: DWORD,
379 phKey: *mut HCRYPTKEY,
380 ) -> BOOL {
381 (self.CryptDeriveKey)(hProv, Algid, hBaseData, dwFlags, phKey)
382 }
383 pub unsafe fn CryptDestroyKey(&self, hKey: HCRYPTKEY) -> BOOL {
384 (self.CryptDestroyKey)(hKey)
385 }
386 pub unsafe fn CryptSetKeyParam(
387 &self,
388 hKey: HCRYPTKEY,
389 dwParam: DWORD,
390 pbData: *const BYTE,
391 dwFlags: DWORD,
392 ) -> BOOL {
393 (self.CryptSetKeyParam)(hKey, dwParam, pbData, dwFlags)
394 }
395 pub unsafe fn CryptGetKeyParam(
396 &self,
397 hKey: HCRYPTKEY,
398 dwParam: DWORD,
399 pbData: *mut BYTE,
400 pdwDataLen: *mut DWORD,
401 dwFlags: DWORD,
402 ) -> BOOL {
403 (self.CryptGetKeyParam)(hKey, dwParam, pbData, pdwDataLen, dwFlags)
404 }
405 pub unsafe fn CryptSetHashParam(
406 &self,
407 hHash: HCRYPTHASH,
408 dwParam: DWORD,
409 pbData: *const BYTE,
410 dwFlags: DWORD,
411 ) -> BOOL {
412 (self.CryptSetHashParam)(hHash, dwParam, pbData, dwFlags)
413 }
414 pub unsafe fn CryptGetHashParam(
415 &self,
416 hHash: HCRYPTHASH,
417 dwParam: DWORD,
418 pbData: *mut BYTE,
419 pdwDataLen: *mut DWORD,
420 dwFlags: DWORD,
421 ) -> BOOL {
422 (self.CryptGetHashParam)(hHash, dwParam, pbData, pdwDataLen, dwFlags)
423 }
424 pub unsafe fn CryptSetProvParam(
425 &self,
426 hProv: HCRYPTPROV,
427 dwParam: DWORD,
428 pbData: *const BYTE,
429 dwFlags: DWORD,
430 ) -> BOOL {
431 (self.CryptSetProvParam)(hProv, dwParam, pbData, dwFlags)
432 }
433 pub unsafe fn CryptGetProvParam(
434 &self,
435 hProv: HCRYPTPROV,
436 dwParam: DWORD,
437 pbData: *mut BYTE,
438 pdwDataLen: *mut DWORD,
439 dwFlags: DWORD,
440 ) -> BOOL {
441 (self.CryptGetProvParam)(hProv, dwParam, pbData, pdwDataLen, dwFlags)
442 }
443 pub unsafe fn CryptGenRandom(
444 &self,
445 hProv: HCRYPTPROV,
446 dwLen: DWORD,
447 pbBuffer: *mut BYTE,
448 ) -> BOOL {
449 (self.CryptGenRandom)(hProv, dwLen, pbBuffer)
450 }
451 pub unsafe fn CryptGetUserKey(
452 &self,
453 hProv: HCRYPTPROV,
454 dwKeySpec: DWORD,
455 phUserKey: *mut HCRYPTKEY,
456 ) -> BOOL {
457 (self.CryptGetUserKey)(hProv, dwKeySpec, phUserKey)
458 }
459 pub unsafe fn CryptExportKey(
460 &self,
461 hKey: HCRYPTKEY,
462 hExpKey: HCRYPTKEY,
463 dwBlobType: DWORD,
464 dwFlags: DWORD,
465 pbData: *mut BYTE,
466 pdwDataLen: *mut DWORD,
467 ) -> BOOL {
468 (self.CryptExportKey)(hKey, hExpKey, dwBlobType, dwFlags, pbData, pdwDataLen)
469 }
470 pub unsafe fn CryptImportKey(
471 &self,
472 hProv: HCRYPTPROV,
473 pbData: *const BYTE,
474 dwDataLen: DWORD,
475 hPubKey: HCRYPTKEY,
476 dwFlags: DWORD,
477 phKey: *mut HCRYPTKEY,
478 ) -> BOOL {
479 (self.CryptImportKey)(hProv, pbData, dwDataLen, hPubKey, dwFlags, phKey)
480 }
481 pub unsafe fn CryptEncrypt(
482 &self,
483 hKey: HCRYPTKEY,
484 hHash: HCRYPTHASH,
485 Final: BOOL,
486 dwFlags: DWORD,
487 pbData: *mut BYTE,
488 pdwDataLen: *mut DWORD,
489 dwBufLen: DWORD,
490 ) -> BOOL {
491 (self.CryptEncrypt)(hKey, hHash, Final, dwFlags, pbData, pdwDataLen, dwBufLen)
492 }
493 pub unsafe fn CryptDecrypt(
494 &self,
495 hKey: HCRYPTKEY,
496 hHash: HCRYPTHASH,
497 Final: BOOL,
498 dwFlags: DWORD,
499 pbData: *mut BYTE,
500 pdwDataLen: *mut DWORD,
501 ) -> BOOL {
502 (self.CryptDecrypt)(hKey, hHash, Final, dwFlags, pbData, pdwDataLen)
503 }
504 pub unsafe fn CryptCreateHash(
505 &self,
506 hProv: HCRYPTPROV,
507 Algid: ALG_ID,
508 hKey: HCRYPTKEY,
509 dwFlags: DWORD,
510 phHash: *mut HCRYPTHASH,
511 ) -> BOOL {
512 (self.CryptCreateHash)(hProv, Algid, hKey, dwFlags, phHash)
513 }
514 pub unsafe fn CryptHashData(
515 &self,
516 hHash: HCRYPTHASH,
517 pbData: *const BYTE,
518 dwDataLen: DWORD,
519 dwFlags: DWORD,
520 ) -> BOOL {
521 (self.CryptHashData)(hHash, pbData, dwDataLen, dwFlags)
522 }
523 pub unsafe fn CryptHashSessionKey(
524 &self,
525 hHash: HCRYPTHASH,
526 hKey: HCRYPTKEY,
527 dwFlags: DWORD,
528 ) -> BOOL {
529 (self.CryptHashSessionKey)(hHash, hKey, dwFlags)
530 }
531 pub unsafe fn CryptDestroyHash(&self, hHash: HCRYPTHASH) -> BOOL {
532 (self.CryptDestroyHash)(hHash)
533 }
534 pub unsafe fn CryptSignHashA(
535 &self,
536 hHash: HCRYPTHASH,
537 dwKeySpec: DWORD,
538 szDescription: LPCSTR,
539 dwFlags: DWORD,
540 pbSignature: *mut BYTE,
541 pdwSigLen: *mut DWORD,
542 ) -> BOOL {
543 (self.CryptSignHashA)(
544 hHash,
545 dwKeySpec,
546 szDescription,
547 dwFlags,
548 pbSignature,
549 pdwSigLen,
550 )
551 }
552 pub unsafe fn CryptVerifySignatureA(
553 &self,
554 hHash: HCRYPTHASH,
555 pbSignature: *const BYTE,
556 dwSigLen: DWORD,
557 hPubKey: HCRYPTKEY,
558 szDescription: LPCSTR,
559 dwFlags: DWORD,
560 ) -> BOOL {
561 (self.CryptVerifySignatureA)(
562 hHash,
563 pbSignature,
564 dwSigLen,
565 hPubKey,
566 szDescription,
567 dwFlags,
568 )
569 }
570 pub unsafe fn CryptDuplicateKey(
571 &self,
572 hKey: HCRYPTKEY,
573 pdwReserved: *mut DWORD,
574 dwFlags: DWORD,
575 phKey: *mut HCRYPTKEY,
576 ) -> BOOL {
577 (self.CryptDuplicateKey)(hKey, pdwReserved, dwFlags, phKey)
578 }
579 pub unsafe fn CryptDuplicateHash(
580 &self,
581 hHash: HCRYPTHASH,
582 pdwReserved: *mut DWORD,
583 dwFlags: DWORD,
584 phHash: *mut HCRYPTHASH,
585 ) -> BOOL {
586 (self.CryptDuplicateHash)(hHash, pdwReserved, dwFlags, phHash)
587 }
588 pub unsafe fn CryptEnumProvidersA(
589 &self,
590 dwIndex: DWORD,
591 pdwReserved: *mut DWORD,
592 dwFlags: DWORD,
593 pdwProvType: *mut DWORD,
594 szProvName: LPSTR,
595 pcbProvName: *mut DWORD,
596 ) -> BOOL {
597 (self.CryptEnumProvidersA)(
598 dwIndex,
599 pdwReserved,
600 dwFlags,
601 pdwProvType,
602 szProvName,
603 pcbProvName,
604 )
605 }
606}