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.
- checksums.yaml +4 -4
- data/ext/rucades/cplib/Blob.h +205 -163
- data/ext/rucades/cplib/CPPEnrollEnumerations.h +603 -0
- data/ext/rucades/cplib/DateTime.h +506 -455
- data/ext/rucades/cplib/StringProxy.h +229 -187
- data/ext/rucades/cplib/cpstldll.h +225 -0
- data/ext/rucades/extconf.rb +28 -12
- data/ext/rucades/rucades_about.cpp +3 -3
- data/ext/rucades/rucades_about.h +1 -1
- data/ext/rucades/rucades_algorithm.cpp +2 -2
- data/ext/rucades/rucades_algorithm.h +2 -2
- data/ext/rucades/rucades_attribute.cpp +3 -3
- data/ext/rucades/rucades_attribute.h +2 -2
- data/ext/rucades/rucades_attributes.cpp +2 -2
- data/ext/rucades/rucades_attributes.h +2 -2
- data/ext/rucades/rucades_basic_constraints.cpp +3 -3
- data/ext/rucades/rucades_basic_constraints.h +2 -2
- data/ext/rucades/rucades_blobs.cpp +3 -3
- data/ext/rucades/rucades_blobs.h +2 -2
- data/ext/rucades/rucades_certificate.cpp +3 -3
- data/ext/rucades/rucades_certificate.h +2 -2
- data/ext/rucades/rucades_certificate_status.cpp +2 -2
- data/ext/rucades/rucades_certificate_status.h +2 -2
- data/ext/rucades/rucades_certificates.cpp +8 -8
- data/ext/rucades/rucades_certificates.h +2 -2
- data/ext/rucades/rucades_crl.cpp +1 -1
- data/ext/rucades/rucades_crl.h +1 -1
- data/ext/rucades/rucades_eku.cpp +2 -2
- data/ext/rucades/rucades_eku.h +2 -2
- data/ext/rucades/rucades_ekus.cpp +3 -3
- data/ext/rucades/rucades_ekus.h +2 -2
- data/ext/rucades/rucades_encoded_data.cpp +1 -1
- data/ext/rucades/rucades_encoded_data.h +1 -1
- data/ext/rucades/rucades_enveloped_data.cpp +1 -1
- data/ext/rucades/rucades_enveloped_data.h +1 -1
- data/ext/rucades/rucades_extended_key_usage.cpp +2 -2
- data/ext/rucades/rucades_extended_key_usage.h +2 -2
- data/ext/rucades/rucades_hashed_data.cpp +1 -1
- data/ext/rucades/rucades_hashed_data.h +1 -1
- data/ext/rucades/rucades_key_usage.cpp +3 -3
- data/ext/rucades/rucades_key_usage.h +2 -2
- data/ext/rucades/rucades_oid.cpp +3 -3
- data/ext/rucades/rucades_oid.h +2 -2
- data/ext/rucades/rucades_private_key.cpp +3 -3
- data/ext/rucades/rucades_private_key.h +2 -2
- data/ext/rucades/rucades_public_key.cpp +2 -2
- data/ext/rucades/rucades_public_key.h +2 -2
- data/ext/rucades/rucades_raw_signature.cpp +2 -2
- data/ext/rucades/rucades_raw_signature.h +2 -2
- data/ext/rucades/rucades_recipients.cpp +2 -2
- data/ext/rucades/rucades_recipients.h +2 -2
- data/ext/rucades/rucades_signature_status.cpp +2 -2
- data/ext/rucades/rucades_signature_status.h +2 -2
- data/ext/rucades/rucades_signed_data.cpp +7 -7
- data/ext/rucades/rucades_signed_data.h +1 -1
- data/ext/rucades/rucades_signed_xml.cpp +2 -2
- data/ext/rucades/rucades_signed_xml.h +1 -1
- data/ext/rucades/rucades_signer.cpp +8 -8
- data/ext/rucades/rucades_signer.h +2 -2
- data/ext/rucades/rucades_signers.cpp +2 -2
- data/ext/rucades/rucades_signers.h +2 -2
- data/ext/rucades/rucades_store.cpp +2 -2
- data/ext/rucades/rucades_store.h +1 -1
- data/ext/rucades/rucades_symmetric_algorithm.cpp +3 -3
- data/ext/rucades/rucades_symmetric_algorithm.h +2 -2
- data/ext/rucades/rucades_version.cpp +2 -2
- data/ext/rucades/rucades_version.h +2 -2
- data/ext/rucades/stdafx.h +207 -121
- data/lib/rucades/version.rb +1 -1
- data/samples/encrypt_decrypt.rb +17 -14
- data/samples/sign_verify.rb +14 -17
- data/sig/rucades.rbs +850 -1
- metadata +3 -4
- data/ext/rucades/cpstldll.h +0 -183
- data/ext/rucades/errormsg.cpp +0 -561
- data/ext/rucades/errormsg.h +0 -31
|
@@ -1,26 +1,68 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright(
|
|
2
|
+
* Copyright (c) 2026, компания КриптоПро
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Разрешается повторное распространение и использование как в виде исходного
|
|
5
|
+
* кода, так и в двоичной форме, с изменениями или без, при соблюдении
|
|
6
|
+
* следующих условий:
|
|
6
7
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
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
|
-
*
|
|
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
|
-
* \
|
|
122
|
+
* \class CStringProxy StringProxy.h <cplib/StringProxy.h>
|
|
123
|
+
* \brief Объект-посредник для строк.
|
|
137
124
|
*
|
|
138
|
-
*
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
* \brief ������� ����� ��������� �������.
|
|
125
|
+
* В объектах этого класса функции входящие в пространство
|
|
126
|
+
* имен CryptoPro возвращают ANSI строки. Цель этого класса - обеспечить
|
|
127
|
+
* коректное освобождение памяти, отведенной под строку (память отводится внутри
|
|
128
|
+
* динамической библиотеки, и освобождаться должна там же).
|
|
143
129
|
*
|
|
144
|
-
*
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
*
|
|
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
|
-
*
|
|
151
|
-
*
|
|
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
|
-
|
|
154
|
-
|
|
155
|
-
|
|
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
|
-
|
|
158
|
-
|
|
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
|
-
|
|
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
|
-
* \
|
|
213
|
+
* \class CWStringProxy StringProxy.h <cplib/StringProxy.h>
|
|
214
|
+
* \brief Объект-посредник для строк.
|
|
228
215
|
*
|
|
229
|
-
*
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
* \brief ������� ����� ��������� �������.
|
|
216
|
+
* В объектах этого класса функции входящие в пространство
|
|
217
|
+
* имен CryptoPro возвращают UNICODE строки. Цель этого класса - обеспечить
|
|
218
|
+
* коректное освобождение памяти, отведенной под строку (память отводится внутри
|
|
219
|
+
* динамической библиотеки, и освобождаться должна там же).
|
|
234
220
|
*
|
|
235
|
-
*
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
*
|
|
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
|
-
* \
|
|
242
|
-
* \return ������ �� ������� ������.
|
|
262
|
+
* \sa CStringProxy
|
|
243
263
|
*/
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
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
|
-
|
|
249
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
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
|
-
///
|
|
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
|
-
//
|
|
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
|
-
///
|
|
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
|
|