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

Side by Side Diff: sdk/lib/crypto/hmac.dart

Issue 12328104: Change new List(n) to return fixed length list. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Merge to head. Created 7 years, 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of dart.crypto; 5 part of dart.crypto;
6 6
7 class _HMAC implements HMAC { 7 class _HMAC implements HMAC {
8 bool _isClosed = false; 8 bool _isClosed = false;
9 9
10 _HMAC(Hash this._hash, List<int> this._key) : _message = []; 10 _HMAC(Hash this._hash, List<int> this._key) : _message = [];
11 11
12 add(List<int> data) { 12 add(List<int> data) {
13 if (_isClosed) throw new StateError("HMAC is closed"); 13 if (_isClosed) throw new StateError("HMAC is closed");
14 _message.addAll(data); 14 _message.addAll(data);
15 } 15 }
16 16
17 List<int> get digest { 17 List<int> get digest {
18 var blockSize = _hash.blockSize; 18 var blockSize = _hash.blockSize;
19 19
20 // Hash the key if it is longer than the block size of the hash. 20 // Hash the key if it is longer than the block size of the hash.
21 if (_key.length > blockSize) { 21 if (_key.length > blockSize) {
22 _hash = _hash.newInstance(); 22 _hash = _hash.newInstance();
23 _hash.add(_key); 23 _hash.add(_key);
24 _key = _hash.close(); 24 _key = _hash.close();
25 } 25 }
26 26
27 // Zero-pad the key until its size is equal to the block size of the hash. 27 // Zero-pad the key until its size is equal to the block size of the hash.
28 if (_key.length < blockSize) { 28 if (_key.length < blockSize) {
29 var newKey = new List.fixedLength(blockSize); 29 var newKey = new List(blockSize);
30 newKey.setRange(0, _key.length, _key); 30 newKey.setRange(0, _key.length, _key);
31 for (var i = _key.length; i < blockSize; i++) { 31 for (var i = _key.length; i < blockSize; i++) {
32 newKey[i] = 0; 32 newKey[i] = 0;
33 } 33 }
34 _key = newKey; 34 _key = newKey;
35 } 35 }
36 36
37 // Compute inner padding. 37 // Compute inner padding.
38 var padding = new List.fixedLength(blockSize); 38 var padding = new List(blockSize);
39 for (var i = 0; i < blockSize; i++) { 39 for (var i = 0; i < blockSize; i++) {
40 padding[i] = 0x36 ^ _key[i]; 40 padding[i] = 0x36 ^ _key[i];
41 } 41 }
42 42
43 // Inner hash computation. 43 // Inner hash computation.
44 _hash = _hash.newInstance(); 44 _hash = _hash.newInstance();
45 _hash.add(padding); 45 _hash.add(padding);
46 _hash.add(_message); 46 _hash.add(_message);
47 var innerHash = _hash.close(); 47 var innerHash = _hash.close();
48 48
(...skipping 26 matching lines...) Expand all
75 result |= digest[i] ^ computedDigest[i]; 75 result |= digest[i] ^ computedDigest[i];
76 } 76 }
77 return result == 0; 77 return result == 0;
78 } 78 }
79 79
80 // HMAC internal state. 80 // HMAC internal state.
81 Hash _hash; 81 Hash _hash;
82 List<int> _key; 82 List<int> _key;
83 List<int> _message; 83 List<int> _message;
84 } 84 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698