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
22 #include <dpl/encryption/resource_decryption.h>
26 #include <dpl/log/log.h>
27 #include <dpl/exception.h>
30 inline std::string GetDefaultEncryptKeyPath() {
31 return "/opt/share/widget/data/";
34 namespace WRTDecryptor{
35 ResourceDecryptor::ResourceDecryptor() :
38 LogDebug("Started Decryption");
41 ResourceDecryptor::ResourceDecryptor(std::string userKey) :
44 LogDebug("Finished Decryption");
45 SetDecryptionKey(userKey);
48 ResourceDecryptor::~ResourceDecryptor()
53 void ResourceDecryptor::SetDecryptionKey(std::string userKey)
55 /* TODO : get key from secure storage */
56 std::string keyPath = GetDefaultEncryptKeyPath() + userKey + "_dec";
57 LogDebug("Description Key path : " << keyPath);
59 FILE* fp = fopen(keyPath.c_str(), "rb");
61 ThrowMsg(ResourceDecryptor::Exception::GetDecKeyFailed,
62 "Failed to get decryption key");
65 m_decKey = new AES_KEY;
66 size_t resultSize =fread(m_decKey, 1, sizeof(AES_KEY),fp);
67 if (resultSize!= sizeof(AES_KEY))
68 ThrowMsg(ResourceDecryptor::Exception::GetDecKeyFailed,
69 "Failed to get AES key");
74 AES_KEY* ResourceDecryptor::GetDecryptionKey()
79 void ResourceDecryptor::GetDecryptedChunk(unsigned char*
80 inBuf, unsigned char* decBuf, size_t inBufSize)
84 if (decBuf == NULL || m_decKey == NULL) {
85 ThrowMsg(ResourceDecryptor::Exception::EncryptionFailed,
86 "Failed to Get Decryption Chunk");
88 unsigned char ivec[16] = {0, };
90 AES_cbc_encrypt(inBuf, decBuf, inBufSize, m_decKey, ivec, AES_DECRYPT);
91 LogDebug("Success decryption");
94 } //namespace WRTDecryptor