win32-certstore 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7498d33d838e240261d6629228c9e5f4135cbc8cfef53dd6eb2c25fd15cfa04f
4
- data.tar.gz: 7ebbfe860ed3109d18bf6cedb18040fec935a82985348317a9513e6803b80f1e
3
+ metadata.gz: a68ca02b433defcda38f35fed8359b02060cb49b6935ae6da348863ed471bd86
4
+ data.tar.gz: 3c8ea23c6116c27a414d87fcf49081c787b9d9f9fb8a0395f05daeada10240ed
5
5
  SHA512:
6
- metadata.gz: 6bcf63bbce574b4c92224c1228b7abd68a9e15bd527ffaafd3750f14bb106a499d03eabef6fd134ee603fa790230c12161f0a64ed7e6a072a3f4135da1cfe8db
7
- data.tar.gz: e58963b69cc9e20d7b31316e2a1cc2b00484489ea85a8796115555bc2dd40875f55a2327bcddd067c8c8e985096228b2835f3709233aa04a23174027dc8015e7
6
+ metadata.gz: 88a61f620f9a9e14d58f535248d36e87ed7ca6ba5c8eb787fc937e4090fbb52142cf9ce683c98e25d7008cd90e9c54a5b1af87d9500b8459f34d438629c95856
7
+ data.tar.gz: 9a55a43bf1330cface6dc59440aa477c062a37b132c7303404be4036fc0871d76765cbd6f683edf1fe4fc22ff0250309d4268a8ef5ed39e81eac1ebf8ed9282c
@@ -60,11 +60,12 @@ module Win32
60
60
  #
61
61
  # @param path [String] Path of the certificate that should be imported
62
62
  # @param password [String] Password of the certificate if it is protected
63
+ # @param key_properties [Integer] dwFlags used to specify properties of the pfx key, see certstore/store_base.rb cert_add_pfx function
63
64
  #
64
65
  # @return [Boolean]
65
66
  #
66
- def add_pfx(path, password)
67
- cert_add_pfx(certstore_handler, path, password)
67
+ def add_pfx(path, password, key_properties = 0)
68
+ cert_add_pfx(certstore_handler, path, password, key_properties)
68
69
  end
69
70
 
70
71
  # Return `OpenSSL::X509` certificate object
@@ -113,17 +113,17 @@ module Win32
113
113
 
114
114
  class FILETIME < FFI::Struct
115
115
  layout :dwLowDateTime, DWORD,
116
- :dwHighDateTime, DWORD
116
+ :dwHighDateTime, DWORD
117
117
  end
118
118
 
119
119
  class CRYPT_INTEGER_BLOB < FFI::Struct
120
120
  layout :cbData, DWORD, # Count, in bytes, of data
121
- :pbData, :pointer # Pointer to data buffer
121
+ :pbData, :pointer # Pointer to data buffer
122
122
  end
123
123
 
124
124
  class CRYPT_NAME_BLOB < FFI::Struct
125
125
  layout :cbData, DWORD, # Count, in bytes, of data
126
- :pbData, :pointer # Pointer to data buffer
126
+ :pbData, :pointer # Pointer to data buffer
127
127
  def initialize(str = nil)
128
128
  super(nil)
129
129
  if str
@@ -134,7 +134,7 @@ module Win32
134
134
 
135
135
  class CRYPT_HASH_BLOB < FFI::Struct
136
136
  layout :cbData, DWORD, # Count, in bytes, of data
137
- :pbData, :pointer # Pointer to data buffer
137
+ :pbData, :pointer # Pointer to data buffer
138
138
 
139
139
  def initialize(str = nil)
140
140
  super(nil)
@@ -151,7 +151,7 @@ module Win32
151
151
 
152
152
  class CRYPT_DATA_BLOB < FFI::Struct
153
153
  layout :cbData, DWORD, # Count, in bytes, of data
154
- :pbData, :pointer # Pointer to data buffer
154
+ :pbData, :pointer # Pointer to data buffer
155
155
 
