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

📄 dsa_parm.cpp

📁 含有多种公开密钥算法、多种块加密、多种数据流加密、多种HASH函数、多种CheckSum校验、多种MAC校验等几十种加密算法的程序
💻 CPP
字号:
/************************************************** DSA Prime Generation Source File               ** (C) 1999-2002 The Botan Project                **************************************************/#include <botan/numthry.h>#include <botan/sha1.h>#include <botan/rng.h>namespace Botan {namespace {void increment(SecureVector<byte>& seed)   {   for(u32bit j = seed.size(); j > 0; j--)      if(++seed[j-1])         break;   }}/************************************************** Attempt DSA prime generation with given seed   **************************************************/bool generate_dsa_primes(BigInt& p, BigInt& q, const byte const_seed[],                         u32bit seed_len, u32bit pbits, u32bit counter_start)   {   if(seed_len < 20)      throw Invalid_Argument("DSA prime generation needs a seed "                             "at least 160 bits long");   if((pbits % 64 != 0) || (pbits > 1024) || (pbits < 512))      throw Invalid_Argument("DSA prime generation algorithm does not support "                             "prime size " + to_string(pbits));   SHA1 sha1;   SecureVector<byte> seed(const_seed, seed_len), qhash;   qhash = sha1.process(seed, seed.size());   increment(seed);   SecureVector<byte> qhash2 = sha1.process(seed, seed.size());   xor_buf(qhash, qhash2, qhash.size());   qhash[0] |= 0x80;   qhash[19] |= 0x01;   q.binary_decode(qhash);   if(!is_prime(q))      return false;   u32bit n = (pbits-1) / 160, b = (pbits-1) % 160;   SecureVector<byte> W(20 * (n+1));   BigInt X;   u32bit bumps = 0;   for(u32bit j = 0; j != counter_start; j++)      for(u32bit k = 0; k != n + 1; k++)         increment(seed);   for(u32bit j = 0; j != 4096 - counter_start; j++)      {      for(u32bit k = 0; k != n + 1; k++)         {         bumps++;         increment(seed);         sha1.update(seed, seed.size());         sha1.final(W + 20 * (n-k));         }      X.binary_decode(W + (20 - 1 - b/8), W.size() - (20 - 1 - b/8));      X.set_bit(pbits-1);      p = X - (X % (2*q) - 1);      if(p.bits() == pbits && is_prime(p))         return true;      }   return false;   }/************************************************** Generate DSA Primes                            **************************************************/SecureVector<byte> generate_dsa_primes(BigInt& p, BigInt& q, u32bit pbits)   {   SecureVector<byte> seed(20);   while(true)      {      Global_RNG::randomize(seed, seed.size());      if(generate_dsa_primes(p, q, seed, seed.size(), pbits))         return seed;      }   }}

⌨️ 快捷键说明

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