summaryrefslogtreecommitdiff
path: root/src/sign.erl
diff options
context:
space:
mode:
authorMagnus Ahltorp <map@kth.se>2015-02-26 11:45:36 +0100
committerMagnus Ahltorp <map@kth.se>2015-02-26 11:45:36 +0100
commit30bee644efd95c4c4cdfd5ab2175e09e3215fcae (patch)
tree371b30ddf1ab9ac17629b09a6aeeb3b19fdf7cc0 /src/sign.erl
parent7f09020956447b561eacbbb1926fa7d61b510180 (diff)
Added code for reading private and public EC keys separately
Diffstat (limited to 'src/sign.erl')
-rw-r--r--src/sign.erl23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/sign.erl b/src/sign.erl
index 1239023..5a2d478 100644
--- a/src/sign.erl
+++ b/src/sign.erl
@@ -9,6 +9,7 @@
%% API.
-export([start_link/2, stop/0]).
-export([sign/1, get_pubkey/0, get_logid/0]).
+-export([read_private_keyfile_ec/1, read_public_keyfile_ec/2]).
%% API for tests.
-export([read_keyfile_rsa/2, read_keyfiles_ec/2]).
%% gen_server callbacks.
@@ -52,6 +53,28 @@ read_keyfile_rsa(Filename, Passphrase) ->
Privatekey = decode_key(KeyPem, Passphrase),
{Privatekey, public_key(Privatekey)}.
+read_private_keyfile_ec(PrivkeyFile) ->
+ lager:debug("reading file ~p", [PrivkeyFile]),
+ {ok, PemBinPriv} = file:read_file(PrivkeyFile),
+ [PrivkeyPem] = public_key:pem_decode(PemBinPriv),
+ decode_key(PrivkeyPem).
+
+read_public_keyfile_ec(Paramsfile, Pubkeyfile) ->
+ {ok, PemBinPub} = file:read_file(Pubkeyfile),
+ [SPKIPem] = public_key:pem_decode(PemBinPub),
+ %% SPKI is missing #'AlgorithmIdentifier' so pem_entry_decode won't do.
+ %% Publickey = public_key:pem_entry_decode(SPKIPem),
+ {_, AlgoDer, _} = SPKIPem,
+ SPKI = public_key:der_decode('SubjectPublicKeyInfo', AlgoDer),
+ #'SubjectPublicKeyInfo'{subjectPublicKey = {_, Octets}} = SPKI,
+ #'SubjectPublicKeyInfo'{algorithm = Algorithm} = SPKI,
+ #'AlgorithmIdentifier'{parameters = ECParams} = Algorithm,
+ Params = public_key:der_decode('EcpkParameters', ECParams),
+ Point = #'ECPoint'{point = Octets},
+ Publickey = {Point, Params},
+
+ Publickey.
+
%% @doc Read two PEM files, one with a private EC key and one with the
%% corresponding public EC key.
read_keyfiles_ec(PrivkeyFile, Pubkeyfile) ->