156
156
  def initialize(str = nil)
157
157
  super(nil)
@@ -164,47 +164,47 @@ module Win32
164
164
 
165
165
  class CERT_EXTENSION < FFI::Struct
166
166
  layout :pszObjId, LPTSTR,
167
- :fCritical, BOOL,
168
- :Value, CRYPT_INTEGER_BLOB
167
+ :fCritical, BOOL,
168
+ :Value, CRYPT_INTEGER_BLOB
169
169
  end
170
170
 
171
171
  class CRYPT_BIT_BLOB < FFI::Struct
172
172
  layout :cbData, DWORD,
173
- :pbData, BYTE,
174
- :cUnusedBits, DWORD
173
+ :pbData, BYTE,
174
+ :cUnusedBits, DWORD
175
175
  end
176
176
 
177
177
  class CRYPT_ALGORITHM_IDENTIFIER < FFI::Struct
178
178
  layout :pszObjId, LPSTR,
179
- :Parameters, CRYPT_INTEGER_BLOB
179
+ :Parameters, CRYPT_INTEGER_BLOB
180
180
  end
181
181
 
182
182
  class CERT_PUBLIC_KEY_INFO < FFI::Struct
183
183
  layout :Algorithm, CRYPT_ALGORITHM_IDENTIFIER,
184
- :PublicKey, CRYPT_BIT_BLOB
184
+ :PublicKey, CRYPT_BIT_BLOB
185
185
  end
186
186
 
187
187
  class CERT_INFO < FFI::Struct
188
188
  layout :dwVersion, DWORD,
189
- :SerialNumber, CRYPT_INTEGER_BLOB,
190
- :SignatureAlgorithm, CRYPT_ALGORITHM_IDENTIFIER,
191
- :Issuer, CRYPT_NAME_BLOB,
192
- :NotBefore, FILETIME,
193
- :NotAfter, FILETIME,
194
- :Subject, CRYPT_NAME_BLOB,
195
- :SubjectPublicKeyInfo, CERT_PUBLIC_KEY_INFO,
196
- :IssuerUniqueId, CRYPT_BIT_BLOB,
197
- :SubjectUniqueId, CRYPT_BIT_BLOB,
198
- :cExtension, DWORD,
199
- :rgExtension, CERT_EXTENSION
189
+ :SerialNumber, CRYPT_INTEGER_BLOB,
190
+ :SignatureAlgorithm, CRYPT_ALGORITHM_IDENTIFIER,
191
+ :Issuer, CRYPT_NAME_BLOB,
192
+ :NotBefore, FILETIME,
193
+ :NotAfter, FILETIME,
194
+ :Subject, CRYPT_NAME_BLOB,
195
+ :SubjectPublicKeyInfo, CERT_PUBLIC_KEY_INFO,
196
+ :IssuerUniqueId, CRYPT_BIT_BLOB,
197
+ :SubjectUniqueId, CRYPT_BIT_BLOB,
198
+ :cExtension, DWORD,
199
+ :rgExtension, CERT_EXTENSION
200
200
  end
201
201
 
202
202
  class CERT_CONTEXT < FFI::Struct
203
203
  layout :dwCertEncodingType, DWORD,
204
- :pbCertEncoded, BYTE,
205
- :cbCertEncoded, DWORD,
206
- :pCertInfo, CERT_INFO,
207
- :hCertStore, HCERTSTORE
204
+ :pbCertEncoded, BYTE,
205
+ :cbCertEncoded, DWORD,
206
+ :pCertInfo, CERT_INFO,
207
+ :hCertStore, HCERTSTORE
208
208
  end
209
209
 
210
210
  ###############################################################################
@@ -28,6 +28,7 @@ module Win32
28
28
  if cmd.error!
29
29
  raise Mixlib::ShellOut::ShellCommandFailed, cmd.error!
30
30
  end
31
+
31
32
  cmd
