YACA: Add RC2 effective key bits tests. 83/85083/5
authorDariusz Michaluk <d.michaluk@samsung.com>
Tue, 23 Aug 2016 07:32:12 +0000 (09:32 +0200)
committerKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Mon, 29 Aug 2016 14:55:57 +0000 (07:55 -0700)
Change-Id: I6993b88a4784df9f5529ac6c4ea8a571611e4d50

src/yaca/test-vectors/encrypt_output_comparison_rc2_cast5_nopad.txt
src/yaca/yaca-test-encrypt.cpp

index 6549f00..ae5ae00 100644 (file)
@@ -3,11 +3,75 @@
 input=0000000000000000
 algo=RC2
 bcm=ECB
+key=0000000000000000
+effective_key_bits=63
+iv=
+repeats=1
+output=ebb773f993278eff
+
+input=ffffffffffffffff
+algo=RC2
+bcm=ECB
+key=ffffffffffffffff
+effective_key_bits=64
+iv=
+repeats=1
+output=278b27e42e2f0d49
+
+input=1000000000000001
+algo=RC2
+bcm=ECB
+key=3000000000000000
+effective_key_bits=64
+iv=
+repeats=1
+output=30649edf9be7d2c2
+
+input=0000000000000000
+algo=RC2
+bcm=ECB
+key=88
+effective_key_bits=64
+iv=
+repeats=1
+output=61a8a244adacccf0
+
+input=0000000000000000
+algo=RC2
+bcm=ECB
+key=88bca90e90875a
+effective_key_bits=64
+iv=
+repeats=1
+output=6ccf4308974c267f
+
+input=0000000000000000
+algo=RC2
+bcm=ECB
+key=88bca90e90875a7f0f79c384627bafb2
+effective_key_bits=64
+iv=
+repeats=1
+output=1a807d272bbe5db1
+
+input=0000000000000000
+algo=RC2
+bcm=ECB
 key=88bca90e90875a7f0f79c384627bafb2
+effective_key_bits=128
 iv=
 repeats=1
 output=2269552ab0f85ca6
 
+input=0000000000000000
+algo=RC2
+bcm=ECB
+key=88bca90e90875a7f0f79c384627bafb216f80a6f85920584c42fceb0be255daf1e
+effective_key_bits=129
+iv=
+repeats=1
+output=5b78d3a43dfff1f1
+
 ################## cast5-ecb ##################
 
 input=0123456789abcdef
index 123837c..7900bd5 100644 (file)
@@ -60,12 +60,15 @@ public:
               yaca_block_cipher_mode_e bcm,
               const KeyPtr& key_ptr,
               const KeyPtr& iv_ptr,
+              size_t key_bits = 0,
               bool padded = true) :
         m_enCtxPtr(encrypt_init(algo, bcm, key_ptr, iv_ptr)),
         m_decCtxPtr(decrypt_init(algo, bcm, key_ptr, iv_ptr))
     {
         if (!padded)
             set_padding(YACA_PADDING_NONE);
+        if (key_bits > 0)
+            set_effective_key_bits(key_bits);
     }
 
     virtual Buffer encrypt(const Buffer& data, size_t repeats = 1)
@@ -92,6 +95,13 @@ public:
                                                (char*)(&padding), sizeof(padding)));
     }
 
+    void set_effective_key_bits(size_t key_bits)
+    {
+        YACA_SUCCESS(yaca_context_set_property(m_enCtxPtr.get(), YACA_PROPERTY_RC2_EFFECTIVE_KEY_BITS,
+                                               (char*)(&key_bits), sizeof(key_bits)));
+        YACA_SUCCESS(yaca_context_set_property(m_decCtxPtr.get(), YACA_PROPERTY_RC2_EFFECTIVE_KEY_BITS,
+                                               (char*)(&key_bits), sizeof(key_bits)));
+    }
 private:
     CtxPtr m_enCtxPtr;
     CtxPtr m_decCtxPtr;
@@ -179,6 +189,7 @@ void check_test_vector_output(const Buffer &input,
                               yaca_encrypt_algorithm_e algo,
                               yaca_block_cipher_mode_e bcm,
                               const Buffer &key,
+                              size_t key_bits,
                               const Buffer &iv,
                               size_t repeats,
                               const Buffer &expected,
@@ -188,7 +199,7 @@ void check_test_vector_output(const Buffer &input,
     auto iv_ptr = (iv.size() > 0) ? import_key(YACA_KEY_TYPE_IV, nullptr, iv.data(), iv.size())
                                   : null_key();
 
-    Encryptor encryptor(algo, bcm, key_ptr, iv_ptr, padded);
+    Encryptor encryptor(algo, bcm, key_ptr, iv_ptr, key_bits, padded);
     Buffer output_vector = encryptor.encrypt(input, repeats);
 
     auto keyHex = bin2hex(key);
@@ -216,6 +227,7 @@ void test_encryption_output(std::string filename, bool padded=true)
         yaca_encrypt_algorithm_e algo;
         yaca_block_cipher_mode_e bcm;
         Buffer key;
+        size_t key_bits = 0;
         Buffer iv;
         size_t repeats;
         Buffer expected;
@@ -224,11 +236,13 @@ void test_encryption_output(std::string filename, bool padded=true)
         tv.get("algo", algo);
         tv.get("bcm", bcm);
         tv.get("key", key);
+        if (algo == YACA_ENCRYPT_UNSAFE_RC2)
+            tv.get("effective_key_bits", key_bits);
         tv.get("iv", iv);
         tv.get("repeats", repeats);
         tv.get("output", expected);
 
-        check_test_vector_output(input, algo, bcm, key, iv, repeats, expected, padded);
+        check_test_vector_output(input, algo, bcm, key, key_bits, iv, repeats, expected, padded);
     }
 }