mirror of
https://github.com/brunoos/luasec.git
synced 2024-12-27 04:58:20 +01:00
Add method for extracting public key, type and size from x509 objects
This commit is contained in:
parent
21aefcf67d
commit
eb8cb33160
46
src/x509.c
46
src/x509.c
@ -308,6 +308,52 @@ static int meth_pem(lua_State* L)
|
||||
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.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user