⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mp_cmul.cpp

📁 含有多种公开密钥算法、多种块加密、多种数据流加密、多种HASH函数、多种CheckSum校验、多种MAC校验等几十种加密算法的程序
💻 CPP
字号:
/************************************************** Comba Multiplication Source File               ** (C) 1999-2002 The Botan Project                **************************************************/#include <botan/mp_core.h>namespace Botan {namespace {/************************************************** Multiply-Add Accumulator                       **************************************************/void word3_muladd(word& w0, word& w1, word& w2, word x, word y)   {   dword z = (dword)x * y + w2;   w2 = MP_LOW_WORD(z);   z = (dword)MP_HIGH_WORD(z) + w1;   w1 = MP_LOW_WORD(z);   w0 = (dword)MP_HIGH_WORD(z) + w0;   }/************************************************** Shift the words down                           **************************************************/word word3_shift(word& w0, word& w1, word& w2)   {   word t = w2;   w2 = w1;   w1 = w0;   w0 = 0;   return t;   }}/************************************************** Comba 4x4 Multiplication                       **************************************************/void bigint_comba4(word z[8], const word x[4], const word y[4])   {   word w0 = 0, w1 = 0, w2 = 0;   word3_muladd(w0, w1, w2, x[0], y[0]);   z[0] = word3_shift(w0, w1, w2);   word3_muladd(w0, w1, w2, x[0], y[1]);   word3_muladd(w0, w1, w2, x[1], y[0]);   z[1] = word3_shift(w0, w1, w2);   word3_muladd(w0, w1, w2, x[0], y[2]);   word3_muladd(w0, w1, w2, x[1], y[1]);   word3_muladd(w0, w1, w2, x[2], y[0]);   z[2] = word3_shift(w0, w1, w2);   word3_muladd(w0, w1, w2, x[0], y[3]);   word3_muladd(w0, w1, w2, x[1], y[2]);   word3_muladd(w0, w1, w2, x[2], y[1]);   word3_muladd(w0, w1, w2, x[3], y[0]);   z[3] = word3_shift(w0, w1, w2);   word3_muladd(w0, w1, w2, x[1], y[3]);   word3_muladd(w0, w1, w2, x[2], y[2]);   word3_muladd(w0, w1, w2, x[3], y[1]);   z[4] = word3_shift(w0, w1, w2);   word3_muladd(w0, w1, w2, x[2], y[3]);   word3_muladd(w0, w1, w2, x[3], y[2]);   z[5] = word3_shift(w0, w1, w2);   word3_muladd(w0, w1, w2, x[3], y[3]);   z[6] = w2;   z[7] = w1;   }/************************************************** Comba 8x8 Multiplication                       **************************************************/void bigint_comba8(word z[16], const word x[8], const word y[8])   {   word w0 = 0, w1 = 0, w2 = 0;   word3_muladd(w0, w1, w2, x[0], y[0]);   z[0] = word3_shift(w0, w1, w2);   word3_muladd(w0, w1, w2, x[0], y[1]);   word3_muladd(w0, w1, w2, x[1], y[0]);   z[1] = word3_shift(w0, w1, w2);   word3_muladd(w0, w1, w2, x[0], y[2]);   word3_muladd(w0, w1, w2, x[1], y[1]);   word3_muladd(w0, w1, w2, x[2], y[0]);   z[2] = word3_shift(w0, w1, w2);   word3_muladd(w0, w1, w2, x[0], y[3]);   word3_muladd(w0, w1, w2, x[1], y[2]);   word3_muladd(w0, w1, w2, x[2], y[1]);   word3_muladd(w0, w1, w2, x[3], y[0]);   z[3] = word3_shift(w0, w1, w2);   word3_muladd(w0, w1, w2, x[0], y[4]);   word3_muladd(w0, w1, w2, x[1], y[3]);   word3_muladd(w0, w1, w2, x[2], y[2]);   word3_muladd(w0, w1, w2, x[3], y[1]);   word3_muladd(w0, w1, w2, x[4], y[0]);   z[4] = word3_shift(w0, w1, w2);   word3_muladd(w0, w1, w2, x[0], y[5]);   word3_muladd(w0, w1, w2, x[1], y[4]);   word3_muladd(w0, w1, w2, x[2], y[3]);   word3_muladd(w0, w1, w2, x[3], y[2]);   word3_muladd(w0, w1, w2, x[4], y[1]);   word3_muladd(w0, w1, w2, x[5], y[0]);   z[5] = word3_shift(w0, w1, w2);   word3_muladd(w0, w1, w2, x[0], y[6]);   word3_muladd(w0, w1, w2, x[1], y[5]);   word3_muladd(w0, w1, w2, x[2], y[4]);   word3_muladd(w0, w1, w2, x[3], y[3]);   word3_muladd(w0, w1, w2, x[4], y[2]);   word3_muladd(w0, w1, w2, x[5], y[1]);   word3_muladd(w0, w1, w2, x[6], y[0]);   z[6] = word3_shift(w0, w1, w2);   word3_muladd(w0, w1, w2, x[0], y[7]);   word3_muladd(w0, w1, w2, x[1], y[6]);   word3_muladd(w0, w1, w2, x[2], y[5]);   word3_muladd(w0, w1, w2, x[3], y[4]);   word3_muladd(w0, w1, w2, x[4], y[3]);   word3_muladd(w0, w1, w2, x[5], y[2]);   word3_muladd(w0, w1, w2, x[6], y[1]);   word3_muladd(w0, w1, w2, x[7], y[0]);   z[7] = word3_shift(w0, w1, w2);   word3_muladd(w0, w1, w2, x[1], y[7]);   word3_muladd(w0, w1, w2, x[2], y[6]);   word3_muladd(w0, w1, w2, x[3], y[5]);   word3_muladd(w0, w1, w2, x[4], y[4]);   word3_muladd(w0, w1, w2, x[5], y[3]);   word3_muladd(w0, w1, w2, x[6], y[2]);   word3_muladd(w0, w1, w2, x[7], y[1]);   z[8] = word3_shift(w0, w1, w2);   word3_muladd(w0, w1, w2, x[2], y[7]);   word3_muladd(w0, w1, w2, x[3], y[6]);   word3_muladd(w0, w1, w2, x[4], y[5]);   word3_muladd(w0, w1, w2, x[5], y[4]);   word3_muladd(w0, w1, w2, x[6], y[3]);   word3_muladd(w0, w1, w2, x[7], y[2]);   z[9] = word3_shift(w0, w1, w2);   word3_muladd(w0, w1, w2, x[3], y[7]);   word3_muladd(w0, w1, w2, x[4], y[6]);   word3_muladd(w0, w1, w2, x[5], y[5]);   word3_muladd(w0, w1, w2, x[6], y[4]);   word3_muladd(w0, w1, w2, x[7], y[3]);   z[10] = word3_shift(w0, w1, w2);   word3_muladd(w0, w1, w2, x[4], y[7]);   word3_muladd(w0, w1, w2, x[5], y[6]);   word3_muladd(w0, w1, w2, x[6], y[5]);   word3_muladd(w0, w1, w2, x[7], y[4]);   z[11] = word3_shift(w0, w1, w2);   word3_muladd(w0, w1, w2, x[5], y[7]);   word3_muladd(w0, w1, w2, x[6], y[6]);   word3_muladd(w0, w1, w2, x[7], y[5]);   z[12] = word3_shift(w0, w1, w2);   word3_muladd(w0, w1, w2, x[6], y[7]);   word3_muladd(w0, w1, w2, x[7], y[6]);   z[13] = word3_shift(w0, w1, w2);   word3_muladd(w0, w1, w2, x[7], y[7]);   z[14] = w2;   z[15] = w1;   }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -