forked from wolfSSL/wolfssl
check Rc2EcbEncrypt/Decrypt returns during CBC ops
This commit is contained in:
@@ -282,6 +282,7 @@ int wc_Rc2EcbDecrypt(Rc2* rc2, byte* out, const byte* in, word32 sz)
|
|||||||
|
|
||||||
int wc_Rc2CbcEncrypt(Rc2* rc2, byte* out, const byte* in, word32 sz)
|
int wc_Rc2CbcEncrypt(Rc2* rc2, byte* out, const byte* in, word32 sz)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
word32 blocks = (sz / RC2_BLOCK_SIZE);
|
word32 blocks = (sz / RC2_BLOCK_SIZE);
|
||||||
|
|
||||||
if (rc2 == NULL || out == NULL || in == NULL) {
|
if (rc2 == NULL || out == NULL || in == NULL) {
|
||||||
@@ -294,7 +295,11 @@ int wc_Rc2CbcEncrypt(Rc2* rc2, byte* out, const byte* in, word32 sz)
|
|||||||
|
|
||||||
while (blocks--) {
|
while (blocks--) {
|
||||||
xorbuf((byte*)rc2->reg, in, RC2_BLOCK_SIZE);
|
xorbuf((byte*)rc2->reg, in, RC2_BLOCK_SIZE);
|
||||||
wc_Rc2EcbEncrypt(rc2, (byte*)rc2->reg, (byte*)rc2->reg, RC2_BLOCK_SIZE);
|
ret = wc_Rc2EcbEncrypt(rc2, (byte*)rc2->reg, (byte*)rc2->reg,
|
||||||
|
RC2_BLOCK_SIZE);
|
||||||
|
if (ret != 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
XMEMCPY(out, rc2->reg, RC2_BLOCK_SIZE);
|
XMEMCPY(out, rc2->reg, RC2_BLOCK_SIZE);
|
||||||
|
|
||||||
out += RC2_BLOCK_SIZE;
|
out += RC2_BLOCK_SIZE;
|
||||||
@@ -306,6 +311,7 @@ int wc_Rc2CbcEncrypt(Rc2* rc2, byte* out, const byte* in, word32 sz)
|
|||||||
|
|
||||||
int wc_Rc2CbcDecrypt(Rc2* rc2, byte* out, const byte* in, word32 sz)
|
int wc_Rc2CbcDecrypt(Rc2* rc2, byte* out, const byte* in, word32 sz)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
word32 blocks = (sz / RC2_BLOCK_SIZE);
|
word32 blocks = (sz / RC2_BLOCK_SIZE);
|
||||||
|
|
||||||
if (rc2 == NULL || out == NULL || in == NULL) {
|
if (rc2 == NULL || out == NULL || in == NULL) {
|
||||||
@@ -318,7 +324,10 @@ int wc_Rc2CbcDecrypt(Rc2* rc2, byte* out, const byte* in, word32 sz)
|
|||||||
|
|
||||||
while (blocks--) {
|
while (blocks--) {
|
||||||
XMEMCPY(rc2->tmp, in, RC2_BLOCK_SIZE);
|
XMEMCPY(rc2->tmp, in, RC2_BLOCK_SIZE);
|
||||||
wc_Rc2EcbDecrypt(rc2, out, (byte*)rc2->tmp, RC2_BLOCK_SIZE);
|
ret = wc_Rc2EcbDecrypt(rc2, out, (byte*)rc2->tmp, RC2_BLOCK_SIZE);
|
||||||
|
if (ret != 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
xorbuf(out, (byte*)rc2->reg, RC2_BLOCK_SIZE);
|
xorbuf(out, (byte*)rc2->reg, RC2_BLOCK_SIZE);
|
||||||
/* store iv for next call */
|
/* store iv for next call */
|
||||||
XMEMCPY(rc2->reg, rc2->tmp, RC2_BLOCK_SIZE);
|
XMEMCPY(rc2->reg, rc2->tmp, RC2_BLOCK_SIZE);
|
||||||
|
Reference in New Issue
Block a user