rucades 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/ext/rucades/cplib/Blob.h +205 -163
  3. data/ext/rucades/cplib/CPPEnrollEnumerations.h +603 -0
  4. data/ext/rucades/cplib/DateTime.h +506 -455
  5. data/ext/rucades/cplib/StringProxy.h +229 -187
  6. data/ext/rucades/cplib/cpstldll.h +225 -0
  7. data/ext/rucades/extconf.rb +28 -12
  8. data/ext/rucades/rucades_about.cpp +3 -3
  9. data/ext/rucades/rucades_about.h +1 -1
  10. data/ext/rucades/rucades_algorithm.cpp +2 -2
  11. data/ext/rucades/rucades_algorithm.h +2 -2
  12. data/ext/rucades/rucades_attribute.cpp +3 -3
  13. data/ext/rucades/rucades_attribute.h +2 -2
  14. data/ext/rucades/rucades_attributes.cpp +2 -2
  15. data/ext/rucades/rucades_attributes.h +2 -2
  16. data/ext/rucades/rucades_basic_constraints.cpp +3 -3
  17. data/ext/rucades/rucades_basic_constraints.h +2 -2
  18. data/ext/rucades/rucades_blobs.cpp +3 -3
  19. data/ext/rucades/rucades_blobs.h +2 -2
  20. data/ext/rucades/rucades_certificate.cpp +3 -3
  21. data/ext/rucades/rucades_certificate.h +2 -2
  22. data/ext/rucades/rucades_certificate_status.cpp +2 -2
  23. data/ext/rucades/rucades_certificate_status.h +2 -2
  24. data/ext/rucades/rucades_certificates.cpp +8 -8
  25. data/ext/rucades/rucades_certificates.h +2 -2
  26. data/ext/rucades/rucades_crl.cpp +1 -1
  27. data/ext/rucades/rucades_crl.h +1 -1
  28. data/ext/rucades/rucades_eku.cpp +2 -2
  29. data/ext/rucades/rucades_eku.h +2 -2
  30. data/ext/rucades/rucades_ekus.cpp +3 -3
  31. data/ext/rucades/rucades_ekus.h +2 -2
  32. data/ext/rucades/rucades_encoded_data.cpp +1 -1
  33. data/ext/rucades/rucades_encoded_data.h +1 -1
  34. data/ext/rucades/rucades_enveloped_data.cpp +1 -1
  35. data/ext/rucades/rucades_enveloped_data.h +1 -1
  36. data/ext/rucades/rucades_extended_key_usage.cpp +2 -2
  37. data/ext/rucades/rucades_extended_key_usage.h +2 -2
  38. data/ext/rucades/rucades_hashed_data.cpp +1 -1
  39. data/ext/rucades/rucades_hashed_data.h +1 -1
  40. data/ext/rucades/rucades_key_usage.cpp +3 -3
  41. data/ext/rucades/rucades_key_usage.h +2 -2
  42. data/ext/rucades/rucades_oid.cpp +3 -3
  43. data/ext/rucades/rucades_oid.h +2 -2
  44. data/ext/rucades/rucades_private_key.cpp +3 -3
  45. data/ext/rucades/rucades_private_key.h +2 -2
  46. data/ext/rucades/rucades_public_key.cpp +2 -2
  47. data/ext/rucades/rucades_public_key.h +2 -2
  48. data/ext/rucades/rucades_raw_signature.cpp +2 -2
  49. data/ext/rucades/rucades_raw_signature.h +2 -2
  50. data/ext/rucades/rucades_recipients.cpp +2 -2
  51. data/ext/rucades/rucades_recipients.h +2 -2
  52. data/ext/rucades/rucades_signature_status.cpp +2 -2
  53. data/ext/rucades/rucades_signature_status.h +2 -2
  54. data/ext/rucades/rucades_signed_data.cpp +7 -7
  55. data/ext/rucades/rucades_signed_data.h +1 -1
  56. data/ext/rucades/rucades_signed_xml.cpp +2 -2
  57. data/ext/rucades/rucades_signed_xml.h +1 -1
  58. data/ext/rucades/rucades_signer.cpp +8 -8
  59. data/ext/rucades/rucades_signer.h +2 -2
  60. data/ext/rucades/rucades_signers.cpp +2 -2
  61. data/ext/rucades/rucades_signers.h +2 -2
  62. data/ext/rucades/rucades_store.cpp +2 -2
  63. data/ext/rucades/rucades_store.h +1 -1
  64. data/ext/rucades/rucades_symmetric_algorithm.cpp +3 -3
  65. data/ext/rucades/rucades_symmetric_algorithm.h +2 -2
  66. data/ext/rucades/rucades_version.cpp +2 -2
  67. data/ext/rucades/rucades_version.h +2 -2
  68. data/ext/rucades/stdafx.h +207 -121
  69. data/lib/rucades/version.rb +1 -1
  70. data/samples/encrypt_decrypt.rb +17 -14
  71. data/samples/sign_verify.rb +14 -17
  72. data/sig/rucades.rbs +850 -1
  73. metadata +3 -4
  74. data/ext/rucades/cpstldll.h +0 -183
  75. data/ext/rucades/errormsg.cpp +0 -561
  76. data/ext/rucades/errormsg.h +0 -31
