Esempio n. 1
0
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;
}
Esempio n. 2
0
TEE_Result set_spec_key_method(const void *key, size_t kelen)
{
    TEE_Result res;
    TEE_OperationHandle operation;
    uint32_t algorithm   = TEE_ALG_HMAC_MD5;
    uint32_t mode        = TEE_MODE_MAC;
    uint32_t maxKeySize  = 512;
    uint32_t attributeID = TEE_ATTR_SECRET_VALUE;


    res = TEE_AllocateOperation(&operation, algorithm, mode, maxKeySize);
    if(res != TEE_SUCCESS) {
        TEE_Printf("[err] TEE_AllocateOperation\n");
        goto _ret_;
    }

    res = set_key_value(operation->key1, key, kelen, attributeID);
    if(res != TEE_SUCCESS) {
        TEE_Printf("[err] set_key_value\n");
        goto _ret_;
    }

_ret_:

    if (operation) {
        TEE_FreeOperation(operation);   
    }

    return res;
}
Esempio n. 3
0
TEE_Result crypt_cipher_aes_cbc(const void *message, size_t message_len,
								const void *key, size_t key_len,
								void *cipher, size_t *cipher_len, 
								const void *IV, size_t IVLen,
								uint32_t mode)
{
	TEE_Result res = TEE_ERROR_GENERIC;

	TEE_OperationHandle operation =  TEE_HANDLE_NULL;
	uint32_t algorithm            =  TEE_ALG_AES_CBC_NOPAD;
	uint32_t maxKeySize           =  256;						/* valid sizes 128, 192, 256 */

	res = TEE_AllocateOperation(&operation, algorithm, mode, maxKeySize);
	if(res != TEE_SUCCESS) {
		TEE_Printf("[err] TEE_AllocateOperation\n");
		goto _ret_;
	}

	if(!key || 0 >= key_len) {
		res = TEE_ERROR_BAD_PARAMETERS;
		goto _ret_;
	}

	// set crypt key
	TEE_Attribute attr_list[1];
	uint32_t attributeID = TEE_ATTR_SECRET_VALUE;
	TEE_MemFill(&attr_list[0], sizeof(attr_list[0]), 0);
	TEE_InitRefAttribute(&attr_list[0], attributeID /* TEE_ATTR_SECRET_VALUE */, (void *)key, key_len );
	res = TEE_PopulateTransientObject(operation->key1, &attr_list[0], sizeof(attr_list)/sizeof(attr_list[0]));
	if(res != TEE_SUCCESS) {
		TEE_Printf("[err] TEE_PopulateTransientObject\n");
		goto _ret_;
	}

	// do crypt
	res = crypt_cipher_interface(operation,  (const void *)message, message_len, 
								cipher, cipher_len,
								IV, IVLen);
	if(res != TEE_SUCCESS) {
		TEE_Printf("[err] crypt_cipher_interface\n");
		goto _ret_;
	}


_ret_:

	if (operation) {
		TEE_FreeOperation(operation);	
	}
	if(res != TEE_SUCCESS) {
		TEE_Panic(res);
	}

	return res;
}
Esempio n. 4
0
TEE_Result ta_entry_allocate_operation(uint32_t param_type, TEE_Param params[4])
{
	TEE_Result res;
	TEE_OperationHandle op;

	ASSERT_PARAM_TYPE(TEE_PARAM_TYPES
			  (TEE_PARAM_TYPE_VALUE_INOUT,
			   TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE,
			   TEE_PARAM_TYPE_NONE));

	res = TEE_AllocateOperation(&op,
				    params[0].value.b, params[1].value.a,
				    params[1].value.b);
	params[0].value.a = (uint32_t) op;
	return res;
}
Esempio n. 5
0
static TEE_Result invoke_generate_hash(uint32_t param_types,
				       TEE_Param params[4])
{
	TEE_Result res = TEE_ERROR_BAD_PARAMETERS;

	void *message = NULL;
	size_t message_len;

	void *digest = NULL;
	size_t digest_len;

	TEE_OperationHandle operation;

	uint32_t exp_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT,
						   TEE_PARAM_TYPE_MEMREF_OUTPUT,
						   TEE_PARAM_TYPE_NONE,
						   TEE_PARAM_TYPE_NONE);
	DMSG("has been called");
	if (param_types != exp_param_types)
		return TEE_ERROR_BAD_PARAMETERS;

	message = params[0].memref.buffer;
	message_len = params[0].memref.size;

	digest = params[1].memref.buffer;
	digest_len = params[1].memref.size;

	res = TEE_AllocateOperation(&operation, TEE_ALG_SHA1, TEE_MODE_DIGEST, 0);

	if (res != TEE_SUCCESS) {
		DMSG("TEE_AllocateOperation failed! res: 0x%x", res);
		goto out;
	}

	res = TEE_DigestDoFinal(operation, message, message_len, digest, &digest_len);

	if (res != TEE_SUCCESS) {
		DMSG("TEE_DigestDoFinal failed! res: 0x%x", res);
	}
out:
	if (operation)
		TEE_FreeOperation(operation);

	return res;
}
Esempio n. 6
0
TEE_Result get_random_key_method2()
{
    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_;
    }

    TEE_ObjectHandle hKeyObject  = TEE_HANDLE_NULL;
    TEE_ObjectType keyObjectType = TEE_TYPE_HMAC_MD5;
    uint32_t maxKeyObjectSize    = maxKeySize; 

    res = TEE_NewRandomKeyObject(keyObjectType, maxKeyObjectSize, &hKeyObject);
    if(res != TEE_SUCCESS) {
        TEE_Printf("[err] TEE_AllocateTransientObject\n");
        return 0;
    }   
    
    res = TEE_SetOperationKey(operation, hKeyObject);
    if(res != TEE_SUCCESS) {
        TEE_Printf("[err] TEE_SetOperationKey\n");
        goto _ret_;
    }

_ret_:
    if (operation) {
        TEE_FreeOperation(operation);   
    }
    if(hKeyObject) {
        TEE_FreeTransientObject(hKeyObject);
    }

    return res;
}