Richard
Richard

Reputation: 31

Loading OpenSSH public private keys into CryptoPP

I want to load openssh public key and private key using CryptoPP lib, the code is as follows:

#include <cryptopp/files.h>
#include <cryptopp/rsa.h>
#include <exception>

int main(int argc, char *argv[]) {
    try {
        CryptoPP::RSA::PrivateKey private_key;
        {
            CryptoPP::FileSource file{"/root/.ssh/id_rsa", true};
            private_key.BERDecodePrivateKey(file, false, -1);
        }
        CryptoPP::FileSink sink{"/root/.ssh/id_rsa.pub", true};
        CryptoPP::RSA::PublicKey{private_key}.DEREncode(sink);
    } catch (std::exception& e) {
        std::cerr << e.what() << std::endl;
    }
    
    return 0;
}

The private key content is as follows:

-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
...shortened for brevity...
IjZsS/BX+GGUKLAAAAEXJvb3RANTYwNDdhMDExOWI1AQ==
-----END OPENSSH PRIVATE KEY-----

and public key is:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC5xY9EA8TK++RE++9I0ZVBTVBLjEENTidvTm3ufiOk/GHWDNuNJvW7o/kC69NMj6v2WmVmqQSQdrf5huEgFyHQtqVQRXXawzlDX3EhH4WK3htfpZ69FDO70IKpv2/CUYIKS8hoV/VQLQVrJqOka8hWvPTPumekTFZr4OMzPZF5UKrUlcuTTWqEHRuih4NemRywrXcTBo91WbJx0bHa6EQPRMOR5YsAO443XM0Au+M99/CTjw2J8dl+7ZEYlTzfGOWkAPveaZ1WjDELlxQpkitAZCPUcUVS/p9dmuKWg82dIXt2+xb0BmsRBtM6EHmutvRD9zaSR84DpxynidszjbQIRawAbktwFIbc7UTleHdDssgnEt9f/+LZUgHAgh2Vv8AnXPOU1/eVpt33x59gThp4MxK+f1wDcrSFrD2/Sxf8B34VtGziaKIIP9dA+k/vchja8ICmurdPwSZdJ/9oZQSXpQpy2jjBRLINA/u/UVVYtlSs/phVlcx9KPL1DyHyoq0= root@56047a0119b5

Since the Cryptopp official website is down, I cannot find any documents or instructions, does anyone know how to read openssh key files and convert them to CryptoPP:::RSA::PrivateKey and CryptoPP::RSA::PublicKey?

Upvotes: 2

Views: 69

Answers (0)

Related Questions