Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(519)

Unified Diff: lib/crypto/crypto.dart

Issue 10134055: Add common interface for cryptographic hash functions to lib/crypto.dart. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address review comments. Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | lib/crypto/sha1.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/crypto/crypto.dart
diff --git a/lib/crypto/crypto.dart b/lib/crypto/crypto.dart
index fc17e8f10fae7586693c6136c1f18d7bef97217b..6a839974017206c69f7f1bc73cea24a0209bca80 100644
--- a/lib/crypto/crypto.dart
+++ b/lib/crypto/crypto.dart
@@ -2,73 +2,56 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-#library("crypto");
-
-#source("sha1.dart");
-
-// Helpers used implementing the different crypto algorithms.
-
-final int _BITS_PER_BYTE = 8;
-final int _BYTES_PER_WORD = 4;
-final int _BITS_PER_WORD = _BITS_PER_BYTE * _BYTES_PER_WORD;
-final int _MASK_32 = 0xffffffff;
-
-int _roundUp(int val, int n) {
- return (val + n - 1) & -n;
+#library('crypto');
+
+#source('sha_utils.dart');
+#source('sha1.dart');
+#source('sha256.dart');
+
+/**
+ * Interface for cryptographic hash functions.
+ *
+ * The [update] method is used to add data to the hash. The [digest] method
+ * is used to extract the message digest. Once the [digest] method has been
+ * called the CryptoHash object is in an invalid state and should not be
+ * used again. If [digest] or [update] are called after the first call to
+ * [digest] a CryptoHashException is thrown.
+ */
+interface CryptoHash {
+ /**
+ * Add a list of bytes to the hash computation.
+ */
+ CryptoHash update(List<int> data);
+
+ /**
+ * Finish the hash computation and extract the message digest as
+ * a list of bytes.
+ */
+ List<int> digest();
}
-// Rotate left limiting to unsigned 32-bit values.
-int _rotl32(int val, int shift) {
- var mod_shift = shift & 31;
- return ((val << mod_shift) & _MASK_32) |
- ((val & _MASK_32) >> (32 - mod_shift));
+/**
+ * SHA1 hash function implementation.
+ */
+interface SHA1 extends CryptoHash default _SHA1 {
+ SHA1();
}
-// Add limiting to unsigned 32-bit values.
-int _add32(int left, int right) {
- return (left + right) & _MASK_32;
+/**
+ * SHA256 hash function implementation.
+ */
+interface SHA256 extends CryptoHash default _SHA256 {
+ SHA256();
}
-void _bytesToWords(List<int> input,
- int in_offset,
- int in_len,
- List<int> output,
- int out_offset,
- int out_len) {
- var cur = in_offset;
- var end = in_offset + in_len;
- var cur_out = out_offset;
- var unroll_loop_end = in_len ~/ _BYTES_PER_WORD;
- while (cur_out < unroll_loop_end) {
- var word = (input[cur++] & 0xff) << 24;
- word |= (input[cur++] & 0xff) << 16;
- word |= (input[cur++] & 0xff) << 8;
- word |= (input[cur++] & 0xff);
- output[cur_out++] = word;
- }
- // Fill the rest of the output with the remaining bytes or zeros if no more
- // data is available.
- while (cur_out < (out_offset + out_len)) {
- var word = 0;
- var bit_shift = (_BYTES_PER_WORD - 1) * _BITS_PER_BYTE;
- while (cur < end) {
- word |= (input[cur++] & 0xff) << bit_shift;
- bit_shift -= _BITS_PER_BYTE;
- }
- output[cur_out++] = word;
- }
+/**
+ * CryptoHashExceptions are thrown on invalid use of a CryptoHash
+ * object.
+ */
+class CryptoHashException {
+ CryptoHashException(String this.message);
+ toString() => "CryptoHashException: $message";
+ String message;
}
-List<int> _wordsToBytes(List<int> input) {
- var len = input.length;
- var output = new List<int>(len * _BYTES_PER_WORD);
- var cur = 0;
- for (var word in input) {
- output[cur++] = word >> 24;
- output[cur++] = (word >> 16) & 0xff;
- output[cur++] = (word >> 8) & 0xff;
- output[cur++] = word & 0xff;
- }
- return output;
-}
« no previous file with comments | « no previous file | lib/crypto/sha1.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698