public byte[] Encrypt(Mechanism mechanism, ObjectHandle keyHandle, byte[] data)
{
if (this._disposed)
throw new ObjectDisposedException(this.GetType().FullName);
if (mechanism == null)
throw new ArgumentNullException("mechanism");
if (keyHandle == null)
throw new ArgumentNullException("keyHandle");
if (data == null)
throw new ArgumentNullException("data");
CK_MECHANISM ckMechanism = mechanism.CkMechanism;
CKR rv = _p11.C_EncryptInit(_sessionId, ref ckMechanism, keyHandle.ObjectId);
if (rv != CKR.CKR_OK)
throw new Pkcs11Exception("C_EncryptInit", rv);
ulong encryptedDataLen = 0;
rv = _p11.C_Encrypt(_sessionId, data, Convert.ToUInt64(data.Length), null, ref encryptedDataLen);
if (rv != CKR.CKR_OK)
throw new Pkcs11Exception("C_Encrypt", rv);
byte[] encryptedData = new byte[encryptedDataLen];
rv = _p11.C_Encrypt(_sessionId, data, Convert.ToUInt64(data.Length), encryptedData, ref encryptedDataLen);
if (rv != CKR.CKR_OK)
throw new Pkcs11Exception("C_Encrypt", rv);
if (encryptedData.Length != Convert.ToInt32(encryptedDataLen))
Array.Resize(ref encryptedData, Convert.ToInt32(encryptedDataLen));
return encryptedData;
}