Как создать объект Crypt :: RSA из модуля, экспоненты и частного экспонента?

Я пытаюсь перенести следующие функции php на perl:

public function loadKey($mod, $exp, $type = 'public') { $rsa = new Crypt_RSA(); $rsa->signatureMode = CRYPT_RSA_SIGNATURE_PKCS1; $rsa->setHash('sha256'); $rsa->modulus = new Math_BigInteger(Magicsig::base64_url_decode($mod), 256); $rsa->k = strlen($rsa->modulus->toBytes()); $rsa->exponent = new Math_BigInteger(Magicsig::base64_url_decode($exp), 256); // snip... } 

Мне нужно преобразовать строку в форму («RSA. $ Mod. $ Exp. $ Private_exp»):

 RSA.mVgY8RN6URBTstndvmUUPb4UZTdwvwmddSKE5z_jvKUEK6yk1u3rrC9yN8k6FilGj9K0eeUPe2hf4Pj-5CmHww==.AQAB.Lgy_yL3hsLBngkFdDw1Jy9TmSRMiH6yihYetQ8jy-jZXdsZXd8V5ub3kuBHHk4M39i3TduIkcrjcsiWQb77D8Q== 

… к объекту Crypt :: RSA. Я разделил компоненты, поэтому у меня есть $ mod, $ exp и $ private_exp, но API Perl Crypt :: RSA, похоже, не имеет возможности явно установить.

Related of "Как создать объект Crypt :: RSA из модуля, экспоненты и частного экспонента?"

Работала в IRC, документируя ее здесь для остального мира: она полностью недокументирована, но у Crypt::RSA::Key есть методы, называемые n , e и d которые соответствуют модулю, публичному экспоненту и частному экспоненту , Ошибки Modulo в функции проверки (которая должна работать, если p и q недоступны, но n есть, но на самом деле это не так), можно создать рабочий ключ с этими методами.

Мы решили проблему вместе, создав подкласс Crypt::RSA::Key::Private с фабричным методом, который декодирует кодировку base64 (используя MIME :: Base64 :: URLSafe ) и дополнительную двоичную кодировку (используя Math :: BigInt -> from_hex и unpack "H*" ), а затем устанавливает эти три закрытых элемента, а модули Crypt::RSA смогли принять его как ключ.