SHA1 class
SHA1 hash function implementation.
class SHA1 extends _HashBase { // Construct a SHA1 hasher object. SHA1() : _w = new List(80), super(16, 5, true) { _h[0] = 0x67452301; _h[1] = 0xEFCDAB89; _h[2] = 0x98BADCFE; _h[3] = 0x10325476; _h[4] = 0xC3D2E1F0; } // Returns a new instance of this Hash. SHA1 newInstance() { return new SHA1(); } // Compute one iteration of the SHA1 algorithm with a chunk of // 16 32-bit pieces. void _updateHash(List<int> m) { assert(m.length == 16); var a = _h[0]; var b = _h[1]; var c = _h[2]; var d = _h[3]; var e = _h[4]; for (var i = 0; i < 80; i++) { if (i < 16) { _w[i] = m[i]; } else { var n = _w[i - 3] ^ _w[i - 8] ^ _w[i - 14] ^ _w[i - 16]; _w[i] = _rotl32(n, 1); } var t = _add32(_add32(_rotl32(a, 5), e), _w[i]); if (i < 20) { t = _add32(_add32(t, (b & c) | (~b & d)), 0x5A827999); } else if (i < 40) { t = _add32(_add32(t, (b ^ c ^ d)), 0x6ED9EBA1); } else if (i < 60) { t = _add32(_add32(t, (b & c) | (b & d) | (c & d)), 0x8F1BBCDC); } else { t = _add32(_add32(t, b ^ c ^ d), 0xCA62C1D6); } e = d; d = c; c = _rotl32(b, 30); b = a; a = t & _MASK_32; } _h[0] = _add32(a, _h[0]); _h[1] = _add32(b, _h[1]); _h[2] = _add32(c, _h[2]); _h[3] = _add32(d, _h[3]); _h[4] = _add32(e, _h[4]); } List<int> _w; }
Extends
_HashBase > SHA1
Constructors
new SHA1() #
Creates a new Object instance.
Object instances have no meaningful state, and are only useful through their identity. An Object instance is equal to itself only.
docs inherited from Object
SHA1() : _w = new List(80), super(16, 5, true) { _h[0] = 0x67452301; _h[1] = 0xEFCDAB89; _h[2] = 0x98BADCFE; _h[3] = 0x10325476; _h[4] = 0xC3D2E1F0; }
Properties
Methods
dynamic add(List<int> data) #
inherited from _HashBase
Add a list of bytes to the hash computation.
docs inherited from Hash
add(List<int> data) { if (_digestCalled) { throw new StateError( 'Hash update method called after digest was retrieved'); } _lengthInBytes += data.length; _pendingData.addAll(data); _iterate(); }
List<int> close() #
inherited from _HashBase
Finish the hash computation and extract the message digest as a list of bytes.
docs inherited from Hash
List<int> close() { if (_digestCalled) { return _resultAsBytes(); } _digestCalled = true; _finalizeData(); _iterate(); assert(_pendingData.length == 0); return _resultAsBytes(); }