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