use Convert::ASN1;
use MIME::Base64;
use Math::BigInt;

$modulus = 'tkqDILcxwK6nbjE2so48173Il3jIfewQ+U4qEAJ+CSQuJHmjYV2HtDCkjf75ZOrALOfT5/1IdWh5mEHTiikklw==';
$publicExponent = 'Aw==';
$privateExponent = 'eYcCFc92gHRvnst5zF7TOn6FulCFqUgLUN7GtVb+sMGpMejMp54Y+FU3ULxRRMK3dGtn95/ld1NHKUrahDX3Gw==';
$prime1 = '4D7FZonpjAj168XiNuDeTNOUK86oCtKDGgEEg3qaVIU=';
$prime2 = '0BrXCdwG1ja65c8CSJzoYCqyjCXlZW/odNlNCEk93Ws=';
$exponent1 = 'lX8uRFvxCAX5R9lBees+3eJix98aseGsvACtrPxm4wM=';
$exponent2 = 'iryPW+gEjs8nQ99W2xNFlXHMXW6Y7kqa+JDeBYYpPkc=';
$coefficient = 'ZErARYM6FBXvfCM0hZxVi7ZMlpJMTNV2wLdoiCaNMhg=';

sub to_bigint{
	my $b;

	$b = unpack("H*",decode_base64($_[0]));
	$b = "0x$b";
	return Math::BigInt->new($b);
}

my $rsa_key = Convert::ASN1->new;
$rsa_key->prepare(q(
   SEQUENCE {
      version INTEGER,
      modulus INTEGER,
      publicExponent INTEGER,
      privateExponent INTEGER,
      prime1 INTEGER,
      prime2 INTEGER,
      exponent1 INTEGER,
      exponent2 INTEGER,
      coefficient INTEGER
  }
)) or die $rsa_key->error;

$buf = $rsa_key->encode(
  version => 0,
  modulus   => to_bigint($modulus),
  publicExponent  => to_bigint($publicExponent),
  privateExponent => to_bigint($privateExponent),
  prime1 => to_bigint($prime1),
  prime2 => to_bigint($prime2),
  exponent1    => to_bigint($exponent1),
  exponent2     => to_bigint($exponent2),
  coefficient   => to_bigint($coefficient)
);

print $buf;
