| OLD | NEW |
| 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.io; | 5 part of dart.io; |
| 6 | 6 |
| 7 class _CryptoUtils { | 7 class _CryptoUtils { |
| 8 static const int PAD = 61; // '=' | 8 static const int PAD = 61; // '=' |
| 9 static const int CR = 13; // '\r' | 9 static const int CR = 13; // '\r' |
| 10 static const int LF = 10; // '\n' | 10 static const int LF = 10; // '\n' |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 227 | 227 |
| 228 // Rotate left limiting to unsigned 32-bit values. | 228 // Rotate left limiting to unsigned 32-bit values. |
| 229 int _rotl32(int val, int shift) { | 229 int _rotl32(int val, int shift) { |
| 230 var mod_shift = shift & 31; | 230 var mod_shift = shift & 31; |
| 231 return ((val << mod_shift) & _MASK_32) | | 231 return ((val << mod_shift) & _MASK_32) | |
| 232 ((val & _MASK_32) >> (32 - mod_shift)); | 232 ((val & _MASK_32) >> (32 - mod_shift)); |
| 233 } | 233 } |
| 234 | 234 |
| 235 | 235 |
| 236 // Compute the final result as a list of bytes from the hash words. | 236 // Compute the final result as a list of bytes from the hash words. |
| 237 List<int> _resultAsBytes() { | 237 _resultAsBytes() { |
| 238 var result = <int>[]; | 238 var result = []; |
| 239 for (var i = 0; i < _h.length; i++) { | 239 for (var i = 0; i < _h.length; i++) { |
| 240 result.addAll(_wordToBytes(_h[i])); | 240 result.addAll(_wordToBytes(_h[i])); |
| 241 } | 241 } |
| 242 return result; | 242 return result; |
| 243 } | 243 } |
| 244 | 244 |
| 245 // Converts a list of bytes to a chunk of 32-bit words. | 245 // Converts a list of bytes to a chunk of 32-bit words. |
| 246 _bytesToChunk(List<int> data, int dataIndex) { | 246 _bytesToChunk(List<int> data, int dataIndex) { |
| 247 assert((data.length - dataIndex) >= (_chunkSizeInWords * _BYTES_PER_WORD)); | 247 assert((data.length - dataIndex) >= (_chunkSizeInWords * _BYTES_PER_WORD)); |
| 248 | 248 |
| 249 for (var wordIndex = 0; wordIndex < _chunkSizeInWords; wordIndex++) { | 249 for (var wordIndex = 0; wordIndex < _chunkSizeInWords; wordIndex++) { |
| 250 var w3 = _bigEndianWords ? data[dataIndex] : data[dataIndex + 3]; | 250 var w3 = _bigEndianWords ? data[dataIndex] : data[dataIndex + 3]; |
| 251 var w2 = _bigEndianWords ? data[dataIndex + 1] : data[dataIndex + 2]; | 251 var w2 = _bigEndianWords ? data[dataIndex + 1] : data[dataIndex + 2]; |
| 252 var w1 = _bigEndianWords ? data[dataIndex + 2] : data[dataIndex + 1]; | 252 var w1 = _bigEndianWords ? data[dataIndex + 2] : data[dataIndex + 1]; |
| 253 var w0 = _bigEndianWords ? data[dataIndex + 3] : data[dataIndex]; | 253 var w0 = _bigEndianWords ? data[dataIndex + 3] : data[dataIndex]; |
| 254 dataIndex += 4; | 254 dataIndex += 4; |
| 255 var word = (w3 & 0xff) << 24; | 255 var word = (w3 & 0xff) << 24; |
| 256 word |= (w2 & _MASK_8) << 16; | 256 word |= (w2 & _MASK_8) << 16; |
| 257 word |= (w1 & _MASK_8) << 8; | 257 word |= (w1 & _MASK_8) << 8; |
| 258 word |= (w0 & _MASK_8); | 258 word |= (w0 & _MASK_8); |
| 259 _currentChunk[wordIndex] = word; | 259 _currentChunk[wordIndex] = word; |
| 260 } | 260 } |
| 261 } | 261 } |
| 262 | 262 |
| 263 // Convert a 32-bit word to four bytes. | 263 // Convert a 32-bit word to four bytes. |
| 264 List<int> _wordToBytes(int word) { | 264 _wordToBytes(int word) { |
| 265 List<int> bytes = new List(_BYTES_PER_WORD); | 265 List<int> bytes = new List(_BYTES_PER_WORD); |
| 266 bytes[0] = (word >> (_bigEndianWords ? 24 : 0)) & _MASK_8; | 266 bytes[0] = (word >> (_bigEndianWords ? 24 : 0)) & _MASK_8; |
| 267 bytes[1] = (word >> (_bigEndianWords ? 16 : 8)) & _MASK_8; | 267 bytes[1] = (word >> (_bigEndianWords ? 16 : 8)) & _MASK_8; |
| 268 bytes[2] = (word >> (_bigEndianWords ? 8 : 16)) & _MASK_8; | 268 bytes[2] = (word >> (_bigEndianWords ? 8 : 16)) & _MASK_8; |
| 269 bytes[3] = (word >> (_bigEndianWords ? 0 : 24)) & _MASK_8; | 269 bytes[3] = (word >> (_bigEndianWords ? 0 : 24)) & _MASK_8; |
| 270 return bytes; | 270 return bytes; |
| 271 } | 271 } |
| 272 | 272 |
| 273 // Iterate through data updating the hash computation for each | 273 // Iterate through data updating the hash computation for each |
| 274 // chunk. | 274 // chunk. |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 439 | 439 |
| 440 _h[0] = _add32(a, _h[0]); | 440 _h[0] = _add32(a, _h[0]); |
| 441 _h[1] = _add32(b, _h[1]); | 441 _h[1] = _add32(b, _h[1]); |
| 442 _h[2] = _add32(c, _h[2]); | 442 _h[2] = _add32(c, _h[2]); |
| 443 _h[3] = _add32(d, _h[3]); | 443 _h[3] = _add32(d, _h[3]); |
| 444 _h[4] = _add32(e, _h[4]); | 444 _h[4] = _add32(e, _h[4]); |
| 445 } | 445 } |
| 446 | 446 |
| 447 List<int> _w; | 447 List<int> _w; |
| 448 } | 448 } |
| OLD | NEW |