Bug #9504 ยป nested-asn1-9504.patch
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
|