blob: 00139387e3cc954e9924a76d9052df1980e6e4c1 [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.
#include "arc/keymaster/context/crypto_operation.h"
namespace arc {
namespace keymaster {
namespace context {
namespace {
constexpr char kNone[] = "none";
constexpr char kUnsupported[] = "unsupported";
} // namespace
MechanismDescription::MechanismDescription(const MechanismDescription& other) =
default;
MechanismDescription& MechanismDescription::operator=(
const MechanismDescription& other) = default;
bool MechanismDescription::operator==(const MechanismDescription& other) const {
return type == other.type && algorithm == other.algorithm &&
digest == other.digest && padding == other.padding &&
block_mode == other.block_mode;
}
bool MechanismDescription::operator<(const MechanismDescription& other) const {
return type < other.type || algorithm < other.algorithm ||
digest < other.digest || padding < other.padding ||
block_mode < other.block_mode;
}
CryptoOperation::CryptoOperation() = default;
CryptoOperation::~CryptoOperation() = default;
std::ostream& operator<<(std::ostream& os,
MechanismDescription const& description) {
os << "{type=";
switch (description.type) {
case OperationType::kSign:
os << "sign";
break;
case OperationType::kUnsupported:
os << kUnsupported;
break;
}
os << ", algorithm=";
switch (description.algorithm) {
case Algorithm::kRsa:
os << "RSA";
break;
case Algorithm::kUnsupported:
os << kUnsupported;
break;
}
os << ", digest=";
switch (description.digest) {
case Digest::kSha256:
os << "SHA256";
break;
case Digest::kNone:
os << kNone;
break;
case Digest::kUnsupported:
os << kUnsupported;
break;
}
os << ", padding=";
switch (description.padding) {
case Padding::kPkcs7:
os << "PKCS7";
break;
case Padding::kPkcs1:
os << "PKCS1";
break;
case Padding::kNone:
os << kNone;
break;
case Padding::kUnsupported:
os << kUnsupported;
break;
}
os << ", blockmode=";
switch (description.block_mode) {
case BlockMode::kCbc:
os << "CBC";
break;
case BlockMode::kNone:
os << kNone;
break;
case BlockMode::kUnsupported:
os << kUnsupported;
break;
}
return os << "}";
}
} // namespace context
} // namespace keymaster
} // namespace arc