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

📄 mp_shift.cpp

📁 含有多种公开密钥算法、多种块加密、多种数据流加密、多种HASH函数、多种CheckSum校验、多种MAC校验等几十种加密算法的程序
💻 CPP
字号:
/************************************************** MP Shift Algorithms Source File                ** (C) 1999-2002 The Botan Project                **************************************************/#include <botan/mp_core.h>#include <string.h>extern "C" {/************************************************** Single Operand Left Shift                      **************************************************/void bigint_shl1(word* x, u32bit x_size, u32bit word_shift, u32bit bit_shift)   {   if(word_shift)      {      for(u32bit j = 1; j != x_size + 1; j++)         x[(x_size - j) + word_shift] = x[x_size - j];      memset(x, 0, word_shift * sizeof(word));      }   if(bit_shift)      {      word carry = 0;      for(u32bit j = word_shift; j != x_size + word_shift + 1; j++)         {         word temp = x[j];         x[j] = (temp << bit_shift) | carry;         carry = (temp >> (MP_WORD_BITS - bit_shift));         }      }   }/************************************************** Single Operand Right Shift                     **************************************************/void bigint_shr1(word* x, u32bit x_size, u32bit word_shift, u32bit bit_shift)   {   if(x_size < word_shift)      {      memset(x, 0, x_size * sizeof(word));      return;      }   for(u32bit j = 0; j != x_size - word_shift; j++)      x[j] = x[j + word_shift];   for(u32bit j = x_size - word_shift; j != x_size; j++)      x[j] = 0;   if(bit_shift)      {      word carry = 0;      for(u32bit j = x_size - word_shift; j > 0; j--)         {         word temp = x[j-1];         x[j-1] = (temp >> bit_shift) | carry;         carry = (temp << (MP_WORD_BITS - bit_shift));         }      }   }/************************************************** Two Operand Left Shift                         **************************************************/void bigint_shl2(word* y, const word* x, u32bit x_size,                 u32bit word_shift, u32bit bit_shift)   {   for(u32bit j = 0; j != x_size; j++)      y[j + word_shift] = x[j];   if(bit_shift)      {      word carry = 0;      for(u32bit j = word_shift; j != x_size + word_shift + 1; j++)         {         word temp = y[j];         y[j] = (temp << bit_shift) | carry;         carry = (temp >> (MP_WORD_BITS - bit_shift));         }      }   }/************************************************** Two Operand Right Shift                        **************************************************/void bigint_shr2(word* y, const word* x, u32bit x_size,                 u32bit word_shift, u32bit bit_shift)   {   if(x_size < word_shift) return;   for(u32bit j = 0; j != x_size - word_shift; j++)      y[j] = x[j + word_shift];   if(bit_shift)      {      word carry = 0;      for(u32bit j = x_size - word_shift; j > 0; j--)         {         word temp = y[j-1];         y[j-1] = (temp >> bit_shift) | carry;         carry = (temp << (MP_WORD_BITS - bit_shift));         }      }   }}

⌨️ 快捷键说明

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