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,41 @@
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_signer.h"
10
+ #include "rucades_signers.h"
11
+ #include "rucades_store.h"
12
+ #include "CPPCadesCPSignedData.h"
13
+
14
+ namespace rucades {
15
+ class pre_rb_SignedData {
16
+ protected:
17
+ boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesSignedDataObject> m_pCppCadesImpl;
18
+ public:
19
+ pre_rb_SignedData(void);
20
+ long get_content_encoding(void);
21
+ void set_content_encoding(long enc);
22
+ std::string get_content(void);
23
+ void set_content(std::string content);
24
+ pre_rb_Signers get_signers(void);
25
+ pre_rb_Certificates get_certificates(void);
26
+
27
+ std::string sign_cades(pre_rb_Signer* signer, long type, bool detached, long enc);
28
+ std::string cosign_cades(pre_rb_Signer* signer, long type, long enc);
29
+ std::string sign_hash(pre_rb_HashedData& hash, pre_rb_Signer* signer, long type, long enc);
30
+ std::string cosign_hash(pre_rb_HashedData& hash, pre_rb_Signer* signer, long type, long enc);
31
+ std::string sign(pre_rb_Signer* signer, bool detached, long enc);
32
+ std::string cosign(pre_rb_Signer* signer, long enc);
33
+ std::string enhance_cades(long type, std::string addr, long enc);
34
+ void verify(std::string msg, bool detached, long verify_flag);
35
+ void verify_cades(std::string msg, long type, bool detached);
36
+ void verify_hash(pre_rb_HashedData& hash, std::string msg, long type);
37
+ void additional_store(pre_rb_Store& hash);
38
+
39
+ static void define_ruby_class(VALUE module);
40
+ };
41
+ }
@@ -0,0 +1,87 @@
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_xml.h"
10
+
11
+ using namespace Rice;
12
+ using namespace CryptoPro::PKI::CAdES;
13
+
14
+ namespace rucades {
15
+ pre_rb_SignedXML::pre_rb_SignedXML(void):
16
+ m_pCppCadesImpl(boost::shared_ptr<CPPCadesSignedXMLObject>(new CPPCadesSignedXMLObject())) { }
17
+
18
+ std::string pre_rb_SignedXML::get_content(void)
19
+ {
20
+ CStringBlob strBlobContent;
21
+ hr_method_check(m_pCppCadesImpl->get_Content(strBlobContent));
22
+ return std::string(strBlobContent.GetString());
23
+ }
24
+
25
+ void pre_rb_SignedXML::set_content(std::string content)
26
+ {
27
+ CStringBlob strBlobContent(content.c_str());
28
+ hr_method_check(m_pCppCadesImpl->put_Content(strBlobContent));
29
+ }
30
+
31
+ void pre_rb_SignedXML::set_signature_type(long type)
32
+ {
33
+ CADESCOM_XML_SIGNATURE_TYPE SignatureType = static_cast<CADESCOM_XML_SIGNATURE_TYPE>(type);
34
+ hr_method_check(m_pCppCadesImpl->put_SignatureType(SignatureType));
35
+ }
36
+
37
+ void pre_rb_SignedXML::set_digest_method(std::string method)
38
+ {
39
+ CStringBlob strBlobMethod(method.c_str());
40
+ hr_method_check(m_pCppCadesImpl->put_DigestMethod(strBlobMethod));
41
+ }
42
+
43
+ void pre_rb_SignedXML::set_signature_method(std::string method)
44
+ {
45
+ CStringBlob strBlobMethod(method.c_str());
46
+ hr_method_check(m_pCppCadesImpl->put_SignatureMethod(strBlobMethod));
47
+ }
48
+
49
+ pre_rb_Signers pre_rb_SignedXML::get_signers(void)
50
+ {
51
+ boost::shared_ptr<CPPCadesCPSignersObject> pSigners = boost::shared_ptr<CPPCadesCPSignersObject>(new CPPCadesCPSignersObject());
52
+ hr_method_check(m_pCppCadesImpl->get_Signers(pSigners));
53
+ return pre_rb_Signers(pSigners);
54
+ }
55
+
56
+ std::string pre_rb_SignedXML::sign(pre_rb_Signer& signer, std::string xpath)
57
+ {
58
+ CStringBlob strBlobXPath(xpath.c_str(), xpath.length());
59
+ CStringBlob strBlobResult;
60
+ hr_method_check(m_pCppCadesImpl->Sign(signer.m_pCppCadesImpl, strBlobXPath, strBlobResult));
61
+ return std::string(strBlobResult.GetString(), strBlobResult.GetLength());
62
+ }
63
+
64
+ void pre_rb_SignedXML::verify(std::string msg, std::string xpath)
65
+ {
66
+ CStringBlob strBlobMessage(msg.c_str(), msg.length());
67
+ CStringBlob strBlobXPath(xpath.c_str(), xpath.length());
68
+ hr_method_check(m_pCppCadesImpl->Verify(strBlobMessage, strBlobXPath));
69
+ }
70
+
71
+ void pre_rb_SignedXML::define_ruby_class(VALUE module)
72
+ {
73
+ Data_Type<pre_rb_SignedXML> rb_cSignedXML =
74
+ define_class_under<pre_rb_SignedXML>(module, "SignedXML")
75
+ .define_constructor(Constructor<pre_rb_SignedXML>())
76
+ .define_method("content", &pre_rb_SignedXML::get_content)
77
+ .define_method("content=", &pre_rb_SignedXML::set_content)
78
+ .define_method("signature_type=", &pre_rb_SignedXML::set_signature_type)
79
+ .define_method("digest_method=", &pre_rb_SignedXML::set_digest_method)
80
+ .define_method("signature_method=", &pre_rb_SignedXML::set_signature_method)
81
+ .define_method("signers", &pre_rb_SignedXML::get_signers)
82
+ .define_method("sign", &pre_rb_SignedXML::sign,
83
+ Arg("signer"), Arg("xpath") = std::string(""))
84
+ .define_method("verify", &pre_rb_SignedXML::verify,
85
+ Arg("msg"), Arg("xpath") = std::string(""));
86
+ }
87
+ }
@@ -0,0 +1,29 @@
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_signer.h"
9
+ #include "rucades_signers.h"
10
+ #include "CPPCadesSignedXML.h"
11
+
12
+ namespace rucades {
13
+ class pre_rb_SignedXML {
14
+ protected:
15
+ boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesSignedXMLObject> m_pCppCadesImpl;
16
+ public:
17
+ pre_rb_SignedXML(void);
18
+ std::string get_content(void);
19
+ void set_content(std::string content);
20
+ void set_signature_type(long type);
21
+ void set_digest_method(std::string method);
22
+ void set_signature_method(std::string method);
23
+ pre_rb_Signers get_signers(void);
24
+ std::string sign(pre_rb_Signer& signer, std::string xpath);
25
+ void verify(std::string msg, std::string xpath);
26
+
27
+ static void define_ruby_class(VALUE module);
28
+ };
29
+ }
@@ -0,0 +1,157 @@
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_signer.h"
10
+
11
+ using namespace Rice;
12
+ using namespace CryptoPro::PKI::CAdES;
13
+
14
+ namespace rucades {
15
+ pre_rb_Signer::pre_rb_Signer(void):
16
+ m_pCppCadesImpl(boost::shared_ptr<CPPCadesCPSignerObject>(new CPPCadesCPSignerObject())) { }
17
+
18
+ pre_rb_Signer::pre_rb_Signer(boost::shared_ptr<CPPCadesCPSignerObject> other):
19
+ m_pCppCadesImpl(other) { }
20
+
21
+ pre_rb_Certificate* pre_rb_Signer::get_certificate(void)
22
+ {
23
+ boost::shared_ptr<CPPCadesCPCertificateObject> pCert = boost::shared_ptr<CPPCadesCPCertificateObject>(new CPPCadesCPCertificateObject());
24
+ hr_method_check(m_pCppCadesImpl->get_Certificate(pCert));
25
+ return new pre_rb_Certificate(pCert);
26
+ }
27
+
28
+ void pre_rb_Signer::set_certificate(pre_rb_Certificate& cert)
29
+ {
30
+ CCertContext certContext;
31
+ hr_method_check(cert.m_pCppCadesImpl->get_CertContext(certContext));
32
+ boost::shared_ptr<CPPCadesCPCertificateObject> pCPPCadesCPCert(new CPPCadesCPCertificateObject());
33
+ pCPPCadesCPCert->put_CertContext(certContext);
34
+ hr_method_check(m_pCppCadesImpl->put_Certificate(pCPPCadesCPCert));
35
+ }
36
+
37
+ bool pre_rb_Signer::get_check_certificate(void)
38
+ {
39
+ BOOL bValue = 0;
40
+ hr_method_check(m_pCppCadesImpl->get_CheckCertificate(bValue));
41
+ return bValue != FALSE;
42
+ }
43
+
44
+ void pre_rb_Signer::set_check_certificate(bool value)
45
+ {
46
+ hr_method_check(m_pCppCadesImpl->put_CheckCertificate(value ? TRUE : FALSE));
47
+ }
48
+ long pre_rb_Signer::get_options(void)
49
+ {
50
+ CAPICOM_CERTIFICATE_INCLUDE_OPTION option;
51
+ hr_method_check(m_pCppCadesImpl->get_Options(&option));
52
+ return static_cast<long>(option);
53
+ }
54
+
55
+ void pre_rb_Signer::set_options(long opts)
56
+ {
57
+ hr_method_check(m_pCppCadesImpl->put_Options(static_cast<CAPICOM_CERTIFICATE_INCLUDE_OPTION>(opts)));
58
+ }
59
+
60
+ std::string pre_rb_Signer::get_tsa_address(void)
61
+ {
62
+ CAtlString sTSAAddress;
63
+ hr_method_check(m_pCppCadesImpl->get_TSAAddress(sTSAAddress));
64
+ return std::string(sTSAAddress.GetString());
65
+ }
66
+
67
+ void pre_rb_Signer::set_tsa_address(std::string addr)
68
+ {
69
+ hr_method_check(m_pCppCadesImpl->put_TSAAddress(CAtlString(addr.c_str())));
70
+ }
71
+
72
+ pre_rb_Attributes pre_rb_Signer::get_unauthenticated_attributes(void)
73
+ {
74
+ boost::shared_ptr<CPPCadesCPAttributesObject> pAttrs = boost::shared_ptr<CPPCadesCPAttributesObject>(new CPPCadesCPAttributesObject());
75
+ hr_method_check(m_pCppCadesImpl->get_UnauthenticatedAttributes(pAttrs));
76
+ return pre_rb_Attributes(pAttrs);
77
+ }
78
+
79
+ void pre_rb_Signer::set_unauthenticated_attributes(pre_rb_Attributes& attrb)
80
+ {
81
+ hr_method_check(m_pCppCadesImpl->put_UnauthenticatedAttributes(attrb.m_pCppCadesImpl));
82
+ }
83
+
84
+ pre_rb_Attributes pre_rb_Signer::get_authenticated_attributes(void)
85
+ {
86
+ boost::shared_ptr<CPPCadesCPAttributesObject> pAttrs = boost::shared_ptr<CPPCadesCPAttributesObject>(new CPPCadesCPAttributesObject());
87
+ hr_method_check(m_pCppCadesImpl->get_AuthenticatedAttributes(pAttrs));
88
+ return pre_rb_Attributes(pAttrs);
89
+ }
90
+
91
+ void pre_rb_Signer::set_authenticated_attributes(pre_rb_Attributes& attrb)
92
+ {
93
+ hr_method_check(m_pCppCadesImpl->put_AuthenticatedAttributes(attrb.m_pCppCadesImpl));
94
+ }
95
+
96
+ pre_rb_Blobs pre_rb_Signer::get_crls(void)
97
+ {
98
+ boost::shared_ptr<CPPCadesCPBlobsObject> pBlobs = boost::shared_ptr<CPPCadesCPBlobsObject>(new CPPCadesCPBlobsObject());
99
+ hr_method_check(m_pCppCadesImpl->get_CRLs(pBlobs));
100
+ return pre_rb_Blobs(pBlobs);
101
+ }
102
+
103
+ pre_rb_Blobs pre_rb_Signer::get_ocsp_responses(void)
104
+ {
105
+ boost::shared_ptr<CPPCadesCPBlobsObject> pBlobs = boost::shared_ptr<CPPCadesCPBlobsObject>(new CPPCadesCPBlobsObject());
106
+ hr_method_check(m_pCppCadesImpl->get_OCSPResponses(pBlobs));
107
+ return pre_rb_Blobs(pBlobs);
108
+ }
109
+
110
+ std::string pre_rb_Signer::get_signing_time(void)
111
+ {
112
+ CryptoPro::CDateTime Time;
113
+ CryptoPro::CStringProxy strProxySigningTime;
114
+ hr_method_check(m_pCppCadesImpl->get_SigningTime(Time));
115
+ strProxySigningTime = Time.tostring();
116
+ return std::string(strProxySigningTime.c_str());
117
+ }
118
+
119
+ std::string pre_rb_Signer::get_signature_time_stamp_time(void)
120
+ {
121
+ CryptoPro::CDateTime Time;
122
+ CryptoPro::CStringProxy strProxySigningTime;
123
+ hr_method_check(m_pCppCadesImpl->get_SignatureTimeStampTime(Time));
124
+ strProxySigningTime = Time.tostring();
125
+ return std::string(strProxySigningTime.c_str());
126
+ }
127
+
128
+ void pre_rb_Signer::set_key_pin(std::string pin)
129
+ {
130
+ CAtlStringA sKeyPin(CA2CA(CAtlStringA(pin.c_str()), CP_UTF8));
131
+ hr_method_check(m_pCppCadesImpl->put_KeyPin(sKeyPin));
132
+ }
133
+
134
+ void pre_rb_Signer::define_ruby_class(VALUE module)
135
+ {
136
+ Data_Type<pre_rb_Signer> rb_cSigner =
137
+ define_class_under<pre_rb_Signer>(module, "Signer")
138
+ .define_constructor(Constructor<pre_rb_Signer>())
139
+ .define_method("certificate", &pre_rb_Signer::get_certificate)
140
+ .define_method("certificate=", &pre_rb_Signer::set_certificate)
141
+ .define_method("check_certificate", &pre_rb_Signer::get_check_certificate)
142
+ .define_method("check_certificate=", &pre_rb_Signer::set_check_certificate)
143
+ .define_method("options", &pre_rb_Signer::get_options)
144
+ .define_method("options=", &pre_rb_Signer::set_options)
145
+ .define_method("tsa_address", &pre_rb_Signer::get_tsa_address)
146
+ .define_method("tsa_address=", &pre_rb_Signer::set_tsa_address)
147
+ .define_method("unauthenticated_attributes", &pre_rb_Signer::get_unauthenticated_attributes)
148
+ .define_method("unauthenticated_attributes=", &pre_rb_Signer::set_unauthenticated_attributes)
149
+ .define_method("authenticated_attributes", &pre_rb_Signer::get_authenticated_attributes)
150
+ .define_method("authenticated_attributes=", &pre_rb_Signer::set_authenticated_attributes)
151
+ .define_method("crls", &pre_rb_Signer::get_crls)
152
+ .define_method("ocsp_responses", &pre_rb_Signer::get_ocsp_responses)
153
+ .define_method("signing_time", &pre_rb_Signer::get_signing_time)
154
+ .define_method("signature_time_stamp_time", &pre_rb_Signer::get_signature_time_stamp_time)
155
+ .define_method("key_pin=", &pre_rb_Signer::set_key_pin);
156
+ }
157
+ }
@@ -0,0 +1,45 @@
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_attributes.h"
9
+ #include "rucades_blobs.h"
10
+ #include "rucades_certificates.h"
11
+ #include "CPPCadesCPSigner.h"
12
+
13
+ namespace rucades {
14
+ class pre_rb_Signer {
15
+ protected:
16
+ boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPSignerObject> m_pCppCadesImpl;
17
+ public:
18
+ pre_rb_Signer(void);
19
+ pre_rb_Signer(boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPSignerObject> other);
20
+
21
+ pre_rb_Certificate* get_certificate(void);
22
+ void set_certificate(pre_rb_Certificate& crt);
23
+ bool get_check_certificate(void);
24
+ void set_check_certificate(bool value);
25
+ long get_options(void);
26
+ void set_options(long opts);
27
+ std::string get_tsa_address(void);
28
+ void set_tsa_address(std::string addr);
29
+ pre_rb_Attributes get_unauthenticated_attributes(void);
30
+ void set_unauthenticated_attributes(pre_rb_Attributes& attrb);
31
+ pre_rb_Attributes get_authenticated_attributes(void);
32
+ void set_authenticated_attributes(pre_rb_Attributes& attrb);
33
+ pre_rb_Blobs get_crls(void);
34
+ pre_rb_Blobs get_ocsp_responses(void);
35
+ std::string get_signing_time(void);
36
+ std::string get_signature_time_stamp_time(void);
37
+ void set_key_pin(std::string pin);
38
+
39
+ static void define_ruby_class(VALUE module);
40
+
41
+ friend class pre_rb_SignedData;
42
+ friend class pre_rb_Signers;
43
+ friend class pre_rb_SignedXML;
44
+ };
45
+ }
@@ -0,0 +1,43 @@
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_signers.h"
10
+
11
+ using namespace Rice;
12
+ using namespace CryptoPro;
13
+ using namespace CryptoPro::PKI::CAdES;
14
+
15
+ namespace rucades {
16
+ pre_rb_Signers::pre_rb_Signers(void):
17
+ m_pCppCadesImpl(boost::shared_ptr<CPPCadesCPSignersObject>(new CPPCadesCPSignersObject())) { }
18
+
19
+ pre_rb_Signers::pre_rb_Signers(boost::shared_ptr<CPPCadesCPSignersObject> other):
20
+ m_pCppCadesImpl(other) { }
21
+
22
+ long pre_rb_Signers::get_count(void){
23
+ unsigned int count = 0;
24
+ hr_method_check(m_pCppCadesImpl->get_Count(&count));
25
+ return count;
26
+ }
27
+
28
+ pre_rb_Signer pre_rb_Signers::get_item(long index)
29
+ {
30
+ pre_rb_Signer attrb;
31
+ hr_method_check(m_pCppCadesImpl->get_Item(index, attrb.m_pCppCadesImpl));
32
+ return attrb;
33
+ }
34
+
35
+ void pre_rb_Signers::define_ruby_class(VALUE module)
36
+ {
37
+ Data_Type<pre_rb_Signers> rb_cSigners =
38
+ define_class_under<pre_rb_Signers>(module, "Signers")
39
+ .define_constructor(Constructor<pre_rb_Signers>())
40
+ .define_method("count", &pre_rb_Signers::get_count)
41
+ .define_method("[]", &pre_rb_Signers::get_item);
42
+ }
43
+ }
@@ -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_signers.h"
9
+ #include "rucades_signer.h"
10
+ #include "CPPCadesCollections.h"
11
+
12
+ namespace rucades {
13
+ class pre_rb_Signers {
14
+ protected:
15
+ boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPSignersObject> m_pCppCadesImpl;
16
+ public:
17
+ pre_rb_Signers(void);
18
+ pre_rb_Signers(boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPSignersObject> other);
19
+ void add(pre_rb_Signers& signer);
20
+ long get_count(void);
21
+ pre_rb_Signer get_item(long index);
22
+
23
+ static void define_ruby_class(VALUE module);
24
+
25
+ friend class pre_rb_SignedData;
26
+ };
27
+ }
@@ -0,0 +1,78 @@
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_store.h"
10
+
11
+ using namespace Rice;
12
+ using namespace CryptoPro::PKI::CAdES;
13
+
14
+ namespace rucades {
15
+ pre_rb_Store::pre_rb_Store(void):
16
+ m_pCppCadesImpl(boost::shared_ptr<CPPCadesCPStoreObject>(new CPPCadesCPStoreObject())) { }
17
+
18
+ std::string pre_rb_Store::get_name(void)
19
+ {
20
+ CAtlString sName;
21
+ hr_method_check(m_pCppCadesImpl->get_Name(sName));
22
+ return std::string(sName.GetString());
23
+ }
24
+
25
+ pre_rb_Certificates pre_rb_Store::get_certificates(void)
26
+ {
27
+ boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPCertificatesObject> pCertificates;
28
+ hr_method_check(m_pCppCadesImpl->get_Certificates(pCertificates));
29
+ return pre_rb_Certificates(pCertificates);
30
+ }
31
+
32
+ long pre_rb_Store::get_location(void)
33
+ {
34
+ CADESCOM_STORE_LOCATION Location;
35
+ hr_method_check(m_pCppCadesImpl->get_Location(&Location));
36
+ return static_cast<long>(Location);
37
+ }
38
+
39
+ void pre_rb_Store::open(long location, std::string& name, long mode)
40
+ {
41
+ CADESCOM_STORE_LOCATION Location = static_cast<CADESCOM_STORE_LOCATION>(location);
42
+ CAPICOM_STORE_OPEN_MODE Mode = static_cast<CAPICOM_STORE_OPEN_MODE>(mode);
43
+ CAtlStringW sName = CAtlStringW(name.c_str());
44
+ hr_method_check(m_pCppCadesImpl->Open(Location, sName, Mode));
45
+ }
46
+
47
+ void pre_rb_Store::close(void)
48
+ {
49
+ hr_method_check(m_pCppCadesImpl->Close());
50
+ }
51
+
52
+ void pre_rb_Store::add(pre_rb_Certificate& cert)
53
+ {
54
+ hr_method_check(m_pCppCadesImpl->Add(cert.m_pCppCadesImpl));
55
+ }
56
+
57
+ void pre_rb_Store::add_crl(pre_rb_CRL& crl)
58
+ {
59
+ hr_method_check(m_pCppCadesImpl->AddCRL(crl.m_pCppCadesImpl));
60
+ }
61
+
62
+ void pre_rb_Store::define_ruby_class(VALUE module)
63
+ {
64
+ Data_Type<pre_rb_Store> rb_cStore =
65
+ define_class_under<pre_rb_Store>(module, "Store")
66
+ .define_constructor(Constructor<pre_rb_Store>())
67
+ .define_method("name", &pre_rb_Store::get_name)
68
+ .define_method("certificates", &pre_rb_Store::get_certificates)
69
+ .define_method("location", &pre_rb_Store::get_location)
70
+ .define_method("open", &pre_rb_Store::open,
71
+ Arg("location") = static_cast<long>(CADESCOM_CURRENT_USER_STORE),
72
+ Arg("name") = std::string("My"),
73
+ Arg("mode") = static_cast<long>(CAPICOM_STORE_OPEN_READ_ONLY))
74
+ .define_method("close", &pre_rb_Store::close)
75
+ .define_method("add", &pre_rb_Store::add)
76
+ .define_method("add_crl", &pre_rb_Store::add_crl);
77
+ }
78
+ }
@@ -0,0 +1,34 @@
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 "rucades_certificates.h"
10
+ #include "rucades_crl.h"
11
+
12
+ #include "CPPCadesCPStore.h"
13
+
14
+ namespace rucades {
15
+ class pre_rb_Store {
16
+ protected:
17
+ boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesCPStoreObject> m_pCppCadesImpl;
18
+ public:
19
+ pre_rb_Store(void);
20
+
21
+ std::string get_name(void);
22
+ pre_rb_Certificates get_certificates(void);
23
+ long get_location(void);
24
+ void open(long location, std::string& name, long mode);
25
+ void close(void);
26
+ void add(pre_rb_Certificate& cert);
27
+ void add_crl(pre_rb_CRL& crl);
28
+
29
+ static void define_ruby_class(VALUE module);
30
+
31
+ friend class pre_rb_Certificate;
32
+ friend class pre_rb_SignedData;
33
+ };
34
+ }
@@ -0,0 +1,107 @@
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_symmetric_algorithm.h"
10
+
11
+ using namespace Rice;
12
+ using namespace CryptoPro;
13
+ using namespace CryptoPro::PKI::CAdES;
14
+
15
+ namespace rucades {
16
+ pre_rb_SymmetricAlgorithm::pre_rb_SymmetricAlgorithm(void):
17
+ m_pCppCadesImpl(boost::shared_ptr<CPPCadesSymmetricAlgorithmObject>(new CPPCadesSymmetricAlgorithmObject())) { }
18
+
19
+ pre_rb_SymmetricAlgorithm::pre_rb_SymmetricAlgorithm(boost::shared_ptr<CPPCadesSymmetricAlgorithmObject> other):
20
+ m_pCppCadesImpl(other) { }
21
+
22
+ std::string pre_rb_SymmetricAlgorithm::get_divers_data(void)
23
+ {
24
+ CBlob blobValue;
25
+ hr_method_check(m_pCppCadesImpl->get_DiversData(blobValue));
26
+ return std::string(reinterpret_cast<const char *>(blobValue.pbData()), blobValue.cbData());
27
+ }
28
+
29
+ void pre_rb_SymmetricAlgorithm::set_divers_data(std::string data)
30
+ {
31
+ hr_method_check(m_pCppCadesImpl->put_DiversData(data.c_str(), data.length()));
32
+ }
33
+ std::string pre_rb_SymmetricAlgorithm::get_iv(void)
34
+ {
35
+ CBlob blobValue;
36
+ hr_method_check(m_pCppCadesImpl->get_IV(blobValue));
37
+ return std::string(reinterpret_cast<const char *>(blobValue.pbData()), blobValue.cbData());
38
+ }
39
+ void pre_rb_SymmetricAlgorithm::set_iv(std::string iv)
40
+ {
41
+ hr_method_check(m_pCppCadesImpl->put_IV(iv.c_str(), iv.length()));
42
+ }
43
+
44
+ std::string pre_rb_SymmetricAlgorithm::encrypt(std::string data, bool final)
45
+ {
46
+ CAtlString sData = CAtlString(data.c_str());
47
+ CStringProxy retval;
48
+ hr_method_check(m_pCppCadesImpl->Encrypt(sData, sData.GetLength(), final ? TRUE : FALSE, retval));
49
+ return std::string(retval.c_str());
50
+ }
51
+
52
+ std::string pre_rb_SymmetricAlgorithm::decrypt(std::string data, bool final)
53
+ {
54
+ CAtlString sData = CAtlString(data.c_str());
55
+ CBlob blobValue;
56
+ hr_method_check(m_pCppCadesImpl->Decrypt(sData, sData.GetLength(), final ? TRUE : FALSE, blobValue));
57
+ return std::string(reinterpret_cast<const char *>(blobValue.pbData()), blobValue.cbData());
58
+ }
59
+
60
+ pre_rb_SymmetricAlgorithm pre_rb_SymmetricAlgorithm::diversify_key(void)
61
+ {
62
+ boost::shared_ptr<CPPCadesSymmetricAlgorithmObject> pCPPCadesSymAlg;
63
+ hr_method_check(m_pCppCadesImpl->DiversifyKey(pCPPCadesSymAlg));
64
+ return pre_rb_SymmetricAlgorithm(pCPPCadesSymAlg);
65
+ }
66
+
67
+ void pre_rb_SymmetricAlgorithm::generate_key(long alg)
68
+ {
69
+ CADESCOM_ENCRYPTION_ALGORITHM Algorithm = static_cast<CADESCOM_ENCRYPTION_ALGORITHM>(alg);
70
+ hr_method_check(m_pCppCadesImpl->GenerateKey(Algorithm));
71
+ }
72
+
73
+ std::string pre_rb_SymmetricAlgorithm::export_key(pre_rb_Certificate& cert)
74
+ {
75
+ CBlob blobValue;
76
+ hr_method_check(m_pCppCadesImpl->ExportKey(cert.m_pCppCadesImpl, blobValue));
77
+ return std::string(reinterpret_cast<const char *>(blobValue.pbData()), blobValue.cbData());
78
+ }
79
+
80
+ void pre_rb_SymmetricAlgorithm::import_key(std::string key, pre_rb_Certificate& cert, std::string password)
81
+ {
82
+ CAtlString sData = CAtlString(key.c_str());
83
+ CAtlString sPassword = CAtlString(password.c_str());
84
+ hr_method_check(m_pCppCadesImpl->ImportKey(key.c_str(),key.length(), cert.m_pCppCadesImpl, password.c_str(), password.length()));
85
+ }
86
+
87
+ void pre_rb_SymmetricAlgorithm::define_ruby_class(VALUE module)
88
+ {
89
+ Data_Type<pre_rb_SymmetricAlgorithm> rb_cSymmetricAlgorithm =
90
+ define_class_under<pre_rb_SymmetricAlgorithm>(module, "SymmetricAlgorithm")
91
+ .define_constructor(Constructor<pre_rb_SymmetricAlgorithm>())
92
+ .define_method("divers_data", &pre_rb_SymmetricAlgorithm::get_divers_data)
93
+ .define_method("divers_data=", &pre_rb_SymmetricAlgorithm::set_divers_data)
94
+ .define_method("iv", &pre_rb_SymmetricAlgorithm::get_iv)
95
+ .define_method("iv=", &pre_rb_SymmetricAlgorithm::set_iv)
96
+ .define_method("encrypt", &pre_rb_SymmetricAlgorithm::encrypt,
97
+ Arg("data"), Arg("final") = true)
98
+ .define_method("decrypt", &pre_rb_SymmetricAlgorithm::decrypt,
99
+ Arg("data"), Arg("final") = true)
100
+ .define_method("diversify_key", &pre_rb_SymmetricAlgorithm::diversify_key)
101
+ .define_method("generate_key", &pre_rb_SymmetricAlgorithm::generate_key,
102
+ Arg("alg") = static_cast<long>(CADESCOM_ENCRYPTION_ALGORITHM_GOST_28147_89))
103
+ .define_method("export_key", &pre_rb_SymmetricAlgorithm::export_key)
104
+ .define_method("import_key", &pre_rb_SymmetricAlgorithm::import_key,
105
+ Arg("key"), Arg("cert"), Arg("password") = std::string(""));
106
+ }
107
+ }
@@ -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_certificate.h"
9
+ #include "CPPCadesSymmetricAlgorithm.h"
10
+
11
+ namespace rucades {
12
+ class pre_rb_SymmetricAlgorithm {
13
+ protected:
14
+ boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesSymmetricAlgorithmObject> m_pCppCadesImpl;
15
+ public:
16
+ pre_rb_SymmetricAlgorithm(void);
17
+ pre_rb_SymmetricAlgorithm(boost::shared_ptr<CryptoPro::PKI::CAdES::CPPCadesSymmetricAlgorithmObject> other);
18
+ std::string get_divers_data(void);
19
+ void set_divers_data(std::string data);
20
+ std::string get_iv(void);
21
+ void set_iv(std::string iv);
22
+ std::string encrypt(std::string data, bool final);
23
+ std::string decrypt(std::string data, bool final);
24
+ pre_rb_SymmetricAlgorithm diversify_key(void);
25
+ void generate_key(long alg);
26
+ std::string export_key(pre_rb_Certificate& cert);
27
+ void import_key(std::string key, pre_rb_Certificate& cert, std::string password);
28
+ static void define_ruby_class(VALUE module);
29
+ };
30
+ }