mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-13 05:40:42 +01:00

This reverts commit 72f638a9a2
.
Reason for revert: downstream build failures
Original change's description:
> Use CRYPTO_BUFFER APIs instead of X509 when building with BoringSSL.
>
> Using CRYPTO_BUFFERs instead of legacy X509 objects offers memory and
> security gains, and will provide binary size improvements as well once
> the default list of built-in certificates can be removed; the code
> dealing with them still depends on the X509 API.
>
> Implemented by splitting openssl_identity and openssl_certificate
> into BoringSSL and vanilla OpenSSL implementations.
>
> Bug: webrtc:11410
> Change-Id: Idc043462faac5e4ab1b75bedab2057197f80aba6
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/174120
> Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
> Reviewed-by: David Benjamin <davidben@webrtc.org>
> Reviewed-by: Harald Alvestrand <hta@webrtc.org>
> Commit-Queue: Taylor <deadbeef@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#32811}
TBR=deadbeef@webrtc.org,mbonadei@webrtc.org,davidben@webrtc.org,hta@webrtc.org
Change-Id: Ib5e55cb5798a2f3d25a4460f5311d2e650d3fa82
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:11410
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/196742
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32812}
94 lines
3.3 KiB
C++
94 lines
3.3 KiB
C++
/*
|
|
* Copyright 2016 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#include "rtc_base/rtc_certificate_generator.h"
|
|
|
|
#include <time.h>
|
|
|
|
#include <algorithm>
|
|
#include <memory>
|
|
#include <utility>
|
|
|
|
#include "rtc_base/checks.h"
|
|
#include "rtc_base/location.h"
|
|
#include "rtc_base/message_handler.h"
|
|
#include "rtc_base/ref_counted_object.h"
|
|
#include "rtc_base/ssl_identity.h"
|
|
|
|
namespace rtc {
|
|
|
|
namespace {
|
|
|
|
// A certificates' subject and issuer name.
|
|
const char kIdentityName[] = "WebRTC";
|
|
const uint64_t kYearInSeconds = 365 * 24 * 60 * 60;
|
|
|
|
} // namespace
|
|
|
|
// static
|
|
scoped_refptr<RTCCertificate> RTCCertificateGenerator::GenerateCertificate(
|
|
const KeyParams& key_params,
|
|
const absl::optional<uint64_t>& expires_ms) {
|
|
if (!key_params.IsValid()) {
|
|
return nullptr;
|
|
}
|
|
|
|
std::unique_ptr<SSLIdentity> identity;
|
|
if (!expires_ms) {
|
|
identity = SSLIdentity::Create(kIdentityName, key_params);
|
|
} else {
|
|
uint64_t expires_s = *expires_ms / 1000;
|
|
// Limit the expiration time to something reasonable (a year). This was
|
|
// somewhat arbitrarily chosen. It also ensures that the value is not too
|
|
// large for the unspecified |time_t|.
|
|
expires_s = std::min(expires_s, kYearInSeconds);
|
|
// TODO(torbjorng): Stop using |time_t|, its type is unspecified. It it safe
|
|
// to assume it can hold up to a year's worth of seconds (and more), but
|
|
// |SSLIdentity::Generate| should stop relying on |time_t|.
|
|
// See bugs.webrtc.org/5720.
|
|
time_t cert_lifetime_s = static_cast<time_t>(expires_s);
|
|
identity = SSLIdentity::Create(kIdentityName, key_params, cert_lifetime_s);
|
|
}
|
|
if (!identity) {
|
|
return nullptr;
|
|
}
|
|
return RTCCertificate::Create(std::move(identity));
|
|
}
|
|
|
|
RTCCertificateGenerator::RTCCertificateGenerator(Thread* signaling_thread,
|
|
Thread* worker_thread)
|
|
: signaling_thread_(signaling_thread), worker_thread_(worker_thread) {
|
|
RTC_DCHECK(signaling_thread_);
|
|
RTC_DCHECK(worker_thread_);
|
|
}
|
|
|
|
void RTCCertificateGenerator::GenerateCertificateAsync(
|
|
const KeyParams& key_params,
|
|
const absl::optional<uint64_t>& expires_ms,
|
|
const scoped_refptr<RTCCertificateGeneratorCallback>& callback) {
|
|
RTC_DCHECK(signaling_thread_->IsCurrent());
|
|
RTC_DCHECK(callback);
|
|
|
|
// Create a new |RTCCertificateGenerationTask| for this generation request. It
|
|
// is reference counted and referenced by the message data, ensuring it lives
|
|
// until the task has completed (independent of |RTCCertificateGenerator|).
|
|
worker_thread_->PostTask(RTC_FROM_HERE, [key_params, expires_ms,
|
|
signaling_thread = signaling_thread_,
|
|
cb = callback]() {
|
|
scoped_refptr<RTCCertificate> certificate =
|
|
RTCCertificateGenerator::GenerateCertificate(key_params, expires_ms);
|
|
signaling_thread->PostTask(
|
|
RTC_FROM_HERE, [cert = std::move(certificate), cb = std::move(cb)]() {
|
|
cert ? cb->OnSuccess(cert) : cb->OnFailure();
|
|
});
|
|
});
|
|
}
|
|
|
|
} // namespace rtc
|