#
#       Base64
#

my $base64chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\+\/";

sub base64encode {

  local($temp)=shift;
  local($encoded)="";

  for ($i=0;$i<length($temp);$i+=3) {
    local($k0,$k1,$k2);
    $k0=ord(substr($temp,$i,1));
    $k1=ord(substr($temp,$i+1,1));
    $k2=ord(substr($temp,$i+2,1));
    $encoded.=substr($base64chars,$k0>>2,1);
    if (($i+3)-length($temp)==2) {
      $encoded.=substr($base64chars,($k0&3)<<4,1);
      $encoded.="=";
      $encoded.="=";
      return ($encoded);
    }
    $encoded.=substr($base64chars,(($k0&3)<<4)|($k1>>4),1);
    if (($i+3)-length($temp)==1) {
      $encoded.=substr($base64chars,($k1&15)<<2,1);
      $encoded.='=';
      return ($encoded);
    }
    $encoded.=substr($base64chars,(($k1&15)<<2)|($k2>>6),1);
    $encoded.=substr($base64chars,$k2&63,1);
  }

  return ($encoded);
}

alias {
  echo(&base64encode("@_"));
} "64";

