예제 #1
0
IppStatus sgx_ipp_newBN(const Ipp32u *p_data, int size_in_bytes, IppsBigNumState **p_new_BN)
{
    IppsBigNumState *pBN = 0;
    int bn_size = 0;

    if (p_new_BN == NULL || (size_in_bytes <= 0) || ((size_in_bytes % sizeof(Ipp32u)) != 0))
        return ippStsBadArgErr;

    // Get the size of the IppsBigNumState context in bytes
    IppStatus error_code = ippsBigNumGetSize(size_in_bytes/(int)sizeof(Ipp32u), &bn_size);
    if (error_code != ippStsNoErr)
    {
        *p_new_BN = 0;
        return error_code;
    }
    pBN = (IppsBigNumState *)malloc(bn_size);
    if (!pBN)
    {
        error_code = ippStsMemAllocErr;
        *p_new_BN = 0;
        return error_code;
    }
    // Initialize context and partition allocated buffer
    error_code = ippsBigNumInit(size_in_bytes/(int)sizeof(Ipp32u), pBN);
    if (error_code != ippStsNoErr)
    {
        free(pBN);
        *p_new_BN = 0;
        return error_code;
    }
    if (p_data)
    {
        error_code = ippsSet_BN(IppsBigNumPOS, size_in_bytes/(int)sizeof(Ipp32u), p_data, pBN);
        if (error_code != ippStsNoErr)
        {
            *p_new_BN = 0;
            free(pBN);
            return error_code;
        }
    }


    *p_new_BN = pBN;
    return error_code;
}
예제 #2
0
extern "C" IppStatus newBN(const Ipp32u *data, int size_in_bytes, IppsBigNumState **p_new_BN)
{
    IppsBigNumState *pBN = 0;
    int bn_size = 0;

    if (p_new_BN == NULL || size_in_bytes <= 0 || size_in_bytes % sizeof(Ipp32u))
        return ippStsBadArgErr;

    /* Get the size of the IppsBigNumState context in bytes */
    IppStatus error_code = ippsBigNumGetSize(size_in_bytes / (int)sizeof(Ipp32u), &bn_size);
    if (error_code != ippStsNoErr) {
        *p_new_BN = 0;
        return error_code;
    }
    pBN = (IppsBigNumState *)malloc(bn_size);
    if (!pBN) {
        error_code = ippStsMemAllocErr;
        *p_new_BN = 0;
        return error_code;
    }
    /* Initializes context and partitions allocated buffer */
    error_code = ippsBigNumInit(size_in_bytes / (int)sizeof(Ipp32u), pBN);
    if (error_code != ippStsNoErr) {
        SAFE_FREE_MM(pBN);
        *p_new_BN = 0;
        return error_code;
    }
    if (data) {
        error_code = ippsSet_BN(IppsBigNumPOS, size_in_bytes / (int)sizeof(Ipp32u), data, pBN);
        if (error_code != ippStsNoErr) {
            SAFE_FREE_MM(pBN);
            *p_new_BN = 0;
            return error_code;
        }
    }
    *p_new_BN = pBN;
    return error_code;

}
IppsBigNumState* bnNew(const int size, const Ipp32u* pData){
	// get the size of the Big Number context
	int ctxSize;
	IppStatus res; 
	res = ippsBigNumGetSize(size, &ctxSize);
	if (res != ippStsNoErr )
		std::cerr << res;
	// allocate the Big Number context
	IppsBigNumState* pBN = (IppsBigNumState*) ( new Ipp8u[ctxSize] );
	// and initialize one
	res = ippsBigNumInit(size, pBN);
	if (res != ippStsNoErr )
		std::cerr << res;
	// if any data was supplied, then set up the Big Number value
	if(pData){
		res = ippsSet_BN(IppsBigNumPOS, size, pData, pBN);
		if (res != ippStsNoErr )
			std::cerr << res;
	}
	// return pointer to the Big Number context for future use
	return pBN;
}