# EctoCrypto
`EctoCrypto` provides `Ecto` types and utilities for saving data in encrypted
or hashed formats.
The goal is to provide easy to use, sane, and secure cryptographic
functionality that can be dropped directly into `Ecto` schemas.
Further documentation at https://hexdocs.pm/ecto_crypto/getting-started.html.
## Installation
The package can be installed by adding `ecto_crypto` to your list of
dependencies in `mix.exs`:
```elixir
def deps do
[
{:ecto_crypto, "~> 0.1.0"}
]
end
```
## How does it work?
The following assumes that you have a database table generated with the following migration:
```elixir
defmodule Repo.Migrations.CreateTestSchema do
use Ecto.Migration
def change do
create table(:test_schema) do
add :encrypted_string, :binary
end
end
end
```
To create an ecto schema with a field that automatically encrypted at the field
level upon being inserted to the database, use the
`EctoCrypto.EctoTypes.EncryptedBinary` `Ecto` type in the schema.
```elixir
defmodule TestSchema do
use Ecto.Schema
import Ecto.Changeset
schema "test_schema" do
field(:encrypted_string, EctoCrypto.EctoTypes.EncryptedBinary)
end
@fields ~w(encrypted_string)a
def changeset(attrs) do
changeset(%TestSchema{}, attrs)
end
def changeset(%TestSchema{} = schema, attrs) do
cast(schema, attrs, @fields)
end
end
```
When interacting with this schema in elixir, the field should behave like a
regular string or binary field. At the database level, the field will be
encrypted.
The inspiration for this project comes from the excellent tutorial at
https://github.com/dwyl/phoenix-ecto-encryption-example.