Hi Mehrdad,
It's generally very bad practice (security and performance) to directly encrypt any sizable data with a private key. What people typically refer to by "public/private key encryption" is actually a form of key wrapping. A cryptographically strong, random number is generated to be used as a symmetric key. This symmetric key is then encrypted with the peer's public key, a process known as key wrapping. Only people which possess the private key can unwrap the wrapped/encrypted symmetric key.
At this time, there is no code for key wrapping within crypto/, because that has not been needed. Currently, the only supported public/private operations are signing data with a private key (crypto::SignatureCreator), which can be verified by anyone with the public key (crypto::SignatureVerifier). We do support symmetric encryption (crypto::Encryptor) and key generation. We also have code for ephemeral key derivation (crypto::P224EncryptedKeyExchange) as an alternative means of deriving a shared symmetric key, as well as PBKDF2-based symmetric key password derivation (crypto::SymmetricKey::DeriveFromPassword).
Before worrying about how to implement public/private key wrapping (which isn't that much of a big deal), a design document would be useful to help determine the threat modelling and what the appropriate crypto primitives are. For example, key wrapping may be completely inappropriate if there isn't a secure means to exchange key pairs - a bootstrapping problem not easily solved.
You may find that it's easier from an implementation point to first start with either the EKE/SPAKE method or the PBKDF2 method, both of which allow you to take a password and expand it into keying material. However, again, please write up a design doc first :-)