Skip to content

Commit a402f05

Browse files
committed
fix(openssl) BREAKING: not load sub modules by default
1 parent 4b7700f commit a402f05

File tree

3 files changed

+42
-98
lines changed

3 files changed

+42
-98
lines changed

README.md

+9-14
Original file line numberDiff line numberDiff line change
@@ -272,12 +272,17 @@ consul its manual for differences between OpenSSL API.
272272

273273
## resty.openssl
274274

275-
This meta module provides a version sanity check against linked OpenSSL library
276-
and returns all exported modules to a table.
275+
This meta module provides a version sanity check against linked OpenSSL library.
276+
277+
[Back to TOC](#table-of-contents)
278+
279+
### openssl.load_modules
280+
281+
**syntax**: *openssl.load_modules()*
282+
283+
Load all available sub modules into current module:
277284

278285
```lua
279-
return {
280-
_VERSION = 'x.y.z',
281286
bn = require("resty.openssl.bn"),
282287
cipher = require("resty.openssl.cipher"),
283288
digest = require("resty.openssl.digest"),
@@ -298,7 +303,6 @@ return {
298303
store = require("resty.openssl.x509.store"),
299304
ssl = require("resty.openssl.ssl"),
300305
ssl_ctx = require("resty.openssl.ssl_ctx"),
301-
}
302306
```
303307

304308
Starting OpenSSL 3.0, [`provider`](#restyopensslprovider) is also available.
@@ -317,15 +321,6 @@ Note that not all `luaossl` API has been implemented, please check readme for so
317321

318322
[Back to TOC](#table-of-contents)
319323

320-
### openssl.resty_hmac_compat
321-
322-
**syntax**: *openssl.resty_hmac_compat()*
323-
324-
Call this function before `require("resty.hmac")` to allow these two libraries play nice with
325-
each other. This function is not available with OpenSSL 1.0.
326-
327-
[Back to TOC](#table-of-contents)
328-
329324
### openssl.get_fips_mode
330325

331326
**syntax**: *enabled = openssl.get_fips_mode()*

lib/resty/openssl.lua

+32-56
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,46 @@
11
local OPENSSL_30 = require("resty.openssl.version").OPENSSL_30
2+
local err = require("resty.openssl.err")
23
local C = require("ffi").C
34

45

56
local _M = {
67
_VERSION = '0.6.11',
7-
bn = require("resty.openssl.bn"),
8-
cipher = require("resty.openssl.cipher"),
9-
digest = require("resty.openssl.digest"),
10-
hmac = require("resty.openssl.hmac"),
11-
kdf = require("resty.openssl.kdf"),
12-
pkey = require("resty.openssl.pkey"),
13-
objects = require("resty.openssl.objects"),
14-
rand = require("resty.openssl.rand"),
15-
version = require("resty.openssl.version"),
16-
x509 = require("resty.openssl.x509"),
17-
altname = require("resty.openssl.x509.altname"),
18-
chain = require("resty.openssl.x509.chain"),
19-
csr = require("resty.openssl.x509.csr"),
20-
crl = require("resty.openssl.x509.crl"),
21-
extension = require("resty.openssl.x509.extension"),
22-
extensions = require("resty.openssl.x509.extensions"),
23-
name = require("resty.openssl.x509.name"),
24-
revoked = require("resty.openssl.x509.revoked"),
25-
store = require("resty.openssl.x509.store"),
26-
pkcs12 = require("resty.openssl.pkcs12"),
278
}
289

29-
if OPENSSL_30 then
30-
_M.provider = require("resty.openssl.provider")
31-
end
10+
function _M.load_modules()
11+
_M.bn = require("resty.openssl.bn")
12+
_M.cipher = require("resty.openssl.cipher")
13+
_M.digest = require("resty.openssl.digest")
14+
_M.hmac = require("resty.openssl.hmac")
15+
_M.kdf = require("resty.openssl.kdf")
16+
_M.pkey = require("resty.openssl.pkey")
17+
_M.objects = require("resty.openssl.objects")
18+
_M.rand = require("resty.openssl.rand")
19+
_M.version = require("resty.openssl.version")
20+
_M.x509 = require("resty.openssl.x509")
21+
_M.altname = require("resty.openssl.x509.altname")
22+
_M.chain = require("resty.openssl.x509.chain")
23+
_M.csr = require("resty.openssl.x509.csr")
24+
_M.crl = require("resty.openssl.x509.crl")
25+
_M.extension = require("resty.openssl.x509.extension")
26+
_M.extensions = require("resty.openssl.x509.extensions")
27+
_M.name = require("resty.openssl.x509.name")
28+
_M.revoked = require("resty.openssl.x509.revoked")
29+
_M.store = require("resty.openssl.x509.store")
30+
_M.pkcs12 = require("resty.openssl.pkcs12")
31+
_M.ssl = require("resty.openssl.ssl")
32+
_M.ssl_ctx = require("resty.openssl.ssl_ctx")
33+
34+
if OPENSSL_30 then
35+
_M.provider = require("resty.openssl.provider")
36+
end
3237

33-
_M.bignum = _M.bn
38+
_M.bignum = _M.bn
39+
end
3440

3541
function _M.luaossl_compat()
42+
_M.load_modules()
43+
3644
_M.csr.setSubject = _M.csr.set_subject_name
3745
_M.csr.setPublicKey = _M.csr.set_pubkey
3846

@@ -181,38 +189,6 @@ function _M.luaossl_compat()
181189
end
182190
end
183191

184-
-- we made a typo sometime, this is going to be removed in next major release
185-
_M.luaossl_compact = _M.luaossl_compat
186-
187-
local resty_hmac_compat_patched = false
188-
function _M.resty_hmac_compat()
189-
if resty_hmac_compat_patched then
190-
return
191-
end
192-
if _M.version.OPENSSL_10 then
193-
error("use resty_hmac_compat in OpenSSL 1.0 is not supported")
194-
end
195-
196-
require("resty.openssl.include.evp")
197-
require("ffi").cdef [[
198-
// originally named evp_cipher_ctx_st in evp.lua
199-
struct evp_md_ctx_st {
200-
const EVP_MD *digest;
201-
ENGINE *engine; /* functional reference if 'digest' is
202-
* ENGINE-provided */
203-
unsigned long flags;
204-
void *md_data;
205-
/* Public key context for sign/verify */
206-
EVP_PKEY_CTX *pctx;
207-
/* Update function: usually copied from EVP_MD */
208-
int (*update) (EVP_MD_CTX *ctx, const void *data, size_t count);
209-
}/* EVP_MD_CTX */ ;
210-
]]
211-
resty_hmac_compat_patched = true
212-
end
213-
214-
local err = require("resty.openssl.err")
215-
216192
function _M.set_fips_mode(enable)
217193
if not not enable == _M.get_fips_mode() then
218194
return true

t/openssl.t

+1-28
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ __DATA__
2727
location =/t {
2828
content_by_lua_block {
2929
local openssl = require("resty.openssl")
30+
openssl.load_modules()
3031
ngx.say(string.format("%x", openssl.version.version_num))
3132
}
3233
}
@@ -58,31 +59,3 @@ false
5859
.+pkey.new.+
5960
--- no_error_log
6061
[error]
61-
62-
=== TEST 3: lua-resty-hmac compat
63-
--- http_config eval: $::HttpConfig
64-
--- config
65-
location =/t {
66-
content_by_lua_block {
67-
local openssl = require("resty.openssl")
68-
require("resty.openssl.hmac")
69-
local pok, perr = pcall(require, "resty.hmac")
70-
ngx.say(pok)
71-
ngx.say(perr)
72-
openssl.resty_hmac_compat()
73-
local pok, mod = pcall(require, "resty.hmac")
74-
ngx.say(pok)
75-
ngx.say(mod ~= nil)
76-
}
77-
}
78-
--- request
79-
GET /t
80-
--- skip_openssl
81-
2: < 1.1.0
82-
--- response_body_like
83-
false
84-
.+size of C type is unknown or too large.+
85-
true
86-
true
87-
--- no_error_log
88-
[error]

0 commit comments

Comments
 (0)