Packages
upstream
2.0.3
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.7
2.0.6
2.0.5
2.0.4
2.0.3
2.0.2
2.0.0
1.8.2
1.8.1
1.7.2
1.7.1
1.7.0
1.6.14
1.6.13
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.12
1.5.11
1.5.11-dev-3
1.5.11-dev-2
1.5.11-dev-1
1.5.11-dev
1.5.10
1.5.9
1.5.8
1.5.7
1.5.6
1.5.5
1.5.2
1.5.1
1.5.0
1.4.12
1.4.9
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.7
1.3.5
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.3
1.2.1
Upstream is for integrating into projects that need to do large file uploads to B2 service. It integrates tightly with Backblaze B2 for now, with plans to support Amazon S3.
Current section
Files
Jump to
Current section
Files
lib/upstream/worker/checksum.ex
defmodule Upstream.Worker.Checksum do
@moduledoc """
Calculates the sha from the streaming chunk.
"""
@spec start_link() :: {:error, any()} | {:ok, pid()}
def start_link do
Agent.start_link(fn -> :crypto.hash_init(:sha) end)
end
@spec add_bytes_to_hash(any(), atom() | pid() | {atom(), any()} | {:via, atom(), any()}) ::
any()
def add_bytes_to_hash(bytes, pid) do
Agent.get_and_update(pid, fn hash ->
{hash, :crypto.hash_update(hash, bytes)}
end)
end
@spec stop(atom() | pid() | {atom(), any()} | {:via, atom(), any()}) :: :ok
def stop(pid), do: Agent.stop(pid)
@spec get_hash(atom() | pid() | {atom(), any()} | {:via, atom(), any()}) :: any()
def get_hash(pid) do
Agent.get(pid, &hash_to_string/1)
end
defp hash_to_string(hash) do
hash
|> :crypto.hash_final()
|> Base.encode16()
|> String.downcase()
end
end