| 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)); |