BERDecode
Jump to navigation
Jump to search
Documentation |
#include <cryptopp/cryptlib.h>
|
BERDecode decodes an object using ASN.1 BER decoding. Calling Load
on a class object usually calls BERDecode
. The companion to BERDecode
is DEREncode
.
Each class object has their own format for encoding. The documentation for the class usually specifies the standard used to encode an object.
Also see Keys and Formats wiki page.
Samples
#include "rsa.h" #include "hex.h" #include "integer.h" #include "files.h" #include "osrng.h" #include <iostream> #include <string> using namespace CryptoPP; void DumpPrivateKey( const RSAES_OAEP_SHA_Decryptor& key ); void DumpPublicKey( const RSAES_OAEP_SHA_Encryptor& key ); int main(int argc, char* argv[]) { try { // Grab a Generator AutoSeededRandomPool rng; // Specify modulus, accept e = 17 RSAES_OAEP_SHA_Decryptor Decryptor( rng, 64 /*, e */ ); RSAES_OAEP_SHA_Encryptor Encryptor( Decryptor ); // BER Encoded Keys std::string pubkey, prvkey; std::cout << "=====================================" << std::endl; std::cout << "========= BER Encoding Keys =========" << std::endl; std::cout << "=====================================" << std::endl; Decryptor.AccessKey().Save( HexEncoder( new StringSink( prvkey ) ) ); std::cout << "Dumping Private Key..." << std::endl; DumpPrivateKey( Decryptor ); // BER Encode Public Key Encryptor.AccessKey().Save( HexEncoder( new StringSink( pubkey ) ) ); std::cout << "Dumping Public Key..." << std::endl; DumpPublicKey( Encryptor ); std::cout << "====================================" << std::endl; std::cout << "======== BER Decoding Keys =========" << std::endl; std::cout << "====================================" << std::endl; RSAES_OAEP_SHA_Encryptor temp2; // Public RSAES_OAEP_SHA_Decryptor temp1; // Private { // BER Decode Private Key HexDecoder decoder; decoder.Put( (byte*)prvkey.c_str(), prvkey.size() ); decoder.MessageEnd(); temp1.AccessKey().Load( decoder ); std::cout << "Dumping Private Key..." << std::endl; DumpPrivateKey( temp1 ); } { // BER Decode Public Key HexDecoder decoder; decoder.Put( (byte*)pubkey.c_str(), pubkey.size() ); decoder.MessageEnd(); temp2.AccessKey().Load( decoder ); std::cout << "Dumping Public Key..." << std::endl; DumpPublicKey( temp2 ); } } catch( Exception&e ) { std::cerr << "Error: " << e.what() << std::endl; } catch( ... ) { std::cerr << "Unknown Error" << std::endl; } return 0; } void DumpPrivateKey( const RSAES_OAEP_SHA_Decryptor& key ) { std::cout << "n: " << key.GetTrapdoorFunction().GetModulus(); std::cout << std::endl; std::cout << "d: " << key.GetTrapdoorFunction().GetPrivateExponent(); std::cout << std::endl; std::cout << "e: " << key.GetTrapdoorFunction().GetPublicExponent(); std::cout << std::endl; std::cout << "p: " << key.GetTrapdoorFunction().GetPrime1(); std::cout << std::endl; std::cout << "q: " << key.GetTrapdoorFunction().GetPrime2(); std::cout << std::endl; } void DumpPublicKey( const RSAES_OAEP_SHA_Encryptor& key ) { std::cout << "n: " << key.GetTrapdoorFunction().GetModulus(); std::cout << std::endl; //////////////////////////////////////////////////////////////// // Not in a Public Key... // std::cout << "d: " << key.GetTrapdoorFunction().GetPrivateExponent(); // std::cout << std::endl; std::cout << "e: " << key.GetTrapdoorFunction().GetPublicExponent(); std::cout << std::endl; //////////////////////////////////////////////////////////////// // Not in a Public Key... // std::cout << "p: " << key.GetTrapdoorFunction().GetPrime1(); // std::cout << std::endl; // std::cout << "q: " << key.GetTrapdoorFunction().GetPrime2(); // std::cout << std::endl; }
Downloads
BERTest.zip - Sample Program listed above