You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					68 lines
				
				1.5 KiB
			
		
		
			
		
	
	
					68 lines
				
				1.5 KiB
			| 
											3 years ago
										 | /* -*- Mode: js; js-indent-level: 2; -*- */ | ||
|  | /* | ||
|  |  * Copyright 2011 Mozilla Foundation and contributors | ||
|  |  * Licensed under the New BSD license. See LICENSE or: | ||
|  |  * http://opensource.org/licenses/BSD-3-Clause
 | ||
|  |  */ | ||
|  | 
 | ||
|  | var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); | ||
|  | 
 | ||
|  | /** | ||
|  |  * Encode an integer in the range of 0 to 63 to a single base 64 digit. | ||
|  |  */ | ||
|  | exports.encode = function (number) { | ||
|  |   if (0 <= number && number < intToCharMap.length) { | ||
|  |     return intToCharMap[number]; | ||
|  |   } | ||
|  |   throw new TypeError("Must be between 0 and 63: " + number); | ||
|  | }; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Decode a single base 64 character code digit to an integer. Returns -1 on | ||
|  |  * failure. | ||
|  |  */ | ||
|  | exports.decode = function (charCode) { | ||
|  |   var bigA = 65;     // 'A'
 | ||
|  |   var bigZ = 90;     // 'Z'
 | ||
|  | 
 | ||
|  |   var littleA = 97;  // 'a'
 | ||
|  |   var littleZ = 122; // 'z'
 | ||
|  | 
 | ||
|  |   var zero = 48;     // '0'
 | ||
|  |   var nine = 57;     // '9'
 | ||
|  | 
 | ||
|  |   var plus = 43;     // '+'
 | ||
|  |   var slash = 47;    // '/'
 | ||
|  | 
 | ||
|  |   var littleOffset = 26; | ||
|  |   var numberOffset = 52; | ||
|  | 
 | ||
|  |   // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
 | ||
|  |   if (bigA <= charCode && charCode <= bigZ) { | ||
|  |     return (charCode - bigA); | ||
|  |   } | ||
|  | 
 | ||
|  |   // 26 - 51: abcdefghijklmnopqrstuvwxyz
 | ||
|  |   if (littleA <= charCode && charCode <= littleZ) { | ||
|  |     return (charCode - littleA + littleOffset); | ||
|  |   } | ||
|  | 
 | ||
|  |   // 52 - 61: 0123456789
 | ||
|  |   if (zero <= charCode && charCode <= nine) { | ||
|  |     return (charCode - zero + numberOffset); | ||
|  |   } | ||
|  | 
 | ||
|  |   // 62: +
 | ||
|  |   if (charCode == plus) { | ||
|  |     return 62; | ||
|  |   } | ||
|  | 
 | ||
|  |   // 63: /
 | ||
|  |   if (charCode == slash) { | ||
|  |     return 63; | ||
|  |   } | ||
|  | 
 | ||
|  |   // Invalid base64 digit.
 | ||
|  |   return -1; | ||
|  | }; |