On 19 June 2016 at 01:18, Stian Soiland-Reyes <st...@apache.org> wrote:
> I am not too keen to grow CryptoCipher to an abstract class (Java 8 or not)
> with additional methods that would not typically be implemented by
> implementing subclasses.
>
> The API of CC is quite low level, yes, but then adding higher level helpers
> there won't really help as it will be quite a confusing API to use, mixed
> with the lower level methods which you then should NOT use.

No, it would be an additional method intended for use alongside the others.

c.f. Writer which as:

void write(String)
and
void write(String,int,int)

> A higher level CryptoUtils (?) could be a better place, it could have
> helpers to de/encrypt a byte[], a String and a Path without requiring the
> multiple steps.

To take the Writer case, it would be confusing to have to use

Writer.write(String,int,int)
and
WriterUtils.write(String).

> On 16 Jun 2016 2:17 p.m., "sebb" <seb...@gmail.com> wrote:
>
>> I have been looking at creating examples for Crypto.
>>
>> It occurred to me that a common use case is encryption/decryption of
>> small chunks of data that can readily be stored in a local byte array.
>>
>> For such cases, there is no need to use both update() and doFinal().
>> Having to provide the input array offset/length and the output array
>> offset is tedious.
>>
>> It might therefore be useful to provide a method with the signature:
>>
>> int doFinal(byte[] input, byte[] output)
>>
>> This got me thinking about how the code should be designed to enable
>> evolution of the API in future releases. A method added to an
>> interface breaks compatibility unless one uses Java 8 with its default
>> implementation feature. Whereas if the CryptoCipher interface were
>> turned into an abstract class, changes could be readily implemented
>> without breaking the API.
>>
>> I'm inclined to think that using an abstract base class is better than
>> an interface.
>> - it's easy to extend and to provide helper methods
>> - it works with Java 7 (does not require Java 8)
>> - AFAICT an implementation *is* a CryptoCipher
>>
>> The same applies to the CryptoRandom.
>>
>> I wonder also whether the stream.input.Input and stream.output.Output
>> interfaces should be abstract classes instead.
>> They seem to mirror the java.io.InputStream/OutputStream abstract classes.
>> So maybe they should be dropped in favour of an abstract subclass of
>> InputStream/OutputStream?
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>> For additional commands, e-mail: dev-h...@commons.apache.org
>>
>>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to