rucades 0.3.0 → 0.5.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/README.md +43 -48
- 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
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fe67a02333856cf1dd3fb169ed461be30bb6e0ae8c8f9d3915eb65845f82dcb0
|
|
4
|
+
data.tar.gz: 15bb72f3f89f1cf77dca8381370ce000508122731bd23a2d939dec8718813c50
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 612a56b778690a019ffc2c9705c8c09da933c0f311def840e10a067562144aa3223895351115dd0d8b94773328f0b4e4d8cf689f3a89d6ff5b9bb4fc7d36d755
|
|
7
|
+
data.tar.gz: 684be66e4bc8eae875a916823e42646ca772b0badf2d671a27fc1454ca19ad7437f1dee5c86ea4f4fe6dd545b5c876df7dfd753cc8e7a6a17a5b15c554595ef4
|
data/README.md
CHANGED
|
@@ -5,73 +5,56 @@
|
|
|
5
5
|
Gem реализует интерфейс, аналогичный [CAdESCOM](https://docs.cryptopro.ru/cades/reference/cadescom)
|
|
6
6
|
и разработан путём повторения функциональности [pycades](https://docs.cryptopro.ru/cades/pycades)
|
|
7
7
|
|
|
8
|
+
[](https://badge.fury.io/rb/rucades)
|
|
8
9
|
[](https://github.com/maxirmx/rucades/actions/workflows/main.yml)
|
|
9
10
|
|
|
10
11
|
## Совместимость
|
|
11
12
|
|
|
12
13
|
Gem тестировался в следующем окружении:
|
|
13
|
-
*
|
|
14
|
+
* Ubuntu 20, 22
|
|
15
|
+
* macOS: macos-latest (arm64), macos-15-intel (amd64)
|
|
14
16
|
* Ruby 2.7.8, 3.1.7, 3.2.11, 3.3.11, 3.4.9, 4.0.5
|
|
15
17
|
|
|
16
18
|
Вероятно, Gem совместим с другими вариантами Linux, однако КриптоПро ЭЦП SDK доступно только для Ubuntu.
|
|
19
|
+
После каждого релиза автоматически выполняется проверка работоспособности Gem на Ubuntu 22 и macOS-latest.
|
|
17
20
|
|
|
18
21
|
## Установка
|
|
19
22
|
|
|
20
|
-
|
|
21
|
-
```
|
|
22
|
-
sudo apt update
|
|
23
|
-
sudo apt install cmake build-essential libboost-all-dev ruby-dev tar git wget libffi-dev
|
|
24
|
-
sudo gem install bundler
|
|
25
|
-
```
|
|
26
|
-
* Скачайте архив с [КриптоПро CSP](https://cryptopro.ru/products/csp/downloads) для Вашей архитектуры, распакуйте его и установите КриптоПро CSP
|
|
27
|
-
Например,
|
|
23
|
+
### Зависимости
|
|
28
24
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
```
|
|
25
|
+
* Ruby и Bundler для Вашей платформы.
|
|
26
|
+
* Средства сборки C/C++ расширений Ruby для Вашей платформы.
|
|
27
|
+
* [CMake](https://cmake.org/) — необходим для сборки native extension.
|
|
28
|
+
* [Boost](https://www.boost.org/) — требуется при использовании КриптоПро ЭЦП SDK версии ниже 2.0.15700; начиная с версии 2.0.15700 Boost не требуется.
|
|
29
|
+
* [КриптоПро CSP](https://cryptopro.ru/products/csp/downloads) и пакет разработки CSP (`cprocsp-devel` или аналогичный пакет для Вашей платформы).
|
|
30
|
+
* [КриптоПро ЭЦП SDK](https://cryptopro.ru/products/cades/downloads) с пакетом CAdES (`cprocsp-pki-cades` или аналогичный пакет для Вашей платформы), версия не ниже 2.0.14071.
|
|
36
31
|
|
|
37
|
-
|
|
38
|
-
```
|
|
39
|
-
wget -O linux-arm64_deb.tgz https://cryptopro.ru/sites/default/files/private/csp/50/11455/linux-arm64_deb.tgz
|
|
40
|
-
tar xvf linux-arm64_deb.tgz
|
|
41
|
-
cd linux-arm64_deb
|
|
42
|
-
sudo ./install.sh
|
|
43
|
-
```
|
|
44
|
-
* Установите пакет cprocsp-devel
|
|
45
|
-
```
|
|
46
|
-
sudo apt install ./lsb-cprocsp-devel_5.0*.deb
|
|
47
|
-
```
|
|
48
|
-
* Скачайте архив с [КриптоПро ЭЦП SDK](https://cryptopro.ru/products/cades/downloads), распакуйте его и установите пакет cprocsp-pki-cades (версия не ниже 2.0.14071)
|
|
32
|
+
Используйте официальные инструкции КриптоПро для выбранной операционной системы и архитектуры:
|
|
49
33
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
sudo apt install ./cprocsp-pki-cades*.deb
|
|
55
|
-
```
|
|
34
|
+
* [документация КриптоПро CSP](https://docs.cryptopro.ru/csp) описывает установку и особенности CSP на поддерживаемых платформах;
|
|
35
|
+
* [страница загрузки КриптоПро CSP](https://cryptopro.ru/products/csp/downloads) содержит дистрибутивы для разных платформ и архитектур;
|
|
36
|
+
* [документация КриптоПро ЭЦП SDK](https://docs.cryptopro.ru/cades/usage) описывает использование и требования SDK;
|
|
37
|
+
* [страница загрузки КриптоПро ЭЦП SDK](https://cryptopro.ru/products/cades/downloads) содержит актуальные пакеты SDK.
|
|
56
38
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
39
|
+
Начиная с КриптоПро CSP 5.0 R3, пакеты CAdES/SDK поставляются в составе основного дистрибутива CSP. Для более ранних версий CSP может потребоваться отдельная установка архива КриптоПро ЭЦП SDK.
|
|
40
|
+
|
|
41
|
+
### Установка опубликованного Gem из RubyGems.org
|
|
42
|
+
|
|
43
|
+
Добавьте Gem в Gemfile Вашего проекта:
|
|
62
44
|
```
|
|
63
|
-
|
|
64
|
-
```
|
|
65
|
-
gem 'rucades', git: 'https://github.com/maxirmx/rucades'
|
|
45
|
+
gem 'rucades'
|
|
66
46
|
```
|
|
67
47
|
|
|
68
|
-
|
|
48
|
+
Затем выполните установку зависимостей проекта обычным для Bundler способом.
|
|
49
|
+
|
|
50
|
+
Для установки без Gemfile можно использовать опубликованный пакет RubyGems.org:
|
|
69
51
|
```
|
|
70
|
-
|
|
52
|
+
gem install rucades
|
|
71
53
|
```
|
|
72
|
-
!!! Компиляция расширения может занять 10-15 минут. Во время компиляции Ruby не выводит никаких сообщений. !!!
|
|
73
54
|
|
|
74
|
-
|
|
55
|
+
Компиляция расширения может занять 10-15 минут. Во время компиляции Ruby может не выводить сообщений.
|
|
56
|
+
|
|
57
|
+
### Проверка установки
|
|
75
58
|
|
|
76
59
|
Скрипт _test.rb_
|
|
77
60
|
```
|
|
@@ -80,7 +63,7 @@ puts "CADES SDK version: #{Rucades::About.new.version.to_s}"
|
|
|
80
63
|
```
|
|
81
64
|
Запуск
|
|
82
65
|
```
|
|
83
|
-
|
|
66
|
+
ruby test.rb
|
|
84
67
|
```
|
|
85
68
|
|
|
86
69
|
Ожидаемый результат (или что-то похожее)
|
|
@@ -88,6 +71,18 @@ bundle exec ruby test.rb
|
|
|
88
71
|
CADES SDK version: 2.0.14892
|
|
89
72
|
```
|
|
90
73
|
|
|
74
|
+
### Установка из исходного кода репозитория
|
|
75
|
+
|
|
76
|
+
Этот вариант нужен для установки unreleased-версии из репозитория, либо для утановки в контроллируем окружении.
|
|
77
|
+
Во втором случае добавть ссылку на commit, оторый считается надёжным.
|
|
78
|
+
|
|
79
|
+
Добавьте в Gemfile Вашего проекта следующую строку:
|
|
80
|
+
```
|
|
81
|
+
gem 'rucades', git: 'https://github.com/maxirmx/rucades'
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Затем выполните установку зависимостей проекта обычным для Bundler способом.
|
|
85
|
+
|
|
91
86
|
## Использование
|
|
92
87
|
|
|
93
88
|
В каталоге samples есть 4 примера, унаследованные от pycades:
|
|
@@ -111,7 +106,7 @@ _для arm64_
|
|
|
111
106
|
|
|
112
107
|
RSpec обеспечивает покрытие тестами всех классов и примерно 70% функций.
|
|
113
108
|
Однако, следует иметь в виду, что тестируются С++ --> Ruby bindings, а не функциональность.
|
|
114
|
-
То есть RSpec проверяет, что функция создалась с нужным
|
|
109
|
+
То есть RSpec проверяет, что функция создалась с нужным именен и параметрами, но не правильность её работы.
|
|
115
110
|
|
|
116
111
|
## Разработка
|
|
117
112
|
|
data/ext/rucades/cplib/Blob.h
CHANGED
|
@@ -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.
|
|
33
|
+
*
|
|
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.
|
|
20
39
|
*
|
|
21
|
-
*
|
|
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 _CPLIB_BLOB_H_INCLUDED
|
|
25
67
|
#define _CPLIB_BLOB_H_INCLUDED
|
|
26
68
|
|
|
@@ -30,162 +72,162 @@
|
|
|
30
72
|
|
|
31
73
|
namespace CryptoPro {
|
|
32
74
|
|
|
33
|
-
/**
|
|
34
|
-
* \class CBlob Blob.h <cplib/Blob.h>
|
|
35
|
-
* \brief �������� ������������������ ������������ �����.
|
|
36
|
-
*
|
|
37
|
-
* ����� ������������ ��� �������� �������� ������������������.
|
|
38
|
-
* ����� �������������� ��� ��� �������� �������������� ASN.1 ��������,
|
|
39
|
-
* ��� � ��� �������� ������������ �������� ������.
|
|
40
|
-
*
|
|
41
|
-
*/
|
|
42
|
-
class CPLIB_CLASS CBlob
|
|
43
|
-
{
|
|
44
|
-
public:
|
|
45
|
-
/// ������� ������ ������
|
|
46
|
-
CBlob();
|
|
47
75
|
/**
|
|
48
|
-
* \
|
|
76
|
+
* \class CBlob Blob.h <cplib/Blob.h>
|
|
77
|
+
* \brief Двоичная последовательность произвольной длины.
|
|
49
78
|
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
* ������ � �������� �� ���� �� ���������� � ��������� ptr �����.
|
|
54
|
-
*/
|
|
55
|
-
CBlob(const unsigned char *ptr, unsigned long length );
|
|
56
|
-
/**
|
|
57
|
-
* \brief ������� ������
|
|
79
|
+
* Класс предназначен для хранения двоичной последовательности.
|
|
80
|
+
* Может использоваться как для хранения закодированных ASN.1 структур,
|
|
81
|
+
* так и для хранения произвольных двоичных данных.
|
|
58
82
|
*
|
|
59
|
-
* \param length [in] ����� ������ � ������
|
|
60
|
-
* \remarks ��� ������������� ������ ������� ��������� ���������� ������
|
|
61
|
-
* ��� ������.
|
|
62
83
|
*/
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
84
|
+
class CPLIB_CLASS CBlob
|
|
85
|
+
{
|
|
86
|
+
public:
|
|
87
|
+
/// Создает пустой объект
|
|
88
|
+
CBlob();
|
|
89
|
+
/**
|
|
90
|
+
* \brief Создает и инициализирует объект
|
|
91
|
+
*
|
|
92
|
+
* \param ptr [in] указатель на начало данных помещаемых в объект
|
|
93
|
+
* \param length [in] длина данных в байтах
|
|
94
|
+
* \remarks При инициализации объект отводит память под хранимые
|
|
95
|
+
* данные и копирует их туда из указанного в агрументе ptr места.
|
|
96
|
+
*/
|
|
97
|
+
CBlob(const unsigned char* ptr, unsigned long length);
|
|
98
|
+
/**
|
|
99
|
+
* \brief Создает объект
|
|
100
|
+
*
|
|
101
|
+
* \param length [in] длина данных в байтах
|
|
102
|
+
* \remarks При инициализации объект отводит указанное количество памяти
|
|
103
|
+
* под данные.
|
|
104
|
+
*/
|
|
105
|
+
CBlob(unsigned long length);
|
|
106
|
+
/// Уничтожает объект.
|
|
107
|
+
~CBlob();
|
|
66
108
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
109
|
+
/**
|
|
110
|
+
* \brief Создает копию заданного объекта.
|
|
111
|
+
*
|
|
112
|
+
* \param src [in] объект, копия которого создается
|
|
113
|
+
*/
|
|
114
|
+
CBlob(const CBlob& src);
|
|
115
|
+
/**
|
|
116
|
+
* \brief Копирует заданный объект в текущий.
|
|
117
|
+
*
|
|
118
|
+
* \param src [in] объект, который копируется в текущий
|
|
119
|
+
* \return Ссылка на текущий объект.
|
|
120
|
+
*/
|
|
121
|
+
CBlob& operator=(const CBlob& src);
|
|
80
122
|
|
|
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
|
-
|
|
123
|
+
/**
|
|
124
|
+
* \brief Операция конкатенации (присоединения).
|
|
125
|
+
*
|
|
126
|
+
* \param right [in] объект, присоединяемый к текущему
|
|
127
|
+
* \remarks При выполнении этой операции в конец текущего объекта присоединяются
|
|
128
|
+
* данные, скопированные из заданного объекта.
|
|
129
|
+
* \return Ссылка на текущий объект.
|
|
130
|
+
*/
|
|
131
|
+
CBlob& operator+=(const CBlob& right);
|
|
132
|
+
/**
|
|
133
|
+
* \brief Операция проверки на равенство.
|
|
134
|
+
*
|
|
135
|
+
* \param src [in] объект для сравнения
|
|
136
|
+
* \remarks Производится побитовое сравнение объектов.
|
|
137
|
+
* \return true в случае равенства, false в другом случае.
|
|
138
|
+
*/
|
|
139
|
+
bool operator==(const CBlob& src) const;
|
|
140
|
+
/**
|
|
141
|
+
* \brief Операция проверки на неравенство.
|
|
142
|
+
*
|
|
143
|
+
* \param src [in] объект для сравнения
|
|
144
|
+
* \remarks Производится побитовое сравнение объектов.
|
|
145
|
+
* \return true в случае неравенства, false в другом случае.
|
|
146
|
+
*/
|
|
147
|
+
bool operator!=(const CBlob& src) const;
|
|
148
|
+
/**
|
|
149
|
+
* \brief Операция лексикографического сравнения (меньше).
|
|
150
|
+
*
|
|
151
|
+
* \param src [in] объект для сравнения
|
|
152
|
+
* \return true в случае если текущий объект меньше, false в другом случае.
|
|
153
|
+
*/
|
|
154
|
+
bool operator<(const CBlob& src) const;
|
|
155
|
+
/**
|
|
156
|
+
* \brief Операция лексикографического сравнения (меньше или равно).
|
|
157
|
+
*
|
|
158
|
+
* \param src [in] объект для сравнения
|
|
159
|
+
* \return true в случае если текущий объект меньше или равен, false в другом случае.
|
|
160
|
+
*/
|
|
161
|
+
bool operator<=(const CBlob& src) const;
|
|
162
|
+
/**
|
|
163
|
+
* \brief Операция лексикографического сравнения (больше).
|
|
164
|
+
*
|
|
165
|
+
* \param src [in] объект для сравнения
|
|
166
|
+
* \return true в случае если текущий объект больше, false в другом случае.
|
|
167
|
+
*/
|
|
168
|
+
bool operator>(const CBlob& src) const;
|
|
169
|
+
/**
|
|
170
|
+
* \brief Операция лексикографического сравнения (больше или равно).
|
|
171
|
+
*
|
|
172
|
+
* \param src [in] объект для сравнения
|
|
173
|
+
* \return true в случае если текущий объект больше или равен, false в другом случае.
|
|
174
|
+
*/
|
|
175
|
+
bool operator>=(const CBlob& src) const;
|
|
134
176
|
|
|
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
|
-
|
|
177
|
+
/**
|
|
178
|
+
* \brief Изменение размера объекта.
|
|
179
|
+
*
|
|
180
|
+
* \param length [in] новая длина данных
|
|
181
|
+
* \remarks Если length больше текущей длины, то старые данные
|
|
182
|
+
* в позициях от нуля до текущей длины не меняют своего значения.
|
|
183
|
+
* Если length меньше текущей длины, то сохраняются данные на
|
|
184
|
+
* позициях от 0 до length-1.
|
|
185
|
+
*/
|
|
186
|
+
void resize_to(unsigned long length);
|
|
187
|
+
/**
|
|
188
|
+
* \brief Операция обмена объектов.
|
|
189
|
+
*
|
|
190
|
+
* \param right [in] объект для обмена
|
|
191
|
+
* \remarks Функция не генерирует исключений.
|
|
192
|
+
*/
|
|
193
|
+
void swap(CBlob& right) throw();
|
|
194
|
+
/// Инвертирование порядка байт данных.
|
|
195
|
+
void reverse();
|
|
196
|
+
/**
|
|
197
|
+
* \brief Очищение объекта
|
|
198
|
+
*
|
|
199
|
+
* Объект очищается и становится нулевой длины
|
|
200
|
+
*/
|
|
201
|
+
void clear();
|
|
202
|
+
/**
|
|
203
|
+
* \brief Помещение данных в объект
|
|
204
|
+
*
|
|
205
|
+
* \param ptr [in] указатель на начало данных
|
|
206
|
+
* \param length [in] длина данных
|
|
207
|
+
*/
|
|
208
|
+
void assign(const unsigned char* ptr, unsigned long length);
|
|
209
|
+
void readFromFile(const char* name);
|
|
210
|
+
void writeToFile(const char* name) const;
|
|
211
|
+
void readFromFile(const wchar_t* name);
|
|
212
|
+
void writeToFile(const wchar_t* name) const;
|
|
213
|
+
void readFromHexString(const char* str);
|
|
214
|
+
CStringProxy writeToHexString(unsigned long SpaceInterval = 0) const;
|
|
173
215
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
private:
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
};
|
|
216
|
+
unsigned long cbData() const;
|
|
217
|
+
unsigned char* pbData() const;
|
|
218
|
+
private:
|
|
219
|
+
unsigned long m_cbData;
|
|
220
|
+
unsigned char* m_pbData;
|
|
221
|
+
};
|
|
180
222
|
|
|
181
|
-
// VS2008 bug/feature:
|
|
182
|
-
// (
|
|
183
|
-
//
|
|
184
|
-
//
|
|
185
|
-
EXPIMP_CDLLLIST_ITERATORS(CBlob, CPLIB_EXTERN_TEMPLATE, CPLIB_CLASS);
|
|
223
|
+
// VS2008 bug/feature: Экспорт инстанцированных шаблонов вложенных классов
|
|
224
|
+
// (здесь - итераторов) должен предварять экспорт инстанцированного шаблона
|
|
225
|
+
// внешнего класса (здесь - CDllList<>), иначе из DLL не будут экспортированы
|
|
226
|
+
// методы вложенных классов.
|
|
227
|
+
EXPIMP_CDLLLIST_ITERATORS(CBlob, CPLIB_EXTERN_TEMPLATE, CPLIB_CLASS);
|
|
186
228
|
|
|
187
|
-
///
|
|
188
|
-
class CPLIB_CLASS CBlobList: public CDllList<CBlob> {};
|
|
229
|
+
/// Список объектов CBlob
|
|
230
|
+
class CPLIB_CLASS CBlobList : public CDllList<CBlob> {};
|
|
189
231
|
|
|
190
232
|
} // namespace CryptoPro
|
|
191
233
|
|