void TEE_BigIntInit(TEE_BigInt *bigInt, uint32_t len)
{
	memset(bigInt, 0, TEE_BigIntSizeInU32(len) * sizeof(uint32_t));

	struct bigint_hdr *hdr = (struct bigint_hdr *)bigInt;


	hdr->sign = 1;
	if ((len - BIGINT_HDR_SIZE_IN_U32) > MBEDTLS_MPI_MAX_LIMBS)
		API_PANIC("Too large bigint");
	hdr->alloc_size = len - BIGINT_HDR_SIZE_IN_U32;
}
void TEE_BigIntMul(TEE_BigInt *dest, const TEE_BigInt *op1,
		   const TEE_BigInt *op2)
{
	size_t bs1 = TEE_BigIntGetBitCount(op1);
	size_t bs2 = TEE_BigIntGetBitCount(op2);
	size_t s = TEE_BigIntSizeInU32(bs1) + TEE_BigIntSizeInU32(bs2);
	TEE_BigInt zero[TEE_BigIntSizeInU32(1)] = { 0 };
	TEE_BigInt *tmp = NULL;

	tmp = mempool_alloc(mbedtls_mpi_mempool, sizeof(uint32_t) * s);
	if (!tmp)
		TEE_Panic(TEE_ERROR_OUT_OF_MEMORY);

	TEE_BigIntInit(tmp, s);
	TEE_BigIntInit(zero, TEE_BigIntSizeInU32(1));

	bigint_binary(tmp, op1, op2, mbedtls_mpi_mul_mpi);

	TEE_BigIntAdd(dest, tmp, zero);

	mempool_free(mbedtls_mpi_mempool, tmp);
}
Пример #3
0
/*------------------------------------------------------------
 *
 *  test_BigIntInit
 *
 */
static void test_BigIntInit(void)
{

	TEE_BigInt *a;
	size_t aLen;

	TB_INFO("Testing BigIntInit");

	/* Testing normal allocation and initialization */
	aLen = TEE_BigIntSizeInU32(512);
	a = (TEE_BigInt *) TEE_Malloc(aLen * sizeof(TEE_BigInt), 0);
	TEE_BigIntInit(a, aLen);
	TEE_Free(a);

	/* Testing zero allocation */
	aLen = TEE_BigIntSizeInU32(0);
	a = (TEE_BigInt *) TEE_Malloc(aLen * sizeof(TEE_BigInt), 0);
	TEE_BigIntInit(a, aLen);
	TEE_Free(a);

	/* Testing too large */
	aLen = TEE_BigIntSizeInU32(4096);
	a = (TEE_BigInt *) TEE_Malloc(aLen * sizeof(TEE_BigInt), 0);
	TEE_BigIntInit(a, aLen);
	TEE_Free(a);

	/* Testing boundaries */
	aLen = TEE_BigIntSizeInU32(2048);
	a = (TEE_BigInt *) TEE_Malloc(aLen * sizeof(TEE_BigInt), 0);
	TEE_BigIntInit(a, aLen);
	TEE_Free(a);

	aLen = TEE_BigIntSizeInU32(2049);
	a = (TEE_BigInt *) TEE_Malloc(aLen * sizeof(TEE_BigInt), 0);
	TEE_BigIntInit(a, aLen);
	TEE_Free(a);

}
Пример #4
0
/*
 * TEE_BigIntFMMSizeInU32
 */
uint32_t TEE_BigIntFMMSizeInU32(uint32_t modulusSizeInBits)
{
	return TEE_BigIntSizeInU32(modulusSizeInBits) + 1;
}