diff -r 000000000000 -r 2c201484c85f crypto/weakcrypto/docs/pbe_example_code.dox --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/crypto/weakcrypto/docs/pbe_example_code.dox Wed Jul 08 11:25:26 2009 +0100 @@ -0,0 +1,103 @@ +/** +@page pbe_example_code PBE example code + + This example covers: + -# @ref pbe_example_1 "Encrypting some data with a password and writing it to a file" + -# @ref pbe_example_2 "Reading the data back from the file and decrypting it with the same password". + + This example code is really for reference only - it would be better to use: + - @ref secure_stream_example_code + - @ref secure_store_example_code + +
+ + - @ref pbe_example_code_support "Supporting code for this example". + +@anchor pbe_example_1 +@code +/* + * Encrypt data with password and write it to a file. + */ +void CPBEExample::WriteEncryptedDataL(const TDesC8& aInput, const TDesC& aFilename, const TDesC& aPassword) + { + // Open a stream to the output file + RFileWriteStream writeStream; + User::LeaveIfError(writeStream.Replace(iFs, aFilename, EFileShareExclusive | EFileWrite)); + CleanupClosePushL(writeStream); + + // Create a CPBEncryptElement object, passing details of the encryption we + // are using and the user's password + CPBEncryptElement* encryption = CPBEncryptElement::NewLC(aPassword, ECipherDES_CBC); + + // This is used to create a CPBEncryptor object + CPBEncryptor* encryptor = encryption->NewEncryptLC(); + + // Create a buffer of appropriate size to hold the ciphertext + HBufC8* ciphertextTemp = HBufC8::NewLC(encryptor->MaxFinalOutputLength(aInput.Length())); + TPtr8 ciphertext = ciphertextTemp->Des(); + + // Encrypt the input data into the ciphertext buffer + encryptor->ProcessFinalL(aInput, ciphertext); + + // Store encryption data. This contains details of the encryption used (e.g., + // cipher, key size) as well as things like the salt. This must be stored + // along with the encrypted data, otherwise it is not possible to decrypt it + // again! + writeStream << encryption->EncryptionData(); + + // Store the ciphertext + writeStream << ciphertext; + + // Commit the stream + writeStream.CommitL(); + + // Free memory (writeStream, encryption, encryptor, ciphertextTemp) + CleanupStack::PopAndDestroy(4, &writeStream); + } +@endcode + +@anchor pbe_example_2 +@code +/* + * Read data from file and decrypt it. + */ +HBufC8* CPBEExample::ReadEncryptedDataLC(const TDesC& aFilename, const TDesC& aPassword) + { + // Open a stream to the input file + RFileReadStream readStream; + User::LeaveIfError(readStream.Open(iFs, aFilename, EFileRead)); + CleanupClosePushL(readStream); + + // Read the encryption data from the file + CPBEncryptionData* encryptionData = CPBEncryptionData::NewLC(readStream); + + // Recreate the CPBEncryptElement object, using the encryption data from the + // file and the user's password. This will leave with KErrBadPassphrase if + // the password is wrong. + CPBEncryptElement* encryption = CPBEncryptElement::NewLC(*encryptionData, aPassword); + + // This is used to create a CPBDecryptor object + CPBDecryptor* decryptor = encryption->NewDecryptLC(); + + // Read the ciphertext + HBufC8* ciphertext = HBufC8::NewLC(readStream, KMaxTInt); + + // Allocate a buffer for the plaintext (this will be returned to the caller) + HBufC8* plaintextBuf = HBufC8::NewLC(decryptor->MaxFinalOutputLength(ciphertext->Length())); + TPtr8 plaintext = plaintextBuf->Des(); + + // Decrypt the data + decryptor->ProcessFinalL(*ciphertext, plaintext); + + // Free memory (readStream, encryptionData, encryption, decryptor, ciphertext, plaintext) + CleanupStack::Pop(plaintextBuf); // don't free this + CleanupStack::PopAndDestroy(5, &readStream); + CleanupStack::PushL(plaintextBuf); + + // Return plaintext to the caller + return plaintextBuf; + } + +@endcode + +*/