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_encryption.cpp
18 * @author Soyoung Kim (sy037.kim@samsung.com)
20 * @brief Implementation file for resource encryption
23 #include <dpl/encryption/resource_encryption.h>
26 #include <dpl/log/log.h>
28 #include <FBaseByteBuffer.h>
29 #include <security/FSecCrypto_TrustZoneService.h>
35 namespace WRTEncryptor {
36 ResourceEncryptor::ResourceEncryptor() :
39 LogDebug("Started Encrytion");
42 ResourceEncryptor::~ResourceEncryptor()
44 LogDebug("Finished Encrytion");
47 int ResourceEncryptor::GetBlockSize(int inSize)
49 if ((inSize % AES_BLOCK_SIZE) != 0) {
50 return (( inSize / AES_BLOCK_SIZE) + 1) * AES_BLOCK_SIZE;
55 void ResourceEncryptor::CreateEncryptionKey(std::string userKey)
57 if (userKey.empty()) {
61 char* pKey = GetDeviceUniqueKey(const_cast<char*>(userKey.c_str()),
62 userKey.size(), KEY_SIZE);
63 unsigned char *key = reinterpret_cast<unsigned char*>(pKey);
65 if (0 > AES_set_encrypt_key(key, BITS_SIZE, &m_encKey)) {
66 ThrowMsg(ResourceEncryptor::Exception::CreateEncKeyFailed,
67 "Failed to create encryption key");
69 LogDebug("Success to create ecryption and decryption key");
72 AES_KEY ResourceEncryptor::GetEncryptionkey()
77 void ResourceEncryptor::EncryptChunk(unsigned char*
79 unsigned char* encBuf,
85 unsigned char ivec[16] = { 0, };
87 AES_cbc_encrypt(inputBuf, encBuf, chunkSize, &m_encKey, ivec, AES_ENCRYPT);
90 int ResourceEncryptor::EncryptChunkByTrustZone(
92 const unsigned char *plainBuffer,
95 using namespace Tizen::Base;
97 const byte *b_pkgid = reinterpret_cast<const byte*>(pkgid.c_str());
99 appInfo.Construct(pkgid.length());
100 appInfo.SetArray(b_pkgid, 0, pkgid.length());
103 Tizen::Security::Crypto::_TrustZoneService* pInstance;
104 pInstance = Tizen::Security::Crypto::_TrustZoneService::GetInstance();
107 pBuf.Construct(pBufSize);
108 const byte *pByte = reinterpret_cast<const byte*>(plainBuffer);
109 pBuf.SetArray(pByte, 0, pBufSize);
112 ByteBuffer *getBuffer =
113 pInstance->_TrustZoneService::EncryptN(appInfo, pBuf);
114 m_getBuffer = reinterpret_cast<void*>(getBuffer);
116 return getBuffer->GetRemaining();
119 void ResourceEncryptor::getEncStringByTrustZone(unsigned char *encBuffer)
121 using namespace Tizen::Base;
122 LogDebug("Get encrypted String");
123 ByteBuffer *buffer = reinterpret_cast<ByteBuffer*>(m_getBuffer);
124 memcpy(encBuffer, buffer->GetPointer(), buffer->GetRemaining());
127 } //namespace ResourceEnc