| line | true | false | branch | 
 
| 12 | 0 | 144 | if (!RETVAL) croak("FATAL: Newz failed"); | 
 
| 18 | 0 | 144 | if (RETVAL->cipher_id == -1) { | 
 
| 43 | 0 | 339 | if (!SvPOK(key))   croak("FATAL: key must be string/buffer scalar"); | 
 
| 44 | 339 | 0 | k = (unsigned char *) SvPVbyte(key, k_len); | 
 
| 46 | 0 | 339 | if (!SvPOK(iv))    croak("FATAL: iv must be string/buffer scalar"); | 
 
| 47 | 339 | 0 | i = (unsigned char *) SvPVbyte(iv, i_len); | 
 
| 48 | 0 | 339 | if (i_len != (STRLEN)cipher_descriptor[self->cipher_id].block_length) { | 
 
| 52 | 0 | 339 | if (rv != CRYPT_OK) { | 
 
| 56 | 153 | 186 | self->direction = ix == 1 ? 1 : -1; | 
 
| 58 | 0 | 339 | XPUSHs(ST(0)); /* return self */ | 
 
| 71 | 3505 | 3505 | for (j = 1; j < items; j++) { | 
 
| 72 | 141 | 3364 | in_data = (unsigned char *)SvPVbyte(ST(j), in_data_len); | 
 
| 76 | 3505 | 0 | if (in_data_len > 0) { | 
 
| 77 | 1681 | 1824 | if (self->direction == 1) { | 
 
| 79 | 1360 | 321 | if (self->padlen > 0) { | 
 
| 81 | 585 | 775 | if (in_data_len >= i) { /* enough data to fill pad */ | 
 
| 86 | 0 | 585 | if (rv != CRYPT_OK) { | 
 
| 101 | 758 | 923 | if (in_data_len > 0 && i > 0) { /* save tail of data into pad */ | 
 
|  | 671 | 87 | if (in_data_len > 0 && i > 0) { /* save tail of data into pad */ | 
 
| 107 | 246 | 1435 | if (in_data_len > 0) { | 
 
| 108 | 96 | 150 | i = (unsigned long)(has_tmp_block ? in_data_len + blen : in_data_len); | 
 
| 109 | 246 | 0 | out_data = (unsigned char*)SvGROW(RETVAL, out_len + i + 1) + out_len; | 
 
|  | 246 | 0 | out_data = (unsigned char*)SvGROW(RETVAL, out_len + i + 1) + out_len; | 
 
| 111 | 96 | 150 | if (has_tmp_block) { | 
 
| 116 | 0 | 246 | if (rv != CRYPT_OK) { | 
 
| 121 | 489 | 946 | else if (has_tmp_block) { | 
 
| 122 | 489 | 0 | out_data = (unsigned char*)SvGROW(RETVAL, out_len + blen + 1) + out_len; | 
 
|  | 489 | 0 | out_data = (unsigned char*)SvGROW(RETVAL, out_len + blen + 1) + out_len; | 
 
| 127 | 1824 | 0 | else if (self->direction == -1) { | 
 
| 128 | 116 | 1708 | if (self->padlen == blen) { | 
 
| 130 | 0 | 116 | if (rv != CRYPT_OK) { | 
 
| 137 | 1470 | 238 | else if (self->padlen > 0) { | 
 
| 139 | 633 | 837 | if (in_data_len >= i) { /* enough data to fill pad */ | 
 
| 144 | 196 | 437 | if (in_data_len>0 || self->padding_mode == 0) { | 
 
|  | 64 | 132 | if (in_data_len>0 || self->padding_mode == 0) { | 
 
| 146 | 0 | 501 | if (rv != CRYPT_OK) { | 
 
| 162 | 791 | 1033 | if (in_data_len>0) { | 
 
| 164 | 633 | 158 | if (i>0) { /* save tail of data into pad */ | 
 
| 171 | 297 | 1527 | if (in_data_len>0) { | 
 
| 172 | 158 | 139 | if (self->padlen == 0 && self->padding_mode !=0) { | 
 
|  | 107 | 51 | if (self->padlen == 0 && self->padding_mode !=0) { | 
 
| 178 | 142 | 155 | i = (unsigned long)(has_tmp_block ? in_data_len + blen : in_data_len); | 
 
| 179 | 295 | 2 | if (i > 0) { | 
 
| 180 | 295 | 0 | out_data = (unsigned char*)SvGROW(RETVAL, out_len + i + 1) + out_len; | 
 
|  | 295 | 0 | out_data = (unsigned char*)SvGROW(RETVAL, out_len + i + 1) + out_len; | 
 
| 182 | 142 | 153 | if (has_tmp_block) { | 
 
| 187 | 0 | 295 | if (rv != CRYPT_OK) { | 
 
| 193 | 475 | 1052 | else if (has_tmp_block) { | 
 
| 194 | 475 | 0 | out_data = (unsigned char*)SvGROW(RETVAL, out_len + blen + 1) + out_len; | 
 
|  | 475 | 0 | out_data = (unsigned char*)SvGROW(RETVAL, out_len + blen + 1) + out_len; | 
 
| 205 | 1505 | 2000 | if (out_len > 0) SvCUR_set(RETVAL, out_len); | 
 
| 219 | 153 | 186 | if (self->direction == 1) { | 
 
| 220 | 153 | 0 | if (self->padlen < 0 || self->padlen >= (int)blen) croak("FATAL: invalid padlen"); | 
 
|  | 0 | 153 | if (self->padlen < 0 || self->padlen >= (int)blen) croak("FATAL: invalid padlen"); | 
 
| 221 | 90 | 63 | if (self->padding_mode != 0) { | 
 
| 222 | 45 | 45 | if      (self->padding_mode == 1) { padmode = LTC_PAD_PKCS7        | (&self->state)->blocklen; } | 
 
| 223 | 45 | 0 | else if (self->padding_mode == 2) { padmode = LTC_PAD_ONE_AND_ZERO | (&self->state)->blocklen; } | 
 
| 224 | 0 | 0 | else if (self->padding_mode == 3) { padmode = LTC_PAD_ANSI_X923    | (&self->state)->blocklen; } | 
 
| 225 | 0 | 0 | else if (self->padding_mode == 4) { padmode = LTC_PAD_ZERO         | (&self->state)->blocklen; } | 
 
| 226 | 0 | 0 | else if (self->padding_mode == 5) { padmode = LTC_PAD_ZERO_ALWAYS  | (&self->state)->blocklen; } | 
 
| 230 | 0 | 90 | if (rv != CRYPT_OK) croak("FATAL: padding_pad failed: %s", error_to_string(rv)); | 
 
| 232 | 0 | 90 | if (rv != CRYPT_OK) croak("FATAL: cbc_encrypt failed: %s", error_to_string(rv)); | 
 
| 235 | 0 | 63 | if (self->padlen > 0) croak("FATAL: cbc_encrypt, input data length not multiple of %d", (int)blen); | 
 
| 239 | 186 | 0 | else if (self->direction == -1) { | 
 
| 240 | 123 | 63 | if (self->padlen > 0) { | 
 
| 241 | 0 | 123 | if (self->padlen != (int)blen) croak("FATAL: cipher text length has to be multiple of %d (%d)", (int)blen, self->padlen); | 
 
| 243 | 0 | 123 | if (rv != CRYPT_OK) croak("FATAL: cbc_decrypt failed: %s", error_to_string(rv)); | 
 
| 244 | 123 | 0 | if (self->padding_mode != 0) { | 
 
| 245 | 78 | 45 | if      (self->padding_mode == 1) { padmode = LTC_PAD_PKCS7        | (&self->state)->blocklen; } | 
 
| 246 | 45 | 0 | else if (self->padding_mode == 2) { padmode = LTC_PAD_ONE_AND_ZERO | (&self->state)->blocklen; } | 
 
| 247 | 0 | 0 | else if (self->padding_mode == 3) { padmode = LTC_PAD_ANSI_X923    | (&self->state)->blocklen; } | 
 
| 248 | 0 | 0 | else if (self->padding_mode == 4) { padmode = LTC_PAD_ZERO         | (&self->state)->blocklen; } | 
 
| 249 | 0 | 0 | else if (self->padding_mode == 5) { padmode = LTC_PAD_ZERO_ALWAYS  | (&self->state)->blocklen; } | 
 
| 252 | 0 | 123 | if (rv != CRYPT_OK) croak("FATAL: padding_depad failed: %s", error_to_string(rv)); |