1 var b64map="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
8 for(i = 0; i+3 <= h.length; i+=3) {
9 c = parseInt(h.substring(i,i+3),16);
10 ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63);
13 c = parseInt(h.substring(i,i+1),16);
14 ret += b64map.charAt(c << 2);
16 else if(i+2 == h.length) {
17 c = parseInt(h.substring(i,i+2),16);
18 ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4);
20 while((ret.length & 3) > 0) ret += b64pad;
24 // convert a base64 string to hex
25 function b64tohex(s) {
28 var k = 0; // b64 state, 0-3
30 for(i = 0; i < s.length; ++i) {
31 if(s.charAt(i) == b64pad) break;
32 v = b64map.indexOf(s.charAt(i));
35 ret += int2char(v >> 2);
40 ret += int2char((slop << 2) | (v >> 4));
45 ret += int2char(slop);
46 ret += int2char(v >> 2);
51 ret += int2char((slop << 2) | (v >> 4));
52 ret += int2char(v & 0xf);
57 ret += int2char(slop << 2);
61 // convert a base64 string to a byte/number array
63 //piggyback on b64tohex for now, optimize later
67 for(i = 0; 2*i < h.length; ++i) {
68 a[i] = parseInt(h.substring(2*i,2*i+2),16);