LibSalt is simple C# wrapper library for Daniel J. Bernstein's nacl library via libsodium. This library only depends on C# and libsodium, and has no other dependances.
Libsalt is a simple library. You can integrate libsalt into any C# project using either LibSalt.dylib with LibSalt.cs or with the LibSalt.dll. These files are given with each release or can be built locally on Mac.
The project depends on libsodium. (For Mac) This can be downloaded using Homebrew:
brew install libsodium
From the \dist folder you'll need LibSalt.dylib and LibSalt.cs. Copy these files into your C# project.
To build the binaries locally use the make file:
make build
This is will generate LibSalt.dylib in the \dist director. This along with LibSalt.cs is need to use the library.
To build and run tests for bindings:
make tests
LibSalt supports functions for:
- Generating random data
- Public key pair generation
- Public-key signature generation
randombytes_random() returns a random 32 bit (4-btye) integer i.e. a number between 0 and 0xffffffff
randombytes(byte[] buf) fills a byte array with a random sequence of bytes into buf
randombytes_buf_deterministic(byte[] buf, byte[] seed) fills a byte array (buf) with a random sequence of bytes. This random sequence of bytes is based on the input seed. Use the same seed to get the same random sequence of bytes for buf.
crypto_sign_keypair(byte[] pk, byte[] sk) randomly generates a secret (sk) and public (pk) key
crypto_sign_seed_keypair(byte[] pk, byte[] sk, byte[] seed) randomly generates a secret (sk) and public (pk) key . Keys generated are based off the supplied seed, using the same seed will return the same keypair.
crypto_sign(byte[] sm, byte[] m, byte[] sk) prepends a signature to a message (m) using the secret key (sk). This generates a signed message in sm.
crypto_sign_open(byte[] m, byte[] sm, byte[] pk) checkes that the signed message (sm) has a valid signature for a given public key (pk). The valid public key will generate the unsigned message and store it in m and will return 0. An invalid public key will return an non-zero value.
crypto_sign_bytes returns the size of signatures