more jslint cleanup; added license clause; removed old files

This commit is contained in:
swaits committed 2010-12-01 11:25:21 -08:00
1 parent 5fd0c7dcea
commit ac903c654d
6 files changed
+39 -155

No files matched your search

-57
View File
@@ -1,57 +0,0 @@
#!/usr/bin/env ruby
require 'digest/sha1'
# helper to make a 'length' long string filled with 'byte'
def byte_string(byte, length)
([byte]*length).pack('C*')
end
def put_bytes(s)
s.unpack('C*').each { |x| print sprintf("%02d ",x); }
puts
end
# hmac algorithm - returns text version of hmac
def hmac(key, data, digest_object, blocksize)
# if key is too long, hash it
key = digest_object.digest(key) if key.size > blocksize
# pad key out to blocksize
key += byte_string(0,blocksize - key.size) if key.size < blocksize
# create pads
ipad = byte_string(0x36,blocksize)
opad = byte_string(0x5c,blocksize)
blocksize.times do |i|
#ipad[i] ^= key[i]
ipad.setbyte(i,ipad.getbyte(i) ^ key.getbyte(i))
#opad[i] ^= key[i] }
opad.setbyte(i,opad.getbyte(i) ^ key.getbyte(i))
end
puts "Key: "
put_bytes(key)
puts "data: "
put_bytes(data)
puts "ipad: "
put_bytes(ipad)
puts "opad: "
put_bytes(opad)
puts
puts "hash(ipad + data)"
puts digest_object.hexdigest(ipad+data)
puts
puts "hash(opad+hash(ipad+data))"
puts digest_object.hexdigest( opad + digest_object.digest( ipad + data ) )
# do the HMAC and return
digest_object.hexdigest( opad + digest_object.digest( ipad + data ) )
end
# hmac-sha1
def hmac_sha1(key, data)
hmac(key, data, Digest::SHA1, 64)
end
hmac_sha1('Jefe','what do ya want for nothing?');
+13 -8
View File
@@ -1,5 +1,5 @@
/*
* passy.js - implementation of passy algorithm javascript, by Stephen Waits
* sha1.js - implementation of SHA-1 hash and HMAC algorithms in javascript, by Stephen Waits
*
* The MIT License
*
@@ -24,6 +24,8 @@
* THE SOFTWARE.
*/
/*jslint onevar: true, undef: true, nomen: true, regexp: true, newcap: true, immed: true */
/*
* Given a "text" (i.e. "amazon.com") and a "secret" (i.e. "mypassword") return an
* array of four Passy'fied passwords.
@@ -39,12 +41,15 @@ var passy = function(text,secret)
*/
var passify = function(hexstr)
{
// lookup table to convert a single character to a symbol
var symtab = { "1":"!", "2":"@", "3":"#", "4":"$", "5":"%", "6":"^", "7":"&", "8":"*", "9":"(", "0":")" };
var
// lookup table to convert a single character to a symbol
symtab = { "1":"!", "2":"@", "3":"#", "4":"$", "5":"%", "6":"^", "7":"&", "8":"*", "9":"(", "0":")" },
// misc
odd = true, i;
// convert every other numerical character to a symbol
var odd = true;
for(var i=0;i<hexstr.length;++i)
for(i=0;i<hexstr.length;++i)
{
// is this a digit-character?
if ( /[0-9]/.test(hexstr[i]) )
@@ -62,7 +67,7 @@ var passy = function(text,secret)
// alternate uppercase/lowercase for alpha characters
odd = true;
for(var i=0;i<hexstr.length;++i)
for(i=0;i<hexstr.length;++i)
{
// is this an alpha-character?
if ( /[a-f]/i.test(hexstr[i]) )
@@ -80,7 +85,7 @@ var passy = function(text,secret)
// finished
return hexstr;
}
};
// get hmac
var hmac = SHA1.hmac(secret,text);
@@ -96,4 +101,4 @@ var passy = function(text,secret)
hmac.slice(10,20),
hmac.slice(20,30),
hmac.slice(30,40)];
}
};
-59
View File
@@ -1,59 +0,0 @@
<html>
<head>
<script type='text/javascript'>
(function(){var q=function(a){var c=[],d=a.length*8,b;for(b=0;b<d;b+=8)c[b>>5]|=(a.charCodeAt(b/8)&255)<<24-b%32;return c},r=function(a){var c=[],d=a.length,b,e;for(b=0;b<d;b+=2){e=parseInt(a.substr(b,2),16);if(isNaN(e))return"INVALID HEX STRING";else c[b>>3]|=e<<24-4*(b%8)}return c},m=function(a){var c="",d=a.length*4,b,e;for(b=0;b<d;b+=1){e=a[b>>2]>>(3-b%4)*8;c+="0123456789abcdef".charAt(e>>4&15)+"0123456789abcdef".charAt(e&15)}return c},n=function(a){var c="",d=a.length*4,b,e,j;for(b=0;b<d;b+=
3){j=(a[b>>2]>>8*(3-b%4)&255)<<16|(a[b+1>>2]>>8*(3-(b+1)%4)&255)<<8|a[b+2>>2]>>8*(3-(b+2)%4)&255;for(e=0;e<4;e+=1)c+=b*8+e*6<=a.length*32?"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(j>>6*(3-e)&63):""}return c},f=function(a,c){return a<<c|a>>>32-c},o=function(a,c){var d=(a&65535)+(c&65535);return((a>>>16)+(c>>>16)+(d>>>16)&65535)<<16|d&65535},k=function(a,c,d,b,e){var j=(a&65535)+(c&65535)+(d&65535)+(b&65535)+(e&65535);return((a>>>16)+(c>>>16)+(d>>>16)+(b>>>16)+(e>>>16)+
(j>>>16)&65535)<<16|j&65535},u=function(a,c){var d=[],b,e,j,l,p,v,s,g,w,h=[1732584193,4023233417,2562383102,271733878,3285377520],t=[1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,
1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782];
a[c>>5]|=128<<24-c%32;a[(c+65>>9<<4)+15]=c;w=a.length;for(s=0;s<w;s+=16){b=h[0];e=h[1];j=h[2];l=h[3];p=h[4];for(g=0;g<80;g+=1){d[g]=g<16?a[g+s]:f(d[g-3]^d[g-8]^d[g-14]^d[g-16],1);v=g<20?k(f(b,5),e&j^~e&l,p,t[g],d[g]):g<40?k(f(b,5),e^j^l,p,t[g],d[g]):g<60?k(f(b,5),e&j^e&l^j&l,p,t[g],d[g]):k(f(b,5),e^j^l,p,t[g],d[g]);p=l;l=j;j=f(e,30);e=b;b=v}h[0]=o(b,h[0]);h[1]=o(e,h[1]);h[2]=o(j,h[2]);h[3]=o(l,h[3]);h[4]=o(p,h[4])}return h},x=function(a,c){this.strToHash=this.strBinLen=this.sha1=null;if("HEX"===c){if(0!==
a.length%2)return"TEXT MUST BE IN BYTE INCREMENTS";this.strBinLen=a.length*4;this.strToHash=r(a)}else if("ASCII"===c||"undefined"===typeof c){this.strBinLen=a.length*8;this.strToHash=q(a)}else return"UNKNOWN TEXT INPUT TYPE"};x.prototype={getHash:function(a){var c=null,d=this.strToHash.slice();switch(a){case "HEX":c=m;break;case "B64":c=n;break;default:return"FORMAT NOT RECOGNIZED"}if(null===this.sha1)this.sha1=u(d,this.strBinLen);return c(this.sha1)},getHMAC:function(a,c,d){var b;b=[];var e=[];switch(d){case "HEX":d=
m;break;case "B64":d=n;break;default:return"FORMAT NOT RECOGNIZED"}if("HEX"===c){if(0!==a.length%2)return"KEY MUST BE IN BYTE INCREMENTS";c=r(a);a=a.length*4}else if("ASCII"===c){c=q(a);a=a.length*8}else return"UNKNOWN KEY INPUT TYPE";if(64<a/8){c=u(c,a);c[15]&=4294967040}else if(64>a/8)c[15]&=4294967040;for(a=0;a<=15;a+=1){b[a]=c[a]^909522486;e[a]=c[a]^1549556828}b=u(b.concat(this.strToHash),512+this.strBinLen);b=u(e.concat(b),672);return d(b)}};window.jsSHA=x})();
var passy=function(q,r){var m=function(f){var o={"1":"!","2":"@","3":"#","4":"$","5":"%","6":"^","7":"&","8":"*","9":"(","0":")"},k=true;for(i=0;i<f.length;++i)if(/[0-9]/.test(f[i])){if(k)f=f.slice(0,i)+o[f[i]]+f.slice(i+1,f.length);k=!k}k=true;for(i=0;i<f.length;++i)if(/[a-f]/i.test(f[i])){f=f.slice(0,i)+(k?f[i].toUpperCase():f[i].toLowerCase())+f.slice(i+1,f.length);k=!k}return f},n=(new jsSHA(q.toLowerCase(),"ASCII")).getHMAC(r,"ASCII","HEX");return[m(n.slice(0,10)),m(n.slice(10,20)),m(n.slice(20,
30)),m(n.slice(30,40))]};
</script>
<script type='text/javascript'>
var password_timer=0;
function ClearPassword()
{
// clear password field and force an update
document.getElementById('password').value = "";
document.getElementById('password').focus();
UpdatePassy();
}
function UpdatePassy()
{
// do password update
var site = document.getElementById('site').value;
var password = document.getElementById('password').value;
if ( site == "" || password == "" )
{
document.getElementById('result').value = "";
}
else
{
document.getElementById('result').value = passy(site,password)[0];
}
// set timer to clear password field after a minute
if ( password_timer != 0 )
{
clearTimeout(password_timer);
}
password_timer = setTimeout('ClearPassword()',60000);
}
</script>
</head>
<body>
<form>
Site Name:<br/>
<input type='text' id='site' onkeydown='UpdatePassy()' onkeyup='UpdatePassy()' onchange='UpdatePassy()'><br/>
Secret Passphrase:<br/>
<input type='password' id='password' onkeydown='UpdatePassy()' onkeyup='UpdatePassy()' onchange='UpdatePassy()'><br/>
<hr/>
Site Password:<br/>
<input type='text' id='result' readonly onfocus='this.select()' onclick='this.select()' ondblclick='this.select()'>
</form>
</body>
</html>
-9
View File
@@ -1,9 +0,0 @@
(function(){var q=function(a){var c=[],d=a.length*8,b;for(b=0;b<d;b+=8)c[b>>5]|=(a.charCodeAt(b/8)&255)<<24-b%32;return c},r=function(a){var c=[],d=a.length,b,e;for(b=0;b<d;b+=2){e=parseInt(a.substr(b,2),16);if(isNaN(e))return"INVALID HEX STRING";else c[b>>3]|=e<<24-4*(b%8)}return c},m=function(a){var c="",d=a.length*4,b,e;for(b=0;b<d;b+=1){e=a[b>>2]>>(3-b%4)*8;c+="0123456789abcdef".charAt(e>>4&15)+"0123456789abcdef".charAt(e&15)}return c},n=function(a){var c="",d=a.length*4,b,e,j;for(b=0;b<d;b+=
3){j=(a[b>>2]>>8*(3-b%4)&255)<<16|(a[b+1>>2]>>8*(3-(b+1)%4)&255)<<8|a[b+2>>2]>>8*(3-(b+2)%4)&255;for(e=0;e<4;e+=1)c+=b*8+e*6<=a.length*32?"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(j>>6*(3-e)&63):""}return c},f=function(a,c){return a<<c|a>>>32-c},o=function(a,c){var d=(a&65535)+(c&65535);return((a>>>16)+(c>>>16)+(d>>>16)&65535)<<16|d&65535},k=function(a,c,d,b,e){var j=(a&65535)+(c&65535)+(d&65535)+(b&65535)+(e&65535);return((a>>>16)+(c>>>16)+(d>>>16)+(b>>>16)+(e>>>16)+
(j>>>16)&65535)<<16|j&65535},u=function(a,c){var d=[],b,e,j,l,p,v,s,g,w,h=[1732584193,4023233417,2562383102,271733878,3285377520],t=[1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1518500249,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,
1859775393,1859775393,1859775393,1859775393,1859775393,1859775393,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,2400959708,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782,3395469782];
a[c>>5]|=128<<24-c%32;a[(c+65>>9<<4)+15]=c;w=a.length;for(s=0;s<w;s+=16){b=h[0];e=h[1];j=h[2];l=h[3];p=h[4];for(g=0;g<80;g+=1){d[g]=g<16?a[g+s]:f(d[g-3]^d[g-8]^d[g-14]^d[g-16],1);v=g<20?k(f(b,5),e&j^~e&l,p,t[g],d[g]):g<40?k(f(b,5),e^j^l,p,t[g],d[g]):g<60?k(f(b,5),e&j^e&l^j&l,p,t[g],d[g]):k(f(b,5),e^j^l,p,t[g],d[g]);p=l;l=j;j=f(e,30);e=b;b=v}h[0]=o(b,h[0]);h[1]=o(e,h[1]);h[2]=o(j,h[2]);h[3]=o(l,h[3]);h[4]=o(p,h[4])}return h},x=function(a,c){this.strToHash=this.strBinLen=this.sha1=null;if("HEX"===c){if(0!==
a.length%2)return"TEXT MUST BE IN BYTE INCREMENTS";this.strBinLen=a.length*4;this.strToHash=r(a)}else if("ASCII"===c||"undefined"===typeof c){this.strBinLen=a.length*8;this.strToHash=q(a)}else return"UNKNOWN TEXT INPUT TYPE"};x.prototype={getHash:function(a){var c=null,d=this.strToHash.slice();switch(a){case "HEX":c=m;break;case "B64":c=n;break;default:return"FORMAT NOT RECOGNIZED"}if(null===this.sha1)this.sha1=u(d,this.strBinLen);return c(this.sha1)},getHMAC:function(a,c,d){var b;b=[];var e=[];switch(d){case "HEX":d=
m;break;case "B64":d=n;break;default:return"FORMAT NOT RECOGNIZED"}if("HEX"===c){if(0!==a.length%2)return"KEY MUST BE IN BYTE INCREMENTS";c=r(a);a=a.length*4}else if("ASCII"===c){c=q(a);a=a.length*8}else return"UNKNOWN KEY INPUT TYPE";if(64<a/8){c=u(c,a);c[15]&=4294967040}else if(64>a/8)c[15]&=4294967040;for(a=0;a<=15;a+=1){b[a]=c[a]^909522486;e[a]=c[a]^1549556828}b=u(b.concat(this.strToHash),512+this.strBinLen);b=u(e.concat(b),672);return d(b)}};window.jsSHA=x})();
var passy=function(q,r){var m=function(f){var o={"1":"!","2":"@","3":"#","4":"$","5":"%","6":"^","7":"&","8":"*","9":"(","0":")"},k=true;for(i=0;i<f.length;++i)if(/[0-9]/.test(f[i])){if(k)f=f.slice(0,i)+o[f[i]]+f.slice(i+1,f.length);k=!k}k=true;for(i=0;i<f.length;++i)if(/[a-f]/i.test(f[i])){f=f.slice(0,i)+(k?f[i].toUpperCase():f[i].toLowerCase())+f.slice(i+1,f.length);k=!k}return f},n=(new jsSHA(q.toLowerCase(),"ASCII")).getHMAC(r,"ASCII","HEX");return[m(n.slice(0,10)),m(n.slice(10,20)),m(n.slice(20,
30)),m(n.slice(30,40))]};
-22
View File
@@ -1,22 +0,0 @@
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Sha1</title>
<script src='sha1.js'></script>
<script type="text/javascript" charset="utf-8">
function run()
{
if ( SHA1.test() )
document.getElementById('result').innerHTML = SHA1.hash("abcde");
else
document.getElementById('result').innerHTML = "Error!!!";
}
</script>
</head>
<body onload="run()">
<div id="result">Calculating...</div>
</body>
</html>
+26
View File
@@ -1,3 +1,29 @@
/*
* passy.js - implementation of passy algorithm in javascript, by Stephen Waits
*
* The MIT License
*
* Copyright (c) 2010 Stephen Waits <steve@waits.net>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
/*jslint onevar: true, undef: true, nomen: true, regexp: true, newcap: true, immed: true */
var SHA1 = (function() // SHA1 "namespace"