blob: 0e1d65bc442ac8e88cd9796b02bbbfb4bb190109 [file] [log] [blame]
// Copyright 2022 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef LIBHWSEC_FUZZED_U2F_H_
#define LIBHWSEC_FUZZED_U2F_H_
#include <memory>
#include <utility>
#include <base/containers/span.h>
#include <brillo/secure_blob.h>
#include <fuzzer/FuzzedDataProvider.h>
#include "libhwsec/backend/u2f.h"
#include "libhwsec/fuzzed/basic_objects.h"
#include "libhwsec/structures/u2f.h"
namespace hwsec {
class FakePublicKey : public u2f::PublicKey {
public:
FakePublicKey(brillo::Blob x, brillo::Blob y, brillo::Blob raw)
: x_(std::move(x)), y_(std::move(y)), data_(std::move(raw)) {}
base::span<const uint8_t> x() const override { return x_; }
base::span<const uint8_t> y() const override { return y_; }
const brillo::Blob& raw() const override { return data_; }
private:
brillo::Blob x_;
brillo::Blob y_;
brillo::Blob data_;
};
template <>
struct FuzzedObject<u2f::GenerateResult> {
u2f::GenerateResult operator()(FuzzedDataProvider& provider) const {
return u2f::GenerateResult{
.public_key = std::make_unique<FakePublicKey>(
brillo::BlobFromString(provider.ConsumeRandomLengthString()),
brillo::BlobFromString(provider.ConsumeRandomLengthString()),
brillo::BlobFromString(provider.ConsumeRandomLengthString())),
.key_handle = FuzzedObject<brillo::Blob>()(provider),
};
}
};
template <>
struct FuzzedObject<u2f::Signature> {
u2f::Signature operator()(FuzzedDataProvider& provider) const {
return u2f::Signature{
.r = FuzzedObject<brillo::Blob>()(provider),
.s = FuzzedObject<brillo::Blob>()(provider),
};
}
};
template <>
struct FuzzedObject<u2f::Config> {
u2f::Config operator()(FuzzedDataProvider& provider) const {
return u2f::Config{
.up_only_kh_size = FuzzedObject<size_t>()(provider),
.kh_size = FuzzedObject<size_t>()(provider),
};
}
};
} // namespace hwsec
#endif // LIBHWSEC_FUZZED_U2F_H_