Dart DocumentationcryptoSHA1

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

final int blockSize #

inherited from _HashBase

Internal block size of the hash in bytes.

This is exposed for use by the HMAC class which needs to know the block size for the Hash it is using.

docs inherited from Hash
int get blockSize {
 return _chunkSizeInWords * _BYTES_PER_WORD;
}

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();
}

SHA1 newInstance() #

Returns a new instance of this hash function.

docs inherited from Hash
SHA1 newInstance() {
 return new SHA1();
}