From ba2547e910703ce71a4e8feba983734bc25982e3 Mon Sep 17 00:00:00 2001 From: Magnus Ahltorp Date: Thu, 26 Feb 2015 11:45:36 +0100 Subject: Added code for reading private and public EC keys separately --- src/sign.erl | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'src/sign.erl') diff --git a/src/sign.erl b/src/sign.erl index 1239023..eae76e7 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_keyfile_ec/1]). %% API for tests. -export([read_keyfile_rsa/2, read_keyfiles_ec/2]). %% gen_server callbacks. @@ -52,6 +53,23 @@ read_keyfile_rsa(Filename, Passphrase) -> Privatekey = decode_key(KeyPem, Passphrase), {Privatekey, public_key(Privatekey)}. +read_keyfile_ec(KeyFile) -> + lager:debug("reading file ~p", [KeyFile]), + {ok, PemBin} = file:read_file(KeyFile), + [KeyPem] = public_key:pem_decode(PemBin), + decode_key(KeyPem). + +pem_entry_decode({'SubjectPublicKeyInfo', Der, _}) -> + SPKI = public_key:der_decode('SubjectPublicKeyInfo', Der), + #'SubjectPublicKeyInfo'{subjectPublicKey = {_, Octets}, + algorithm = Algorithm} = SPKI, + #'AlgorithmIdentifier'{parameters = ECParams} = Algorithm, + Params = public_key:der_decode('EcpkParameters', ECParams), + Point = #'ECPoint'{point = Octets}, + {Point, Params}; +pem_entry_decode(Entry) -> + public_key:pem_entry_decode(Entry). + %% @doc Read two PEM files, one with a private EC key and one with the %% corresponding public EC key. read_keyfiles_ec(PrivkeyFile, Pubkeyfile) -> @@ -92,7 +110,7 @@ signhash_ec(Data, PrivKey) -> public_key:sign(Data, sha256, PrivKey). decode_key(Entry) -> - public_key:pem_entry_decode(Entry). + pem_entry_decode(Entry). decode_key(Entry, Passphrase) -> public_key:pem_entry_decode(Entry, Passphrase). -- cgit v1.1