- sodium_add
void sodium_add(ubyte[] a, ubyte[] b)
- sodium_allocarray (from deimos.sodium.utils)
void* sodium_allocarray(size_t count, size_t size) via public
import deimos.sodium.utils : sodium_stackzero, sodium_base64_VARIANT_ORIGINAL, sodium_base64_VARIANT_ORIGINAL_NO_PADDING, sodium_base64_VARIANT_URLSAFE, sodium_base64_VARIANT_URLSAFE_NO_PADDING, sodium_base64_ENCODED_LEN, sodium_base64_encoded_len, sodium_mlock, sodium_munlock, sodium_malloc, sodium_allocarray, sodium_free, sodium_mprotect_noaccess, sodium_mprotect_readonly, sodium_mprotect_readwrite;
- sodium_base642bin
bool sodium_base642bin(ubyte[] bin, char[] b64, string ignore_nullterminated, size_t bin_len, size_t pos_b64_non_parsed, int variant)
- sodium_base64_ENCODED_LEN (from deimos.sodium.utils)
size_t sodium_base64_ENCODED_LEN(size_t BIN_LEN, int VARIANT) via public
import deimos.sodium.utils : sodium_stackzero, sodium_base64_VARIANT_ORIGINAL, sodium_base64_VARIANT_ORIGINAL_NO_PADDING, sodium_base64_VARIANT_URLSAFE, sodium_base64_VARIANT_URLSAFE_NO_PADDING, sodium_base64_ENCODED_LEN, sodium_base64_encoded_len, sodium_mlock, sodium_munlock, sodium_malloc, sodium_allocarray, sodium_free, sodium_mprotect_noaccess, sodium_mprotect_readonly, sodium_mprotect_readwrite;
#define sodium_base64_ENCODED_LEN(BIN_LEN, VARIANT)
Computes the required length to encode BIN_LEN bytes as a base64 string
using the given variant. The computed length includes a trailing \0.
- sodium_base64_encoded_len (from deimos.sodium.utils)
size_t sodium_base64_encoded_len(size_t bin_len, int variant) via public
import deimos.sodium.utils : sodium_stackzero, sodium_base64_VARIANT_ORIGINAL, sodium_base64_VARIANT_ORIGINAL_NO_PADDING, sodium_base64_VARIANT_URLSAFE, sodium_base64_VARIANT_URLSAFE_NO_PADDING, sodium_base64_ENCODED_LEN, sodium_base64_encoded_len, sodium_mlock, sodium_munlock, sodium_malloc, sodium_allocarray, sodium_free, sodium_mprotect_noaccess, sodium_mprotect_readonly, sodium_mprotect_readwrite;
- sodium_bin2base64
void sodium_bin2base64(char[] b64, ubyte[] bin, int variant)
- sodium_bin2hex
void sodium_bin2hex(char[] hex, ubyte[] bin)
Hexadecimal encoding.
The sodium_bin2hex() function converts the bytes stored at bin into a hexadecimal string.
- sodium_compare
int sodium_compare(ubyte[] b1_, ubyte[] b2_)
- sodium_free (from deimos.sodium.utils)
void sodium_free(void* ptr) via public
import deimos.sodium.utils : sodium_stackzero, sodium_base64_VARIANT_ORIGINAL, sodium_base64_VARIANT_ORIGINAL_NO_PADDING, sodium_base64_VARIANT_URLSAFE, sodium_base64_VARIANT_URLSAFE_NO_PADDING, sodium_base64_ENCODED_LEN, sodium_base64_encoded_len, sodium_mlock, sodium_munlock, sodium_malloc, sodium_allocarray, sodium_free, sodium_mprotect_noaccess, sodium_mprotect_readonly, sodium_mprotect_readwrite;
- sodium_hex2bin
bool sodium_hex2bin(ubyte[] bin, char[] hex, string ignore_nullterminated, size_t bin_len, size_t pos_hex_non_parsed)
Hexadecimal decoding.
The sodium_hex2bin() function parses a hexadecimal string hex and converts it to a byte sequence bin.
ignore_nullterminated is a string of characters to skip.
ignore_nullterminated's last character MUST be '\0' in order to save allocating a new C string and thus be @nogc
For example, the string ": \0" allows colons and
spaces to be present at any locations in the hexadecimal string. These characters will just
be ignored. As a result, "69:FC", "69 FC", "69 : FC" and "69FC" will be valid inputs,
and will produce the same output.
ignore_nullterminated can be set to null in order to disallow any non-hexadecimal character.
bin.length is the maximum number of bytes to put into bin, thus bin has to be sized
appropriately in advance as >= hex.length/2, otherwise the function throws.
The parser stops when a non-hexadecimal, non-ignored character is found or when
bin.length bytes have been written.
bin_len is the number of bytes that actually got written into bin.
@returns always true (success) and sets pos_hex_non_parsed to the position
within hex following the last parsed character.
It evaluates in constant time for a given length and format.
- sodium_increment
void sodium_increment(ubyte[] n)
Incrementing large numbers.
The sodium_increment() function takes an ubyte array representing an arbitrary-long unsigned number,
and increments it.
It runs in constant-time for a given length, and considers the number to be encoded in little-
endian format.
sodium_increment() can be used to increment nonces in constant time.
This function was introduced in libsodium 1.0.4.
Does nothing if the array is null
- sodium_is_zero
bool sodium_is_zero(ubyte[] a)
- sodium_malloc (from deimos.sodium.utils)
void* sodium_malloc(size_t size) via public
import deimos.sodium.utils : sodium_stackzero, sodium_base64_VARIANT_ORIGINAL, sodium_base64_VARIANT_ORIGINAL_NO_PADDING, sodium_base64_VARIANT_URLSAFE, sodium_base64_VARIANT_URLSAFE_NO_PADDING, sodium_base64_ENCODED_LEN, sodium_base64_encoded_len, sodium_mlock, sodium_munlock, sodium_malloc, sodium_allocarray, sodium_free, sodium_mprotect_noaccess, sodium_mprotect_readonly, sodium_mprotect_readwrite;
- sodium_memcmp
bool sodium_memcmp(ubyte[] b1_, ubyte[] b2_)
Constant-time test for equality
- sodium_memzero
void sodium_memzero(ubyte[] a)
- sodium_mlock (from deimos.sodium.utils)
int sodium_mlock(void* addr, size_t len) via public
import deimos.sodium.utils : sodium_stackzero, sodium_base64_VARIANT_ORIGINAL, sodium_base64_VARIANT_ORIGINAL_NO_PADDING, sodium_base64_VARIANT_URLSAFE, sodium_base64_VARIANT_URLSAFE_NO_PADDING, sodium_base64_ENCODED_LEN, sodium_base64_encoded_len, sodium_mlock, sodium_munlock, sodium_malloc, sodium_allocarray, sodium_free, sodium_mprotect_noaccess, sodium_mprotect_readonly, sodium_mprotect_readwrite;
The sodium_mlock() function locks at least len bytes of memory starting at addr.
This can help avoid swapping sensitive data to disk.
- sodium_mprotect_noaccess (from deimos.sodium.utils)
int sodium_mprotect_noaccess(void* ptr) via public
import deimos.sodium.utils : sodium_stackzero, sodium_base64_VARIANT_ORIGINAL, sodium_base64_VARIANT_ORIGINAL_NO_PADDING, sodium_base64_VARIANT_URLSAFE, sodium_base64_VARIANT_URLSAFE_NO_PADDING, sodium_base64_ENCODED_LEN, sodium_base64_encoded_len, sodium_mlock, sodium_munlock, sodium_malloc, sodium_allocarray, sodium_free, sodium_mprotect_noaccess, sodium_mprotect_readonly, sodium_mprotect_readwrite;
- sodium_mprotect_readonly (from deimos.sodium.utils)
int sodium_mprotect_readonly(void* ptr) via public
import deimos.sodium.utils : sodium_stackzero, sodium_base64_VARIANT_ORIGINAL, sodium_base64_VARIANT_ORIGINAL_NO_PADDING, sodium_base64_VARIANT_URLSAFE, sodium_base64_VARIANT_URLSAFE_NO_PADDING, sodium_base64_ENCODED_LEN, sodium_base64_encoded_len, sodium_mlock, sodium_munlock, sodium_malloc, sodium_allocarray, sodium_free, sodium_mprotect_noaccess, sodium_mprotect_readonly, sodium_mprotect_readwrite;
- sodium_mprotect_readwrite (from deimos.sodium.utils)
int sodium_mprotect_readwrite(void* ptr) via public
import deimos.sodium.utils : sodium_stackzero, sodium_base64_VARIANT_ORIGINAL, sodium_base64_VARIANT_ORIGINAL_NO_PADDING, sodium_base64_VARIANT_URLSAFE, sodium_base64_VARIANT_URLSAFE_NO_PADDING, sodium_base64_ENCODED_LEN, sodium_base64_encoded_len, sodium_mlock, sodium_munlock, sodium_malloc, sodium_allocarray, sodium_free, sodium_mprotect_noaccess, sodium_mprotect_readonly, sodium_mprotect_readwrite;
- sodium_munlock (from deimos.sodium.utils)
int sodium_munlock(void* addr, size_t len) via public
import deimos.sodium.utils : sodium_stackzero, sodium_base64_VARIANT_ORIGINAL, sodium_base64_VARIANT_ORIGINAL_NO_PADDING, sodium_base64_VARIANT_URLSAFE, sodium_base64_VARIANT_URLSAFE_NO_PADDING, sodium_base64_ENCODED_LEN, sodium_base64_encoded_len, sodium_mlock, sodium_munlock, sodium_malloc, sodium_allocarray, sodium_free, sodium_mprotect_noaccess, sodium_mprotect_readonly, sodium_mprotect_readwrite;
The sodium_munlock() function should be called after locked memory is not being used any more.
It will zero len bytes starting at addr before actually flagging the pages as
swappable again. Calling sodium_memzero() prior to sodium_munlock() is thus not required.
- sodium_pad
bool sodium_pad(size_t padded_buflen, ubyte[] buf, size_t unpadded_buflen, size_t blocksize)
- sodium_stackzero (from deimos.sodium.utils)
void sodium_stackzero(size_t len) via public
import deimos.sodium.utils : sodium_stackzero, sodium_base64_VARIANT_ORIGINAL, sodium_base64_VARIANT_ORIGINAL_NO_PADDING, sodium_base64_VARIANT_URLSAFE, sodium_base64_VARIANT_URLSAFE_NO_PADDING, sodium_base64_ENCODED_LEN, sodium_base64_encoded_len, sodium_mlock, sodium_munlock, sodium_malloc, sodium_allocarray, sodium_free, sodium_mprotect_noaccess, sodium_mprotect_readonly, sodium_mprotect_readwrite;
Clearing the stack.
*
* The sodium_stackzero() function clears len bytes above the current stack pointer, to
* overwrite sensitive values that may have been temporarily stored on the stack.
* Note that these values can still be present in registers.
* History: This function was introduced in libsodium 1.0.16.
* See_Also: https://download.libsodium.org/doc/helpers#clearing-the-stack
- sodium_sub
void sodium_sub(ubyte[] a, ubyte[] b)
Substracting large numbers
The sodium_sub() function accepts two arrays of unsigned numbers encoded in little-
endian format, a and b, both of size len bytes.
It computes (a - b) mod 2^(8*len) in constant time for a given length, and overwrites a
with the result.
- sodium_unpad
bool sodium_unpad(size_t unpadded_buflen, ubyte[] buf, size_t padded_buflen, size_t blocksize)
- sodium_base64_VARIANT_ORIGINAL (from deimos.sodium.utils)
enum int sodium_base64_VARIANT_ORIGINAL; via public
import deimos.sodium.utils : sodium_stackzero, sodium_base64_VARIANT_ORIGINAL, sodium_base64_VARIANT_ORIGINAL_NO_PADDING, sodium_base64_VARIANT_URLSAFE, sodium_base64_VARIANT_URLSAFE_NO_PADDING, sodium_base64_ENCODED_LEN, sodium_base64_encoded_len, sodium_mlock, sodium_munlock, sodium_malloc, sodium_allocarray, sodium_free, sodium_mprotect_noaccess, sodium_mprotect_readonly, sodium_mprotect_readwrite;
- sodium_base64_VARIANT_ORIGINAL_NO_PADDING (from deimos.sodium.utils)
enum int sodium_base64_VARIANT_ORIGINAL_NO_PADDING; via public
import deimos.sodium.utils : sodium_stackzero, sodium_base64_VARIANT_ORIGINAL, sodium_base64_VARIANT_ORIGINAL_NO_PADDING, sodium_base64_VARIANT_URLSAFE, sodium_base64_VARIANT_URLSAFE_NO_PADDING, sodium_base64_ENCODED_LEN, sodium_base64_encoded_len, sodium_mlock, sodium_munlock, sodium_malloc, sodium_allocarray, sodium_free, sodium_mprotect_noaccess, sodium_mprotect_readonly, sodium_mprotect_readwrite;
- sodium_base64_VARIANT_URLSAFE (from deimos.sodium.utils)
enum int sodium_base64_VARIANT_URLSAFE; via public
import deimos.sodium.utils : sodium_stackzero, sodium_base64_VARIANT_ORIGINAL, sodium_base64_VARIANT_ORIGINAL_NO_PADDING, sodium_base64_VARIANT_URLSAFE, sodium_base64_VARIANT_URLSAFE_NO_PADDING, sodium_base64_ENCODED_LEN, sodium_base64_encoded_len, sodium_mlock, sodium_munlock, sodium_malloc, sodium_allocarray, sodium_free, sodium_mprotect_noaccess, sodium_mprotect_readonly, sodium_mprotect_readwrite;
- sodium_base64_VARIANT_URLSAFE_NO_PADDING (from deimos.sodium.utils)
enum int sodium_base64_VARIANT_URLSAFE_NO_PADDING; via public
import deimos.sodium.utils : sodium_stackzero, sodium_base64_VARIANT_ORIGINAL, sodium_base64_VARIANT_ORIGINAL_NO_PADDING, sodium_base64_VARIANT_URLSAFE, sodium_base64_VARIANT_URLSAFE_NO_PADDING, sodium_base64_ENCODED_LEN, sodium_base64_encoded_len, sodium_mlock, sodium_munlock, sodium_malloc, sodium_allocarray, sodium_free, sodium_mprotect_noaccess, sodium_mprotect_readonly, sodium_mprotect_readwrite;
Utility functions and unittests.