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

📄 eme1.cpp

📁 含有多种公开密钥算法、多种块加密、多种数据流加密、多种HASH函数、多种CheckSum校验、多种MAC校验等几十种加密算法的程序
💻 CPP
字号:
/************************************************** EME1 Source File                               ** (C) 1999-2002 The Botan Project                **************************************************/#include <botan/eme1.h>#include <botan/rng.h>#include <botan/lookup.h>#include <botan/look_pk.h>namespace Botan {/************************************************** EME1 Pad Operation                             **************************************************/SecureVector<byte> EME1::pad(const byte in[], u32bit in_length,                             u32bit key_length) const   {   key_length /= 8;   if(in_length > key_length - 2*HASH_LENGTH - 1)      throw Exception("EME1: Input is too large");   SecureVector<byte> out(key_length);   out.clear();   Global_RNG::randomize(out, HASH_LENGTH);   out.copy(HASH_LENGTH, Phash, Phash.size());   out[out.size() - in_length - 1] = 0x01;   out.copy(out.size() - in_length, in, in_length);   mgf->mask(out, HASH_LENGTH, out + HASH_LENGTH, out.size() - HASH_LENGTH);   mgf->mask(out + HASH_LENGTH, out.size() - HASH_LENGTH, out, HASH_LENGTH);   return out;   }/************************************************** EME1 Unpad Operation                           **************************************************/SecureVector<byte> EME1::unpad(const byte in[], u32bit in_length,                               u32bit key_length) const   {   key_length /= 8;   if(in_length > key_length)      throw Decoding_Error("EME1::unpad");   SecureVector<byte> tmp(key_length);   tmp.copy(key_length - in_length, in, in_length);   mgf->mask(tmp + HASH_LENGTH, tmp.size() - HASH_LENGTH, tmp, HASH_LENGTH);   mgf->mask(tmp, HASH_LENGTH, tmp + HASH_LENGTH, tmp.size() - HASH_LENGTH);   for(u32bit j = 0; j != Phash.size(); j++)      if(tmp[j+HASH_LENGTH] != Phash[j])         throw Decoding_Error("EME1::unpad");   for(u32bit j = HASH_LENGTH + Phash.size(); j != tmp.size(); j++)      {      if(tmp[j] && tmp[j] != 0x01)         throw Decoding_Error("EME1::unpad");      if(tmp[j] && tmp[j] == 0x01)         {         SecureVector<byte> retval(tmp + j + 1, tmp.size() - j - 1);         return retval;         }      }   throw Decoding_Error("EME1::unpad");   }/************************************************** Return the max input size for a given key size **************************************************/u32bit EME1::maximum_input_size(u32bit keybits) const   {   if(keybits / 8 > 2*HASH_LENGTH + 1)      return ((keybits / 8) - 2*HASH_LENGTH - 1);   else      return 0;   }/************************************************** EME1 Constructor                               **************************************************/EME1::EME1(const std::string& hash_name, const std::string& mgf_name,           const std::string& P) :   HASH_LENGTH(output_length_of(hash_name))   {   HashFunction* hash = get_hash(hash_name);   mgf = get_mgf(mgf_name + "(" + hash_name + ")");   Phash = hash->process(P);   delete hash;   }}

⌨️ 快捷键说明

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