blob: 18db6531716c6f54e5a39fd055c000525b224181 [file] [log] [blame]
// Copyright 2023 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/unexportable_keys/unexportable_key_tasks.h"
#include "base/memory/scoped_refptr.h"
#include "components/unexportable_keys/ref_counted_unexportable_signing_key.h"
#include "crypto/signature_verifier.h"
#include "crypto/unexportable_key.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
namespace unexportable_keys {
namespace {
absl::optional<std::vector<uint8_t>> SignSlowlyWithRefCountedKey(
scoped_refptr<RefCountedUnexportableSigningKey> signing_key,
base::span<const uint8_t> data) {
CHECK(signing_key);
return signing_key->key().SignSlowly(data);
}
} // namespace
GenerateKeyTask::GenerateKeyTask(
std::unique_ptr<crypto::UnexportableKeyProvider> key_provider,
base::span<const crypto::SignatureVerifier::SignatureAlgorithm>
acceptable_algorithms,
base::OnceCallback<void(GenerateKeyTask::ReturnType)> callback)
: internal::BackgroundTaskImpl<GenerateKeyTask::ReturnType>(
base::BindOnce(
&crypto::UnexportableKeyProvider::GenerateSigningKeySlowly,
std::move(key_provider),
std::vector<const crypto::SignatureVerifier::SignatureAlgorithm>(
acceptable_algorithms.begin(),
acceptable_algorithms.end())),
std::move(callback)) {}
FromWrappedKeyTask::FromWrappedKeyTask(
std::unique_ptr<crypto::UnexportableKeyProvider> key_provider,
base::span<const uint8_t> wrapped_key,
base::OnceCallback<void(FromWrappedKeyTask::ReturnType)> callback)
: internal::BackgroundTaskImpl<FromWrappedKeyTask::ReturnType>(
base::BindOnce(
&crypto::UnexportableKeyProvider::FromWrappedSigningKeySlowly,
std::move(key_provider),
std::vector<uint8_t>(wrapped_key.begin(), wrapped_key.end())),
std::move(callback)) {}
SignTask::SignTask(scoped_refptr<RefCountedUnexportableSigningKey> signing_key,
base::span<const uint8_t> data,
base::OnceCallback<void(SignTask::ReturnType)> callback)
: internal::BackgroundTaskImpl<SignTask::ReturnType>(
base::BindOnce(&SignSlowlyWithRefCountedKey,
std::move(signing_key),
std::vector<uint8_t>(data.begin(), data.end())),
std::move(callback)) {}
} // namespace unexportable_keys