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,86 @@
|
|
|
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_private_key.h"
|
|
10
|
+
|
|
11
|
+
using namespace Rice;
|
|
12
|
+
using namespace CryptoPro::PKI::CAdES;
|
|
13
|
+
|
|
14
|
+
namespace rucades {
|
|
15
|
+
pre_rb_PrivateKey::pre_rb_PrivateKey(void):
|
|
16
|
+
m_pCppCadesImpl(boost::shared_ptr<CPPCadesCPPrivateKeyObject>(new CPPCadesCPPrivateKeyObject())) { }
|
|
17
|
+
|
|
18
|
+
pre_rb_PrivateKey::pre_rb_PrivateKey(boost::shared_ptr<CPPCadesCPPrivateKeyObject> other):
|
|
19
|
+
m_pCppCadesImpl(other) { }
|
|
20
|
+
|
|
21
|
+
std::string pre_rb_PrivateKey::get_container_name(void)
|
|
22
|
+
{
|
|
23
|
+
CAtlString sContName;
|
|
24
|
+
hr_method_check(m_pCppCadesImpl->get_ContainerName(sContName));
|
|
25
|
+
return std::string(sContName.GetString());
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
std::string pre_rb_PrivateKey::get_unique_container_name(void)
|
|
29
|
+
{
|
|
30
|
+
CAtlString sUniqueContName;
|
|
31
|
+
hr_method_check(m_pCppCadesImpl->get_UniqueContainerName(sUniqueContName));
|
|
32
|
+
return std::string(sUniqueContName.GetString());
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
std::string pre_rb_PrivateKey::get_provider_name(void)
|
|
36
|
+
{
|
|
37
|
+
CAtlString sProvName;
|
|
38
|
+
hr_method_check(m_pCppCadesImpl->get_ProviderName(sProvName));
|
|
39
|
+
return std::string(sProvName.GetString());
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
long pre_rb_PrivateKey::get_provider_type(void)
|
|
43
|
+
{
|
|
44
|
+
CAPICOM_PROV_TYPE Type;
|
|
45
|
+
hr_method_check(m_pCppCadesImpl->get_ProviderType(&Type));
|
|
46
|
+
return static_cast<long>(Type);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
long pre_rb_PrivateKey::get_key_spec(void)
|
|
50
|
+
{
|
|
51
|
+
CAPICOM_KEY_SPEC spec;
|
|
52
|
+
hr_method_check(m_pCppCadesImpl->get_KeySpec(&spec));
|
|
53
|
+
return static_cast<long>(spec);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
void pre_rb_PrivateKey::set_cache_pin(int pin)
|
|
57
|
+
{
|
|
58
|
+
hr_method_check(m_pCppCadesImpl->set_CachePin(pin));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
void pre_rb_PrivateKey::set_key_pin(std::string pin)
|
|
62
|
+
{
|
|
63
|
+
CAtlString sKeyPin = CAtlString(pin.c_str());
|
|
64
|
+
hr_method_check(m_pCppCadesImpl->set_KeyPin(sKeyPin));
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
void pre_rb_PrivateKey::change_pin(void)
|
|
68
|
+
{
|
|
69
|
+
hr_method_check(m_pCppCadesImpl->ChangePin());
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
void pre_rb_PrivateKey::define_ruby_class(VALUE module)
|
|
73
|
+
{
|
|
74
|
+
Data_Type<pre_rb_PrivateKey> rb_cPrivateKey =
|
|
75
|
+
define_class_under<pre_rb_PrivateKey>(module, "PrivateKey")
|
|
76
|
+
.define_constructor(Constructor<pre_rb_PrivateKey>())
|
|
77
|
+
.define_method("container_name", &pre_rb_PrivateKey::get_container_name)
|
|
78
|
+
.define_method("unique_container_name", &pre_rb_PrivateKey::get_unique_container_name)
|
|
79
|
+
.define_method("provider_name", &pre_rb_PrivateKey::get_provider_name)
|
|
80
|
+
.define_method("provier_type", &pre_rb_PrivateKey::get_provider_type)
|
|
81
|
+
.define_method("key_spec", &pre_rb_PrivateKey::get_key_spec)
|
|
82
|
+
.define_method("cache_pin=", &pre_rb_PrivateKey::set_cache_pin)
|
|
83
|
+
.define_method("key_pin=", &pre_rb_PrivateKey::set_key_pin)
|
|
84
|
+
.define_method("change_pin", &pre_rb_PrivateKey::change_pin);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -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 "CPPCadesCPPrivateKey.h"
|
|
9
|
+
|
|
10
|
+
namespace rucades {
|
|
11
|
+
|
|
12
|
+
class pre_rb_PrivateKey {
|
|
13
|
+
protected:
|
|
14
|
+
boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPPrivateKeyObject> m_pCppCadesImpl;
|
|
15
|
+
public:
|
|
16
|
+
pre_rb_PrivateKey(void);
|
|
17
|
+
pre_rb_PrivateKey(boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPPrivateKeyObject> other);
|
|
18
|
+
std::string get_container_name(void);
|
|
19
|
+
std::string get_unique_container_name(void);
|
|
20
|
+
std::string get_provider_name(void);
|
|
21
|
+
long get_provider_type(void);
|
|
22
|
+
long get_key_spec(void);
|
|
23
|
+
void set_cache_pin(int pin);
|
|
24
|
+
void set_key_pin(std::string pin);
|
|
25
|
+
void change_pin(void);
|
|
26
|
+
|
|
27
|
+
static void define_ruby_class(VALUE module);
|
|
28
|
+
|
|
29
|
+
friend class pre_rb_Certificate;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
@@ -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
|
+
#include <rice/rice.hpp>
|
|
6
|
+
#include <rice/stl.hpp>
|
|
7
|
+
|
|
8
|
+
#include "rucades.h"
|
|
9
|
+
#include "rucades_public_key.h"
|
|
10
|
+
|
|
11
|
+
using namespace Rice;
|
|
12
|
+
using namespace CryptoPro::PKI::CAdES;
|
|
13
|
+
|
|
14
|
+
namespace rucades {
|
|
15
|
+
pre_rb_PublicKey::pre_rb_PublicKey(void):
|
|
16
|
+
m_pCppCadesImpl(boost::shared_ptr<CPPCadesCPPublicKeyObject>(new CPPCadesCPPublicKeyObject())) { }
|
|
17
|
+
|
|
18
|
+
pre_rb_PublicKey::pre_rb_PublicKey(boost::shared_ptr<CPPCadesCPPublicKeyObject> other):
|
|
19
|
+
m_pCppCadesImpl(other) { }
|
|
20
|
+
|
|
21
|
+
pre_rb_OID* pre_rb_PublicKey::get_algorithm(void)
|
|
22
|
+
{
|
|
23
|
+
pre_rb_OID* pOID = new pre_rb_OID();
|
|
24
|
+
hr_method_check(m_pCppCadesImpl->get_Algorithm(pOID->m_pCppCadesImpl));
|
|
25
|
+
return pOID;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
pre_rb_EncodedData pre_rb_PublicKey::get_encoded_key(void)
|
|
29
|
+
{
|
|
30
|
+
pre_rb_EncodedData pEncodedData;
|
|
31
|
+
hr_method_check(m_pCppCadesImpl->get_EncodedKey(pEncodedData.m_pCppCadesImpl));
|
|
32
|
+
return pEncodedData;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
pre_rb_EncodedData pre_rb_PublicKey::get_encoded_parameters(void)
|
|
36
|
+
{
|
|
37
|
+
pre_rb_EncodedData pEncodedData;
|
|
38
|
+
hr_method_check(m_pCppCadesImpl->get_EncodedParameters(pEncodedData.m_pCppCadesImpl));
|
|
39
|
+
return pEncodedData;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
long pre_rb_PublicKey::get_length(void)
|
|
43
|
+
{
|
|
44
|
+
DWORD dwLen = 0;
|
|
45
|
+
hr_method_check(m_pCppCadesImpl->get_Length(&dwLen));
|
|
46
|
+
return dwLen;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
void pre_rb_PublicKey::define_ruby_class(VALUE module)
|
|
50
|
+
{
|
|
51
|
+
Data_Type<pre_rb_PublicKey> rb_cPublicKey =
|
|
52
|
+
define_class_under<pre_rb_PublicKey>(module, "PublicKey")
|
|
53
|
+
.define_constructor(Constructor<pre_rb_PublicKey>())
|
|
54
|
+
.define_method("algorithm", &pre_rb_PublicKey::get_algorithm)
|
|
55
|
+
.define_method("encoded_key", &pre_rb_PublicKey::get_encoded_key)
|
|
56
|
+
.define_method("encoded_parameters", &pre_rb_PublicKey::get_encoded_parameters)
|
|
57
|
+
.define_method("length", &pre_rb_PublicKey::get_length);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -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_encoded_data.h"
|
|
9
|
+
#include "rucades_oid.h"
|
|
10
|
+
#include "CPPCadesCPPublicKey.h"
|
|
11
|
+
|
|
12
|
+
namespace rucades {
|
|
13
|
+
class pre_rb_PublicKey {
|
|
14
|
+
protected:
|
|
15
|
+
boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPPublicKeyObject> m_pCppCadesImpl;
|
|
16
|
+
public:
|
|
17
|
+
pre_rb_PublicKey(void);
|
|
18
|
+
pre_rb_PublicKey(boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPPublicKeyObject> other);
|
|
19
|
+
pre_rb_OID* get_algorithm(void);
|
|
20
|
+
pre_rb_EncodedData get_encoded_key(void);
|
|
21
|
+
pre_rb_EncodedData get_encoded_parameters(void);
|
|
22
|
+
long get_length(void);
|
|
23
|
+
|
|
24
|
+
static void define_ruby_class(VALUE module);
|
|
25
|
+
|
|
26
|
+
friend class pre_rb_Certificate;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
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_raw_signature.h"
|
|
10
|
+
|
|
11
|
+
using namespace Rice;
|
|
12
|
+
using namespace CryptoPro::PKI::CAdES;
|
|
13
|
+
|
|
14
|
+
namespace rucades {
|
|
15
|
+
pre_rb_RawSignature::pre_rb_RawSignature(void):
|
|
16
|
+
m_pCppCadesImpl(boost::shared_ptr<CPPCadesRawSignatureObject>(new CPPCadesRawSignatureObject())) { }
|
|
17
|
+
|
|
18
|
+
pre_rb_RawSignature::pre_rb_RawSignature(boost::shared_ptr<CPPCadesRawSignatureObject> other):
|
|
19
|
+
m_pCppCadesImpl(other) { }
|
|
20
|
+
|
|
21
|
+
std::string pre_rb_RawSignature::sign_hash(pre_rb_HashedData& data, pre_rb_Certificate& cert)
|
|
22
|
+
{
|
|
23
|
+
CAtlString sSignature;
|
|
24
|
+
hr_method_check(m_pCppCadesImpl->SignHash(data.m_pCppCadesImpl, cert.m_pCppCadesImpl, sSignature));
|
|
25
|
+
return std::string(sSignature.GetString());
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
void pre_rb_RawSignature::verify_hash(pre_rb_HashedData& data, pre_rb_Certificate& cert, std::string signature)
|
|
29
|
+
{
|
|
30
|
+
CAtlString sSignature(signature.c_str());
|
|
31
|
+
hr_method_check(m_pCppCadesImpl->VerifyHash(data.m_pCppCadesImpl, sSignature, cert.m_pCppCadesImpl));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
void pre_rb_RawSignature::define_ruby_class(VALUE module)
|
|
35
|
+
{
|
|
36
|
+
Data_Type<pre_rb_RawSignature> rb_cRawSignature =
|
|
37
|
+
define_class_under<pre_rb_RawSignature>(module, "RawSignature")
|
|
38
|
+
.define_constructor(Constructor<pre_rb_RawSignature>())
|
|
39
|
+
.define_method("sign_hash", &pre_rb_RawSignature::sign_hash)
|
|
40
|
+
.define_method("verify_hash", &pre_rb_RawSignature::verify_hash);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -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_hashed_data.h"
|
|
9
|
+
#include "rucades_certificate.h"
|
|
10
|
+
#include "CPPCadesRawSignature.h"
|
|
11
|
+
|
|
12
|
+
namespace rucades {
|
|
13
|
+
|
|
14
|
+
class pre_rb_RawSignature {
|
|
15
|
+
protected:
|
|
16
|
+
boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesRawSignatureObject> m_pCppCadesImpl;
|
|
17
|
+
public:
|
|
18
|
+
pre_rb_RawSignature(void);
|
|
19
|
+
pre_rb_RawSignature(boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesRawSignatureObject> other);
|
|
20
|
+
std::string sign_hash(pre_rb_HashedData& data, pre_rb_Certificate& cert);
|
|
21
|
+
void verify_hash(pre_rb_HashedData& data, pre_rb_Certificate& cert, std::string signature);
|
|
22
|
+
|
|
23
|
+
static void define_ruby_class(VALUE module);
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
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_recipients.h"
|
|
10
|
+
|
|
11
|
+
using namespace Rice;
|
|
12
|
+
using namespace CryptoPro;
|
|
13
|
+
using namespace CryptoPro::PKI::CAdES;
|
|
14
|
+
|
|
15
|
+
namespace rucades {
|
|
16
|
+
pre_rb_Recipients::pre_rb_Recipients(void):
|
|
17
|
+
m_pCppCadesImpl(boost::shared_ptr<CPPCadesCPRecipientsObject>(new CPPCadesCPRecipientsObject())) { }
|
|
18
|
+
|
|
19
|
+
pre_rb_Recipients::pre_rb_Recipients(boost::shared_ptr<CPPCadesCPRecipientsObject> other):
|
|
20
|
+
m_pCppCadesImpl(other) { }
|
|
21
|
+
|
|
22
|
+
void pre_rb_Recipients::add(pre_rb_Certificate& attrb)
|
|
23
|
+
{
|
|
24
|
+
hr_method_check(m_pCppCadesImpl->Add(attrb.m_pCppCadesImpl));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
void pre_rb_Recipients::clear(void){
|
|
28
|
+
hr_method_check(m_pCppCadesImpl->Clear());
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
long pre_rb_Recipients::get_count(void){
|
|
32
|
+
DWORD count = 0;
|
|
33
|
+
hr_method_check(m_pCppCadesImpl->get_Count(&count));
|
|
34
|
+
return count;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
pre_rb_Certificate pre_rb_Recipients::get_item(long index)
|
|
38
|
+
{
|
|
39
|
+
pre_rb_Certificate cert;
|
|
40
|
+
hr_method_check(m_pCppCadesImpl->get_Item(index, cert.m_pCppCadesImpl));
|
|
41
|
+
return cert;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
void pre_rb_Recipients::remove(long index)
|
|
45
|
+
{
|
|
46
|
+
hr_method_check(m_pCppCadesImpl->Remove(index));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
void pre_rb_Recipients::define_ruby_class(VALUE module)
|
|
50
|
+
{
|
|
51
|
+
Data_Type<pre_rb_Recipients> rb_cRecipients =
|
|
52
|
+
define_class_under<pre_rb_Recipients>(module, "Recipients")
|
|
53
|
+
.define_constructor(Constructor<pre_rb_Recipients>())
|
|
54
|
+
.define_method("clear", &pre_rb_Recipients::clear)
|
|
55
|
+
.define_method("count", &pre_rb_Recipients::get_count)
|
|
56
|
+
.define_method("remove", &pre_rb_Recipients::remove)
|
|
57
|
+
.define_method("add", &pre_rb_Recipients::add)
|
|
58
|
+
.define_method("<<", [](pre_rb_Recipients& self, pre_rb_Certificate& item) -> pre_rb_Recipients&
|
|
59
|
+
/* Allow chaining */ { self.add(item); return self; })
|
|
60
|
+
.define_method("[]", &pre_rb_Recipients::get_item);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
}
|
|
@@ -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_certificate.h"
|
|
9
|
+
#include "CPPCadesCollections.h"
|
|
10
|
+
|
|
11
|
+
namespace rucades {
|
|
12
|
+
class pre_rb_Recipients {
|
|
13
|
+
protected:
|
|
14
|
+
boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPRecipientsObject> m_pCppCadesImpl;
|
|
15
|
+
public:
|
|
16
|
+
pre_rb_Recipients(void);
|
|
17
|
+
pre_rb_Recipients(boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPRecipientsObject> other);
|
|
18
|
+
void add(pre_rb_Certificate& attrb);
|
|
19
|
+
void clear(void);
|
|
20
|
+
long get_count(void);
|
|
21
|
+
pre_rb_Certificate get_item(long index);
|
|
22
|
+
void remove(long index);
|
|
23
|
+
|
|
24
|
+
static void define_ruby_class(VALUE module);
|
|
25
|
+
|
|
26
|
+
friend class pre_rb_EnvelopedData;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
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_signature_status.h"
|
|
10
|
+
|
|
11
|
+
using namespace Rice;
|
|
12
|
+
using namespace CryptoPro::PKI::CAdES;
|
|
13
|
+
|
|
14
|
+
namespace rucades {
|
|
15
|
+
pre_rb_SignatureStatus::pre_rb_SignatureStatus(void):
|
|
16
|
+
m_pCppCadesImpl(boost::shared_ptr<CPPCadesSignatureStatusObject>(new CPPCadesSignatureStatusObject())) { }
|
|
17
|
+
|
|
18
|
+
pre_rb_SignatureStatus::pre_rb_SignatureStatus(boost::shared_ptr<CPPCadesSignatureStatusObject> other):
|
|
19
|
+
m_pCppCadesImpl(other) { }
|
|
20
|
+
|
|
21
|
+
bool pre_rb_SignatureStatus::is_valid(void)
|
|
22
|
+
{
|
|
23
|
+
bool valid;
|
|
24
|
+
hr_method_check(m_pCppCadesImpl->IsValid(valid));
|
|
25
|
+
return valid;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
void pre_rb_SignatureStatus::define_ruby_class(VALUE module)
|
|
29
|
+
{
|
|
30
|
+
Data_Type<pre_rb_SignatureStatus> rb_cSignatureStatus =
|
|
31
|
+
define_class_under<pre_rb_SignatureStatus>(module, "SignatureStatus")
|
|
32
|
+
.define_constructor(Constructor<pre_rb_SignatureStatus>())
|
|
33
|
+
.define_method("valid?", &pre_rb_SignatureStatus::is_valid);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -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 "CPPCadesSignatureStatus.h"
|
|
9
|
+
|
|
10
|
+
namespace rucades {
|
|
11
|
+
class pre_rb_SignatureStatus {
|
|
12
|
+
protected:
|
|
13
|
+
boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesSignatureStatusObject> m_pCppCadesImpl;
|
|
14
|
+
public:
|
|
15
|
+
pre_rb_SignatureStatus(void);
|
|
16
|
+
pre_rb_SignatureStatus(boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesSignatureStatusObject> other);
|
|
17
|
+
bool is_valid(void);
|
|
18
|
+
|
|
19
|
+
static void define_ruby_class(VALUE module);
|
|
20
|
+
|
|
21
|
+
friend class pre_rb_Signer;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
@@ -0,0 +1,253 @@
|
|
|
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_signed_data.h"
|
|
10
|
+
|
|
11
|
+
using namespace Rice;
|
|
12
|
+
using namespace CryptoPro::PKI::CAdES;
|
|
13
|
+
|
|
14
|
+
namespace rucades {
|
|
15
|
+
pre_rb_SignedData::pre_rb_SignedData(void):
|
|
16
|
+
m_pCppCadesImpl(boost::shared_ptr<CPPCadesSignedDataObject>(new CPPCadesSignedDataObject())) { }
|
|
17
|
+
|
|
18
|
+
long pre_rb_SignedData::get_content_encoding(void)
|
|
19
|
+
{
|
|
20
|
+
CADESCOM_CONTENT_ENCODING_TYPE Type;
|
|
21
|
+
hr_method_check(m_pCppCadesImpl->get_ContentEncoding(&Type));
|
|
22
|
+
return static_cast<long>(Type);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
void pre_rb_SignedData::set_content_encoding(long enc)
|
|
26
|
+
{
|
|
27
|
+
CADESCOM_CONTENT_ENCODING_TYPE Type = static_cast<CADESCOM_CONTENT_ENCODING_TYPE>(enc);
|
|
28
|
+
hr_method_check(m_pCppCadesImpl->put_ContentEncoding(Type));
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
std::string pre_rb_SignedData::get_content(void)
|
|
32
|
+
{
|
|
33
|
+
|
|
34
|
+
CStringBlob strBlobValue;
|
|
35
|
+
hr_method_check(m_pCppCadesImpl->get_Content(strBlobValue));
|
|
36
|
+
CAtlString sValue = CAtlString(reinterpret_cast<const char *>(strBlobValue.GetString()), strBlobValue.GetLength());
|
|
37
|
+
return std::string(sValue.GetString());
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
void pre_rb_SignedData::set_content(std::string content)
|
|
41
|
+
{
|
|
42
|
+
CAtlString sContent = CAtlString(content.c_str());
|
|
43
|
+
hr_method_check(m_pCppCadesImpl->put_Content(sContent.GetString(), sContent.GetLength()));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
pre_rb_Signers pre_rb_SignedData::get_signers(void)
|
|
47
|
+
{
|
|
48
|
+
pre_rb_Signers pSigners;
|
|
49
|
+
hr_method_check(m_pCppCadesImpl->get_Signers(pSigners.m_pCppCadesImpl));
|
|
50
|
+
return pSigners;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
pre_rb_Certificates pre_rb_SignedData::get_certificates(void)
|
|
54
|
+
{
|
|
55
|
+
pre_rb_Certificates pCertificates;
|
|
56
|
+
hr_method_check(m_pCppCadesImpl->get_Certificates(pCertificates.m_pCppCadesImpl));
|
|
57
|
+
return pCertificates;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
std::string pre_rb_SignedData::sign_cades(pre_rb_Signer* signer, long type, bool detached, long enc)
|
|
61
|
+
{
|
|
62
|
+
CAPICOM_ENCODING_TYPE EncodingType = static_cast<CAPICOM_ENCODING_TYPE>(enc);
|
|
63
|
+
CADESCOM_CADES_TYPE CadesType = static_cast<CADESCOM_CADES_TYPE>(type);
|
|
64
|
+
CryptoPro::CBlob blobSignedMessage;
|
|
65
|
+
|
|
66
|
+
boost::shared_ptr<CPPCadesCPSignerObject> pSignerCppCadesImpl;
|
|
67
|
+
if (signer) {
|
|
68
|
+
pSignerCppCadesImpl = signer->m_pCppCadesImpl;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
hr_method_check(m_pCppCadesImpl->SignCades(pSignerCppCadesImpl,
|
|
72
|
+
CadesType,
|
|
73
|
+
detached ? TRUE : FALSE,
|
|
74
|
+
EncodingType,
|
|
75
|
+
&blobSignedMessage));
|
|
76
|
+
return std::string(reinterpret_cast<const char *>(blobSignedMessage.pbData()), blobSignedMessage.cbData());
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
std::string pre_rb_SignedData::cosign_cades(pre_rb_Signer* signer, long type, long enc)
|
|
80
|
+
{
|
|
81
|
+
CAPICOM_ENCODING_TYPE EncodingType = static_cast<CAPICOM_ENCODING_TYPE>(enc);
|
|
82
|
+
CADESCOM_CADES_TYPE CadesType = static_cast<CADESCOM_CADES_TYPE>(type);
|
|
83
|
+
CryptoPro::CBlob blobSignedMessage;
|
|
84
|
+
|
|
85
|
+
boost::shared_ptr<CPPCadesCPSignerObject> pSignerCppCadesImpl;
|
|
86
|
+
if (signer) {
|
|
87
|
+
pSignerCppCadesImpl = signer->m_pCppCadesImpl;
|
|
88
|
+
}
|
|
89
|
+
hr_method_check(m_pCppCadesImpl->CoSignCades(pSignerCppCadesImpl,
|
|
90
|
+
CadesType,
|
|
91
|
+
EncodingType,
|
|
92
|
+
&blobSignedMessage));
|
|
93
|
+
return std::string(reinterpret_cast<const char *>(blobSignedMessage.pbData()), blobSignedMessage.cbData());
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
std::string pre_rb_SignedData::sign_hash(pre_rb_HashedData& hash, pre_rb_Signer* signer, long type, long enc)
|
|
97
|
+
{
|
|
98
|
+
CAPICOM_ENCODING_TYPE EncodingType = static_cast<CAPICOM_ENCODING_TYPE>(enc);
|
|
99
|
+
CADESCOM_CADES_TYPE CadesType = static_cast<CADESCOM_CADES_TYPE>(type);
|
|
100
|
+
CryptoPro::CBlob blobSignedMessage;
|
|
101
|
+
|
|
102
|
+
boost::shared_ptr<CPPCadesCPSignerObject> pSignerCppCadesImpl;
|
|
103
|
+
if (signer) {
|
|
104
|
+
pSignerCppCadesImpl = signer->m_pCppCadesImpl;
|
|
105
|
+
}
|
|
106
|
+
hr_method_check(m_pCppCadesImpl->SignHash(pSignerCppCadesImpl,
|
|
107
|
+
hash.m_pCppCadesImpl,
|
|
108
|
+
CadesType,
|
|
109
|
+
EncodingType,
|
|
110
|
+
&blobSignedMessage));
|
|
111
|
+
return std::string(reinterpret_cast<const char *>(blobSignedMessage.pbData()), blobSignedMessage.cbData());
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
std::string pre_rb_SignedData::cosign_hash(pre_rb_HashedData& hash, pre_rb_Signer* signer, long type, long enc)
|
|
115
|
+
{
|
|
116
|
+
CAPICOM_ENCODING_TYPE EncodingType = static_cast<CAPICOM_ENCODING_TYPE>(enc);
|
|
117
|
+
CADESCOM_CADES_TYPE CadesType = static_cast<CADESCOM_CADES_TYPE>(type);
|
|
118
|
+
CryptoPro::CBlob blobSignedMessage;
|
|
119
|
+
|
|
120
|
+
boost::shared_ptr<CPPCadesCPSignerObject> pSignerCppCadesImpl;
|
|
121
|
+
if (signer) {
|
|
122
|
+
pSignerCppCadesImpl = signer->m_pCppCadesImpl;
|
|
123
|
+
}
|
|
124
|
+
hr_method_check(m_pCppCadesImpl->CoSignHash(pSignerCppCadesImpl,
|
|
125
|
+
hash.m_pCppCadesImpl,
|
|
126
|
+
CadesType,
|
|
127
|
+
EncodingType,
|
|
128
|
+
&blobSignedMessage));
|
|
129
|
+
return std::string(reinterpret_cast<const char *>(blobSignedMessage.pbData()), blobSignedMessage.cbData());
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
std::string pre_rb_SignedData::sign(pre_rb_Signer* signer, bool detached, long enc)
|
|
133
|
+
{
|
|
134
|
+
CAPICOM_ENCODING_TYPE EncodingType = static_cast<CAPICOM_ENCODING_TYPE>(enc);
|
|
135
|
+
CryptoPro::CBlob blobSignedMessage;
|
|
136
|
+
|
|
137
|
+
boost::shared_ptr<CPPCadesCPSignerObject> pSignerCppCadesImpl;
|
|
138
|
+
if (signer) {
|
|
139
|
+
pSignerCppCadesImpl = signer->m_pCppCadesImpl;
|
|
140
|
+
}
|
|
141
|
+
hr_method_check(m_pCppCadesImpl->Sign(pSignerCppCadesImpl,
|
|
142
|
+
detached ? TRUE : FALSE,
|
|
143
|
+
EncodingType,
|
|
144
|
+
&blobSignedMessage));
|
|
145
|
+
return std::string(reinterpret_cast<const char *>(blobSignedMessage.pbData()), blobSignedMessage.cbData());
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
std::string pre_rb_SignedData::cosign(pre_rb_Signer* signer, long enc)
|
|
149
|
+
{
|
|
150
|
+
CAPICOM_ENCODING_TYPE EncodingType = static_cast<CAPICOM_ENCODING_TYPE>(enc);
|
|
151
|
+
CryptoPro::CBlob blobSignedMessage;
|
|
152
|
+
|
|
153
|
+
boost::shared_ptr<CPPCadesCPSignerObject> pSignerCppCadesImpl;
|
|
154
|
+
if (signer) {
|
|
155
|
+
pSignerCppCadesImpl = signer->m_pCppCadesImpl;
|
|
156
|
+
}
|
|
157
|
+
hr_method_check(m_pCppCadesImpl->CoSign(pSignerCppCadesImpl,
|
|
158
|
+
EncodingType,
|
|
159
|
+
&blobSignedMessage));
|
|
160
|
+
return std::string(reinterpret_cast<const char *>(blobSignedMessage.pbData()), blobSignedMessage.cbData());
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
std::string pre_rb_SignedData::enhance_cades(long type, std::string addr, long enc)
|
|
164
|
+
{
|
|
165
|
+
CryptoPro::CBlob blobValue;
|
|
166
|
+
CADESCOM_CADES_TYPE CadesType = static_cast<CADESCOM_CADES_TYPE>(type);
|
|
167
|
+
CAPICOM_ENCODING_TYPE EncodingType = static_cast<CAPICOM_ENCODING_TYPE>(enc);
|
|
168
|
+
|
|
169
|
+
hr_method_check(m_pCppCadesImpl->EnhanceCades(CadesType, CAtlString(addr.c_str()), EncodingType, &blobValue));
|
|
170
|
+
return std::string(reinterpret_cast<const char *>(blobValue.pbData()), blobValue.cbData());
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
void pre_rb_SignedData::verify(std::string msg, bool detached, long verify_flag)
|
|
174
|
+
{
|
|
175
|
+
CAPICOM_SIGNED_DATA_VERIFY_FLAG VerifyFlag = static_cast<CAPICOM_SIGNED_DATA_VERIFY_FLAG>(verify_flag);
|
|
176
|
+
CryptoPro::CBlob blobSignedMessage;
|
|
177
|
+
blobSignedMessage.assign(reinterpret_cast<const unsigned char *>(msg.c_str()), msg.length());
|
|
178
|
+
hr_method_check(m_pCppCadesImpl->Verify(blobSignedMessage, detached ? TRUE : FALSE, VerifyFlag));
|
|
179
|
+
}
|
|
180
|
+
void pre_rb_SignedData::verify_cades(std::string msg, long type, bool detached)
|
|
181
|
+
{
|
|
182
|
+
CADESCOM_CADES_TYPE CadesType = static_cast<CADESCOM_CADES_TYPE>(type);
|
|
183
|
+
CryptoPro::CBlob blobSignedMessage;
|
|
184
|
+
blobSignedMessage.assign(reinterpret_cast<const unsigned char *>(msg.c_str()), msg.length());
|
|
185
|
+
hr_method_check(m_pCppCadesImpl->VerifyCades(blobSignedMessage, CadesType, detached ? TRUE : FALSE));
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
void pre_rb_SignedData::verify_hash(pre_rb_HashedData& hash, std::string msg, long type)
|
|
189
|
+
{
|
|
190
|
+
CADESCOM_CADES_TYPE CadesType = static_cast<CADESCOM_CADES_TYPE>(type);
|
|
191
|
+
CryptoPro::CBlob blobSignedMessage;
|
|
192
|
+
blobSignedMessage.assign(reinterpret_cast<const unsigned char *>(msg.c_str()), msg.length());
|
|
193
|
+
|
|
194
|
+
hr_method_check(m_pCppCadesImpl->VerifyHash(hash.m_pCppCadesImpl, blobSignedMessage, CadesType));
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
void pre_rb_SignedData::additional_store(pre_rb_Store& store)
|
|
198
|
+
{
|
|
199
|
+
hr_method_check(m_pCppCadesImpl->AdditionalStore(store.m_pCppCadesImpl));
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
void pre_rb_SignedData::define_ruby_class(VALUE module)
|
|
203
|
+
{
|
|
204
|
+
Data_Type<pre_rb_SignedData> rb_cSignedData = define_class_under<pre_rb_SignedData>(module, "SignedData")
|
|
205
|
+
.define_constructor(Constructor<pre_rb_SignedData>())
|
|
206
|
+
.define_method("content_encoding", &pre_rb_SignedData::get_content_encoding)
|
|
207
|
+
.define_method("content_encoding=", &pre_rb_SignedData::set_content_encoding)
|
|
208
|
+
.define_method("content", &pre_rb_SignedData::get_content)
|
|
209
|
+
.define_method("content=", &pre_rb_SignedData::set_content)
|
|
210
|
+
.define_method("signers", &pre_rb_SignedData::get_signers)
|
|
211
|
+
.define_method("certificates", &pre_rb_SignedData::get_certificates)
|
|
212
|
+
.define_method("sign_cades", &pre_rb_SignedData::sign_cades,
|
|
213
|
+
Arg("signer") = nullptr,
|
|
214
|
+
Arg("type") = static_cast<long>(CADESCOM_CADES_DEFAULT),
|
|
215
|
+
Arg("detached") = false,
|
|
216
|
+
Arg("enc") = static_cast<long>(CAPICOM_ENCODE_BASE64))
|
|
217
|
+
.define_method("cosign_cades", &pre_rb_SignedData::cosign_cades,
|
|
218
|
+
Arg("signer") = nullptr,
|
|
219
|
+
Arg("type") = static_cast<long>(CADESCOM_CADES_DEFAULT),
|
|
220
|
+
Arg("enc") = static_cast<long>(CAPICOM_ENCODE_BASE64))
|
|
221
|
+
.define_method("sign_hash", &pre_rb_SignedData::sign_hash,
|
|
222
|
+
Arg("hash"),
|
|
223
|
+
Arg("signer") = nullptr,
|
|
224
|
+
Arg("type") = static_cast<long>(CADESCOM_CADES_DEFAULT),
|
|
225
|
+
Arg("enc") = static_cast<long>(CAPICOM_ENCODE_BASE64))
|
|
226
|
+
.define_method("cosign_hash", &pre_rb_SignedData::cosign_hash,
|
|
227
|
+
Arg("hash"),
|
|
228
|
+
Arg("signer") = nullptr,
|
|
229
|
+
Arg("type") = static_cast<long>(CADESCOM_CADES_DEFAULT),
|
|
230
|
+
Arg("enc") = static_cast<long>(CAPICOM_ENCODE_BASE64))
|
|
231
|
+
.define_method("sign", &pre_rb_SignedData::sign,
|
|
232
|
+
Arg("signer") = nullptr,
|
|
233
|
+
Arg("detached") = false,
|
|
234
|
+
Arg("enc") = static_cast<long>(CAPICOM_ENCODE_BASE64))
|
|
235
|
+
.define_method("cosign", &pre_rb_SignedData::cosign,
|
|
236
|
+
Arg("signer") = nullptr,
|
|
237
|
+
Arg("enc") = static_cast<long>(CAPICOM_ENCODE_BASE64))
|
|
238
|
+
.define_method("enhance_cades", &pre_rb_SignedData::enhance_cades,
|
|
239
|
+
Arg("type") = static_cast<long>(CADESCOM_CADES_DEFAULT),
|
|
240
|
+
Arg("addr") = std::string(""),
|
|
241
|
+
Arg("enc") = static_cast<long>(CAPICOM_ENCODE_BASE64))
|
|
242
|
+
.define_method("verify", &pre_rb_SignedData::verify,
|
|
243
|
+
Arg("msg"),
|
|
244
|
+
Arg("detached") = false,
|
|
245
|
+
Arg("verify_flag") = static_cast<long>(CAPICOM_VERIFY_SIGNATURE_ONLY))
|
|
246
|
+
.define_method("verify_cades", &pre_rb_SignedData::verify_cades,
|
|
247
|
+
Arg("msg"),
|
|
248
|
+
Arg("type") = static_cast<long>(CADESCOM_CADES_DEFAULT),
|
|
249
|
+
Arg("detached") = false)
|
|
250
|
+
.define_method("verify_hash", &pre_rb_SignedData::verify_hash)
|
|
251
|
+
.define_method("additional_store", &pre_rb_SignedData::additional_store);
|
|
252
|
+
}
|
|
253
|
+
}
|