static void gen_des_key_56_112_168() { printf(" #### gen_des_key_56_112_168 ####\n"); TEE_Result ret; TEE_ObjectHandle des; TEE_ObjectHandle des3_112; TEE_ObjectHandle des3_168; /* des */ ret = TEE_AllocateTransientObject(TEE_TYPE_DES, 56, &des); if (ret != TEE_SUCCESS) { printf("Fail: des alloc\n"); goto err; } ret = TEE_GenerateKey(des, 56, NULL, 0); if (ret != TEE_SUCCESS) { printf("Fail: gen des\n"); goto err; } /* des3 112 */ ret = TEE_AllocateTransientObject(TEE_TYPE_DES3, 112, &des3_112); if (ret != TEE_SUCCESS) { printf("Fail: des3_112 alloc\n"); goto err; } ret = TEE_GenerateKey(des3_112, 112, NULL, 0); if (ret != TEE_SUCCESS) { printf("Fail: gen des3_112\n"); goto err; } /* des3 168 */ ret = TEE_AllocateTransientObject(TEE_TYPE_DES3, 168, &des3_168); if (ret != TEE_SUCCESS) { printf("Fail: des3_168 alloc\n"); goto err; } ret = TEE_GenerateKey(des3_168, 168, NULL, 0); if (ret != TEE_SUCCESS) { printf("Fail: gen des3_168\n"); goto err; } err: TEE_FreeTransientObject(des); TEE_FreeTransientObject(des3_112); TEE_FreeTransientObject(des3_168); }
TEE_Result get_random_key_method1() { TEE_Result res; TEE_OperationHandle operation = TEE_HANDLE_NULL; uint32_t algorithm = TEE_ALG_HMAC_MD5; uint32_t mode = TEE_MODE_MAC; uint32_t maxKeySize = 512; res = TEE_AllocateOperation(&operation, algorithm, mode, maxKeySize); if(res != TEE_SUCCESS) { TEE_Printf("[err] TEE_AllocateOperation\n"); goto _ret_; } uint32_t maxKeyObjectSize = maxKeySize; //TEE_Attribute params; //uint32_t paramCount = 0; res = TEE_GenerateKey(operation->key1, maxKeyObjectSize, NULL, 0); if(res != TEE_SUCCESS) { TEE_Printf("[err] TEE_GenerateKey\n"); return 0; } _ret_: if (operation) { TEE_FreeOperation(operation); } return res; }
static void gen_rsa_key_pair_and_save_read() { printf(" #### gen_rsa_key_pair_and_save_read ####\n"); TEE_Result ret; TEE_ObjectHandle handler; TEE_ObjectHandle handler2; size_t key_size = 512; char objID[] = "56c5d1b260704de30fe7af67e5b9327613abebe6172a2b4e949d84b8e561e2fb"; size_t objID_len = 64; uint32_t flags = 0xffffffff ^ TEE_DATA_FLAG_EXCLUSIVE; void * data; size_t data_len = 12; data = malloc(data_len); if (data == NULL) goto err; RAND_bytes(data, data_len); ret = TEE_AllocateTransientObject(TEE_TYPE_RSA_KEYPAIR, key_size, &handler); if (ret == TEE_ERROR_OUT_OF_MEMORY) { printf("Fail: no mem\n"); goto err; } if (ret == TEE_ERROR_NOT_SUPPORTED) { printf("Fail: no sup\n"); goto err; } ret = TEE_GenerateKey(handler, key_size, NULL, 0); if (ret != TEE_SUCCESS) { printf("Fail: bad para\n"); goto err; } ret = TEE_CreatePersistentObject(TEE_STORAGE_PRIVATE, (void *)objID, objID_len, flags, handler, data, data_len, NULL); if (ret != TEE_SUCCESS) { printf("Fail: per creation\n"); goto err; } ret = TEE_OpenPersistentObject(TEE_STORAGE_PRIVATE, (void *)objID, objID_len, flags, &handler2); if (ret != TEE_SUCCESS) { printf("Fail: per open\n"); goto err; } err: TEE_FreeTransientObject(handler); TEE_CloseAndDeletePersistentObject(handler2); free(data); }
static void gen_RSA_per_obj_with_data(TEE_ObjectHandle *gen_obj, size_t data_len) { TEE_Result ret; TEE_ObjectHandle handler; size_t key_size = 512; void *ID = NULL; size_t ID_len = 30; uint32_t flags = 0xffffffff ^ TEE_DATA_FLAG_EXCLUSIVE; void * init_data; init_data = malloc(data_len); if (init_data == NULL) { printf("Fail: gen_rand_data_obj(inti_data mem)\n"); goto err; } RAND_bytes(init_data, data_len); ID = malloc(ID_len); if (ID == NULL) { printf("Fail: gen_rand_data_obj(ID mem)\n"); goto err; } RAND_bytes(ID, ID_len); ret = TEE_AllocateTransientObject(TEE_TYPE_RSA_KEYPAIR, key_size, &handler); if (ret != TEE_SUCCESS) { printf("Fail: gen_RSA_per_obj_with_data(alloc)\n"); goto err; } ret = TEE_GenerateKey(handler, key_size, NULL, 0); if (ret != TEE_SUCCESS) { printf("Fail: gen_RSA_per_obj_with_data(gen key)\n"); goto err; } ret = TEE_CreatePersistentObject(TEE_STORAGE_PRIVATE, ID, ID_len, flags, handler, init_data, data_len, gen_obj); if (ret != TEE_SUCCESS) { printf("Fail: gen_RSA_per_obj_with_data(per create)\n"); goto err; } err: TEE_FreeTransientObject(handler); free(ID); free(init_data); }
static void gen_rsa_key_pair_and_copy_public() { printf(" #### gen_rsa_key_pair_and_copy_public ####\n"); TEE_Result ret; TEE_ObjectHandle rsa_keypair; TEE_ObjectHandle rsa_pubkey; size_t key_size = 512; ret = TEE_AllocateTransientObject(TEE_TYPE_RSA_KEYPAIR, key_size, &rsa_keypair); if (ret == TEE_ERROR_OUT_OF_MEMORY) { printf("Fail: no mem\n"); goto err; } if (ret == TEE_ERROR_NOT_SUPPORTED) { printf("Fail: no sup\n"); goto err; } ret = TEE_AllocateTransientObject(TEE_TYPE_RSA_PUBLIC_KEY, key_size, &rsa_pubkey); if (ret == TEE_ERROR_OUT_OF_MEMORY) { printf("Fail: no mem\n"); goto err; } if (ret == TEE_ERROR_NOT_SUPPORTED) { printf("Fail: no sup\n"); goto err; } ret = TEE_GenerateKey(rsa_keypair, key_size, NULL, 0); if (ret != TEE_SUCCESS) { printf("Fail: bad para\n"); goto err; } TEE_CopyObjectAttributes(rsa_pubkey, rsa_keypair); err: TEE_FreeTransientObject(rsa_keypair); TEE_FreeTransientObject(rsa_pubkey); }
TEE_Result ta_entry_generate_key(uint32_t param_type, TEE_Param params[4]) { TEE_Result res; TEE_Attribute *attrs; uint32_t attr_count; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); res = unpack_attrs(params[1].memref.buffer, params[1].memref.size, &attrs, &attr_count); if (res != TEE_SUCCESS) return res; res = TEE_GenerateKey((TEE_ObjectHandle) params[0].value.a, params[0].value.b, attrs, attr_count); TEE_Free(attrs); return res; }
static void data_stream_write_read() { printf(" #### data_stream_write_read ####\n"); TEE_Result ret; TEE_ObjectHandle handler; TEE_ObjectHandle per_han; size_t key_size = 512; char objID[] = "56c5d1b260704de30fe7af67e5b9327613abebe6172a2b4e949d84b8e561e2fb"; size_t objID_len = 64; uint32_t flags = 0xffffffff ^ TEE_DATA_FLAG_EXCLUSIVE; void *write_data = NULL; void *read_data = NULL; size_t data_size = 50; uint32_t count = 0; write_data = calloc(1, data_size); if (write_data == NULL) goto err; read_data = calloc(1, data_size); if (read_data == NULL) goto err; /* gen random data */ RAND_bytes(write_data, data_size); ret = TEE_AllocateTransientObject(TEE_TYPE_RSA_KEYPAIR, key_size, &handler); if (ret == TEE_ERROR_OUT_OF_MEMORY) { printf("Fail: no mem\n"); goto err; } if (ret == TEE_ERROR_NOT_SUPPORTED) { printf("Fail: no sup\n"); goto err; } ret = TEE_GenerateKey(handler, key_size, NULL, 0); if (ret != TEE_SUCCESS) { printf("Fail: bad para\n"); goto err; } ret = TEE_CreatePersistentObject(TEE_STORAGE_PRIVATE, (void *)objID, objID_len, flags, handler, NULL, 0, &per_han); if (ret != TEE_SUCCESS) { printf("Fail: per creation\n"); goto err; } ret = TEE_WriteObjectData(per_han, write_data, data_size); if (ret != TEE_SUCCESS) { printf("Fail: per write\n"); goto err; } ret = TEE_SeekObjectData(per_han, 0, TEE_DATA_SEEK_SET); if (ret != TEE_SUCCESS) { printf("Fail: per seek\n"); goto err; } ret = TEE_ReadObjectData(per_han, read_data, data_size, &count); if (ret != TEE_SUCCESS) { printf("Fail: per read\n"); goto err; } err: TEE_CloseAndDeletePersistentObject(per_han); TEE_CloseObject(handler); free(write_data); free(read_data); }