github.com/justinjmoses/evergreen@v0.0.0-20170530173719-1d50e381ff0d/public/static/js/angular-md5.js (about)

     1  // http://kevin.vanzonneveld.net
     2  // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
     3  // + namespaced by: Michael White (http://getsprink.com)
     4  // +    tweaked by: Jack
     5  // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
     6  // +      input by: Brett Zamir (http://brett-zamir.me)
     7  // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
     8  // -    depends on: utf8_encode
     9  // *     example 1: md5('Kevin van Zonneveld');
    10  // *     returns 1: '6e658d4bfcb59cc13f96c14450ac40b9'
    11  // Adapted to AngularJS Service by: Jim Lavin (http://jimlavin.net)
    12  // after injecting into your controller, directive or service
    13  // *     example 1: md5.createHash('Kevin van Zonneveld');
    14  // *     returns 1: '6e658d4bfcb59cc13f96c14450ac40b9'
    15  
    16  angular.module('md5', []).factory('md5', [function() {
    17  
    18          var md5 = {
    19  
    20              createHash: function(str) {
    21  
    22                  var xl;
    23  
    24                  var rotateLeft = function (lValue, iShiftBits) {
    25                      return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
    26                  };
    27  
    28                  var addUnsigned = function (lX, lY) {
    29                      var lX4, lY4, lX8, lY8, lResult;
    30                      lX8 = (lX & 0x80000000);
    31                      lY8 = (lY & 0x80000000);
    32                      lX4 = (lX & 0x40000000);
    33                      lY4 = (lY & 0x40000000);
    34                      lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
    35                      if (lX4 & lY4) {
    36                          return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
    37                      }
    38                      if (lX4 | lY4) {
    39                          if (lResult & 0x40000000) {
    40                              return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
    41                          } else {
    42                              return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
    43                          }
    44                      } else {
    45                          return (lResult ^ lX8 ^ lY8);
    46                      }
    47                  };
    48  
    49                  var _F = function (x, y, z) {
    50                      return (x & y) | ((~x) & z);
    51                  };
    52                  var _G = function (x, y, z) {
    53                      return (x & z) | (y & (~z));
    54                  };
    55                  var _H = function (x, y, z) {
    56                      return (x ^ y ^ z);
    57                  };
    58                  var _I = function (x, y, z) {
    59                      return (y ^ (x | (~z)));
    60                  };
    61  
    62                  var _FF = function (a, b, c, d, x, s, ac) {
    63                      a = addUnsigned(a, addUnsigned(addUnsigned(_F(b, c, d), x), ac));
    64                      return addUnsigned(rotateLeft(a, s), b);
    65                  };
    66  
    67                  var _GG = function (a, b, c, d, x, s, ac) {
    68                      a = addUnsigned(a, addUnsigned(addUnsigned(_G(b, c, d), x), ac));
    69                      return addUnsigned(rotateLeft(a, s), b);
    70                  };
    71  
    72                  var _HH = function (a, b, c, d, x, s, ac) {
    73                      a = addUnsigned(a, addUnsigned(addUnsigned(_H(b, c, d), x), ac));
    74                      return addUnsigned(rotateLeft(a, s), b);
    75                  };
    76  
    77                  var _II = function (a, b, c, d, x, s, ac) {
    78                      a = addUnsigned(a, addUnsigned(addUnsigned(_I(b, c, d), x), ac));
    79                      return addUnsigned(rotateLeft(a, s), b);
    80                  };
    81  
    82                  var convertToWordArray = function (str) {
    83                      var lWordCount;
    84                      var lMessageLength = str.length;
    85                      var lNumberOfWords_temp1 = lMessageLength + 8;
    86                      var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;
    87                      var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16;
    88                      var lWordArray = new Array(lNumberOfWords - 1);
    89                      var lBytePosition = 0;
    90                      var lByteCount = 0;
    91                      while (lByteCount < lMessageLength) {
    92                          lWordCount = (lByteCount - (lByteCount % 4)) / 4;
    93                          lBytePosition = (lByteCount % 4) * 8;
    94                          lWordArray[lWordCount] = (lWordArray[lWordCount] | (str.charCodeAt(lByteCount) << lBytePosition));
    95                          lByteCount++;
    96                      }
    97                      lWordCount = (lByteCount - (lByteCount % 4)) / 4;
    98                      lBytePosition = (lByteCount % 4) * 8;
    99                      lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);
   100                      lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
   101                      lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
   102                      return lWordArray;
   103                  };
   104  
   105                  var wordToHex = function (lValue) {
   106                      var wordToHexValue = "",
   107                          wordToHexValue_temp = "",
   108                          lByte, lCount;
   109                      for (lCount = 0; lCount <= 3; lCount++) {
   110                          lByte = (lValue >>> (lCount * 8)) & 255;
   111                          wordToHexValue_temp = "0" + lByte.toString(16);
   112                          wordToHexValue = wordToHexValue + wordToHexValue_temp.substr(wordToHexValue_temp.length - 2, 2);
   113                      }
   114                      return wordToHexValue;
   115                  };
   116  
   117                  var x = [],
   118                      k, AA, BB, CC, DD, a, b, c, d, S11 = 7,
   119                      S12 = 12,
   120                      S13 = 17,
   121                      S14 = 22,
   122                      S21 = 5,
   123                      S22 = 9,
   124                      S23 = 14,
   125                      S24 = 20,
   126                      S31 = 4,
   127                      S32 = 11,
   128                      S33 = 16,
   129                      S34 = 23,
   130                      S41 = 6,
   131                      S42 = 10,
   132                      S43 = 15,
   133                      S44 = 21;
   134  
   135                  //str = this.utf8_encode(str);
   136                  x = convertToWordArray(str);
   137                  a = 0x67452301;
   138                  b = 0xEFCDAB89;
   139                  c = 0x98BADCFE;
   140                  d = 0x10325476;
   141  
   142                  xl = x.length;
   143                  for (k = 0; k < xl; k += 16) {
   144                      AA = a;
   145                      BB = b;
   146                      CC = c;
   147                      DD = d;
   148                      a = _FF(a, b, c, d, x[k + 0], S11, 0xD76AA478);
   149                      d = _FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756);
   150                      c = _FF(c, d, a, b, x[k + 2], S13, 0x242070DB);
   151                      b = _FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE);
   152                      a = _FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF);
   153                      d = _FF(d, a, b, c, x[k + 5], S12, 0x4787C62A);
   154                      c = _FF(c, d, a, b, x[k + 6], S13, 0xA8304613);
   155                      b = _FF(b, c, d, a, x[k + 7], S14, 0xFD469501);
   156                      a = _FF(a, b, c, d, x[k + 8], S11, 0x698098D8);
   157                      d = _FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF);
   158                      c = _FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1);
   159                      b = _FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE);
   160                      a = _FF(a, b, c, d, x[k + 12], S11, 0x6B901122);
   161                      d = _FF(d, a, b, c, x[k + 13], S12, 0xFD987193);
   162                      c = _FF(c, d, a, b, x[k + 14], S13, 0xA679438E);
   163                      b = _FF(b, c, d, a, x[k + 15], S14, 0x49B40821);
   164                      a = _GG(a, b, c, d, x[k + 1], S21, 0xF61E2562);
   165                      d = _GG(d, a, b, c, x[k + 6], S22, 0xC040B340);
   166                      c = _GG(c, d, a, b, x[k + 11], S23, 0x265E5A51);
   167                      b = _GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA);
   168                      a = _GG(a, b, c, d, x[k + 5], S21, 0xD62F105D);
   169                      d = _GG(d, a, b, c, x[k + 10], S22, 0x2441453);
   170                      c = _GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681);
   171                      b = _GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8);
   172                      a = _GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6);
   173                      d = _GG(d, a, b, c, x[k + 14], S22, 0xC33707D6);
   174                      c = _GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87);
   175                      b = _GG(b, c, d, a, x[k + 8], S24, 0x455A14ED);
   176                      a = _GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905);
   177                      d = _GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8);
   178                      c = _GG(c, d, a, b, x[k + 7], S23, 0x676F02D9);
   179                      b = _GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A);
   180                      a = _HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942);
   181                      d = _HH(d, a, b, c, x[k + 8], S32, 0x8771F681);
   182                      c = _HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122);
   183                      b = _HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C);
   184                      a = _HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44);
   185                      d = _HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9);
   186                      c = _HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60);
   187                      b = _HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70);
   188                      a = _HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6);
   189                      d = _HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA);
   190                      c = _HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085);
   191                      b = _HH(b, c, d, a, x[k + 6], S34, 0x4881D05);
   192                      a = _HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039);
   193                      d = _HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5);
   194                      c = _HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8);
   195                      b = _HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665);
   196                      a = _II(a, b, c, d, x[k + 0], S41, 0xF4292244);
   197                      d = _II(d, a, b, c, x[k + 7], S42, 0x432AFF97);
   198                      c = _II(c, d, a, b, x[k + 14], S43, 0xAB9423A7);
   199                      b = _II(b, c, d, a, x[k + 5], S44, 0xFC93A039);
   200                      a = _II(a, b, c, d, x[k + 12], S41, 0x655B59C3);
   201                      d = _II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92);
   202                      c = _II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D);
   203                      b = _II(b, c, d, a, x[k + 1], S44, 0x85845DD1);
   204                      a = _II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F);
   205                      d = _II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0);
   206                      c = _II(c, d, a, b, x[k + 6], S43, 0xA3014314);
   207                      b = _II(b, c, d, a, x[k + 13], S44, 0x4E0811A1);
   208                      a = _II(a, b, c, d, x[k + 4], S41, 0xF7537E82);
   209                      d = _II(d, a, b, c, x[k + 11], S42, 0xBD3AF235);
   210                      c = _II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB);
   211                      b = _II(b, c, d, a, x[k + 9], S44, 0xEB86D391);
   212                      a = addUnsigned(a, AA);
   213                      b = addUnsigned(b, BB);
   214                      c = addUnsigned(c, CC);
   215                      d = addUnsigned(d, DD);
   216                  }
   217  
   218                  var temp = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d);
   219  
   220                  return temp.toLowerCase();
   221              }
   222  
   223          };
   224  
   225          return md5;
   226  
   227      }]);