Dmitry Eremin-Solenikov dbaryshkov@gmail.com writes:
Add support for CFB and CFB8 modes support. CFB uses segment size = block size, CFB8 uses 8-bit segments.
That wasn't quite what I meant. Assume we have a block size of 16 octets, or 128 bits, for simplicity. I don't think we need separate functions for CFB8 or other segment sizes; instead I think it would be nice if cfb_encrypt worked as follows:
Call with length == 16:
Encrypt one "segment" of 16 octets, aka CFB128.
Call with length == 40:
Encrypt two segments of 16 octets each, and the left over as one segment of 8 octets, aka CFB64.
Call with length == 1:
Encrypt one segment of one octet, aka CFB8
Call with length == 3:
Encrypt one segment of three octets, aka CFB24.
...etc. Calls with different length, with the same context, can be mixed, each call will correspond to ceil(length / 16) segments, where the last segment may be smaller than 16.
As far as I understand your code and the spec, I think your cfb_encrypt almost does this, all that's needed is to change the way the iv is updated for the left-over segment, and the NIST spec seemed reasonably clear on how it should be done. Do you think that makes sense?
Regards, /Niels