
var hex_chr="0123456789ABCDEF";function char2hex(num)
{var str="";for(var j=1;j>=0;j--)
str+=hex_chr.charAt((num>>(j*4))&0x0F);return str;}
function str2hex(str)
{var hexVal="";for(i=0;i<str.length;i++)
hexVal+=char2hex(str.charCodeAt(i))+"";return hexVal;}
function zeroPadding(hexStr,lenInByte)
{if(lenInByte*2<hexStr.length)return str;zeros=(lenInByte*2)-hexStr.length;for(i=0;i<zeros;i++)
hexStr+="0";return hexStr;}
function padFromKey(keyTemp,padByte)
{pad="";keyTempPad="";keyTempByte="";for(i=0;i<keyTemp.length;i+=2)
{keyTempByte=("0x"+keyTemp.charAt(i)+keyTemp.charAt(i+1))*1;keyTempPad=hex((keyTempByte^(("0x"+padByte+"")*1)));pad+=keyTempPad.charAt(keyTempPad.length-2)+keyTempPad.charAt(keyTempPad.length-1);}
return pad;}
function calcHmac(key,challenge)
{keyPadded=zeroPadding(key,64)+"";textHex=Helper.hexEncodeString(challenge);ipad=padFromKey(keyPadded,"36");opad=padFromKey(keyPadded,"5C");ipadChallenge=ipad+""+textHex;digestIpad=calcSHA1_hex(ipadChallenge);opadChallenge=opad+""+digestIpad;digestOpad=calcSHA1_hex(opadChallenge);return digestOpad;}
function up_cramSHA(password,challenge)
{var passwordHex=Helper.hexEncodeString(password);var digest=calcSHA1_hex(passwordHex);var response=calcHmac(digest,challenge);return response;}
