WIP encoding
This commit is contained in:
		
							parent
							
								
									3156229e2c
								
							
						
					
					
						commit
						10f817a51c
					
				
							
								
								
									
										135
									
								
								lib/bluecrypt-encoding.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										135
									
								
								lib/bluecrypt-encoding.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,135 @@ | |||||||
|  | (function (exports) { | ||||||
|  | 
 | ||||||
|  | var Enc = exports.BluecryptEncoding = {}; | ||||||
|  | 
 | ||||||
|  | Enc.bufToBin = function (buf) { | ||||||
|  |   var bin = ''; | ||||||
|  |   // cannot use .map() because Uint8Array would return only 0s
 | ||||||
|  |   buf.forEach(function (ch) { | ||||||
|  |     bin += String.fromCharCode(ch); | ||||||
|  |   }); | ||||||
|  |   return bin; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | Enc.bufToHex = function toHex(u8) { | ||||||
|  |   var hex = []; | ||||||
|  |   var i, h; | ||||||
|  |   var len = (u8.byteLength || u8.length); | ||||||
|  | 
 | ||||||
|  |   for (i = 0; i < len; i += 1) { | ||||||
|  |     h = u8[i].toString(16); | ||||||
|  |     if (h.length % 2) { h = '0' + h; } | ||||||
|  |     hex.push(h); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   return hex.join('').toLowerCase(); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | Enc.urlBase64ToBase64 = function urlsafeBase64ToBase64(str) { | ||||||
|  |   var r = str % 4; | ||||||
|  |   if (2 === r) { | ||||||
|  |     str += '=='; | ||||||
|  |   } else if (3 === r) { | ||||||
|  |     str += '='; | ||||||
|  |   } | ||||||
|  |   return str.replace(/-/g, '+').replace(/_/g, '/'); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | Enc.base64ToBuf = function (b64) { | ||||||
|  |   return Enc.binToBuf(atob(b64)); | ||||||
|  | }; | ||||||
|  | Enc.binToBuf = function (bin) { | ||||||
|  |   var arr = bin.split('').map(function (ch) { | ||||||
|  |     return ch.charCodeAt(0); | ||||||
|  |   }); | ||||||
|  |   return 'undefined' !== typeof Uint8Array ? new Uint8Array(arr) : arr; | ||||||
|  | }; | ||||||
|  | Enc.bufToHex = function (u8) { | ||||||
|  |   var hex = []; | ||||||
|  |   var i, h; | ||||||
|  |   var len = (u8.byteLength || u8.length); | ||||||
|  | 
 | ||||||
|  |   for (i = 0; i < len; i += 1) { | ||||||
|  |     h = u8[i].toString(16); | ||||||
|  |     if (h.length % 2) { h = '0' + h; } | ||||||
|  |     hex.push(h); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   return hex.join('').toLowerCase(); | ||||||
|  | }; | ||||||
|  | Enc.numToHex = function (d) { | ||||||
|  |   d = d.toString(16); | ||||||
|  |   if (d.length % 2) { | ||||||
|  |     return '0' + d; | ||||||
|  |   } | ||||||
|  |   return d; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | Enc.bufToUrlBase64 = function (u8) { | ||||||
|  |   return Enc.bufToBase64(u8) | ||||||
|  |     .replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, ''); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | Enc.bufToBase64 = function (u8) { | ||||||
|  |   var bin = ''; | ||||||
|  |   u8.forEach(function (i) { | ||||||
|  |     bin += String.fromCharCode(i); | ||||||
|  |   }); | ||||||
|  |   return btoa(bin); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | Enc.hexToBuf = function (hex) { | ||||||
|  |   var arr = []; | ||||||
|  |   hex.match(/.{2}/g).forEach(function (h) { | ||||||
|  |     arr.push(parseInt(h, 16)); | ||||||
|  |   }); | ||||||
|  |   return 'undefined' !== typeof Uint8Array ? new Uint8Array(arr) : arr; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | Enc.numToHex = function (d) { | ||||||
|  |   d = d.toString(16); | ||||||
|  |   if (d.length % 2) { | ||||||
|  |     return '0' + d; | ||||||
|  |   } | ||||||
|  |   return d; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | //
 | ||||||
|  | // JWK to SSH (tested working)
 | ||||||
|  | //
 | ||||||
|  | Enc.base64ToHex = function (b64) { | ||||||
|  |   var bin = atob(Enc.urlBase64ToBase64(b64)); | ||||||
|  |   return Enc.binToHex(bin); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | Enc.binToHex = function (bin) { | ||||||
|  |   return bin.split('').map(function (ch) { | ||||||
|  |     var h = ch.charCodeAt(0).toString(16); | ||||||
|  |     if (h.length % 2) { h = '0' + h; } | ||||||
|  |     return h; | ||||||
|  |   }).join(''); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | Enc.hexToBase64 = function (hex) { | ||||||
|  |   return btoa(Enc.hexToBin(hex)); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | Enc.hexToBin = function (hex) { | ||||||
|  |   return hex.match(/.{2}/g).map(function (h) { | ||||||
|  |     return String.fromCharCode(parseInt(h, 16)); | ||||||
|  |   }).join(''); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | Enc.urlBase64ToBase64 = function urlsafeBase64ToBase64(str) { | ||||||
|  |   var r = str % 4; | ||||||
|  |   if (2 === r) { | ||||||
|  |     str += '=='; | ||||||
|  |   } else if (3 === r) { | ||||||
|  |     str += '='; | ||||||
|  |   } | ||||||
|  |   return str.replace(/-/g, '+').replace(/_/g, '/'); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | }('undefined' !== typeof exports ? module.exports : window )); | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user