OpenSSL.NET

A managed OpenSSL wrapper written in C# for the 2.0 .NET Framework that exposes both the Crypto API and the SSL API. This a must for .NET developers that need crypto but don't want to use Microsoft's SSPI. This wrapper is based on version 1.0.0d of libeay32.dll and ssleay32.dll.

A big thanks goes to Ben Henderson for contributing the wrapper for the SSL API!

Download

The latest version (0.5) can be downloaded here.

Installation

Make sure you have libeay32.dll and ssleay32.dll in the current working directory of your application or in your PATH. In your .NET project, add a reference to the ManagedOpenSsl.dll assembly.

Documentation

Take a look at the low-level C API documentation over at the openssl.org.

Wrapper Example

The following is a partial example to show the general pattern of wrapping onto the C API.

Take DSA and the following C prototypes:
DSA *  DSA_new(void);
void   DSA_free(DSA *dsa);
int    DSA_size(const DSA *dsa);
int    DSA_generate_key(DSA *dsa);
int    DSA_sign(int dummy, const unsigned char *dgst, int len,
                unsigned char *sigret, unsigned int *siglen, DSA *dsa);
int    DSA_verify(int dummy, const unsigned char *dgst, int len,
                const unsigned char *sigbuf, int siglen, DSA *dsa);
Which gets wrapped as something akin to:
public class DSA : IDisposable
{
    // calls DSA_new()
    public DSA();

    // calls DSA_free() as needed
    ~DSA();

    // calls DSA_free() as needed
    public void Dispose();

    // returns DSA_size()
    public int Size { get; }

    // calls DSA_generate_key()
    public void GenerateKeys();

    // calls DSA_sign()
    public byte[] Sign(byte[] msg);

    // returns DSA_verify()
    public bool Verify(byte[] msg, byte[] sig);
}