#include <platform/decider.h>
+#include <generic-backend/exception.h>
#include <sw-backend/store.h>
#include <tz-backend/store.h>
namespace CKM {
namespace Crypto {
+namespace {
+CryptoBackend chooseCryptoBackend(DataType dataType, bool exportable) {
+// The list of items that MUST be support by OpenSSL
+ if (dataType.isCertificate())
+ return CryptoBackend::OpenSSL;
+
+ if (dataType.isBinaryData())
+ return CryptoBackend::OpenSSL;
+
+ if (exportable)
+ return CryptoBackend::OpenSSL;
+
+// This is the place where we can use trust zone backend
+// Examples:
+//
+// if (dataType.isKeyPrivate())
+// return CryptoBackend::TrustZone;
+
+// This item does not met Trust Zone requirements. Let's use software backend
+ return CryptoBackend::OpenSSL;
+}
+} // namespace
+
Decider::Decider()
: m_swStore(new SW::Store(CryptoBackend::OpenSSL))
, m_tzStore(new TZ::Store(CryptoBackend::TrustZone))
{}
-GStore& Decider::getStore(const Token &token) {
+GStore& Decider::getStore(const Token &token) const {
return getStore(token.backendId);
};
-GStore& Decider::getStore(CryptoBackend cryptoBackend) {
+GStore& Decider::getStore(CryptoBackend cryptoBackend) const {
GStore *gStore = NULL;
if (cryptoBackend == CryptoBackend::OpenSSL)
gStore = m_swStore.get();
if (gStore)
return *gStore;
- LogError("Backend not available. BackendId: " << (int)cryptoBackend);
- ThrowMsg(CKM::Crypto::Exception::Base,
- "Backend not available. BackendId: " << (int)cryptoBackend);
+ ThrowErr(Exc::Crypto::InternalError,
+ "Backend not available. BackendId: ", (int)cryptoBackend);
}
-GStore& Decider::getStore(DataType data, bool exportable) {
+GStore& Decider::getStore(DataType data, bool exportable) const {
return getStore(chooseCryptoBackend(data, exportable));
}
-CryptoBackend Decider::chooseCryptoBackend(DataType dataType, bool exportable) const {
-// The list of items that MUST be support by OpenSSL
- if (dataType.isCertificate())
- return CryptoBackend::OpenSSL;
-
- if (dataType.isBinaryData())
- return CryptoBackend::OpenSSL;
-
- if (exportable)
- return CryptoBackend::OpenSSL;
-
-// This is the place where we can use trust zone backend
-// Examples:
-//
-// if (dataType.isKeyPrivate())
-// return CryptoBackend::TrustZone;
-
-// This item does not met Trust Zone requirements. Let's use software backend
- return CryptoBackend::OpenSSL;
-}
-
} // namespace Crypto
} // namespace CKM