@@ -9,6 +9,7 @@ require "resty.openssl.include.x509"
9
9
require " resty.openssl.include.x509v3"
10
10
require " resty.openssl.include.evp"
11
11
require " resty.openssl.include.objects"
12
+ local stack_macro = require (" resty.openssl.include.stack" )
12
13
local stack_lib = require (" resty.openssl.stack" )
13
14
local asn1_lib = require (" resty.openssl.asn1" )
14
15
local digest_lib = require (" resty.openssl.digest" )
@@ -166,15 +167,89 @@ function _M:get_lifetime()
166
167
return not_before , not_after , nil
167
168
end
168
169
170
+ -- note: index is 0 based
171
+ local OPENSSL_STRING_value_at = function (ctx , i )
172
+ local ct = ffi_cast (" OPENSSL_STRING" , stack_macro .OPENSSL_sk_value (ctx , i ))
173
+ if ct == nil then
174
+ return nil
175
+ end
176
+ return ffi_str (ct )
177
+ end
178
+
179
+ function _M :get_ocsp_url (return_all )
180
+ local st = C .X509_get1_ocsp (self .ctx )
181
+ local ret
182
+ if return_all then
183
+ ret = {}
184
+ local count = stack_macro .OPENSSL_sk_num (st )
185
+ for i = 0 ,count do
186
+ ret [i + 1 ] = OPENSSL_STRING_value_at (st , i )
187
+ end
188
+ else
189
+ ret = OPENSSL_STRING_value_at (st , 0 )
190
+ end
191
+
192
+ C .X509_email_free (st )
193
+ return ret
194
+ end
195
+
196
+ function _M :get_ocsp_request ()
197
+
198
+ end
199
+
200
+ function _M :get_crl_url (return_all )
201
+ local cdp , err = self :get_crl_distribution_points ()
202
+ if err then
203
+ return nil , err
204
+ end
205
+
206
+ if cdp :count () == 0 then
207
+ return
208
+ end
209
+
210
+ if return_all then
211
+ local ret = {}
212
+ local cdp_iter = cdp :each ()
213
+ while true do
214
+ local _ , gn = cdp_iter ()
215
+ if not gn then
216
+ break
217
+ end
218
+ local gn_iter = gn :each ()
219
+ while true do
220
+ local k , v = gn_iter ()
221
+ if not k then
222
+ break
223
+ elseif k == " URI" then
224
+ table.insert (ret , v )
225
+ end
226
+ end
227
+ end
228
+ return ret
229
+ else
230
+ local gn , err = cdp :index (1 )
231
+ if err then
232
+ return nil , err
233
+ end
234
+ local iter = gn :each ()
235
+ while true do
236
+ local k , v = iter ()
237
+ if not k then
238
+ break
239
+ elseif k == " URI" then
240
+ return v
241
+ end
242
+ end
243
+ end
244
+ end
245
+
169
246
function _M :sign (pkey , digest )
170
247
local pkey_lib = require (" resty.openssl.pkey" )
171
248
if not pkey_lib .istype (pkey ) then
172
249
return false , " expect a pkey instance at #1"
173
250
end
174
- if digest then
175
- if not digest_lib .istype (digest ) then
176
- return false , " expect a digest instance at #2"
177
- end
251
+ if digest and not digest_lib .istype (digest ) then
252
+ return false , " expect a digest instance at #2"
178
253
end
179
254
180
255
-- returns size of signature if success
301
376
error (" X509_delete_ext undefined" )
302
377
end
303
378
end
379
+
304
380
function _M :set_extension (extension , last_pos )
305
381
if not extension_lib .istype (extension ) then
306
382
return false , " expect a x509.extension instance at #1"
0 commit comments