diff options
author | Magnus Ahltorp <map@kth.se> | 2015-02-26 11:45:36 +0100 |
---|---|---|
committer | Magnus Ahltorp <map@kth.se> | 2015-02-26 11:45:36 +0100 |
commit | 30bee644efd95c4c4cdfd5ab2175e09e3215fcae (patch) | |
tree | 371b30ddf1ab9ac17629b09a6aeeb3b19fdf7cc0 /src/sign.erl | |
parent | 7f09020956447b561eacbbb1926fa7d61b510180 (diff) |
Added code for reading private and public EC keys separately
Diffstat (limited to 'src/sign.erl')
-rw-r--r-- | src/sign.erl | 23 |
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) -> |