rucades 0.5.0 → 0.5.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fe67a02333856cf1dd3fb169ed461be30bb6e0ae8c8f9d3915eb65845f82dcb0
4
- data.tar.gz: 15bb72f3f89f1cf77dca8381370ce000508122731bd23a2d939dec8718813c50
3
+ metadata.gz: 78885499efd9059d72b6f7be46cafde405cf9df17b8e55a42569002d13bd0841
4
+ data.tar.gz: 274f02eb3577cdd57fa66a6e31c8a67c63a2a9b987168c68108597e122a9e5db
5
5
  SHA512:
6
- metadata.gz: 612a56b778690a019ffc2c9705c8c09da933c0f311def840e10a067562144aa3223895351115dd0d8b94773328f0b4e4d8cf689f3a89d6ff5b9bb4fc7d36d755
7
- data.tar.gz: 684be66e4bc8eae875a916823e42646ca772b0badf2d671a27fc1454ca19ad7437f1dee5c86ea4f4fe6dd545b5c876df7dfd753cc8e7a6a17a5b15c554595ef4
6
+ metadata.gz: '090c918b8d9e0ade0bca78478144892972f3117a6be2d292f6796c90fa74a5c687fa8a58eef80e23c04e7056f48671ecc24c0ffa53e9e003ab66ca3c3bcc9ef6'
7
+ data.tar.gz: d6cea5dd80fb6c83dd61685d6453785e912dd527f955c11909215040a2a79af4bd05898179c1cd97c8fdda43c2fdfdf3b30a6a7eb2ef5c40ce31bb31f25bcc9a
@@ -42,16 +42,19 @@ std::string pre_rb_Attribute::get_value(void)
42
42
  }
43
43
  else
44
44
  {
45
- FILETIME fTime;
45
+ FILETIME fTime = {0};
46
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());
47
+ if (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
+ {
53
+ CryptoPro::CDateTime Time(fTime);
54
+ CryptoPro::CStringProxy strProxyTime = Time.tostring();
55
+ return std::string(strProxyTime.c_str());
56
+ }
57
+ throw std::runtime_error("Failed to decode signing time attribute");
55
58
  }
56
59
  return reinterpret_cast<TCHAR *>(vbValue.data());
57
60
  }
@@ -5,5 +5,5 @@
5
5
  # This file is a part of rucades
6
6
 
7
7
  module Rucades
8
- VERSION = "0.5.0"
8
+ VERSION = "0.5.2"
9
9
  end
data/lib/rucades.rb CHANGED
@@ -12,13 +12,15 @@ require_relative "rucades/rucades"
12
12
  module Rucades
13
13
  # Polyfill for Certificates.find
14
14
  class Certificates
15
- def find(type, *args)
16
- return find_no_query(type) if args.empty?
15
+ def find(type, key = nil, valid_only = false) # rubocop:disable Style/OptionalBooleanParameter
16
+ return find_no_query(type) if key.nil?
17
17
 
18
- valid_only = (args.length == 1 ? 0 : -1)
19
- return internal_find_query_string(type, args[1], valid_only) if args[1].is_a?(String)
18
+ # CAPICOM's bFindValidOnly is a boolean (default false). Coerce to a real boolean so
19
+ # nil/0/false all mean "false" — Rice maps any other Ruby value (incl. Integer 0) to true.
20
+ valid_only = ![nil, false, 0].include?(valid_only)
21
+ return internal_find_query_string(type, key, valid_only) if key.is_a?(String)
20
22
 
21
- internal_find_query_long(type, args[1], valid_only)
23
+ internal_find_query_long(type, key, valid_only)
22
24
  end
23
25
 
24
26
  private
@@ -30,7 +32,7 @@ module Rucades
30
32
  raise ArgumentError, "Missing query"
31
33
  end
32
34
 
33
- internal_find_query_string(type, "", 0)
35
+ internal_find_query_string(type, "", false)
34
36
  end
35
37
  end
36
38
  end
data/sig/rucades.rbs CHANGED
@@ -265,7 +265,7 @@ module Rucades
265
265
  def name=: (Integer) -> Integer
266
266
 
267
267
  # Возвращает закодированное значение атрибута.
268
- def value: (?Integer encoding) -> String
268
+ def value: () -> String
269
269
  def value=: (String) -> String
270
270
 
271
271
  # Способ кодирования значения атрибута.
@@ -514,7 +514,7 @@ module Rucades
514
514
 
515
515
  # CAdESCOM.Certificates
516
516
  # Описывает коллекцию сертификатов.
517
- # Реализованы методы find, [], count.
517
+ # Реализованы методы find, [], count, any?.
518
518
  class Certificates
519
519
  # Возвращает количество объектов в коллекции сертификатов.
520
520
  def count: () -> Integer
@@ -522,11 +522,14 @@ module Rucades
522
522
  # Возвращает сертификат с заданным индексом из коллекции.
523
523
  def []: (Integer index) -> Certificate
524
524
 
525
+ # Есть ли в коллекции хотя бы один сертификат.
526
+ def any?: () -> bool
527
+
525
528
  # Возвращает коллекцию сертификатов, удовлетворяющих заданному критерию.
526
529
  # find_type — CAPICOM_CERTIFICATE_FIND_TYPE
527
530
  # criteria — данные для поиска; время передаётся в виде "YYYYMMDDhhmmss.ddddddZ"
