Puid.Entropy (puid v1.1.2)
Entropy related calculations
The implementation is based on mathematical approximations to the solution of what is often referred to as the Birthday Problem.
Link to this section Summary
Functions
Entropy bits for generating a total number of instances with the given risk of repeat
Entropy bits of a string of len generated from characters charset, where charset is
either an pre-defined Puid.CharSet or a string of unique characters.
Same as Puid.Entropy.bits_for_len/2 but either returns the integer bits or raises a
Puid.Error
Entropy bits per character where charset is either an pre-defined Puid.CharSet or a string of
unique characters.
Same as bits_per_char/1 but either returns the bits or raises a Puid.Error
Length needed for a string generated from charset to have bits of entropy.
Same as Puid.Entropy.len_for_bits/2 but either returns the integer len or raises a
Puid.Error
Link to this section Functions
bits(total, risk)
Specs
bits(pos_integer(), pos_integer()) :: float()
Entropy bits for generating a total number of instances with the given risk of repeat
The total size of the instance pool is 2<sup>bits</sup>.
Example
iex> Puid.Entropy.bits(10.0e6, 1.0e12)
85.37013046707142
bits_for_len(len, charset)
Specs
bits_for_len(non_neg_integer(), atom() | String.t()) :: {:ok, non_neg_integer()} | {:error, Error.reason()}
Entropy bits of a string of len generated from characters charset, where charset is
either an pre-defined Puid.CharSet or a string of unique characters.
The character set must be comprised of unique symbols, and it is assumed each symbol in the character set has equal probability of occurrence (which maximizes entropy).
Example
iex> Puid.Entropy.bits_for_len(14, :alphanum)
{:ok, 83}
iex> Puid.Entropy.bits_for_len(14, "dingosky")
{:ok, 42}
bits_for_len!(len, charset)
Specs
bits_for_len!(non_neg_integer(), atom() | String.t()) :: non_neg_integer()
Same as Puid.Entropy.bits_for_len/2 but either returns the integer bits or raises a
Puid.Error
Example
iex> Puid.Entropy.bits_for_len!(14, :alphanum)
83
iex> Puid.Entropy.bits_for_len!(14, "dingosky")
42
bits_for_length(len, charset)
bits_for_length!(len, charset)
bits_per_char(charset)
Specs
Entropy bits per character where charset is either an pre-defined Puid.CharSet or a string of
unique characters.
The character set must be comprised of unique symbols, and it is assumed each symbol in the character set has equal probability of occurrence (which maximizes entropy).
Returns {:ok, bits}; or {:error, reason} if arg is either an unrecognized pre-defined
Puid.CharSet or a string of non-unique characters.
Example
iex> Puid.Entropy.bits_per_char(:alphanum)
{:ok, 5.954196310386875}
iex> Puid.Entropy.bits_per_char("dingosky")
{:ok, 3.0}
bits_per_char!(charset)
Specs
Same as bits_per_char/1 but either returns the bits or raises a Puid.Error
Example
iex> Puid.Entropy.bits_per_char!(:alphanum)
5.954196310386875
Puid.Entropy.bits_per_char!("dingosky")
3.0
len_for_bits(bits, charset)
Specs
len_for_bits(non_neg_integer(), atom() | String.t()) :: {:ok, non_neg_integer()} | {:error, Error.reason()}
Length needed for a string generated from charset to have bits of entropy.
The character set must be comprised of unique symbols, and it is assumed each symbol in the character set has equal probability of occurrence (which maximizes entropy).
Example
iex> Puid.Entropy.len_for_bits(128, :alphanum)
{:ok, 22}
iex> Puid.Entropy.len_for_bits(128, "dingosky")
{:ok, 43}
len_for_bits!(bits, charset)
Specs
len_for_bits!(non_neg_integer(), atom() | String.t()) :: non_neg_integer()
Same as Puid.Entropy.len_for_bits/2 but either returns the integer len or raises a
Puid.Error
Example
iex> Puid.Entropy.len_for_bits!(128, :alphanum)
22
iex> Puid.Entropy.len_for_bits!(128, "dingosky")
43