Houston, do you copy?
I’m moving!
I’m moving my phd logbook here http://cgthecodegirl.wordpress.com/ for some reasons
My next posting will be uploaded there.
See you there
back to teaching again
I left my favorite session of coding and debugging today, because I was so excited being a teacher again!
So let me pending the technical report about my research until tomorrow
Picking up where I left
Zooming in: Base64Decoder
I’m zooming in the process of converting plaintext to a point in elliptic curve. And from the examples of Crypto++ usage, the plaintext is encoded to a base64 after it’s being encrypted, and decoded before it’s being decrypted.
The inheritance diagram for Base64Decoder:
![]() |
| From Research |
The encoding process:
![]() |
| From Research |
The codes:
// Encryption
Encryptor.Encrypt( rng, reinterpret_cast( PlainText.c_str() ), PlainTextLength, CipherText );
// Base 64 Encoding
CryptoPP::Base64Encoder Encoder;
Encoder.Put( CipherText, CipherTextLength );
Encoder.MessageEnd();
// Scratch for Base 64 Encoded Ciphertext
unsigned int EncodedTextLength = Encoder.MaxRetrievable();
byte* EncodedText = new byte[ EncodedTextLength + 1 ]; /* + 1 for NULL termination */
if( NULL == EncodedText ) { throw std::string( “Base64 EncodedText Allocation Failure” ); }
::memset( EncodedText, 0xFB, EncodedTextLength );
EncodedText[ EncodedTextLength ] = ”;
// Base 64 Ciphertext
Encoder.Get( EncodedText, EncodedTextLength );
// Diagnostics
std::cout << “Base 64 Encoded Ciphertext (” << EncodedTextLength << ” bytes):”;
std::cout << std::endl << EncodedText << std::endl;
// Base 64 Decoding
CryptoPP::Base64Decoder Decoder;
Decoder.Put( EncodedText, EncodedTextLength );
Decoder.MessageEnd();
// Scratch for Base 64 Decoded Ciphertext
unsigned int DecodedTextLength = Decoder.MaxRetrievable();
byte* DecodedText = new byte[ DecodedTextLength ];
if( NULL == DecodedText ) { throw std::string( “Base64 DecodedText Allocation Failure” ); }
::memset( DecodedText, 0xFB, DecodedTextLength );
// Ciphertext is no longer Encoded
Decoder.Get( DecodedText, DecodedTextLength );
//
// At this point, RecoveredText64 = CipherText
//
assert( DecodedTextLength == CipherTextLength );
assert( 0 == ::memcmp( DecodedText, CipherText, CipherTextLength ) );
// Scratch for Decryption
unsigned int RecoveredTextLength = Decryptor.MaxPlaintextLength( CipherTextLength );
if( 0 == RecoveredTextLength ) { throw std::string(“ciphertextLength is not valid (too long or too short)”); }
// Decryption Buffer
char* RecoveredText = new char[ RecoveredTextLength ];
if( NULL == RecoveredText ) { throw std::string( “RecoveredText CipherText Allocation Failure” ); }
::memset( RecoveredText, 0xFB, RecoveredTextLength );
// Decryption
Decryptor.Decrypt( rng, CipherText, CipherTextLength, reinterpret_cast( RecoveredText ) );
// Diagnostics
std::cout << “Recovered text (” << RecoveredTextLength << ” bytes):” << std::endl;
std::cout << “‘” << RecoveredText << “‘” << std::endl;
Questions:
- Why should the plaintext be encoded to base64?
- Why the plaintext is encoded after it’s encrypted not the vice versa?
Attended an interesting final project presentation at Math Dept on Jan 15th 2009 8am.
It’s about proving that the rational points on elliptic curve form a group. Once again learning so much from those mathematicians. Thanks!
Passed another milestone
I have just finished skimming through “Elliptic Curve Cryptography for Constrained Devices – Algorithms, Architectures and Practical Implementation” by Sandeep S. Kumar.
The guy have done software design of ECDH key exchange on an 8-bit processor, hardware/software co-design on extensions for an 8-bit processor and 32-bit processor, hardware design for optimal digit multipliers for , hardware design for ECC in the frequency domain and hardware design for tiny ECC processor over
!!!
He just did everything! The open problems he mentioned at the end of the book was those stuff related to optimizing power to be extremely efficient on constrained devices, thus to make it strong against the side channel attacks.
Oh well…
Reading the third chapter of this book, I’m astonished that ECC (ECDH) is implementable on Chipcon CC1010 chip which consists of an 8-bit 8051 processor core with a built-in radio transceiver and a hardware DES engine. It containts 32 kb of flash memory for storing programs, 2048 bytes of SRAM external to the 8051 core (XRAM), and 128 bytes of internal SRAM (IRAM).
Now the question is, without using any additional extra hardware, how to build codes calculating those complex operation of ECC that fits those small memories???
[screaming in horror...]
Which class to use?
This is the class structure of Crypto++ Library

And then when I’m going to implement PK_Encryptor, which one to use???

Which base class to use, when to implement, what scheme to choose? Still not clear which are the abstract classes. This library is superb but makes my head going to explode



Recent Comments