Function verifySignature may take certificate alias now.
authorBartlomiej Grzelewski <b.grzelewski@samsung.com>
Wed, 2 Jul 2014 12:22:49 +0000 (14:22 +0200)
committerBartlomiej Grzelewski <b.grzelewski@samsung.com>
Fri, 12 Sep 2014 12:58:49 +0000 (14:58 +0200)
Change-Id: I1f8d9281acb77b69cb126ab0df61c6990f234cc7

src/manager/common/generic-key.h
src/manager/service/ckm-logic.cpp

index 8739e54..7891cb2 100644 (file)
@@ -33,7 +33,7 @@ public:
 
     GenericKey();
     GenericKey(const GenericKey &second);
-    GenericKey(const RawBuffer& buffer, const std::string &pass);
+    GenericKey(const RawBuffer& buffer, const std::string &pass = std::string());
     GenericKey(EvpShPtr pkey, KeyType type);
 
     virtual KeyType getType() const;
index 402365d..3c9d7bb 100644 (file)
@@ -647,26 +647,34 @@ RawBuffer CKMLogic::verifySignature(
         const HashAlgorithm hash,
         const RSAPaddingAlgorithm padding)
 {
-
-    DBRow row;
-    CryptoService cs;
-
     int retCode = CKM_API_ERROR_VERIFICATION_FAILED;
+
     try {
         do {
-            retCode = getDataHelper(cred, DBDataType::KEY_RSA_PUBLIC, publicKeyOrCertAlias, password, row);
-
-            if (retCode != CKM_API_SUCCESS) {
+            CryptoService cs;
+            DBRow row;
+            GenericKey key;
+
+            retCode = getDataHelper(cred, DBDataType::DB_KEY_FIRST, publicKeyOrCertAlias, password, row);
+
+            if (retCode == CKM_API_SUCCESS) {
+                key = GenericKey(row.data);
+            } else if (retCode == CKM_API_ERROR_DB_ALIAS_UNKNOWN) {
+                retCode = getDataHelper(cred, DBDataType::CERTIFICATE, publicKeyOrCertAlias, password, row);
+                if (retCode != CKM_API_SUCCESS)
+                    break;
+                CertificateImpl cert(row.data, DataFormat::FORM_DER);
+                key = cert.getGenericKey();
+            } else {
                 break;
             }
 
-            GenericKey keyParsed(row.data, std::string());
-            if (keyParsed.empty()) {
+            if (key.empty()) {
                 retCode = CKM_API_ERROR_SERVER_ERROR;
                 break;
             }
 
-            retCode = cs.verifySignature(keyParsed, message, signature, hash, padding);
+            retCode = cs.verifySignature(key, message, signature, hash, padding);
         } while(0);
     } catch (const CryptoService::Exception::Crypto_internal &e) {
         LogError("KeyProvider failed with message: " << e.GetMessage());