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)
(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;
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,
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);
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;
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);
}
}