mirror of
https://github.com/brunoos/luasec.git
synced 2024-12-29 05:48:22 +01:00
Add method for extracting public key, type and size from x509 objects
This commit is contained in:
parent
4a95102cc8
commit
dd659d394d
47
src/x509.c
47
src/x509.c
@ -283,6 +283,52 @@ static int meth_pem(lua_State* L)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extract public key in PEM format.
|
||||||
|
*/
|
||||||
|
static int meth_pubkey(lua_State* L)
|
||||||
|
{
|
||||||
|
char* data;
|
||||||
|
long bytes;
|
||||||
|
int ret = 1;
|
||||||
|
X509* cert = lsec_checkx509(L, 1);
|
||||||
|
BIO *bio = BIO_new(BIO_s_mem());
|
||||||
|
EVP_PKEY *pkey = X509_get_pubkey(cert);
|
||||||
|
if(PEM_write_bio_PUBKEY(bio, pkey)) {
|
||||||
|
bytes = BIO_get_mem_data(bio, &data);
|
||||||
|
if (bytes > 0) {
|
||||||
|
lua_pushlstring(L, data, bytes);
|
||||||
|
switch(EVP_PKEY_type(pkey->type)) {
|
||||||
|
case EVP_PKEY_RSA:
|
||||||
|
lua_pushstring(L, "RSA");
|
||||||
|
break;
|
||||||
|
case EVP_PKEY_DSA:
|
||||||
|
lua_pushstring(L, "DSA");
|
||||||
|
break;
|
||||||
|
case EVP_PKEY_DH:
|
||||||
|
lua_pushstring(L, "DH");
|
||||||
|
break;
|
||||||
|
case EVP_PKEY_EC:
|
||||||
|
lua_pushstring(L, "EC");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
lua_pushstring(L, "Unknown");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
lua_pushinteger(L, EVP_PKEY_bits(pkey));
|
||||||
|
ret = 3;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
lua_pushnil(L);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
lua_pushnil(L);
|
||||||
|
/* Cleanup */
|
||||||
|
BIO_free(bio);
|
||||||
|
EVP_PKEY_free(pkey);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compute the fingerprint.
|
* Compute the fingerprint.
|
||||||
*/
|
*/
|
||||||
@ -415,6 +461,7 @@ static luaL_Reg methods[] = {
|
|||||||
{"notbefore", meth_notbefore},
|
{"notbefore", meth_notbefore},
|
||||||
{"notafter", meth_notafter},
|
{"notafter", meth_notafter},
|
||||||
{"pem", meth_pem},
|
{"pem", meth_pem},
|
||||||
|
{"pubkey", meth_pubkey},
|
||||||
{"serial", meth_serial},
|
{"serial", meth_serial},
|
||||||
{"subject", meth_subject},
|
{"subject", meth_subject},
|
||||||
{"validat", meth_valid_at},
|
{"validat", meth_valid_at},
|
||||||
|
Loading…
Reference in New Issue
Block a user