diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/openssl.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/openssl.c b/src/openssl.c index 99a1ec0..34f893a 100644 --- a/src/openssl.c +++ b/src/openssl.c | |||
@@ -3693,6 +3693,21 @@ static int xc_setPublicKey(lua_State *L) { | |||
3693 | } /* xc_setPublicKey() */ | 3693 | } /* xc_setPublicKey() */ |
3694 | 3694 | ||
3695 | 3695 | ||
3696 | static int xc_getPublicKeyDigest(lua_State *L) { | ||
3697 | ASN1_BIT_STRING *pk = ((X509 *) checksimple(L, 1, X509_CERT_CLASS))->cert_info->key->public_key; | ||
3698 | |||
3699 | unsigned char digest[EVP_MAX_MD_SIZE]; | ||
3700 | unsigned int len; | ||
3701 | |||
3702 | if (!EVP_Digest(pk->data, pk->length, digest, &len, EVP_sha1(), NULL)) | ||
3703 | return auxL_error(L, auxL_EOPENSSL, "x509.cert:getPublicKeyDigest"); | ||
3704 | |||
3705 | lua_pushlstring(L, (char *) digest, len); | ||
3706 | |||
3707 | return 1; | ||
3708 | } /* xc_setPublicKeyDigest() */ | ||
3709 | |||
3710 | |||
3696 | static const EVP_MD *xc_signature(lua_State *L, int index, EVP_PKEY *key) { | 3711 | static const EVP_MD *xc_signature(lua_State *L, int index, EVP_PKEY *key) { |
3697 | const char *id; | 3712 | const char *id; |
3698 | const EVP_MD *md; | 3713 | const EVP_MD *md; |
@@ -3853,6 +3868,7 @@ static const luaL_Reg xc_methods[] = { | |||
3853 | { "isIssuedBy", &xc_isIssuedBy }, | 3868 | { "isIssuedBy", &xc_isIssuedBy }, |
3854 | { "getPublicKey", &xc_getPublicKey }, | 3869 | { "getPublicKey", &xc_getPublicKey }, |
3855 | { "setPublicKey", &xc_setPublicKey }, | 3870 | { "setPublicKey", &xc_setPublicKey }, |
3871 | { "getPublicKeyDigest", &xc_getPublicKeyDigest }, | ||
3856 | { "sign", &xc_sign }, | 3872 | { "sign", &xc_sign }, |
3857 | { "text", &xc_text }, | 3873 | { "text", &xc_text }, |
3858 | { "tostring", &xc__tostring }, | 3874 | { "tostring", &xc__tostring }, |