// Konstanten fure Base64 Berechnungen

var base64Characters="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var base64Padding="=";

// Hex Wert in Base 64 umwandeln

function convertHexValueToBase64( hexValue ) 
{
	var counter = 0;
	var character = null;
	var returnValue = "";
	
	for( counter = 0; counter + 3 <= hexValue.length; counter += 3 )
	{
		character = parseInt( hexValue.substring( counter, counter + 3 ), 16 );
		
		returnValue += base64Characters.charAt( character >> 6 ) + base64Characters.charAt( character & 63 );
	}
	
	if( counter + 1 == hexValue.length ) 
	{
		character = parseInt( hexValue.substring( counter, counter + 1 ),16 );
		
		returnValue += base64Characters.charAt( character << 2 );
	}
	else if( counter + 2 == hexValue.length ) 
	{
		character = parseInt( hexValue.substring( counter, counter + 2 ), 16 );
		
		returnValue += base64Characters.charAt( character >> 2 ) + base64Characters.charAt( ( character & 3 ) << 4 );
	}
	
	while( ( returnValue.length & 3 ) > 0 )
	{
		returnValue += base64Padding;
	}
	
	return ( returnValue );
}

// Base 64 in Hex umwandeln

function convertBase64ValueToHex( base64Value ) 
{
	var returnValue = ""
	var state = 0; // b64 state, 0-3
	var slop;
	
	for( var counter = 0; counter < base64Value.length; ++counter ) 
	{
		if( base64Value.charAt( counter ) == base64Padding ) 
		{
			break;
		}
		
		var characterIndex = base64Characters.indexOf( base64Value.charAt( counter ) );
		
		if( characterIndex < 0 ) 
		{
			continue;
		}
	
		if( state == 0 ) 
		{
			returnValue += int2char( characterIndex >> 2 );
			slop = characterIndex & 3;
			state = 1;
		}
		else if( state == 1 ) 
		{
			returnValue += int2char( ( slop << 2 ) | ( characterIndex >> 4 ) );
			slop = characterIndex & 0xf;
			state = 2;
		}
		else if( state == 2 ) 
		{
			returnValue += int2char( slop );
			returnValue += int2char( characterIndex >> 2 );
			slop = characterIndex & 3;
			state = 3;
		}
		else 
		{
			returnValue += int2char( ( slop << 2 ) | ( characterIndex >> 4 ) );
			returnValue += int2char( characterIndex & 0xf );
			state = 0;
		}
	}
	
	if( state == 1 ) 
	{
		returnValue += int2char( slop << 2 );
	}
	
	return ( returnValue );
}