From 532936ad820f105120c4d178943d9220c91e47ef Mon Sep 17 00:00:00 2001 From: Soyoung Kim Date: Fri, 28 Dec 2012 17:39:15 +0900 Subject: [PATCH] Revert "Modify get encryption/decryption key from device unique key" This reverts commit 807b066980d24c3bd5874493895fff9aee74efb0. --- build/encryption/CMakeLists.txt | 1 - .../include/dpl/encryption/resource_decryption.h | 2 +- modules/encryption/src/resource_decryption.cpp | 63 ++++++++------------- modules/encryption/src/resource_encryption.cpp | 66 +++++++++++++--------- packaging/wrt-commons.spec | 5 -- 5 files changed, 64 insertions(+), 73 deletions(-) diff --git a/build/encryption/CMakeLists.txt b/build/encryption/CMakeLists.txt index 99b7a35..710ada6 100644 --- a/build/encryption/CMakeLists.txt +++ b/build/encryption/CMakeLists.txt @@ -23,7 +23,6 @@ INCLUDE(FindPkgConfig) PKG_CHECK_MODULES(SYS_ENCRYPTION dlog openssl - osp-appfw REQUIRED ) diff --git a/modules/encryption/include/dpl/encryption/resource_decryption.h b/modules/encryption/include/dpl/encryption/resource_decryption.h index eaf8ad8..c22b1d2 100644 --- a/modules/encryption/include/dpl/encryption/resource_decryption.h +++ b/modules/encryption/include/dpl/encryption/resource_decryption.h @@ -50,7 +50,7 @@ class ResourceDecryptor private: AES_KEY* GetDecryptionKey(); - AES_KEY m_decKey; + AES_KEY *m_decKey; }; } //namespace WRTDecryptor diff --git a/modules/encryption/src/resource_decryption.cpp b/modules/encryption/src/resource_decryption.cpp index 6b9f8e8..db45f81 100644 --- a/modules/encryption/src/resource_decryption.cpp +++ b/modules/encryption/src/resource_decryption.cpp @@ -21,11 +21,6 @@ */ #include #include -#ifdef Try -#undef Try -#endif -#include -#include #include #include @@ -33,17 +28,19 @@ #include namespace { -#define BITS_SIZE 128 -#define KEY_SIZE 16 +inline std::string GetDefaultEncryptKeyPath() { + return "/opt/share/widget/data/"; +} } - namespace WRTDecryptor{ -ResourceDecryptor::ResourceDecryptor() +ResourceDecryptor::ResourceDecryptor() : + m_decKey(NULL) { LogDebug("Started Decryption"); } -ResourceDecryptor::ResourceDecryptor(std::string userKey) +ResourceDecryptor::ResourceDecryptor(std::string userKey) : + m_decKey(NULL) { LogDebug("Finished Decryption"); SetDecryptionKey(userKey); @@ -51,57 +48,47 @@ ResourceDecryptor::ResourceDecryptor(std::string userKey) ResourceDecryptor::~ResourceDecryptor() { + delete m_decKey; } void ResourceDecryptor::SetDecryptionKey(std::string userKey) { - if (userKey.empty()) { - return; - } - using namespace Tizen; - using namespace Tizen::Base; - - Tizen::Base::String appId; - appId.Format(userKey.size(), L"%s", userKey.c_str()); - Tizen::Security::ISecretKey* pSecretKey = - Tizen::Security::_DeviceKeyGenerator::GenerateDeviceKeyN(appId, KEY_SIZE); + /* TODO : get key from secure storage */ + std::string keyPath = GetDefaultEncryptKeyPath() + userKey + "_dec"; + LogDebug("Description Key path : " << keyPath); - Tizen::Base::ByteBuffer* bf = pSecretKey->GetEncodedN(); - unsigned char *key = new unsigned char[KEY_SIZE+1]; - - int i=0; - while(bf->HasRemaining()) { - byte b; - bf->GetByte(b); - key[i] = b; - i++; + FILE* fp = fopen(keyPath.c_str(), "rb"); + if (fp == NULL) { + ThrowMsg(ResourceDecryptor::Exception::GetDecKeyFailed, + "Failed to get decryption key"); } - key[KEY_SIZE] = '\n'; - if ( 0 > AES_set_decrypt_key(key, BITS_SIZE, &m_decKey)) { - delete key; + m_decKey = new AES_KEY; + size_t resultSize =fread(m_decKey, 1, sizeof(AES_KEY),fp); + if (resultSize!= sizeof(AES_KEY)) ThrowMsg(ResourceDecryptor::Exception::GetDecKeyFailed, - "Failed to create decryption key"); - } - delete key; + "Failed to get AES key"); + + fclose(fp); } AES_KEY* ResourceDecryptor::GetDecryptionKey() { - return &m_decKey; + return m_decKey; } void ResourceDecryptor::GetDecryptedChunk(unsigned char* inBuf, unsigned char* decBuf, size_t inBufSize) { Assert(decBuf); - if (decBuf == NULL) { + Assert(m_decKey); + if (decBuf == NULL || m_decKey == NULL) { ThrowMsg(ResourceDecryptor::Exception::EncryptionFailed, "Failed to Get Decryption Chunk"); } unsigned char ivec[16] = {0, }; - AES_cbc_encrypt(inBuf, decBuf, inBufSize, &m_decKey, ivec, AES_DECRYPT); + AES_cbc_encrypt(inBuf, decBuf, inBufSize, m_decKey, ivec, AES_DECRYPT); LogDebug("Success decryption"); } diff --git a/modules/encryption/src/resource_encryption.cpp b/modules/encryption/src/resource_encryption.cpp index 9110b7f..e89940e 100644 --- a/modules/encryption/src/resource_encryption.cpp +++ b/modules/encryption/src/resource_encryption.cpp @@ -22,20 +22,18 @@ #include #include -#ifdef Try -#undef Try -#endif -#include -#include - #include #include namespace { #define BITS_SIZE 128 -#define KEY_SIZE 16 -} +const char* ENCRYPTION_FILE = "_enc"; +const char* DECRYPTION_FILE = "_dec"; +inline std::string GetDefaultEncryptKeyPath() { + return "/opt/share/widget/data"; +} +} namespace WRTEncryptor{ ResourceEncryptor::ResourceEncryptor() { @@ -61,32 +59,44 @@ void ResourceEncryptor::CreateEncryptionKey(std::string userKey) return; } - using namespace Tizen; - using namespace Tizen::Base; - Tizen::Base::String appId; - appId.Format(userKey.size(), L"%s", userKey.c_str()); - Tizen::Security::ISecretKey* pSecretKey = - Tizen::Security::_DeviceKeyGenerator::GenerateDeviceKeyN(appId, KEY_SIZE); - - Tizen::Base::ByteBuffer* bf = pSecretKey->GetEncodedN(); - unsigned char *key = new unsigned char[KEY_SIZE+1]; - - int i=0; - while(bf->HasRemaining()) { - byte b; - bf->GetByte(b); - key[i] = b; - i++; - } - key[KEY_SIZE] = '\n'; + AES_KEY decKey; + const unsigned char* key = reinterpret_cast( + const_cast(userKey.c_str())); if ( 0 > AES_set_encrypt_key(key, BITS_SIZE, &m_encKey)) { - delete key; ThrowMsg(ResourceEncryptor::Exception::CreateEncKeyFailed, "Failed to create encryption key"); } - delete key; + if ( 0 > AES_set_decrypt_key(key, BITS_SIZE, &decKey)) { + ThrowMsg(ResourceEncryptor::Exception::CreateDecKeyFailed, + "Failed to create decryption key"); + } + + std::string encPath, decPath; + + encPath = GetDefaultEncryptKeyPath() + "/" + userKey + ENCRYPTION_FILE; + decPath = GetDefaultEncryptKeyPath() + "/" + userKey + DECRYPTION_FILE; + + /* TODO : save keys to secure storage */ + LogDebug("Encryption Key path " << encPath); + LogDebug("Decryption Key path " << decPath); + + FILE* encFp = fopen(encPath.c_str(), "wb"); + if (encFp == NULL) { + ThrowMsg(ResourceEncryptor::Exception::CreateEncKeyFileFailed, + "Failed to save encryption key"); + } + fwrite(&m_encKey, 1, sizeof(m_encKey), encFp); + fclose(encFp); + + FILE* decFp = fopen(decPath.c_str(), "wb"); + if (decFp == NULL) { + ThrowMsg(ResourceEncryptor::Exception::CreateDecKeyFileFailed, + "Failed to save decryption key"); + } + fwrite(&decKey, 1, sizeof(decKey), decFp); + fclose(decFp); LogDebug("Success to create ecryption and decryption key"); } diff --git a/packaging/wrt-commons.spec b/packaging/wrt-commons.spec index 84761a5..92eb5e0 100644 --- a/packaging/wrt-commons.spec +++ b/packaging/wrt-commons.spec @@ -23,11 +23,6 @@ BuildRequires: pkgconfig(libxml-2.0) BuildRequires: pkgconfig(openssl) BuildRequires: pkgconfig(libiri) BuildRequires: pkgconfig(libidn) -BuildRequires: pkgconfig(osp-appfw) -BuildRequires: osp-appfw-internal-devel - -# runtime requires -Requires: osp-appfw %description Wrt common library -- 2.7.4