1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
// 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 "components/web_package/mojom/web_bundle_parser_mojom_traits.h"
#include "base/containers/span.h"
#include "components/web_package/signed_web_bundles/ecdsa_p256_public_key.h"
#include "components/web_package/signed_web_bundles/ecdsa_p256_sha256_signature.h"
#include "components/web_package/signed_web_bundles/ed25519_public_key.h"
#include "components/web_package/signed_web_bundles/ed25519_signature.h"
#include "components/web_package/signed_web_bundles/integrity_block_attributes.h"
namespace mojo {
// static
bool StructTraits<web_package::mojom::Ed25519PublicKeyDataView,
web_package::Ed25519PublicKey>::
Read(web_package::mojom::Ed25519PublicKeyDataView data,
web_package::Ed25519PublicKey* public_key) {
std::array<uint8_t, web_package::Ed25519PublicKey::kLength> bytes;
if (!data.ReadBytes(&bytes)) {
return false;
}
*public_key =
web_package::Ed25519PublicKey::Create(base::as_byte_span(bytes));
return true;
}
// static
bool StructTraits<web_package::mojom::Ed25519SignatureDataView,
web_package::Ed25519Signature>::
Read(web_package::mojom::Ed25519SignatureDataView data,
web_package::Ed25519Signature* signature) {
std::array<uint8_t, web_package::Ed25519Signature::kLength> bytes;
if (!data.ReadBytes(&bytes)) {
return false;
}
*signature = web_package::Ed25519Signature::Create(base::as_byte_span(bytes));
return true;
}
// static
bool StructTraits<web_package::mojom::EcdsaP256PublicKeyDataView,
web_package::EcdsaP256PublicKey>::
Read(web_package::mojom::EcdsaP256PublicKeyDataView data,
web_package::EcdsaP256PublicKey* public_key) {
std::array<uint8_t, web_package::EcdsaP256PublicKey::kLength> bytes;
if (!data.ReadBytes(&bytes)) {
return false;
}
if (auto public_key_or_error = web_package::EcdsaP256PublicKey::Create(bytes);
public_key_or_error.has_value()) {
*public_key = std::move(public_key_or_error).value();
return true;
}
return false;
}
// static
bool StructTraits<web_package::mojom::EcdsaP256SHA256SignatureDataView,
web_package::EcdsaP256SHA256Signature>::
Read(web_package::mojom::EcdsaP256SHA256SignatureDataView data,
web_package::EcdsaP256SHA256Signature* signature) {
std::vector<uint8_t> bytes;
if (!data.ReadBytes(&bytes)) {
return false;
}
if (auto signature_or_error =
web_package::EcdsaP256SHA256Signature::Create(bytes);
signature_or_error.has_value()) {
*signature = std::move(signature_or_error).value();
return true;
}
return false;
}
// static
bool StructTraits<web_package::mojom::BundleIntegrityBlockAttributesDataView,
web_package::IntegrityBlockAttributes>::
Read(web_package::mojom::BundleIntegrityBlockAttributesDataView data,
web_package::IntegrityBlockAttributes* attributes) {
std::vector<uint8_t> cbor;
if (!data.ReadCbor(&cbor) || cbor.empty()) {
return false;
}
std::string web_bundle_id;
if (!data.ReadWebBundleId(&web_bundle_id) || web_bundle_id.empty()) {
return false;
}
*attributes = web_package::IntegrityBlockAttributes(std::move(web_bundle_id),
std::move(cbor));
return true;
}
} // namespace mojo
|