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

📄 tsha.cpp

📁 伯克利做的SFTP安全文件传输协议
💻 CPP
字号:
// tsha.cc// testing SHA and SHA-HMAC function// copyright SafeTP Development Group, Inc., 2000  Terms of use are as specified in license.txt#include "ssha.h"      // SHA#include "shmac.h"     // HMAC#include "datablok.h"  // DataBlock#include "integer.h"   // Integer#include <stdio.h>     // printf#include <ctype.h>     // isprint#include <string.h>    // strlen#include <iostream.h>  // cout#include "blokutil.h"  // dataBlock2Integer, vice-versaDataBlock hash(DataBlock const &data, HashModule &hash){  DataBlock ret(hash.DigestSize());  hash.CalculateDigest(ret.getData(), data.getDataC(), data.getDataLen());  ret.setDataLen(hash.DigestSize());  return ret;}DataBlock sha(DataBlock const &data){  SHA sha;  return hash(data, sha);}DataBlock shaHmac(DataBlock const &data, DataBlock const &key){  SHA sha;  HMAC hmac(sha, key.getDataC(), key.getDataLen());  return hash(data, hmac);}bool shaHmacTestVector(  DataBlock const &key,  DataBlock const &data,  DataBlock const &expectedDigest){  printf("\n\n");  DataBlock digest = shaHmac(data, key);  key.print("key");  data.print("data");  digest.print("digest");  if (!digest.dataEqual(expectedDigest)) {    expectedDigest.print("!! expected digest !!");    return false;  }  else {    return true;  }}bool shaTestVector(  DataBlock const &data,  DataBlock const &expectedDigest){  printf("\n\n");  DataBlock digest = sha(data);  data.print("data");  digest.print("digest");  if (!digest.dataEqual(expectedDigest)) {    expectedDigest.print("!! expected digest !!");    return false;  }  else {    return true;  }}DataBlock integerBits(Integer const &i){  return integer2DataBlock(i);}void doit(){  DataBlock data("some stuff");  DataBlock digest = sha(data);  digest.print();  bool pass = true;# define INT(s) integerBits(Integer(s, 16))  // one that is failing on my Linux  loopi(2) {    pass = shaHmacTestVector(      INT("aaaaaaaaaaaaaaaaaaaa"          "aaaaaaaaaaaaaaaaaaaa"          "aaaaaaaaaaaaaaaaaaaa"          "aaaaaaaaaaaaaaaaaaaa"          "aaaaaaaaaaaaaaaaaaaa"          "aaaaaaaaaaaaaaaaaaaa"          "aaaaaaaaaaaaaaaaaaaa"          "aaaaaaaaaaaaaaaaaaaa"),      DataBlock("Test Using Larger Than Block-Size Key and Larger "                "Than One Block-Size Data", 73),      INT("e8e99d0f45237d786d6bbaa7965c7808bbff1a91")    ) && pass;  }#if 1  // these 3 from crypto++ validation tests  pass = shaTestVector(    DataBlock("abc", 3),    DataBlock("\xA9\x99\x3E\x36\x47\x06\x81\x6A\xBA\x3E\x25\x71\x78\x50\xC2\x6C\x9C\xD0\xD8\x9D", 20)  ) && pass;  pass = shaTestVector(    DataBlock("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 56),    DataBlock("\x84\x98\x3E\x44\x1C\x3B\xD2\x6E\xBA\xAE\x4A\xA1\xF9\x51\x29\xE5\xE5\x46\x70\xF1", 20)  ) && pass;  //shaTestVector(  //  DataBlock("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"),  //  DataBlock("\x34\xAA\x97\x3C\xD4\xC4\xDA\xA4\xF6\x1E\xEB\x2B\xDB\xAD\x27\x31\x65\x34\x01\x6F",  //  15625)  // these seven are from from RFC 2202  pass = shaHmacTestVector(    INT("0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"),    DataBlock("Hi There", 8),    INT("b617318655057264e28bc0b6fb378c8ef146be00")  ) && pass;  pass = shaHmacTestVector(    DataBlock("Jefe", 4),    DataBlock("what do ya want for nothing?", 28),    INT("effcdf6ae5eb2fa2d27416d5f184df9c259a7c79")  ) && pass;  pass = shaHmacTestVector(    INT("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"),    INT("dddddddddddddddddddd"        "dddddddddddddddddddd"        "dddddddddddddddddddd"        "dddddddddddddddddddd"        "dddddddddddddddddddd"),    INT("125d7342b9ac11cd91a39af48aa17b4f63f175d3")  ) && pass;  pass = shaHmacTestVector(    INT("0102030405060708090a0b0c0d0e0f10111213141516171819"),    INT("cdcdcdcdcdcdcdcdcdcd"        "cdcdcdcdcdcdcdcdcdcd"        "cdcdcdcdcdcdcdcdcdcd"        "cdcdcdcdcdcdcdcdcdcd"        "cdcdcdcdcdcdcdcdcdcd"),    INT("4c9007f4026250c6bc8414f9bf50c86c2d7235da")  ) && pass;  pass = shaHmacTestVector(    INT("0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c"),    DataBlock("Test With Truncation", 20),    INT("4c1a03424b55e07fe7f27be1d58bb9324a9a5a04")  ) && pass;  //  digest-96 =     0x4c1a03424b55e07fe7f27be1  pass = shaHmacTestVector(    INT("aaaaaaaaaaaaaaaaaaaa"        "aaaaaaaaaaaaaaaaaaaa"        "aaaaaaaaaaaaaaaaaaaa"        "aaaaaaaaaaaaaaaaaaaa"        "aaaaaaaaaaaaaaaaaaaa"        "aaaaaaaaaaaaaaaaaaaa"        "aaaaaaaaaaaaaaaaaaaa"        "aaaaaaaaaaaaaaaaaaaa"),    DataBlock("Test Using Larger Than Block-Size Key - Hash Key First", 54),    INT("aa4ae5e15272d00e95705637ce8a3b55ed402112")  ) && pass;  pass = shaHmacTestVector(    INT("aaaaaaaaaaaaaaaaaaaa"        "aaaaaaaaaaaaaaaaaaaa"        "aaaaaaaaaaaaaaaaaaaa"        "aaaaaaaaaaaaaaaaaaaa"        "aaaaaaaaaaaaaaaaaaaa"        "aaaaaaaaaaaaaaaaaaaa"        "aaaaaaaaaaaaaaaaaaaa"        "aaaaaaaaaaaaaaaaaaaa"),    DataBlock("Test Using Larger Than Block-Size Key and Larger "              "Than One Block-Size Data", 73),    INT("e8e99d0f45237d786d6bbaa7965c7808bbff1a91")  ) && pass;#endif // 0/1  printf("\n");  if (pass) {    printf("all tests succeeded\n");  }  else {    printf("at least one test failed\n");  }}int main(){  try {    doit();    return 0;  }  catch (xBase &x) {    cout << "exception caught: " << x << endl;    return 4;  }}

⌨️ 快捷键说明

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