Don't assume 32-bit message bit lengths.

Issue #14

R=iposva@google.com

Review URL: https://codereview.chromium.org//1349293002 .
diff --git a/lib/src/hash_base.dart b/lib/src/hash_base.dart
index c325fe0..796fd14 100644
--- a/lib/src/hash_base.dart
+++ b/lib/src/hash_base.dart
@@ -125,13 +125,17 @@
       _pendingData.add(0);
     }
     var lengthInBits = _lengthInBytes * BITS_PER_BYTE;
-    assert(lengthInBits < math.pow(2, 32));
+    const MAX_UINT64 = 0xFFFFFFFFFFFFFFFF;
+    if (lengthInBits > MAX_UINT64) {
+      throw new UnsupportedError(
+          "Hash undefined for message bit lengths larger than 64 bits");
+    }
     if (_bigEndianWords) {
-      _pendingData.addAll(_wordToBytes(0));
+      _pendingData.addAll(_wordToBytes((lengthInBits >> 32) & MASK_32));
       _pendingData.addAll(_wordToBytes(lengthInBits & MASK_32));
     } else {
       _pendingData.addAll(_wordToBytes(lengthInBits & MASK_32));
-      _pendingData.addAll(_wordToBytes(0));
+      _pendingData.addAll(_wordToBytes((lengthInBits >> 32) & MASK_32));
     }
   }
 }