Library for working with RSA keys using Elixir and OpenSSL ports
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib Refactor a bit of code and implement encrypt the message by private_key Oct 4, 2018
test Refactor a bit of code and implement encrypt the message by private_key Oct 4, 2018
.gitignore Initial commit Aug 16, 2016
LICENSE
README.md
mix.exs
mix.lock

README.md

RSA Ex

Library for working with RSA keys using Elixir and OpenSSL ports.

Installation

If available in Hex, the package can be installed as:

  • Add rsa_ex to your list of dependencies in mix.exs:
def deps do
  [{:rsa_ex, "~> 0.4"}]
end
  • Ensure rsa_ex is started before your application:
def application do
  [applications: [:rsa_ex]]
end

Usage

  • Generate RSA 2048 Private Key
iex> {:ok, priv} = RsaEx.generate_private_key
  • Generate RSA 2048 Public Key
iex> {:ok, priv} = RsaEx.generate_private_key
iex> {:ok, pub} = RsaEx.generate_public_key(priv)
  • Generate RSA 4096 Public Key
iex> {:ok, priv} = RsaEx.generate_private_key("4096")
iex> {:ok, pub} = RsaEx.generate_public_key(priv)
  • Generate RSA 2048 Private/Public Keypair
iex> {:ok, {priv, pub}} = RsaEx.generate_keypair
  • Generate RSA 4096 Private/Public Keypair
iex> {:ok, {priv, pub}} = RsaEx.generate_keypair("4096")
  • Sign message with RSA private key
iex> {:ok, rsa_private_key} = RsaEx.generate_private_key
iex> {:ok, signature} = RsaEx.sign("message", rsa_private_key)
  • Sign message with RSA private key specifying a custom dygest type
iex> {:ok, rsa_private_key} = RsaEx.generate_private_key
iex> {:ok, signature} = RsaEx.sign("message", rsa_private_key, :sha512)
  • Verify signature with RSA public key
iex> {:ok, valid} = RsaEx.verify(message, signature, rsa_public_key)
  • Verify signature with RSA public key specifying a custom dygest type
iex> {:ok, valid} = RsaEx.verify(message, signature, rsa_public_key, :sha512)
  • Encrypt message with RSA public key in base64
iex> clear_text = "Important message"
"Important message"
iex> {:ok, cipher_text} = RsaEx.encrypt(clear_text, {:public_key, rsa_public_key})
{:ok, "Lmbv...HQ=="}
  • Encrypt message with RSA private key in base64
iex> clear_text = "Important message"
"Important message"
iex> {:ok, cipher_text} = RsaEx.encrypt(clear_text, {:private_key, rsa_private_key})
{:ok, "Lmbv...HQ=="}
  • Decrypt message with RSA private key
iex> {:ok, decrypted_clear_text} = RsaEx.decrypt(cipher_text, {:private_key, rsa_private_key})
{:ok, "Important message"}
  • Decrypt message with RSA public key
iex> {:ok, decrypted_clear_text} = RsaEx.decrypt(cipher_text, {:public_key, rsa_public_key})
{:ok, "Important message"}