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
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Copyright 2024 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/signed_web_bundles/ecdsa_p256_sha256_signature.h"
#include <algorithm>
#include "base/strings/stringprintf.h"
#include "base/types/expected.h"
#include "components/web_package/signed_web_bundles/ecdsa_p256_public_key.h"
#include "components/web_package/signed_web_bundles/ecdsa_p256_utils.h"
namespace web_package {
// static
base::expected<EcdsaP256SHA256Signature, std::string>
EcdsaP256SHA256Signature::Create(base::span<const uint8_t> bytes) {
static constexpr size_t kMinLength = 64;
static constexpr size_t kMaxLength = 72;
if (bytes.size() < kMinLength || bytes.size() > kMaxLength) {
return base::unexpected(base::StringPrintf(
"The ECDSA P-256 SHA-256 signature does not have the correct length. "
"Expected from %zu to %zu bytes, but received %zu bytes.",
kMinLength, kMaxLength, bytes.size()));
}
return EcdsaP256SHA256Signature({bytes.begin(), bytes.end()});
}
EcdsaP256SHA256Signature::~EcdsaP256SHA256Signature() = default;
EcdsaP256SHA256Signature::EcdsaP256SHA256Signature(
const EcdsaP256SHA256Signature&) = default;
EcdsaP256SHA256Signature::EcdsaP256SHA256Signature(EcdsaP256SHA256Signature&&) =
default;
EcdsaP256SHA256Signature& EcdsaP256SHA256Signature::operator=(
const EcdsaP256SHA256Signature&) = default;
EcdsaP256SHA256Signature& EcdsaP256SHA256Signature::operator=(
EcdsaP256SHA256Signature&&) = default;
EcdsaP256SHA256Signature::EcdsaP256SHA256Signature(
mojo::DefaultConstruct::Tag) {}
EcdsaP256SHA256Signature::EcdsaP256SHA256Signature(std::vector<uint8_t> bytes)
: bytes_(std::move(bytes)) {}
[[nodiscard]] bool EcdsaP256SHA256Signature::Verify(
base::span<const uint8_t> message,
const EcdsaP256PublicKey& public_key) const {
return internal::VerifyMessageSignedWithEcdsaP256SHA256(
message, /*signature=*/bytes(), public_key);
}
} // namespace web_package
|