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.
Files changed (87) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.rubocop.yml +18 -0
  4. data/Gemfile +16 -0
  5. data/LICENSE.txt +21 -0
  6. data/README.md +132 -0
  7. data/Rakefile +21 -0
  8. data/ext/rucades/cplib/Blob.h +192 -0
  9. data/ext/rucades/cplib/DateTime.h +518 -0
  10. data/ext/rucades/cplib/StringProxy.h +281 -0
  11. data/ext/rucades/cpstldll.h +183 -0
  12. data/ext/rucades/errormsg.cpp +561 -0
  13. data/ext/rucades/errormsg.h +31 -0
  14. data/ext/rucades/extconf.rb +91 -0
  15. data/ext/rucades/rucades.cpp +90 -0
  16. data/ext/rucades/rucades.h +14 -0
  17. data/ext/rucades/rucades_about.cpp +75 -0
  18. data/ext/rucades/rucades_about.h +26 -0
  19. data/ext/rucades/rucades_algorithm.cpp +54 -0
  20. data/ext/rucades/rucades_algorithm.h +28 -0
  21. data/ext/rucades/rucades_attribute.cpp +112 -0
  22. data/ext/rucades/rucades_attribute.h +30 -0
  23. data/ext/rucades/rucades_attributes.cpp +62 -0
  24. data/ext/rucades/rucades_attributes.h +28 -0
  25. data/ext/rucades/rucades_basic_constraints.cpp +67 -0
  26. data/ext/rucades/rucades_basic_constraints.h +27 -0
  27. data/ext/rucades/rucades_blobs.cpp +46 -0
  28. data/ext/rucades/rucades_blobs.h +25 -0
  29. data/ext/rucades/rucades_certificate.cpp +182 -0
  30. data/ext/rucades/rucades_certificate.h +59 -0
  31. data/ext/rucades/rucades_certificate_status.cpp +36 -0
  32. data/ext/rucades/rucades_certificate_status.h +23 -0
  33. data/ext/rucades/rucades_certificates.cpp +140 -0
  34. data/ext/rucades/rucades_certificates.h +31 -0
  35. data/ext/rucades/rucades_const.cpp +241 -0
  36. data/ext/rucades/rucades_crl.cpp +84 -0
  37. data/ext/rucades/rucades_crl.h +29 -0
  38. data/ext/rucades/rucades_eku.cpp +55 -0
  39. data/ext/rucades/rucades_eku.h +26 -0
  40. data/ext/rucades/rucades_ekus.cpp +43 -0
  41. data/ext/rucades/rucades_ekus.h +27 -0
  42. data/ext/rucades/rucades_encoded_data.cpp +41 -0
  43. data/ext/rucades/rucades_encoded_data.h +23 -0
  44. data/ext/rucades/rucades_enveloped_data.cpp +122 -0
  45. data/ext/rucades/rucades_enveloped_data.h +33 -0
  46. data/ext/rucades/rucades_extended_key_usage.cpp +53 -0
  47. data/ext/rucades/rucades_extended_key_usage.h +27 -0
  48. data/ext/rucades/rucades_hashed_data.cpp +90 -0
  49. data/ext/rucades/rucades_hashed_data.h +31 -0
  50. data/ext/rucades/rucades_key_usage.cpp +116 -0
  51. data/ext/rucades/rucades_key_usage.h +33 -0
  52. data/ext/rucades/rucades_oid.cpp +70 -0
  53. data/ext/rucades/rucades_oid.h +30 -0
  54. data/ext/rucades/rucades_private_key.cpp +86 -0
  55. data/ext/rucades/rucades_private_key.h +31 -0
  56. data/ext/rucades/rucades_public_key.cpp +59 -0
  57. data/ext/rucades/rucades_public_key.h +28 -0
  58. data/ext/rucades/rucades_raw_signature.cpp +42 -0
  59. data/ext/rucades/rucades_raw_signature.h +26 -0
  60. data/ext/rucades/rucades_recipients.cpp +63 -0
  61. data/ext/rucades/rucades_recipients.h +28 -0
  62. data/ext/rucades/rucades_signature_status.cpp +35 -0
  63. data/ext/rucades/rucades_signature_status.h +23 -0
  64. data/ext/rucades/rucades_signed_data.cpp +253 -0
  65. data/ext/rucades/rucades_signed_data.h +41 -0
  66. data/ext/rucades/rucades_signed_xml.cpp +87 -0
  67. data/ext/rucades/rucades_signed_xml.h +29 -0
  68. data/ext/rucades/rucades_signer.cpp +157 -0
  69. data/ext/rucades/rucades_signer.h +45 -0
  70. data/ext/rucades/rucades_signers.cpp +43 -0
  71. data/ext/rucades/rucades_signers.h +27 -0
  72. data/ext/rucades/rucades_store.cpp +78 -0
  73. data/ext/rucades/rucades_store.h +34 -0
  74. data/ext/rucades/rucades_symmetric_algorithm.cpp +107 -0
  75. data/ext/rucades/rucades_symmetric_algorithm.h +30 -0
  76. data/ext/rucades/rucades_tools.cpp +18 -0
  77. data/ext/rucades/rucades_version.cpp +60 -0
  78. data/ext/rucades/rucades_version.h +24 -0
  79. data/ext/rucades/stdafx.h +190 -0
  80. data/lib/rucades/version.rb +9 -0
  81. data/lib/rucades.rb +36 -0
  82. data/samples/encrypt_decrypt.rb +25 -0
  83. data/samples/sign_verify.rb +28 -0
  84. data/samples/sign_verify_hash.rb +30 -0
  85. data/samples/sign_verify_xml.rb +44 -0
  86. data/sig/rucades.rbs +4 -0
  87. metadata +156 -0
