mirror of
https://github.com/brunoos/luasec.git
synced 2024-12-27 12:58:21 +01:00
Adding 'curveslist' parameter
LuaSec will try to set 'curveslist' parameter first. If the parameter is not present or not supported, LuaSec will try 'curve' parameter.
This commit is contained in:
parent
db42a5084a
commit
fe1fb0b350
@ -546,17 +546,10 @@ static int set_dhparam(lua_State *L)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !defined(OPENSSL_NO_EC)
|
||||||
/**
|
/**
|
||||||
* Set elliptic curve.
|
* Set elliptic curve.
|
||||||
*/
|
*/
|
||||||
#ifdef OPENSSL_NO_EC
|
|
||||||
static int set_curve(lua_State *L)
|
|
||||||
{
|
|
||||||
lua_pushboolean(L, 0);
|
|
||||||
lua_pushstring(L, "OpenSSL does not support EC");
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
static int set_curve(lua_State *L)
|
static int set_curve(lua_State *L)
|
||||||
{
|
{
|
||||||
long ret;
|
long ret;
|
||||||
@ -565,26 +558,11 @@ static int set_curve(lua_State *L)
|
|||||||
|
|
||||||
SSL_CTX_set_options(ctx, SSL_OP_SINGLE_ECDH_USE);
|
SSL_CTX_set_options(ctx, SSL_OP_SINGLE_ECDH_USE);
|
||||||
|
|
||||||
#if defined(SSL_CTRL_SET_ECDH_AUTO) || defined(SSL_CTRL_SET_CURVES_LIST) || defined(SSL_CTX_set1_curves_list)
|
|
||||||
if (SSL_CTX_set1_curves_list(ctx, str) != 1) {
|
|
||||||
lua_pushboolean(L, 0);
|
|
||||||
lua_pushfstring(L, "unknown elliptic curve in \"%s\"", str);
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef SSL_CTRL_SET_ECDH_AUTO
|
|
||||||
SSL_CTX_set_ecdh_auto(ctx, 1);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
lua_pushboolean(L, 1);
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
#else /* !defined(SSL_CTRL_SET_CURVES_LIST) */
|
|
||||||
EC_KEY *key = lsec_find_ec_key(L, str);
|
EC_KEY *key = lsec_find_ec_key(L, str);
|
||||||
|
|
||||||
if (!key) {
|
if (!key) {
|
||||||
lua_pushboolean(L, 0);
|
lua_pushboolean(L, 0);
|
||||||
lua_pushfstring(L, "elliptic curve %s not supported", str);
|
lua_pushfstring(L, "elliptic curve '%s' not supported", str);
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -598,9 +576,35 @@ static int set_curve(lua_State *L)
|
|||||||
ERR_reason_error_string(ERR_get_error()));
|
ERR_reason_error_string(ERR_get_error()));
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lua_pushboolean(L, 1);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(OPENSSL_NO_EC) && (defined(SSL_CTRL_SET_CURVES_LIST) || defined(SSL_CTX_set1_curves_list) || defined(SSL_CTRL_SET_ECDH_AUTO))
|
||||||
|
/**
|
||||||
|
* Set elliptic curves list.
|
||||||
|
*/
|
||||||
|
static int set_curves_list(lua_State *L)
|
||||||
|
{
|
||||||
|
SSL_CTX *ctx = lsec_checkcontext(L, 1);
|
||||||
|
const char *str = luaL_checkstring(L, 2);
|
||||||
|
|
||||||
|
SSL_CTX_set_options(ctx, SSL_OP_SINGLE_ECDH_USE);
|
||||||
|
|
||||||
|
if (SSL_CTX_set1_curves_list(ctx, str) != 1) {
|
||||||
|
lua_pushboolean(L, 0);
|
||||||
|
lua_pushfstring(L, "unknown elliptic curve in \"%s\"", str);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef SSL_CTRL_SET_ECDH_AUTO
|
||||||
|
SSL_CTX_set_ecdh_auto(ctx, 1);
|
||||||
|
#endif
|
||||||
|
|
||||||
lua_pushboolean(L, 1);
|
lua_pushboolean(L, 1);
|
||||||
return 1;
|
return 1;
|
||||||
#endif /* defined(SSL_CTRL_SET_CURVES_LIST) */
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -616,10 +620,18 @@ static luaL_Reg funcs[] = {
|
|||||||
{"setcipher", set_cipher},
|
{"setcipher", set_cipher},
|
||||||
{"setdepth", set_depth},
|
{"setdepth", set_depth},
|
||||||
{"setdhparam", set_dhparam},
|
{"setdhparam", set_dhparam},
|
||||||
{"setcurve", set_curve},
|
|
||||||
{"setverify", set_verify},
|
{"setverify", set_verify},
|
||||||
{"setoptions", set_options},
|
{"setoptions", set_options},
|
||||||
{"setmode", set_mode},
|
{"setmode", set_mode},
|
||||||
|
|
||||||
|
#if !defined(OPENSSL_NO_EC)
|
||||||
|
{"setcurve", set_curve},
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(OPENSSL_NO_EC) && (defined(SSL_CTRL_SET_CURVES_LIST) || defined(SSL_CTX_set1_curves_list) || defined(SSL_CTRL_SET_ECDH_AUTO))
|
||||||
|
{"setcurveslist", set_curves_list},
|
||||||
|
#endif
|
||||||
|
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
17
src/ssl.lua
17
src/ssl.lua
@ -7,6 +7,7 @@
|
|||||||
local core = require("ssl.core")
|
local core = require("ssl.core")
|
||||||
local context = require("ssl.context")
|
local context = require("ssl.context")
|
||||||
local x509 = require("ssl.x509")
|
local x509 = require("ssl.x509")
|
||||||
|
local config = require("ssl.config")
|
||||||
|
|
||||||
local unpack = table.unpack or unpack
|
local unpack = table.unpack or unpack
|
||||||
|
|
||||||
@ -92,11 +93,19 @@ local function newcontext(cfg)
|
|||||||
end
|
end
|
||||||
context.setdhparam(ctx, cfg.dhparam)
|
context.setdhparam(ctx, cfg.dhparam)
|
||||||
end
|
end
|
||||||
-- Set elliptic curve
|
|
||||||
if cfg.curve then
|
-- Set elliptic curves
|
||||||
succ, msg = context.setcurve(ctx, cfg.curve)
|
if (not config.algorithms.ec) and (cfg.curve or cfg.curveslist) then
|
||||||
if not succ then return nil, msg end
|
return false, "elliptic curves not supported"
|
||||||
end
|
end
|
||||||
|
if config.capabilities.curves_list and cfg.curveslist then
|
||||||
|
succ, msg = context.setcurveslist(ctx, cfg.curveslist)
|
||||||
|
if not succ then return nil, msg end
|
||||||
|
elseif cfg.curve then
|
||||||
|
succ, msg = context.setcurve(ctx, cfg.curve)
|
||||||
|
if not succ then return nil, msg end
|
||||||
|
end
|
||||||
|
|
||||||
-- Set extra verification options
|
-- Set extra verification options
|
||||||
if cfg.verifyext and ctx.setverifyext then
|
if cfg.verifyext and ctx.setverifyext then
|
||||||
succ, msg = optexec(ctx.setverifyext, cfg.verifyext, ctx)
|
succ, msg = optexec(ctx.setverifyext, cfg.verifyext, ctx)
|
||||||
|
Loading…
Reference in New Issue
Block a user