-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathWinCryptEx.h
6073 lines (5395 loc) · 310 KB
/
WinCryptEx.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/* vim:set sw=4 ts=8 fileencoding=cp1251::Кодировка:WINDOWS-1251[АБЁЪЯабёъя] */
#ifdef _WIN32
#pragma setlocale("rus")
#endif
/*
* Copyright (c) 2000, компания Крипто-Про
*
* Разрешается повторное распространение и использование как в виде исходного
* кода, так и в двоичной форме, с изменениями или без, при соблюдении
* следующих условий:
*
* 1) При повторном распространении исходного кода должно оставаться
* указанное выше уведомление об авторском праве, этот список условий
* и последующий отказ от гарантий.
*
* 2) При повторном распространении двоичного кода должно сохраняться
* указанная выше информация об авторском праве, этот список условий
* и последующий отказ от гарантий в документации и/или в других материалах,
* поставляемых при распространении.
*
* ЭТА ПРОГРАММА ПРЕДОСТАВЛЕНА БЕСПЛАТНО ВЛАДЕЛЬЦАМИ АВТОРСКИХ ПРАВ И/ИЛИ
* ДРУГИМИ СТОРОНАМИ "КАК ОНА ЕСТЬ" БЕЗ КАКОГО-ЛИБО ВИДА ГАРАНТИЙ, ВЫРАЖЕННЫХ
* ЯВНО ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ИМИ, ПОДРАЗУМЕВАЕМЫЕ
* ГАРАНТИИ КОММЕРЧЕСКОЙ ЦЕННОСТИ И ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. НИ В КОЕМ
* СЛУЧАЕ, ЕСЛИ НЕ ТРЕБУЕТСЯ СООТВЕТСТВУЮЩИМ ЗАКОНОМ, ИЛИ НЕ УСТАНОВЛЕНО В
* УСТНОЙ ФОРМЕ, НИ ОДИН ВЛАДЕЛЕЦ АВТОРСКИХ ПРАВ И НИ ОДНО ДРУГОЕ ЛИЦО, КОТОРОЕ
* МОЖЕТ ИЗМЕНЯТЬ И/ИЛИ ПОВТОРНО РАСПРОСТРАНЯТЬ ПРОГРАММУ, КАК БЫЛО СКАЗАНО
* ВЫШЕ, НЕ НЕСЁТ ОТВЕТСТВЕННОСТИ, ВКЛЮЧАЯ ЛЮБЫЕ ОБЩИЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ
* ИЛИ ПОСЛЕДОВАВШИЕ УБЫТКИ, В СЛЕДСТВИИ ИСПОЛЬЗОВАНИЯ ИЛИ НЕВОЗМОЖНОСТИ
* ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ПОТЕРЕЙ ДАННЫХ,
* ИЛИ ДАННЫМИ, СТАВШИМИ НЕПРАВИЛЬНЫМИ, ИЛИ ПОТЕРЯМИ ПРИНЕСЕННЫМИ ИЗ-ЗА ВАС ИЛИ
* ТРЕТЬИХ ЛИЦ, ИЛИ ОТКАЗОМ ПРОГРАММЫ РАБОТАТЬ СОВМЕСТНО С ДРУГИМИ ПРОГРАММАМИ),
* ДАЖЕ ЕСЛИ ТАКОЙ ВЛАДЕЛЕЦ ИЛИ ДРУГОЕ ЛИЦО БЫЛИ ИЗВЕЩЕНЫ О ВОЗМОЖНОСТИ
* ТАКИХ УБЫТКОВ.
*
* Copyright (c) 2000, Crypto-Pro Company All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1) Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2) Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/
/*!
* \brief CryptoPro CSP WinCrypt.h extensions
*/
#ifndef _WINCRYPTEX_H_INCLUDED
#define _WINCRYPTEX_H_INCLUDED
#ifndef _WINCRYPTEX_USE_EXTERNAL_TYPES
# ifndef HAVE_CONFIG_H
# ifdef __APPLE__
# ifndef UNIX
# define UNIX
# endif /*UNIX*/
# ifndef SIZEOF_VOID_P
# ifdef __LP64__
# define SIZEOF_VOID_P 8
# else /*__LP64__*/
# define SIZEOF_VOID_P 4
# endif /*__LP64__*/
# endif /*SIZEOF_VOID_P*/
# endif /*__APPLE__*/
# endif
# if defined UNIX || defined CSP_LITE
# include "CSP_WinCrypt.h"
# else // UNIX
# if !defined _WINDOWS_
# define WIN32_LEAN_AND_MEAN // Для ускорения компиляции
# include <windows.h>
# endif // _WINDOWS_
# include <wincrypt.h>
# endif // UNIX
#endif // _WINCRYPTEX_USE_EXTERNAL_TYPES
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
// CSP 1.1
#define CP_DEF_PROV_A "Crypto-Pro Cryptographic Service Provider"
#define CP_DEF_PROV_W L"Crypto-Pro Cryptographic Service Provider"
#ifdef UNICODE
#define CP_DEF_PROV CP_DEF_PROV_W
#else //!UNICODE
#define CP_DEF_PROV CP_DEF_PROV_A
#endif //!UNICODE
// CSP 2.0
#define CP_GR3410_94_PROV_A "Crypto-Pro GOST R 34.10-94 Cryptographic Service Provider"
#define CP_GR3410_94_PROV_W L"Crypto-Pro GOST R 34.10-94 Cryptographic Service Provider"
#ifdef UNICODE
#define CP_GR3410_94_PROV CP_GR3410_94_PROV_W
#else //!UNICODE
#define CP_GR3410_94_PROV CP_GR3410_94_PROV_A
#endif //!UNICODE
#define CP_GR3410_2001_PROV_A "Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider"
#define CP_GR3410_2001_PROV_W L"Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider"
#ifdef UNICODE
#define CP_GR3410_2001_PROV CP_GR3410_2001_PROV_W
#else //!UNICODE
#define CP_GR3410_2001_PROV CP_GR3410_2001_PROV_A
#endif //!UNICODE
#define CP_GR3410_2012_PROV_A "Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider"
#ifdef UNICODE
#define CP_GR3410_2012_PROV CAT_L(CP_GR3410_2012_PROV_A)
#else //!UNICODE
#define CP_GR3410_2012_PROV CP_GR3410_2012_PROV_A
#endif //!UNICODE
#define CP_GR3410_2012_STRONG_PROV_A "Crypto-Pro GOST R 34.10-2012 Strong Cryptographic Service Provider"
#ifdef UNICODE
#define CP_GR3410_2012_STRONG_PROV CAT_L(CP_GR3410_2012_STRONG_PROV_A)
#else //!UNICODE
#define CP_GR3410_2012_STRONG_PROV CP_GR3410_2012_STRONG_PROV_A
#endif //!UNICODE
#define CP_RSA_AES_ENH_PROV_A "Crypto-Pro Enhanced RSA and AES CSP"
#ifdef UNICODE
#define CP_RSA_AES_ENH_PROV CAT_L(CP_RSA_AES_ENH_PROV_A)
#else //!UNICODE
#define CP_RSA_AES_ENH_PROV CP_RSA_AES_ENH_PROV_A
#endif //!UNICODE
#define CP_ECDSA_AES_PROV_A "Crypto-Pro ECDSA and AES CSP"
#ifdef UNICODE
#define CP_ECDSA_AES_PROV CAT_L(CP_ECDSA_AES_PROV_A)
#else //!UNICODE
#define CP_ECDSA_AES_PROV CP_ECDSA_AES_PROV_A
#endif //!UNICODE
#define CP_RSA_BASE_PROV_A "Crypto-Pro RSA Cryptographic Service Provider"
#ifdef UNICODE
#define CP_RSA_BASE_PROV CAT_L(CP_RSA_BASE_PROV_A)
#else //!UNICODE
#define CP_RSA_BASE_PROV CP_RSA_BASE_PROV_A
#endif //!UNICODE
#define CP_EC_CURVE25519_PROV_A "Crypto-Pro Curve25519 and AES CSP"
#ifdef UNICODE
#define CP_EC_CURVE25519_PROV CAT_L(CP_EC_CURVE25519_PROV_A)
#else //!UNICODE
#define CP_EC_CURVE25519_PROV CP_EC_CURVE25519_PROV_A
#endif //!UNICODE
#define CP_KC1_GR3410_94_PROV_A "Crypto-Pro GOST R 34.10-94 KC1 CSP"
#define CP_KC1_GR3410_94_PROV_W L"Crypto-Pro GOST R 34.10-94 KC1 CSP"
#ifdef UNICODE
#define CP_KC1_GR3410_94_PROV CP_KC1_GR3410_94_PROV_W
#else //!UNICODE
#define CP_KC1_GR3410_94_PROV CP_KC1_GR3410_94_PROV_A
#endif //!UNICODE
#define CP_KC1_GR3410_2001_PROV_A "Crypto-Pro GOST R 34.10-2001 KC1 CSP"
#define CP_KC1_GR3410_2001_PROV_W L"Crypto-Pro GOST R 34.10-2001 KC1 CSP"
#ifdef UNICODE
#define CP_KC1_GR3410_2001_PROV CP_KC1_GR3410_2001_PROV_W
#else //!UNICODE
#define CP_KC1_GR3410_2001_PROV CP_KC1_GR3410_2001_PROV_A
#endif //!UNICODE
#define CP_KC1_GR3410_2012_PROV_A "Crypto-Pro GOST R 34.10-2012 KC1 CSP"
#ifdef UNICODE
#define CP_KC1_GR3410_2012_PROV CAT_L(CP_KC1_GR3410_2012_PROV_A)
#else //!UNICODE
#define CP_KC1_GR3410_2012_PROV CP_KC1_GR3410_2012_PROV_A
#endif //!UNICODE
#define CP_KC1_GR3410_2012_STRONG_PROV_A "Crypto-Pro GOST R 34.10-2012 KC1 Strong CSP"
#ifdef UNICODE
#define CP_KC1_GR3410_2012_STRONG_PROV CAT_L(CP_KC1_GR3410_2012_STRONG_PROV_A)
#else //!UNICODE
#define CP_KC1_GR3410_2012_STRONG_PROV CP_KC1_GR3410_2012_STRONG_PROV_A
#endif //!UNICODE
#define CP_KC2_GR3410_94_PROV_A "Crypto-Pro GOST R 34.10-94 KC2 CSP"
#define CP_KC2_GR3410_94_PROV_W L"Crypto-Pro GOST R 34.10-94 KC2 CSP"
#ifdef UNICODE
#define CP_KC2_GR3410_94_PROV CP_KC2_GR3410_94_PROV_W
#else //!UNICODE
#define CP_KC2_GR3410_94_PROV CP_KC2_GR3410_94_PROV_A
#endif //!UNICODE
#define CP_KC2_GR3410_2001_PROV_A "Crypto-Pro GOST R 34.10-2001 KC2 CSP"
#define CP_KC2_GR3410_2001_PROV_W L"Crypto-Pro GOST R 34.10-2001 KC2 CSP"
#ifdef UNICODE
#define CP_KC2_GR3410_2001_PROV CP_KC2_GR3410_2001_PROV_W
#else //!UNICODE
#define CP_KC2_GR3410_2001_PROV CP_KC2_GR3410_2001_PROV_A
#endif //!UNICODE
#define CP_KC2_GR3410_2012_PROV_A "Crypto-Pro GOST R 34.10-2012 KC2 CSP"
#ifdef UNICODE
#define CP_KC2_GR3410_2012_PROV CAT_L(CP_KC2_GR3410_2012_PROV_A)
#else //!UNICODE
#define CP_KC2_GR3410_2012_PROV CP_KC2_GR3410_2012_PROV_A
#endif //!UNICODE
#define CP_KC2_GR3410_2012_STRONG_PROV_A "Crypto-Pro GOST R 34.10-2012 KC2 Strong CSP"
#ifdef UNICODE
#define CP_KC2_GR3410_2012_STRONG_PROV CAT_L(CP_KC2_GR3410_2012_STRONG_PROV_A)
#else //!UNICODE
#define CP_KC2_GR3410_2012_STRONG_PROV CP_KC2_GR3410_2012_STRONG_PROV_A
#endif //!UNICODE
#define PH_GR3410_2001_PROV_A "Phoenix-CS GOST R 34.10-2001 Cryptographic Service Provider"
#define PH_GR3410_2001_PROV_W L"Phoenix-CS GOST R 34.10-2001 Cryptographic Service Provider"
#ifdef UNICODE
#define PH_GR3410_2001_PROV PH_GR3410_2001_PROV_W
#else //!UNICODE
#define PH_GR3410_2001_PROV PH_GR3410_2001_PROV_A
#endif //!UNICODE
#ifdef _WIN32
# define CP_KC1_GR3410_2001_MAGISTRA_PROV_A "GOST R 34.10-2001 Magistra CSP"
# define CP_KC1_GR3410_2001_MAGISTRA_PROV_W L"GOST R 34.10-2001 Magistra CSP"
# define CP_KC1_GR3410_2001_RUTOKEN_PROV_A "GOST R 34.10-2001 Rutoken CSP"
# define CP_KC1_GR3410_2001_RUTOKEN_PROV_W L"GOST R 34.10-2001 Rutoken CSP"
# define CP_KC1_GR3410_2001_ETOKEN_PROV_A "GOST R 34.10-2001 eToken CSP"
# define CP_KC1_GR3410_2001_ETOKEN_PROV_W L"GOST R 34.10-2001 eToken CSP"
# define CP_KC1_GR3410_2001_ETOKENGOST_PROV_A "GOST R 34.10-2001 eToken GOST CSP"
# define CP_KC1_GR3410_2001_ETOKENGOST_PROV_W L"GOST R 34.10-2001 eToken GOST CSP"
# define CP_KC1_GR3410_2001_UECFK_PROV_A "CryptoPro GOST R 34.10-2001 UEC CSP"
# define CP_KC1_GR3410_2001_UECFK_PROV_W L"CryptoPro GOST R 34.10-2001 UEC CSP"
#else
# define CP_KC1_GR3410_2001_MAGISTRA_PROV_A "Crypto-Pro GOST R 34.10-2001 FKC CSP"
# define CP_KC1_GR3410_2001_MAGISTRA_PROV_W L"Crypto-Pro GOST R 34.10-2001 FKC CSP"
# define CP_KC1_GR3410_2001_RUTOKEN_PROV_A "Crypto-Pro GOST R 34.10-2001 FKC CSP"
# define CP_KC1_GR3410_2001_RUTOKEN_PROV_W L"Crypto-Pro GOST R 34.10-2001 FKC CSP"
# define CP_KC1_GR3410_2001_ETOKEN_PROV_A "Crypto-Pro GOST R 34.10-2001 FKC CSP"
# define CP_KC1_GR3410_2001_ETOKEN_PROV_W L"Crypto-Pro GOST R 34.10-2001 FKC CSP"
# define CP_KC1_GR3410_2001_ETOKENGOST_PROV_A "Crypto-Pro GOST R 34.10-2001 FKC CSP"
# define CP_KC1_GR3410_2001_ETOKENGOST_PROV_W L"Crypto-Pro GOST R 34.10-2001 FKC CSP"
# define CP_KC1_GR3410_2001_UECFK_PROV_A "Crypto-Pro GOST R 34.10-2001 FKC CSP"
# define CP_KC1_GR3410_2001_UECFK_PROV_W L"Crypto-Pro GOST R 34.10-2001 FKC CSP"
#endif
#ifdef UNICODE
#define CP_KC1_GR3410_2001_MAGISTRA_PROV CP_KC1_GR3410_2001_MAGISTRA_PROV_W
#define CP_KC1_GR3410_2001_RUTOKEN_PROV CP_KC1_GR3410_2001_RUTOKEN_PROV_W
#define CP_KC1_GR3410_2001_ETOKEN_PROV CP_KC1_GR3410_2001_ETOKEN_PROV_W
#define CP_KC1_GR3410_2001_ETOKENGOST_PROV CP_KC1_GR3410_2001_ETOKENGOST_PROV_W
#define CP_KC1_GR3410_2001_UECFK_PROV CP_KC1_GR3410_2001_UECFK_PROV_W
#else //!UNICODE
#define CP_KC1_GR3410_2001_MAGISTRA_PROV CP_KC1_GR3410_2001_MAGISTRA_PROV_A
#define CP_KC1_GR3410_2001_RUTOKEN_PROV CP_KC1_GR3410_2001_RUTOKEN_PROV_A
#define CP_KC1_GR3410_2001_ETOKEN_PROV CP_KC1_GR3410_2001_ETOKEN_PROV_A
#define CP_KC1_GR3410_2001_ETOKENGOST_PROV CP_KC1_GR3410_2001_ETOKENGOST_PROV_A
#define CP_KC1_GR3410_2001_UECFK_PROV CP_KC1_GR3410_2001_UECFK_PROV_A
#endif //!UNICODE
#define CP_KC1_GR3410_2001_FLASH_PROV_A "Crypto-Pro Flash Drive KC1 CSP"
#define CP_KC1_GR3410_2001_FLASH_PROV_W L"Crypto-Pro Flash Drive KC1 CSP"
#ifdef UNICODE
#define CP_KC1_GR3410_2001_FLASH_PROV CP_KC1_GR3410_2001_FLASH_PROV_W
#else //!UNICODE
#define CP_KC1_GR3410_2001_FLASH_PROV CP_KC1_GR3410_2001_FLASH_PROV_A
#endif //!UNICODE
#define CP_KC1_GR3410_2001_REGISTRY_PROV_A "Crypto-Pro Registry KC1 CSP"
#define CP_KC1_GR3410_2001_REGISTRY_PROV_W L"Crypto-Pro Registry KC1 CSP"
#ifdef UNICODE
#define CP_KC1_GR3410_2001_REGISTRY_PROV CP_KC1_GR3410_2001_REGISTRY_PROV_W
#else //!UNICODE
#define CP_KC1_GR3410_2001_REGISTRY_PROV CP_KC1_GR3410_2001_REGISTRY_PROV_A
#endif //!UNICODE
#ifdef UNICODE
#define CP_CERT_STORE_PROV_FILENAME_T CERT_STORE_PROV_FILENAME_W
#else //!UNICODE
#define CP_CERT_STORE_PROV_FILENAME_T CERT_STORE_PROV_FILENAME_A
#endif //!UNICODE
#define CRYPTOPRO_TRUSTED_CERT_STORE_NAME_A "CryptoProTrustedStore"
#define CRYPTOPRO_TRUSTED_CERT_STORE_NAME_W L"CryptoProTrustedStore"
#ifndef UNIX
#define PROV_TYPE_CNG ((DWORD)(-1))
#endif // !UNIX
/*
* PROV_GOST_DH == 2 == PROV_RSA_SIG
*/
#define PROV_GOST_DH 2 //deprecated
/*
* На 09.07.01 в Platform SDK последний зарегистрированный
* CSP - PROV_RSA_AES == 24
*
* Я выбрал для PROV_GOST_* два случайных числа из диапазона [53..89]
*
* Randomly selected numbers from [53..89]
*/
#define PROV_GOST_94_DH 71 //deprecated
#define PROV_GOST_2001_DH 75
#define PROV_GOST_2012_256 80
#define PROV_GOST_2012_512 81
#ifndef PROV_RSA_AES
#define PROV_RSA_AES 24
#endif /*PROV_RSA_AES*/
#define PROV_EC_CURVE25519 32
/* Типы контейнера */
/* Container Types */
#define KEY_CARRIER_VERSION_V1 1 /* не поддерживается с 3 марта 2020 года */
#define KEY_CARRIER_VERSION_V2 2
#define KEY_CARRIER_VERSION_V3 3 /* FKC-1. unused in 5.0 */
#define KEY_CARRIER_VERSION_V4 4 /* FKC-2. */
/* Дополнительные типы кодирования.
* В Platform SDK определены только CRYPT_ASN_ENCODING (1),
* CRYPT_NDR_ENCODING (2) и значения выше 0x10000 (PKCS7).
*
* Additional Encoding Types
*/
#define CRYPT_XER_ENCODING (8)
/* Дополнительные свойства контекстов сертификатов */
/* CRYPT_DATA_BLOB, содержащий отпечаток shadow-сертификата, который должен быть использован для создания Schannel Credential */
#define CP_CERT_SHADOW_CERT_PROP_ID 0x0000FF00
/* CRYPT_DATA_BLOB, содержащий отпечаток сертификата, который должен быть использован для создания серверного удостоверения с несколькими сертификатами в IIS [http.sys]*/
#define CP_CERT_LINKED_CERT_PROP_ID 0x0000FF01
#define CERT_URL_OBJECT_CACHE_DATA_PROP_ID 0x00008001
/*
* Дополнительные флаги AcquireContext. Глобальные установки криптопровайдера.
*
* Addional AcquireContext flags. Global cryptoprovider settings.
*/
#define CRYPT_GENERAL 0x00004000
#define CRYPT_NOSERIALIZE 0x00010000 // from 3.6.5327, before: 0x8000 [
#define CRYPT_REBOOT 0x00020000
#define CRYPT_PROMT_INSERT_MEDIA 0x00040000 // supported from 3.6.5360
#define CRYPT_UECDATACONTEXT 0x00080000
#define CRYPT_CMS_HIGHLOAD_NOSERIALIZE 0x00100000
#define CRYPT_LOCAL_PASSWORD_CACHE 0x00200000
#define CRYPT_NO_CONTAINER_CACHE 0x00400000
#define ACQUIRE_CONTEXT_SUPPORTED_FLAGS (CRYPT_GENERAL | CRYPT_NOSERIALIZE | CRYPT_REBOOT | CRYPT_PROMT_INSERT_MEDIA | CRYPT_UECDATACONTEXT | CRYPT_CMS_HIGHLOAD_NOSERIALIZE | CRYPT_NO_CONTAINER_CACHE | CRYPT_LOCAL_PASSWORD_CACHE)
/*
* Дополнительные флаги PFXImportCertStore
*
* Addional PFXImportCertStore flags
*/
#ifndef PKCS12_IMPORT_SILENT
#define PKCS12_IMPORT_SILENT 0x00000040
#endif
#ifndef CRYPT_USER_PROTECTED_STRONG
#define CRYPT_USER_PROTECTED_STRONG 0x00100000
#endif
/*
* Дополнительные флаги PFXExportCertStoreEx
*
* Addional PFXExportCertStoreEx flags
*/
#ifndef PKCS12_PROTECT_TO_DOMAIN_SIDS
#define PKCS12_PROTECT_TO_DOMAIN_SIDS 0x0020
#endif
#ifndef PKCS12_EXPORT_SILENT
#define PKCS12_EXPORT_SILENT 0x0040
#endif
#define szOID_PKCS_12_pbeWithGostR3411_94_AndGost28147_89_CryptoPro_A_ParamSet "1.2.840.113549.1.12.1.80"
#define szOID_PKCS_5_PBES2 "1.2.840.113549.1.5.13"
/*
* Флаги CryptSetProvParam
*
* CryptSetProvParam flags
*/
/* флаг для запоминания пароля в реестре */
#define CP_CRYPT_SAVE_PASSWORD 0x00001000
/* Флаг, указывающий, что запрошенная функциональность будет применена
* только к текущему контексту провайдера */
#define CP_CRYPT_CACHE_ONLY 0x00002000
/* Синоним CP_CRYPT_CACHE_ONLY. Указывает, что запрошенная функциональность будет применена
* только к текущему контексту контейнера */
#define CP_CRYPT_CONTAINER_ONLY CP_CRYPT_CACHE_ONLY
/* Флаг, указывающий, что из PP_USER_CERTSTORE/PP_ROOT_CERTSTORE
* будет возвращено сериализованное store в виде блоба.
* Также флаг применим для CryptSetProvParam(PP_ROOT_CERTSTORE)
*/
#define CP_CRYPT_SERIALIZED_STORE 0x00004000
/* Дополнительные флаги CryptMsgOpenToEncode и CryptMsgControl, определяющие
* поведение при формировании подписи CAdES-BES. */
#define CPCMSG_CADES_STRICT (0x00000100)
#define CPCMSG_CADES_DISABLE (0x00000200)
#define CPCMSG_CADES_DISABLE_CERT_SEARCH (0x00000400)
/* Дополнительные флаги CryptMsgOpenToEncode, CryptMsgUpdate, CryptMsgControl,
* определяющие какие данные (контент/атрибуты) будут хэшироваться
* на pin-pad/SafeTouch. */
#define CPCMSG_DTBS_CONTENT (0x00000800)
#define CPCMSG_DTBS_ATTRIBUTE (0x00001000)
#define CPCMSG_DTBS_CERTIFICATE (0x00002000)
/* Дополнительные флаги CryptSignMessage, определяющие
* поведение при формировании подписи CAdES-BES. */
#define CPCRYPT_MESSAGE_CADES_STRICT (CPCMSG_CADES_STRICT)
#define CPCRYPT_MESSAGE_CADES_DISABLE (CPCMSG_CADES_DISABLE)
/* Дополнительные флаги CryptSignMessage, определяющие
* какие данные (контент/атрибуты) будут хэшироваться
* на pin-pad/SafeTouch. */
#define CPCRYPT_MESSAGE_DTBS_CONTENT (CPCMSG_DTBS_CONTENT)
#define CPCRYPT_MESSAGE_DTBS_ATTRIBUTE (CPCMSG_DTBS_ATTRIBUTE)
/* ???? Флаг CryptGenKey, определяющий ключи, используемые совместно с ФКН.*/
#define CRYPT_ECCNEGATIVE 0x00000400
#define CRYPT_PUBLICCOMPRESS 0x00000800
/* флаги CryptSetKeyParam KP_ADDX для сложения/вычитания */
#define EC_PLUS 0
#define EC_MINUS 1
/* флаг CryptSetKeyParam KP_AUTH_TAG для сохранения в контексте ключа тэга аутентификации сообщения */
#define SAVE_AUTH_TAG 0x100
/* флаг GenKey для разрешения/запрета ДХ для ключей подписи (переопределяем CRYPT_SGCKEY) */
#define CP_CRYPT_DH_ALLOWED 0x00002000
/* флаг KP_PERMISSIONS для разрешения/запрета ДХ */
#define CP_CRYPT_DH_PERMISSION 0x00010000
/* флаг KP_STORE, указывающий, что записываемый в контейнер ключ может быть перезаписан другим вызовом KP_STORE */
#define CP_CRYPT_REWRITABLE 0x00020000
/* флаг для определения наследования ключом согласования экспортируемости исходного секретного ключа */
#define CRYPT_KEY_PROTECTION_HIGH 0x00400000
/* флаг принудительного вычисления открытого ключа при экспорте */
#define CP_CRYPT_CALCULATE_PUBLIC_KEY (0x80)
/* флаг ImportKey для ускорения повторного использования импортируемого открытого ключа */
#define CP_PUBKEY_REUSABLE 0x00002000
/* флаг создания CALG_TLS1_MASTER при выполнении ECDHE */
#define CP_CREATE_TLS_PREMASTER 0x00004000
/* флаг форсирования Diffie-Hellman */
#define CP_FORCE_GOST_DH 0x00008000
/* Флаг, указывающий, что при экспорте/импорте pfx
* необходимо попытаться установить/извлечь срок действия контейнера
* в атрибуты. Используется в функциях CryptExportKey и CryptImportKey.
*/
#define CP_CRYPT_PKUP_ATTRIBUTE 0x00800000
/* флаг SetKeyParam для умножения эллиптики на хэндл */
#define CP_CRYPT_DATA_HANDLE 0x00000010
/* флаг SetKeyParam для экспортируемости результата KP_ADDX */
#define CP_MAKE_EXPORTABLE 0x00000020
/* Флаг предназначен для работы с ImportKey и ExportKey только с использованием Diffie-Hellman.
Обеспечивает работу с блобом без ASN.1 структуры с информацией об открытом ключе. */
#define CP_PRIMITIVE_PUBLICKEYBLOB 0x00000020
/* Флаг предназначен для работы ExportKey и ImportKey при экспорте/импорте симметричных ключей в MGM (CALG_MGM_EXPORT_M/K).
Отключает вычисление и проверку тэга аутентификации. */
#define CP_AUTH_TAG_DISABLED 0x10000000
/* Дополнительные режимы дополнения блока открытого текста до кратности размера блока шифрования*/
#define ISO10126_PADDING 4
#define ANSI_X923_PADDING 5
#define TLS_1_0_PADDING 6
#define ISO_IEC_7816_4_PADDING 7
#define TLS_1_0_MAX_PADDING_LENGTH 256
#define MAX_PADDING_LENGTH TLS_1_0_MAX_PADDING_LENGTH
/* Описатели пользовательских ключей */
#define USERKEY_KEYEXCHANGE AT_KEYEXCHANGE
#define USERKEY_SIGNATURE AT_SIGNATURE
#define CP_DISREGARD_STRENGTHENED_KEY_USAGE_CONTROL (0x80000000)
/* флаги SignHash\VerifySignature */
#define CP_ECC_PLAIN_SIGNATURE (0x00000008) // формат подписи (r|s) в LittleEndian
#define CP_CONTANER_AFFECTED_SIGNATURE (0x00000010)
#define CP_ECC_PLAIN_SIGNATURE_CNG_REVERSED (0x00000020) // формат подписи (s|r) в LittleEndian
#define CP_PSEUDO_RANDOM_K_ONLY (0x00000040) // отключает новый формат выработки k
#define CRYPT_RSA_PSS (0x00000080) // подпись с PSS-паддингом
#define CMS_BLOCKLEN_TAG 'B'
/* Algorithm types */
#define ALG_TYPE_GR3410 (7 << 9)
#define ALG_TYPE_SHAREDKEY (8 << 9)
/* GR3411 sub-ids */
#define ALG_SID_GR3411 30
#define ALG_SID_GR3411_HASH 39
#define ALG_SID_GR3411_HASH34 40
#define ALG_SID_GR3411_HMAC_FIXEDKEY 55
#define ALG_SID_UECMASTER_DIVERS 47
#define ALG_SID_SHAREDKEY_HASH 50
#define ALG_SID_FITTINGKEY_HASH 51
/* G28147 sub_ids */
#define ALG_SID_G28147 30
#define ALG_SID_PRODIVERS 38
#define ALG_SID_RIC1DIVERS 40
#define ALG_SID_PRO12DIVERS 45
#define ALG_SID_KDF_TREE_GOSTR3411_2012_256 35
/* Export Key sub_id */
#define ALG_SID_PRO_EXP 31
#define ALG_SID_SIMPLE_EXP 32
#define ALG_SID_SIMPLE_EXP_M 87
#define ALG_SID_SIMPLE_EXP_K 88
#define ALG_SID_PRO12_EXP 33
#define ALG_SID_KEXP_2015_M 36
#define ALG_SID_KEXP_2015_K 37
#define ALG_SID_MGM_EXPORT_M 41
#define ALG_SID_MGM_EXPORT_K 42
/* GR3412 sub_ids*/
#define ALG_SID_GR3412_2015_M 48
#define ALG_SID_GR3412_2015_K 49
/* Hash sub ids */
#define ALG_SID_G28147_MAC 31
#define ALG_SID_G28147_CHV 48
#define ALG_SID_TLS1_MASTER_HASH 32
#define ALG_SID_TLS1PRF_2012_256 49
#define ALG_SID_TLS1_MASTER_HASH_2012_256 54
#define ALG_SID_TLS1_MD5_XOR_SHA1 15
/*MDC2 Hash id*/
#define ALG_SID_MDC2 0x11e
/*SHA Hash ids*/
#define ALG_SID_SHA_224 0x11d
#define ALG_SID_SHA_256 12
#define ALG_SID_SHA_384 13
#define ALG_SID_SHA_512 14
/* SHA3 Hash ids */
#define ALG_SID_SHA3_224 77
#define ALG_SID_SHA3_256 78
#define ALG_SID_SHA3_384 79
#define ALG_SID_SHA3_512 80
/* GOST R 34.11-2012 hash sub ids */
#define ALG_SID_GR3411_2012_256 33
#define ALG_SID_GR3411_2012_512 34
#define ALG_SID_GR3411_2012_256_HMAC 52
#define ALG_SID_GR3411_2012_512_HMAC 53
#define ALG_SID_GR3411_2012_256_HMAC_FIXEDKEY 56
#define ALG_SID_GR3411_2012_512_HMAC_FIXEDKEY 57
#define ALG_SID_PBKDF2_2012_512 58
#define ALG_SID_PBKDF2_2012_256 59
#define ALG_SID_PBKDF2_94_256 64
#define ALG_SID_GR3411_PRFKEYMAT 74
#define ALG_SID_GR3411_2012_256_PRFKEYMAT 75
#define ALG_SID_GR3411_2012_512_PRFKEYMAT 76
#define ALG_SID_FOREIGN_PRFKEYMAT 83
/* GOST R 34.13-2015 hash sub ids */
#define ALG_SID_GR3413_2015_M_IMIT 60
#define ALG_SID_GR3413_2015_K_IMIT 61
#define ALG_SID_CMAC 62
#define ALG_SID_PBKDF2 63
#define ALG_SID_MGM_AUTH 65
#define ALG_SID_ANSI_X9_19_MAC 66
#define ALG_SID_KDF_TREE_HMAC_SHA_256 67
#define ALG_SID_HASH_VALUE_STORAGE 81
#define ALG_SID_ANSI_X963_KDF 82
#define ALG_SID_HASH_TO_CURVE 85
#define ALG_SID_HASH_TO_FIELD 86
#define ALG_SID_NO_HASH 84
/* VKO GOST R 34.10-2012 512-bit outputs sub-id*/
#define ALG_SID_SYMMETRIC_512 34
/* GOST_DH sub ids */
#define ALG_SID_DH_EX_SF 30
#define ALG_SID_DH_EX_EPHEM 31
#define ALG_SID_PRO_AGREEDKEY_DH 33
#define ALG_SID_GR3410 30
#define ALG_SID_GR3410EL 35
#define ALG_SID_GR3410_12_256 73
#define ALG_SID_GR3410_12_512 61
#define ALG_SID_DH_EL_SF 36
#define ALG_SID_DH_EL_EPHEM 37
#define ALG_SID_DH_GR3410_12_256_SF 70
#define ALG_SID_DH_GR3410_12_256_EPHEM 71
#define ALG_SID_DH_GR3410_12_512_SF 66
#define ALG_SID_DH_GR3410_12_512_EPHEM 67
#define ALG_SID_GR3410_94_ESDH 39
#define ALG_SID_GR3410_01_ESDH 40
#define ALG_SID_GR3410_12_256_ESDH 72
#define ALG_SID_GR3410_12_512_ESDH 63
#define ALG_SID_UECDIVERS 44
#define ALG_SID_UECSYMMETRIC 46
#define ALG_SID_UECSYMMETRIC_EPHEM 47
#define ALG_SID_GENERIC_SECRET 21
#define ALG_SID_GOST_GENERIC_SECRET 22
#define ALG_SID_HYBRID_SECRET 23
#define ALG_CLASS_UECSYMMETRIC (6 << 13)
#define AT_UECSYMMETRICKEY 0x80000004 //deprecated
#define AT_SYMMETRIC 0x80000005
#define CALG_MDC2 \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MDC2)
#ifndef CALG_SHA_224
#define CALG_SHA_224 \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_224)
#endif
#ifndef CALG_SHA_256
#define CALG_SHA_256 \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_256)
#endif
#ifndef CALG_SHA_384
#define CALG_SHA_384 \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_384)
#endif
#ifndef CALG_SHA_512
#define CALG_SHA_512 \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_512)
#endif
#define CALG_SHA3_224 \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA3_224)
#define CALG_SHA3_256 \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA3_256)
#define CALG_SHA3_384 \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA3_384)
#define CALG_SHA3_512 \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA3_512)
#define CALG_GR3411 \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_GR3411)
#define CALG_GR3411_2012_256 \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_GR3411_2012_256)
#define CALG_GR3411_2012_512 \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_GR3411_2012_512)
#define CALG_GR3411_HMAC \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_GR3411_HASH)
#define CALG_GR3411_HMAC34 \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_GR3411_HASH34)
#define CALG_UECMASTER_DIVERS \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_UECMASTER_DIVERS)
#define CALG_GR3411_HMAC_FIXEDKEY \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_GR3411_HMAC_FIXEDKEY)
#define CALG_GR3411_2012_256_HMAC \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_GR3411_2012_256_HMAC)
#define CALG_GR3411_2012_512_HMAC \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_GR3411_2012_512_HMAC)
#define CALG_GR3411_2012_256_HMAC_FIXEDKEY \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_GR3411_2012_256_HMAC_FIXEDKEY)
#define CALG_GR3411_2012_512_HMAC_FIXEDKEY \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_GR3411_2012_512_HMAC_FIXEDKEY)
#define CALG_GR3411_PRFKEYMAT \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_GR3411_PRFKEYMAT)
#define CALG_GR3411_2012_256_PRFKEYMAT \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_GR3411_2012_256_PRFKEYMAT)
#define CALG_GR3411_2012_512_PRFKEYMAT \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_GR3411_2012_512_PRFKEYMAT)
#define CALG_FOREIGN_PRFKEYMAT \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_FOREIGN_PRFKEYMAT)
#define CALG_G28147_MAC \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_G28147_MAC)
#define CALG_G28147_IMIT \
CALG_G28147_MAC
#define CALG_GR3413_2015_M_IMIT \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_GR3413_2015_M_IMIT)
#define CALG_GR3413_2015_K_IMIT \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_GR3413_2015_K_IMIT)
#define CALG_CMAC \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_CMAC)
#define CALG_MGM_AUTH \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MGM_AUTH)
#define CALG_ANSI_X9_19_MAC \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_ANSI_X9_19_MAC)
#define CALG_HASH_TO_CURVE \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HASH_TO_CURVE)
#define CALG_HASH_TO_FIELD \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HASH_TO_FIELD)
#define CALG_G28147_CHV \
(ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_ANY | ALG_SID_G28147_MAC)
#define CALG_GR3410 \
(ALG_CLASS_SIGNATURE | ALG_TYPE_GR3410 | ALG_SID_GR3410)
#define CALG_GR3410EL \
(ALG_CLASS_SIGNATURE | ALG_TYPE_GR3410 | ALG_SID_GR3410EL)
#define CALG_GR3410_12_256 \
(ALG_CLASS_SIGNATURE | ALG_TYPE_GR3410 | ALG_SID_GR3410_12_256)
#define CALG_GR3410_12_512 \
(ALG_CLASS_SIGNATURE | ALG_TYPE_GR3410 | ALG_SID_GR3410_12_512)
#define CALG_G28147 \
(ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_G28147)
#define CALG_SYMMETRIC_512 \
(ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_SYMMETRIC_512)
#define CALG_GR3412_2015_M \
(ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_GR3412_2015_M)
#define CALG_GR3412_2015_K \
(ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_GR3412_2015_K)
#define CALG_DH_EX_SF \
(ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_DH_EX_SF)
#define CALG_DH_EX_EPHEM \
(ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_DH_EX_EPHEM)
#define CALG_DH_EX \
CALG_DH_EX_SF
#define CALG_DH_EL_SF \
(ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_DH_EL_SF)
#define CALG_DH_EL_EPHEM \
(ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_DH_EL_EPHEM)
#define CALG_DH_GR3410_12_256_SF \
(ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_DH_GR3410_12_256_SF)
#define CALG_DH_GR3410_12_256_EPHEM \
(ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_DH_GR3410_12_256_EPHEM)
#define CALG_DH_GR3410_12_512_SF \
(ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_DH_GR3410_12_512_SF)
#define CALG_DH_GR3410_12_512_EPHEM \
(ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_DH_GR3410_12_512_EPHEM)
#define CALG_UECSYMMETRIC \
(ALG_CLASS_UECSYMMETRIC | ALG_TYPE_BLOCK | ALG_SID_UECSYMMETRIC)
#define CALG_UECSYMMETRIC_EPHEM \
(ALG_CLASS_UECSYMMETRIC | ALG_TYPE_BLOCK | ALG_SID_UECSYMMETRIC_EPHEM)
#define CALG_GR3410_94_ESDH \
(ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_GR3410_94_ESDH)
#define CALG_GR3410_01_ESDH \
(ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_GR3410_01_ESDH)
#define CALG_GR3410_12_256_ESDH \
(ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_GR3410_12_256_ESDH)
#define CALG_GR3410_12_512_ESDH \
(ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_GR3410_12_512_ESDH)
#define CALG_PRO_AGREEDKEY_DH \
(ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_BLOCK | ALG_SID_PRO_AGREEDKEY_DH)
#define CALG_PRO12_EXPORT \
(ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_PRO12_EXP)
#define CALG_PRO_EXPORT \
(ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_PRO_EXP)
#define CALG_SIMPLE_EXPORT \
(ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_SIMPLE_EXP)
#define CALG_SIMPLE_EXPORT_K \
(ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_SIMPLE_EXP_K)
#define CALG_SIMPLE_EXPORT_M \
(ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_SIMPLE_EXP_M)
#define CALG_KEXP_2015_M \
(ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_KEXP_2015_M)
#define CALG_KEXP_2015_K \
(ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_KEXP_2015_K)
#define CALG_MGM_EXPORT_M \
(ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_MGM_EXPORT_M)
#define CALG_MGM_EXPORT_K \
(ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_MGM_EXPORT_K)
#define CALG_TLS1PRF_2012_256 \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_TLS1PRF_2012_256)
#define CALG_TLS1_MASTER_HASH \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_TLS1_MASTER_HASH)
#define CALG_TLS1_MASTER_HASH_2012_256 \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_TLS1_MASTER_HASH_2012_256)
#define CALG_TLS1_MD5_XOR_SHA1 \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_TLS1_MD5_XOR_SHA1)
#define CALG_TLS1_MAC_KEY \
(ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_MAC_KEY)
#define CALG_TLS1_ENC_KEY \
(ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_ENC_KEY)
#define CALG_PBKDF2_2012_512 \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_PBKDF2_2012_512)
#define CALG_PBKDF2_2012_256 \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_PBKDF2_2012_256)
#define CALG_PBKDF2_94_256 \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_PBKDF2_94_256)
#define CALG_PBKDF2 \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_PBKDF2)
#define CALG_HASH_VALUE_STORAGE \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HASH_VALUE_STORAGE)
#define CALG_NO_HASH \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_NO_HASH)
#define CALG_SHAREDKEY_HASH \
(ALG_CLASS_HASH | ALG_TYPE_SHAREDKEY | ALG_SID_SHAREDKEY_HASH)
#define CALG_FITTINGKEY_HASH \
(ALG_CLASS_HASH | ALG_TYPE_SHAREDKEY | ALG_SID_FITTINGKEY_HASH)
#define CALG_GENERIC_SECRET \
(ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_GENERIC_SECRET)
#define CALG_GOST_GENERIC_SECRET \
(ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_GOST_GENERIC_SECRET)
#define CALG_HYBRID_SECRET \
(ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_HYBRID_SECRET)
#define CALG_PRO_DIVERS \
(ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_PRODIVERS)
#define CALG_RIC_DIVERS \
(ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_RIC1DIVERS)
#define CALG_OSCAR_DIVERS CALG_RIC_DIVERS
#define CALG_PRO12_DIVERS \
(ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_PRO12DIVERS)
#define CALG_KDF_TREE_GOSTR3411_2012_256 \
(ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_KDF_TREE_GOSTR3411_2012_256)
#define CALG_KDF_TREE_HMAC_SHA_256 \
(ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_KDF_TREE_HMAC_SHA_256)
#define CALG_ANSI_X963_KDF \
(ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_ANSI_X963_KDF)
#ifndef CALG_ECDSA
#ifndef ALG_SID_ECDSA
#define ALG_SID_ECDSA 3
#endif
#define CALG_ECDSA (ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_ECDSA)
#endif
// Some DSS sub-ids
#define ALG_SID_ED25519 32
#define ALG_SID_X25519_EPHEM 33
#define CALG_ED25519 (ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_ED25519)
#define CALG_X25519 (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_ED25519)
#define CALG_X25519_EPHEM (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_X25519_EPHEM)
#ifndef CALG_ECDH
#ifndef ALG_SID_ECDH
#define ALG_SID_ECDH 5
#endif
#define CALG_ECDH (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_ECDH)
#endif
#ifndef CALG_ECDH_EPHEM
#ifndef ALG_TYPE_ECDH
#define ALG_TYPE_ECDH (7 << 9)
#endif
#ifndef ALG_SID_ECDH_EPHEM
#define ALG_SID_ECDH_EPHEM 6
#endif
#define CALG_ECDH_EPHEM (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ECDH | ALG_SID_ECDH_EPHEM)
#endif
#define IS_GOST_PROV(providerType) \
(((providerType) == PROV_GOST_2001_DH) || \
((providerType) == PROV_GOST_2012_256) || \
((providerType) == PROV_GOST_2012_512))
#define IS_GOST_HASH(hashAlgId) \
(((hashAlgId) == CALG_GR3411) || \
((hashAlgId) == CALG_GR3411_2012_256) || \
((hashAlgId) == CALG_GR3411_2012_512))
#ifndef szOID_ECC_PUBLIC_KEY
// iso(1) member-body(2) us(840) 10045 keyType(2) unrestricted(1)
#define szOID_ECC_PUBLIC_KEY "1.2.840.10045.2.1"
#endif
#ifndef szOID_ECC_CURVE_P256
// iso(1) member-body(2) us(840) 10045 curves(3) prime(1) 7
#define szOID_ECC_CURVE_P256 "1.2.840.10045.3.1.7"
#endif
#ifndef szOID_ECC_CURVE_P384
// iso(1) identified-organization(3) certicom(132) curve(0) 34
#define szOID_ECC_CURVE_P384 "1.3.132.0.34"
#endif
#ifndef szOID_ECC_CURVE_P521
// iso(1) identified-organization(3) certicom(132) curve(0) 35
#define szOID_ECC_CURVE_P521 "1.3.132.0.35"
#endif
#define szOID_EC_DH "1.3.132.1.12"
#define szOID_ECC_CURVE_P192 "1.2.840.10045.3.1.1"
#define szOID_ECC_CURVE_P224 "1.3.132.0.33"
#define szOID_ED25519 "1.3.101.112"
#ifndef szOID_ECDSA_SHA224
// iso(1) member-body(2) us(840) 10045 signatures(4) specified(3) 1
#define szOID_ECDSA_SHA224 "1.2.840.10045.4.3.1"
#endif
#ifndef szOID_ECDSA_SHA256
// iso(1) member-body(2) us(840) 10045 signatures(4) specified(3) 2
#define szOID_ECDSA_SHA256 "1.2.840.10045.4.3.2"
#endif
#ifndef szOID_ECDSA_SHA384
// iso(1) member-body(2) us(840) 10045 signatures(4) specified(3) 3
#define szOID_ECDSA_SHA384 "1.2.840.10045.4.3.3"
#endif
#ifndef szOID_ECDSA_SHA512
// iso(1) member-body(2) us(840) 10045 signatures(4) specified(3) 4
#define szOID_ECDSA_SHA512 "1.2.840.10045.4.3.4"
#endif
#ifndef szOID_NIST_sha224
#define szOID_NIST_sha224 "2.16.840.1.101.3.4.2.4"