rucades 0.3.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 +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +18 -0
- data/Gemfile +16 -0
- data/LICENSE.txt +21 -0
- data/README.md +132 -0
- data/Rakefile +21 -0
- data/ext/rucades/cplib/Blob.h +192 -0
- data/ext/rucades/cplib/DateTime.h +518 -0
- data/ext/rucades/cplib/StringProxy.h +281 -0
- data/ext/rucades/cpstldll.h +183 -0
- data/ext/rucades/errormsg.cpp +561 -0
- data/ext/rucades/errormsg.h +31 -0
- data/ext/rucades/extconf.rb +91 -0
- data/ext/rucades/rucades.cpp +90 -0
- data/ext/rucades/rucades.h +14 -0
- data/ext/rucades/rucades_about.cpp +75 -0
- data/ext/rucades/rucades_about.h +26 -0
- data/ext/rucades/rucades_algorithm.cpp +54 -0
- data/ext/rucades/rucades_algorithm.h +28 -0
- data/ext/rucades/rucades_attribute.cpp +112 -0
- data/ext/rucades/rucades_attribute.h +30 -0
- data/ext/rucades/rucades_attributes.cpp +62 -0
- data/ext/rucades/rucades_attributes.h +28 -0
- data/ext/rucades/rucades_basic_constraints.cpp +67 -0
- data/ext/rucades/rucades_basic_constraints.h +27 -0
- data/ext/rucades/rucades_blobs.cpp +46 -0
- data/ext/rucades/rucades_blobs.h +25 -0
- data/ext/rucades/rucades_certificate.cpp +182 -0
- data/ext/rucades/rucades_certificate.h +59 -0
- data/ext/rucades/rucades_certificate_status.cpp +36 -0
- data/ext/rucades/rucades_certificate_status.h +23 -0
- data/ext/rucades/rucades_certificates.cpp +140 -0
- data/ext/rucades/rucades_certificates.h +31 -0
- data/ext/rucades/rucades_const.cpp +241 -0
- data/ext/rucades/rucades_crl.cpp +84 -0
- data/ext/rucades/rucades_crl.h +29 -0
- data/ext/rucades/rucades_eku.cpp +55 -0
- data/ext/rucades/rucades_eku.h +26 -0
- data/ext/rucades/rucades_ekus.cpp +43 -0
- data/ext/rucades/rucades_ekus.h +27 -0
- data/ext/rucades/rucades_encoded_data.cpp +41 -0
- data/ext/rucades/rucades_encoded_data.h +23 -0
- data/ext/rucades/rucades_enveloped_data.cpp +122 -0
- data/ext/rucades/rucades_enveloped_data.h +33 -0
- data/ext/rucades/rucades_extended_key_usage.cpp +53 -0
- data/ext/rucades/rucades_extended_key_usage.h +27 -0
- data/ext/rucades/rucades_hashed_data.cpp +90 -0
- data/ext/rucades/rucades_hashed_data.h +31 -0
- data/ext/rucades/rucades_key_usage.cpp +116 -0
- data/ext/rucades/rucades_key_usage.h +33 -0
- data/ext/rucades/rucades_oid.cpp +70 -0
- data/ext/rucades/rucades_oid.h +30 -0
- data/ext/rucades/rucades_private_key.cpp +86 -0
- data/ext/rucades/rucades_private_key.h +31 -0
- data/ext/rucades/rucades_public_key.cpp +59 -0
- data/ext/rucades/rucades_public_key.h +28 -0
- data/ext/rucades/rucades_raw_signature.cpp +42 -0
- data/ext/rucades/rucades_raw_signature.h +26 -0
- data/ext/rucades/rucades_recipients.cpp +63 -0
- data/ext/rucades/rucades_recipients.h +28 -0
- data/ext/rucades/rucades_signature_status.cpp +35 -0
- data/ext/rucades/rucades_signature_status.h +23 -0
- data/ext/rucades/rucades_signed_data.cpp +253 -0
- data/ext/rucades/rucades_signed_data.h +41 -0
- data/ext/rucades/rucades_signed_xml.cpp +87 -0
- data/ext/rucades/rucades_signed_xml.h +29 -0
- data/ext/rucades/rucades_signer.cpp +157 -0
- data/ext/rucades/rucades_signer.h +45 -0
- data/ext/rucades/rucades_signers.cpp +43 -0
- data/ext/rucades/rucades_signers.h +27 -0
- data/ext/rucades/rucades_store.cpp +78 -0
- data/ext/rucades/rucades_store.h +34 -0
- data/ext/rucades/rucades_symmetric_algorithm.cpp +107 -0
- data/ext/rucades/rucades_symmetric_algorithm.h +30 -0
- data/ext/rucades/rucades_tools.cpp +18 -0
- data/ext/rucades/rucades_version.cpp +60 -0
- data/ext/rucades/rucades_version.h +24 -0
- data/ext/rucades/stdafx.h +190 -0
- data/lib/rucades/version.rb +9 -0
- data/lib/rucades.rb +36 -0
- data/samples/encrypt_decrypt.rb +25 -0
- data/samples/sign_verify.rb +28 -0
- data/samples/sign_verify_hash.rb +30 -0
- data/samples/sign_verify_xml.rb +44 -0
- data/sig/rucades.rbs +4 -0
- metadata +156 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Copyright (c) 2023 Maxim [maxirmx] Samsonov (https://sw.consulting)
|
|
2
|
+
// All rights reserved.
|
|
3
|
+
// This file is a part of rucades
|
|
4
|
+
|
|
5
|
+
#pragma once
|
|
6
|
+
|
|
7
|
+
#include "rucades.h"
|
|
8
|
+
#include "CPPCadesCollections.h"
|
|
9
|
+
|
|
10
|
+
namespace rucades {
|
|
11
|
+
class pre_rb_Blobs {
|
|
12
|
+
protected:
|
|
13
|
+
boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPBlobsObject> m_pCppCadesImpl;
|
|
14
|
+
public:
|
|
15
|
+
pre_rb_Blobs(void);
|
|
16
|
+
pre_rb_Blobs(boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPBlobsObject> other);
|
|
17
|
+
long get_count(void);
|
|
18
|
+
std::string get_item(long index);
|
|
19
|
+
|
|
20
|
+
static void define_ruby_class(VALUE module);
|
|
21
|
+
|
|
22
|
+
friend class pre_rb_SignedData;
|
|
23
|
+
friend class pre_rb_Signer;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
// Copyright (c) 2023 Maxim [maxirmx] Samsonov (https://sw.consulting)
|
|
2
|
+
// All rights reserved.
|
|
3
|
+
// This file is a part of rucades
|
|
4
|
+
|
|
5
|
+
#include <rice/rice.hpp>
|
|
6
|
+
#include <rice/stl.hpp>
|
|
7
|
+
|
|
8
|
+
#include "rucades.h"
|
|
9
|
+
#include "rucades_certificate.h"
|
|
10
|
+
#include "rucades_store.h"
|
|
11
|
+
|
|
12
|
+
#include "CPPCadesCollections.h"
|
|
13
|
+
|
|
14
|
+
using namespace Rice;
|
|
15
|
+
using namespace CryptoPro::PKI::CAdES;
|
|
16
|
+
|
|
17
|
+
namespace rucades {
|
|
18
|
+
pre_rb_Certificate::pre_rb_Certificate(void):
|
|
19
|
+
m_pCppCadesImpl(boost::shared_ptr<CPPCadesCPCertificateObject>(new CPPCadesCPCertificateObject())) { }
|
|
20
|
+
|
|
21
|
+
pre_rb_Certificate::pre_rb_Certificate(boost::shared_ptr<CPPCadesCPCertificateObject> other):
|
|
22
|
+
m_pCppCadesImpl(other) { }
|
|
23
|
+
|
|
24
|
+
std::string pre_rb_Certificate::get_subject_name(void)
|
|
25
|
+
{
|
|
26
|
+
CAtlString sSubjectName;
|
|
27
|
+
hr_method_check(m_pCppCadesImpl->get_SubjectName(sSubjectName));
|
|
28
|
+
return std::string(sSubjectName.GetString());
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
std::string pre_rb_Certificate::get_issuer_name(void)
|
|
32
|
+
{
|
|
33
|
+
CAtlString sIssuerName;
|
|
34
|
+
hr_method_check(m_pCppCadesImpl->get_IssuerName(sIssuerName));
|
|
35
|
+
return std::string(sIssuerName.GetString());
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
std::string pre_rb_Certificate::get_serial_number(void)
|
|
39
|
+
{
|
|
40
|
+
CAtlString sSerialNumber;
|
|
41
|
+
hr_method_check(m_pCppCadesImpl->get_SerialNumber(sSerialNumber));
|
|
42
|
+
return std::string(sSerialNumber.GetString());
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
std::string pre_rb_Certificate::get_thumbprint(void)
|
|
46
|
+
{
|
|
47
|
+
CAtlString sThumbprint;
|
|
48
|
+
hr_method_check(m_pCppCadesImpl->get_Thumbprint(sThumbprint));
|
|
49
|
+
return std::string(sThumbprint.GetString());
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
long pre_rb_Certificate::get_version(void)
|
|
53
|
+
{
|
|
54
|
+
DWORD dwVersion;
|
|
55
|
+
hr_method_check(m_pCppCadesImpl->get_Version(&dwVersion));
|
|
56
|
+
return static_cast<long>(dwVersion);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
std::string pre_rb_Certificate::get_valid_from_date(void)
|
|
60
|
+
{
|
|
61
|
+
CryptoPro::CDateTime date;
|
|
62
|
+
CryptoPro::CStringProxy strProxyDate;
|
|
63
|
+
hr_method_check(m_pCppCadesImpl->get_ValidFromDate(date));
|
|
64
|
+
strProxyDate = date.tostring();
|
|
65
|
+
return std::string(strProxyDate.c_str());
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
std::string pre_rb_Certificate::get_valid_to_date(void)
|
|
69
|
+
{
|
|
70
|
+
CryptoPro::CDateTime date;
|
|
71
|
+
CryptoPro::CStringProxy strProxyDate;
|
|
72
|
+
hr_method_check(m_pCppCadesImpl->get_ValidToDate(date));
|
|
73
|
+
strProxyDate = date.tostring();
|
|
74
|
+
return std::string(strProxyDate.c_str());
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
pre_rb_PrivateKey pre_rb_Certificate::get_private_key(void)
|
|
78
|
+
{
|
|
79
|
+
pre_rb_PrivateKey pPrivateKey;
|
|
80
|
+
hr_method_check(m_pCppCadesImpl->PrivateKey(pPrivateKey.m_pCppCadesImpl));
|
|
81
|
+
return pPrivateKey;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
pre_rb_PublicKey pre_rb_Certificate::get_public_key(void)
|
|
85
|
+
{
|
|
86
|
+
pre_rb_PublicKey pPublicKey;
|
|
87
|
+
hr_method_check(m_pCppCadesImpl->PublicKey(pPublicKey.m_pCppCadesImpl));
|
|
88
|
+
return pPublicKey;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
pre_rb_KeyUsage pre_rb_Certificate::get_key_usage(void)
|
|
92
|
+
{
|
|
93
|
+
pre_rb_KeyUsage pKeyUsage;
|
|
94
|
+
hr_method_check(m_pCppCadesImpl->KeyUsage(pKeyUsage.m_pCppCadesImpl));
|
|
95
|
+
return pKeyUsage;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
pre_rb_ExtendedKeyUsage pre_rb_Certificate::get_extended_key_usage(void)
|
|
99
|
+
{
|
|
100
|
+
pre_rb_ExtendedKeyUsage pExtendedKeyUsage;
|
|
101
|
+
hr_method_check(m_pCppCadesImpl->ExtendedKeyUsage(pExtendedKeyUsage.m_pCppCadesImpl));
|
|
102
|
+
return pExtendedKeyUsage;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
pre_rb_BasicConstraints pre_rb_Certificate::get_basic_constraints(void)
|
|
106
|
+
{
|
|
107
|
+
pre_rb_BasicConstraints pBasicConstraints;
|
|
108
|
+
hr_method_check(m_pCppCadesImpl->BasicConstraints(pBasicConstraints.m_pCppCadesImpl));
|
|
109
|
+
return pBasicConstraints;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
pre_rb_CertificateStatus pre_rb_Certificate::get_certificate_status(void)
|
|
113
|
+
{
|
|
114
|
+
pre_rb_CertificateStatus pCertificateStatus;
|
|
115
|
+
hr_method_check(m_pCppCadesImpl->IsValid(pCertificateStatus.m_pCppCadesImpl));
|
|
116
|
+
return pCertificateStatus;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
std::string pre_rb_Certificate::get_info(long type)
|
|
120
|
+
{
|
|
121
|
+
CAPICOM_CERT_INFO_TYPE Type = static_cast<CAPICOM_CERT_INFO_TYPE>(type);
|
|
122
|
+
CAtlString sInfo;
|
|
123
|
+
hr_method_check(m_pCppCadesImpl->GetInfo(Type, sInfo));
|
|
124
|
+
return std::string(sInfo.GetString());
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
bool pre_rb_Certificate::has_private_key(void)
|
|
128
|
+
{
|
|
129
|
+
BOOL has = 0;
|
|
130
|
+
hr_method_check(m_pCppCadesImpl->HasPrivateKey(&has));
|
|
131
|
+
return (has != FALSE);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
std::string pre_rb_Certificate::crt_export(long type)
|
|
135
|
+
{
|
|
136
|
+
CryptoPro::CBlob value;
|
|
137
|
+
CAPICOM_ENCODING_TYPE Type = static_cast<CAPICOM_ENCODING_TYPE>(type);
|
|
138
|
+
hr_method_check(m_pCppCadesImpl->Export(Type, value));
|
|
139
|
+
return type == CAPICOM_ENCODE_BINARY ?
|
|
140
|
+
std::string(reinterpret_cast<const char *>(value.pbData()), value.cbData()) :
|
|
141
|
+
std::string(reinterpret_cast<const char *>(value.pbData()));
|
|
142
|
+
}
|
|
143
|
+
void pre_rb_Certificate::crt_import (std::string crt)
|
|
144
|
+
{
|
|
145
|
+
CryptoPro::CBlob value;
|
|
146
|
+
value.assign(reinterpret_cast<const BYTE *>(crt.c_str()), crt.length());
|
|
147
|
+
hr_method_check(m_pCppCadesImpl->Import(value));
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
void pre_rb_Certificate::additional_store(pre_rb_Store& store)
|
|
151
|
+
{
|
|
152
|
+
hr_method_check(m_pCppCadesImpl->AdditionalStore(store.m_pCppCadesImpl));
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
static Data_Type<pre_rb_Certificate> rb_cCertificate;
|
|
156
|
+
void pre_rb_Certificate::define_ruby_class(VALUE module)
|
|
157
|
+
{
|
|
158
|
+
rb_cCertificate =
|
|
159
|
+
define_class_under<pre_rb_Certificate>(module, "Certificate")
|
|
160
|
+
.define_constructor(Constructor<pre_rb_Certificate>())
|
|
161
|
+
.define_method("subject_name", &pre_rb_Certificate::get_subject_name)
|
|
162
|
+
.define_method("issuer_name", &pre_rb_Certificate::get_issuer_name)
|
|
163
|
+
.define_method("serial_number", &pre_rb_Certificate::get_serial_number)
|
|
164
|
+
.define_method("thumbprint", &pre_rb_Certificate::get_thumbprint)
|
|
165
|
+
.define_method("version", &pre_rb_Certificate::get_version)
|
|
166
|
+
.define_method("valid_from_date", &pre_rb_Certificate::get_valid_from_date)
|
|
167
|
+
.define_method("valid_to_date", &pre_rb_Certificate::get_valid_to_date)
|
|
168
|
+
.define_method("private_key", &pre_rb_Certificate::get_private_key)
|
|
169
|
+
.define_method("public_key", &pre_rb_Certificate::get_public_key)
|
|
170
|
+
.define_method("key_usage", &pre_rb_Certificate::get_key_usage)
|
|
171
|
+
.define_method("extended_key_usage", &pre_rb_Certificate::get_extended_key_usage)
|
|
172
|
+
.define_method("basic_constraints", &pre_rb_Certificate::get_basic_constraints)
|
|
173
|
+
.define_method("cerificate_status", &pre_rb_Certificate::get_certificate_status)
|
|
174
|
+
.define_method("import", &pre_rb_Certificate::crt_import)
|
|
175
|
+
.define_method("export", &pre_rb_Certificate::crt_export)
|
|
176
|
+
.define_method("has_private_key?", &pre_rb_Certificate::has_private_key);
|
|
177
|
+
}
|
|
178
|
+
void pre_rb_Certificate::extend_ruby_class(void)
|
|
179
|
+
{
|
|
180
|
+
rb_cCertificate.define_method("additional_store", &pre_rb_Certificate::additional_store);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// Copyright (c) 2023 Maxim [maxirmx] Samsonov (https://sw.consulting)
|
|
2
|
+
// All rights reserved.
|
|
3
|
+
// This file is a part of rucades
|
|
4
|
+
|
|
5
|
+
#pragma once
|
|
6
|
+
|
|
7
|
+
#include "rucades.h"
|
|
8
|
+
#include "rucades_basic_constraints.h"
|
|
9
|
+
#include "rucades_certificate_status.h"
|
|
10
|
+
#include "rucades_extended_key_usage.h"
|
|
11
|
+
#include "rucades_key_usage.h"
|
|
12
|
+
#include "rucades_private_key.h"
|
|
13
|
+
#include "rucades_public_key.h"
|
|
14
|
+
#include "CPPCadesCPCertificate.h"
|
|
15
|
+
|
|
16
|
+
namespace rucades {
|
|
17
|
+
|
|
18
|
+
class pre_rb_Store;
|
|
19
|
+
|
|
20
|
+
class pre_rb_Certificate {
|
|
21
|
+
protected:
|
|
22
|
+
boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPCertificateObject> m_pCppCadesImpl;
|
|
23
|
+
public:
|
|
24
|
+
pre_rb_Certificate(void);
|
|
25
|
+
pre_rb_Certificate(boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPCertificateObject> other);
|
|
26
|
+
|
|
27
|
+
std::string get_subject_name(void);
|
|
28
|
+
std::string get_issuer_name(void);
|
|
29
|
+
std::string get_serial_number(void);
|
|
30
|
+
std::string get_thumbprint(void);
|
|
31
|
+
long get_version(void);
|
|
32
|
+
std::string get_valid_from_date(void);
|
|
33
|
+
std::string get_valid_to_date(void);
|
|
34
|
+
|
|
35
|
+
pre_rb_PrivateKey get_private_key(void);
|
|
36
|
+
pre_rb_PublicKey get_public_key(void);
|
|
37
|
+
pre_rb_KeyUsage get_key_usage(void);
|
|
38
|
+
pre_rb_ExtendedKeyUsage get_extended_key_usage(void);
|
|
39
|
+
pre_rb_BasicConstraints get_basic_constraints(void);
|
|
40
|
+
pre_rb_CertificateStatus get_certificate_status(void); //aka IsValid
|
|
41
|
+
|
|
42
|
+
std::string get_info(long type);
|
|
43
|
+
bool has_private_key(void);
|
|
44
|
+
|
|
45
|
+
std::string crt_export(long type);
|
|
46
|
+
void crt_import (std::string crt);
|
|
47
|
+
void additional_store(pre_rb_Store& store);
|
|
48
|
+
|
|
49
|
+
static void define_ruby_class(VALUE module);
|
|
50
|
+
static void extend_ruby_class(void);
|
|
51
|
+
|
|
52
|
+
friend class pre_rb_Certificates;
|
|
53
|
+
friend class pre_rb_Recipients;
|
|
54
|
+
friend class pre_rb_RawSignature;
|
|
55
|
+
friend class pre_rb_Signer;
|
|
56
|
+
friend class pre_rb_Store;
|
|
57
|
+
friend class pre_rb_SymmetricAlgorithm;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// Copyright (c) 2023 Maxim [maxirmx] Samsonov (https://sw.consulting)
|
|
2
|
+
// All rights reserved.
|
|
3
|
+
// This file is a part of rucades
|
|
4
|
+
|
|
5
|
+
#include <rice/rice.hpp>
|
|
6
|
+
#include <rice/stl.hpp>
|
|
7
|
+
|
|
8
|
+
#include "rucades.h"
|
|
9
|
+
#include "rucades_certificate_status.h"
|
|
10
|
+
|
|
11
|
+
using namespace Rice;
|
|
12
|
+
using namespace CryptoPro::PKI::CAdES;
|
|
13
|
+
|
|
14
|
+
namespace rucades {
|
|
15
|
+
pre_rb_CertificateStatus::pre_rb_CertificateStatus(void):
|
|
16
|
+
m_pCppCadesImpl(boost::shared_ptr<CPPCadesCPCertificateStatusObject>(new CPPCadesCPCertificateStatusObject())) { }
|
|
17
|
+
|
|
18
|
+
pre_rb_CertificateStatus::pre_rb_CertificateStatus(boost::shared_ptr<CPPCadesCPCertificateStatusObject> other):
|
|
19
|
+
m_pCppCadesImpl(other) { }
|
|
20
|
+
|
|
21
|
+
bool pre_rb_CertificateStatus::result(void)
|
|
22
|
+
{
|
|
23
|
+
BOOL bResult = 0;
|
|
24
|
+
hr_method_check(m_pCppCadesImpl->get_Result(&bResult));
|
|
25
|
+
return (bResult != 0);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
void pre_rb_CertificateStatus::define_ruby_class(VALUE module)
|
|
29
|
+
{
|
|
30
|
+
Data_Type<pre_rb_CertificateStatus> rb_cCertificateStatus =
|
|
31
|
+
define_class_under<pre_rb_CertificateStatus>(module, "CertificateStatus")
|
|
32
|
+
.define_constructor(Constructor<pre_rb_CertificateStatus>())
|
|
33
|
+
.define_method("result?", &pre_rb_CertificateStatus::result);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Copyright (c) 2023 Maxim [maxirmx] Samsonov (https://sw.consulting)
|
|
2
|
+
// All rights reserved.
|
|
3
|
+
// This file is a part of rucades
|
|
4
|
+
|
|
5
|
+
#pragma once
|
|
6
|
+
|
|
7
|
+
#include "rucades.h"
|
|
8
|
+
#include "CPPCadesCPCertificateStatus.h"
|
|
9
|
+
|
|
10
|
+
namespace rucades {
|
|
11
|
+
class pre_rb_CertificateStatus {
|
|
12
|
+
protected:
|
|
13
|
+
boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPCertificateStatusObject> m_pCppCadesImpl;
|
|
14
|
+
public:
|
|
15
|
+
pre_rb_CertificateStatus(void);
|
|
16
|
+
pre_rb_CertificateStatus(boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPCertificateStatusObject> other);
|
|
17
|
+
bool result(void);
|
|
18
|
+
|
|
19
|
+
static void define_ruby_class(VALUE module);
|
|
20
|
+
|
|
21
|
+
friend class pre_rb_Certificate;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
// Copyright (c) 2023 Maxim [maxirmx] Samsonov (https://sw.consulting)
|
|
2
|
+
// All rights reserved.
|
|
3
|
+
// This file is a part of rucades
|
|
4
|
+
|
|
5
|
+
#include <rice/rice.hpp>
|
|
6
|
+
#include <rice/stl.hpp>
|
|
7
|
+
|
|
8
|
+
#include "rucades.h"
|
|
9
|
+
#include "rucades_certificate.h"
|
|
10
|
+
#include "rucades_certificates.h"
|
|
11
|
+
#include "rucades_store.h"
|
|
12
|
+
|
|
13
|
+
using namespace Rice;
|
|
14
|
+
using namespace CryptoPro::PKI::CAdES;
|
|
15
|
+
|
|
16
|
+
namespace rucades {
|
|
17
|
+
pre_rb_Certificates::pre_rb_Certificates(void):
|
|
18
|
+
m_pCppCadesImpl(boost::shared_ptr<CPPCadesCPCertificatesObject>(new CPPCadesCPCertificatesObject())) { }
|
|
19
|
+
|
|
20
|
+
pre_rb_Certificates::pre_rb_Certificates(boost::shared_ptr<CPPCadesCPCertificatesObject> other):
|
|
21
|
+
m_pCppCadesImpl(other) { }
|
|
22
|
+
|
|
23
|
+
long pre_rb_Certificates::get_count(void)
|
|
24
|
+
{
|
|
25
|
+
unsigned int count = 0;
|
|
26
|
+
hr_method_check(m_pCppCadesImpl->Count(&count));
|
|
27
|
+
return count;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
bool pre_rb_Certificates::has_any(void)
|
|
31
|
+
{
|
|
32
|
+
return get_count() > 0;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
pre_rb_Certificate pre_rb_Certificates::get_item(long index)
|
|
36
|
+
{
|
|
37
|
+
boost::shared_ptr<CPPCadesCPCertificateObject> pCppCadesCertificate =
|
|
38
|
+
boost::shared_ptr<CPPCadesCPCertificateObject>(new CPPCadesCPCertificateObject());
|
|
39
|
+
hr_method_check(m_pCppCadesImpl->Item(index, pCppCadesCertificate));
|
|
40
|
+
return pre_rb_Certificate(pCppCadesCertificate);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
pre_rb_Certificates pre_rb_Certificates::internal_find_query_long(long type, long query, bool valid_only)
|
|
44
|
+
{
|
|
45
|
+
CAPICOM_CERTIFICATE_FIND_TYPE Type = static_cast<CAPICOM_CERTIFICATE_FIND_TYPE>(type);
|
|
46
|
+
pre_rb_Certificates res = pre_rb_Certificates();
|
|
47
|
+
|
|
48
|
+
switch (Type) {
|
|
49
|
+
case CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY:
|
|
50
|
+
case CAPICOM_CERTIFICATE_FIND_KEY_USAGE:
|
|
51
|
+
case CAPICOM_CERTIFICATE_FIND_EXTENSION:
|
|
52
|
+
case CAPICOM_CERTIFICATE_FIND_APPLICATION_POLICY:
|
|
53
|
+
{
|
|
54
|
+
BOOL bValidOnly = valid_only ? TRUE:FALSE;
|
|
55
|
+
FindCriteria findCriteria;
|
|
56
|
+
findCriteria.dwCriteriaFlag = FIND_CRITERIA_DWORD;
|
|
57
|
+
findCriteria.dword = query;
|
|
58
|
+
boost::shared_ptr<CPPCadesCPCertificatesObject> pCppCadesCertificates =
|
|
59
|
+
boost::shared_ptr<CPPCadesCPCertificatesObject>(new CPPCadesCPCertificatesObject());
|
|
60
|
+
hr_method_check(m_pCppCadesImpl->Find(Type, &findCriteria, bValidOnly, pCppCadesCertificates));
|
|
61
|
+
res = pre_rb_Certificates(pCppCadesCertificates);
|
|
62
|
+
}
|
|
63
|
+
break;
|
|
64
|
+
case CAPICOM_CERTIFICATE_FIND_SHA1_HASH:
|
|
65
|
+
case CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME:
|
|
66
|
+
case CAPICOM_CERTIFICATE_FIND_ISSUER_NAME:
|
|
67
|
+
case CAPICOM_CERTIFICATE_FIND_ROOT_NAME:
|
|
68
|
+
case CAPICOM_CERTIFICATE_FIND_TEMPLATE_NAME:
|
|
69
|
+
case CAPICOM_CERTIFICATE_FIND_CERTIFICATE_POLICY:
|
|
70
|
+
case CAPICOM_CERTIFICATE_FIND_TIME_VALID:
|
|
71
|
+
case CAPICOM_CERTIFICATE_FIND_TIME_NOT_YET_VALID:
|
|
72
|
+
case CAPICOM_CERTIFICATE_FIND_TIME_EXPIRED:
|
|
73
|
+
break;
|
|
74
|
+
default:
|
|
75
|
+
throw std::invalid_argument("Invalid CERTIFICATE_FIND_TYPE");
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
return res;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
pre_rb_Certificates pre_rb_Certificates::internal_find_query_string(long type, std::string query, bool valid_only)
|
|
82
|
+
{
|
|
83
|
+
CAPICOM_CERTIFICATE_FIND_TYPE Type = static_cast<CAPICOM_CERTIFICATE_FIND_TYPE>(type);
|
|
84
|
+
BOOL bValidOnly = valid_only ? TRUE:FALSE;
|
|
85
|
+
FindCriteria findCriteria;
|
|
86
|
+
CryptoPro::CDateTime utcDate;
|
|
87
|
+
|
|
88
|
+
switch (Type) {
|
|
89
|
+
case CAPICOM_CERTIFICATE_FIND_SHA1_HASH:
|
|
90
|
+
case CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME:
|
|
91
|
+
case CAPICOM_CERTIFICATE_FIND_ISSUER_NAME:
|
|
92
|
+
case CAPICOM_CERTIFICATE_FIND_ROOT_NAME:
|
|
93
|
+
case CAPICOM_CERTIFICATE_FIND_TEMPLATE_NAME:
|
|
94
|
+
case CAPICOM_CERTIFICATE_FIND_CERTIFICATE_POLICY:
|
|
95
|
+
case CAPICOM_CERTIFICATE_FIND_EXTENSION:
|
|
96
|
+
case CAPICOM_CERTIFICATE_FIND_APPLICATION_POLICY:
|
|
97
|
+
findCriteria.dwCriteriaFlag = FIND_CRITERIA_STRING;
|
|
98
|
+
findCriteria.str = CAtlString(query.c_str());
|
|
99
|
+
break;
|
|
100
|
+
case CAPICOM_CERTIFICATE_FIND_TIME_VALID:
|
|
101
|
+
case CAPICOM_CERTIFICATE_FIND_TIME_NOT_YET_VALID:
|
|
102
|
+
case CAPICOM_CERTIFICATE_FIND_TIME_EXPIRED:
|
|
103
|
+
if (query != "") {
|
|
104
|
+
try {
|
|
105
|
+
utcDate = CryptoPro::CDateTime(query.c_str());
|
|
106
|
+
}
|
|
107
|
+
catch (...) {
|
|
108
|
+
throw std::invalid_argument("Invalid Date/Time");
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
utcDate = CryptoPro::CDateTime::Now();
|
|
113
|
+
}
|
|
114
|
+
findCriteria.dwCriteriaFlag = FIND_CRITERIA_DATE;
|
|
115
|
+
findCriteria.date = utcDate;
|
|
116
|
+
case CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY:
|
|
117
|
+
case CAPICOM_CERTIFICATE_FIND_KEY_USAGE:
|
|
118
|
+
return pre_rb_Certificates();
|
|
119
|
+
default:
|
|
120
|
+
throw std::invalid_argument("Invalid CERTIFICATE_FIND_TYPE");
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
boost::shared_ptr<CPPCadesCPCertificatesObject> pCppCadesCertificates =
|
|
124
|
+
boost::shared_ptr<CPPCadesCPCertificatesObject>(new CPPCadesCPCertificatesObject());
|
|
125
|
+
hr_method_check(m_pCppCadesImpl->Find(Type, &findCriteria, bValidOnly, pCppCadesCertificates));
|
|
126
|
+
return pre_rb_Certificates(pCppCadesCertificates);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
void pre_rb_Certificates::define_ruby_class(VALUE module)
|
|
130
|
+
{
|
|
131
|
+
Data_Type<pre_rb_Certificates> rb_cCertificates =
|
|
132
|
+
define_class_under<pre_rb_Certificates>(module, "Certificates")
|
|
133
|
+
.define_constructor(Constructor<pre_rb_Certificates>())
|
|
134
|
+
.define_method("count", &pre_rb_Certificates::get_count)
|
|
135
|
+
.define_method("any?", &pre_rb_Certificates::has_any)
|
|
136
|
+
.define_method("[]", &pre_rb_Certificates::get_item)
|
|
137
|
+
.define_method("internal_find_query_long", &pre_rb_Certificates::internal_find_query_long)
|
|
138
|
+
.define_method("internal_find_query_string", &pre_rb_Certificates::internal_find_query_string);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// Copyright (c) 2023 Maxim [maxirmx] Samsonov (https://sw.consulting)
|
|
2
|
+
// All rights reserved.
|
|
3
|
+
// This file is a part of rucades
|
|
4
|
+
|
|
5
|
+
#pragma once
|
|
6
|
+
|
|
7
|
+
#include "rucades.h"
|
|
8
|
+
#include "rucades_certificate.h"
|
|
9
|
+
|
|
10
|
+
#include "CPPCadesCPCertificates.h"
|
|
11
|
+
|
|
12
|
+
namespace rucades {
|
|
13
|
+
class pre_rb_Certificates {
|
|
14
|
+
protected:
|
|
15
|
+
boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPCertificatesObject> m_pCppCadesImpl;
|
|
16
|
+
public:
|
|
17
|
+
pre_rb_Certificates(void);
|
|
18
|
+
pre_rb_Certificates(boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPCertificatesObject> pCppCadesCertificates);
|
|
19
|
+
long get_count(void);
|
|
20
|
+
bool has_any(void);
|
|
21
|
+
pre_rb_Certificate get_item(long index);
|
|
22
|
+
|
|
23
|
+
pre_rb_Certificates internal_find_query_long(long type, long query, bool valid_only);
|
|
24
|
+
pre_rb_Certificates internal_find_query_string(long type, std::string query, bool valid_only);
|
|
25
|
+
|
|
26
|
+
static void define_ruby_class(VALUE module);
|
|
27
|
+
|
|
28
|
+
friend class pre_rb_SignedData;
|
|
29
|
+
friend class pre_rb_Store;
|
|
30
|
+
};
|
|
31
|
+
}
|