@@ -0,0 +1,122 @@
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_enveloped_data.h"
10
+
11
+ using namespace Rice;
12
+ using namespace CryptoPro::PKI::CAdES;
13
+
14
+ namespace rucades {
15
+ pre_rb_EnvelopedData::pre_rb_EnvelopedData(void):
16
+ m_pCppCadesImpl(boost::shared_ptr<CPPCadesCPEnvelopedDataObject>(new CPPCadesCPEnvelopedDataObject())) { }
17
+
18
+ std::string pre_rb_EnvelopedData::get_content(void)
19
+ {
20
+ CStringBlob content;
21
+ hr_method_check(m_pCppCadesImpl->get_Content(content));
22
+ return std::string(content);
23
+ }
24
+
25
+ void pre_rb_EnvelopedData::set_content(std::string content)
26
+ {
27
+ CAtlString sContent = CAtlString(content.c_str());
28
+ hr_method_check(m_pCppCadesImpl->put_Content(sContent.GetString(), sContent.GetLength()));
29
+ }
30
+
31
+ long pre_rb_EnvelopedData::get_content_encoding(void)
32
+ {
33
+ CADESCOM_CONTENT_ENCODING_TYPE enc;
34
+ hr_method_check(m_pCppCadesImpl->get_ContentEncoding(&enc));
35
+ return static_cast<long>(enc);
36
+ }
37
+
38
+ void pre_rb_EnvelopedData::set_content_encoding(long enc)
39
+ {
40
+ hr_method_check(m_pCppCadesImpl->put_ContentEncoding(static_cast<CADESCOM_CONTENT_ENCODING_TYPE>(enc)));
41
+ }
42
+
43
+ pre_rb_Recipients pre_rb_EnvelopedData::get_recipients(void)
44
+ {
45
+ pre_rb_Recipients pRecipients;
46
+ hr_method_check(m_pCppCadesImpl->get_Recipients(pRecipients.m_pCppCadesImpl));
47
+ return pRecipients;
48
+ }
49
+
50
+ pre_rb_Algorithm pre_rb_EnvelopedData::get_algorithm(void)
51
+ {
52
+ pre_rb_Algorithm pAlgorithm;
53
+ hr_method_check(m_pCppCadesImpl->get_Algorithm(pAlgorithm.m_pCppCadesImpl));
54
+ return pAlgorithm;
55
+ }
56
+
57
+ std::string pre_rb_EnvelopedData::encrypt(long enc)
58
+ {
59
+ CAPICOM_ENCODING_TYPE EncodingType = static_cast<CAPICOM_ENCODING_TYPE>(enc);
60
+ CryptoPro::CBlob blobData;
61
+ hr_method_check(m_pCppCadesImpl->Encrypt(EncodingType, blobData));
62
+ CAtlString sData = CAtlString(reinterpret_cast<const TCHAR *>(blobData.pbData()), blobData.cbData());
63
+ return std::string(sData.GetString());
64
+ }
65
+
66
+ void pre_rb_EnvelopedData::decrypt(std::string data)
67
+ {
68
+ CryptoPro::CBlob blobData;
69
+ blobData.assign(reinterpret_cast<const unsigned char *>(data.c_str()), data.length());
70
+ hr_method_check(m_pCppCadesImpl->Decrypt(blobData));
71
+ }
72
+
73
+ std::string pre_rb_EnvelopedData::stream_encrypt(std::string content, int final)
74
+ {
75
+ int bIsFinal = final ? TRUE : FALSE;
76
+ CAtlString sData = CAtlString(CA2CT(CAtlStringA(content.c_str()), CP_UTF8));
77
+ CryptoPro::CBlob blobResult;
78
+ hr_method_check(m_pCppCadesImpl->StreamEncrypt(
79
+ sData.GetString(), sData.GetLength(), bIsFinal, blobResult));
80
+
81
+ CAtlString sResult;
82
+ if (blobResult.cbData())
83
+ {
84
+ sResult = CAtlString(reinterpret_cast<const TCHAR *>(blobResult.pbData()), blobResult.cbData());
85
+ }
86
+ return std::string(sResult.GetString());
87
+ }
88
+
89
+ std::string pre_rb_EnvelopedData::stream_decrypt(std::string content, int final)
90
+ {
91
+ int bIsFinal = final ? TRUE : FALSE;
92
+ CAtlString sData = CAtlString(CA2CT(CAtlStringA(content.c_str()), CP_UTF8));
93
+ CryptoPro::CBlob blobResult;
94
+ hr_method_check(m_pCppCadesImpl->StreamDecrypt(
95
+ sData.GetString(), sData.GetLength(), bIsFinal, blobResult));
96
+
97
+ CAtlString sResult;
98
+ if (blobResult.cbData())
99
+ {
100
+ sResult = CAtlString((const char *)blobResult.pbData(), blobResult.cbData());
101
+ }
102
+ return std::string(sResult.GetString());
103
+ }
104
+
105
+ void pre_rb_EnvelopedData::define_ruby_class(VALUE module)
106
+ {
107
+ Data_Type<pre_rb_EnvelopedData> rb_cEnvelopedData =
108
+ define_class_under<pre_rb_EnvelopedData>(module, "EnvelopedData")
109
+ .define_constructor(Constructor<pre_rb_EnvelopedData>())
110
+ .define_method("content", &pre_rb_EnvelopedData::get_content)
111
+ .define_method("content=", &pre_rb_EnvelopedData::set_content)
112
+ .define_method("content_encoding", &pre_rb_EnvelopedData::get_content_encoding)
113
+ .define_method("content_encoding=", &pre_rb_EnvelopedData::set_content_encoding)
114
+ .define_method("recipients", &pre_rb_EnvelopedData::get_recipients)
115
+ .define_method("algorithm", &pre_rb_EnvelopedData::get_algorithm)
116
+ .define_method("encrypt", &pre_rb_EnvelopedData::encrypt,
117
+ Arg("enc") = static_cast<long>(CADESCOM_STRING_TO_UCS2LE))
118
+ .define_method("decrypt", &pre_rb_EnvelopedData::decrypt)
119
+ .define_method("stream_encrypt", &pre_rb_EnvelopedData::stream_encrypt)
120
+ .define_method("stream_decrypt", &pre_rb_EnvelopedData::stream_decrypt);
121
+ }
122
+ }
@@ -0,0 +1,33 @@
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_algorithm.h"
9
+ #include "rucades_recipients.h"
10
+ #include "CPPCadesCPEnvelopedData.h"
11
+
12
+ namespace rucades {
13
+ class pre_rb_EnvelopedData {
14
+ protected:
15
+ boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPEnvelopedDataObject> m_pCppCadesImpl;
16
+ public:
17
+ pre_rb_EnvelopedData(void);
18
+
19
+ std::string get_content(void);
20
+ void set_content(std::string content);
21
+ long get_content_encoding(void);
22
+ void set_content_encoding(long enc);
23
+ pre_rb_Recipients get_recipients(void);
24
+ pre_rb_Algorithm get_algorithm(void);
25
+
26
+ std::string encrypt(long enc);
27
+ void decrypt(std::string);
28
+ std::string stream_encrypt(std::string content, int final);
29
+ std::string stream_decrypt(std::string content, int final);
30
+
31
+ static void define_ruby_class(VALUE module);
32
+ };
33
+ }
@@ -0,0 +1,53 @@
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_extended_key_usage.h"
10
+
11
+ using namespace Rice;
12
+ using namespace CryptoPro::PKI::CAdES;
13
+
14
+ namespace rucades {
15
+ pre_rb_ExtendedKeyUsage::pre_rb_ExtendedKeyUsage(void):
16
+ m_pCppCadesImpl(new CPPCadesCPExtendedKeyUsageObject()) { }
17
+
18
+ pre_rb_ExtendedKeyUsage::pre_rb_ExtendedKeyUsage(boost::shared_ptr<CPPCadesCPExtendedKeyUsageObject> other):
19
+ m_pCppCadesImpl(other) { }
20
+
21
+ bool pre_rb_ExtendedKeyUsage::is_present(void)
22
+ {
23
+ BOOL bIsPresent;
24
+ m_pCppCadesImpl->get_IsPresent(&bIsPresent);
25
+ return (bIsPresent != FALSE);
26
+ }
27
+
28
+ bool pre_rb_ExtendedKeyUsage::is_critical(void)
29
+ {
30
+ BOOL bIsCritical;
31
+ m_pCppCadesImpl->get_IsCritical(&bIsCritical);
32
+ return (bIsCritical != FALSE);
33
+ }
34
+
35
+ pre_rb_EKUs pre_rb_ExtendedKeyUsage::get_ekus(void)
36
+ {
37
+
38
+ boost::shared_ptr<CPPCadesCPEKUsObject> pCppCadesEKUs(new CPPCadesCPEKUsObject());
39
+ hr_method_check(m_pCppCadesImpl->get_EKUs(pCppCadesEKUs));
40
+
41
+ return pre_rb_EKUs(pCppCadesEKUs);
42
+ }
43
+
44
+ void pre_rb_ExtendedKeyUsage::define_ruby_class(VALUE module)
45
+ {
46
+ Data_Type<pre_rb_ExtendedKeyUsage> rb_cExtendedKeyUsage =
47
+ define_class_under<pre_rb_ExtendedKeyUsage>(module, "ExtendedKeyUsage")
48
+ .define_constructor(Constructor<pre_rb_ExtendedKeyUsage>())
49
+ .define_method("present?", &pre_rb_ExtendedKeyUsage::is_present)
50
+ .define_method("critical?", &pre_rb_ExtendedKeyUsage::is_critical)
51
+ .define_method("ekus", &pre_rb_ExtendedKeyUsage::get_ekus);
52
+ }
53
+ }
@@ -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 "rucades_ekus.h"
9
+
10
+ #include "CPPCadesCPExtendedKeyUsage.h"
11
+
12
+ namespace rucades {
13
+ class pre_rb_ExtendedKeyUsage {
14
+ protected:
15
+ boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPExtendedKeyUsageObject> m_pCppCadesImpl;
16
+ public:
17
+ pre_rb_ExtendedKeyUsage(void);
18
+ pre_rb_ExtendedKeyUsage(boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPExtendedKeyUsageObject> other);
19
+ bool is_present(void);
20
+ bool is_critical(void);
21
+ pre_rb_EKUs get_ekus(void);
22
+
23
+ static void define_ruby_class(VALUE module);
24
+
25
+ friend class pre_rb_Certificate;
26
+ };
27
+ }
@@ -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_hashed_data.h"
10
+
11
+ using namespace Rice;
12
+ using namespace CryptoPro::PKI::CAdES;
13
+
14
+ namespace rucades {
15
+ pre_rb_HashedData::pre_rb_HashedData(void)
16
+ : m_pCppCadesImpl(boost::shared_ptr<CPPCadesCPHashedDataObject>(new CPPCadesCPHashedDataObject())) { }
17
+
18
+ std::string pre_rb_HashedData::get_key(void)
19
+ {
20
+ CAtlString sKey;
21
+ hr_method_check(m_pCppCadesImpl->get_Key(sKey));
22
+ return std::string(sKey.GetString());
23
+ }
24
+
25
+ void pre_rb_HashedData::set_key(std::string key)
26
+ {
27
+ CAtlString sKey = CAtlString(key.c_str());
28
+ hr_method_check(m_pCppCadesImpl->put_Key(sKey));
29
+ }
30
+
31
+ long pre_rb_HashedData::get_algorithm(void)
32
+ {
33
+ CAPICOM_HASH_ALGORITHM Algorithm;
34
+ hr_method_check(m_pCppCadesImpl->get_Algorithm(&Algorithm));
35
+ return static_cast<long>(Algorithm);
36
+ }
37
+
38
+ void pre_rb_HashedData::set_algorithm(long alg)
39
+ {
40
+ CAPICOM_HASH_ALGORITHM Algorithm = static_cast<CAPICOM_HASH_ALGORITHM>(alg);
41
+ hr_method_check(m_pCppCadesImpl->put_Algorithm(Algorithm));
42
+ }
43
+
44
+ long pre_rb_HashedData::get_data_encoding(void)
45
+ {
46
+ CADESCOM_CONTENT_ENCODING_TYPE Encoding;
47
+ hr_method_check(m_pCppCadesImpl->get_DataEncoding(&Encoding));
48
+ return static_cast<long>(Encoding);
49
+ }
50
+
51
+ void pre_rb_HashedData::set_data_encoding(long enc)
52
+ {
53
+ CADESCOM_CONTENT_ENCODING_TYPE Encoding = static_cast<CADESCOM_CONTENT_ENCODING_TYPE>(enc);
54
+ hr_method_check(m_pCppCadesImpl->put_DataEncoding(Encoding));
55
+ }
56
+
57
+ std::string pre_rb_HashedData::get_value(void)
58
+ {
59
+ CAtlString sValue;
60
+ hr_method_check(m_pCppCadesImpl->get_Value(sValue));
61
+ return std::string(sValue.GetString());
62
+ }
63
+
64
+ void pre_rb_HashedData::hash(std::string data)
65
+ {
66
+ CAtlString sValue = CAtlString(data.c_str());
67
+ hr_method_check(m_pCppCadesImpl->put_Hash(sValue.GetString(), sValue.GetLength()));
68
+ }
69
+
70
+ void pre_rb_HashedData::set_hash_value(std::string data)
71
+ {
72
+ CAtlString sValue = CAtlString(data.c_str());
73
+ hr_method_check(m_pCppCadesImpl->put_HashValue(sValue));
74
+ }
75
+
76
+ void pre_rb_HashedData::define_ruby_class(VALUE module)
77
+ {
78
+ define_class_under<pre_rb_HashedData>(module, "HashedData")
79
+ .define_constructor(Constructor<pre_rb_HashedData>())
80
+ .define_method("key", &pre_rb_HashedData::get_key)
81
+ .define_method("key=", &pre_rb_HashedData::set_key)
82
+ .define_method("algorithm", &pre_rb_HashedData::get_algorithm)
83
+ .define_method("algorithm=", &pre_rb_HashedData::set_algorithm)
84
+ .define_method("data_encoding", &pre_rb_HashedData::get_data_encoding)
85
+ .define_method("data_encoding=", &pre_rb_HashedData::set_data_encoding)
86
+ .define_method("value", &pre_rb_HashedData::get_value)
87
+ .define_method("hash", &pre_rb_HashedData::hash)
88
+ .define_method("hash_value=", &pre_rb_HashedData::set_hash_value);
89
+ }
90
+ }
@@ -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 "CPPCadesCPHashedData.h"
9
+
10
+ namespace rucades {
11
+ class pre_rb_HashedData {
12
+ protected:
13
+ boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPHashedDataObject> m_pCppCadesImpl;
14
+ public:
15
+ pre_rb_HashedData(void);
16
+ std::string get_key(void);
17
+ void set_key(std::string key);
18
+ long get_algorithm(void);
19
+ void set_algorithm(long alg);
20
+ long get_data_encoding(void);
21
+ void set_data_encoding(long enc);
22
+ std::string get_value(void);
23
+ void hash(std::string data);
24
+ void set_hash_value(std::string data);
25
+
26
+ static void define_ruby_class(VALUE module);
27
+
28
+ friend class pre_rb_RawSignature;
29
+ friend class pre_rb_SignedData;
30
+ };
31
+ }
@@ -0,0 +1,116 @@
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_key_usage.h"
10
+
11
+ using namespace Rice;
12
+ using namespace CryptoPro::PKI::CAdES;
13
+
14
+ namespace rucades {
15
+ pre_rb_KeyUsage::pre_rb_KeyUsage(void):
16
+ m_pCppCadesImpl(boost::shared_ptr<CPPCadesCPKeyUsageObject>(new CPPCadesCPKeyUsageObject())) { }
17
+
18
+ pre_rb_KeyUsage::pre_rb_KeyUsage(boost::shared_ptr<CPPCadesCPKeyUsageObject> other):
19
+ m_pCppCadesImpl(other) { }
20
+
21
+ bool pre_rb_KeyUsage::is_present(void)
22
+ {
23
+ BOOL bVal = 0;
24
+ hr_method_check(m_pCppCadesImpl->get_IsPresent(&bVal));
25
+ return (bVal != 0);
26
+ }
27
+
28
+ bool pre_rb_KeyUsage::is_critical(void)
29
+ {
30
+ BOOL bVal = 0;
31
+ hr_method_check(m_pCppCadesImpl->get_IsCritical(&bVal));
32
+ return (bVal != 0);
33
+ }
34
+
35
+ bool pre_rb_KeyUsage::is_digital_signature_enabled(void)
36
+ {
37
+ BOOL bVal = 0;
38
+ hr_method_check(m_pCppCadesImpl->get_IsDigitalSignatureEnabled(&bVal));
39
+ return (bVal != 0);
40
+ }
41
+
42
+ bool pre_rb_KeyUsage::is_non_repudiation_enabled(void)
43
+ {
44
+ BOOL bVal = 0;
45
+ hr_method_check(m_pCppCadesImpl->get_IsNonRepudiationEnabled(&bVal));
46
+ return (bVal != 0);
47
+ }
48
+
49
+ bool pre_rb_KeyUsage::is_key_encipherment_enabled(void)
50
+ {
51
+ BOOL bVal = 0;
52
+ hr_method_check(m_pCppCadesImpl->get_IsKeyEnciphermentEnabled(&bVal));
53
+ return (bVal != 0);
54
+ }
55
+
56
+ bool pre_rb_KeyUsage::is_key_agreement_enabled(void)
57
+ {
58
+ BOOL bVal = 0;
59
+ hr_method_check(m_pCppCadesImpl->get_IsKeyAgreementEnabled(&bVal));
60
+ return (bVal != 0);
61
+ }
62
+
63
+ bool pre_rb_KeyUsage::is_key_cert_sign_enabled(void)
64
+ {
65
+ BOOL bVal = 0;
66
+ hr_method_check(m_pCppCadesImpl->get_IsKeyCertSignEnabled(&bVal));
67
+ return (bVal != 0);
68
+ }
69
+
70
+ bool pre_rb_KeyUsage::is_data_encipherment_enabled(void)
71
+ {
72
+ BOOL bVal = 0;
73
+ hr_method_check(m_pCppCadesImpl->get_IsDataEnciphermentEnabled(&bVal));
74
+ return (bVal != 0);
75
+ }
76
+
77
+ bool pre_rb_KeyUsage::is_crl_sign_enabled(void)
78
+ {
79
+ BOOL bVal = 0;
80
+ hr_method_check(m_pCppCadesImpl->get_IsCRLSignEnabled(&bVal));
81
+ return (bVal != 0);
82
+ }
83
+
84
+ bool pre_rb_KeyUsage::is_encipher_only_enabled(void)
85
+ {
86
+ BOOL bVal = 0;
87
+ hr_method_check(m_pCppCadesImpl->get_IsEncipherOnlyEnabled(&bVal));
88
+ return (bVal != 0);
89
+ }
90
+
91
+ bool pre_rb_KeyUsage::is_decipher_only_enabled(void)
92
+ {
93
+ BOOL bVal = 0;
94
+ hr_method_check(m_pCppCadesImpl->get_IsDecipherOnlyEnabled(&bVal));
95
+ return (bVal != 0);
96
+ }
97
+
98
+ void pre_rb_KeyUsage::define_ruby_class(VALUE module)
99
+ {
100
+ Data_Type<pre_rb_KeyUsage> rb_cKeyUsage =
101
+ define_class_under<pre_rb_KeyUsage>(module, "KeyUsage")
102
+ .define_constructor(Constructor<pre_rb_KeyUsage>())
103
+ .define_method("present?", &pre_rb_KeyUsage::is_present)
104
+ .define_method("critical?", &pre_rb_KeyUsage::is_critical)
105
+ .define_method("digital_ignature_enabled?", &pre_rb_KeyUsage::is_digital_signature_enabled)
106
+ .define_method("non_repudiation_enabled?", &pre_rb_KeyUsage::is_non_repudiation_enabled)
107
+ .define_method("key_encipherment_enabled?", &pre_rb_KeyUsage::is_key_encipherment_enabled)
108
+ .define_method("key_agreement_enabled?", &pre_rb_KeyUsage::is_key_agreement_enabled)
109
+ .define_method("key_cert_sign_enabled?", &pre_rb_KeyUsage::is_key_cert_sign_enabled)
110
+ .define_method("data_encipherment_enabled?", &pre_rb_KeyUsage::is_data_encipherment_enabled)
111
+ .define_method("crl_sign_enabled?", &pre_rb_KeyUsage::is_crl_sign_enabled)
112
+ .define_method("encipher_only_enabled?", &pre_rb_KeyUsage::is_encipher_only_enabled)
113
+ .define_method("decipher_only_enabled?", &pre_rb_KeyUsage::is_decipher_only_enabled);
114
+ }
115
+
116
+ }
@@ -0,0 +1,33 @@
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 "CPPCadesCPKeyUsage.h"
9
+
10
+ namespace rucades {
11
+ class pre_rb_KeyUsage {
12
+ protected:
13
+ boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPKeyUsageObject> m_pCppCadesImpl;
14
+ public:
15
+ pre_rb_KeyUsage(void);
16
+ pre_rb_KeyUsage(boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPKeyUsageObject> other);
17
+ bool is_present(void);
18
+ bool is_critical(void);
19
+ bool is_digital_signature_enabled(void);
20
+ bool is_non_repudiation_enabled(void);
21
+ bool is_key_encipherment_enabled(void);
22
+ bool is_key_agreement_enabled(void);
23
+ bool is_key_cert_sign_enabled(void);
24
+ bool is_data_encipherment_enabled(void);
25
+ bool is_crl_sign_enabled(void);
26
+ bool is_encipher_only_enabled(void);
27
+ bool is_decipher_only_enabled(void);
28
+
29
+ static void define_ruby_class(VALUE module);
30
+
31
+ friend class pre_rb_Certificate;
32
+ };
33
+ }
@@ -0,0 +1,70 @@
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_oid.h"
10
+
11
+ using namespace Rice;
12
+ using namespace CryptoPro::PKI::CAdES;
13
+
14
+ namespace rucades {
15
+
16
+ pre_rb_OID::pre_rb_OID(void):
17
+ m_pCppCadesImpl(boost::shared_ptr<CPPCadesCPOIDObject>(new CPPCadesCPOIDObject())) { }
18
+
19
+ pre_rb_OID::pre_rb_OID(boost::shared_ptr<CPPCadesCPOIDObject> other):
20
+ m_pCppCadesImpl(other) { }
21
+
22
+ std::string pre_rb_OID::get_value(void)
23
+ {
24
+ boost::shared_ptr<CAtlStringA> pValue;
25
+ hr_method_check(m_pCppCadesImpl->get_Value(pValue));
26
+ return std::string((*pValue).GetString());
27
+ }
28
+
29
+ void pre_rb_OID::set_value(std::string& value)
30
+ {
31
+ hr_method_check(m_pCppCadesImpl->put_Value(CAtlStringA(value.c_str())));
32
+ }
33
+
34
+ long pre_rb_OID::get_name(void)
35
+ {
36
+ CAPICOM_OID name;
37
+ hr_method_check(m_pCppCadesImpl->get_Name(&name));
38
+ return static_cast<long>(name);
39
+ }
40
+
41
+ void pre_rb_OID::set_name (long name)
42
+ {
43
+ hr_method_check(m_pCppCadesImpl->put_Name(static_cast<CAPICOM_OID>(name)));
44
+ }
45
+
46
+ std::string pre_rb_OID::get_friendly_name(void)
47
+ {
48
+ CAtlString sFriendlyName;
49
+ hr_method_check(m_pCppCadesImpl->get_FriendlyName(sFriendlyName));
50
+ return std::string(sFriendlyName.GetString());
51
+ }
52
+
53
+ void pre_rb_OID::set_friendly_name(std::string& sFriendlyName)
54
+ {
55
+ hr_method_check(m_pCppCadesImpl->put_FriendlyName(CAtlStringA(sFriendlyName.c_str())));
56
+ }
57
+
58
+ void pre_rb_OID::define_ruby_class(VALUE module)
59
+ {
60
+ Data_Type<pre_rb_OID> rb_cOID =
61
+ define_class_under<pre_rb_OID>(module, "OID")
62
+ .define_constructor(Constructor<pre_rb_OID>())
63
+ .define_method("name", &pre_rb_OID::get_name)
64
+ .define_method("name=", &pre_rb_OID::set_name)
65
+ .define_method("value", &pre_rb_OID::get_value)
66
+ .define_method("value=", &pre_rb_OID::set_value)
67
+ .define_method("friendly_name", &pre_rb_OID::get_friendly_name)
68
+ .define_method("friendly_name=", &pre_rb_OID::set_friendly_name);
69
+ }
70
+ };
@@ -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 "CPPCadesCPOID.h"
9
+
10
+ namespace rucades {
11
+
12
+ class pre_rb_OID {
13
+ protected:
14
+ boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPOIDObject> m_pCppCadesImpl;
15
+ public:
16
+ pre_rb_OID(void);
17
+ pre_rb_OID(boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPOIDObject> other);
18
+ std::string get_value(void);
19
+ void set_value(std::string& value);
20
+ long get_name(void);
21
+ void set_name (long name);
22
+ std::string get_friendly_name(void);
23
+ void set_friendly_name(std::string& sFriendlyName);
24
+
25
+ static void define_ruby_class(VALUE module);
26
+
27
+ friend class pre_rb_PublicKey;
28
+ };
29
+
30
+ }