Current section
Files
Jump to
Current section
Files
lib/ex_mobile_device/ssl.ex
defmodule ExMobileDevice.Ssl do
@moduledoc """
SSL/TLS helper functions.
This module contains a helper function, `connect/2` that can be used
to authenticate an _existing_ `:gen_tcp` socket.
"""
@legacy_sign_algos [
sha: :rsa,
sha: :ecdsa,
sha256: :rsa,
sha256: :ecdsa,
sha384: :rsa,
sha384: :ecdsa,
sha512: :rsa,
sha512: :ecdsa
]
@doc """
Authenticate an existing connection, using a pair-record.
On success, returns an `:ssl` socket.
"""
@spec connect(port(), map()) :: {:ok, :ssl.sslsocket()} | {:error, any()}
def connect(socket, pair_record) when is_port(socket) and is_map(pair_record) do
[{_, cert, _}] = :public_key.pem_decode(pair_record["HostCertificate"])
[{key_type, key, _}] = :public_key.pem_decode(pair_record["HostPrivateKey"])
:ssl.connect(socket,
cert: cert,
key: {key_type, key},
verify: :verify_none,
signature_algs: signature_algs()
)
end
defp signature_algs do
:ssl.signature_algs(:default, :"tlsv1.3") ++ @legacy_sign_algos
end
end