Mirror of BoringSSL (grpc依赖)
https://boringssl.googlesource.com/boringssl
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
4.0 KiB
135 lines
4.0 KiB
// Copyright 2016 The Chromium Authors |
|
// Use of this source code is governed by a BSD-style license that can be |
|
// found in the LICENSE file. |
|
|
|
#include "cert_error_params.h" |
|
|
|
#include <memory> |
|
|
|
#include <openssl/base.h> |
|
|
|
#include "input.h" |
|
#include "string_util.h" |
|
|
|
namespace bssl { |
|
|
|
namespace { |
|
|
|
// Parameters subclass for describing (and pretty-printing) 1 or 2 DER |
|
// blobs. It makes a copy of the der::Inputs. |
|
class CertErrorParams2Der : public CertErrorParams { |
|
public: |
|
CertErrorParams2Der(const char *name1, const der::Input &der1, |
|
const char *name2, const der::Input &der2) |
|
: name1_(name1), |
|
der1_(der1.AsString()), |
|
name2_(name2), |
|
der2_(der2.AsString()) {} |
|
|
|
CertErrorParams2Der(const CertErrorParams2Der &) = delete; |
|
CertErrorParams2Der &operator=(const CertErrorParams2Der &) = delete; |
|
|
|
std::string ToDebugString() const override { |
|
std::string result; |
|
AppendDer(name1_, der1_, &result); |
|
if (name2_) { |
|
result += "\n"; |
|
AppendDer(name2_, der2_, &result); |
|
} |
|
return result; |
|
} |
|
|
|
private: |
|
static void AppendDer(const char *name, const std::string &der, |
|
std::string *out) { |
|
*out += name; |
|
*out += |
|
": " + bssl::string_util::HexEncode( |
|
reinterpret_cast<const uint8_t *>(der.data()), der.size()); |
|
} |
|
|
|
const char *name1_; |
|
std::string der1_; |
|
|
|
const char *name2_; |
|
std::string der2_; |
|
}; |
|
|
|
// Parameters subclass for describing (and pretty-printing) a single size_t. |
|
class CertErrorParams1SizeT : public CertErrorParams { |
|
public: |
|
CertErrorParams1SizeT(const char *name, size_t value) |
|
: name_(name), value_(value) {} |
|
|
|
CertErrorParams1SizeT(const CertErrorParams1SizeT &) = delete; |
|
CertErrorParams1SizeT &operator=(const CertErrorParams1SizeT &) = delete; |
|
|
|
std::string ToDebugString() const override { |
|
return name_ + std::string(": ") + |
|
bssl::string_util::NumberToDecimalString(value_); |
|
} |
|
|
|
private: |
|
const char *name_; |
|
size_t value_; |
|
}; |
|
|
|
// Parameters subclass for describing (and pretty-printing) two size_t |
|
// values. |
|
class CertErrorParams2SizeT : public CertErrorParams { |
|
public: |
|
CertErrorParams2SizeT(const char *name1, size_t value1, const char *name2, |
|
size_t value2) |
|
: name1_(name1), value1_(value1), name2_(name2), value2_(value2) {} |
|
|
|
CertErrorParams2SizeT(const CertErrorParams2SizeT &) = delete; |
|
CertErrorParams2SizeT &operator=(const CertErrorParams2SizeT &) = delete; |
|
|
|
std::string ToDebugString() const override { |
|
return name1_ + std::string(": ") + |
|
bssl::string_util::NumberToDecimalString(value1_) + "\n" + name2_ + |
|
std::string(": ") + |
|
bssl::string_util::NumberToDecimalString(value2_); |
|
} |
|
|
|
private: |
|
const char *name1_; |
|
size_t value1_; |
|
const char *name2_; |
|
size_t value2_; |
|
}; |
|
|
|
} // namespace |
|
|
|
CertErrorParams::CertErrorParams() = default; |
|
CertErrorParams::~CertErrorParams() = default; |
|
|
|
std::unique_ptr<CertErrorParams> CreateCertErrorParams1Der( |
|
const char *name, const der::Input &der) { |
|
BSSL_CHECK(name); |
|
return std::make_unique<CertErrorParams2Der>(name, der, nullptr, |
|
der::Input()); |
|
} |
|
|
|
std::unique_ptr<CertErrorParams> CreateCertErrorParams2Der( |
|
const char *name1, const der::Input &der1, const char *name2, |
|
const der::Input &der2) { |
|
BSSL_CHECK(name1); |
|
BSSL_CHECK(name2); |
|
return std::make_unique<CertErrorParams2Der>(name1, der1, name2, der2); |
|
} |
|
|
|
std::unique_ptr<CertErrorParams> CreateCertErrorParams1SizeT(const char *name, |
|
size_t value) { |
|
BSSL_CHECK(name); |
|
return std::make_unique<CertErrorParams1SizeT>(name, value); |
|
} |
|
|
|
OPENSSL_EXPORT std::unique_ptr<CertErrorParams> CreateCertErrorParams2SizeT( |
|
const char *name1, size_t value1, const char *name2, size_t value2) { |
|
BSSL_CHECK(name1); |
|
BSSL_CHECK(name2); |
|
return std::make_unique<CertErrorParams2SizeT>(name1, value1, name2, value2); |
|
} |
|
|
|
} // namespace bssl
|
|
|