blob: 96291f5faa7c24eb2ba04a98cdd48886528a0d3f [file] [log] [blame]
// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ARC_KEYMASTER_CONTEXT_CHAPS_CRYPTO_OPERATION_H_
#define ARC_KEYMASTER_CONTEXT_CHAPS_CRYPTO_OPERATION_H_
#include <memory>
#include <string>
#include <base/memory/weak_ptr.h>
#include <base/optional.h>
#include <brillo/secure_blob.h>
#include "arc/keymaster/context/crypto_operation.h"
namespace arc {
namespace keymaster {
namespace context {
class ChapsClient;
class ContextAdaptor;
extern const MechanismDescription kCkmRsaPkcsSign;
extern const MechanismDescription kCkmSha256RsaPkcsSign;
// Implement operations by forwarding them to Chaps via |ChapsClient|.
class ChapsCryptoOperation : public CryptoOperation {
public:
ChapsCryptoOperation(base::WeakPtr<ContextAdaptor> context_adaptor,
const std::string& label,
const brillo::Blob& id);
~ChapsCryptoOperation() override;
// Not copyable nor assignable.
ChapsCryptoOperation(const ChapsCryptoOperation&) = delete;
ChapsCryptoOperation& operator=(const ChapsCryptoOperation&) = delete;
// CryptoOperation overrides:
base::Optional<uint64_t> Begin(MechanismDescription description) override;
base::Optional<brillo::Blob> Update(const brillo::Blob& input) override;
base::Optional<brillo::Blob> Finish() override;
bool Abort() override;
bool IsSupportedMechanism(MechanismDescription description) const override;
private:
const base::WeakPtr<ContextAdaptor> context_adaptor_;
// Key label and ID in Chaps, correspond to PKCS#11 CKA_LABEL and CKA_ID.
const std::string label_;
const brillo::Blob id_;
// Chaps client is allocated in Begin, and released in Finish/Abort.
std::unique_ptr<ChapsClient> chaps_;
};
} // namespace context
} // namespace keymaster
} // namespace arc
#endif // ARC_KEYMASTER_CONTEXT_CHAPS_CRYPTO_OPERATION_H_