summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Nilsson <hans@erlang.org>2019-11-21 12:51:41 +0100
committerHans Nilsson <hans@erlang.org>2019-11-21 15:25:11 +0100
commit0c893dec80003245be9ed488477aec9aee904836 (patch)
tree11407c2cb3c350a108b3fb8d9416e034bccf08e6
parent4d105778fefc48e132248890b80e6eac999798eb (diff)
downloaderlang-0c893dec80003245be9ed488477aec9aee904836.tar.gz
crypto: New common libfile for property tests in crypto
-rw-r--r--lib/crypto/test/property_test/crypto_ng_api.erl31
-rw-r--r--lib/crypto/test/property_test/crypto_prop_generators.erl93
-rw-r--r--lib/crypto/test/property_test/crypto_prop_generators.hrl36
3 files changed, 130 insertions, 30 deletions
diff --git a/lib/crypto/test/property_test/crypto_ng_api.erl b/lib/crypto/test/property_test/crypto_ng_api.erl
index 85e48d231e..0319811b07 100644
--- a/lib/crypto/test/property_test/crypto_ng_api.erl
+++ b/lib/crypto/test/property_test/crypto_ng_api.erl
@@ -53,6 +53,7 @@
-endif.
-endif.
+-include("crypto_prop_generators.hrl").
%%% Properties:
@@ -66,23 +67,6 @@ prop__crypto_one_time() ->
)
).
-%%% Generators
-text_plain() -> iolist().
-
-cipher() -> oneof( non_aead_ciphers() -- [aes_ige256] ).
-
-key(Cipher) ->
- %% Can't be shrinked
- crypto:strong_rand_bytes( key_length(Cipher) ).
-
-iv(Cipher) ->
- %% Can't be shrinked
- crypto:strong_rand_bytes( iv_length(Cipher) ).
-
-iolist() -> oneof([list( oneof([list(byte()), binary(), list(binary())])),
- binary(1056)
- ]).
-
%%% Lib
equal(_, T, T) -> true;
@@ -94,14 +78,6 @@ equal(F, Tp, Td) ->
false.
-non_aead_ciphers() ->
- [C || C <- crypto:supports(ciphers),
- C =/= chacha20_poly1305,
- begin
- #{mode := Mode} = crypto:cipher_info(C),
- not lists:member(Mode, [ccm_mode, gcm_mode])
- end].
-
decrypt_encrypt_one_time(Cipher, Key, IV, TextPlain) ->
TextCrypto = crypto:crypto_one_time(Cipher, Key, IV, TextPlain, true),
crypto:crypto_one_time(Cipher, Key, IV, TextCrypto, false).
@@ -114,8 +90,3 @@ full_blocks(TextPlain, Cipher) ->
num_rest_bytes(Bin, Cipher) -> size(Bin) rem block_size(Cipher).
-block_size(Cipher) -> maps:get(block_size, crypto:cipher_info(Cipher)).
-
-key_length(Cipher) -> maps:get(key_length, crypto:cipher_info(Cipher)).
-
-iv_length(Cipher) -> maps:get(iv_length, crypto:cipher_info(Cipher)).
diff --git a/lib/crypto/test/property_test/crypto_prop_generators.erl b/lib/crypto/test/property_test/crypto_prop_generators.erl
new file mode 100644
index 0000000000..5a53a000f0
--- /dev/null
+++ b/lib/crypto/test/property_test/crypto_prop_generators.erl
@@ -0,0 +1,93 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2004-2017. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+%%
+
+-module(crypto_prop_generators).
+
+-compile(export_all).
+
+-proptest(eqc).
+-proptest([triq,proper]).
+
+-ifndef(EQC).
+-ifndef(PROPER).
+-ifndef(TRIQ).
+%%-define(EQC,true).
+-define(PROPER,true).
+%%-define(TRIQ,true).
+-endif.
+-endif.
+-endif.
+
+-ifdef(EQC).
+-include_lib("eqc/include/eqc.hrl").
+-define(MOD_eqc,eqc).
+
+-else.
+-ifdef(PROPER).
+-include_lib("proper/include/proper.hrl").
+-define(MOD_eqc,proper).
+-else.
+-ifdef(TRIQ).
+-define(MOD_eqc,triq).
+-include_lib("triq/include/triq.hrl").
+
+-endif.
+-endif.
+-endif.
+
+%%%================================================================
+%%% Generators
+
+text_plain() -> iolist().
+
+cipher() -> oneof( non_aead_ciphers() -- [aes_ige256] ).
+
+key(Cipher) ->
+ %% Can't be shrinked
+ crypto:strong_rand_bytes( key_length(Cipher) ).
+
+iv(Cipher) ->
+ %% Can't be shrinked
+ crypto:strong_rand_bytes( iv_length(Cipher) ).
+
+iolist() -> frequency([{5, list( oneof([list(byte()),
+ binary(),
+ list(binary())]))},
+ {1, mybinary(50000)}
+ ]).
+
+mybinary(MaxSize) -> ?LET(Sz, integer(0,MaxSize), binary(Sz)).
+
+
+%%%================================================================
+non_aead_ciphers() ->
+ [C || C <- crypto:supports(ciphers),
+ C =/= chacha20_poly1305,
+ begin
+ #{mode := Mode} = crypto:cipher_info(C),
+ not lists:member(Mode, [ccm_mode, gcm_mode])
+ end].
+
+block_size(Cipher) -> maps:get(block_size, crypto:cipher_info(Cipher)).
+
+key_length(Cipher) -> maps:get(key_length, crypto:cipher_info(Cipher)).
+
+iv_length(Cipher) -> maps:get(iv_length, crypto:cipher_info(Cipher)).
diff --git a/lib/crypto/test/property_test/crypto_prop_generators.hrl b/lib/crypto/test/property_test/crypto_prop_generators.hrl
new file mode 100644
index 0000000000..56a762e651
--- /dev/null
+++ b/lib/crypto/test/property_test/crypto_prop_generators.hrl
@@ -0,0 +1,36 @@
+%%%
+%%% %CopyrightBegin%
+%%%
+%%% Copyright Ericsson AB 2004-2017. All Rights Reserved.
+%%%
+%%% Licensed under the Apache License, Version 2.0 (the "License");
+%%% you may not use this file except in compliance with the License.
+%%% You may obtain a copy of the License at
+%%%
+%%% http://www.apache.org/licenses/LICENSE-2.0
+%%%
+%%% Unless required by applicable law or agreed to in writing, software
+%%% distributed under the License is distributed on an "AS IS" BASIS,
+%%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%%% See the License for the specific language governing permissions and
+%%% limitations under the License.
+%%%
+%%% %CopyrightEnd%
+%%%
+%%%
+
+
+-import(crypto_prop_generators,
+ [
+ text_plain/0,
+ cipher/0,
+ key/1,
+ iv/1,
+ iolist/0,
+ mybinary/1,
+
+ non_aead_ciphers/0,
+ block_size/1,
+ key_length/1,
+ iv_length/1
+ ]).