Skip to content

Commit

Permalink
Add to_text for PKCS7 and Timestamp::Response
Browse files Browse the repository at this point in the history
  • Loading branch information
segiddins committed May 5, 2024
1 parent 97305cf commit 8772c56
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 0 deletions.
20 changes: 20 additions & 0 deletions ext/openssl/ossl_pkcs7.c
Original file line number Diff line number Diff line change
Expand Up @@ -847,6 +847,25 @@ ossl_pkcs7_to_der(VALUE self)
return str;
}

static VALUE
ossl_pkcs7_to_text(VALUE self)
{
PKCS7 *pkcs7;
BIO *out;
VALUE str;

GetPKCS7(self, pkcs7);
if(!(out = BIO_new(BIO_s_mem())))
ossl_raise(ePKCS7Error, NULL);
if(!PKCS7_print_ctx(out, pkcs7, 0, NULL)){
BIO_free(out);
ossl_raise(ePKCS7Error, NULL);
}
str = ossl_membio2str(out);

return str;
}

static VALUE
ossl_pkcs7_to_pem(VALUE self)
{
Expand Down Expand Up @@ -1056,6 +1075,7 @@ Init_ossl_pkcs7(void)
rb_define_method(cPKCS7, "to_pem", ossl_pkcs7_to_pem, 0);
rb_define_alias(cPKCS7, "to_s", "to_pem");
rb_define_method(cPKCS7, "to_der", ossl_pkcs7_to_der, 0);
rb_define_method(cPKCS7, "to_text", ossl_pkcs7_to_text, 0);

cPKCS7Signer = rb_define_class_under(cPKCS7, "SignerInfo", rb_cObject);
rb_define_const(cPKCS7, "Signer", cPKCS7Signer);
Expand Down
20 changes: 20 additions & 0 deletions ext/openssl/ossl_ts.c
Original file line number Diff line number Diff line change
Expand Up @@ -757,6 +757,25 @@ ossl_ts_resp_to_der(VALUE self)
return asn1_to_der((void *)resp, (int (*)(void *, unsigned char **))i2d_TS_RESP);
}

static VALUE
ossl_ts_resp_to_text(VALUE self)
{
TS_RESP *resp;
BIO *out;

GetTSResponse(self, resp);

out = BIO_new(BIO_s_mem());
if (!out) ossl_raise(eTimestampError, NULL);

if (!TS_RESP_print_bio(out, resp)) {
BIO_free(out);
ossl_raise(eTimestampError, NULL);
}

return ossl_membio2str(out);
}

/*
* Verifies a timestamp token by checking the signature, validating the
* certificate chain implied by tsa_certificate and by checking conformance to
Expand Down Expand Up @@ -1356,6 +1375,7 @@ Init_ossl_ts(void)
rb_define_method(cTimestampResponse, "token_info", ossl_ts_resp_get_token_info, 0);
rb_define_method(cTimestampResponse, "tsa_certificate", ossl_ts_resp_get_tsa_certificate, 0);
rb_define_method(cTimestampResponse, "to_der", ossl_ts_resp_to_der, 0);
rb_define_method(cTimestampResponse, "to_text", ossl_ts_resp_to_text, 0);
rb_define_method(cTimestampResponse, "verify", ossl_ts_resp_verify, -1);

/* Document-class: OpenSSL::Timestamp::TokenInfo
Expand Down
6 changes: 6 additions & 0 deletions test/openssl/test_pkcs7.rb
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,12 @@ def test_smime
assert_equal(p7.to_der, OpenSSL::PKCS7.read_smime(smime).to_der)
end

def test_to_text
p7 = OpenSSL::PKCS7.new
p7.type = "signed"
assert_match(/signed/, p7.to_text)
end

def test_degenerate_pkcs7
ca_cert_pem = <<END
-----BEGIN CERTIFICATE-----
Expand Down
2 changes: 2 additions & 0 deletions test/openssl/test_ts.rb
Original file line number Diff line number Diff line change
Expand Up @@ -323,6 +323,8 @@ def test_response_default_policy
resp = fac.create_timestamp(ee_key, ts_cert_ee, req)
assert_equal(OpenSSL::Timestamp::Response::GRANTED, resp.status)
assert_equal("1.2.3.4.6", resp.token_info.policy_id)

assert_match(/1\.2\.3\.4\.6/, resp.to_text)
end

def test_response_bad_purpose
Expand Down

0 comments on commit 8772c56

Please sign in to comment.