Project

General

Profile

Bug #9504 ยป nested-asn1-9504.patch

jeremyevans0 (Jeremy Evans), 08/11/2019 05:38 PM

View differences:

ext/openssl/ossl_x509cert.c
static VALUE
ossl_x509_initialize(int argc, VALUE *argv, VALUE self)
{
static ID format_kw[3];
BIO *in;
X509 *x509, *x = DATA_PTR(self);
VALUE arg;
VALUE arg, opt, format;
int pem_only = 0, der_only = 0;
if (rb_scan_args(argc, argv, "01", &arg) == 0) {
if (rb_scan_args(argc, argv, "01:", &arg, &opt) == 0) {
/* create just empty X509Cert */
return self;
}
if (!NIL_P(opt)) {
if (!format_kw[0]) {
CONST_ID(format_kw[0], "format");
CONST_ID(format_kw[1], "pem");
CONST_ID(format_kw[2], "der");
}
rb_get_kwargs(opt, format_kw, 0, 1, &format);
if (format != Qundef) {
if (rb_sym2id(format) == format_kw[1]) {
pem_only = 1;
}
else if (rb_sym2id(format) == format_kw[2]) {
der_only = 1;
}
else {
rb_raise(rb_eArgError, "invalid :format keyword value");
}
}
}
arg = ossl_to_der_if_possible(arg);
in = ossl_obj2bio(&arg);
x509 = PEM_read_bio_X509(in, &x, NULL, NULL);
DATA_PTR(self) = x;
if (!x509) {
OSSL_BIO_reset(in);
if (der_only) {
x509 = d2i_X509_bio(in, &x);
DATA_PTR(self) = x;
}
else {
x509 = PEM_read_bio_X509(in, &x, NULL, NULL);
if (!x509 && !pem_only) {
OSSL_BIO_reset(in);
x509 = d2i_X509_bio(in, &x);
}
}
DATA_PTR(self) = x;
BIO_free(in);
if (!x509) ossl_raise(eX509CertError, NULL);
test/fixtures/chain/x509_with_embedded_x509
MIIGnjCCBgegAwIBAgIIEm6CDAAAAAAwDQYJKoZIhvcNAQEFBQAwgYkxCzAJBgNVBAYTAk5PMR0wGwYDVQQIExRUYW5kYmVyZ0RlZmF1bHRTdGF0ZTEcMBoGA1UEBxMTVGFuZGJlcmdEZWZhdWx0Q2l0eTEtMCsGA1UEChMkUHJveHlTRzogVGVtcG9yYXJ5RGVmYXVsdENlcnRpZmljYXRlMQ4wDAYDVQQDEwVDaXNjbzAeFw0xMjAxMjUxODM2MDlaFw0zMjAxMjAxODM2MDlaMIGAMQswCQYDVQQGEwJOTzEdMBsGA1UECBMUVGFuZGJlcmdEZWZhdWx0U3RhdGUxHDAaBgNVBAcTE1RhbmRiZXJnRGVmYXVsdENpdHkxJDAiBgNVBAoTG1RlbXBvcmFyeURlZmF1bHRDZXJ0aWZpY2F0ZTEOMAwGA1UEAxMFQ2lzY28wgZ0wDQYJKoZIhvcNAQEBBQADgYsAMIGHAoGBAMRhzS8PT1XklwZhAsk79HNDs+CEJFvc7SmhrCmkUQ52rEhFEGS5vkJNq+rY8/iAQWr4TAIC64SzoVNtyqtxsb9oyCaRxQGew8P6588dJumAdo8qLI8LBUU3Mrv5cWBoFUyNj7o24Hl+rYfYD0zIUr4uYqYOMCHBa76KWM3Al1MpAgEDo4IEFjCCBBIwCQYDVR0TBAIwADALBgNVHQ8EBAMCBeAwHwYDVR0jBBgwFoAUQ96VNqbujQTyrzkQ4WKEdaLJS6swggPCBglghkgBhvhCAQ0EggOzFoIDrwpPcmlnaW5hbCBjZXJ0aWZpY2F0ZToKLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNlVENDQWVJQ0NRQ0FsN0ZXTlJFNW56QU5CZ2txaGtpRzl3MEJBUVVGQURDQmdERUxNQWtHQTFVRUJoTUMKVGs4eEhUQWJCZ05WQkFnVEZGUmhibVJpWlhKblJHVm1ZWFZzZEZOMFlYUmxNUnd3R2dZRFZRUUhFeE5VWVc1awpZbVZ5WjBSbFptRjFiSFJEYVhSNU1TUXdJZ1lEVlFRS0V4dFVaVzF3YjNKaGNubEVaV1poZFd4MFEyVnlkR2xtCmFXTmhkR1V4RGpBTUJnTlZCQU1UQlVOcGMyTnZNQjRYRFRFeU1ERXlOVEU0TXpZd09Wb1hEVE15TURFeU1ERTQKTXpZd09Wb3dnWUF4Q3pBSkJnTlZCQVlUQWs1UE1SMHdHd1lEVlFRSUV4UlVZVzVrWW1WeVowUmxabUYxYkhSVApkR0YwWlRFY01Cb0dBMVVFQnhNVFZHRnVaR0psY21kRVpXWmhkV3gwUTJsMGVURWtNQ0lHQTFVRUNoTWJWR1Z0CmNHOXlZWEo1UkdWbVlYVnNkRU5sY25ScFptbGpZWFJsTVE0d0RBWURWUVFERXdWRGFYTmpiekNCbnpBTkJna3EKaGtpRzl3MEJBUUVGQUFPQmpRQXdnWWtDZ1lFQXZyTG1RTmxOZnlsZmZPU1JJUWFROWFENnpCMWtBSEJTSzJuQgpOZHlIYTdJYnNYWDJyZFJNOVE0VnRSN3FTbjhKV0Z5L1lXWURkTjFaV2F0NWd2aE03UGJjM3hWbml5eExaMm9tCnJ5THBBcTZQc0pMcFBDOThyNlZkdklGMzhUQ3I3enllaEZEMzN1SjRwMHdLYjVjWmhLd1c0ako5UGNBVjYwQ0QKVmhGbEFsRUNBd0VBQVRBTkJna3Foa2lHOXcwQkFRVUZBQU9CZ1FBNjJjYlR2TEZnWlgvcGx3RXhwb04rbGZLbAo4RGRMSFNyaHkrcUJkZlFxSTNDaXUveVpFYkgzR1A5aHJPMkRhSDg0Z0FCNzNKTjE3dzN1TTZkRHRiWXBLbDIxCkZtZnp2cEovWE05Y3hZT0ZvelJoenVVLzU2d0UvdngzL3h3d21kUkRqVSs1Mlk0aTM3V240cEZsakRuMWIvWm0KcXNSTnFucVd4MUR4ckZuSWJ3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQowEQYDVR0gBAowCDAGBgRVHSAAMA0GCSqGSIb3DQEBBQUAA4GBAGJzh6GI3y8UgYFpzwdrzvXmCSwfHwcL0ZIXVvdhvB86LwmKOS7hwe5zN3sv7dwIKHVoEnoSiGDWPaTKqu4gAyO2KqYf2hANSNvhXWfy5OctsoUJPlPH21oCvO4l7/uQPF6YLRJn+174y/+dXy+SYevxM0OhZQwAlKa0fzKHjwCf
test/test_x509cert.rb
assert_equal false, cert3 == cert4
end
def test_load_certificate_with_format
raw = File.binread('test/fixtures/chain/x509_with_embedded_x509')
cert = OpenSSL::X509::Certificate.new(raw, :format=>:der)
assert_equal(raw, cert.to_der)
end
private
def certificate_error_returns_false
    (1-1/1)