Skip to content
This repository has been archived by the owner on May 8, 2020. It is now read-only.

Commit

Permalink
Add method for extracting public key, type and size from x509 objects
Browse files Browse the repository at this point in the history
  • Loading branch information
Zash committed Feb 5, 2014
1 parent 21aefcf commit eb8cb33
Showing 1 changed file with 46 additions and 0 deletions.
46 changes: 46 additions & 0 deletions src/x509.c
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*/
Expand Down

0 comments on commit eb8cb33

Please sign in to comment.