blackjack21

[historical] Password bruteforce program
git clone git://mcdim.xyz/blackjack21.git
Log | Files | Refs | README | LICENSE

sha512.h (2585B)


      1 #ifndef SHA512_H
      2 #define SHA512_H
      3 #include <string>
      4  
      5 class SHA512
      6 {
      7 protected:
      8     typedef unsigned char uint8;
      9     typedef unsigned int uint32;
     10     typedef unsigned long long uint64;
     11  
     12     const static uint64 sha512_k[];
     13     static const unsigned int SHA384_512_BLOCK_SIZE = (1024/8);
     14  
     15 public:
     16     void init();
     17     void update(const unsigned char *message, unsigned int len);
     18     void final(unsigned char *digest);
     19     static const unsigned int DIGEST_SIZE = ( 512 / 8);
     20  
     21 protected:
     22     void transform(const unsigned char *message, unsigned int block_nb);
     23     unsigned int m_tot_len;
     24     unsigned int m_len;
     25     unsigned char m_block[2 * SHA384_512_BLOCK_SIZE];
     26     uint64 m_h[8];
     27 };
     28  
     29  
     30 std::string sha512(std::string input);
     31  
     32 #define SHA2_SHFR(x, n)    (x >> n)
     33 #define SHA2_ROTR(x, n)   ((x >> n) | (x << ((sizeof(x) << 3) - n)))
     34 #define SHA2_ROTL(x, n)   ((x << n) | (x >> ((sizeof(x) << 3) - n)))
     35 #define SHA2_CH(x, y, z)  ((x & y) ^ (~x & z))
     36 #define SHA2_MAJ(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
     37 #define SHA512_F1(x) (SHA2_ROTR(x, 28) ^ SHA2_ROTR(x, 34) ^ SHA2_ROTR(x, 39))
     38 #define SHA512_F2(x) (SHA2_ROTR(x, 14) ^ SHA2_ROTR(x, 18) ^ SHA2_ROTR(x, 41))
     39 #define SHA512_F3(x) (SHA2_ROTR(x,  1) ^ SHA2_ROTR(x,  8) ^ SHA2_SHFR(x,  7))
     40 #define SHA512_F4(x) (SHA2_ROTR(x, 19) ^ SHA2_ROTR(x, 61) ^ SHA2_SHFR(x,  6))
     41 #define SHA2_UNPACK32(x, str)                 \
     42 {                                             \
     43     *((str) + 3) = (uint8) ((x)      );       \
     44     *((str) + 2) = (uint8) ((x) >>  8);       \
     45     *((str) + 1) = (uint8) ((x) >> 16);       \
     46     *((str) + 0) = (uint8) ((x) >> 24);       \
     47 }
     48 #define SHA2_UNPACK64(x, str)                 \
     49 {                                             \
     50     *((str) + 7) = (uint8) ((x)      );       \
     51     *((str) + 6) = (uint8) ((x) >>  8);       \
     52     *((str) + 5) = (uint8) ((x) >> 16);       \
     53     *((str) + 4) = (uint8) ((x) >> 24);       \
     54     *((str) + 3) = (uint8) ((x) >> 32);       \
     55     *((str) + 2) = (uint8) ((x) >> 40);       \
     56     *((str) + 1) = (uint8) ((x) >> 48);       \
     57     *((str) + 0) = (uint8) ((x) >> 56);       \
     58 }
     59 #define SHA2_PACK64(str, x)                   \
     60 {                                             \
     61     *(x) =   ((uint64) *((str) + 7)      )    \
     62            | ((uint64) *((str) + 6) <<  8)    \
     63            | ((uint64) *((str) + 5) << 16)    \
     64            | ((uint64) *((str) + 4) << 24)    \
     65            | ((uint64) *((str) + 3) << 32)    \
     66            | ((uint64) *((str) + 2) << 40)    \
     67            | ((uint64) *((str) + 1) << 48)    \
     68            | ((uint64) *((str) + 0) << 56);   \
     69 }
     70  
     71 #endif