sha1-sse2.c 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. /**
  2. * Author......: Jens Steube <jens.steube@gmail.com>
  3. * License.....: MIT
  4. */
  5. #ifdef __XOP__
  6. #define SHA1_F0(x,y,z) _mm_cmov_si128 (y, z, x)
  7. #else
  8. #define SHA1_F0(x,y,z) _mm_or_si128 (_mm_and_si128 (x, y), _mm_andnot_si128 (x, z))
  9. #endif
  10. #define SHA1_F1(x,y,z) _mm_xor_si128 (z, _mm_xor_si128 (x, y))
  11. #ifdef __XOP__
  12. #define SHA1_F2(x,y,z) _mm_cmov_si128 (x, z, _mm_xor_si128 (y, z))
  13. #else
  14. #define SHA1_F2(x,y,z) _mm_or_si128 (_mm_and_si128 (z, _mm_or_si128 (x, y)), _mm_and_si128 (x, y))
  15. #endif
  16. #define SHA1_STEP(f,a,b,c,d,e,x) \
  17. { \
  18. e = _mm_add_epi32 (e, K); \
  19. e = _mm_add_epi32 (e, W[x & 0xf]); \
  20. e = _mm_add_epi32 (e, f (b, c, d)); \
  21. e = _mm_add_epi32 (e, ROTL32_SSE (a, 5)); \
  22. b = ROTL32_SSE (b, 30); \
  23. }
  24. #define SHA1_EXPAND(i) W[(i) & 0xf] = ROTL32_SSE ((W[((i) - 16) & 0xf] ^ W[((i) - 14) & 0xf] ^ W[((i) - 8) & 0xf] ^ W[((i) - 3) & 0xf]), 1)
  25. void hashcat_sha1_64 (__m128i digests[5], __m128i W[16])
  26. {
  27. __m128i a = digests[0];
  28. __m128i b = digests[1];
  29. __m128i c = digests[2];
  30. __m128i d = digests[3];
  31. __m128i e = digests[4];
  32. int i;
  33. for (i = 0; i < 16; i++) W[i] = SWAP32_SSE (W[i]);
  34. __m128i K;
  35. K = _mm_set1_epi32 (SHA1C00);
  36. SHA1_STEP (SHA1_F0, a, b, c, d, e, 0);
  37. SHA1_STEP (SHA1_F0, e, a, b, c, d, 1);
  38. SHA1_STEP (SHA1_F0, d, e, a, b, c, 2);
  39. SHA1_STEP (SHA1_F0, c, d, e, a, b, 3);
  40. SHA1_STEP (SHA1_F0, b, c, d, e, a, 4);
  41. SHA1_STEP (SHA1_F0, a, b, c, d, e, 5);
  42. SHA1_STEP (SHA1_F0, e, a, b, c, d, 6);
  43. SHA1_STEP (SHA1_F0, d, e, a, b, c, 7);
  44. SHA1_STEP (SHA1_F0, c, d, e, a, b, 8);
  45. SHA1_STEP (SHA1_F0, b, c, d, e, a, 9);
  46. SHA1_STEP (SHA1_F0, a, b, c, d, e, 10);
  47. SHA1_STEP (SHA1_F0, e, a, b, c, d, 11);
  48. SHA1_STEP (SHA1_F0, d, e, a, b, c, 12);
  49. SHA1_STEP (SHA1_F0, c, d, e, a, b, 13);
  50. SHA1_STEP (SHA1_F0, b, c, d, e, a, 14);
  51. SHA1_STEP (SHA1_F0, a, b, c, d, e, 15);
  52. SHA1_EXPAND (16); SHA1_STEP (SHA1_F0, e, a, b, c, d, 16);
  53. SHA1_EXPAND (17); SHA1_STEP (SHA1_F0, d, e, a, b, c, 17);
  54. SHA1_EXPAND (18); SHA1_STEP (SHA1_F0, c, d, e, a, b, 18);
  55. SHA1_EXPAND (19); SHA1_STEP (SHA1_F0, b, c, d, e, a, 19);
  56. K = _mm_set1_epi32 (SHA1C01);
  57. SHA1_EXPAND (20); SHA1_STEP (SHA1_F1, a, b, c, d, e, 20);
  58. SHA1_EXPAND (21); SHA1_STEP (SHA1_F1, e, a, b, c, d, 21);
  59. SHA1_EXPAND (22); SHA1_STEP (SHA1_F1, d, e, a, b, c, 22);
  60. SHA1_EXPAND (23); SHA1_STEP (SHA1_F1, c, d, e, a, b, 23);
  61. SHA1_EXPAND (24); SHA1_STEP (SHA1_F1, b, c, d, e, a, 24);
  62. SHA1_EXPAND (25); SHA1_STEP (SHA1_F1, a, b, c, d, e, 25);
  63. SHA1_EXPAND (26); SHA1_STEP (SHA1_F1, e, a, b, c, d, 26);
  64. SHA1_EXPAND (27); SHA1_STEP (SHA1_F1, d, e, a, b, c, 27);
  65. SHA1_EXPAND (28); SHA1_STEP (SHA1_F1, c, d, e, a, b, 28);
  66. SHA1_EXPAND (29); SHA1_STEP (SHA1_F1, b, c, d, e, a, 29);
  67. SHA1_EXPAND (30); SHA1_STEP (SHA1_F1, a, b, c, d, e, 30);
  68. SHA1_EXPAND (31); SHA1_STEP (SHA1_F1, e, a, b, c, d, 31);
  69. SHA1_EXPAND (32); SHA1_STEP (SHA1_F1, d, e, a, b, c, 32);
  70. SHA1_EXPAND (33); SHA1_STEP (SHA1_F1, c, d, e, a, b, 33);
  71. SHA1_EXPAND (34); SHA1_STEP (SHA1_F1, b, c, d, e, a, 34);
  72. SHA1_EXPAND (35); SHA1_STEP (SHA1_F1, a, b, c, d, e, 35);
  73. SHA1_EXPAND (36); SHA1_STEP (SHA1_F1, e, a, b, c, d, 36);
  74. SHA1_EXPAND (37); SHA1_STEP (SHA1_F1, d, e, a, b, c, 37);
  75. SHA1_EXPAND (38); SHA1_STEP (SHA1_F1, c, d, e, a, b, 38);
  76. SHA1_EXPAND (39); SHA1_STEP (SHA1_F1, b, c, d, e, a, 39);
  77. K = _mm_set1_epi32 (SHA1C02);
  78. SHA1_EXPAND (40); SHA1_STEP (SHA1_F2, a, b, c, d, e, 40);
  79. SHA1_EXPAND (41); SHA1_STEP (SHA1_F2, e, a, b, c, d, 41);
  80. SHA1_EXPAND (42); SHA1_STEP (SHA1_F2, d, e, a, b, c, 42);
  81. SHA1_EXPAND (43); SHA1_STEP (SHA1_F2, c, d, e, a, b, 43);
  82. SHA1_EXPAND (44); SHA1_STEP (SHA1_F2, b, c, d, e, a, 44);
  83. SHA1_EXPAND (45); SHA1_STEP (SHA1_F2, a, b, c, d, e, 45);
  84. SHA1_EXPAND (46); SHA1_STEP (SHA1_F2, e, a, b, c, d, 46);
  85. SHA1_EXPAND (47); SHA1_STEP (SHA1_F2, d, e, a, b, c, 47);
  86. SHA1_EXPAND (48); SHA1_STEP (SHA1_F2, c, d, e, a, b, 48);
  87. SHA1_EXPAND (49); SHA1_STEP (SHA1_F2, b, c, d, e, a, 49);
  88. SHA1_EXPAND (50); SHA1_STEP (SHA1_F2, a, b, c, d, e, 50);
  89. SHA1_EXPAND (51); SHA1_STEP (SHA1_F2, e, a, b, c, d, 51);
  90. SHA1_EXPAND (52); SHA1_STEP (SHA1_F2, d, e, a, b, c, 52);
  91. SHA1_EXPAND (53); SHA1_STEP (SHA1_F2, c, d, e, a, b, 53);
  92. SHA1_EXPAND (54); SHA1_STEP (SHA1_F2, b, c, d, e, a, 54);
  93. SHA1_EXPAND (55); SHA1_STEP (SHA1_F2, a, b, c, d, e, 55);
  94. SHA1_EXPAND (56); SHA1_STEP (SHA1_F2, e, a, b, c, d, 56);
  95. SHA1_EXPAND (57); SHA1_STEP (SHA1_F2, d, e, a, b, c, 57);
  96. SHA1_EXPAND (58); SHA1_STEP (SHA1_F2, c, d, e, a, b, 58);
  97. SHA1_EXPAND (59); SHA1_STEP (SHA1_F2, b, c, d, e, a, 59);
  98. K = _mm_set1_epi32 (SHA1C03);
  99. SHA1_EXPAND (60); SHA1_STEP (SHA1_F1, a, b, c, d, e, 60);
  100. SHA1_EXPAND (61); SHA1_STEP (SHA1_F1, e, a, b, c, d, 61);
  101. SHA1_EXPAND (62); SHA1_STEP (SHA1_F1, d, e, a, b, c, 62);
  102. SHA1_EXPAND (63); SHA1_STEP (SHA1_F1, c, d, e, a, b, 63);
  103. SHA1_EXPAND (64); SHA1_STEP (SHA1_F1, b, c, d, e, a, 64);
  104. SHA1_EXPAND (65); SHA1_STEP (SHA1_F1, a, b, c, d, e, 65);
  105. SHA1_EXPAND (66); SHA1_STEP (SHA1_F1, e, a, b, c, d, 66);
  106. SHA1_EXPAND (67); SHA1_STEP (SHA1_F1, d, e, a, b, c, 67);
  107. SHA1_EXPAND (68); SHA1_STEP (SHA1_F1, c, d, e, a, b, 68);
  108. SHA1_EXPAND (69); SHA1_STEP (SHA1_F1, b, c, d, e, a, 69);
  109. SHA1_EXPAND (70); SHA1_STEP (SHA1_F1, a, b, c, d, e, 70);
  110. SHA1_EXPAND (71); SHA1_STEP (SHA1_F1, e, a, b, c, d, 71);
  111. SHA1_EXPAND (72); SHA1_STEP (SHA1_F1, d, e, a, b, c, 72);
  112. SHA1_EXPAND (73); SHA1_STEP (SHA1_F1, c, d, e, a, b, 73);
  113. SHA1_EXPAND (74); SHA1_STEP (SHA1_F1, b, c, d, e, a, 74);
  114. SHA1_EXPAND (75); SHA1_STEP (SHA1_F1, a, b, c, d, e, 75);
  115. SHA1_EXPAND (76); SHA1_STEP (SHA1_F1, e, a, b, c, d, 76);
  116. SHA1_EXPAND (77); SHA1_STEP (SHA1_F1, d, e, a, b, c, 77);
  117. SHA1_EXPAND (78); SHA1_STEP (SHA1_F1, c, d, e, a, b, 78);
  118. SHA1_EXPAND (79); SHA1_STEP (SHA1_F1, b, c, d, e, a, 79);
  119. digests[0] = _mm_add_epi32 (a, digests[0]);
  120. digests[1] = _mm_add_epi32 (b, digests[1]);
  121. digests[2] = _mm_add_epi32 (c, digests[2]);
  122. digests[3] = _mm_add_epi32 (d, digests[3]);
  123. digests[4] = _mm_add_epi32 (e, digests[4]);
  124. }