#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(
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,
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,
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);
}