I finally figured this out - our Cipher interface from a behavioral
standpoint is just fine; all Ciphers should be able to do what the
interface specifies, but I need to add some streaming methods in there
for Stream ciphers (or create a StreamCipher interface).

Side note: interestingly enough JDK block ciphers can be used as
stream ciphers if the Cipher's Feedback Mode size is changed to 8 bits
(1 byte).  If you haven't worked with the JCE and don't know what this
means, don't worry - it doesn't change the architectural approach :).

The _implementation_ of our Cipher interface can be stateless or
stateful and we can support both types of implementations if
necessary.  I'll run through the solution today and tomorrow, but I
think it will be nice and solid for 1.0, and without taking up much
time.  I should have it wrapped up by tomorrow.

- Les

On Wed, Mar 31, 2010 at 2:35 PM, Les Hazlewood <[email protected]> wrote:
> I think I'm going to go with StatelessCipher for now so I don't
> prolong the release any more than I have to.  If anyone feels
> differently, please comment!
>
> On Wed, Mar 31, 2010 at 12:45 PM, Kalle Korhonen
> <[email protected]> wrote:
>> On Wed, Mar 31, 2010 at 12:03 PM, Les Hazlewood <[email protected]> 
>> wrote:
>>> Refactoring things now, so close to 1.0 would probably delay things
>>> another few days.  I think maybe instead, it would be better to rename
>>> the existing Cipher interface to StatelessCipher and keep what we have
>>> in place.  Then, when we have the time to work out a cleaner
>>> abstraction, we can then create a 'real' Cipher interface that can
>>> handle stateful operations in a clean manner.
>>> Or maybe I just spend a few days and put together a more robust
>>> permanent solution.
>>
>> I could easily see it might take more than just a few days, but if you
>> think you could satisfactorily refactor it in a few days, I'd say go
>> for it but time-box it. If at any point you hit a roadblock or you are
>> unsure if the refactored interface would cover the new use cases
>> without causing problems in the existing implementation, you could
>> drop it and leave it for follow-up releases. StatelessCipher is a good
>> fallback.
>>
>> Kalle
>>
>

Reply via email to