4 * An ActionScript 3 implementation of Secure Hash Algorithm, SHA-1, as defined
\r
6 * Copyright (c) 2007 Henri Torgemane
\r
9 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
\r
11 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
\r
12 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
\r
14 * See LICENSE.txt for full license information.
\r
16 package com.hurlant.crypto.hash
\r
20 public class SHA1 extends SHABase implements IHash
\r
22 public static const HASH_SIZE:int = 20;
\r
24 public override function getHashSize():uint {
\r
28 protected override function core(x:Array, len:uint):Array
\r
30 /* append padding */
\r
31 x[len >> 5] |= 0x80 << (24 - len % 32);
\r
32 x[((len + 64 >> 9) << 4) + 15] = len;
\r
35 var a:uint = 0x67452301; //1732584193;
\r
36 var b:uint = 0xEFCDAB89; //-271733879;
\r
37 var c:uint = 0x98BADCFE; //-1732584194;
\r
38 var d:uint = 0x10325476; //271733878;
\r
39 var e:uint = 0xC3D2E1F0; //-1009589776;
\r
41 for(var i:uint = 0; i < x.length; i += 16)
\r
50 for(var j:uint = 0; j < 80; j++)
\r
53 w[j] = x[i + j] || 0;
\r
55 w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
\r
57 var t:uint = rol(a,5) + ft(j,b,c,d) + e + w[j] + kt(j);
\r
70 return [ a, b, c, d, e ];
\r
75 * Bitwise rotate a 32-bit number to the left.
\r
77 private function rol(num:uint, cnt:uint):uint
\r
79 return (num << cnt) | (num >>> (32 - cnt));
\r
83 * Perform the appropriate triplet combination function for the current
\r
86 private function ft(t:uint, b:uint, c:uint, d:uint):uint
\r
88 if(t < 20) return (b & c) | ((~b) & d);
\r
89 if(t < 40) return b ^ c ^ d;
\r
90 if(t < 60) return (b & c) | (b & d) | (c & d);
\r
95 * Determine the appropriate additive constant for the current iteration
\r
97 private function kt(t:uint):uint
\r
99 return (t < 20) ? 0x5A827999 : (t < 40) ? 0x6ED9EBA1 :
\r
100 (t < 60) ? 0x8F1BBCDC : 0xCA62C1D6;
\r
102 public override function toString():String {
\r