32
33
  end
33
34
 
@@ -96,7 +97,7 @@ module Win32
96
97
  "-InputFormat None",
97
98
  ]
98
99
 
99
- "powershell.exe #{flags.join(' ')} -Command \"#{script.gsub('"', '\"')}\""
100
+ "powershell.exe #{flags.join(" ")} -Command \"#{script.gsub('"', '\"')}\""
100
101
  end
101
102
  end
102
103
  end
@@ -57,16 +57,18 @@ module Win32
57
57
  # @param certstore_handler [FFI::Pointer] Handle of the store where certificate should be imported
58
58
  # @param path [String] Path of the certificate that should be imported
59
59
  # @param password [String] Password of the certificate
60
+ # @param key_properties [Integer] dwFlags used to specify properties of the pfx key, see link above
60
61
  #
61
62
  # @return [Boolean]
62
63
  #
63
64
  # @raise [SystemCallError] when Crypt API would not be able to perform some action
64
65
  #
65
- def cert_add_pfx(certstore_handler, path, password = "")
66
+ def cert_add_pfx(certstore_handler, path, password = "", key_properties = 0)
66
67
  cert_added = false
67
68
  # Imports a PFX BLOB and returns the handle of a store
68
- pfx_cert_store = PFXImportCertStore(CRYPT_DATA_BLOB.new(File.binread(path)), wstring(password), 0)
69
+ pfx_cert_store = PFXImportCertStore(CRYPT_DATA_BLOB.new(File.binread(path)), wstring(password), key_properties)
69
70
  raise if pfx_cert_store.null?
71
+
70
72
  # Find all the certificate contexts in certificate store and add them ino the store
71
73
  while (cert_context = CertEnumCertificatesInStore(pfx_cert_store, cert_context)) && (not cert_context.null?)
72
74
  # Add certificate context to the certificate store
@@ -123,7 +125,7 @@ module Win32
123
125
  begin
124
126
  cert_args = cert_find_args(store_handler, thumbprint)
125
127
  pcert_context = CertFindCertificateInStore(*cert_args)
126
- if !pcert_context.null?
128
+ unless pcert_context.null?
127
129
  cert_delete_flag = CertDeleteCertificateFromStore(CertDuplicateCertificateContext(pcert_context)) || lookup_error
128
130
  end
129
131
  CertFreeCertificateContext(pcert_context)
@@ -149,6 +151,7 @@ module Win32
149
151
  # search_token => CN, RDN or any certificate attribute
150
152
  def cert_search(store_handler, search_token)
151
153
  raise ArgumentError, "Invalid search token" if !search_token || search_token.strip.empty?
154
+
152
155
  certificate_list = []
153
156
  begin
154
157
  while (pcert_context = CertEnumCertificatesInStore(store_handler, pcert_context)) && !pcert_context.null?
@@ -217,6 +220,7 @@ module Win32
217
220
  # Verify OpenSSL::X509::Certificate object
218
221
  def verify_certificate(cert_pem)
219
222
  return "Certificate not found" if cert_pem.empty?
223
+
220
224
  valid_duration?(build_openssl_obj(cert_pem))
221
225
  end
222
226
 
@@ -1,6 +1,6 @@
1
1
  module Win32
2
2
  class Certstore
3
- VERSION = "0.3.0".freeze
3
+ VERSION = "0.4.0".freeze
4
4
  MAJOR, MINOR, TINY = VERSION.split(".")
5
5
  end
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: win32-certstore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chef Software
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-11 00:00:00.000000000 Z
11
+ date: 2020-01-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -104,8 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
104
  - !ruby/object:Gem::Version
105
105
  version: '0'
106
106
  requirements: []
107
- rubyforge_project:
108
- rubygems_version: 2.7.6
107
+ rubygems_version: 3.0.3
109
108
  signing_key:
110
109
  specification_version: 4
111
110
  summary: Ruby library for accessing the certificate store on Windows.