mirror of
https://github.com/QuasarApp/qca.git
synced 2025-05-13 19:19:33 +00:00
variable keysizes
svn path=/trunk/kdesupport/qca/; revision=238691
This commit is contained in:
parent
285a9e46ac
commit
273c717362
@ -209,7 +209,7 @@ public:
|
||||
return true;
|
||||
}
|
||||
|
||||
bool setup(int _dir, int mode, const char *key, const char *iv, bool _pad)
|
||||
bool setup(int _dir, int mode, const char *key, int keysize, const char *iv, bool _pad)
|
||||
{
|
||||
dir = _dir;
|
||||
pad = _pad;
|
||||
@ -218,11 +218,19 @@ public:
|
||||
EVP_CIPHER_CTX_init(&c);
|
||||
|
||||
if(dir == QCA::Encrypt) {
|
||||
if(!EVP_EncryptInit(&c, type, (unsigned char *)key, (unsigned char *)iv))
|
||||
if(!EVP_EncryptInit(&c, type, NULL, NULL))
|
||||
return false;
|
||||
if(keysize != type->key_len)
|
||||
EVP_CIPHER_CTX_set_key_length(&c, keysize);
|
||||
if(!EVP_EncryptInit(&c, NULL, (unsigned char *)key, (unsigned char *)iv))
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
if(!EVP_DecryptInit(&c, type, (unsigned char *)key, (unsigned char *)iv))
|
||||
if(!EVP_DecryptInit(&c, type, NULL, NULL))
|
||||
return false;
|
||||
if(keysize != type->key_len)
|
||||
EVP_CIPHER_CTX_set_key_length(&c, keysize);
|
||||
if(!EVP_DecryptInit(&c, NULL, (unsigned char *)key, (unsigned char *)iv))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
@ -266,16 +266,12 @@ QByteArray Cipher::dyn_generateIV() const
|
||||
void Cipher::reset(int dir, int mode, const QByteArray &key, const QByteArray &iv, bool pad)
|
||||
{
|
||||
d->reset();
|
||||
if((int)key.size() != d->c->keySize())
|
||||
return;
|
||||
if(!iv.isEmpty() && (int)iv.size() != d->c->blockSize())
|
||||
return;
|
||||
|
||||
d->dir = dir;
|
||||
d->mode = mode;
|
||||
d->key = key.copy();
|
||||
d->iv = iv.copy();
|
||||
if(!d->c->setup(d->dir, d->mode, d->key.data(), d->iv.isEmpty() ? 0 : d->iv.data(), pad)) {
|
||||
if(!d->c->setup(d->dir, d->mode, d->key.isEmpty() ? 0: d->key.data(), d->key.size(), d->iv.isEmpty() ? 0 : d->iv.data(), pad)) {
|
||||
d->err = true;
|
||||
return;
|
||||
}
|
||||
|
@ -44,7 +44,7 @@ public:
|
||||
virtual bool generateKey(char *out)=0;
|
||||
virtual bool generateIV(char *out)=0;
|
||||
|
||||
virtual bool setup(int dir, int mode, const char *key, const char *iv, bool pad)=0;
|
||||
virtual bool setup(int dir, int mode, const char *key, int keysize, const char *iv, bool pad)=0;
|
||||
virtual bool update(const char *in, unsigned int len)=0;
|
||||
virtual bool final(char **out, unsigned int *outlen)=0;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user