02.02.2007 16:33:30Как построить PKCS#7 из ЭЦП Ответов: 1
Алексей
Я работаю с низкоуровневыми функциями, получаю ЭЦП через CryptSignHash.
Требуется построить сообщение такого вида:

0 328: SEQUENCE {
4 9: OBJECT IDENTIFIER signedData (1 2 840 113549 1 7 2)
15 313: [0] {
19 309: SEQUENCE {
23 1: INTEGER 1
26 12: SET {
28 10: SEQUENCE {
30 6: OBJECT IDENTIFIER GOST R 34.11-94 (1 2 643 2 2 9)
38 0: NULL
: }
: }
40 11: SEQUENCE {
42 9: OBJECT IDENTIFIER data (1 2 840 113549 1 7 1)
: }
53 275: SET {
57 271: SEQUENCE {
61 1: INTEGER 1
64 175: SEQUENCE {
67 160: SEQUENCE {
70 26: SET {
72 24: SEQUENCE {
74 9: OBJECT IDENTIFIER
: emailAddress (1 2 840 113549 1 9 1)
85 11: IA5String 'ca@uopi.ogv'
: }
: }
98 11: SET {
100 9: SEQUENCE {
102 3: OBJECT IDENTIFIER countryName (2 5 4 6)
107 2: PrintableString 'RU'
: }
: }
111 21: SET {
113 19: SEQUENCE {
115 3: OBJECT IDENTIFIER stateOrProvinceName (2 5 4 8)
120 12: BMPString '...>.A.:.2.0'
: }
: }
134 21: SET {
136 19: SEQUENCE {
138 3: OBJECT IDENTIFIER localityName (2 5 4 7)
143 12: BMPString '...>.A.:.2.0'
: }
: }
157 29: SET {
159 27: SEQUENCE {
161 3: OBJECT IDENTIFIER organizationName (2 5 4 10)
166 20: BMPString '.$.!.. . .>.A.A.8.8'
: }
: }
188 27: SET {
190 25: SEQUENCE {
192 3: OBJECT IDENTIFIER
: organizationalUnitName (2 5 4 11)
197 18: BMPString '.!.?.5.F.A.2.O.7.L'
: }
: }
217 11: SET {
219 9: SEQUENCE {
221 3: OBJECT IDENTIFIER commonName (2 5 4 3)
226 2: PrintableString 'CA'
: }
: }
: }
230 10: INTEGER 11 5F 9A 41 00 00 00 00 00 9B
: }
242 10: SEQUENCE {
244 6: OBJECT IDENTIFIER GOST R 34.11-94 (1 2 643 2 2 9)
252 0: NULL
: }
254 10: SEQUENCE {
256 6: OBJECT IDENTIFIER GOST R 34.10-2001 (1 2 643 2 2 19)
264 0: NULL
: }
266 64: OCTET STRING
: 2E C0 D9 BA 35 0A 70 A7 94 82 D1 69 5B 60 12 68
: 97 92 46 3B 8F 7C CF 07 77 37 1D 75 33 CD 43 5F
: 35 25 DE B8 27 D4 C0 AF 0A 2D 22 72 DA 3A 4F 7D
: 6A BB FC F7 B5 B5 EB 12 52 86 94 AB C1 F2 49 C8
: }
: }
: }
: }
: }

Как мне построить такой формат?
Не нашел среди флагов функции CryptEncodeObject ничего подходящего, что бы получить signedData.
Чем надо пользоваться?
 
Ответы:
05.02.2007 17:35:57Kirill Sobolev
Самый подходящий который есть - X509_SEQUENCE_OF_ANY. Кодровать надо в соответствии с RFC 2315, Signed-data content type.