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

📄 x917_rng.cpp

📁 含有多种公开密钥算法、多种块加密、多种数据流加密、多种HASH函数、多种CheckSum校验、多种MAC校验等几十种加密算法的程序
💻 CPP
字号:
/************************************************** ANSI X9.17 RNG Source File                     ** (C) 1999-2002 The Botan Project                **************************************************/#include <botan/x917_rng.h>#include <botan/lookup.h>namespace Botan {/************************************************** Generate a random byte                         **************************************************/byte ANSI_X917_RNG::random()   {   if(position == MAX_OUT_PER_BUFFER)      {      generate(system_clock());      if(++iteration == ITERATIONS_BEFORE_RESEED)         reseed();      }   return buffer[position++];   }/************************************************** Generate a buffer of random bytes              **************************************************/void ANSI_X917_RNG::randomize(byte out[], u32bit length)   {   while(position && length) { out[0] ^= random(); out++; length--; }   while(length >= MAX_OUT_PER_BUFFER)      {      generate(system_clock());      if(++iteration == ITERATIONS_BEFORE_RESEED)         reseed();      xor_buf(out, buffer, MAX_OUT_PER_BUFFER);      out += MAX_OUT_PER_BUFFER;      length -= MAX_OUT_PER_BUFFER;      }   while(length) { out[0] ^= random(); out++; length--; }   }/************************************************** Refill the internal state                      **************************************************/void ANSI_X917_RNG::generate(u64bit input)   {   xor_buf(tstamp, (byte*)&input, 8);   cipher->encrypt(tstamp);   xor_buf(buffer, state, tstamp, cipher->BLOCK_SIZE);   cipher->encrypt(buffer);   xor_buf(state, buffer, tstamp, cipher->BLOCK_SIZE);   cipher->encrypt(state);   position = 0;   }/************************************************** Add entropy to internal state                  **************************************************/void ANSI_X917_RNG::add_randomness(const byte data[], u32bit length) throw()   {   while(length)      {      u32bit added = std::min(state.size(), length);      xor_buf(state, data, added);      generate(system_clock());      length -= added;      data += added;      }   reseed();   }/************************************************** Reseed the internal state                      **************************************************/void ANSI_X917_RNG::reseed()   {   SecureVector<byte> key(cipher->MAXIMUM_KEYLENGTH);   generate(system_clock());   state = buffer;   generate(system_clock());   tstamp = buffer;   randomize(key, key.size());   cipher->set_key(key, key.size());   generate(system_time());   iteration = 0;   }/************************************************** Clear memory of sensitive data                 **************************************************/void ANSI_X917_RNG::clear() throw()   {   cipher->clear();   buffer.clear();   tstamp.clear();   state.clear();   position = iteration = 0;   }/************************************************** Return the name of this type                   **************************************************/std::string ANSI_X917_RNG::name() const   {   return "X9.17(" + cipher->name() + ")";   }/************************************************** ANSI X917 RNG Constructor                      **************************************************/ANSI_X917_RNG::ANSI_X917_RNG() :   ITERATIONS_BEFORE_RESEED(48), MAX_OUT_PER_BUFFER(8)   {   cipher = get_block_cipher("AES");   buffer.create(cipher->BLOCK_SIZE);   state.create(cipher->BLOCK_SIZE);   tstamp.create(cipher->BLOCK_SIZE);   position = iteration = 0;   reseed();   }}

⌨️ 快捷键说明

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