defmodule CA.CMP do # IETF 2510:2005 X.509 PKI CMP # openssl cmp -cmd genm -server 127.0.0.1:829 \ # -recipient "/CN=CMPserver" -ref 1234 -secret pass:0000 # openssl cmp -cmd ir -server 127.0.0.1:829 \ # -path priv/certs -srvcert caroot.pem -ref NewUser \ # -secret pass:0000 -certout x.pem -newkey maxim.key.enc -subject "/CN=maxim/O=SYNRC/ST=Kyiv/C=UA" def start(), do: :erlang.spawn(fn -> listen(829) end) def listen(port) do {:ok, socket} = :gen_tcp.listen(port, [:binary, {:packet, 0}, {:active, false}, {:reuseaddr, true}]) accept(socket) end def accept(socket) do {:ok, fd} = :gen_tcp.accept(socket) :erlang.spawn(fn -> loop(fd) end) accept(socket) end def loop(socket) do case :gen_tcp.recv(socket, 0) do {:ok, data} -> {{_,headers},asn} = :asn1rt_nif.decode_ber_tlv(data) [_,body] = :string.split asn, "\r\n\r\n", :all {:ok,dec} = :'PKIXCMP-2009'.decode(:'PKIMessage', body) :io.format 'CMP: ~p~n', [dec] loop(socket) {:error, :closed} -> :exit end end end