diff options
author | Linus Nordberg <linus@nordberg.se> | 2014-09-24 14:27:59 +0200 |
---|---|---|
committer | Linus Nordberg <linus@nordberg.se> | 2014-09-25 16:31:59 +0200 |
commit | c14dfa92cd6265524700ef4d7d97c2ec12e36bb0 (patch) | |
tree | dd2880535bfd7ae56a885253e399033a78ce322a /src/v1.erl | |
parent | db20ffa6cfa1c6982475f9748690f85fa8ea112d (diff) |
Make cert chains and CtExtensions variable length (TLS) vectors.
Also move some CT-specific code to new file catlfish.erl.
Diffstat (limited to 'src/v1.erl')
-rw-r--r-- | src/v1.erl | 61 |
1 files changed, 5 insertions, 56 deletions
@@ -8,11 +8,8 @@ -export(['add-chain'/3, 'add-pre-chain'/3, 'get-sth'/3, 'get-sth-consistency'/3, 'get-proof-by-hash'/3, 'get-entries'/3, 'get-roots'/3, 'get-entry-and-proof'/3]). -%% Testing -- FIXME: remove --export([hello/3]). -include("$CTROOT/plop/include/plop.hrl"). --define(PROTOCOL_VERSION, 0). %% Public functions, i.e. part of URL. 'add-chain'(SessionID, _Env, Input) -> @@ -25,16 +22,7 @@ html("add-chain: invalid base64-encoded chain: ", [ChainBase64]); [LeafCert | CertChain] -> - Entry = #plop_entry{type = x509, data = LeafCert}, - SPT = plop:add(#timestamped_entry{entry = Entry}, - list_to_binary(CertChain)), - R2 = [{sct_version, ?PROTOCOL_VERSION}, - {id, base64:encode(SPT#spt.logid)}, - {timestamp, SPT#spt.timestamp}, - {extensions, base64:encode("")}, - {signature, base64:encode( - plop:serialise(SPT#spt.signature))}], - binary_to_list(jiffy:encode({R2})); + catlfish:add_chain(LeafCert, CertChain); Invalid -> html("add-chain: chain is not a list: ", [Invalid]) end; @@ -109,7 +97,7 @@ deliver(SessionID, R). 'get-entries'(SessionID, _Env, Input) -> - %% TODO: Limit the number of returned entreis (i.e. start-end) to + %% TODO: Limit the number of returned entries (i.e. start-end) to %% something reasonable. R = case lists:sort(httpd:parse_query(Input)) of [{"end", EndInput}, {"start", StartInput}] -> @@ -117,7 +105,7 @@ {End, _} = string:to_integer(EndInput), case lists:member(error, [Start, End]) of true -> html("get-entries: bad input:", [Start, End]); - false -> encode_entries(plop:get(Start, End)) + false -> catlfish:entries(Start, End) end; _ -> html("get-entries: bad input:", Input) end, @@ -132,20 +120,7 @@ true -> html("get-entry-and-proof: not integers: ", [IndexInput, TreeSizeInput]); - false -> - binary_to_list( - jiffy:encode( - case plop:inclusion_and_more(Index, TreeSize) of - {ok, Leaf, Chain, Path} -> - {[{leaf_input, - base64:encode(plop:serialise(Leaf))}, - {extra_data, base64:encode(Chain)}, - {audit_path, - [base64:encode(X) || X <- Path]}]}; - {notfound, Msg} -> - {[{success, false}, - {error_message, list_to_binary(Msg)}]} - end)) + false -> catlfish:entry_and_proof(Index, TreeSize) end; _ -> html("get-entry-and-proof: bad input:", Input) end, @@ -155,33 +130,7 @@ R = [{certificates, []}], % NIY. deliver(SessionID, binary_to_list(jiffy:encode({R}))). -%% For testing. FIXME: Remove. -hello(SessionID, Env, Input) -> - Query = httpd:parse_query(Input), - mod_esi:deliver(SessionID, io_lib:format( - "Content-Type: text/html\r\n\r\n" ++ - "<html><body>hello again, erlang world" ++ - "<p>SessionID: ~p~n" ++ - "<p>Env: ~p~n" ++ - "<p>Input, raw: ~p~n" ++ - "<p>Input, parsed: ~p~n" ++ - "</body></html>", - [SessionID, Env, Input, Query])). - %% Private functions. --spec encode_entries([{mtl(), binary()}]) -> list(). -encode_entries(Entries) -> - binary_to_list(jiffy:encode({[{entries, unpack_entries(Entries)}]})). - --spec unpack_entries([{mtl(), binary()}]) -> list(). -unpack_entries([]) -> - []; -unpack_entries([H|T]) -> - {MTL, Extra} = H, - LeafInput = base64:encode(plop:serialise(MTL)), - ExtraData = base64:encode(Extra), - [{[{leaf_input, LeafInput}, {extra_data, ExtraData}]} | unpack_entries(T)]. - html(Text, Input) -> io_lib:format( "Content-Type: text/html\r\n\r\n" ++ @@ -191,7 +140,7 @@ html(Text, Input) -> "</body></html>~n", [Text, Input]). niy(S) -> - mod_esi:deliver(S, html("NIY - Not Yet Implemented|", [])). + mod_esi:deliver(S, html("NIY - Not Implemented Yet|", [])). -spec deliver(any(), string()) -> ok | {error, _Reason}. deliver(Session, Data) -> |