1 /*
2  * XML Security Library (http://www.aleksey.com/xmlsec).
3  *
4  * This is free software; see Copyright file in the source
5  * distribution for preciese wording.
6  *
7  * Copyright (C) 2003 Cordys R&D BV, All rights reserved.
8  */
9 #ifndef __XMLSEC_MSCRYPTO_CRYPTO_H__
10 #define __XMLSEC_MSCRYPTO_CRYPTO_H__
11 
12 #include <windows.h>
13 #include <wincrypt.h>
14 
15 #include <xmlsec/xmlsec.h>
16 #include <xmlsec/keys.h>
17 #include <xmlsec/transforms.h>
18 #include <xmlsec/dl.h>
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif /* __cplusplus */
23 
24 XMLSEC_CRYPTO_EXPORT xmlSecCryptoDLFunctionsPtr xmlSecCryptoGetFunctions_mscrypto(void);
25 
26 /********************************************************************
27  *
28  * Init shutdown
29  *
30  ********************************************************************/
31 XMLSEC_CRYPTO_EXPORT int                xmlSecMSCryptoInit              (void);
32 XMLSEC_CRYPTO_EXPORT int                xmlSecMSCryptoShutdown          (void);
33 
34 XMLSEC_CRYPTO_EXPORT int                xmlSecMSCryptoKeysMngrInit      (xmlSecKeysMngrPtr mngr);
35 XMLSEC_CRYPTO_EXPORT int                xmlSecMSCryptoGenerateRandom    (xmlSecBufferPtr buffer,
36                                                                          xmlSecSize size);
37 
38 XMLSEC_CRYPTO_EXPORT void               xmlSecMSCryptoErrorsDefaultCallback(const char* file,
39                                                                         int line,
40                                                                         const char* func,
41                                                                         const char* errorObject,
42                                                                         const char* errorSubject,
43                                                                         int reason,
44                                                                         const char* msg);
45 
46 /******************************************************************************
47  *
48  * String encoding conversion utils
49  *
50  ******************************************************************************/
51 XMLSEC_DEPRECATED XMLSEC_CRYPTO_EXPORT LPWSTR             xmlSecMSCryptoConvertLocaleToUnicode(const char* str);
52 
53 XMLSEC_DEPRECATED XMLSEC_CRYPTO_EXPORT LPWSTR             xmlSecMSCryptoConvertUtf8ToUnicode  (const xmlChar* str);
54 XMLSEC_DEPRECATED XMLSEC_CRYPTO_EXPORT xmlChar*           xmlSecMSCryptoConvertUnicodeToUtf8  (LPCWSTR str);
55 
56 XMLSEC_DEPRECATED XMLSEC_CRYPTO_EXPORT xmlChar*           xmlSecMSCryptoConvertLocaleToUtf8   (const char* str);
57 XMLSEC_DEPRECATED XMLSEC_CRYPTO_EXPORT char*              xmlSecMSCryptoConvertUtf8ToLocale   (const xmlChar* str);
58 
59 XMLSEC_DEPRECATED XMLSEC_CRYPTO_EXPORT xmlChar*           xmlSecMSCryptoConvertTstrToUtf8     (LPCTSTR str);
60 XMLSEC_DEPRECATED XMLSEC_CRYPTO_EXPORT LPTSTR             xmlSecMSCryptoConvertUtf8ToTstr     (const xmlChar*  str);
61 
62 
63 /********************************************************************
64  *
65  * DSA transform
66  *
67  *******************************************************************/
68 #ifndef XMLSEC_NO_DSA
69 
70 /**
71  * xmlSecMSCryptoKeyDataDsaId:
72  *
73  * The DSA key klass.
74  */
75 #define xmlSecMSCryptoKeyDataDsaId \
76         xmlSecMSCryptoKeyDataDsaGetKlass()
77 XMLSEC_CRYPTO_EXPORT xmlSecKeyDataId    xmlSecMSCryptoKeyDataDsaGetKlass        (void);
78 
79 /**
80  * xmlSecMSCryptoTransformDsaSha1Id:
81  *
82  * The DSA SHA1 signature transform klass.
83  */
84 #define xmlSecMSCryptoTransformDsaSha1Id \
85         xmlSecMSCryptoTransformDsaSha1GetKlass()
86 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformDsaSha1GetKlass(void);
87 
88 #endif /* XMLSEC_NO_DSA */
89 
90 /********************************************************************
91  *
92  * GOST2001 transform
93  *
94  *******************************************************************/
95 #ifndef XMLSEC_NO_GOST
96 
97 /**
98  * xmlSecMSCryptoKeyDataGost2001Id:
99  *
100  * The GOST2001 key klass.
101  */
102 #define xmlSecMSCryptoKeyDataGost2001Id \
103         xmlSecMSCryptoKeyDataGost2001GetKlass()
104 XMLSEC_CRYPTO_EXPORT xmlSecKeyDataId    xmlSecMSCryptoKeyDataGost2001GetKlass   (void);
105 
106 /**
107  * xmlSecMSCryptoTransformGost2001GostR3411_94Id:
108  *
109  * The GOST2001 GOSTR3411_94 signature transform klass.
110  */
111 #define xmlSecMSCryptoTransformGost2001GostR3411_94Id \
112         xmlSecMSCryptoTransformGost2001GostR3411_94GetKlass()
113 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformGost2001GostR3411_94GetKlass(void);
114 
115 #endif /* XMLSEC_NO_GOST */
116 
117 #ifndef XMLSEC_NO_GOST2012
118 
119 /********************************************************************
120  *
121  * GOST R 34.10-2012  transform
122  *
123  *******************************************************************/
124 
125 /**
126  * xmlSecMSCryptoKeyDataGost2012_256Id:
127  *
128  * The GOST R 34.10-2012 256 key klass
129  */
130 #define xmlSecMSCryptoKeyDataGost2012_256Id \
131         xmlSecMSCryptoKeyDataGost2012_256GetKlass()
132 XMLSEC_CRYPTO_EXPORT xmlSecKeyDataId    xmlSecMSCryptoKeyDataGost2012_256GetKlass   (void);
133 
134 /**
135  * xmlSecMSCryptoKeyDataGost2012_512Id:
136  *
137  * The GOST R 34.10-2012 512 key klass
138  */
139 #define xmlSecMSCryptoKeyDataGost2012_512Id \
140         xmlSecMSCryptoKeyDataGost2012_512GetKlass()
141 XMLSEC_CRYPTO_EXPORT xmlSecKeyDataId    xmlSecMSCryptoKeyDataGost2012_512GetKlass   (void);
142 
143 /**
144  * xmlSecMSCryptoTransformGost2012_256Id:
145  *
146  * The GOST R 34.10-2012 - GOST R 3411-2012 256 bit signature transform klass.
147  */
148 #define xmlSecMSCryptoTransformGost2012_256Id \
149         xmlSecMSCryptoTransformGost2012_256GetKlass()
150 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformGost2012_256GetKlass(void);
151 
152 /**
153  * xmlSecMSCryptoTransformGost2012_512Id:
154  *
155  * The GOST R 34.10-2012 - GOST R 3411-2012 512 bit signature transform klass.
156  */
157 #define xmlSecMSCryptoTransformGost2012_512Id \
158         xmlSecMSCryptoTransformGost2012_512GetKlass()
159 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformGost2012_512GetKlass(void);
160 
161 #endif /* XMLSEC_NO_GOST2012 */
162 
163 /********************************************************************
164  *
165  * RSA transforms
166  *
167  *******************************************************************/
168 #ifndef XMLSEC_NO_RSA
169 
170 /**
171  * xmlSecMSCryptoKeyDataRsaId:
172  *
173  * The RSA key klass.
174  */
175 #define xmlSecMSCryptoKeyDataRsaId \
176         xmlSecMSCryptoKeyDataRsaGetKlass()
177 XMLSEC_CRYPTO_EXPORT xmlSecKeyDataId xmlSecMSCryptoKeyDataRsaGetKlass(void);
178 
179 #ifndef XMLSEC_NO_MD5
180 /**
181  * xmlSecMSCryptoTransformRsaMd5Id:
182  *
183  * The RSA-MD5 signature transform klass.
184  */
185 #define xmlSecMSCryptoTransformRsaMd5Id        \
186         xmlSecMSCryptoTransformRsaMd5GetKlass()
187 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformRsaMd5GetKlass(void);
188 #endif /* XMLSEC_NO_MD5 */
189 
190 #ifndef XMLSEC_NO_SHA1
191 /**
192  * xmlSecMSCryptoTransformRsaSha1Id:
193  *
194  * The RSA-SHA1 signature transform klass.
195  */
196 #define xmlSecMSCryptoTransformRsaSha1Id        \
197         xmlSecMSCryptoTransformRsaSha1GetKlass()
198 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformRsaSha1GetKlass(void);
199 #endif /* XMLSEC_NO_SHA1 */
200 
201 #ifndef XMLSEC_NO_SHA256
202 /**
203  * xmlSecMSCryptoTransformRsaSha256Id:
204  *
205  * The RSA-SHA256 signature transform klass.
206  */
207 #define xmlSecMSCryptoTransformRsaSha256Id     \
208        xmlSecMSCryptoTransformRsaSha256GetKlass()
209 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformRsaSha256GetKlass(void);
210 #endif /* XMLSEC_NO_SHA256 */
211 
212 #ifndef XMLSEC_NO_SHA384
213 /**
214  * xmlSecMSCryptoTransformRsaSha384Id:
215  *
216  * The RSA-SHA384 signature transform klass.
217  */
218 #define xmlSecMSCryptoTransformRsaSha384Id     \
219        xmlSecMSCryptoTransformRsaSha384GetKlass()
220 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformRsaSha384GetKlass(void);
221 #endif /* XMLSEC_NO_SHA384 */
222 
223 #ifndef XMLSEC_NO_SHA512
224 /**
225  * xmlSecMSCryptoTransformRsaSha512Id:
226  *
227  * The RSA-SHA512 signature transform klass.
228  */
229 #define xmlSecMSCryptoTransformRsaSha512Id     \
230        xmlSecMSCryptoTransformRsaSha512GetKlass()
231 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformRsaSha512GetKlass(void);
232 #endif /* XMLSEC_NO_SHA512 */
233 
234 /**
235  * xmlSecMSCryptoTransformRsaPkcs1Id:
236  *
237  * The RSA PKCS1 key transport transform klass.
238  */
239 #define xmlSecMSCryptoTransformRsaPkcs1Id \
240         xmlSecMSCryptoTransformRsaPkcs1GetKlass()
241 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformRsaPkcs1GetKlass(void);
242 
243 /**
244  * xmlSecMSCryptoTransformRsaOaepId:
245  *
246  * The RSA OAEP key transport transform klass.
247  */
248 #define xmlSecMSCryptoTransformRsaOaepId \
249         xmlSecMSCryptoTransformRsaOaepGetKlass()
250 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformRsaOaepGetKlass(void);
251 
252 /**
253  * xmlSecMSCryptoTransformRsaOaepId:
254  *
255  * The RSA PKCS1 key transport transform klass.
256  */
257 /*
258 #define xmlSecMSCryptoTransformRsaOaepId \
259         xmlSecMSCryptoTransformRsaOaepGetKlass()
260 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformRsaOaepGetKlass(void);
261 */
262 #endif /* XMLSEC_NO_RSA */
263 
264 /********************************************************************
265  *
266  * Md5 transforms
267  *
268  *******************************************************************/
269 #ifndef XMLSEC_NO_MD5
270 /**
271  * xmlSecMSCryptoTransformMd5Id:
272  *
273  * The MD5 digest transform klass.
274  */
275 #define xmlSecMSCryptoTransformMd5Id \
276         xmlSecMSCryptoTransformMd5GetKlass()
277 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformMd5GetKlass(void);
278 #endif /* XMLSEC_NO_MD5 */
279 
280 
281 /********************************************************************
282  *
283  * SHA1 transform
284  *
285  *******************************************************************/
286 #ifndef XMLSEC_NO_SHA1
287 
288 /**
289  * xmlSecMSCryptoTransformSha1Id:
290  *
291  * The SHA1 digest transform klass.
292  */
293 #define xmlSecMSCryptoTransformSha1Id \
294         xmlSecMSCryptoTransformSha1GetKlass()
295 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformSha1GetKlass(void);
296 #endif /* XMLSEC_NO_SHA1 */
297 
298 /********************************************************************
299  *
300  * SHA256 transform
301  *
302  *******************************************************************/
303 #ifndef XMLSEC_NO_SHA256
304 
305 /**
306  * xmlSecMSCryptoTransformSha256Id:
307  *
308  * The SHA256 digest transform klass.
309  */
310 #define xmlSecMSCryptoTransformSha256Id \
311        xmlSecMSCryptoTransformSha256GetKlass()
312 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformSha256GetKlass(void);
313 #endif /* XMLSEC_NO_SHA256 */
314 
315 /********************************************************************
316  *
317  * SHA384 transform
318  *
319  *******************************************************************/
320 #ifndef XMLSEC_NO_SHA384
321 
322 /**
323  * xmlSecMSCryptoTransformSha384Id:
324  *
325  * The SHA384 digest transform klass.
326  */
327 #define xmlSecMSCryptoTransformSha384Id \
328        xmlSecMSCryptoTransformSha384GetKlass()
329 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformSha384GetKlass(void);
330 #endif /* XMLSEC_NO_SHA384 */
331 
332 /********************************************************************
333  *
334  * SHA512 transform
335  *
336  *******************************************************************/
337 #ifndef XMLSEC_NO_SHA512
338 
339 /**
340  * xmlSecMSCryptoTransformSha512Id:
341  *
342  * The SHA512 digest transform klass.
343  */
344 #define xmlSecMSCryptoTransformSha512Id \
345        xmlSecMSCryptoTransformSha512GetKlass()
346 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformSha512GetKlass(void);
347 #endif /* XMLSEC_NO_SHA512 */
348 
349 /********************************************************************
350  *
351  * GOSTR3411_94 transform
352  *
353  *******************************************************************/
354 #ifndef XMLSEC_NO_GOST
355 
356 /**
357  * xmlSecMSCryptoTransformGostR3411_94Id:
358  *
359  * The GOSTR3411_94 digest transform klass.
360  */
361 #define xmlSecMSCryptoTransformGostR3411_94Id \
362         xmlSecMSCryptoTransformGostR3411_94GetKlass()
363 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformGostR3411_94GetKlass(void);
364 
365 #endif /* XMLSEC_NO_GOST */
366 
367 #ifndef XMLSEC_NO_GOST2012
368 
369 /********************************************************************
370  *
371  * GOST R 34.10-2012 256 and 512-bit digests
372  *
373  *******************************************************************/
374 
375 /**
376  * xmlSecMSCryptoTransformGostR3411_2012_256Id:
377  *
378  * The GOST R 34.11-2012 256 digest transform klass.
379  */
380 #define xmlSecMSCryptoTransformGostR3411_2012_256Id \
381         xmlSecMSCryptoTransformGostR3411_2012_256GetKlass()
382 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformGostR3411_2012_256GetKlass(void);
383 
384 /**
385  * xmlSecMSCryptoTransformGostR3411_2012_512Id:
386  *
387  * The GOST R 34.11-2012 512 digest transform klass.
388  */
389 #define xmlSecMSCryptoTransformGostR3411_2012_512Id \
390         xmlSecMSCryptoTransformGostR3411_2012_512GetKlass()
391 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformGostR3411_2012_512GetKlass(void);
392 
393 #endif /* XMLSEC_NO_GOST2012 */
394 
395 
396 /********************************************************************
397  *
398  * AES transforms
399  *
400  *******************************************************************/
401 #ifndef XMLSEC_NO_AES
402 /**
403  * xmlSecMSCryptoKeyDataAesId:
404  *
405  * The AES key data klass.
406  */
407 #define xmlSecMSCryptoKeyDataAesId \
408         xmlSecMSCryptoKeyDataAesGetKlass()
409 XMLSEC_CRYPTO_EXPORT xmlSecKeyDataId    xmlSecMSCryptoKeyDataAesGetKlass(void);
410 XMLSEC_CRYPTO_EXPORT int                xmlSecMSCryptoKeyDataAesSet     (xmlSecKeyDataPtr data,
411                                                                          const xmlSecByte* buf,
412                                                                          xmlSecSize bufSize);
413 /**
414  * xmlSecMSCryptoTransformAes128CbcId:
415  *
416  * The AES128 CBC cipher transform klass.
417  */
418 #define xmlSecMSCryptoTransformAes128CbcId \
419         xmlSecMSCryptoTransformAes128CbcGetKlass()
420 XMLSEC_CRYPTO_EXPORT xmlSecTransformId  xmlSecMSCryptoTransformAes128CbcGetKlass(void);
421 
422 /**
423  * xmlSecMSCryptoTransformAes192CbcId:
424  *
425  * The AES192 CBC cipher transform klass.
426  */
427 #define xmlSecMSCryptoTransformAes192CbcId \
428         xmlSecMSCryptoTransformAes192CbcGetKlass()
429 XMLSEC_CRYPTO_EXPORT xmlSecTransformId  xmlSecMSCryptoTransformAes192CbcGetKlass(void);
430 
431 /**
432  * xmlSecMSCryptoTransformAes256CbcId:
433  *
434  * The AES256 CBC cipher transform klass.
435  */
436 #define xmlSecMSCryptoTransformAes256CbcId \
437         xmlSecMSCryptoTransformAes256CbcGetKlass()
438 XMLSEC_CRYPTO_EXPORT xmlSecTransformId  xmlSecMSCryptoTransformAes256CbcGetKlass(void);
439 
440 /**
441  * xmlSecMSCryptoTransformKWAes128Id:
442  *
443  * The AES 128 key wrap transform klass.
444  */
445 #define xmlSecMSCryptoTransformKWAes128Id \
446         xmlSecMSCryptoTransformKWAes128GetKlass()
447 XMLSEC_CRYPTO_EXPORT xmlSecTransformId  xmlSecMSCryptoTransformKWAes128GetKlass(void);
448 
449 /**
450  * xmlSecMSCryptoTransformKWAes192Id:
451  *
452  * The AES 192 key wrap transform klass.
453  */
454 #define xmlSecMSCryptoTransformKWAes192Id \
455         xmlSecMSCryptoTransformKWAes192GetKlass()
456 XMLSEC_CRYPTO_EXPORT xmlSecTransformId  xmlSecMSCryptoTransformKWAes192GetKlass(void);
457 
458 /**
459  * xmlSecMSCryptoTransformKWAes256Id:
460  *
461  * The AES 256 key wrap transform klass.
462  */
463 #define xmlSecMSCryptoTransformKWAes256Id \
464         xmlSecMSCryptoTransformKWAes256GetKlass()
465 XMLSEC_CRYPTO_EXPORT xmlSecTransformId  xmlSecMSCryptoTransformKWAes256GetKlass(void);
466 
467 #endif /* XMLSEC_NO_AES */
468 
469 
470 /********************************************************************
471  *
472  * DES transform
473  *
474  *******************************************************************/
475 #ifndef XMLSEC_NO_DES
476 
477 /**
478  * xmlSecMSCryptoKeyDataDesId:
479  *
480  * The DES key data klass.
481  */
482 #define xmlSecMSCryptoKeyDataDesId \
483         xmlSecMSCryptoKeyDataDesGetKlass()
484 XMLSEC_CRYPTO_EXPORT xmlSecKeyDataId    xmlSecMSCryptoKeyDataDesGetKlass(void);
485 
486 /**
487  * xmlSecMSCryptoTransformDes3CbcId:
488  *
489  * The DES3 CBC cipher transform klass.
490  */
491 #define xmlSecMSCryptoTransformDes3CbcId \
492         xmlSecMSCryptoTransformDes3CbcGetKlass()
493 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformDes3CbcGetKlass(void);
494 
495 /**
496  * xmlSecMSCryptoTransformKWDes3Id:
497  *
498  * The DES3 KW transform klass.
499  */
500 #define xmlSecMSCryptoTransformKWDes3Id \
501         xmlSecMSCryptoTransformKWDes3GetKlass()
502 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformKWDes3GetKlass(void);
503 
504 #endif /* XMLSEC_NO_DES */
505 
506 
507 /********************************************************************
508  *
509  * HMAC transforms
510  *
511  *******************************************************************/
512 #ifndef XMLSEC_NO_HMAC
513 
514 XMLSEC_CRYPTO_EXPORT int               xmlSecMSCryptoHmacGetMinOutputLength(void);
515 XMLSEC_CRYPTO_EXPORT void              xmlSecMSCryptoHmacSetMinOutputLength(int min_length);
516 
517 /**
518  * xmlSecMSCryptoKeyDataHmacId:
519  *
520  * The DHMAC key klass.
521  */
522 #define xmlSecMSCryptoKeyDataHmacId \
523         xmlSecMSCryptoKeyDataHmacGetKlass()
524 XMLSEC_CRYPTO_EXPORT xmlSecKeyDataId    xmlSecMSCryptoKeyDataHmacGetKlass(void);
525 XMLSEC_CRYPTO_EXPORT int                xmlSecMSCryptoKeyDataHmacSet     (xmlSecKeyDataPtr data,
526                                                                          const xmlSecByte* buf,
527                                                                          xmlSecSize bufSize);
528 
529 #ifndef XMLSEC_NO_MD5
530 /**
531  * xmlSecMSCryptoTransformHmacMd5Id:
532  *
533  * The HMAC with MD5 signature transform klass.
534  */
535 #define xmlSecMSCryptoTransformHmacMd5Id \
536         xmlSecMSCryptoTransformHmacMd5GetKlass()
537 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformHmacMd5GetKlass(void);
538 #endif /* XMLSEC_NO_MD5 */
539 
540 #ifndef XMLSEC_NO_SHA1
541 /**
542  * xmlSecMSCryptoTransformHmacSha1Id:
543  *
544  * The HMAC with SHA1 signature transform klass.
545  */
546 #define xmlSecMSCryptoTransformHmacSha1Id \
547         xmlSecMSCryptoTransformHmacSha1GetKlass()
548 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformHmacSha1GetKlass(void);
549 #endif /* XMLSEC_NO_SHA1 */
550 
551 #ifndef XMLSEC_NO_SHA256
552 /**
553  * xmlSecMSCryptoTransformHmacSha256Id:
554  *
555  * The HMAC with SHA256 signature transform klass.
556  */
557 #define xmlSecMSCryptoTransformHmacSha256Id \
558         xmlSecMSCryptoTransformHmacSha256GetKlass()
559 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformHmacSha256GetKlass(void);
560 #endif /* XMLSEC_NO_SHA256 */
561 
562 #ifndef XMLSEC_NO_SHA384
563 /**
564  * xmlSecMSCryptoTransformHmacSha384Id:
565  *
566  * The HMAC with SHA384 signature transform klass.
567  */
568 #define xmlSecMSCryptoTransformHmacSha384Id \
569         xmlSecMSCryptoTransformHmacSha384GetKlass()
570 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformHmacSha384GetKlass(void);
571 #endif /* XMLSEC_NO_SHA384 */
572 
573 #ifndef XMLSEC_NO_SHA512
574 /**
575  * xmlSecMSCryptoTransformHmacSha512Id:
576  *
577  * The HMAC with SHA512 signature transform klass.
578  */
579 #define xmlSecMSCryptoTransformHmacSha512Id \
580         xmlSecMSCryptoTransformHmacSha512GetKlass()
581 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCryptoTransformHmacSha512GetKlass(void);
582 #endif /* XMLSEC_NO_SHA512 */
583 
584 #endif /* XMLSEC_NO_HMAC */
585 
586 #ifdef __cplusplus
587 }
588 #endif /* __cplusplus */
589 
590 #endif /* __XMLSEC_MSCRYPTO_CRYPTO_H__ */
591 
592 #define __XMLSEC_MSCRYPTO_CRYPTO_H__
593