629af49
diff -up Crypt-OpenSSL-X509-0.7/t/x509.t.openssl Crypt-OpenSSL-X509-0.7/t/x509.t
629af49
--- Crypt-OpenSSL-X509-0.7/t/x509.t.openssl	2009-08-26 10:06:16.000000000 +0200
629af49
+++ Crypt-OpenSSL-X509-0.7/t/x509.t	2009-08-26 10:05:21.000000000 +0200
629af49
@@ -12,7 +12,7 @@ ok($x509->fingerprint_md5() eq '51:86:E8
629af49
 ok($x509->issuer() eq 'C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority', 'issuer()');
629af49
 ok($x509->subject() eq 'C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority', 'subject()');
629af49
 
81a4a2a
-ok($x509->hash() eq '2edf7016', 'hash()');
81a4a2a
+ok($x509->hash() eq '2edf7016' or '24ad0b63', 'hash()');
629af49
 
629af49
 ok($x509 = Crypt::OpenSSL::X509->new_from_file('certs/thawte.pem'), 'new_from_file()');
629af49
 
f7bc3db
diff -up Crypt-OpenSSL-X509-0.7/X509.xs.openssl Crypt-OpenSSL-X509-0.7/X509.xs
f7bc3db
--- Crypt-OpenSSL-X509-0.7/X509.xs.openssl	2008-02-23 23:18:11.000000000 +0100
629af49
+++ Crypt-OpenSSL-X509-0.7/X509.xs	2009-08-25 23:12:45.000000000 +0200
f7bc3db
@@ -252,12 +252,19 @@ accessor(x509)
f7bc3db
 	} else if (ix == 7) {
f7bc3db
 
f7bc3db
 		int j;
629af49
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
f7bc3db
+		STACK_OF(OPENSSL_STRING) *emlst = X509_get1_email(x509);
f7bc3db
+
f7bc3db
+		for (j = 0; j < sk_OPENSSL_STRING_num(emlst); j++) {
f7bc3db
+			BIO_printf(bio, "%s", sk_OPENSSL_STRING_value(emlst, j));
f7bc3db
+		}
629af49
+#else
f7bc3db
 		STACK *emlst = X509_get1_email(x509);
f7bc3db
 
f7bc3db
 		for (j = 0; j < sk_num(emlst); j++) {
f7bc3db
 			BIO_printf(bio, "%s", sk_value(emlst, j));
f7bc3db
 		}
f7bc3db
-
629af49
+#endif
f7bc3db
 		X509_email_free(emlst);
f7bc3db
 	}
f7bc3db
 
629af49
@@ -289,7 +296,17 @@ as_string(x509, format = FORMAT_PEM)
629af49
 		i2d_X509_bio(bio, x509);
f7bc3db
 
f7bc3db
 	} else if (format == FORMAT_NETSCAPE) {
629af49
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
f7bc3db
+		NETSCAPE_X509 nx;
f7bc3db
+		ASN1_OCTET_STRING hdr;
f7bc3db
+
f7bc3db
+		hdr.data   = (unsigned char *)NETSCAPE_CERT_HDR;
f7bc3db
+		hdr.length = strlen(NETSCAPE_CERT_HDR);
629af49
+		nx.header = &hd;;
f7bc3db
+		nx.cert   = x509;
629af49
 
f7bc3db
+		ASN1_item_i2d_bio(ASN1_ITEM_rptr(NETSCAPE_X509), bio, &nx;;
629af49
+#else
f7bc3db
 		ASN1_HEADER ah;
f7bc3db
 		ASN1_OCTET_STRING os;
f7bc3db
 
629af49
@@ -300,6 +317,7 @@ as_string(x509, format = FORMAT_PEM)
f7bc3db
 		ah.meth   = X509_asn1_meth();
f7bc3db
 
f7bc3db
 		ASN1_i2d_bio(i2d_ASN1_HEADER, bio, (unsigned char *)&ah;;
629af49
+#endif
f7bc3db
 	}
f7bc3db
 
f7bc3db
 	RETVAL = sv_bio_final(bio);