| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chromeos/crosapi/mojom/cert_database_mojom_traits.h" |
| #include "third_party/boringssl/src/include/openssl/pool.h" |
| |
| namespace mojo { |
| |
| using chromeos::certificate_provider::CertificateInfo; |
| using crosapi::mojom::CertInfoDataView; |
| |
| std::vector<uint8_t> StructTraits<CertInfoDataView, CertificateInfo>::cert( |
| const CertificateInfo& input) { |
| CRYPTO_BUFFER* der_buffer = input.certificate->cert_buffer(); |
| const uint8_t* data = CRYPTO_BUFFER_data(der_buffer); |
| return std::vector<uint8_t>(data, data + CRYPTO_BUFFER_len(der_buffer)); |
| } |
| |
| const std::vector<uint16_t>& |
| StructTraits<CertInfoDataView, CertificateInfo>::supported_algorithms( |
| const CertificateInfo& input) { |
| return input.supported_algorithms; |
| } |
| |
| bool StructTraits<CertInfoDataView, CertificateInfo>::Read( |
| crosapi::mojom::CertInfoDataView data, |
| CertificateInfo* output) { |
| std::vector<uint8_t> cert_der; |
| if (!data.ReadCert(&cert_der)) |
| return false; |
| net::X509Certificate::UnsafeCreateOptions options; |
| // Allow UTF-8 inside PrintableStrings in client certificates. See |
| // crbug.com/770323 and crbug.com/788655. |
| options.printable_string_is_utf8 = true; |
| output->certificate = |
| net::X509Certificate::CreateFromBytesUnsafeOptions(cert_der, options); |
| // Intentionally leave output->certificate as nullptr on parse error, |
| // as it is supposed to be filtered out separately later on. |
| if (!data.ReadSupportedAlgorithms(&output->supported_algorithms)) |
| return false; |
| return true; |
| } |
| |
| } // namespace mojo |