forked from snowplow/snowplow-javascript-tracker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbase64.js
More file actions
67 lines (58 loc) · 1.78 KB
/
Copy pathbase64.js
File metadata and controls
67 lines (58 loc) · 1.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/*
* base64.js
*
* @description Base64 encoding function for JavaScript
* @version N/A
* @author Various (see below)
* @license MIT / GPL v2
* @link http://phpjs.org/functions/base64_encode
*
* Modifications:
* - Various (see below)
*
* Authors & Modifications:
* http://kevin.vanzonneveld.net
* original by: Tyler Akins (http://rumkin.com)
* improved by: Bayron Guevara
* improved by: Thunder.m
* improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
* bugfixed by: Pellentesque Malesuada
* improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
* improved by: Rafał Kukawski (http://kukawski.pl)
*/
SnowPlow.base64encode = function sha1(data) {
if (!data) return data;
if (typeof window['btoa'] == 'function') return btoa(data);
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var o1, o2, o3, h1, h2, h3, h4, bits,
i = 0,
ac = 0,
enc = "",
tmp_arr = [];
do {
o1 = data.charCodeAt(i++);
o2 = data.charCodeAt(i++);
o3 = data.charCodeAt(i++);
bits = o1 << 16 | o2 << 8 | o3;
h1 = bits >> 18 & 0x3f;
h2 = bits >> 12 & 0x3f;
h3 = bits >> 6 & 0x3f;
h4 = bits & 0x3f;
tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
} while (i < data.length);
enc = tmp_arr.join('');
var r = data.length % 3;
return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);
};
/*
* Bas64 encode data with URL and Filename Safe Alphabet (base64url)
*
* See: http://tools.ietf.org/html/rfc4648#page-7
*/
SnowPlow.base64urlencode = function(data) {
if (!data) return data;
var enc = SnowPlow.base64encode(data);
return enc.replace(/=/g, '')
.replace(/\+/g, '-')
.replace(/\//g, '_');
};