@@ -1,26 +1,68 @@
1
1
  /*
2
- * Copyright(C) 2004 ������ ���
2
+ * Copyright (c) 2026, компания КриптоПро
3
3
  *
4
- * ���� ���� �������� ����������, ����������
5
- * �������������� �������� ������ ���.
4
+ * Разрешается повторное распространение и использование как в виде исходного
5
+ * кода, так и в двоичной форме, с изменениями или без, при соблюдении
6
+ * следующих условий:
6
7
  *
7
- * ����� ����� ����� ����� �� ����� ���� �����������,
8
- * ����������, ���������� �� ������ �����,
9
- * ������������ ��� �������������� ����� ��������,
10
- * ���������������, �������� �� ���� � ��� ��
11
- * ����� ������������ ������� ��� ����������������
12
- * ���������� ���������� ��������� ������ ���.
13
- */
14
-
15
- /*!
16
- * \file $RCSfile$
17
- * \version $Revision$
18
- * \date $Date:: $
19
- * \author $Author$
8
+ * 1) При повторном распространении исходного кода должно оставаться
9
+ * указанное выше уведомление об авторском праве, этот список условий
10
+ * и последующий отказ от гарантий.
11
+ *
12
+ * 2) При повторном распространении двоичного кода должна сохраняться
13
+ * указанная выше информация об авторском праве, этот список условий
14
+ * и последующий отказ от гарантий в документации и/или в других материалах,
15
+ * поставляемых при распространении.
16
+ *
17
+ * ЭТА ПРОГРАММА ПРЕДОСТАВЛЕНА БЕСПЛАТНО ВЛАДЕЛЬЦАМИ АВТОРСКИХ ПРАВ И/ИЛИ
18
+ * ДРУГИМИ СТОРОНАМИ "КАК ОНА ЕСТЬ" БЕЗ КАКОГО-ЛИБО ВИДА ГАРАНТИЙ, ВЫРАЖЕННЫХ
19
+ * ЯВНО ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ИМИ, ПОДРАЗУМЕВАЕМЫЕ
20
+ * ГАРАНТИИ КОММЕРЧЕСКОЙ ЦЕННОСТИ И ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. НИ В КОЕМ
21
+ * СЛУЧАЕ, ЕСЛИ НЕ ТРЕБУЕТСЯ СООТВЕТСТВУЮЩИМ ЗАКОНОМ, ИЛИ НЕ УСТАНОВЛЕНО В
22
+ * УСТНОЙ ФОРМЕ, НИ ОДИН ВЛАДЕЛЕЦ АВТОРСКИХ ПРАВ И НИ ОДНО ДРУГОЕ ЛИЦО, КОТОРОЕ
23
+ * МОЖЕТ ИЗМЕНЯТЬ И/ИЛИ ПОВТОРНО РАСПРОСТРАНЯТЬ ПРОГРАММУ, КАК БЫЛО СКАЗАНО
24
+ * ВЫШЕ, НЕ НЕСЁТ ОТВЕТСТВЕННОСТИ, ВКЛЮЧАЯ ЛЮБЫЕ ОБЩИЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ
25
+ * ИЛИ ПОСЛЕДОВАВШИЕ УБЫТКИ, ВСЛЕДСТВИЕ ИСПОЛЬЗОВАНИЯ ИЛИ НЕВОЗМОЖНОСТИ
26
+ * ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ПОТЕРЕЙ ДАННЫХ,
27
+ * ИЛИ ДАННЫМИ, СТАВШИМИ НЕПРАВИЛЬНЫМИ, ИЛИ ПОТЕРЯМИ, ПРИНЕСЕННЫМИ ИЗ-ЗА ВАС ИЛИ
28
+ * ТРЕТЬИХ ЛИЦ, ИЛИ ОТКАЗОМ ПРОГРАММЫ РАБОТАТЬ СОВМЕСТНО С ДРУГИМИ ПРОГРАММАМИ),
29
+ * ДАЖЕ ЕСЛИ ТАКОЙ ВЛАДЕЛЕЦ ИЛИ ДРУГОЕ ЛИЦО БЫЛИ ИЗВЕЩЕНЫ О ВОЗМОЖНОСТИ
30
+ * ТАКИХ УБЫТКОВ.
31
+ *
32
+ * Copyright (c) 2026, CryptoPro Company All rights reserved.
20
33
  *
21
- * \brief ������-������� ��� �����
34
+ * Redistribution and use in source and binary forms, with or without
35
+ * modification, are permitted provided that the following conditions are met:
36
+ *
37
+ * 1) Redistributions of source code must retain the above copyright notice,
38
+ * this list of conditions and the following disclaimer.
39
+ *
40
+ * 2) Redistributions in binary form must reproduce the above copyright notice,
41
+ * this list of conditions and the following disclaimer in the documentation
42
+ * and/or other materials provided with the distribution.
43
+ *
44
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
45
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
46
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
47
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
48
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
49
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
50
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
51
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
52
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
53
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
54
+ * THE POSSIBILITY OF SUCH DAMAGE.
22
55
  */
