Hash.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441
  1. /*
  2. This file is part of cpp-ethereum.
  3. cpp-ethereum is free software: you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation, either version 3 of the License, or
  6. (at your option) any later version.
  7. cpp-ethereum is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
  13. */
  14. /** @file Hash.cpp
  15. * @author Gav Wood <i@gavwood.com>
  16. * @date 2014
  17. */
  18. #include "Hash.h"
  19. #include <cstdio>
  20. #include <cstdlib>
  21. #include <cstring>
  22. #include "picosha2.h"
  23. using namespace std;
  24. using namespace dev;
  25. namespace dev
  26. {
  27. h256 sha256(bytesConstRef _input)
  28. {
  29. h256 ret;
  30. picosha2::hash256(_input.begin(), _input.end(), ret.data(), ret.data() + 32);
  31. return ret;
  32. }
  33. namespace rmd160
  34. {
  35. /********************************************************************\
  36. *
  37. * FILE: rmd160.h
  38. * FILE: rmd160.c
  39. *
  40. * CONTENTS: Header file for a sample C-implementation of the
  41. * RIPEMD-160 hash-function.
  42. * TARGET: any computer with an ANSI C compiler
  43. *
  44. * AUTHOR: Antoon Bosselaers, ESAT-COSIC
  45. * DATE: 1 March 1996
  46. * VERSION: 1.0
  47. *
  48. * Copyright (c) Katholieke Universiteit Leuven
  49. * 1996, All Rights Reserved
  50. *
  51. \********************************************************************/
  52. // Adapted into "header-only" format by Gav Wood.
  53. /* macro definitions */
  54. #define RMDsize 160
  55. /* collect four bytes into one word: */
  56. #define BYTES_TO_DWORD(strptr) \
  57. (((uint32_t) *((strptr)+3) << 24) | \
  58. ((uint32_t) *((strptr)+2) << 16) | \
  59. ((uint32_t) *((strptr)+1) << 8) | \
  60. ((uint32_t) *(strptr)))
  61. /* ROL(x, n) cyclically rotates x over n bits to the left */
  62. /* x must be of an unsigned 32 bits type and 0 <= n < 32. */
  63. #define ROL(x, n) (((x) << (n)) | ((x) >> (32-(n))))
  64. /* the five basic functions F(), G() and H() */
  65. #define F(x, y, z) ((x) ^ (y) ^ (z))
  66. #define G(x, y, z) (((x) & (y)) | (~(x) & (z)))
  67. #define H(x, y, z) (((x) | ~(y)) ^ (z))
  68. #define I(x, y, z) (((x) & (z)) | ((y) & ~(z)))
  69. #define J(x, y, z) ((x) ^ ((y) | ~(z)))
  70. /* the ten basic operations FF() through III() */
  71. #define FF(a, b, c, d, e, x, s) {\
  72. (a) += F((b), (c), (d)) + (x);\
  73. (a) = ROL((a), (s)) + (e);\
  74. (c) = ROL((c), 10);\
  75. }
  76. #define GG(a, b, c, d, e, x, s) {\
  77. (a) += G((b), (c), (d)) + (x) + 0x5a827999UL;\
  78. (a) = ROL((a), (s)) + (e);\
  79. (c) = ROL((c), 10);\
  80. }
  81. #define HH(a, b, c, d, e, x, s) {\
  82. (a) += H((b), (c), (d)) + (x) + 0x6ed9eba1UL;\
  83. (a) = ROL((a), (s)) + (e);\
  84. (c) = ROL((c), 10);\
  85. }
  86. #define II(a, b, c, d, e, x, s) {\
  87. (a) += I((b), (c), (d)) + (x) + 0x8f1bbcdcUL;\
  88. (a) = ROL((a), (s)) + (e);\
  89. (c) = ROL((c), 10);\
  90. }
  91. #define JJ(a, b, c, d, e, x, s) {\
  92. (a) += J((b), (c), (d)) + (x) + 0xa953fd4eUL;\
  93. (a) = ROL((a), (s)) + (e);\
  94. (c) = ROL((c), 10);\
  95. }
  96. #define FFF(a, b, c, d, e, x, s) {\
  97. (a) += F((b), (c), (d)) + (x);\
  98. (a) = ROL((a), (s)) + (e);\
  99. (c) = ROL((c), 10);\
  100. }
  101. #define GGG(a, b, c, d, e, x, s) {\
  102. (a) += G((b), (c), (d)) + (x) + 0x7a6d76e9UL;\
  103. (a) = ROL((a), (s)) + (e);\
  104. (c) = ROL((c), 10);\
  105. }
  106. #define HHH(a, b, c, d, e, x, s) {\
  107. (a) += H((b), (c), (d)) + (x) + 0x6d703ef3UL;\
  108. (a) = ROL((a), (s)) + (e);\
  109. (c) = ROL((c), 10);\
  110. }
  111. #define III(a, b, c, d, e, x, s) {\
  112. (a) += I((b), (c), (d)) + (x) + 0x5c4dd124UL;\
  113. (a) = ROL((a), (s)) + (e);\
  114. (c) = ROL((c), 10);\
  115. }
  116. #define JJJ(a, b, c, d, e, x, s) {\
  117. (a) += J((b), (c), (d)) + (x) + 0x50a28be6UL;\
  118. (a) = ROL((a), (s)) + (e);\
  119. (c) = ROL((c), 10);\
  120. }
  121. void MDinit(uint32_t *MDbuf)
  122. {
  123. MDbuf[0] = 0x67452301UL;
  124. MDbuf[1] = 0xefcdab89UL;
  125. MDbuf[2] = 0x98badcfeUL;
  126. MDbuf[3] = 0x10325476UL;
  127. MDbuf[4] = 0xc3d2e1f0UL;
  128. return;
  129. }
  130. /********************************************************************/
  131. void MDcompress(uint32_t *MDbuf, uint32_t *X)
  132. {
  133. uint32_t aa = MDbuf[0], bb = MDbuf[1], cc = MDbuf[2],
  134. dd = MDbuf[3], ee = MDbuf[4];
  135. uint32_t aaa = MDbuf[0], bbb = MDbuf[1], ccc = MDbuf[2],
  136. ddd = MDbuf[3], eee = MDbuf[4];
  137. /* round 1 */
  138. FF(aa, bb, cc, dd, ee, X[ 0], 11);
  139. FF(ee, aa, bb, cc, dd, X[ 1], 14);
  140. FF(dd, ee, aa, bb, cc, X[ 2], 15);
  141. FF(cc, dd, ee, aa, bb, X[ 3], 12);
  142. FF(bb, cc, dd, ee, aa, X[ 4], 5);
  143. FF(aa, bb, cc, dd, ee, X[ 5], 8);
  144. FF(ee, aa, bb, cc, dd, X[ 6], 7);
  145. FF(dd, ee, aa, bb, cc, X[ 7], 9);
  146. FF(cc, dd, ee, aa, bb, X[ 8], 11);
  147. FF(bb, cc, dd, ee, aa, X[ 9], 13);
  148. FF(aa, bb, cc, dd, ee, X[10], 14);
  149. FF(ee, aa, bb, cc, dd, X[11], 15);
  150. FF(dd, ee, aa, bb, cc, X[12], 6);
  151. FF(cc, dd, ee, aa, bb, X[13], 7);
  152. FF(bb, cc, dd, ee, aa, X[14], 9);
  153. FF(aa, bb, cc, dd, ee, X[15], 8);
  154. /* round 2 */
  155. GG(ee, aa, bb, cc, dd, X[ 7], 7);
  156. GG(dd, ee, aa, bb, cc, X[ 4], 6);
  157. GG(cc, dd, ee, aa, bb, X[13], 8);
  158. GG(bb, cc, dd, ee, aa, X[ 1], 13);
  159. GG(aa, bb, cc, dd, ee, X[10], 11);
  160. GG(ee, aa, bb, cc, dd, X[ 6], 9);
  161. GG(dd, ee, aa, bb, cc, X[15], 7);
  162. GG(cc, dd, ee, aa, bb, X[ 3], 15);
  163. GG(bb, cc, dd, ee, aa, X[12], 7);
  164. GG(aa, bb, cc, dd, ee, X[ 0], 12);
  165. GG(ee, aa, bb, cc, dd, X[ 9], 15);
  166. GG(dd, ee, aa, bb, cc, X[ 5], 9);
  167. GG(cc, dd, ee, aa, bb, X[ 2], 11);
  168. GG(bb, cc, dd, ee, aa, X[14], 7);
  169. GG(aa, bb, cc, dd, ee, X[11], 13);
  170. GG(ee, aa, bb, cc, dd, X[ 8], 12);
  171. /* round 3 */
  172. HH(dd, ee, aa, bb, cc, X[ 3], 11);
  173. HH(cc, dd, ee, aa, bb, X[10], 13);
  174. HH(bb, cc, dd, ee, aa, X[14], 6);
  175. HH(aa, bb, cc, dd, ee, X[ 4], 7);
  176. HH(ee, aa, bb, cc, dd, X[ 9], 14);
  177. HH(dd, ee, aa, bb, cc, X[15], 9);
  178. HH(cc, dd, ee, aa, bb, X[ 8], 13);
  179. HH(bb, cc, dd, ee, aa, X[ 1], 15);
  180. HH(aa, bb, cc, dd, ee, X[ 2], 14);
  181. HH(ee, aa, bb, cc, dd, X[ 7], 8);
  182. HH(dd, ee, aa, bb, cc, X[ 0], 13);
  183. HH(cc, dd, ee, aa, bb, X[ 6], 6);
  184. HH(bb, cc, dd, ee, aa, X[13], 5);
  185. HH(aa, bb, cc, dd, ee, X[11], 12);
  186. HH(ee, aa, bb, cc, dd, X[ 5], 7);
  187. HH(dd, ee, aa, bb, cc, X[12], 5);
  188. /* round 4 */
  189. II(cc, dd, ee, aa, bb, X[ 1], 11);
  190. II(bb, cc, dd, ee, aa, X[ 9], 12);
  191. II(aa, bb, cc, dd, ee, X[11], 14);
  192. II(ee, aa, bb, cc, dd, X[10], 15);
  193. II(dd, ee, aa, bb, cc, X[ 0], 14);
  194. II(cc, dd, ee, aa, bb, X[ 8], 15);
  195. II(bb, cc, dd, ee, aa, X[12], 9);
  196. II(aa, bb, cc, dd, ee, X[ 4], 8);
  197. II(ee, aa, bb, cc, dd, X[13], 9);
  198. II(dd, ee, aa, bb, cc, X[ 3], 14);
  199. II(cc, dd, ee, aa, bb, X[ 7], 5);
  200. II(bb, cc, dd, ee, aa, X[15], 6);
  201. II(aa, bb, cc, dd, ee, X[14], 8);
  202. II(ee, aa, bb, cc, dd, X[ 5], 6);
  203. II(dd, ee, aa, bb, cc, X[ 6], 5);
  204. II(cc, dd, ee, aa, bb, X[ 2], 12);
  205. /* round 5 */
  206. JJ(bb, cc, dd, ee, aa, X[ 4], 9);
  207. JJ(aa, bb, cc, dd, ee, X[ 0], 15);
  208. JJ(ee, aa, bb, cc, dd, X[ 5], 5);
  209. JJ(dd, ee, aa, bb, cc, X[ 9], 11);
  210. JJ(cc, dd, ee, aa, bb, X[ 7], 6);
  211. JJ(bb, cc, dd, ee, aa, X[12], 8);
  212. JJ(aa, bb, cc, dd, ee, X[ 2], 13);
  213. JJ(ee, aa, bb, cc, dd, X[10], 12);
  214. JJ(dd, ee, aa, bb, cc, X[14], 5);
  215. JJ(cc, dd, ee, aa, bb, X[ 1], 12);
  216. JJ(bb, cc, dd, ee, aa, X[ 3], 13);
  217. JJ(aa, bb, cc, dd, ee, X[ 8], 14);
  218. JJ(ee, aa, bb, cc, dd, X[11], 11);
  219. JJ(dd, ee, aa, bb, cc, X[ 6], 8);
  220. JJ(cc, dd, ee, aa, bb, X[15], 5);
  221. JJ(bb, cc, dd, ee, aa, X[13], 6);
  222. /* parallel round 1 */
  223. JJJ(aaa, bbb, ccc, ddd, eee, X[ 5], 8);
  224. JJJ(eee, aaa, bbb, ccc, ddd, X[14], 9);
  225. JJJ(ddd, eee, aaa, bbb, ccc, X[ 7], 9);
  226. JJJ(ccc, ddd, eee, aaa, bbb, X[ 0], 11);
  227. JJJ(bbb, ccc, ddd, eee, aaa, X[ 9], 13);
  228. JJJ(aaa, bbb, ccc, ddd, eee, X[ 2], 15);
  229. JJJ(eee, aaa, bbb, ccc, ddd, X[11], 15);
  230. JJJ(ddd, eee, aaa, bbb, ccc, X[ 4], 5);
  231. JJJ(ccc, ddd, eee, aaa, bbb, X[13], 7);
  232. JJJ(bbb, ccc, ddd, eee, aaa, X[ 6], 7);
  233. JJJ(aaa, bbb, ccc, ddd, eee, X[15], 8);
  234. JJJ(eee, aaa, bbb, ccc, ddd, X[ 8], 11);
  235. JJJ(ddd, eee, aaa, bbb, ccc, X[ 1], 14);
  236. JJJ(ccc, ddd, eee, aaa, bbb, X[10], 14);
  237. JJJ(bbb, ccc, ddd, eee, aaa, X[ 3], 12);
  238. JJJ(aaa, bbb, ccc, ddd, eee, X[12], 6);
  239. /* parallel round 2 */
  240. III(eee, aaa, bbb, ccc, ddd, X[ 6], 9);
  241. III(ddd, eee, aaa, bbb, ccc, X[11], 13);
  242. III(ccc, ddd, eee, aaa, bbb, X[ 3], 15);
  243. III(bbb, ccc, ddd, eee, aaa, X[ 7], 7);
  244. III(aaa, bbb, ccc, ddd, eee, X[ 0], 12);
  245. III(eee, aaa, bbb, ccc, ddd, X[13], 8);
  246. III(ddd, eee, aaa, bbb, ccc, X[ 5], 9);
  247. III(ccc, ddd, eee, aaa, bbb, X[10], 11);
  248. III(bbb, ccc, ddd, eee, aaa, X[14], 7);
  249. III(aaa, bbb, ccc, ddd, eee, X[15], 7);
  250. III(eee, aaa, bbb, ccc, ddd, X[ 8], 12);
  251. III(ddd, eee, aaa, bbb, ccc, X[12], 7);
  252. III(ccc, ddd, eee, aaa, bbb, X[ 4], 6);
  253. III(bbb, ccc, ddd, eee, aaa, X[ 9], 15);
  254. III(aaa, bbb, ccc, ddd, eee, X[ 1], 13);
  255. III(eee, aaa, bbb, ccc, ddd, X[ 2], 11);
  256. /* parallel round 3 */
  257. HHH(ddd, eee, aaa, bbb, ccc, X[15], 9);
  258. HHH(ccc, ddd, eee, aaa, bbb, X[ 5], 7);
  259. HHH(bbb, ccc, ddd, eee, aaa, X[ 1], 15);
  260. HHH(aaa, bbb, ccc, ddd, eee, X[ 3], 11);
  261. HHH(eee, aaa, bbb, ccc, ddd, X[ 7], 8);
  262. HHH(ddd, eee, aaa, bbb, ccc, X[14], 6);
  263. HHH(ccc, ddd, eee, aaa, bbb, X[ 6], 6);
  264. HHH(bbb, ccc, ddd, eee, aaa, X[ 9], 14);
  265. HHH(aaa, bbb, ccc, ddd, eee, X[11], 12);
  266. HHH(eee, aaa, bbb, ccc, ddd, X[ 8], 13);
  267. HHH(ddd, eee, aaa, bbb, ccc, X[12], 5);
  268. HHH(ccc, ddd, eee, aaa, bbb, X[ 2], 14);
  269. HHH(bbb, ccc, ddd, eee, aaa, X[10], 13);
  270. HHH(aaa, bbb, ccc, ddd, eee, X[ 0], 13);
  271. HHH(eee, aaa, bbb, ccc, ddd, X[ 4], 7);
  272. HHH(ddd, eee, aaa, bbb, ccc, X[13], 5);
  273. /* parallel round 4 */
  274. GGG(ccc, ddd, eee, aaa, bbb, X[ 8], 15);
  275. GGG(bbb, ccc, ddd, eee, aaa, X[ 6], 5);
  276. GGG(aaa, bbb, ccc, ddd, eee, X[ 4], 8);
  277. GGG(eee, aaa, bbb, ccc, ddd, X[ 1], 11);
  278. GGG(ddd, eee, aaa, bbb, ccc, X[ 3], 14);
  279. GGG(ccc, ddd, eee, aaa, bbb, X[11], 14);
  280. GGG(bbb, ccc, ddd, eee, aaa, X[15], 6);
  281. GGG(aaa, bbb, ccc, ddd, eee, X[ 0], 14);
  282. GGG(eee, aaa, bbb, ccc, ddd, X[ 5], 6);
  283. GGG(ddd, eee, aaa, bbb, ccc, X[12], 9);
  284. GGG(ccc, ddd, eee, aaa, bbb, X[ 2], 12);
  285. GGG(bbb, ccc, ddd, eee, aaa, X[13], 9);
  286. GGG(aaa, bbb, ccc, ddd, eee, X[ 9], 12);
  287. GGG(eee, aaa, bbb, ccc, ddd, X[ 7], 5);
  288. GGG(ddd, eee, aaa, bbb, ccc, X[10], 15);
  289. GGG(ccc, ddd, eee, aaa, bbb, X[14], 8);
  290. /* parallel round 5 */
  291. FFF(bbb, ccc, ddd, eee, aaa, X[12] , 8);
  292. FFF(aaa, bbb, ccc, ddd, eee, X[15] , 5);
  293. FFF(eee, aaa, bbb, ccc, ddd, X[10] , 12);
  294. FFF(ddd, eee, aaa, bbb, ccc, X[ 4] , 9);
  295. FFF(ccc, ddd, eee, aaa, bbb, X[ 1] , 12);
  296. FFF(bbb, ccc, ddd, eee, aaa, X[ 5] , 5);
  297. FFF(aaa, bbb, ccc, ddd, eee, X[ 8] , 14);
  298. FFF(eee, aaa, bbb, ccc, ddd, X[ 7] , 6);
  299. FFF(ddd, eee, aaa, bbb, ccc, X[ 6] , 8);
  300. FFF(ccc, ddd, eee, aaa, bbb, X[ 2] , 13);
  301. FFF(bbb, ccc, ddd, eee, aaa, X[13] , 6);
  302. FFF(aaa, bbb, ccc, ddd, eee, X[14] , 5);
  303. FFF(eee, aaa, bbb, ccc, ddd, X[ 0] , 15);
  304. FFF(ddd, eee, aaa, bbb, ccc, X[ 3] , 13);
  305. FFF(ccc, ddd, eee, aaa, bbb, X[ 9] , 11);
  306. FFF(bbb, ccc, ddd, eee, aaa, X[11] , 11);
  307. /* combine results */
  308. ddd += cc + MDbuf[1]; /* final result for MDbuf[0] */
  309. MDbuf[1] = MDbuf[2] + dd + eee;
  310. MDbuf[2] = MDbuf[3] + ee + aaa;
  311. MDbuf[3] = MDbuf[4] + aa + bbb;
  312. MDbuf[4] = MDbuf[0] + bb + ccc;
  313. MDbuf[0] = ddd;
  314. return;
  315. }
  316. void MDfinish(uint32_t *MDbuf, byte const *strptr, uint32_t lswlen, uint32_t mswlen)
  317. {
  318. unsigned int i; /* counter */
  319. uint32_t X[16]; /* message words */
  320. memset(X, 0, 16*sizeof(uint32_t));
  321. /* put bytes from strptr into X */
  322. for (i=0; i<(lswlen&63); i++) {
  323. /* byte i goes into word X[i div 4] at pos. 8*(i mod 4) */
  324. X[i>>2] ^= (uint32_t) *strptr++ << (8 * (i&3));
  325. }
  326. /* append the bit m_n == 1 */
  327. X[(lswlen>>2)&15] ^= (uint32_t)1 << (8*(lswlen&3) + 7);
  328. if ((lswlen & 63) > 55) {
  329. /* length goes to next block */
  330. MDcompress(MDbuf, X);
  331. memset(X, 0, 16*sizeof(uint32_t));
  332. }
  333. /* append length in bits*/
  334. X[14] = lswlen << 3;
  335. X[15] = (lswlen >> 29) | (mswlen << 3);
  336. MDcompress(MDbuf, X);
  337. return;
  338. }
  339. #undef ROL
  340. #undef F
  341. #undef G
  342. #undef H
  343. #undef I
  344. #undef J
  345. #undef FF
  346. #undef GG
  347. #undef HH
  348. #undef II
  349. #undef JJ
  350. #undef FFF
  351. #undef GGG
  352. #undef HHH
  353. #undef III
  354. #undef JJJ
  355. }
  356. /*
  357. * @returns RMD(_input)
  358. */
  359. h160 ripemd160(bytesConstRef _input)
  360. {
  361. h160 hashcode;
  362. uint32_t buffer[RMDsize / 32]; // contains (A, B, C, D(, E))
  363. uint32_t current[16]; // current 16-word chunk
  364. // initialize
  365. rmd160::MDinit(buffer);
  366. byte const* message = _input.data();
  367. uint32_t remaining = _input.size(); // # of bytes not yet processed
  368. // process message in 16x 4-byte chunks
  369. for (; remaining >= 64; remaining -= 64)
  370. {
  371. for (unsigned i = 0; i < 16; i++)
  372. {
  373. current[i] = BYTES_TO_DWORD(message);
  374. message += 4;
  375. }
  376. rmd160::MDcompress(buffer, current);
  377. }
  378. // length mod 64 bytes left
  379. // finish:
  380. rmd160::MDfinish(buffer, message, _input.size(), 0);
  381. for (unsigned i = 0; i < RMDsize / 8; i += 4)
  382. {
  383. hashcode[i] = buffer[i >> 2]; // implicit cast to byte
  384. hashcode[i + 1] = (buffer[i >> 2] >> 8); //extracts the 8 least
  385. hashcode[i + 2] = (buffer[i >> 2] >> 16); // significant bits.
  386. hashcode[i + 3] = (buffer[i >> 2] >> 24);
  387. }
  388. return hashcode;
  389. }
  390. #undef BYTES_TO_DWORD
  391. #undef RMDsize
  392. }