2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 * @file resource_decryption.cpp
18 * @author Soyoung Kim (sy037.kim@samsung.com)
20 * @brief Implementation file for resource decryption
23 #include <dpl/encryption/resource_decryption.h>
27 #include <dpl/log/log.h>
28 #include <dpl/exception.h>
31 inline std::string GetDefaultEncryptKeyPath() {
32 return "/opt/share/widget/data/";
35 namespace WRTDecryptor{
36 ResourceDecryptor::ResourceDecryptor() :
39 LogDebug("Started Decryption");
42 ResourceDecryptor::ResourceDecryptor(std::string userKey) :
45 LogDebug("Finished Decryption");
46 SetDecryptionKey(userKey);
49 ResourceDecryptor::~ResourceDecryptor()
54 void ResourceDecryptor::SetDecryptionKey(std::string userKey)
56 /* TODO : get key from secure storage */
57 std::string keyPath = GetDefaultEncryptKeyPath() + userKey + "_dec";
58 LogDebug("Description Key path : " << keyPath);
60 FILE* fp = fopen(keyPath.c_str(), "rb");
62 ThrowMsg(ResourceDecryptor::Exception::GetDecKeyFailed,
63 "Failed to get decryption key");
66 m_decKey = new AES_KEY;
67 size_t resultSize =fread(m_decKey, 1, sizeof(AES_KEY),fp);
68 if (resultSize!= sizeof(AES_KEY))
69 ThrowMsg(ResourceDecryptor::Exception::GetDecKeyFailed,
70 "Failed to get AES key");
75 AES_KEY* ResourceDecryptor::GetDecryptionKey()
80 void ResourceDecryptor::GetDecryptedChunk(unsigned char*
81 inBuf, unsigned char* decBuf, size_t inBufSize)
85 if (decBuf == NULL || m_decKey == NULL) {
86 ThrowMsg(ResourceDecryptor::Exception::EncryptionFailed,
87 "Failed to Get Decryption Chunk");
89 unsigned char ivec[16] = {0, };
91 AES_cbc_encrypt(inBuf, decBuf, inBufSize, m_decKey, ivec, AES_DECRYPT);
92 LogDebug("Success decryption");
95 } //namespace WRTDecryptor