528
531
  # valid_only — возвращать только валидные сертификаты
529
- def find: (Integer find_type, ?Integer | String criteria, ?Integer valid_only) -> Certificates
532
+ def find: (Integer find_type, ?(Integer | String) criteria, ?(bool | Integer) valid_only) -> Certificates
530
533
  end
531
534
 
532
535
  # CAdESCOM.CertificateStatus
@@ -647,16 +650,16 @@ module Rucades
647
650
 
648
651
  # Добавить подпись (соподписание) в существующее сообщение.
649
652
  def cosign: (?Signer signer, ?Integer cades_type) -> String
650
- def cosign_cades: (?Signer signer, ?Integer cades_type, ?bool detached) -> String
651
- def cosign_hash: (HashedData hashed_data, ?Signer signer, ?Integer cades_type) -> String
653
+ def cosign_cades: (?Signer signer, ?Integer cades_type, ?Integer encoding_type) -> String
654
+ def cosign_hash: (HashedData hashed_data, ?Signer signer, ?Integer cades_type, ?Integer encoding_type) -> String
652
655
 
653
656
  # Улучшить подпись CAdES-BES до CAdES-T или CAdES-X Long Type 1.
654
- def enhance_cades: (String signed_message, String tsa_address, ?Integer cades_type) -> String
657
+ def enhance_cades: (?Integer cades_type, ?String tsa_address, ?Integer encoding_type) -> String
655
658
 
656
659
  # Подписать данные.
657
660
  def sign: (?Signer signer, ?bool detached, ?Integer encoding_type) -> String
658
661
  def sign_cades: (?Signer signer, ?Integer cades_type, ?bool detached, ?Integer encoding_type) -> String
659
- def sign_hash: (HashedData hashed_data, ?Signer signer, ?Integer cades_type) -> String
662
+ def sign_hash: (HashedData hashed_data, ?Signer signer, ?Integer cades_type, ?Integer encoding_type) -> String
660
663
 
661
664
  # Проверить подпись.
662
665
  def verify: (String signed_message, ?bool detached, ?Integer verify_flag) -> void
@@ -684,10 +687,10 @@ module Rucades
684
687
  def signers: () -> Signers
685
688
 
686
689
  # Подписать XML.
687
- def sign: (?Signer signer) -> String
690
+ def sign: (Signer signer, ?String xpath) -> String
688
691
 
689
692
  # Проверить XML-подпись.
690
- def verify: (String signed_xml) -> void
693
+ def verify: (String signed_xml, ?String xpath) -> void
691
694
 
692
695
  # NOT IMPLEMENTED in C++ (write-only properties):
693
696
  # def digest_method: () -> String
@@ -727,7 +730,7 @@ module Rucades
727
730
  def sign_hash: (HashedData hashed_data, Certificate certificate) -> String
728
731
 
729
732
  # Проверить подпись хэша.
730
- def verify_hash: (HashedData hashed_data, String signature, Certificate certificate) -> void
733
+ def verify_hash: (HashedData hashed_data, Certificate certificate, String signature) -> void
731
734
  end
732
735
 
733
736
  class EnvelopedData
@@ -753,8 +756,8 @@ module Rucades
753
756
  # Зашифровать данные.
754
757
  def encrypt: (?Integer encoding_type) -> String
755
758
 
756
- def stream_decrypt: (String encoded_message) -> void
757
- def stream_encrypt: (?Integer encoding_type) -> String
759
+ def stream_decrypt: (String content, ?Integer final) -> String
760
+ def stream_encrypt: (String content, ?Integer final) -> String
758
761
  end
759
762
 
760
763
  # Коллекция получателей зашифрованного сообщения.
@@ -809,7 +812,7 @@ module Rucades
809
812
  # location — CADESCOM_STORE_LOCATION или CAPICOM_STORE_LOCATION
810
813
  # name — имя хранилища (CAPICOM_MY_STORE и т.д.)
811
814
  # mode — режим открытия (CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED и т.д.)
812
- def open: (Integer location, String | Integer name, Integer mode) -> void
815
+ def open: (Integer location, String name, Integer mode) -> void
813
816
  end
814
817
 
815
818
  class SymmetricAlgorithm
@@ -827,19 +830,19 @@ module Rucades
827
830
  def decrypt: (String encoded_message, ?bool final) -> String
828
831
 
829
832
  # Диверсифицировать ключ.
830
- def diversify_key: (String divers_data) -> void
833
+ def diversify_key: () -> SymmetricAlgorithm
831
834
 
832
835
  # Зашифровать данные.
833
836
  def encrypt: (String data, ?bool final) -> String
834
837
 
835
838
  # Экспортировать ключ.
836
- def export_key: (?Integer encoding_type) -> String
839
+ def export_key: (Certificate certificate) -> String
837
840
 
838
841
  # Сгенерировать ключ.
839
- def generate_key: (Integer algorithm_oid, Integer key_length, ?Integer export_flags) -> void
842
+ def generate_key: (?Integer algorithm_oid) -> void
840
843
 
841
844
  # Импортировать ключ.
842
- def import_key: (String encoded_key, ?String password) -> void
845
+ def import_key: (String encoded_key, Certificate certificate, ?String password) -> void
843
846
 
844
847
  # NOT IMPLEMENTED in C++:
845
848
  # def legacy_plugin_symmetric_export: () -> bool
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rucades
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maxim [maxirmx] Samsonov