diff options
author | Ben Toews <mastahyeti@gmail.com> | 2018-12-10 16:16:33 -0700 |
---|---|---|
committer | Ben Toews <mastahyeti@gmail.com> | 2018-12-10 16:16:33 -0700 |
commit | ee577ec1da545caf828994566459b328b3ffbe27 (patch) | |
tree | 40d47afa4fe04c6432d9f98e89fd8b6f02aa9177 /ext/openssl/ossl_x509ext.c | |
parent | 18ec883d6daaedbf32c66ca4ae6e41b66d0eeca4 (diff) | |
download | ruby-openssl-ee577ec1da545caf828994566459b328b3ffbe27.tar.gz |
Add OpenSSL::X509::Extension#value_der method
The #value method provides a weird stringification of the extension value that can't be parsed and isn't very useful. The new #value_der method provides the raw value, allowing users to decode the value and use it as needed.
Diffstat (limited to 'ext/openssl/ossl_x509ext.c')
-rw-r--r-- | ext/openssl/ossl_x509ext.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/ext/openssl/ossl_x509ext.c b/ext/openssl/ossl_x509ext.c index 30ec09d7..5eb9bd75 100644 --- a/ext/openssl/ossl_x509ext.c +++ b/ext/openssl/ossl_x509ext.c @@ -403,6 +403,19 @@ ossl_x509ext_get_value(VALUE obj) } static VALUE +ossl_x509ext_get_value_der(VALUE obj) +{ + X509_EXTENSION *ext; + ASN1_OCTET_STRING *value; + + GetX509Ext(obj, ext); + if ((value = X509_EXTENSION_get_data(ext)) == NULL) + ossl_raise(eX509ExtError, NULL); + + return rb_str_new((const char *)value->data, value->length); +} + +static VALUE ossl_x509ext_get_critical(VALUE obj) { X509_EXTENSION *ext; @@ -472,6 +485,7 @@ Init_ossl_x509ext(void) rb_define_method(cX509Ext, "critical=", ossl_x509ext_set_critical, 1); rb_define_method(cX509Ext, "oid", ossl_x509ext_get_oid, 0); rb_define_method(cX509Ext, "value", ossl_x509ext_get_value, 0); + rb_define_method(cX509Ext, "value_der", ossl_x509ext_get_value_der, 0); rb_define_method(cX509Ext, "critical?", ossl_x509ext_get_critical, 0); rb_define_method(cX509Ext, "to_der", ossl_x509ext_to_der, 0); } |