23
56
 
57
+ /*!
58
+ * \file $RCSfile$
59
+ * \version $Revision$
60
+ * \date $Date:: $
61
+ * \author $Author$
62
+ *
63
+ * \brief Прокси-объекты для строк
64
+ */
65
+
24
66
  #ifndef _STRINGPROXY_H_INCLUDED
25
67
  #define _STRINGPROXY_H_INCLUDED
26
68
 
@@ -66,215 +108,215 @@
66
108
  #endif // !defined CPLIB_DLL_DEFINES
67
109
 
68
110
  #include <string>
69
- #ifndef wstring
111
+ #ifndef wstring
70
112
  namespace std {
71
113
  typedef basic_string<wchar_t> wstring;
72
- }
114
+ }
73
115
  #endif //wstring
74
116
 
75
117
  #include <cpstldll.h>
76
118
 
77
119
  namespace CryptoPro {
78
120
 
79
- /**
80
- * \class CStringProxy StringProxy.h <cplib/StringProxy.h>
81
- * \brief ������-��������� ��� �����.
82
- *
83
- * � �������� ����� ������ ������� �������� � ������������
84
- * ���� CryptoPro ���������� ANSI ������. ���� ����� ������ - ����������
85
- * ��������� ������������ ������, ���������� ��� ������ (������ ��������� ������
86
- * ������������ ����������, � ������������� ������ ��� ��).
87
- *
88
- * ��� ������� ������������� ������� �� ������������ ���� CryptoPro
89
- * ��� ������������� ��������������� ������������ ���� �����. � ������
90
- * ������������� ������� \link CryptoPro::CStringProxy::c_str c_str() \endlink,
91
- * ������������ ��������� �� c-������ ( �� �������� � std::string ).
92
- * ������ ����������� ������������� �������, ������������ ������
93
- * ������ CStringProxy:
94
- *
95
- * \code
96
- *
97
- * CStringProxy f();
98
- *
99
- * std::string s = f().c_str();
100
- * CString atls = f().c_str();
101
- *
102
- * \endcode
103
- *
104
- * ����������� ������������ ���� ����� ��������� �������:
105
- *
106
- * \code
107
- * const char* s = f().c_str();
108
- * \endcode
109
- *
110
- * ���������� ������ �� ������� ��������� s ����� ������������, ���������
111
- * f() ���������� ��������� ������, ������� ������������ ����� �������� ��
112
- * �������. ��������� ��� ���������:
113
- *
114
- * \code
115
- *
116
- * // ��������� �����
117
- * size_t len = strlen(f());
118
- *
119
- * // ��������� ������ ��� ������
120
- * const char* s = (char*)malloc(len+1);
121
- * if(!s)
122
- * error("not enough memory");
123
- *
124
- * // ��������� ������ � ����������� � ���������� ������
125
- * strncpy(s,f(),len+1);
126
- *
127
- * \endcode
128
- *
129
- * \sa CWStringProxy
130
- */
131
- class CPLIB_CLASS
132
- CStringProxy
133
- {
134
- public:
135
121
  /**
136
- * \brief ������� �������������� ������
122
+ * \class CStringProxy StringProxy.h <cplib/StringProxy.h>
123
+ * \brief Объект-посредник для строк.
137
124
  *
138
- * \param str [in] ��������� �� ������ ��������
139
- */
140
- CStringProxy( const char* str = "");
141
- /**
142
- * \brief ������� ����� ��������� �������.
125
+ * В объектах этого класса функции входящие в пространство
126
+ * имен CryptoPro возвращают ANSI строки. Цель этого класса - обеспечить
127
+ * коректное освобождение памяти, отведенной под строку (память отводится внутри
128
+ * динамической библиотеки, и освобождаться должна там же).
143
129
  *
144
- * \param src [in] ������, ����� �������� ���������
145
- */
146
- CStringProxy( const CStringProxy& src);
147
- /**
148
- * \brief �������� �������� ������ �������.
130
+ * При обычном использовании функций из пространства имен CryptoPro
131
+ * нет необходимости непосредственно использовать этот класс. В классе
132
+ * предоставлена функция \link CryptoPro::CStringProxy::c_str c_str() \endlink,
133
+ * возвращающая указатель на c-строку ( по аналогии с std::string ).
134
+ * Пример правильного использования функции, возвращающей объект
135
+ * класса CStringProxy:
136
+ *
137
+ * \code
138
+ *
139
+ * CStringProxy f();
140
+ *
141
+ * std::string s = f().c_str();
142
+ * CString atls = f().c_str();
143
+ *
144
+ * \endcode
145
+ *
146
+ * Некорректно использовать этот класс следующим образом:
147
+ *
148
+ * \code
149
+ * const char* s = f().c_str();
150
+ * \endcode
151
+ *
152
+ * Содержимое памяти на которое указывает s будет неопределено, поскольку
153
+ * f() возвращает временный объект, который уничтожается после возврата из
154
+ * функции. Следующий код корректен:
155
+ *
156
+ * \code
149
157
  *
150
- * \param src [in] ������, ������� ���������� � �������
151
- * \return ������ �� ������� ������.
158
+ * // получение длины
159
+ * size_t len = strlen(f());
160
+ *
161
+ * // отведение памяти под строку
162
+ * const char* s = (char*)malloc(len+1);
163
+ * if(!s)
164
+ * error("not enough memory");
165
+ *
166
+ * // получение строки и копирование в отведенную память
167
+ * strncpy(s,f(),len+1);
168
+ *
169
+ * \endcode
170
+ *
171
+ * \sa CWStringProxy
152
172
  */
153
- CStringProxy& operator=( const CStringProxy& src);
154
- /// ���������� ������.
155
- ~CStringProxy();
173
+ class CPLIB_CLASS
174
+ CStringProxy
175
+ {
176
+ public:
177
+ /**
178
+ * \brief Создает и инициализирует объект
179
+ *
180
+ * \param str [in] указатель на массив символов
181
+ */
182
+ CStringProxy(const char* str = "");
183
+ /**
184
+ * \brief Создает копию заданного объекта.
185
+ *
186
+ * \param src [in] объект, копия которого создается
187
+ */
188
+ CStringProxy(const CStringProxy& src);
189
+ /**
190
+ * \brief Копирует заданный объект в текущий.
191
+ *
192
+ * \param src [in] объект, который копируется в текущий
193
+ * \return Ссылка на текцщий объект.
194
+ */
195
+ CStringProxy& operator=(const CStringProxy& src);
196
+ /// Уничтожает объект.
197
+ ~CStringProxy();
156
198
 
157
- /// �������� ������ ���� const char*
158
- const char* c_str() const;
159
- private:
199
+ /// Приводит объект к типу const char*
200
+ const char* c_str() const;
201
+ private:
160
202
  #ifndef UNIX
161
203
  #pragma warning(push)
162
204
  #pragma warning(disable: 4251)
163
205
  #endif
164
- std::string *m_pValue;
206
+ std::string* m_pValue;
165
207
  #ifndef UNIX
166
208
  #pragma warning(pop)
167
209
  #endif
168
- };
210
+ };
169
211
 
170
- /**
171
- * \class CWStringProxy StringProxy.h <cplib/StringProxy.h>
172
- * \brief ������-��������� ��� �����.
173
- *
174
- * � �������� ����� ������ ������� �������� � ������������
175
- * ���� CryptoPro ���������� UNICODE ������. ���� ����� ������ - ����������
176
- * ��������� ������������ ������, ���������� ��� ������ (������ ��������� ������
177
- * ������������ ����������, � ������������� ������ ��� ��).
178
- *
179
- * ��� ������� ������������� ������� �� ������������ ���� CryptoPro
180
- * ��� ������������� ��������������� ������������ ���� �����. � ������
181
- * ������������� ������� \link CryptoPro::CStringProxy::c_str c_str() \endlink,
182
- * ������������ ��������� �� c-������ ( �� �������� � std::wstring ).
183
- * ������ ����������� ������������� �������, ������������ ������
184
- * ������ CWStringProxy:
185
- *
186
- * \code
187
- *
188
- * CWStringProxy f();
189
- *
190
- * std::wstring s = f().c_str();
191
- * CString atls = f().c_str();
192
- *
193
- * \endcode
194
- *
195
- * ����������� ������������ ���� ����� ��������� �������:
196
- *
197
- * \code
198
- * const wchar_t* s = f().c_str();
199
- * \endcode
200
- *
201
- * ���������� ������ �� ������� ��������� s ����� ������������, ���������
202
- * f() ���������� ��������� ������, ������� ������������ ����� �������� ��
203
- * �������. ��������� ��� ���������:
204
- *
205
- * \code
206
- *
207
- * // ��������� �����
208
- * size_t len = wcslen(f());
209
- *
210
- * // ��������� ������ ��� ������
211
- * const char* s = (char*)malloc((len+1)*sizeof(wchar_t));
212
- * if(!s)
213
- * error("not enough memory");
214
- *
215
- * // ��������� ������ � ����������� � ���������� ������
216
- * wcsncpy(s,f(),len+1);
217
- *
218
- * \endcode
219
- *
220
- * \sa CStringProxy
221
- */
222
- class CPLIB_CLASS
223
- CWStringProxy
224
- {
225
- public:
226
212
  /**
227
- * \brief ������� �������������� ������
213
+ * \class CWStringProxy StringProxy.h <cplib/StringProxy.h>
214
+ * \brief Объект-посредник для строк.
228
215
  *
229
- * \param str [in] ��������� �� ������ ��������
230
- */
231
- CWStringProxy( const wchar_t* str = L"");
232
- /**
233
- * \brief ������� ����� ��������� �������.
216
+ * В объектах этого класса функции входящие в пространство
217
+ * имен CryptoPro возвращают UNICODE строки. Цель этого класса - обеспечить
218
+ * коректное освобождение памяти, отведенной под строку (память отводится внутри
219
+ * динамической библиотеки, и освобождаться должна там же).
234
220
  *
235
- * \param src [in] ������, ����� �������� ���������
236
- */
237
- CWStringProxy( const CWStringProxy& src);
238
- /**
239
- * \brief �������� �������� ������ �������.
221
+ * При обычном использовании функций из пространства имен CryptoPro
222
+ * нет необходимости непосредственно использовать этот класс. В классе
223
+ * предоставлена функция \link CryptoPro::CStringProxy::c_str c_str() \endlink,
224
+ * возвращающая указатель на c-строку ( по аналогии с std::wstring ).
225
+ * Пример правильного использования функции, возвращающей объект
226
+ * класса CWStringProxy:
227
+ *
228
+ * \code
229
+ *
230
+ * CWStringProxy f();
231
+ *
232
+ * std::wstring s = f().c_str();
233
+ * CString atls = f().c_str();
234
+ *
235
+ * \endcode
236
+ *
237
+ * Некорректно использовать этот класс следующим образом:
238
+ *
239
+ * \code
240
+ * const wchar_t* s = f().c_str();
241
+ * \endcode
242
+ *
243
+ * Содержимое памяти на которое указывает s будет неопределено, поскольку
244
+ * f() возвращает временный объект, который уничтожается после возврата из
245
+ * функции. Следующий код корректен:
246
+ *
247
+ * \code
248
+ *
249
+ * // получение длины
250
+ * size_t len = wcslen(f());
251
+ *
252
+ * // отведение памяти под строку
253
+ * const char* s = (char*)malloc((len+1)*sizeof(wchar_t));
254
+ * if(!s)
255
+ * error("not enough memory");
256
+ *
257
+ * // получение строки и копирование в отведенную память
258
+ * wcsncpy(s,f(),len+1);
259
+ *
260
+ * \endcode
240
261
  *
241
- * \param src [in] ������, ������� ���������� � �������
242
- * \return ������ �� ������� ������.
262
+ * \sa CStringProxy
243
263
  */
244
- CWStringProxy& operator=( const CWStringProxy& src);
245
- /// ���������� ������.
246
- ~CWStringProxy();
264
+ class CPLIB_CLASS
265
+ CWStringProxy
266
+ {
267
+ public:
268
+ /**
269
+ * \brief Создает и инициализирует объект
270
+ *
271
+ * \param str [in] указатель на массив символов
272
+ */
273
+ CWStringProxy(const wchar_t* str = L"");
274
+ /**
275
+ * \brief Создает копию заданного объекта.
276
+ *
277
+ * \param src [in] объект, копия которого создается
278
+ */
279
+ CWStringProxy(const CWStringProxy& src);
280
+ /**
281
+ * \brief Копирует заданный объект в текущий.
282
+ *
283
+ * \param src [in] объект, который копируется в текущий
284
+ * \return Ссылка на текцщий объект.
285
+ */
286
+ CWStringProxy& operator=(const CWStringProxy& src);
287
+ /// Уничтожает объект.
288
+ ~CWStringProxy();
247
289
 
248
- /// �������� ������ ���� const wchar_t*
249
- const wchar_t* c_str() const;
250
- private:
290
+ /// Приводит объект к типу const wchar_t*
291
+ const wchar_t* c_str() const;
292
+ private:
251
293
  #ifndef UNIX
252
294
  #pragma warning(push)
253
295
  #pragma warning(disable: 4251)
254
296
  #endif
255
- std::wstring *m_pValue;
297
+ std::wstring* m_pValue;
256
298
  #ifndef UNIX
257
299
  #pragma warning(pop)
258
300
  #endif
259
- };
301
+ };
260
302
 
261
- // VS2008 bug/feature: ������� ���������������� �������� ��������� �������
262
- // (����� - ����������) ������ ���������� ������� ����������������� �������
263
- // �������� ������ (����� - CDllList<>), ����� �� DLL �� ����� ��������������
264
- // ������ ��������� �������.
265
- EXPIMP_CDLLLIST_ITERATORS(CStringProxy, CPLIB_EXTERN_TEMPLATE, CPLIB_CLASS);
303
+ // VS2008 bug/feature: Экспорт инстанцированных шаблонов вложенных классов
304
+ // (здесь - итераторов) должен предварять экспорт инстанцированного шаблона
305
+ // внешнего класса (здесь - CDllList<>), иначе из DLL не будут экспортированы
306
+ // методы вложенных классов.
307
+ EXPIMP_CDLLLIST_ITERATORS(CStringProxy, CPLIB_EXTERN_TEMPLATE, CPLIB_CLASS);
266
308
 
267
- /// ������ �������� CStringProxy
268
- class CPLIB_CLASS CStringList: public CDllList<CStringProxy> {};
309
+ /// Список объектов CStringProxy
310
+ class CPLIB_CLASS CStringList : public CDllList<CStringProxy> {};
269
311
 
270
- // VS2008 bug/feature: ������� ���������������� �������� ��������� �������
271
- // (����� - ����������) ������ ���������� ������� ����������������� �������
272
- // �������� ������ (����� - CDllList<>), ����� �� DLL �� ����� ��������������
273
- // ������ ��������� �������.
274
- EXPIMP_CDLLLIST_ITERATORS(CWStringProxy, CPLIB_EXTERN_TEMPLATE, CPLIB_CLASS);
312
+ // VS2008 bug/feature: Экспорт инстанцированных шаблонов вложенных классов
313
+ // (здесь - итераторов) должен предварять экспорт инстанцированного шаблона
314
+ // внешнего класса (здесь - CDllList<>), иначе из DLL не будут экспортированы
315
+ // методы вложенных классов.
316
+ EXPIMP_CDLLLIST_ITERATORS(CWStringProxy, CPLIB_EXTERN_TEMPLATE, CPLIB_CLASS);
275
317
 
276
- /// ������ �������� CWStringProxy
277
- class CPLIB_CLASS CWStringList: public CDllList<CWStringProxy> {};
318
+ /// Список объектов CWStringProxy
319
+ class CPLIB_CLASS CWStringList : public CDllList<CWStringProxy> {};
278
320
 
279
321
  } // namespace CryptoPro
280
322