OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. |
| 4 |
| 5 part of crypto; |
| 6 |
| 7 /** |
| 8 * SHA1 hash function implementation. |
| 9 */ |
| 10 class SHA1 extends _HashBase { |
| 11 final Uint32List _w; |
| 12 |
| 13 // Construct a SHA1 hasher object. |
| 14 SHA1() : _w = new Uint32List(80), super(16, 5, true) { |
| 15 _h[0] = 0x67452301; |
| 16 _h[1] = 0xEFCDAB89; |
| 17 _h[2] = 0x98BADCFE; |
| 18 _h[3] = 0x10325476; |
| 19 _h[4] = 0xC3D2E1F0; |
| 20 } |
| 21 |
| 22 // Returns a new instance of this Hash. |
| 23 SHA1 newInstance() { |
| 24 return new SHA1(); |
| 25 } |
| 26 |
| 27 // Compute one iteration of the SHA1 algorithm with a chunk of |
| 28 // 16 32-bit pieces. |
| 29 void _updateHash(Uint32List m) { |
| 30 assert(m.length == 16); |
| 31 |
| 32 var a = _h[0]; |
| 33 var b = _h[1]; |
| 34 var c = _h[2]; |
| 35 var d = _h[3]; |
| 36 var e = _h[4]; |
| 37 |
| 38 for (var i = 0; i < 80; i++) { |
| 39 if (i < 16) { |
| 40 _w[i] = m[i]; |
| 41 } else { |
| 42 var n = _w[i - 3] ^ _w[i - 8] ^ _w[i - 14] ^ _w[i - 16]; |
| 43 _w[i] = _rotl32(n, 1); |
| 44 } |
| 45 var t = _add32(_add32(_rotl32(a, 5), e), _w[i]); |
| 46 if (i < 20) { |
| 47 t = _add32(_add32(t, (b & c) | (~b & d)), 0x5A827999); |
| 48 } else if (i < 40) { |
| 49 t = _add32(_add32(t, (b ^ c ^ d)), 0x6ED9EBA1); |
| 50 } else if (i < 60) { |
| 51 t = _add32(_add32(t, (b & c) | (b & d) | (c & d)), 0x8F1BBCDC); |
| 52 } else { |
| 53 t = _add32(_add32(t, b ^ c ^ d), 0xCA62C1D6); |
| 54 } |
| 55 |
| 56 e = d; |
| 57 d = c; |
| 58 c = _rotl32(b, 30); |
| 59 b = a; |
| 60 a = t & _MASK_32; |
| 61 } |
| 62 |
| 63 _h[0] = _add32(a, _h[0]); |
| 64 _h[1] = _add32(b, _h[1]); |
| 65 _h[2] = _add32(c, _h[2]); |
| 66 _h[3] = _add32(d, _h[3]); |
| 67 _h[4] = _add32(e, _h[4]); |
| 68 } |
| 69 } |
OLD | NEW |