Add data structures
[platform/core/security/libwebappenc.git] / srcs / web_app_enc.c
index 083addf..22da420 100644 (file)
@@ -26,6 +26,7 @@
 #include "decrypt_migrated_wgt.h"
 #include "key_handler.h"
 #include "crypto_service.h"
+#include "types.h"
 #include "wae_log.h"
 
 int _wae_encrypt_downloaded_web_application(
@@ -37,57 +38,65 @@ int _wae_encrypt_downloaded_web_application(
                        pencrypted_data_len == NULL)
                return WAE_ERROR_INVALID_PARAMETER;
 
-       // get APP_DEK.
-       //   if not exists, create APP_DEK
-       unsigned char *dek = NULL;
-       size_t dek_len = -1;
-       int ret = get_app_dek(pkg_id, app_type, &dek, &dek_len);
+       const crypto_element_s *e = NULL;
+       int ret = get_app_ce(pkg_id, app_type, false, &e);
 
        if (ret == WAE_ERROR_NO_KEY)
-               ret = create_app_dek(pkg_id, app_type, &dek, &dek_len);
+               ret = create_app_ce(pkg_id, app_type, &e);
 
        if (ret != WAE_ERROR_NONE)
-               goto error;
+               return ret;
 
-       // encrypt
-       ret = encrypt_aes_cbc(dek, dek_len, data, data_len, pencrypted_data, pencrypted_data_len);
+       raw_buffer_s _data;
+       _data.buf = (unsigned char *)data;
+       _data.size = data_len;
 
-error:
-       free(dek);
+       raw_buffer_s *_encrypted_data = NULL;
+       ret = encrypt_aes_cbc(e, &_data, &_encrypted_data);
+       if (ret != WAE_ERROR_NONE)
+               return ret;
+
+       *pencrypted_data = _encrypted_data->buf;
+       *pencrypted_data_len = _encrypted_data->size;
 
-       return ret;
+       free(_encrypted_data);
+
+       return WAE_ERROR_NONE;
 }
 
 int _wae_decrypt_downloaded_web_application(const char *pkg_id, wae_app_type_e app_type,
                const unsigned char *data, size_t data_len,
                unsigned char **pdecrypted_data, size_t *pdecrypted_data_len)
 {
-
        if (pkg_id == NULL || data == NULL || data_len == 0 || pdecrypted_data == NULL ||
                        pdecrypted_data_len == NULL)
                return WAE_ERROR_INVALID_PARAMETER;
 
-       unsigned char *dek = NULL;
-       size_t dek_len = -1;
-       int ret = get_app_dek(pkg_id, app_type, &dek, &dek_len);
+       raw_buffer_s _data;
+       _data.buf = (unsigned char *)data;
+       _data.size = data_len;
+
+       const crypto_element_s *ce = NULL;
+       int ret = get_app_ce(pkg_id, app_type, true, &ce);
+
+       if (ret != WAE_ERROR_NONE)
+               return ret;
 
-       if (app_type == WAE_DOWNLOADED_GLOBAL_APP && ret == WAE_ERROR_NO_KEY) {
-               WAE_SLOGI("app dek for decrypt downloaded app(%s) doesn't exist. This case would be "
-                                 "needed secure-storage data migration.", pkg_id);
+       raw_buffer_s *_decrypted_data = NULL;
+       if (ce->is_migrated_app)
+               ret = decrypt_by_old_ss_algo(ce, &_data, &_decrypted_data);
+       else
+               ret = decrypt_aes_cbc(ce, &_data, &_decrypted_data);
 
-               ret = decrypt_by_old_ss_algo(pkg_id, data, data_len, pdecrypted_data, pdecrypted_data_len);
-               goto error; // always go to error to skip decyprt_aes_cbc
-       } else if (ret != WAE_ERROR_NONE) {
-               goto error;
-       }
+       if (ret != WAE_ERROR_NONE)
+               return ret;
 
-       // decrypt
-       ret = decrypt_aes_cbc(dek, dek_len, data, data_len, pdecrypted_data, pdecrypted_data_len);
+       *pdecrypted_data = _decrypted_data->buf;
+       *pdecrypted_data_len = _decrypted_data->size;
 
-error:
-       free(dek);
+       free(_decrypted_data);
 
-       return ret;
+       return WAE_ERROR_NONE;
 }
 
 int _wae_encrypt_preloaded_web_application(const char *pkg_id,
@@ -98,23 +107,31 @@ int _wae_encrypt_preloaded_web_application(const char *pkg_id,
                        pencrypted_data_len == NULL)
                return WAE_ERROR_INVALID_PARAMETER;
 
-       unsigned char *dek = NULL;
-       size_t dek_len = -1;
-       int ret = get_preloaded_app_dek(pkg_id, &dek, &dek_len);
+       const crypto_element_s *e = NULL;
+       int ret = get_preloaded_app_ce(pkg_id, &e);
 
        if (ret == WAE_ERROR_NO_KEY)
-               ret = create_preloaded_app_dek(pkg_id, &dek, &dek_len);
+               ret = create_preloaded_app_ce(pkg_id, &e);
 
        if (ret != WAE_ERROR_NONE)
-               goto error;
+               return ret;
 
-       // encrypt
-       ret = encrypt_aes_cbc(dek, dek_len, data, data_len, pencrypted_data, pencrypted_data_len);
+       raw_buffer_s _data;
+       _data.buf = (unsigned char *)data;
+       _data.size = data_len;
 
-error:
-       free(dek);
+       raw_buffer_s *_encrypted_data = NULL;
+       ret = encrypt_aes_cbc(e, &_data, &_encrypted_data);
+
+       if (ret != WAE_ERROR_NONE)
+               return ret;
 
-       return ret;
+       *pencrypted_data = _encrypted_data->buf;
+       *pencrypted_data_len = _encrypted_data->size;
+
+       free(_encrypted_data);
+
+       return WAE_ERROR_NONE;
 }
 
 int _wae_decrypt_preloaded_web_application(const char *pkg_id, wae_app_type_e app_type,
@@ -150,8 +167,7 @@ int wae_decrypt_web_application(const char *pkg_id, wae_app_type_e app_type,
                                data, data_len, pdecrypted_data, pdecrypted_data_len);
 }
 
-
 int wae_remove_app_dek(const char *pkg_id, wae_app_type_e app_type)
 {
-       return remove_app_dek(pkg_id, app_type);
+       return remove_app_ce(pkg_id, app_type);
 }