| Index: net/cert/x509_util_openssl.cc
 | 
| diff --git a/net/cert/x509_util_openssl.cc b/net/cert/x509_util_openssl.cc
 | 
| index 5a6e9aaef5c886a0fe5d9f023090f71c950f3b5b..38a987ccb24f15e9be77350c941bb7d475f8f906 100644
 | 
| --- a/net/cert/x509_util_openssl.cc
 | 
| +++ b/net/cert/x509_util_openssl.cc
 | 
| @@ -13,6 +13,7 @@
 | 
|  #include "crypto/ec_private_key.h"
 | 
|  #include "crypto/openssl_util.h"
 | 
|  #include "crypto/rsa_private_key.h"
 | 
| +#include "crypto/scoped_openssl_types.h"
 | 
|  #include "net/cert/x509_cert_types.h"
 | 
|  #include "net/cert/x509_util.h"
 | 
|  
 | 
| @@ -20,6 +21,18 @@ namespace net {
 | 
|  
 | 
|  namespace {
 | 
|  
 | 
| +typedef crypto::ScopedOpenSSL<ASN1_INTEGER, ASN1_INTEGER_free>::Type
 | 
| +    ScopedASN1_INTEGER;
 | 
| +typedef crypto::ScopedOpenSSL<ASN1_OCTET_STRING, ASN1_OCTET_STRING_free>::Type
 | 
| +    ScopedASN1_OCTET_STRING;
 | 
| +typedef crypto::ScopedOpenSSL<ASN1_STRING, ASN1_STRING_free>::Type
 | 
| +    ScopedASN1_STRING;
 | 
| +typedef crypto::ScopedOpenSSL<ASN1_TIME, ASN1_TIME_free>::Type ScopedASN1_TIME;
 | 
| +typedef crypto::ScopedOpenSSL<X509, X509_free>::Type ScopedX509;
 | 
| +typedef crypto::ScopedOpenSSL<X509_EXTENSION, X509_EXTENSION_free>::Type
 | 
| +    ScopedX509_EXTENSION;
 | 
| +typedef crypto::ScopedOpenSSL<X509_NAME, X509_NAME_free>::Type ScopedX509_NAME;
 | 
| +
 | 
|  const EVP_MD* ToEVP(x509_util::DigestAlgorithm alg) {
 | 
|    switch (alg) {
 | 
|      case x509_util::DIGEST_SHA1:
 | 
| @@ -43,8 +56,7 @@ X509* CreateCertificate(EVP_PKEY* key,
 | 
|                          base::Time not_valid_before,
 | 
|                          base::Time not_valid_after) {
 | 
|    // Put the serial number into an OpenSSL-friendly object.
 | 
| -  crypto::ScopedOpenSSL<ASN1_INTEGER, ASN1_INTEGER_free> asn1_serial(
 | 
| -      ASN1_INTEGER_new());
 | 
| +  ScopedASN1_INTEGER asn1_serial(ASN1_INTEGER_new());
 | 
|    if (!asn1_serial.get() ||
 | 
|        !ASN1_INTEGER_set(asn1_serial.get(), static_cast<long>(serial_number))) {
 | 
|      LOG(ERROR) << "Invalid serial number " << serial_number;
 | 
| @@ -52,7 +64,7 @@ X509* CreateCertificate(EVP_PKEY* key,
 | 
|    }
 | 
|  
 | 
|    // Do the same for the time stamps.
 | 
| -  crypto::ScopedOpenSSL<ASN1_TIME, ASN1_TIME_free> asn1_not_before_time(
 | 
| +  ScopedASN1_TIME asn1_not_before_time(
 | 
|        ASN1_TIME_set(NULL, not_valid_before.ToTimeT()));
 | 
|    if (!asn1_not_before_time.get()) {
 | 
|      LOG(ERROR) << "Invalid not_valid_before time: "
 | 
| @@ -60,7 +72,7 @@ X509* CreateCertificate(EVP_PKEY* key,
 | 
|      return NULL;
 | 
|    }
 | 
|  
 | 
| -  crypto::ScopedOpenSSL<ASN1_TIME, ASN1_TIME_free> asn1_not_after_time(
 | 
| +  ScopedASN1_TIME asn1_not_after_time(
 | 
|        ASN1_TIME_set(NULL, not_valid_after.ToTimeT()));
 | 
|    if (!asn1_not_after_time.get()) {
 | 
|      LOG(ERROR) << "Invalid not_valid_after time: " << not_valid_after.ToTimeT();
 | 
| @@ -87,7 +99,7 @@ X509* CreateCertificate(EVP_PKEY* key,
 | 
|    int common_name_len =
 | 
|        static_cast<int>(common_name.size() - kCommonNamePrefixLen);
 | 
|  
 | 
| -  crypto::ScopedOpenSSL<X509_NAME, X509_NAME_free> name(X509_NAME_new());
 | 
| +  ScopedX509_NAME name(X509_NAME_new());
 | 
|    if (!name.get() || !X509_NAME_add_entry_by_NID(name.get(),
 | 
|                                                   NID_commonName,
 | 
|                                                   MBSTRING_ASC,
 | 
| @@ -100,7 +112,7 @@ X509* CreateCertificate(EVP_PKEY* key,
 | 
|    }
 | 
|  
 | 
|    // Now create certificate and populate it.
 | 
| -  crypto::ScopedOpenSSL<X509, X509_free> cert(X509_new());
 | 
| +  ScopedX509 cert(X509_new());
 | 
|    if (!cert.get() || !X509_set_version(cert.get(), 2L) /* i.e. version 3 */ ||
 | 
|        !X509_set_pubkey(cert.get(), key) ||
 | 
|        !X509_set_serialNumber(cert.get(), asn1_serial.get()) ||
 | 
| @@ -221,20 +233,18 @@ bool CreateDomainBoundCertEC(
 | 
|      std::string* der_cert) {
 | 
|    crypto::OpenSSLErrStackTracer err_tracer(FROM_HERE);
 | 
|    // Create certificate.
 | 
| -  crypto::ScopedOpenSSL<X509, X509_free> cert(
 | 
| -      CreateCertificate(key->key(),
 | 
| -                        alg,
 | 
| -                        "CN=anonymous.invalid",
 | 
| -                        serial_number,
 | 
| -                        not_valid_before,
 | 
| -                        not_valid_after));
 | 
| +  ScopedX509 cert(CreateCertificate(key->key(),
 | 
| +                                    alg,
 | 
| +                                    "CN=anonymous.invalid",
 | 
| +                                    serial_number,
 | 
| +                                    not_valid_before,
 | 
| +                                    not_valid_after));
 | 
|    if (!cert.get())
 | 
|      return false;
 | 
|  
 | 
|    // Add TLS-Channel-ID extension to the certificate before signing it.
 | 
|    // The value must be stored DER-encoded, as a ASN.1 IA5String.
 | 
| -  crypto::ScopedOpenSSL<ASN1_STRING, ASN1_STRING_free> domain_ia5(
 | 
| -      ASN1_IA5STRING_new());
 | 
| +  ScopedASN1_STRING domain_ia5(ASN1_IA5STRING_new());
 | 
|    if (!domain_ia5.get() ||
 | 
|        !ASN1_STRING_set(domain_ia5.get(), domain.data(), domain.size()))
 | 
|      return false;
 | 
| @@ -250,15 +260,13 @@ bool CreateDomainBoundCertEC(
 | 
|    if (i2d_ASN1_IA5STRING(domain_ia5.get(), &domain_der_data) < 0)
 | 
|      return false;
 | 
|  
 | 
| -  crypto::ScopedOpenSSL<ASN1_OCTET_STRING, ASN1_OCTET_STRING_free> domain_str(
 | 
| -      ASN1_OCTET_STRING_new());
 | 
| +  ScopedASN1_OCTET_STRING domain_str(ASN1_OCTET_STRING_new());
 | 
|    if (!domain_str.get() ||
 | 
|        !ASN1_STRING_set(domain_str.get(), domain_der.data(), domain_der.size()))
 | 
|      return false;
 | 
|  
 | 
| -  crypto::ScopedOpenSSL<X509_EXTENSION, X509_EXTENSION_free> ext(
 | 
| -      X509_EXTENSION_create_by_OBJ(
 | 
| -          NULL, GetDomainBoundOid(), 1 /* critical */, domain_str.get()));
 | 
| +  ScopedX509_EXTENSION ext(X509_EXTENSION_create_by_OBJ(
 | 
| +      NULL, GetDomainBoundOid(), 1 /* critical */, domain_str.get()));
 | 
|    if (!ext.get() || !X509_add_ext(cert.get(), ext.get(), -1)) {
 | 
|      return false;
 | 
|    }
 | 
| @@ -275,13 +283,12 @@ bool CreateSelfSignedCert(crypto::RSAPrivateKey* key,
 | 
|                            base::Time not_valid_after,
 | 
|                            std::string* der_encoded) {
 | 
|    crypto::OpenSSLErrStackTracer err_tracer(FROM_HERE);
 | 
| -  crypto::ScopedOpenSSL<X509, X509_free> cert(
 | 
| -      CreateCertificate(key->key(),
 | 
| -                        alg,
 | 
| -                        common_name,
 | 
| -                        serial_number,
 | 
| -                        not_valid_before,
 | 
| -                        not_valid_after));
 | 
| +  ScopedX509 cert(CreateCertificate(key->key(),
 | 
| +                                    alg,
 | 
| +                                    common_name,
 | 
| +                                    serial_number,
 | 
| +                                    not_valid_before,
 | 
| +                                    not_valid_after));
 | 
|    if (!cert.get())
 | 
|      return false;
 | 
|  
 | 
| 
 |