Reputation: 31
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