mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Update to Chromium revision bc084a8b (#530369)
This commit is contained in:
@@ -7,22 +7,23 @@
|
||||
#include "libcef/browser/x509_cert_principal_impl.h"
|
||||
#include "libcef/common/time_util.h"
|
||||
|
||||
#include "net/cert/x509_util.h"
|
||||
#include "net/ssl/ssl_private_key.h"
|
||||
|
||||
namespace {
|
||||
|
||||
CefRefPtr<CefBinaryValue> EncodeCertificate(
|
||||
const net::X509Certificate::OSCertHandle& os_handle,
|
||||
bool der) {
|
||||
CefRefPtr<CefBinaryValue> bin_encoded;
|
||||
CefRefPtr<CefBinaryValue> EncodeCertificate(const CRYPTO_BUFFER* cert_buffer,
|
||||
bool der) {
|
||||
std::string encoded;
|
||||
|
||||
if ((der && net::X509Certificate::GetDEREncoded(os_handle, &encoded)) ||
|
||||
(!der && net::X509Certificate::GetPEMEncoded(os_handle, &encoded))) {
|
||||
bin_encoded = CefBinaryValue::Create(encoded.c_str(), encoded.size());
|
||||
if (der) {
|
||||
encoded =
|
||||
std::string(net::x509_util::CryptoBufferAsStringPiece(cert_buffer));
|
||||
} else if (!net::X509Certificate::GetPEMEncoded(cert_buffer, &encoded)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return bin_encoded;
|
||||
if (encoded.empty())
|
||||
return nullptr;
|
||||
return CefBinaryValue::Create(encoded.c_str(), encoded.size());
|
||||
}
|
||||
|
||||
} // namespace
|
||||
@@ -77,25 +78,25 @@ CefTime CefX509CertificateImpl::GetValidExpiry() {
|
||||
|
||||
CefRefPtr<CefBinaryValue> CefX509CertificateImpl::GetDEREncoded() {
|
||||
if (cert_) {
|
||||
net::X509Certificate::OSCertHandle os_handle = cert_->os_cert_handle();
|
||||
if (os_handle)
|
||||
return EncodeCertificate(os_handle, true);
|
||||
const CRYPTO_BUFFER* cert_buffer = cert_->cert_buffer();
|
||||
if (cert_buffer)
|
||||
return EncodeCertificate(cert_buffer, true);
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
CefRefPtr<CefBinaryValue> CefX509CertificateImpl::GetPEMEncoded() {
|
||||
if (cert_) {
|
||||
net::X509Certificate::OSCertHandle os_handle = cert_->os_cert_handle();
|
||||
if (os_handle)
|
||||
return EncodeCertificate(os_handle, false);
|
||||
const CRYPTO_BUFFER* cert_buffer = cert_->cert_buffer();
|
||||
if (cert_buffer)
|
||||
return EncodeCertificate(cert_buffer, false);
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
size_t CefX509CertificateImpl::GetIssuerChainSize() {
|
||||
if (cert_)
|
||||
return cert_->GetIntermediateCertificates().size();
|
||||
return cert_->intermediate_buffers().size();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -113,14 +114,10 @@ void CefX509CertificateImpl::GetEncodedIssuerChain(
|
||||
bool der) {
|
||||
chain.clear();
|
||||
if (cert_) {
|
||||
const net::X509Certificate::OSCertHandles& handles =
|
||||
cert_->GetIntermediateCertificates();
|
||||
for (net::X509Certificate::OSCertHandles::const_iterator it =
|
||||
handles.begin();
|
||||
it != handles.end(); it++) {
|
||||
for (const auto& it : cert_->intermediate_buffers()) {
|
||||
// Add each to the chain, even if one conversion unexpectedly failed.
|
||||
// GetIssuerChainSize depends on these being the same length.
|
||||
chain.push_back(EncodeCertificate(*it, der));
|
||||
chain.push_back(EncodeCertificate(it.get(), der));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user