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,90 @@
|
|
|
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_about.h"
|
|
10
|
+
#include "rucades_algorithm.h"
|
|
11
|
+
#include "rucades_attribute.h"
|
|
12
|
+
#include "rucades_attributes.h"
|
|
13
|
+
#include "rucades_basic_constraints.h"
|
|
14
|
+
#include "rucades_blobs.h"
|
|
15
|
+
#include "rucades_certificate.h"
|
|
16
|
+
#include "rucades_certificates.h"
|
|
17
|
+
#include "rucades_certificate_status.h"
|
|
18
|
+
#include "rucades_crl.h"
|
|
19
|
+
#include "rucades_eku.h"
|
|
20
|
+
#include "rucades_ekus.h"
|
|
21
|
+
#include "rucades_encoded_data.h"
|
|
22
|
+
#include "rucades_enveloped_data.h"
|
|
23
|
+
#include "rucades_extended_key_usage.h"
|
|
24
|
+
#include "rucades_hashed_data.h"
|
|
25
|
+
#include "rucades_key_usage.h"
|
|
26
|
+
#include "rucades_oid.h"
|
|
27
|
+
#include "rucades_private_key.h"
|
|
28
|
+
#include "rucades_public_key.h"
|
|
29
|
+
#include "rucades_raw_signature.h"
|
|
30
|
+
#include "rucades_recipients.h"
|
|
31
|
+
#include "rucades_signature_status.h"
|
|
32
|
+
#include "rucades_signed_data.h"
|
|
33
|
+
#include "rucades_signed_xml.h"
|
|
34
|
+
#include "rucades_signer.h"
|
|
35
|
+
#include "rucades_signers.h"
|
|
36
|
+
#include "rucades_store.h"
|
|
37
|
+
#include "rucades_symmetric_algorithm.h"
|
|
38
|
+
#include "rucades_version.h"
|
|
39
|
+
|
|
40
|
+
using namespace Rice;
|
|
41
|
+
using namespace rucades;
|
|
42
|
+
|
|
43
|
+
extern "C"
|
|
44
|
+
void Init_rucades(void)
|
|
45
|
+
{
|
|
46
|
+
VALUE rb_mRucades = rb_define_module("Rucades");
|
|
47
|
+
define_constants(rb_mRucades);
|
|
48
|
+
|
|
49
|
+
// The order of initialization matters
|
|
50
|
+
// Dependencies shall be initialized before dependents.
|
|
51
|
+
|
|
52
|
+
pre_rb_Version::define_ruby_class(rb_mRucades);
|
|
53
|
+
pre_rb_About::define_ruby_class(rb_mRucades);
|
|
54
|
+
|
|
55
|
+
pre_rb_OID::define_ruby_class(rb_mRucades);
|
|
56
|
+
|
|
57
|
+
pre_rb_Algorithm::define_ruby_class(rb_mRucades);
|
|
58
|
+
pre_rb_Attribute::define_ruby_class(rb_mRucades);
|
|
59
|
+
pre_rb_Attributes::define_ruby_class(rb_mRucades);
|
|
60
|
+
pre_rb_BasicConstraints::define_ruby_class(rb_mRucades);
|
|
61
|
+
pre_rb_Blobs::define_ruby_class(rb_mRucades);
|
|
62
|
+
pre_rb_CertificateStatus::define_ruby_class(rb_mRucades);
|
|
63
|
+
pre_rb_CRL::define_ruby_class(rb_mRucades);
|
|
64
|
+
pre_rb_EKU::define_ruby_class(rb_mRucades);
|
|
65
|
+
pre_rb_EKUs::define_ruby_class(rb_mRucades);
|
|
66
|
+
pre_rb_EncodedData::define_ruby_class(rb_mRucades);
|
|
67
|
+
pre_rb_ExtendedKeyUsage::define_ruby_class(rb_mRucades);
|
|
68
|
+
pre_rb_KeyUsage::define_ruby_class(rb_mRucades);
|
|
69
|
+
pre_rb_PrivateKey::define_ruby_class(rb_mRucades);
|
|
70
|
+
pre_rb_PublicKey::define_ruby_class(rb_mRucades);
|
|
71
|
+
|
|
72
|
+
pre_rb_Certificate::define_ruby_class(rb_mRucades);
|
|
73
|
+
pre_rb_Certificates::define_ruby_class(rb_mRucades);
|
|
74
|
+
pre_rb_Store::define_ruby_class(rb_mRucades);
|
|
75
|
+
// *** Cyclic dependency ***
|
|
76
|
+
// pre_rb_Certificate <-- pre_rb_Certificates <-- pre_rb_Store <-- pre_rb_Certificate
|
|
77
|
+
pre_rb_Certificate::extend_ruby_class();
|
|
78
|
+
|
|
79
|
+
pre_rb_Recipients::define_ruby_class(rb_mRucades);
|
|
80
|
+
pre_rb_EnvelopedData::define_ruby_class(rb_mRucades);
|
|
81
|
+
pre_rb_HashedData::define_ruby_class(rb_mRucades);
|
|
82
|
+
pre_rb_RawSignature::define_ruby_class(rb_mRucades);
|
|
83
|
+
pre_rb_SignatureStatus::define_ruby_class(rb_mRucades);
|
|
84
|
+
pre_rb_Signer::define_ruby_class(rb_mRucades);
|
|
85
|
+
pre_rb_Signers::define_ruby_class(rb_mRucades);
|
|
86
|
+
pre_rb_SignedData::define_ruby_class(rb_mRucades);
|
|
87
|
+
pre_rb_SignedXML::define_ruby_class(rb_mRucades);
|
|
88
|
+
|
|
89
|
+
pre_rb_SymmetricAlgorithm::define_ruby_class(rb_mRucades);
|
|
90
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
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 "stdafx.h"
|
|
8
|
+
#include "cppcades.h"
|
|
9
|
+
#include "ruby.h"
|
|
10
|
+
|
|
11
|
+
namespace rucades {
|
|
12
|
+
void define_constants(VALUE module);
|
|
13
|
+
void hr_method_check(HRESULT hr);
|
|
14
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
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_about.h"
|
|
10
|
+
|
|
11
|
+
using namespace Rice;
|
|
12
|
+
using namespace CryptoPro::PKI::CAdES;
|
|
13
|
+
|
|
14
|
+
namespace rucades {
|
|
15
|
+
pre_rb_About::pre_rb_About(void):
|
|
16
|
+
m_pCppCadesImpl(boost::shared_ptr<CPPCadesAboutObject>(new CPPCadesAboutObject())) { }
|
|
17
|
+
|
|
18
|
+
unsigned int pre_rb_About::major_version(void)
|
|
19
|
+
{
|
|
20
|
+
unsigned int version = 0;
|
|
21
|
+
hr_method_check(m_pCppCadesImpl->get_MajorVersion(&version));
|
|
22
|
+
return version;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
unsigned int pre_rb_About::minor_version(void)
|
|
26
|
+
{
|
|
27
|
+
unsigned int version = 0;
|
|
28
|
+
hr_method_check(m_pCppCadesImpl->get_MinorVersion(&version));
|
|
29
|
+
return version;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
unsigned int pre_rb_About::build_version(void)
|
|
33
|
+
{
|
|
34
|
+
unsigned int version = 0;
|
|
35
|
+
hr_method_check(m_pCppCadesImpl->get_BuildVersion(&version));
|
|
36
|
+
return version;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
std::string pre_rb_About::version(void)
|
|
40
|
+
{
|
|
41
|
+
CAtlString AtlVersion;
|
|
42
|
+
hr_method_check(m_pCppCadesImpl->get_Version(AtlVersion));
|
|
43
|
+
return AtlVersion.GetString();
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
pre_rb_Version pre_rb_About::plugin_version(void)
|
|
47
|
+
{
|
|
48
|
+
boost::shared_ptr<CryptoPro::PKI::CAdES::CPPVersionObject> p_version;
|
|
49
|
+
hr_method_check(m_pCppCadesImpl->get_PluginVersion(p_version));
|
|
50
|
+
return pre_rb_Version(p_version);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
pre_rb_Version pre_rb_About::csp_version(std::string prov_name, long prov_type)
|
|
54
|
+
{
|
|
55
|
+
boost::shared_ptr<CryptoPro::PKI::CAdES::CPPVersionObject> p_version;
|
|
56
|
+
CAtlString provName = CAtlString(CA2CT(CAtlStringA(prov_name.c_str()), CP_UTF8));
|
|
57
|
+
|
|
58
|
+
hr_method_check(m_pCppCadesImpl->get_CSPVersion(provName, prov_type, p_version));
|
|
59
|
+
return pre_rb_Version(p_version);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
void pre_rb_About::define_ruby_class(VALUE module)
|
|
63
|
+
{
|
|
64
|
+
Data_Type<pre_rb_About> rb_cAbout =
|
|
65
|
+
define_class_under<pre_rb_About>(module, "About")
|
|
66
|
+
.define_constructor(Constructor<pre_rb_About>())
|
|
67
|
+
.define_method("major_version", &pre_rb_About::major_version)
|
|
68
|
+
.define_method("minor_version", &pre_rb_About::minor_version)
|
|
69
|
+
.define_method("build_version", &pre_rb_About::build_version)
|
|
70
|
+
.define_method("version", &pre_rb_About::version)
|
|
71
|
+
.define_method("plugin_version", &pre_rb_About::plugin_version)
|
|
72
|
+
.define_method("csp_version", &pre_rb_About::csp_version,
|
|
73
|
+
Arg("prov_name") = (std::string)"", Arg("prov_type") = (long)75);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
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_version.h"
|
|
9
|
+
#include "CPPCadesAbout.h"
|
|
10
|
+
|
|
11
|
+
namespace rucades {
|
|
12
|
+
class pre_rb_About {
|
|
13
|
+
protected:
|
|
14
|
+
boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesAboutObject> m_pCppCadesImpl;
|
|
15
|
+
public:
|
|
16
|
+
pre_rb_About(void);
|
|
17
|
+
unsigned int major_version(void);
|
|
18
|
+
unsigned int minor_version(void);
|
|
19
|
+
unsigned int build_version(void);
|
|
20
|
+
std::string version(void);
|
|
21
|
+
pre_rb_Version plugin_version(void);
|
|
22
|
+
pre_rb_Version csp_version(std::string prov_name, long prov_type);
|
|
23
|
+
|
|
24
|
+
static void define_ruby_class(VALUE module);
|
|
25
|
+
};
|
|
26
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
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_algorithm.h"
|
|
10
|
+
|
|
11
|
+
using namespace Rice;
|
|
12
|
+
using namespace CryptoPro::PKI::CAdES;
|
|
13
|
+
|
|
14
|
+
namespace rucades {
|
|
15
|
+
pre_rb_Algorithm::pre_rb_Algorithm(void):
|
|
16
|
+
m_pCppCadesImpl(boost::shared_ptr<CPPCadesCPAlgorithmObject>(new CPPCadesCPAlgorithmObject())) { }
|
|
17
|
+
|
|
18
|
+
pre_rb_Algorithm::pre_rb_Algorithm(boost::shared_ptr<CPPCadesCPAlgorithmObject> other):
|
|
19
|
+
m_pCppCadesImpl(other) { }
|
|
20
|
+
|
|
21
|
+
long pre_rb_Algorithm::get_name(void)
|
|
22
|
+
{
|
|
23
|
+
CADESCOM_ENCRYPTION_ALGORITHM name;
|
|
24
|
+
hr_method_check(m_pCppCadesImpl->get_Name(&name));
|
|
25
|
+
return static_cast<long>(name);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
void pre_rb_Algorithm::set_name (long name)
|
|
29
|
+
{
|
|
30
|
+
hr_method_check(m_pCppCadesImpl->put_Name(static_cast<CADESCOM_ENCRYPTION_ALGORITHM>(name)));
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
long pre_rb_Algorithm::get_key_length(void) {
|
|
34
|
+
CAPICOM_ENCRYPTION_KEY_LENGTH len;
|
|
35
|
+
hr_method_check(m_pCppCadesImpl->get_KeyLength(&len));
|
|
36
|
+
return static_cast<long>(len);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
void pre_rb_Algorithm::set_key_length(long len)
|
|
40
|
+
{
|
|
41
|
+
hr_method_check(m_pCppCadesImpl->put_KeyLength(static_cast<CAPICOM_ENCRYPTION_KEY_LENGTH>(len)));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
void pre_rb_Algorithm::define_ruby_class(VALUE module)
|
|
45
|
+
{
|
|
46
|
+
Data_Type<pre_rb_Algorithm> rb_cAlgorithm =
|
|
47
|
+
define_class_under<pre_rb_Algorithm>(module, "Algorithm")
|
|
48
|
+
.define_constructor(Constructor<pre_rb_Algorithm>())
|
|
49
|
+
.define_method("name", &pre_rb_Algorithm::get_name)
|
|
50
|
+
.define_method("name=", &pre_rb_Algorithm::set_name)
|
|
51
|
+
.define_method("key_length", &pre_rb_Algorithm::get_key_length)
|
|
52
|
+
.define_method("key_length=", &pre_rb_Algorithm::set_key_length);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
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 "CPPCadesCPAlgorithm.h"
|
|
9
|
+
|
|
10
|
+
namespace rucades {
|
|
11
|
+
|
|
12
|
+
class pre_rb_Algorithm {
|
|
13
|
+
protected:
|
|
14
|
+
boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPAlgorithmObject> m_pCppCadesImpl;
|
|
15
|
+
public:
|
|
16
|
+
pre_rb_Algorithm(void);
|
|
17
|
+
pre_rb_Algorithm(boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPAlgorithmObject> other);
|
|
18
|
+
long get_name(void);
|
|
19
|
+
void set_name(long name);
|
|
20
|
+
long get_key_length(void);
|
|
21
|
+
void set_key_length(long len);
|
|
22
|
+
|
|
23
|
+
static void define_ruby_class(VALUE module);
|
|
24
|
+
|
|
25
|
+
friend class pre_rb_EnvelopedData;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
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_attribute.h"
|
|
10
|
+
|
|
11
|
+
using namespace Rice;
|
|
12
|
+
using namespace CryptoPro::PKI::CAdES;
|
|
13
|
+
|
|
14
|
+
namespace rucades {
|
|
15
|
+
|
|
16
|
+
pre_rb_Attribute::pre_rb_Attribute(void):
|
|
17
|
+
m_pCppCadesImpl(boost::shared_ptr<CPPCadesCPAttributeObject>(new CPPCadesCPAttributeObject())) { }
|
|
18
|
+
|
|
19
|
+
pre_rb_Attribute::pre_rb_Attribute(boost::shared_ptr<CPPCadesCPAttributeObject> other):
|
|
20
|
+
m_pCppCadesImpl(other) { }
|
|
21
|
+
|
|
22
|
+
pre_rb_OID pre_rb_Attribute::get_OID(void)
|
|
23
|
+
{
|
|
24
|
+
boost::shared_ptr<CPPCadesCPOIDObject> pCPPCadesCPOID(new CPPCadesCPOIDObject());
|
|
25
|
+
hr_method_check(m_pCppCadesImpl->get_OID(pCPPCadesCPOID));
|
|
26
|
+
|
|
27
|
+
return pre_rb_OID(pCPPCadesCPOID);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
std::string pre_rb_Attribute::get_value(void)
|
|
31
|
+
{
|
|
32
|
+
CryptoPro::CBlob blobValue;
|
|
33
|
+
CADESCOM_ATTRIBUTE Name;
|
|
34
|
+
hr_method_check(m_pCppCadesImpl->get_Value(blobValue));
|
|
35
|
+
hr_method_check(m_pCppCadesImpl->get_Name(&Name));
|
|
36
|
+
|
|
37
|
+
DWORD dwLen = blobValue.cbData();
|
|
38
|
+
std::vector<BYTE> vbValue(dwLen + 1, 0);
|
|
39
|
+
if (Name != CADESCOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME)
|
|
40
|
+
{
|
|
41
|
+
memcpy(&vbValue[0], blobValue.pbData(), dwLen);
|
|
42
|
+
}
|
|
43
|
+
else
|
|
44
|
+
{
|
|
45
|
+
FILETIME fTime;
|
|
46
|
+
DWORD fTimeSize = sizeof(FILETIME);
|
|
47
|
+
CryptStringToBinary(reinterpret_cast<TCHAR *>(blobValue.pbData()), dwLen,
|
|
48
|
+
CRYPT_STRING_BASE64, &vbValue[0], &dwLen, NULL, NULL);
|
|
49
|
+
CryptDecodeObject(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
|
|
50
|
+
(LPCSTR)szOID_RSA_signingTime, &vbValue[0], dwLen, 0, &fTime,
|
|
51
|
+
&fTimeSize);
|
|
52
|
+
CryptoPro::CDateTime Time(fTime);
|
|
53
|
+
CryptoPro::CStringProxy strProxyTime = Time.tostring();
|
|
54
|
+
return std::string(strProxyTime.c_str());
|
|
55
|
+
}
|
|
56
|
+
return reinterpret_cast<TCHAR *>(vbValue.data());
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
void pre_rb_Attribute::set_value(std::string val){
|
|
60
|
+
CADESCOM_ATTRIBUTE name;
|
|
61
|
+
hr_method_check(m_pCppCadesImpl->get_Name(&name));
|
|
62
|
+
if (name == CADESCOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME)
|
|
63
|
+
{
|
|
64
|
+
CryptoPro::CDateTime time(val.c_str());
|
|
65
|
+
hr_method_check(m_pCppCadesImpl->put_DateTimeValue(time));
|
|
66
|
+
}
|
|
67
|
+
else
|
|
68
|
+
{
|
|
69
|
+
CryptoPro::CBlob blobValue;
|
|
70
|
+
blobValue.assign(reinterpret_cast<const BYTE*>(val.c_str()), val.length());
|
|
71
|
+
hr_method_check(m_pCppCadesImpl->put_Value(blobValue));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
long pre_rb_Attribute::get_name(void)
|
|
76
|
+
{
|
|
77
|
+
CADESCOM_ATTRIBUTE name;
|
|
78
|
+
hr_method_check(m_pCppCadesImpl->get_Name(&name));
|
|
79
|
+
return static_cast<long>(name);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
void pre_rb_Attribute::set_name(long name)
|
|
83
|
+
{
|
|
84
|
+
hr_method_check(m_pCppCadesImpl->put_Name(static_cast<CADESCOM_ATTRIBUTE>(name)));
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
long pre_rb_Attribute::get_value_encoding(void)
|
|
88
|
+
{
|
|
89
|
+
CAPICOM_ENCODING_TYPE type;
|
|
90
|
+
hr_method_check(m_pCppCadesImpl->get_ValueEncoding(&type));
|
|
91
|
+
return static_cast<long>(type);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
void pre_rb_Attribute::set_value_encoding(long type)
|
|
95
|
+
{
|
|
96
|
+
hr_method_check(m_pCppCadesImpl->put_ValueEncoding(static_cast<CAPICOM_ENCODING_TYPE>(type)));
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
void pre_rb_Attribute::define_ruby_class(VALUE module)
|
|
100
|
+
{
|
|
101
|
+
Data_Type<pre_rb_Attribute> rb_cAttribute =
|
|
102
|
+
define_class_under<pre_rb_Attribute>(module, "Attribute")
|
|
103
|
+
.define_constructor(Constructor<pre_rb_Attribute>())
|
|
104
|
+
.define_method("oid", &pre_rb_Attribute::get_OID)
|
|
105
|
+
.define_method("name", &pre_rb_Attribute::get_name)
|
|
106
|
+
.define_method("name=", &pre_rb_Attribute::set_name)
|
|
107
|
+
.define_method("value", &pre_rb_Attribute::get_value)
|
|
108
|
+
.define_method("value=", &pre_rb_Attribute::set_value)
|
|
109
|
+
.define_method("value_type", &pre_rb_Attribute::get_value_encoding)
|
|
110
|
+
.define_method("value_type=", &pre_rb_Attribute::set_value_encoding);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
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_oid.h"
|
|
9
|
+
#include "CPPCadesCPAttribute.h"
|
|
10
|
+
|
|
11
|
+
namespace rucades {
|
|
12
|
+
class pre_rb_Attribute {
|
|
13
|
+
protected:
|
|
14
|
+
boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPAttributeObject> m_pCppCadesImpl;
|
|
15
|
+
public:
|
|
16
|
+
pre_rb_Attribute(void);
|
|
17
|
+
pre_rb_Attribute(boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPAttributeObject> other);
|
|
18
|
+
pre_rb_OID get_OID(void);
|
|
19
|
+
std::string get_value(void);
|
|
20
|
+
void set_value(std::string val);
|
|
21
|
+
long get_name(void);
|
|
22
|
+
void set_name(long name);
|
|
23
|
+
long get_value_encoding(void);
|
|
24
|
+
void set_value_encoding(long enc);
|
|
25
|
+
|
|
26
|
+
static void define_ruby_class(VALUE module);
|
|
27
|
+
|
|
28
|
+
friend class pre_rb_Attributes;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
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_attributes.h"
|
|
10
|
+
|
|
11
|
+
using namespace Rice;
|
|
12
|
+
using namespace CryptoPro::PKI::CAdES;
|
|
13
|
+
|
|
14
|
+
namespace rucades {
|
|
15
|
+
pre_rb_Attributes::pre_rb_Attributes(void):
|
|
16
|
+
m_pCppCadesImpl(boost::shared_ptr<CPPCadesCPAttributesObject>(new CPPCadesCPAttributesObject())) { }
|
|
17
|
+
|
|
18
|
+
pre_rb_Attributes::pre_rb_Attributes(boost::shared_ptr<CPPCadesCPAttributesObject> other):
|
|
19
|
+
m_pCppCadesImpl(other) { }
|
|
20
|
+
|
|
21
|
+
void pre_rb_Attributes::add(pre_rb_Attribute& attrb)
|
|
22
|
+
{
|
|
23
|
+
hr_method_check(m_pCppCadesImpl->Add(attrb.m_pCppCadesImpl));
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
void pre_rb_Attributes::clear(void){
|
|
27
|
+
hr_method_check(m_pCppCadesImpl->Clear());
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
long pre_rb_Attributes::get_count(void){
|
|
31
|
+
long count = 0;
|
|
32
|
+
hr_method_check(m_pCppCadesImpl->get_Count(&count));
|
|
33
|
+
return count;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
pre_rb_Attribute pre_rb_Attributes::get_item(long index)
|
|
37
|
+
{
|
|
38
|
+
pre_rb_Attribute attrb;
|
|
39
|
+
hr_method_check(m_pCppCadesImpl->get_Item(index, attrb.m_pCppCadesImpl));
|
|
40
|
+
return attrb;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
void pre_rb_Attributes::remove(long index)
|
|
44
|
+
{
|
|
45
|
+
hr_method_check(m_pCppCadesImpl->Remove(index));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
void pre_rb_Attributes::define_ruby_class(VALUE module)
|
|
49
|
+
{
|
|
50
|
+
Data_Type<pre_rb_Attributes> rb_cAttributes =
|
|
51
|
+
define_class_under<pre_rb_Attributes>(module, "Attributes")
|
|
52
|
+
.define_constructor(Constructor<pre_rb_Attributes>())
|
|
53
|
+
.define_method("clear", &pre_rb_Attributes::clear)
|
|
54
|
+
.define_method("count", &pre_rb_Attributes::get_count)
|
|
55
|
+
.define_method("remove",&pre_rb_Attributes::remove)
|
|
56
|
+
.define_method("add", &pre_rb_Attributes::add)
|
|
57
|
+
.define_method("<<", [](pre_rb_Attributes& self, pre_rb_Attribute& item) -> pre_rb_Attributes&
|
|
58
|
+
/* Allow chaining */ { self.add(item); return self; })
|
|
59
|
+
.define_method("[]", &pre_rb_Attributes::get_item);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
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_attribute.h"
|
|
9
|
+
#include "CPPCadesCPAttributes.h"
|
|
10
|
+
|
|
11
|
+
namespace rucades {
|
|
12
|
+
class pre_rb_Attributes {
|
|
13
|
+
protected:
|
|
14
|
+
boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPAttributesObject> m_pCppCadesImpl;
|
|
15
|
+
public:
|
|
16
|
+
pre_rb_Attributes(void);
|
|
17
|
+
pre_rb_Attributes(boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPAttributesObject> other);
|
|
18
|
+
void add(pre_rb_Attribute& attrb);
|
|
19
|
+
void clear(void);
|
|
20
|
+
long get_count(void);
|
|
21
|
+
pre_rb_Attribute get_item(long index);
|
|
22
|
+
void remove(long index);
|
|
23
|
+
|
|
24
|
+
static void define_ruby_class(VALUE module);
|
|
25
|
+
|
|
26
|
+
friend class pre_rb_Signer;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
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_basic_constraints.h"
|
|
10
|
+
|
|
11
|
+
using namespace Rice;
|
|
12
|
+
using namespace CryptoPro::PKI::CAdES;
|
|
13
|
+
|
|
14
|
+
namespace rucades {
|
|
15
|
+
pre_rb_BasicConstraints::pre_rb_BasicConstraints(void):
|
|
16
|
+
m_pCppCadesImpl(boost::shared_ptr<CPPCadesCPBasicConstraintsObject>(new CPPCadesCPBasicConstraintsObject())) { }
|
|
17
|
+
|
|
18
|
+
pre_rb_BasicConstraints::pre_rb_BasicConstraints(boost::shared_ptr<CPPCadesCPBasicConstraintsObject> other):
|
|
19
|
+
m_pCppCadesImpl(other) { }
|
|
20
|
+
|
|
21
|
+
bool pre_rb_BasicConstraints::is_ceritficate_authority(void)
|
|
22
|
+
{
|
|
23
|
+
BOOL bIsCA = 0;
|
|
24
|
+
hr_method_check(m_pCppCadesImpl->get_IsCertificateAuthority(&bIsCA));
|
|
25
|
+
return (bIsCA != 0);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
bool pre_rb_BasicConstraints::is_critical(void)
|
|
29
|
+
{
|
|
30
|
+
BOOL bIsCritical = 0;
|
|
31
|
+
hr_method_check(m_pCppCadesImpl->get_IsCritical(&bIsCritical));
|
|
32
|
+
return (bIsCritical != 0);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
bool pre_rb_BasicConstraints::is_path_len_constraint_present(void)
|
|
36
|
+
{
|
|
37
|
+
BOOL bIsPathLenConstr = 0;
|
|
38
|
+
hr_method_check(m_pCppCadesImpl->get_IsPathLenConstraintPresent(&bIsPathLenConstr));
|
|
39
|
+
return (bIsPathLenConstr != 0);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
bool pre_rb_BasicConstraints::is_present(void)
|
|
43
|
+
{
|
|
44
|
+
BOOL bIsPresent = 0;
|
|
45
|
+
hr_method_check(m_pCppCadesImpl->get_IsPresent(&bIsPresent));
|
|
46
|
+
return (bIsPresent != 0);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
long pre_rb_BasicConstraints::get_path_len_constraint(void)
|
|
50
|
+
{
|
|
51
|
+
DWORD dwPathLenConst;
|
|
52
|
+
hr_method_check(m_pCppCadesImpl->get_PathLenConstraint(&dwPathLenConst));
|
|
53
|
+
return dwPathLenConst;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
void pre_rb_BasicConstraints::define_ruby_class(VALUE module)
|
|
57
|
+
{
|
|
58
|
+
Data_Type<pre_rb_BasicConstraints> rb_cBasicConstraints =
|
|
59
|
+
define_class_under<pre_rb_BasicConstraints>(module, "BasicConstraints")
|
|
60
|
+
.define_constructor(Constructor<pre_rb_BasicConstraints>())
|
|
61
|
+
.define_method("ceritficate_authority?", &pre_rb_BasicConstraints::is_ceritficate_authority)
|
|
62
|
+
.define_method("critical?", &pre_rb_BasicConstraints::is_critical)
|
|
63
|
+
.define_method("pathlen_constraint_present?", &pre_rb_BasicConstraints::is_path_len_constraint_present)
|
|
64
|
+
.define_method("present?", &pre_rb_BasicConstraints::is_present)
|
|
65
|
+
.define_method("path_len_constraint", &pre_rb_BasicConstraints::get_path_len_constraint);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
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 "CPPCadesCPBasicConstraints.h"
|
|
9
|
+
|
|
10
|
+
namespace rucades {
|
|
11
|
+
class pre_rb_BasicConstraints {
|
|
12
|
+
protected:
|
|
13
|
+
boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPBasicConstraintsObject> m_pCppCadesImpl;
|
|
14
|
+
public:
|
|
15
|
+
pre_rb_BasicConstraints(void);
|
|
16
|
+
pre_rb_BasicConstraints(boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPBasicConstraintsObject> other);
|
|
17
|
+
bool is_ceritficate_authority(void);
|
|
18
|
+
bool is_critical(void);
|
|
19
|
+
bool is_path_len_constraint_present(void);
|
|
20
|
+
bool is_present(void);
|
|
21
|
+
long get_path_len_constraint(void);
|
|
22
|
+
|
|
23
|
+
static void define_ruby_class(VALUE module);
|
|
24
|
+
|
|
25
|
+
friend class pre_rb_Certificate;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
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_blobs.h"
|
|
10
|
+
|
|
11
|
+
using namespace Rice;
|
|
12
|
+
using namespace CryptoPro;
|
|
13
|
+
using namespace CryptoPro::PKI::CAdES;
|
|
14
|
+
|
|
15
|
+
namespace rucades {
|
|
16
|
+
pre_rb_Blobs::pre_rb_Blobs(void):
|
|
17
|
+
m_pCppCadesImpl(boost::shared_ptr<CPPCadesCPBlobsObject>(new CPPCadesCPBlobsObject())) { }
|
|
18
|
+
|
|
19
|
+
pre_rb_Blobs::pre_rb_Blobs(boost::shared_ptr<CPPCadesCPBlobsObject> other):
|
|
20
|
+
m_pCppCadesImpl(other) { }
|
|
21
|
+
|
|
22
|
+
long pre_rb_Blobs::get_count(void){
|
|
23
|
+
DWORD count = 0;
|
|
24
|
+
hr_method_check(m_pCppCadesImpl->get_Count(&count));
|
|
25
|
+
return count;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
std::string pre_rb_Blobs::get_item(long index)
|
|
29
|
+
{
|
|
30
|
+
boost::shared_ptr<CBlob> pEncValueBlob = boost::shared_ptr<CBlob>(new CBlob());
|
|
31
|
+
hr_method_check(m_pCppCadesImpl->get_Item(index, pEncValueBlob));
|
|
32
|
+
|
|
33
|
+
CAtlString sValue;
|
|
34
|
+
sValue = CAtlString((const TCHAR *)pEncValueBlob->pbData(), pEncValueBlob->cbData() / sizeof(TCHAR));
|
|
35
|
+
return std::string(sValue.GetString());
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
void pre_rb_Blobs::define_ruby_class(VALUE module)
|
|
39
|
+
{
|
|
40
|
+
Data_Type<pre_rb_Blobs> rb_cBlobs =
|
|
41
|
+
define_class_under<pre_rb_Blobs>(module, "Blobs")
|
|
42
|
+
.define_constructor(Constructor<pre_rb_Blobs>())
|
|
43
|
+
.define_method("count", &pre_rb_Blobs::get_count)
|
|
44
|
+
.define_method("[]", &pre_rb_Blobs::get_item);
|
|
45
|
+
}
|
|
46
|
+
}
|