Base64 ライブラリ

Flex2Basic認証やろうと思ったら、Base64が標準ライブラリで用意されていませんでした。
私が探せなかっただけ?
とりあえず、前にAS2で作ったクラスに、package { ...}をつけて、型宣言をつけたら動きました。
いつも探すの面倒なので、ここにメモしておきます。
逆に、AS2で使う場合は、packageを消せば使えます。

// =====================================================================
// base64 Encode/Decode for ActionScript3
// modified by SAKATOKU Mineaki (http://kujirahand.com)
// =====================================================================
// original code from JavaScript
//    http://www.onicos.com/staff/iz/amuse/javascript/expert/base64.txt
// =====================================================================
// USAGE:
//   trace( Base64.encode("kujirahand") );
//   trace( Base64.decode("a3VqaXJhaGFuZA==") );
package {
	
  public class Base64
  {

    private static var base64EncodeChars:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    private static var base64DecodeChars:Array = new Array(
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
        52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
        -1,  0,  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, -1, -1, -1, -1, -1,
        -1, 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, -1, -1, -1, -1, -1);
    
    public static function encode(str:String):String
    {
        var out:String, i:int, len:int;
        var c1:int, c2:int, c3:int;
        len = str.length;
        i = 0;
        out = "";
        while(i < len) {
            c1 = str.charCodeAt(i++) & 0xff;
            if(i == len)
            {
                out += base64EncodeChars.charAt(c1 >> 2);
                out += base64EncodeChars.charAt((c1 & 0x3) << 4);
                out += "==";
                break;
            }
            c2 = str.charCodeAt(i++);
            if(i == len)
            {
                out += base64EncodeChars.charAt(c1 >> 2);
                out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
                out += base64EncodeChars.charAt((c2 & 0xF) << 2);
                out += "=";
                break;
            }
            c3 = str.charCodeAt(i++);
            out += base64EncodeChars.charAt(c1 >> 2);
            out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
            out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6));
            out += base64EncodeChars.charAt(c3 & 0x3F);
        }
        return out;
    }
    
    public static function decode(str:String):String
    {
        var c1:int, c2:int, c3:int, c4:int;
        var i:int, len:int;
        var out:String;
        
        len = str.length;
        i = 0;
        out = "";
        while(i < len) {
            /* c1 */
            do {
                c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
            } while(i < len && c1 == -1);
            if (c1 == -1) break;
            
            /* c2 */
            do {
                c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
            } while(i < len && c2 == -1);
            if (c2 == -1) break;
            
            out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));
            
            /* c3 */
            do {
                c3 = str.charCodeAt(i++) & 0xff;
                if (c3 == 61) return out;
                c3 = base64DecodeChars[c3];
            } while(i < len && c3 == -1);
            if(c3 == -1) break;
            
            out += String.fromCharCode(
                (((c2 & 0xF) << 4) | ((c3 & 0x3C) >> 2))
            );
            
            /* c4 */
            do {
                c4 = str.charCodeAt(i++) & 0xff;
                if(c4 == 61)
            	return out;
                c4 = base64DecodeChars[c4];
            } while(i < len && c4 == -1);
            if(c4 == -1) break;
            
            out += String.fromCharCode(
                (((c3 & 0x03) << 6) | c4)
            );
        }
        return out;
    }
    
	public static function test():void {
		var enc:String = Base64.encode("test");
		var dec:String = Base64.decode(enc);
		trace("enc="+enc);
		trace("dec="+dec);
	}

  }
}