security/manager/ssl/src/nsNSSCertificateFakeTransport.cpp

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 #include "nsNSSCertificateFakeTransport.h"
     8 #include "nsCOMPtr.h"
     9 #include "nsIObjectInputStream.h"
    10 #include "nsIObjectOutputStream.h"
    11 #include "nsIProgrammingLanguage.h"
    12 #include "nsISupportsPrimitives.h"
    13 #include "nsIX509Cert.h"
    14 #include "nsNSSCertificate.h"
    15 #include "nsNSSCertificate.h"
    16 #include "nsString.h"
    17 #include "nsXPIDLString.h"
    19 #ifdef PR_LOGGING
    20 extern PRLogModuleInfo* gPIPNSSLog;
    21 #endif
    23 /* nsNSSCertificateFakeTransport */
    25 NS_IMPL_ISUPPORTS(nsNSSCertificateFakeTransport,
    26                   nsIX509Cert,
    27                   nsISerializable,
    28                   nsIClassInfo)
    30 nsNSSCertificateFakeTransport::nsNSSCertificateFakeTransport() :
    31   mCertSerialization(nullptr)
    32 {
    33 }
    35 nsNSSCertificateFakeTransport::~nsNSSCertificateFakeTransport()
    36 {
    37   if (mCertSerialization)
    38     SECITEM_FreeItem(mCertSerialization, true);
    39 }
    41 /* readonly attribute string dbKey; */
    42 NS_IMETHODIMP
    43 nsNSSCertificateFakeTransport::GetDbKey(char * *aDbKey)
    44 {
    45   NS_NOTREACHED("Unimplemented on content process");
    46   return NS_ERROR_NOT_IMPLEMENTED;
    47 }
    49 /* readonly attribute string windowTitle; */
    50 NS_IMETHODIMP
    51 nsNSSCertificateFakeTransport::GetWindowTitle(char * *aWindowTitle)
    52 {
    53   NS_NOTREACHED("Unimplemented on content process");
    54   return NS_ERROR_NOT_IMPLEMENTED;
    55 }
    57 NS_IMETHODIMP
    58 nsNSSCertificateFakeTransport::GetNickname(nsAString &aNickname)
    59 {
    60   NS_NOTREACHED("Unimplemented on content process");
    61   return NS_ERROR_NOT_IMPLEMENTED;
    62 }
    64 NS_IMETHODIMP
    65 nsNSSCertificateFakeTransport::GetEmailAddress(nsAString &aEmailAddress)
    66 {
    67   NS_NOTREACHED("Unimplemented on content process");
    68   return NS_ERROR_NOT_IMPLEMENTED;
    69 }
    71 NS_IMETHODIMP
    72 nsNSSCertificateFakeTransport::GetEmailAddresses(uint32_t *aLength, char16_t*** aAddresses)
    73 {
    74   NS_NOTREACHED("Unimplemented on content process");
    75   return NS_ERROR_NOT_IMPLEMENTED;
    76 }
    78 NS_IMETHODIMP
    79 nsNSSCertificateFakeTransport::ContainsEmailAddress(const nsAString &aEmailAddress, bool *result)
    80 {
    81   NS_NOTREACHED("Unimplemented on content process");
    82   return NS_ERROR_NOT_IMPLEMENTED;
    83 }
    85 NS_IMETHODIMP
    86 nsNSSCertificateFakeTransport::GetCommonName(nsAString &aCommonName)
    87 {
    88   NS_NOTREACHED("Unimplemented on content process");
    89   return NS_ERROR_NOT_IMPLEMENTED;
    90 }
    92 NS_IMETHODIMP
    93 nsNSSCertificateFakeTransport::GetOrganization(nsAString &aOrganization)
    94 {
    95   NS_NOTREACHED("Unimplemented on content process");
    96   return NS_ERROR_NOT_IMPLEMENTED;
    97 }
    99 NS_IMETHODIMP
   100 nsNSSCertificateFakeTransport::GetIssuerCommonName(nsAString &aCommonName)
   101 {
   102   NS_NOTREACHED("Unimplemented on content process");
   103   return NS_ERROR_NOT_IMPLEMENTED;
   104 }
   106 NS_IMETHODIMP
   107 nsNSSCertificateFakeTransport::GetIssuerOrganization(nsAString &aOrganization)
   108 {
   109   NS_NOTREACHED("Unimplemented on content process");
   110   return NS_ERROR_NOT_IMPLEMENTED;
   111 }
   113 NS_IMETHODIMP
   114 nsNSSCertificateFakeTransport::GetIssuerOrganizationUnit(nsAString &aOrganizationUnit)
   115 {
   116   NS_NOTREACHED("Unimplemented on content process");
   117   return NS_ERROR_NOT_IMPLEMENTED;
   118 }
   120 /* readonly attribute nsIX509Cert issuer; */
   121 NS_IMETHODIMP
   122 nsNSSCertificateFakeTransport::GetIssuer(nsIX509Cert * *aIssuer)
   123 {
   124   NS_NOTREACHED("Unimplemented on content process");
   125   return NS_ERROR_NOT_IMPLEMENTED;
   126 }
   128 NS_IMETHODIMP
   129 nsNSSCertificateFakeTransport::GetOrganizationalUnit(nsAString &aOrganizationalUnit)
   130 {
   131   NS_NOTREACHED("Unimplemented on content process");
   132   return NS_ERROR_NOT_IMPLEMENTED;
   133 }
   135 /*
   136  * nsIEnumerator getChain();
   137  */
   138 NS_IMETHODIMP
   139 nsNSSCertificateFakeTransport::GetChain(nsIArray **_rvChain)
   140 {
   141   NS_NOTREACHED("Unimplemented on content process");
   142   return NS_ERROR_NOT_IMPLEMENTED;
   143 }
   145 NS_IMETHODIMP
   146 nsNSSCertificateFakeTransport::GetSubjectName(nsAString &_subjectName)
   147 {
   148   NS_NOTREACHED("Unimplemented on content process");
   149   return NS_ERROR_NOT_IMPLEMENTED;
   150 }
   152 NS_IMETHODIMP
   153 nsNSSCertificateFakeTransport::GetIssuerName(nsAString &_issuerName)
   154 {
   155   NS_NOTREACHED("Unimplemented on content process");
   156   return NS_ERROR_NOT_IMPLEMENTED;
   157 }
   159 NS_IMETHODIMP
   160 nsNSSCertificateFakeTransport::GetSerialNumber(nsAString &_serialNumber)
   161 {
   162   NS_NOTREACHED("Unimplemented on content process");
   163   return NS_ERROR_NOT_IMPLEMENTED;
   164 }
   166 NS_IMETHODIMP
   167 nsNSSCertificateFakeTransport::GetSha1Fingerprint(nsAString &_sha1Fingerprint)
   168 {
   169   NS_NOTREACHED("Unimplemented on content process");
   170   return NS_ERROR_NOT_IMPLEMENTED;
   171 }
   173 NS_IMETHODIMP
   174 nsNSSCertificateFakeTransport::GetMd5Fingerprint(nsAString &_md5Fingerprint)
   175 {
   176   NS_NOTREACHED("Unimplemented on content process");
   177   return NS_ERROR_NOT_IMPLEMENTED;
   178 }
   180 NS_IMETHODIMP
   181 nsNSSCertificateFakeTransport::GetTokenName(nsAString &aTokenName)
   182 {
   183   NS_NOTREACHED("Unimplemented on content process");
   184   return NS_ERROR_NOT_IMPLEMENTED;
   185 }
   187 NS_IMETHODIMP
   188 nsNSSCertificateFakeTransport::GetRawDER(uint32_t *aLength, uint8_t **aArray)
   189 {
   190   NS_NOTREACHED("Unimplemented on content process");
   191   return NS_ERROR_NOT_IMPLEMENTED;
   192 }
   194 NS_IMETHODIMP
   195 nsNSSCertificateFakeTransport::GetValidity(nsIX509CertValidity **aValidity)
   196 {
   197   NS_NOTREACHED("Unimplemented on content process");
   198   return NS_ERROR_NOT_IMPLEMENTED;
   199 }
   201 NS_IMETHODIMP
   202 nsNSSCertificateFakeTransport::GetUsagesArray(bool localOnly,
   203                                  uint32_t *_verified,
   204                                  uint32_t *_count,
   205                                  char16_t ***_usages)
   206 {
   207   NS_NOTREACHED("Unimplemented on content process");
   208   return NS_ERROR_NOT_IMPLEMENTED;
   209 }
   211 NS_IMETHODIMP
   212 nsNSSCertificateFakeTransport::GetUsagesString(bool localOnly,
   213                                   uint32_t   *_verified,
   214                                   nsAString &_usages)
   215 {
   216   NS_NOTREACHED("Unimplemented on content process");
   217   return NS_ERROR_NOT_IMPLEMENTED;
   218 }
   220 /* readonly attribute nsIASN1Object ASN1Structure; */
   221 NS_IMETHODIMP
   222 nsNSSCertificateFakeTransport::GetASN1Structure(nsIASN1Object * *aASN1Structure)
   223 {
   224   NS_NOTREACHED("Unimplemented on content process");
   225   return NS_ERROR_NOT_IMPLEMENTED;
   226 }
   228 NS_IMETHODIMP
   229 nsNSSCertificateFakeTransport::Equals(nsIX509Cert *other, bool *result)
   230 {
   231   NS_NOTREACHED("Unimplemented on content process");
   232   return NS_ERROR_NOT_IMPLEMENTED;
   233 }
   235 NS_IMETHODIMP
   236 nsNSSCertificateFakeTransport::GetSha256SubjectPublicKeyInfoDigest(nsACString_internal&)
   237 {
   238   NS_NOTREACHED("Unimplemented on content process");
   239   return NS_ERROR_NOT_IMPLEMENTED;
   240 }
   242 // NB: This serialization must match that of nsNSSCertificate.
   243 NS_IMETHODIMP
   244 nsNSSCertificateFakeTransport::Write(nsIObjectOutputStream* aStream)
   245 {
   246   // On a non-chrome process we don't have mCert because we lack
   247   // nsNSSComponent.  nsNSSCertificateFakeTransport object is used only to carry the
   248   // certificate serialization.
   250   // This serialization has to match that of nsNSSCertificate,
   251   // so write a fake cached EV Status.
   252   uint32_t status = static_cast<uint32_t>(nsNSSCertificate::ev_status_unknown);
   253   nsresult rv = aStream->Write32(status);
   254   if (NS_FAILED(rv)) {
   255     return rv;
   256   }
   258   rv = aStream->Write32(mCertSerialization->len);
   259   if (NS_FAILED(rv)) {
   260     return rv;
   261   }
   263   return aStream->WriteByteArray(mCertSerialization->data, mCertSerialization->len);
   264 }
   266 NS_IMETHODIMP
   267 nsNSSCertificateFakeTransport::Read(nsIObjectInputStream* aStream)
   268 {
   269   // This serialization has to match that of nsNSSCertificate,
   270   // so read the cachedEVStatus but don't actually use it.
   271   uint32_t cachedEVStatus;
   272   nsresult rv = aStream->Read32(&cachedEVStatus);
   273   if (NS_FAILED(rv)) {
   274     return rv;
   275   }
   277   uint32_t len;
   278   rv = aStream->Read32(&len);
   279   if (NS_FAILED(rv)) {
   280     return rv;
   281   }
   283   nsXPIDLCString str;
   284   rv = aStream->ReadBytes(len, getter_Copies(str));
   285   if (NS_FAILED(rv)) {
   286     return rv;
   287   }
   289   // On a non-chrome process we cannot instatiate mCert because we lack
   290   // nsNSSComponent.  nsNSSCertificateFakeTransport object is used only to carry the
   291   // certificate serialization.
   293   mCertSerialization = SECITEM_AllocItem(nullptr, nullptr, len);
   294   if (!mCertSerialization)
   295       return NS_ERROR_OUT_OF_MEMORY;
   296   PORT_Memcpy(mCertSerialization->data, str.Data(), len);
   298   return NS_OK;
   299 }
   301 NS_IMETHODIMP
   302 nsNSSCertificateFakeTransport::GetInterfaces(uint32_t *count, nsIID * **array)
   303 {
   304   *count = 0;
   305   *array = nullptr;
   306   return NS_OK;
   307 }
   309 NS_IMETHODIMP
   310 nsNSSCertificateFakeTransport::GetHelperForLanguage(uint32_t language, nsISupports **_retval)
   311 {
   312   *_retval = nullptr;
   313   return NS_OK;
   314 }
   316 NS_IMETHODIMP
   317 nsNSSCertificateFakeTransport::GetContractID(char * *aContractID)
   318 {
   319   *aContractID = nullptr;
   320   return NS_OK;
   321 }
   323 NS_IMETHODIMP
   324 nsNSSCertificateFakeTransport::GetClassDescription(char * *aClassDescription)
   325 {
   326   *aClassDescription = nullptr;
   327   return NS_OK;
   328 }
   330 NS_IMETHODIMP
   331 nsNSSCertificateFakeTransport::GetClassID(nsCID * *aClassID)
   332 {
   333   *aClassID = (nsCID*) nsMemory::Alloc(sizeof(nsCID));
   334   if (!*aClassID)
   335     return NS_ERROR_OUT_OF_MEMORY;
   336   return GetClassIDNoAlloc(*aClassID);
   337 }
   339 NS_IMETHODIMP
   340 nsNSSCertificateFakeTransport::GetImplementationLanguage(uint32_t *aImplementationLanguage)
   341 {
   342   *aImplementationLanguage = nsIProgrammingLanguage::CPLUSPLUS;
   343   return NS_OK;
   344 }
   346 NS_IMETHODIMP
   347 nsNSSCertificateFakeTransport::GetFlags(uint32_t *aFlags)
   348 {
   349   *aFlags = nsIClassInfo::THREADSAFE;
   350   return NS_OK;
   351 }
   353 NS_IMETHODIMP
   354 nsNSSCertificateFakeTransport::GetClassIDNoAlloc(nsCID *aClassIDNoAlloc)
   355 {
   356   static NS_DEFINE_CID(kNSSCertificateCID, NS_X509CERT_CID);
   358   *aClassIDNoAlloc = kNSSCertificateCID;
   359   return NS_OK;
   360 }

mercurial