diff options
Diffstat (limited to 'tests/wae_tests.c')
-rw-r--r-- | tests/wae_tests.c | 1374 |
1 files changed, 720 insertions, 654 deletions
diff --git a/tests/wae_tests.c b/tests/wae_tests.c index abaf4aa..c724d21 100644 --- a/tests/wae_tests.c +++ b/tests/wae_tests.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd All Rights Reserved + * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -37,193 +37,206 @@ static int tc_fail = 0; #define FPRINTF(format, args...) fprintf(stdout, format, ##args) -static int RUNTC(int (*tc_method)(), const char* tc_name) +static int RUNTC(int (*tc_method)(), const char *tc_name) { - int ret = WAE_ERROR_NONE; - FPRINTF("[%02d:%s]started...\n", tc_seq, tc_name); - ret = tc_method(); - if(ret == WAE_ERROR_NONE) { - FPRINTF("[%02d:%s]ended. SUCCESS\n\n", tc_seq, tc_name); - tc_succ++; - } else { - FPRINTF("[%02d:%s]ended. FAIL. error=%d\n\n", tc_seq, tc_name, ret); - tc_fail++; - } - tc_seq++; - return ret; + int ret = WAE_ERROR_NONE; + FPRINTF("[%02d:%s]started...\n", tc_seq, tc_name); + ret = tc_method(); + + if (ret == WAE_ERROR_NONE) { + FPRINTF("[%02d:%s]ended. SUCCESS\n\n", tc_seq, tc_name); + tc_succ++; + } else { + FPRINTF("[%02d:%s]ended. FAIL. error=%d\n\n", tc_seq, tc_name, ret); + tc_fail++; + } + + tc_seq++; + return ret; } static void PRINT_TC_SUMMARY() { - FPRINTF("\n"); - FPRINTF("===============================================\n"); - FPRINTF(" TOTAL = %d, SUCCESS = %d, FAIL = %d\n", tc_seq, tc_succ, tc_fail); - FPRINTF("===============================================\n"); + FPRINTF("\n"); + FPRINTF("===============================================\n"); + FPRINTF(" TOTAL = %d, SUCCESS = %d, FAIL = %d\n", tc_seq, tc_succ, tc_fail); + FPRINTF("===============================================\n"); } -void _print_binary_to_hex(const char* msg, unsigned char* bin, size_t len) +void _print_binary_to_hex(const char *msg, unsigned char *bin, size_t len) { - size_t i = 0; - FPRINTF("%s", msg); - for(i=0; i<len; i++) { - FPRINTF("%02x", bin[i]); - } - FPRINTF("\n"); + size_t i = 0; + FPRINTF("%s", msg); + + for (i = 0; i < len; i++) { + FPRINTF("%02x", bin[i]); + } + + FPRINTF("\n"); } -int _compare_binary(const unsigned char* b1, size_t b1Len, const unsigned char* b2, size_t b2Len) +int _compare_binary(const unsigned char *b1, size_t b1Len, const unsigned char *b2, size_t b2Len) { - size_t i = 0; - if(b1Len != b2Len) - return b1Len - b2Len; - for(i=0; i<b1Len; i++) { - if(b1[i] != b2[i]) - return b1[i] - b2[i]; - } - return 0; -} + size_t i = 0; + + if (b1Len != b2Len) + return b1Len - b2Len; + for (i = 0; i < b1Len; i++) { + if (b1[i] != b2[i]) + return b1[i] - b2[i]; + } + + return 0; +} //================================================================================= // tests for crypto_service.h //================================================================================= int wae_tc_encrypt_decrypt_app_dek() { - int ret = WAE_ERROR_NONE; - unsigned char dek[32]; - unsigned char* encryptedDek = NULL; - size_t encryptedDekLen = 0; - unsigned char* decryptedDek = NULL; - size_t decryptedDekLen = 0; - - const char* priKey = - "-----BEGIN RSA PRIVATE KEY-----\n" - "MIIEpgIBAAKCAQEA0kWtjpRO7Zh2KX2naVE/BDJdrfwK9xexfNA0MkY2VJ4J2AKM\n" - "YTj1D1jntceryupCEHOvP3rum+WsFvPXduz9+VKnSsSqj4jcTUubtpDUGA5G79Iq\n" - "LEPFuSBaqI8Uwkzd08pE+s30oaJDnNazMhSq8JkqBPoCCwtUs73ruE9VbtsBO/kT\n" - "lASIAfe8nXqcJLcDQgWYhizjJw0Pi6d74oCwS2OTvQDNvsXfFnA0ZJEEYw/rZLir\n" - "j7OHoOjz+Sh5N+1uA3Up6SPPEbHuP6L12YxqHdy7gnJXodLhvE/cR4SN9VW7+qmC\n" - "MBjmLkBejGrEX3STS9sLI7MZHu9Y26dwuYb4+wIDAQABAoIBAQCwxqV/vc2RUGDe\n" - "xuXM0+IvrAw37jJlw4SS0xNexMp+XxMViCbuwYy851h96azS/himbiuCKd6aL/96\n" - "mGunbtyiFEvSvv5Jh5z2Wr9BQAcfZjla+4w7BIsg9UNifE/OfgLsQBu34xhsHtfK\n" - "7nFehCOl/I5n+qtnD5KZPe0DWacQdwY4vEAj6YyXdb2bBg+MiwE9KVxGEIUDbklh\n" - "Is70JXczjLZCS+lIpOKh0/lbZmBZePoUbVTtS+GvtPTpQC/aTHRkwGoEtuPEWpbL\n" - "0Q1d6zO+vDJVLJlb5FF2haghs8IlqAxkkPjeUTNye+WktRrDQxmPu/blbxQrygfq\n" - "Au5tBnsxAoGBAOiVtcpg32puo3Yq2Y78oboe9PuHaQP0d3DhwP3/7J0BeNslpjW7\n" - "E1LWsVsCanxTE8XPUdFfAWgMk7lQqESN0wawGmSmWk+eQPZdjHanBaC8vh7aKjo6\n" - "q9FdT1DKjrRi23QyDco3f3E7hvM93IAAhw1ikNu8DT19JAxtdeMh5WAZAoGBAOdw\n" - "6neEvIFXh3RWEv2/GKVhVR8mxDqxmuFdXpOF+YWsK0Tg4uC8jm9kUGnwXgT2Mjke\n" - "oAwYAFcRbHQQGsxy/vkV16kv4aurTE2hMpjeXCAakwV0Pi2w1f9WnDokjgORkOmc\n" - "+QK9I8egdFPMVDfQjhLslhSUY0Eb4qcJ6q9WxfQzAoGBANSsAFybk+7oWAO3TtQW\n" - "YXOk1vIgcYAyS/0mEKixGZS/QdlxZbf/5b17nxTO8rvX416fIftG2ixgQ7vR6us0\n" - "m9+jq56ZFj9zP4eHJudf9h9yNo5TgwVXnMCGh/4iGbcMJgrrsfxUHu5VNiK5UCSj\n" - "VtqAZGDoZVryUMIkXQVhezIRAoGBAN7QUIqcGbcUA24257Wu4hVlrUN+WPCAyDEr\n" - "aL/x/ZV5eXaoYwQlw6LuGpTDOmDgfN2M5FyARuOL/LOIRaSLGXnIU4WoeUSCd8VM\n" - "6Z9Og7bMnrpjfPEUDBH02hcH1kkNPUwLOZgva2Dm0tdSIcpSWFVTu/E4Io4uQHi8\n" - "DVqc2ZsNAoGBAJT76ezXNSSv8hnrKqTpwgTicpqhRZ3eFQjyl4HRL26AJMKv++x8\n" - "4/IsVIwxaHzpbN3nnCjmAHV4gX9YpxVnvYcZflC9WZeDkwNMLmPYb3Zg27EzSMfQ\n" - "8yrfWJZo3qobipcHf1yohAt4fHk9kUKtPHEwp0xKe//rfhswLb3VCzvQ\n" - "-----END RSA PRIVATE KEY-----"; - const char* pubKey = - "-----BEGIN PUBLIC KEY-----\n" - "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0kWtjpRO7Zh2KX2naVE/\n" - "BDJdrfwK9xexfNA0MkY2VJ4J2AKMYTj1D1jntceryupCEHOvP3rum+WsFvPXduz9\n" - "+VKnSsSqj4jcTUubtpDUGA5G79IqLEPFuSBaqI8Uwkzd08pE+s30oaJDnNazMhSq\n" - "8JkqBPoCCwtUs73ruE9VbtsBO/kTlASIAfe8nXqcJLcDQgWYhizjJw0Pi6d74oCw\n" - "S2OTvQDNvsXfFnA0ZJEEYw/rZLirj7OHoOjz+Sh5N+1uA3Up6SPPEbHuP6L12Yxq\n" - "Hdy7gnJXodLhvE/cR4SN9VW7+qmCMBjmLkBejGrEX3STS9sLI7MZHu9Y26dwuYb4\n" - "+wIDAQAB\n" - "-----END PUBLIC KEY-----"; - - ret = encrypt_app_dek((const unsigned char*) pubKey, strlen(pubKey), - dek, sizeof(dek), &encryptedDek, &encryptedDekLen); - if(ret != WAE_ERROR_NONE){ - FPRINTF("...FAIL: encrypt_app_dek. ret=%d\n", ret); - ret = WAE_ERROR_CRYPTO; - goto error; - } - - ret = decrypt_app_dek((const unsigned char*) priKey, strlen(priKey), NULL, - encryptedDek, encryptedDekLen, &decryptedDek, &decryptedDekLen); - if(ret != WAE_ERROR_NONE){ - FPRINTF("...FAIL: decrypt_app_dek. ret=%d\n", ret); - ret = WAE_ERROR_CRYPTO; - goto error; - } - - _print_binary_to_hex("...ORIG DEK= ", dek, sizeof(dek)); - _print_binary_to_hex("...ENC DEK= ", encryptedDek, encryptedDekLen); - _print_binary_to_hex("...DEC DEK= ", decryptedDek, decryptedDekLen); - - if(_compare_binary(dek, sizeof(dek), decryptedDek, decryptedDekLen) != 0) { - FPRINTF("...FAIL: ORIG DEK != decrypted DEK\n"); - ret = WAE_ERROR_CRYPTO; - goto error; - } - - ret = WAE_ERROR_NONE; + int ret = WAE_ERROR_NONE; + unsigned char dek[32]; + unsigned char *encryptedDek = NULL; + size_t encryptedDekLen = 0; + unsigned char *decryptedDek = NULL; + size_t decryptedDekLen = 0; + + const char *priKey = + "-----BEGIN RSA PRIVATE KEY-----\n" + "MIIEpgIBAAKCAQEA0kWtjpRO7Zh2KX2naVE/BDJdrfwK9xexfNA0MkY2VJ4J2AKM\n" + "YTj1D1jntceryupCEHOvP3rum+WsFvPXduz9+VKnSsSqj4jcTUubtpDUGA5G79Iq\n" + "LEPFuSBaqI8Uwkzd08pE+s30oaJDnNazMhSq8JkqBPoCCwtUs73ruE9VbtsBO/kT\n" + "lASIAfe8nXqcJLcDQgWYhizjJw0Pi6d74oCwS2OTvQDNvsXfFnA0ZJEEYw/rZLir\n" + "j7OHoOjz+Sh5N+1uA3Up6SPPEbHuP6L12YxqHdy7gnJXodLhvE/cR4SN9VW7+qmC\n" + "MBjmLkBejGrEX3STS9sLI7MZHu9Y26dwuYb4+wIDAQABAoIBAQCwxqV/vc2RUGDe\n" + "xuXM0+IvrAw37jJlw4SS0xNexMp+XxMViCbuwYy851h96azS/himbiuCKd6aL/96\n" + "mGunbtyiFEvSvv5Jh5z2Wr9BQAcfZjla+4w7BIsg9UNifE/OfgLsQBu34xhsHtfK\n" + "7nFehCOl/I5n+qtnD5KZPe0DWacQdwY4vEAj6YyXdb2bBg+MiwE9KVxGEIUDbklh\n" + "Is70JXczjLZCS+lIpOKh0/lbZmBZePoUbVTtS+GvtPTpQC/aTHRkwGoEtuPEWpbL\n" + "0Q1d6zO+vDJVLJlb5FF2haghs8IlqAxkkPjeUTNye+WktRrDQxmPu/blbxQrygfq\n" + "Au5tBnsxAoGBAOiVtcpg32puo3Yq2Y78oboe9PuHaQP0d3DhwP3/7J0BeNslpjW7\n" + "E1LWsVsCanxTE8XPUdFfAWgMk7lQqESN0wawGmSmWk+eQPZdjHanBaC8vh7aKjo6\n" + "q9FdT1DKjrRi23QyDco3f3E7hvM93IAAhw1ikNu8DT19JAxtdeMh5WAZAoGBAOdw\n" + "6neEvIFXh3RWEv2/GKVhVR8mxDqxmuFdXpOF+YWsK0Tg4uC8jm9kUGnwXgT2Mjke\n" + "oAwYAFcRbHQQGsxy/vkV16kv4aurTE2hMpjeXCAakwV0Pi2w1f9WnDokjgORkOmc\n" + "+QK9I8egdFPMVDfQjhLslhSUY0Eb4qcJ6q9WxfQzAoGBANSsAFybk+7oWAO3TtQW\n" + "YXOk1vIgcYAyS/0mEKixGZS/QdlxZbf/5b17nxTO8rvX416fIftG2ixgQ7vR6us0\n" + "m9+jq56ZFj9zP4eHJudf9h9yNo5TgwVXnMCGh/4iGbcMJgrrsfxUHu5VNiK5UCSj\n" + "VtqAZGDoZVryUMIkXQVhezIRAoGBAN7QUIqcGbcUA24257Wu4hVlrUN+WPCAyDEr\n" + "aL/x/ZV5eXaoYwQlw6LuGpTDOmDgfN2M5FyARuOL/LOIRaSLGXnIU4WoeUSCd8VM\n" + "6Z9Og7bMnrpjfPEUDBH02hcH1kkNPUwLOZgva2Dm0tdSIcpSWFVTu/E4Io4uQHi8\n" + "DVqc2ZsNAoGBAJT76ezXNSSv8hnrKqTpwgTicpqhRZ3eFQjyl4HRL26AJMKv++x8\n" + "4/IsVIwxaHzpbN3nnCjmAHV4gX9YpxVnvYcZflC9WZeDkwNMLmPYb3Zg27EzSMfQ\n" + "8yrfWJZo3qobipcHf1yohAt4fHk9kUKtPHEwp0xKe//rfhswLb3VCzvQ\n" + "-----END RSA PRIVATE KEY-----"; + const char *pubKey = + "-----BEGIN PUBLIC KEY-----\n" + "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0kWtjpRO7Zh2KX2naVE/\n" + "BDJdrfwK9xexfNA0MkY2VJ4J2AKMYTj1D1jntceryupCEHOvP3rum+WsFvPXduz9\n" + "+VKnSsSqj4jcTUubtpDUGA5G79IqLEPFuSBaqI8Uwkzd08pE+s30oaJDnNazMhSq\n" + "8JkqBPoCCwtUs73ruE9VbtsBO/kTlASIAfe8nXqcJLcDQgWYhizjJw0Pi6d74oCw\n" + "S2OTvQDNvsXfFnA0ZJEEYw/rZLirj7OHoOjz+Sh5N+1uA3Up6SPPEbHuP6L12Yxq\n" + "Hdy7gnJXodLhvE/cR4SN9VW7+qmCMBjmLkBejGrEX3STS9sLI7MZHu9Y26dwuYb4\n" + "+wIDAQAB\n" + "-----END PUBLIC KEY-----"; + + ret = encrypt_app_dek((const unsigned char *) pubKey, strlen(pubKey), + dek, sizeof(dek), &encryptedDek, &encryptedDekLen); + + if (ret != WAE_ERROR_NONE) { + FPRINTF("...FAIL: encrypt_app_dek. ret=%d\n", ret); + ret = WAE_ERROR_CRYPTO; + goto error; + } + + ret = decrypt_app_dek((const unsigned char *) priKey, strlen(priKey), NULL, + encryptedDek, encryptedDekLen, &decryptedDek, &decryptedDekLen); + + if (ret != WAE_ERROR_NONE) { + FPRINTF("...FAIL: decrypt_app_dek. ret=%d\n", ret); + ret = WAE_ERROR_CRYPTO; + goto error; + } + + _print_binary_to_hex("...ORIG DEK= ", dek, sizeof(dek)); + _print_binary_to_hex("...ENC DEK= ", encryptedDek, encryptedDekLen); + _print_binary_to_hex("...DEC DEK= ", decryptedDek, decryptedDekLen); + + if (_compare_binary(dek, sizeof(dek), decryptedDek, decryptedDekLen) != 0) { + FPRINTF("...FAIL: ORIG DEK != decrypted DEK\n"); + ret = WAE_ERROR_CRYPTO; + goto error; + } + + ret = WAE_ERROR_NONE; error: - if(encryptedDek != NULL) - free(encryptedDek); - if(decryptedDek != NULL) - free(decryptedDek); + if (encryptedDek != NULL) + free(encryptedDek); + + if (decryptedDek != NULL) + free(decryptedDek); - return ret; + return ret; } int wae_tc_encrypt_decrypt_aes_cbc() { - int ret = WAE_ERROR_NONE; - - unsigned char dek[32] = {0, }; - size_t keyLen = 32; - const char* plaintext= "adbdfdfdfdfdererfdfdfererfdrerfdrer"; - size_t plaintextLen = strlen(plaintext); - unsigned char* encrypted = NULL; - size_t encLen = 0; - unsigned char* decrypted = NULL; - size_t decLen = 0; - char decrypted_str[1024] = {0, }; - - ret = _get_random(keyLen, dek); - - ret = encrypt_aes_cbc(dek, keyLen, (const unsigned char*)plaintext, plaintextLen, &encrypted, &encLen); - if(ret != WAE_ERROR_NONE){ - FPRINTF("...FAIL: encrypt_aes_cbc. ret=%d\n", ret); - ret = WAE_ERROR_CRYPTO; - goto error; - } - - ret = decrypt_aes_cbc(dek, keyLen, encrypted, encLen, &decrypted, &decLen); - if(ret != WAE_ERROR_NONE){ - FPRINTF("...FAIL: decrypt_aes_cbc. ret=%d\n", ret); - ret = WAE_ERROR_CRYPTO; - goto error; - } - - if(plaintextLen != decLen) { - FPRINTF("...FAIL: plaintextLen(%d) != decLen(%d)\n", (int) plaintextLen, (int) decLen); - ret = WAE_ERROR_CRYPTO; - goto error; - } - - memcpy(decrypted_str, decrypted, decLen); - FPRINTF("...plaintext = %s\n", plaintext); - FPRINTF("...decrypted = %s\n", decrypted_str); - if(strcmp(plaintext, decrypted_str) != 0) { - FPRINTF("...FAIL: plaintext(%s) != decrypted(%s)\n", plaintext, decrypted_str); - ret = WAE_ERROR_CRYPTO; - goto error; - } + int ret = WAE_ERROR_NONE; + + unsigned char dek[32] = {0, }; + size_t keyLen = 32; + const char *plaintext = "adbdfdfdfdfdererfdfdfererfdrerfdrer"; + size_t plaintextLen = strlen(plaintext); + unsigned char *encrypted = NULL; + size_t encLen = 0; + unsigned char *decrypted = NULL; + size_t decLen = 0; + char decrypted_str[1024] = {0, }; + + ret = _get_random(keyLen, dek); + + ret = encrypt_aes_cbc(dek, keyLen, (const unsigned char *)plaintext, plaintextLen, &encrypted, &encLen); + + if (ret != WAE_ERROR_NONE) { + FPRINTF("...FAIL: encrypt_aes_cbc. ret=%d\n", ret); + ret = WAE_ERROR_CRYPTO; + goto error; + } + + ret = decrypt_aes_cbc(dek, keyLen, encrypted, encLen, &decrypted, &decLen); + + if (ret != WAE_ERROR_NONE) { + FPRINTF("...FAIL: decrypt_aes_cbc. ret=%d\n", ret); + ret = WAE_ERROR_CRYPTO; + goto error; + } + + if (plaintextLen != decLen) { + FPRINTF("...FAIL: plaintextLen(%d) != decLen(%d)\n", (int) plaintextLen, (int) decLen); + ret = WAE_ERROR_CRYPTO; + goto error; + } + + memcpy(decrypted_str, decrypted, decLen); + FPRINTF("...plaintext = %s\n", plaintext); + FPRINTF("...decrypted = %s\n", decrypted_str); + + if (strcmp(plaintext, decrypted_str) != 0) { + FPRINTF("...FAIL: plaintext(%s) != decrypted(%s)\n", plaintext, decrypted_str); + ret = WAE_ERROR_CRYPTO; + goto error; + } error: - if(encrypted != NULL) - free(encrypted); - if(decrypted != NULL) - free(decrypted); + if (encrypted != NULL) + free(encrypted); - return ret; + if (decrypted != NULL) + free(decrypted); + + return ret; } //================================================================================= @@ -231,627 +244,680 @@ error: //================================================================================= int wae_tc_cache() { - int ret = WAE_ERROR_NONE; - - const char* pkg1 = "pkg1"; - const char* pkg2 = "pkg2"; - const char* pkg3 = "pkg3"; - const char* pkgDummy = "dummy"; - - unsigned char dek1[32] = {1, }; - unsigned char dek2[32] = {2, }; - unsigned char dek3[32] = {3, }; - unsigned char* retDek = NULL; - - _initialize_cache(); - - _add_app_dek_to_cache(pkg1, dek1); - _add_app_dek_to_cache(pkg2, dek2); - _add_app_dek_to_cache(pkg3, dek3); - - retDek = NULL; - retDek = _get_app_dek_from_cache(pkg1); - if(retDek == NULL || _compare_binary(dek1, 32, retDek, 32) != 0) { - FPRINTF("failed in cache. Diffent DEK1\n"); - ret = WAE_ERROR_UNKNOWN; - goto error; - } - _print_binary_to_hex("...DEK1 : ", dek1, 32); - _print_binary_to_hex("...Returen DEK1 : ", retDek, 32); - - retDek = NULL; - retDek = _get_app_dek_from_cache(pkg2); - if(retDek == NULL || _compare_binary(dek2, 32, retDek, 32) != 0) { - FPRINTF("failed in cache. Diffent DEK2\n"); - ret = WAE_ERROR_UNKNOWN; - goto error; - } - _print_binary_to_hex("...DEK2 : ", dek2, 32); - _print_binary_to_hex("...Returen DEK1 : ", retDek, 32); - - retDek = NULL; - retDek = _get_app_dek_from_cache(pkg3); - if(retDek == NULL || _compare_binary(dek3, 32, retDek, 32) != 0) { - FPRINTF("failed in cache. Diffent DEK3\n"); - ret = WAE_ERROR_UNKNOWN; - goto error; - } - _print_binary_to_hex("...DEK3 : ", dek3, 32); - _print_binary_to_hex("...Returen DEK3 : ", retDek, 32); - - retDek = NULL; - retDek = _get_app_dek_from_cache(pkgDummy); - if(retDek != NULL) { - FPRINTF("failed in cache. Wrong DEK_DUMMY1 returned\n"); - _print_binary_to_hex("retured wrong DEK : ", retDek, 32); - ret = WAE_ERROR_UNKNOWN; - goto error; - } - - _remove_app_dek_from_cache(pkg3); - retDek = NULL; - retDek = _get_app_dek_from_cache(pkg3); - if(retDek != NULL) { - FPRINTF("fail to remove app dek from cache\n"); - ret = WAE_ERROR_UNKNOWN; - goto error; - } - - _initialize_cache(); - - _add_app_dek_to_cache(pkg1, dek1); - - retDek = NULL; - retDek = _get_app_dek_from_cache(pkg2); - if(retDek != NULL) { - FPRINTF("failed in cache. Wrong DEK_DUMMY2 returned\n"); - _print_binary_to_hex("retured wrong DEK : ", retDek, 32); - ret = WAE_ERROR_UNKNOWN; - goto error; - } - - ret = WAE_ERROR_NONE; + int ret = WAE_ERROR_NONE; + + const char *pkg1 = "pkg1"; + const char *pkg2 = "pkg2"; + const char *pkg3 = "pkg3"; + const char *pkgDummy = "dummy"; + + unsigned char dek1[32] = {1, }; + unsigned char dek2[32] = {2, }; + unsigned char dek3[32] = {3, }; + unsigned char *retDek = NULL; + + _initialize_cache(); + + _add_app_dek_to_cache(pkg1, dek1); + _add_app_dek_to_cache(pkg2, dek2); + _add_app_dek_to_cache(pkg3, dek3); + + retDek = NULL; + retDek = _get_app_dek_from_cache(pkg1); + + if (retDek == NULL || _compare_binary(dek1, 32, retDek, 32) != 0) { + FPRINTF("failed in cache. Diffent DEK1\n"); + ret = WAE_ERROR_UNKNOWN; + goto error; + } + + _print_binary_to_hex("...DEK1 : ", dek1, 32); + _print_binary_to_hex("...Returen DEK1 : ", retDek, 32); + + retDek = NULL; + retDek = _get_app_dek_from_cache(pkg2); + + if (retDek == NULL || _compare_binary(dek2, 32, retDek, 32) != 0) { + FPRINTF("failed in cache. Diffent DEK2\n"); + ret = WAE_ERROR_UNKNOWN; + goto error; + } + + _print_binary_to_hex("...DEK2 : ", dek2, 32); + _print_binary_to_hex("...Returen DEK1 : ", retDek, 32); + + retDek = NULL; + retDek = _get_app_dek_from_cache(pkg3); + + if (retDek == NULL || _compare_binary(dek3, 32, retDek, 32) != 0) { + FPRINTF("failed in cache. Diffent DEK3\n"); + ret = WAE_ERROR_UNKNOWN; + goto error; + } + + _print_binary_to_hex("...DEK3 : ", dek3, 32); + _print_binary_to_hex("...Returen DEK3 : ", retDek, 32); + + retDek = NULL; + retDek = _get_app_dek_from_cache(pkgDummy); + + if (retDek != NULL) { + FPRINTF("failed in cache. Wrong DEK_DUMMY1 returned\n"); + _print_binary_to_hex("retured wrong DEK : ", retDek, 32); + ret = WAE_ERROR_UNKNOWN; + goto error; + } + + _remove_app_dek_from_cache(pkg3); + retDek = NULL; + retDek = _get_app_dek_from_cache(pkg3); + + if (retDek != NULL) { + FPRINTF("fail to remove app dek from cache\n"); + ret = WAE_ERROR_UNKNOWN; + goto error; + } + + _initialize_cache(); + + _add_app_dek_to_cache(pkg1, dek1); + + retDek = NULL; + retDek = _get_app_dek_from_cache(pkg2); + + if (retDek != NULL) { + FPRINTF("failed in cache. Wrong DEK_DUMMY2 returned\n"); + _print_binary_to_hex("retured wrong DEK : ", retDek, 32); + ret = WAE_ERROR_UNKNOWN; + goto error; + } + + ret = WAE_ERROR_NONE; + error: - return ret; + return ret; } int wae_tc_get_random() { - int ret = WAE_ERROR_NONE; + int ret = WAE_ERROR_NONE; - size_t rand_len = 32; - unsigned char random[32] = {0, }; + size_t rand_len = 32; + unsigned char random[32] = {0, }; - ret = _get_random(rand_len, random); + ret = _get_random(rand_len, random); - _print_binary_to_hex("...RANDOM = ", random, sizeof(random)); + _print_binary_to_hex("...RANDOM = ", random, sizeof(random)); - return ret; + return ret; } int wae_tc_get_alias() { - int ret = WAE_ERROR_NONE; + int ret = WAE_ERROR_NONE; - const char* pkgId = "TEST_PKG_ID"; - char alias[256] = {0, }; + const char *pkgId = "TEST_PKG_ID"; + char alias[256] = {0, }; - _get_alias(pkgId, WAE_DOWNLOADED_NORMAL_APP, true, alias, sizeof(alias)); - FPRINTF("...pkgid=%s, alias for normal for save. app=%s\n", pkgId, alias); + _get_alias(pkgId, WAE_DOWNLOADED_NORMAL_APP, true, alias, sizeof(alias)); + FPRINTF("...pkgid=%s, alias for normal for save. app=%s\n", pkgId, alias); - _get_alias(pkgId, WAE_DOWNLOADED_NORMAL_APP, false, alias, sizeof(alias)); - FPRINTF("...pkgid=%s, alias for normal for get. app=%s\n", pkgId, alias); + _get_alias(pkgId, WAE_DOWNLOADED_NORMAL_APP, false, alias, sizeof(alias)); + FPRINTF("...pkgid=%s, alias for normal for get. app=%s\n", pkgId, alias); - _get_alias(pkgId, WAE_DOWNLOADED_GLOBAL_APP, true, alias, sizeof(alias)); - FPRINTF("...pkgid=%s, alias for global app=%s\n", pkgId, alias); + _get_alias(pkgId, WAE_DOWNLOADED_GLOBAL_APP, true, alias, sizeof(alias)); + FPRINTF("...pkgid=%s, alias for global app=%s\n", pkgId, alias); - _get_alias(pkgId, WAE_PRELOADED_APP, true, alias, sizeof(alias)); - FPRINTF("...pkgid=%s, alias for preloaded app=%s\n", pkgId, alias); + _get_alias(pkgId, WAE_PRELOADED_APP, true, alias, sizeof(alias)); + FPRINTF("...pkgid=%s, alias for preloaded app=%s\n", pkgId, alias); - return ret; + return ret; } int _wae_tc_add_get_remove_dek(wae_app_type_e appType) { - int ret = WAE_ERROR_NONE; - - const char* pkgId = "TEST_PKG_ID"; - - size_t dekLen= 32; - unsigned char dek[32] = {0, }; - size_t storedDekLen = 0; - unsigned char* storedDek = NULL; - - ret = _get_random(dekLen, dek); - - remove_app_dek(pkgId, appType); - - ret = _add_dek_to_key_manager(pkgId, appType, dek, dekLen); - if(ret != WAE_ERROR_NONE) { - FPRINTF("...FAIL: _add_dek_to_key_manager. ret=%d\n", ret); - goto error; - } - - ret = get_app_dek(pkgId, appType, &storedDek, &storedDekLen); - if(ret != WAE_ERROR_NONE) { - FPRINTF("...FAIL: get_app_dek. ret=%d\n", ret); - goto error; - } - - if(_compare_binary(dek, dekLen, storedDek, storedDekLen) != 0 ) { - ret = WAE_ERROR_KEY_MANAGER; - FPRINTF("...FAIL: DEK != STORED_DEK.\n"); - goto error; - } - - ret = remove_app_dek(pkgId, appType); - if(ret != WAE_ERROR_NONE) { - FPRINTF("...FAIL: remove_app_dek. ret=%d\n", ret); - goto error; - } - - ret = get_app_dek(pkgId, appType, &storedDek, &storedDekLen); - if(ret == WAE_ERROR_NONE) { - ret = WAE_ERROR_UNKNOWN; - FPRINTF("...FAIL: APP DEK still exists in key_manager.\n"); - goto error; - } - - ret = WAE_ERROR_NONE; + int ret = WAE_ERROR_NONE; + + const char *pkgId = "TEST_PKG_ID"; + + size_t dekLen = 32; + unsigned char dek[32] = {0, }; + size_t storedDekLen = 0; + unsigned char *storedDek = NULL; + + ret = _get_random(dekLen, dek); + + remove_app_dek(pkgId, appType); + + ret = _add_dek_to_key_manager(pkgId, appType, dek, dekLen); + + if (ret != WAE_ERROR_NONE) { + FPRINTF("...FAIL: _add_dek_to_key_manager. ret=%d\n", ret); + goto error; + } + + ret = get_app_dek(pkgId, appType, &storedDek, &storedDekLen); + + if (ret != WAE_ERROR_NONE) { + FPRINTF("...FAIL: get_app_dek. ret=%d\n", ret); + goto error; + } + + if (_compare_binary(dek, dekLen, storedDek, storedDekLen) != 0) { + ret = WAE_ERROR_KEY_MANAGER; + FPRINTF("...FAIL: DEK != STORED_DEK.\n"); + goto error; + } + + ret = remove_app_dek(pkgId, appType); + + if (ret != WAE_ERROR_NONE) { + FPRINTF("...FAIL: remove_app_dek. ret=%d\n", ret); + goto error; + } + + ret = get_app_dek(pkgId, appType, &storedDek, &storedDekLen); + + if (ret == WAE_ERROR_NONE) { + ret = WAE_ERROR_UNKNOWN; + FPRINTF("...FAIL: APP DEK still exists in key_manager.\n"); + goto error; + } + + ret = WAE_ERROR_NONE; + error: - if(storedDek != NULL) - free(storedDek); + if (storedDek != NULL) + free(storedDek); - return ret; + return ret; } int wae_tc_add_get_remove_dek_for_normal_app() { - return _wae_tc_add_get_remove_dek(WAE_DOWNLOADED_NORMAL_APP); + return _wae_tc_add_get_remove_dek(WAE_DOWNLOADED_NORMAL_APP); } int wae_tc_add_get_remove_dek_for_global_app() { - return _wae_tc_add_get_remove_dek(WAE_DOWNLOADED_GLOBAL_APP); + return _wae_tc_add_get_remove_dek(WAE_DOWNLOADED_GLOBAL_APP); } int wae_tc_add_get_remove_dek_for_preloaded_app() { - return _wae_tc_add_get_remove_dek(WAE_PRELOADED_APP); + return _wae_tc_add_get_remove_dek(WAE_PRELOADED_APP); } int wae_tc_get_preloaded_app_dek_file_path() { - int ret = WAE_ERROR_NONE; + int ret = WAE_ERROR_NONE; + + const char *pkgId = "test_pkg"; + const char *expectedPath = tzplatform_mkpath4(TZ_SYS_SHARE, + "wae", "app_dek", "WAE_APP_DEK_test_pkg.adek"); + char path[256]; - const char *pkgId = "test_pkg"; - const char *expectedPath = tzplatform_mkpath4(TZ_SYS_SHARE, - "wae", "app_dek", "WAE_APP_DEK_test_pkg.adek"); - char path[256]; + FPRINTF("...expected path : %s\n", expectedPath); + ret = _get_preloaded_app_dek_file_path(pkgId, sizeof(path), path); + FPRINTF("...returned path : %s\n", path); - FPRINTF("...expected path : %s\n", expectedPath); - ret = _get_preloaded_app_dek_file_path(pkgId, sizeof(path), path); - FPRINTF("...returned path : %s\n", path); + if (ret != WAE_ERROR_NONE || strncmp(expectedPath, path, strlen(expectedPath)) != 0) { + ret = WAE_ERROR_UNKNOWN; + goto error; + } - if(ret != WAE_ERROR_NONE || strncmp(expectedPath, path, strlen(expectedPath)) != 0) { - ret = WAE_ERROR_UNKNOWN; - goto error; - } error: - return ret; + return ret; } int wae_tc_extract_pkg_id_from_file_name() { - int ret = WAE_ERROR_NONE; - const char* fileName = "WAE_APP_DEK_test_pkg.adek"; - const char* expectedPkgId = "test_pkg"; - char pkgId[100]; - - ret = _extract_pkg_id_from_file_name(fileName, pkgId); - FPRINTF("...expected pkgId: %s\n", expectedPkgId); - FPRINTF("...returned pkgId: %s\n", pkgId); - - if(ret != WAE_ERROR_NONE || strncmp(expectedPkgId, pkgId, strlen(expectedPkgId)) != 0) { - ret = WAE_ERROR_UNKNOWN; - goto error; - } + int ret = WAE_ERROR_NONE; + const char *fileName = "WAE_APP_DEK_test_pkg.adek"; + const char *expectedPkgId = "test_pkg"; + char pkgId[100]; + + ret = _extract_pkg_id_from_file_name(fileName, pkgId); + FPRINTF("...expected pkgId: %s\n", expectedPkgId); + FPRINTF("...returned pkgId: %s\n", pkgId); + + if (ret != WAE_ERROR_NONE || strncmp(expectedPkgId, pkgId, strlen(expectedPkgId)) != 0) { + ret = WAE_ERROR_UNKNOWN; + goto error; + } + error: - return ret; + return ret; } int wae_tc_read_write_encrypted_app_dek() { - int ret = WAE_ERROR_NONE; - const char* pkgId = "write_test_pkg"; - unsigned char dek[256]; - unsigned char* readDek = NULL; - size_t readDekLen = 0; - - ret = _write_encrypted_app_dek_to_file(pkgId, dek, sizeof(dek)); - if(ret != WAE_ERROR_NONE) { - FPRINTF("Fail to _write_encrypted_app_dek_to_file. pkgId=%s\n", pkgId); - goto error; - } - - ret = _read_encrypted_app_dek_from_file(pkgId, &readDek, &readDekLen); - if(ret != WAE_ERROR_NONE) { - FPRINTF("Fail to _read_encrypted_app_dek_from_file. pkgId=%s\n", pkgId); - goto error; - } - - _print_binary_to_hex("...ORIG DEK= ", dek, sizeof(dek)); - _print_binary_to_hex("...READ DEK= ", readDek, readDekLen); - if(_compare_binary(dek, sizeof(dek), readDek, readDekLen) != 0 ) { - ret = WAE_ERROR_UNKNOWN; - FPRINTF("...FAIL: DEK != read_DEK.\n"); - goto error; - } + int ret = WAE_ERROR_NONE; + const char *pkgId = "write_test_pkg"; + unsigned char dek[256]; + unsigned char *readDek = NULL; + size_t readDekLen = 0; + + ret = _write_encrypted_app_dek_to_file(pkgId, dek, sizeof(dek)); + + if (ret != WAE_ERROR_NONE) { + FPRINTF("Fail to _write_encrypted_app_dek_to_file. pkgId=%s\n", pkgId); + goto error; + } + + ret = _read_encrypted_app_dek_from_file(pkgId, &readDek, &readDekLen); + + if (ret != WAE_ERROR_NONE) { + FPRINTF("Fail to _read_encrypted_app_dek_from_file. pkgId=%s\n", pkgId); + goto error; + } + + _print_binary_to_hex("...ORIG DEK= ", dek, sizeof(dek)); + _print_binary_to_hex("...READ DEK= ", readDek, readDekLen); + + if (_compare_binary(dek, sizeof(dek), readDek, readDekLen) != 0) { + ret = WAE_ERROR_UNKNOWN; + FPRINTF("...FAIL: DEK != read_DEK.\n"); + goto error; + } error: - if(readDek != NULL) - free(readDek); - return ret; + if (readDek != NULL) + free(readDek); + + return ret; } int _wae_tc_create_app_dek(wae_app_type_e appType) { - int ret = WAE_ERROR_NONE; + int ret = WAE_ERROR_NONE; + + const char *pkgId = "TEST_PKG_ID"; + unsigned char *dek = NULL; + size_t dekLen = 0; - const char* pkgId = "TEST_PKG_ID"; - unsigned char* dek = NULL; - size_t dekLen = 0; + size_t storedDekLen = 0; + unsigned char *storedDek = NULL; - size_t storedDekLen = 0; - unsigned char* storedDek = NULL; + remove_app_dek(pkgId, appType); - remove_app_dek(pkgId, appType); + ret = create_app_dek(pkgId, appType, &dek, &dekLen); - ret = create_app_dek(pkgId, appType, &dek, &dekLen); - if(ret != WAE_ERROR_NONE) { - FPRINTF("...FAIL: create_app_dek. ret=%d\n", ret); - goto error; - } + if (ret != WAE_ERROR_NONE) { + FPRINTF("...FAIL: create_app_dek. ret=%d\n", ret); + goto error; + } - ret = get_app_dek(pkgId, appType, &storedDek, &storedDekLen); - if(ret != WAE_ERROR_NONE) { - ret = WAE_ERROR_KEY_MANAGER; - FPRINTF("...FAIL: get_app_dek. ret=%d\n", ret); - goto error; - } + ret = get_app_dek(pkgId, appType, &storedDek, &storedDekLen); - _print_binary_to_hex("...CREATED DEK = ", dek, dekLen); - _print_binary_to_hex("...STORED DEK = ", storedDek, storedDekLen); - if(_compare_binary(dek, dekLen, storedDek, storedDekLen) != 0 ) { - ret = WAE_ERROR_FILE; - FPRINTF("...FAIL: DEK != STORED_DEK.\n"); - goto error; - } + if (ret != WAE_ERROR_NONE) { + ret = WAE_ERROR_KEY_MANAGER; + FPRINTF("...FAIL: get_app_dek. ret=%d\n", ret); + goto error; + } - remove_app_dek(pkgId, appType); + _print_binary_to_hex("...CREATED DEK = ", dek, dekLen); + _print_binary_to_hex("...STORED DEK = ", storedDek, storedDekLen); + + if (_compare_binary(dek, dekLen, storedDek, storedDekLen) != 0) { + ret = WAE_ERROR_FILE; + FPRINTF("...FAIL: DEK != STORED_DEK.\n"); + goto error; + } + + remove_app_dek(pkgId, appType); + + ret = WAE_ERROR_NONE; - ret = WAE_ERROR_NONE; error: - if(dek != NULL) - free(dek); - if(storedDek != NULL) - free(storedDek); - return ret; + if (dek != NULL) + free(dek); + + if (storedDek != NULL) + free(storedDek); + + return ret; } int wae_tc_create_app_dek_for_normal_app() { - return _wae_tc_create_app_dek(WAE_DOWNLOADED_NORMAL_APP); + return _wae_tc_create_app_dek(WAE_DOWNLOADED_NORMAL_APP); } int wae_tc_create_app_dek_for_global_app() { - return _wae_tc_create_app_dek(WAE_DOWNLOADED_GLOBAL_APP); + return _wae_tc_create_app_dek(WAE_DOWNLOADED_GLOBAL_APP); } int wae_tc_create_app_dek_for_preloaded_app() { - return _wae_tc_create_app_dek(WAE_PRELOADED_APP); + return _wae_tc_create_app_dek(WAE_PRELOADED_APP); } int wae_tc_get_create_preloaded_app_dek() { - int ret = WAE_ERROR_NONE; - - const char* pkgId = "TEST_PKG_ID_FOR_CREATE"; - unsigned char *dek = NULL; - unsigned char *readDek = NULL; - size_t readDekLen = 0; - size_t dekLen = 0; - - ret = get_preloaded_app_dek(pkgId, &readDek, &readDekLen); - if(ret != WAE_ERROR_NO_KEY) { - FPRINTF("...FAIL: There should be no APP DEK. get_preloaded_app_dek. ret=%d\n", ret); - ret = WAE_ERROR_FILE; - goto error; - } - - ret = create_preloaded_app_dek(pkgId, &dek, &dekLen); - if(ret != WAE_ERROR_NONE) { - FPRINTF("...FAIL: create_preloaded_app_dek. ret=%d\n", ret); - goto error; - } - - ret = get_preloaded_app_dek(pkgId, &readDek, &readDekLen); - if(ret != WAE_ERROR_NONE) { - FPRINTF("...FAIL: get_preloaded_app_dek. ret=%d\n", ret); - goto error; - } - - _print_binary_to_hex("...CREATED DEK = ", dek, dekLen); - _print_binary_to_hex("...READ DEK = ", readDek, readDekLen); - - if(_compare_binary(dek, dekLen, readDek, readDekLen) != 0 ) { - ret = WAE_ERROR_FILE; - FPRINTF("...FAIL: DEK != READ_DEK.\n"); - goto error; - } - - ret = WAE_ERROR_NONE; + int ret = WAE_ERROR_NONE; + + const char *pkgId = "TEST_PKG_ID_FOR_CREATE"; + unsigned char *dek = NULL; + unsigned char *readDek = NULL; + size_t readDekLen = 0; + size_t dekLen = 0; + + ret = get_preloaded_app_dek(pkgId, &readDek, &readDekLen); + + if (ret != WAE_ERROR_NO_KEY) { + FPRINTF("...FAIL: There should be no APP DEK. get_preloaded_app_dek. ret=%d\n", ret); + ret = WAE_ERROR_FILE; + goto error; + } + + ret = create_preloaded_app_dek(pkgId, &dek, &dekLen); + + if (ret != WAE_ERROR_NONE) { + FPRINTF("...FAIL: create_preloaded_app_dek. ret=%d\n", ret); + goto error; + } + + ret = get_preloaded_app_dek(pkgId, &readDek, &readDekLen); + + if (ret != WAE_ERROR_NONE) { + FPRINTF("...FAIL: get_preloaded_app_dek. ret=%d\n", ret); + goto error; + } + + _print_binary_to_hex("...CREATED DEK = ", dek, dekLen); + _print_binary_to_hex("...READ DEK = ", readDek, readDekLen); + + if (_compare_binary(dek, dekLen, readDek, readDekLen) != 0) { + ret = WAE_ERROR_FILE; + FPRINTF("...FAIL: DEK != READ_DEK.\n"); + goto error; + } + + ret = WAE_ERROR_NONE; + error: - if(dek != NULL) - free(dek); - if(readDek != NULL) - free(readDek); - return ret; + if (dek != NULL) + free(dek); + + if (readDek != NULL) + free(readDek); + + return ret; } int wae_tc_load_preloaded_app_deks() { - int ret = WAE_ERROR_NONE; - - const char* pkgId1 = "TEST_PKGID_1"; - unsigned char* dek1 = NULL; - size_t dekLen1 = 0; - unsigned char* readDek1 = NULL; - size_t readDekLen1 = 0; - char path1[MAX_PATH_LEN] = {0, }; - - const char* pkgId2 = "TEST_PKGID_2"; - unsigned char* dek2 = NULL; - size_t dekLen2 = 0; - unsigned char* readDek2 = NULL; - size_t readDekLen2 = 0; - char path2[MAX_PATH_LEN] = {0, }; - - _get_preloaded_app_dek_file_path(pkgId1, sizeof(path1), path1); - _get_preloaded_app_dek_file_path(pkgId2, sizeof(path2), path2); - - // remove old test data - remove_app_dek(pkgId1, WAE_PRELOADED_APP); - remove_app_dek(pkgId2, WAE_PRELOADED_APP); - unlink(path1); - unlink(path2); - - // create 2 dek for preloaded app - ret = create_preloaded_app_dek(pkgId1, &dek1, &dekLen1); - if(ret != WAE_ERROR_NONE) { - FPRINTF("...FAIL: create_preloaded_app_dek. ret=%d\n", ret); - goto error; - } - - ret = create_preloaded_app_dek(pkgId2, &dek2, &dekLen2); - if(ret != WAE_ERROR_NONE) { - FPRINTF("...FAIL: create_preloaded_app_dek. ret=%d\n", ret); - goto error; - } - - // load_preloaded_app_deks - ret = load_preloaded_app_deks(true); - if(ret != WAE_ERROR_NONE) { - FPRINTF("...FAIL: load_preloaded_app_deks. ret=%d\n", ret); - goto error; - } - - // get_app_dek - ret = get_app_dek(pkgId1, WAE_PRELOADED_APP, &readDek1, &readDekLen1); - if(ret != WAE_ERROR_NONE) { - FPRINTF("...FAIL: get_app_dek. ret=%d\n", ret); - goto error; - } - - ret = get_app_dek(pkgId2, WAE_PRELOADED_APP, &readDek2, &readDekLen2); - if(ret != WAE_ERROR_NONE) { - FPRINTF("...FAIL: get_app_dek. ret=%d\n", ret); - goto error; - } - - _print_binary_to_hex("...CREATED DEK1 = ", dek1, dekLen1); - _print_binary_to_hex("...READ DEK1 = ", readDek1, readDekLen1); - if(_compare_binary(dek1, dekLen1, readDek1, readDekLen1) != 0 ) { - ret = WAE_ERROR_FILE; - FPRINTF("...FAIL: DEK1 != READ_DEK1.\n"); - goto error; - } - - _print_binary_to_hex("...CREATED DEK2 = ", dek2, dekLen2); - _print_binary_to_hex("...READ DEK2 = ", readDek2, readDekLen2); - if(_compare_binary(dek2, dekLen2, readDek2, readDekLen2) != 0 ) { - ret = WAE_ERROR_FILE; - FPRINTF("...FAIL: DEK2 != READ_DEK2.\n"); - goto error; - } - - // remove_app_dek - remove_app_dek(pkgId1, WAE_PRELOADED_APP); - remove_app_dek(pkgId2, WAE_PRELOADED_APP); - - ret = WAE_ERROR_NONE; + int ret = WAE_ERROR_NONE; + + const char *pkgId1 = "TEST_PKGID_1"; + unsigned char *dek1 = NULL; + size_t dekLen1 = 0; + unsigned char *readDek1 = NULL; + size_t readDekLen1 = 0; + char path1[MAX_PATH_LEN] = {0, }; + + const char *pkgId2 = "TEST_PKGID_2"; + unsigned char *dek2 = NULL; + size_t dekLen2 = 0; + unsigned char *readDek2 = NULL; + size_t readDekLen2 = 0; + char path2[MAX_PATH_LEN] = {0, }; + + _get_preloaded_app_dek_file_path(pkgId1, sizeof(path1), path1); + _get_preloaded_app_dek_file_path(pkgId2, sizeof(path2), path2); + + // remove old test data + remove_app_dek(pkgId1, WAE_PRELOADED_APP); + remove_app_dek(pkgId2, WAE_PRELOADED_APP); + unlink(path1); + unlink(path2); + + // create 2 dek for preloaded app + ret = create_preloaded_app_dek(pkgId1, &dek1, &dekLen1); + + if (ret != WAE_ERROR_NONE) { + FPRINTF("...FAIL: create_preloaded_app_dek. ret=%d\n", ret); + goto error; + } + + ret = create_preloaded_app_dek(pkgId2, &dek2, &dekLen2); + + if (ret != WAE_ERROR_NONE) { + FPRINTF("...FAIL: create_preloaded_app_dek. ret=%d\n", ret); + goto error; + } + + // load_preloaded_app_deks + ret = load_preloaded_app_deks(true); + + if (ret != WAE_ERROR_NONE) { + FPRINTF("...FAIL: load_preloaded_app_deks. ret=%d\n", ret); + goto error; + } + + // get_app_dek + ret = get_app_dek(pkgId1, WAE_PRELOADED_APP, &readDek1, &readDekLen1); + + if (ret != WAE_ERROR_NONE) { + FPRINTF("...FAIL: get_app_dek. ret=%d\n", ret); + goto error; + } + + ret = get_app_dek(pkgId2, WAE_PRELOADED_APP, &readDek2, &readDekLen2); + + if (ret != WAE_ERROR_NONE) { + FPRINTF("...FAIL: get_app_dek. ret=%d\n", ret); + goto error; + } + + _print_binary_to_hex("...CREATED DEK1 = ", dek1, dekLen1); + _print_binary_to_hex("...READ DEK1 = ", readDek1, readDekLen1); + + if (_compare_binary(dek1, dekLen1, readDek1, readDekLen1) != 0) { + ret = WAE_ERROR_FILE; + FPRINTF("...FAIL: DEK1 != READ_DEK1.\n"); + goto error; + } + + _print_binary_to_hex("...CREATED DEK2 = ", dek2, dekLen2); + _print_binary_to_hex("...READ DEK2 = ", readDek2, readDekLen2); + + if (_compare_binary(dek2, dekLen2, readDek2, readDekLen2) != 0) { + ret = WAE_ERROR_FILE; + FPRINTF("...FAIL: DEK2 != READ_DEK2.\n"); + goto error; + } + + // remove_app_dek + remove_app_dek(pkgId1, WAE_PRELOADED_APP); + remove_app_dek(pkgId2, WAE_PRELOADED_APP); + + ret = WAE_ERROR_NONE; + error: - if(dek1 != NULL) - free(dek1); - if(readDek1 != NULL) - free(readDek1); - if(dek2 != NULL) - free(dek2); - if(readDek2 != NULL) - free(readDek2); - - return ret; + if (dek1 != NULL) + free(dek1); + + if (readDek1 != NULL) + free(readDek1); + + if (dek2 != NULL) + free(dek2); + + if (readDek2 != NULL) + free(readDek2); + + return ret; } int _wae_tc_encrypt_decrypt_web_app(wae_app_type_e appType) { - int ret = WAE_ERROR_NONE; - - const char* pkgId1 = "testpkg_for_normal"; - const char* pkgId2 = "testpkg_for_global"; - const char* pkgId3 = "testpkg_for_preloaded"; - const char* pkgId = NULL; - const char* plaintext= "adbdfdfdfdfdererfdfdfererfdrerfdrer"; - size_t plaintextLen = strlen(plaintext); - unsigned char* encrypted = NULL; - size_t encLen = 0; - unsigned char* decrypted = NULL; - size_t decLen = 0; - char decrypted_str[1024] = {0, }; - - switch(appType) { - case WAE_DOWNLOADED_NORMAL_APP: - pkgId = pkgId1; - break; - case WAE_DOWNLOADED_GLOBAL_APP: - pkgId = pkgId2; - break; - case WAE_PRELOADED_APP: - pkgId = pkgId3; - break; - } - - // remove old test data - ret = wae_remove_app_dek(pkgId, appType); - if(appType == WAE_PRELOADED_APP) { - _clear_app_deks_loaded(); - } - - // test for downloaded web application - ret = wae_encrypt_web_application(pkgId, appType, - (const unsigned char*)plaintext, plaintextLen, - &encrypted, &encLen); - if(ret != WAE_ERROR_NONE){ - FPRINTF("...FAIL: wae_encrypt_web_application. ret=%d\n", ret); - goto error; - } - - // encrypt test twice - ret = wae_encrypt_web_application(pkgId, appType, - (const unsigned char*)plaintext, plaintextLen, - &encrypted, &encLen); - if(ret != WAE_ERROR_NONE){ - FPRINTF("...FAIL: wae_encrypt_web_application. ret=%d\n", ret); - goto error; - } - - _remove_app_dek_from_cache(pkgId); - - if(appType == WAE_PRELOADED_APP) { - load_preloaded_app_deks(true); - } - - ret = wae_decrypt_web_application(pkgId, appType, encrypted, encLen, &decrypted, &decLen); - if(ret != WAE_ERROR_NONE){ - FPRINTF("...FAIL: wae_decrypt_web_application. ret=%d\n", ret); - goto error; - } - - if(plaintextLen != decLen) { - FPRINTF("...FAIL: plaintextLen(%d) != decLen(%d)\n", (int) plaintextLen, (int) decLen); - ret = WAE_ERROR_CRYPTO; - goto error; - } - - memcpy(decrypted_str, decrypted, decLen); - FPRINTF("...plaintext(downloaded) = %s\n", plaintext); - FPRINTF("...decrypted(downloaded) = %s\n", decrypted_str); - if(strcmp(plaintext, decrypted_str) != 0) { - FPRINTF("...FAIL: plaintext(%s) != decrypted(%s)\n", plaintext, decrypted_str); - ret = WAE_ERROR_CRYPTO; - goto error; - } - - ret = wae_remove_app_dek(pkgId, appType); - if(ret != WAE_ERROR_NONE){ - FPRINTF("...FAIL: wae_remove_app_dek. ret=%d\n", ret); - goto error; - } + int ret = WAE_ERROR_NONE; + + const char *pkgId1 = "testpkg_for_normal"; + const char *pkgId2 = "testpkg_for_global"; + const char *pkgId3 = "testpkg_for_preloaded"; + const char *pkgId = NULL; + const char *plaintext = "adbdfdfdfdfdererfdfdfererfdrerfdrer"; + size_t plaintextLen = strlen(plaintext); + unsigned char *encrypted = NULL; + size_t encLen = 0; + unsigned char *decrypted = NULL; + size_t decLen = 0; + char decrypted_str[1024] = {0, }; + + switch (appType) { + case WAE_DOWNLOADED_NORMAL_APP: + pkgId = pkgId1; + break; + + case WAE_DOWNLOADED_GLOBAL_APP: + pkgId = pkgId2; + break; + + case WAE_PRELOADED_APP: + pkgId = pkgId3; + break; + } + + // remove old test data + ret = wae_remove_app_dek(pkgId, appType); + + if (appType == WAE_PRELOADED_APP) { + _clear_app_deks_loaded(); + } + + // test for downloaded web application + ret = wae_encrypt_web_application(pkgId, appType, + (const unsigned char *)plaintext, plaintextLen, + &encrypted, &encLen); + + if (ret != WAE_ERROR_NONE) { + FPRINTF("...FAIL: wae_encrypt_web_application. ret=%d\n", ret); + goto error; + } + + // encrypt test twice + ret = wae_encrypt_web_application(pkgId, appType, + (const unsigned char *)plaintext, plaintextLen, + &encrypted, &encLen); + + if (ret != WAE_ERROR_NONE) { + FPRINTF("...FAIL: wae_encrypt_web_application. ret=%d\n", ret); + goto error; + } + + _remove_app_dek_from_cache(pkgId); + + if (appType == WAE_PRELOADED_APP) { + load_preloaded_app_deks(true); + } + + ret = wae_decrypt_web_application(pkgId, appType, encrypted, encLen, &decrypted, &decLen); + + if (ret != WAE_ERROR_NONE) { + FPRINTF("...FAIL: wae_decrypt_web_application. ret=%d\n", ret); + goto error; + } + + if (plaintextLen != decLen) { + FPRINTF("...FAIL: plaintextLen(%d) != decLen(%d)\n", (int) plaintextLen, (int) decLen); + ret = WAE_ERROR_CRYPTO; + goto error; + } + + memcpy(decrypted_str, decrypted, decLen); + FPRINTF("...plaintext(downloaded) = %s\n", plaintext); + FPRINTF("...decrypted(downloaded) = %s\n", decrypted_str); + + if (strcmp(plaintext, decrypted_str) != 0) { + FPRINTF("...FAIL: plaintext(%s) != decrypted(%s)\n", plaintext, decrypted_str); + ret = WAE_ERROR_CRYPTO; + goto error; + } + + ret = wae_remove_app_dek(pkgId, appType); + + if (ret != WAE_ERROR_NONE) { + FPRINTF("...FAIL: wae_remove_app_dek. ret=%d\n", ret); + goto error; + } error: - if(encrypted != NULL) - free(encrypted); - if(decrypted != NULL) - free(decrypted); + if (encrypted != NULL) + free(encrypted); + + if (decrypted != NULL) + free(decrypted); - return ret; + return ret; } int wae_tc_encrypt_decrypt_normal_app() { - return _wae_tc_encrypt_decrypt_web_app(WAE_DOWNLOADED_NORMAL_APP); + return _wae_tc_encrypt_decrypt_web_app(WAE_DOWNLOADED_NORMAL_APP); } int wae_tc_encrypt_decrypt_global_app() { - return _wae_tc_encrypt_decrypt_web_app(WAE_DOWNLOADED_GLOBAL_APP); + return _wae_tc_encrypt_decrypt_web_app(WAE_DOWNLOADED_GLOBAL_APP); } int wae_tc_encrypt_decrypt_preloaded_app() { - return _wae_tc_encrypt_decrypt_web_app(WAE_PRELOADED_APP); + return _wae_tc_encrypt_decrypt_web_app(WAE_PRELOADED_APP); } -int run_test_cases(char* test_mode) +int run_test_cases(char *test_mode) { - if(strcmp(test_mode, "system") == 0) { - RUNTC(wae_tc_encrypt_decrypt_app_dek, "wae_tc_encrypt_decrypt_app_dek"); - RUNTC(wae_tc_encrypt_decrypt_aes_cbc, "wae_tc_encrypt_decrypt_aes_cbc"); - RUNTC(wae_tc_cache, "wae_tc_cache"); + if (strcmp(test_mode, "system") == 0) { + RUNTC(wae_tc_encrypt_decrypt_app_dek, "wae_tc_encrypt_decrypt_app_dek"); + RUNTC(wae_tc_encrypt_decrypt_aes_cbc, "wae_tc_encrypt_decrypt_aes_cbc"); + RUNTC(wae_tc_cache, "wae_tc_cache"); - RUNTC(wae_tc_get_random, "wae_tc_get_random"); - RUNTC(wae_tc_get_alias, "wae_tc_get_alias"); + RUNTC(wae_tc_get_random, "wae_tc_get_random"); + RUNTC(wae_tc_get_alias, "wae_tc_get_alias"); - RUNTC(wae_tc_add_get_remove_dek_for_global_app, "wae_tc_add_get_remove_dek_for_global_app"); - RUNTC(wae_tc_add_get_remove_dek_for_preloaded_app, "wae_tc_add_get_remove_dek_for_preloaded_app"); + RUNTC(wae_tc_add_get_remove_dek_for_global_app, "wae_tc_add_get_remove_dek_for_global_app"); + RUNTC(wae_tc_add_get_remove_dek_for_preloaded_app, "wae_tc_add_get_remove_dek_for_preloaded_app"); - RUNTC(wae_tc_get_preloaded_app_dek_file_path, "wae_tc_get_preloaded_app_dek_file_path"); - RUNTC(wae_tc_extract_pkg_id_from_file_name, "wae_tc_extract_pkg_id_from_file_name"); - RUNTC(wae_tc_read_write_encrypted_app_dek, "wae_tc_read_write_encrypted_app_dek"); + RUNTC(wae_tc_get_preloaded_app_dek_file_path, "wae_tc_get_preloaded_app_dek_file_path"); + RUNTC(wae_tc_extract_pkg_id_from_file_name, "wae_tc_extract_pkg_id_from_file_name"); + RUNTC(wae_tc_read_write_encrypted_app_dek, "wae_tc_read_write_encrypted_app_dek"); - RUNTC(wae_tc_create_app_dek_for_global_app, "wae_tc_create_app_dek_for_global_app"); - RUNTC(wae_tc_create_app_dek_for_preloaded_app, "wae_tc_create_app_dek_for_preloaded_app"); + RUNTC(wae_tc_create_app_dek_for_global_app, "wae_tc_create_app_dek_for_global_app"); + RUNTC(wae_tc_create_app_dek_for_preloaded_app, "wae_tc_create_app_dek_for_preloaded_app"); - RUNTC(wae_tc_get_create_preloaded_app_dek, "wae_tc_get_create_preloaded_app_dek"); - RUNTC(wae_tc_load_preloaded_app_deks, "wae_tc_load_preloaded_app_deks"); + RUNTC(wae_tc_get_create_preloaded_app_dek, "wae_tc_get_create_preloaded_app_dek"); + RUNTC(wae_tc_load_preloaded_app_deks, "wae_tc_load_preloaded_app_deks"); - RUNTC(wae_tc_encrypt_decrypt_global_app, "wae_tc_encrypt_decrypt_global_app"); - RUNTC(wae_tc_encrypt_decrypt_preloaded_app, "wae_tc_encrypt_decrypt_preloaded_app"); - }else { - RUNTC(wae_tc_add_get_remove_dek_for_normal_app, "wae_tc_add_get_remove_dek_for_normal_app"); - RUNTC(wae_tc_create_app_dek_for_normal_app, "wae_tc_create_app_dek_for_normal_app"); - RUNTC(wae_tc_encrypt_decrypt_normal_app, "wae_tc_encrypt_decrypt_normal_app"); - } + RUNTC(wae_tc_encrypt_decrypt_global_app, "wae_tc_encrypt_decrypt_global_app"); + RUNTC(wae_tc_encrypt_decrypt_preloaded_app, "wae_tc_encrypt_decrypt_preloaded_app"); + } else { + RUNTC(wae_tc_add_get_remove_dek_for_normal_app, "wae_tc_add_get_remove_dek_for_normal_app"); + RUNTC(wae_tc_create_app_dek_for_normal_app, "wae_tc_create_app_dek_for_normal_app"); + RUNTC(wae_tc_encrypt_decrypt_normal_app, "wae_tc_encrypt_decrypt_normal_app"); + } - PRINT_TC_SUMMARY(); - return 0; + PRINT_TC_SUMMARY(); + return 0; } -int main(int argc, char* argv[]) +int main(int argc, char *argv[]) { - int ret = 0; + int ret = 0; - if(argc != 2 || (strcmp(argv[1],"system") != 0 && strcmp(argv[1],"user")) ) { - FPRINTF("invalid command formant. command format : %s system|user\n", argv[0]); - exit(1); - } + if (argc != 2 || (strcmp(argv[1], "system") != 0 && strcmp(argv[1], "user"))) { + FPRINTF("invalid command formant. command format : %s system|user\n", argv[0]); + exit(1); + } - ret = run_test_cases(argv[1]); + ret = run_test_cases(argv[1]); - return ret; + return ret; } |