2018-04-02 18:10:51 +02:00
/ * *
* @ author n1474335 [ n1474335 @ gmail . com ]
* @ copyright Crown Copyright 2016
* @ license Apache - 2.0
* /
2019-07-09 13:23:59 +02:00
import Operation from "../Operation.mjs" ;
import Utils from "../Utils.mjs" ;
2018-04-02 18:10:51 +02:00
/ * *
* To Base32 operation
* /
class ToBase32 extends Operation {
/ * *
* ToBase32 constructor
* /
constructor ( ) {
super ( ) ;
this . name = "To Base32" ;
this . module = "Default" ;
this . description = "Base32 is a notation for encoding arbitrary byte data using a restricted set of symbols that can be conveniently used by humans and processed by computers. It uses a smaller set of characters than Base64, usually the uppercase alphabet and the numbers 2 to 7." ;
2018-08-21 20:07:13 +02:00
this . infoURL = "https://wikipedia.org/wiki/Base32" ;
2018-04-02 18:10:51 +02:00
this . inputType = "byteArray" ;
this . outputType = "string" ;
this . args = [
{
name : "Alphabet" ,
type : "binaryString" ,
value : "A-Z2-7="
}
] ;
}
/ * *
* @ param { byteArray } input
* @ param { Object [ ] } args
* @ returns { string }
* /
run ( input , args ) {
if ( ! input ) return "" ;
const alphabet = args [ 0 ] ? Utils . expandAlphRange ( args [ 0 ] ) . join ( "" ) : "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=" ;
let output = "" ,
chr1 , chr2 , chr3 , chr4 , chr5 ,
enc1 , enc2 , enc3 , enc4 , enc5 , enc6 , enc7 , enc8 ,
i = 0 ;
while ( i < input . length ) {
chr1 = input [ i ++ ] ;
chr2 = input [ i ++ ] ;
chr3 = input [ i ++ ] ;
chr4 = input [ i ++ ] ;
chr5 = input [ i ++ ] ;
enc1 = chr1 >> 3 ;
enc2 = ( ( chr1 & 7 ) << 2 ) | ( chr2 >> 6 ) ;
enc3 = ( chr2 >> 1 ) & 31 ;
enc4 = ( ( chr2 & 1 ) << 4 ) | ( chr3 >> 4 ) ;
enc5 = ( ( chr3 & 15 ) << 1 ) | ( chr4 >> 7 ) ;
enc6 = ( chr4 >> 2 ) & 31 ;
enc7 = ( ( chr4 & 3 ) << 3 ) | ( chr5 >> 5 ) ;
enc8 = chr5 & 31 ;
if ( isNaN ( chr2 ) ) {
enc3 = enc4 = enc5 = enc6 = enc7 = enc8 = 32 ;
} else if ( isNaN ( chr3 ) ) {
enc5 = enc6 = enc7 = enc8 = 32 ;
} else if ( isNaN ( chr4 ) ) {
enc6 = enc7 = enc8 = 32 ;
} else if ( isNaN ( chr5 ) ) {
enc8 = 32 ;
}
output += alphabet . charAt ( enc1 ) + alphabet . charAt ( enc2 ) + alphabet . charAt ( enc3 ) +
alphabet . charAt ( enc4 ) + alphabet . charAt ( enc5 ) + alphabet . charAt ( enc6 ) +
alphabet . charAt ( enc7 ) + alphabet . charAt ( enc8 ) ;
}
return output ;
}
}
export default ToBase32 ;