diff options
author | daurnimator <quae@daurnimator.com> | 2017-10-26 17:52:30 +1100 |
---|---|---|
committer | daurnimator <quae@daurnimator.com> | 2017-10-26 17:52:30 +1100 |
commit | dee73c581f25525fdd3e1d05e7736161ad7e1702 (patch) | |
tree | c8d2be1680403e9ab0496749b7b6f5bb7cae508b | |
parent | 1b899c92e0dc535cbbb195f48c8ac64446e993c1 (diff) | |
download | luaossl-dee73c581f25525fdd3e1d05e7736161ad7e1702.tar.gz luaossl-dee73c581f25525fdd3e1d05e7736161ad7e1702.tar.bz2 luaossl-dee73c581f25525fdd3e1d05e7736161ad7e1702.zip |
src/openssl.c: Bind SSL_SESSION_get_master_key as ssl:getMasterKey()
-rw-r--r-- | src/openssl.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/openssl.c b/src/openssl.c index 5ff80fe..0633edd 100644 --- a/src/openssl.c +++ b/src/openssl.c @@ -8919,6 +8919,28 @@ static int ssl_getClientRandom(lua_State *L) { } /* ssl_getClientRandom() */ +static int ssl_getMasterKey(lua_State *L) { + SSL *ssl = checksimple(L, 1, SSL_CLASS); + SSL_SESSION *session; + luaL_Buffer B; + size_t len; + unsigned char *out; + + session = SSL_get0_session(ssl); + if (!session) { + lua_pushnil(L); + return 1; + } + + len = SSL_SESSION_get_master_key(session, NULL, 0); + out = (unsigned char*)luaL_buffinitsize(L, &B, len); + len = SSL_SESSION_get_master_key(session, out, len); + luaL_pushresultsize(&B, len); + + return 1; +} /* ssl_getMasterKey() */ + + static int ssl_getClientVersion(lua_State *L) { SSL *ssl = checksimple(L, 1, SSL_CLASS); int format = luaL_checkoption(L, 2, "d", (const char *[]){ "d", ".", "f", NULL }); @@ -9104,6 +9126,7 @@ static const auxL_Reg ssl_methods[] = { { "setHostName", &ssl_setHostName }, { "getVersion", &ssl_getVersion }, { "getClientRandom", &ssl_getClientRandom }, + { "getMasterKey", &ssl_getMasterKey }, { "getClientVersion", &ssl_getClientVersion }, #if HAVE_SSL_GET0_ALPN_SELECTED { "getAlpnSelected", &ssl_getAlpnSelected }, |