Files
platform-external-webrtc/rtc_base/opensslcertificate.h
Benjamin Wright 61c5cc8eb5 Makes OpenSSL concrete implementations final.
OpenSSL implementations are all final implementations of their more abstract
SSL variants. This should be both documented and enforced by the use of the
final keyword to indicate to future WebRTC contributors that this is the
intended depth of inheritance and it shouldn't be extended again. Hopefully
this minor change will help keep the code simpler to maintain going forward.

Bug: webrtc:9860
Change-Id: Ie22de722214e3b209c3d7727a93ac819c112434e
Reviewed-on: https://webrtc-review.googlesource.com/c/108203
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Benjamin Wright <benwright@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25401}
2018-10-28 22:14:39 +00:00

79 lines
2.5 KiB
C++

/*
* Copyright 2004 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.
*/
#ifndef RTC_BASE_OPENSSLCERTIFICATE_H_
#define RTC_BASE_OPENSSLCERTIFICATE_H_
#include <openssl/ossl_typ.h>
#include <stddef.h>
#include <stdint.h>
#include <string>
#include "rtc_base/buffer.h"
#include "rtc_base/constructormagic.h"
#include "rtc_base/sslcertificate.h"
#include "rtc_base/sslidentity.h"
namespace rtc {
class OpenSSLKeyPair;
// OpenSSLCertificate encapsulates an OpenSSL X509* certificate object,
// which is also reference counted inside the OpenSSL library.
class OpenSSLCertificate final : public SSLCertificate {
public:
// X509 object has its reference count incremented. So the caller and
// OpenSSLCertificate share ownership.
explicit OpenSSLCertificate(X509* x509);
static std::unique_ptr<OpenSSLCertificate> Generate(
OpenSSLKeyPair* key_pair,
const SSLIdentityParams& params);
static std::unique_ptr<OpenSSLCertificate> FromPEMString(
const std::string& pem_string);
~OpenSSLCertificate() override;
std::unique_ptr<SSLCertificate> Clone() const override;
X509* x509() const { return x509_; }
std::string ToPEMString() const override;
void ToDER(Buffer* der_buffer) const override;
bool operator==(const OpenSSLCertificate& other) const;
bool operator!=(const OpenSSLCertificate& other) const;
// Compute the digest of the certificate given algorithm
bool ComputeDigest(const std::string& algorithm,
unsigned char* digest,
size_t size,
size_t* length) const override;
// Compute the digest of a certificate as an X509 *
static bool ComputeDigest(const X509* x509,
const std::string& algorithm,
unsigned char* digest,
size_t size,
size_t* length);
bool GetSignatureDigestAlgorithm(std::string* algorithm) const override;
int64_t CertificateExpirationTime() const override;
private:
X509* x509_; // NOT OWNED
RTC_DISALLOW_COPY_AND_ASSIGN(OpenSSLCertificate);
};
} // namespace rtc
#endif // RTC_BASE_OPENSSLCERTIFICATE_H_