diff options
author | Hans Nilsson <[email protected]> | 2017-11-10 12:24:46 +0100 |
---|---|---|
committer | Hans Nilsson <[email protected]> | 2017-11-10 12:24:46 +0100 |
commit | 30147b18b7837034adb94bd2ee2eda3ae2a177bf (patch) | |
tree | 8da0b26eb4c565fabb3e2a7dfea22ef304d16332 /lib/crypto/src/crypto.erl | |
parent | 216872073815bfcfc0d3d18c51ae8291967c07dd (diff) | |
parent | 1d0bd5f30cfd95d0977061618a5e483a8606deca (diff) | |
download | otp-30147b18b7837034adb94bd2ee2eda3ae2a177bf.tar.gz otp-30147b18b7837034adb94bd2ee2eda3ae2a177bf.tar.bz2 otp-30147b18b7837034adb94bd2ee2eda3ae2a177bf.zip |
Merge branch 'maint'
Diffstat (limited to 'lib/crypto/src/crypto.erl')
-rw-r--r-- | lib/crypto/src/crypto.erl | 38 |
1 files changed, 32 insertions, 6 deletions
diff --git a/lib/crypto/src/crypto.erl b/lib/crypto/src/crypto.erl index b95480e6a9..3e18756cf9 100644 --- a/lib/crypto/src/crypto.erl +++ b/lib/crypto/src/crypto.erl @@ -54,6 +54,11 @@ engine_list/0 ]). +-export_type([engine_ref/0, + key_id/0, + password/0 + ]). + %% Private. For tests. -export([packed_openssl_version/4, engine_methods_convert_to_bitmask/2, get_test_engine/0]). @@ -468,13 +473,24 @@ sign(Algorithm, Type, Data, Key, Options) -> end. + +-type key_id() :: string() | binary() . +-type password() :: string() | binary() . + +-type engine_key_ref() :: #{engine := engine_ref(), + key_id := key_id(), + password => password(), + term() => term() + }. + -type pk_algs() :: rsa | ecdsa | dss . --type pk_opt() :: list() | rsa_padding() . +-type pk_key() :: engine_key_ref() | [integer() | binary()] . +-type pk_opt() :: list() | rsa_padding() . --spec public_encrypt(pk_algs(), binary(), [binary()], pk_opt()) -> binary(). --spec public_decrypt(pk_algs(), binary(), [integer() | binary()], pk_opt()) -> binary(). --spec private_encrypt(pk_algs(), binary(), [integer() | binary()], pk_opt()) -> binary(). --spec private_decrypt(pk_algs(), binary(), [integer() | binary()], pk_opt()) -> binary(). +-spec public_encrypt(pk_algs(), binary(), pk_key(), pk_opt()) -> binary(). +-spec public_decrypt(pk_algs(), binary(), pk_key(), pk_opt()) -> binary(). +-spec private_encrypt(pk_algs(), binary(), pk_key(), pk_opt()) -> binary(). +-spec private_decrypt(pk_algs(), binary(), pk_key(), pk_opt()) -> binary(). public_encrypt(Algorithm, In, Key, Options) when is_list(Options) -> case pkey_crypt_nif(Algorithm, In, format_pkey(Algorithm, Key), Options, false, true) of @@ -627,6 +643,8 @@ compute_key(ecdh, Others, My, Curve) -> engine_method_pkey_meths | engine_method_pkey_asn1_meths | engine_method_ec. +-type engine_ref() :: term(). + -spec engine_get_all_methods() -> [engine_method_type()]. engine_get_all_methods() -> @@ -638,7 +656,7 @@ engine_get_all_methods() -> -spec engine_load(EngineId::unicode:chardata(), PreCmds::[{unicode:chardata(), unicode:chardata()}], PostCmds::[{unicode:chardata(), unicode:chardata()}]) -> - {ok, Engine::term()} | {error, Reason::term()}. + {ok, Engine::engine_ref()} | {error, Reason::term()}. engine_load(EngineId, PreCmds, PostCmds) when is_list(PreCmds), is_list(PostCmds) -> engine_load(EngineId, PreCmds, PostCmds, engine_get_all_methods()). @@ -1146,6 +1164,11 @@ ensure_int_as_bin(Int) when is_integer(Int) -> ensure_int_as_bin(Bin) -> Bin. +format_pkey(_Alg, #{engine:=_, key_id:=T}=M) when is_binary(T) -> format_pwd(M); +format_pkey(_Alg, #{engine:=_, key_id:=T}=M) when is_list(T) -> format_pwd(M#{key_id:=list_to_binary(T)}); +format_pkey(_Alg, #{engine:=_ }=M) -> error({bad_key_id, M}); +format_pkey(_Alg, #{}=M) -> error({bad_engine_map, M}); +%%% format_pkey(rsa, Key) -> map_ensure_int_as_bin(Key); format_pkey(ecdsa, [Key, Curve]) -> @@ -1155,6 +1178,9 @@ format_pkey(dss, Key) -> format_pkey(_, Key) -> Key. +format_pwd(#{password := Pwd}=M) when is_list(Pwd) -> M#{password := list_to_binary(Pwd)}; +format_pwd(M) -> M. + %%-------------------------------------------------------------------- %% -type rsa_padding() :: 'rsa_pkcs1_padding' | 'rsa_pkcs1_oaep_padding' | 'rsa_no_padding'. |