Thanks for the responses.

I'll wait a little longer and see if Rob has anything to say about this. 
Otherwise I will do what Henrik suggests: 
deprecate SecureHashAlgorithm (why not remove it completely?)
refactor users of SecureHashAlogrithm to use SHA1 instead
add CRC to SystemHashing (possibly a copy from Cryptography)
refactor the Zip implementation to use the new CRC class
deprecate crc methods in Zip implementation

I actually like #hashMessage: better than #hashStream:. #hashStream: says to my 
"I expect a stream as my argument" where in reality it will take a string or a 
ByteArray (neither of which is obviously a stream…). 
What I found irritating though was that one has to send #new to 
SecureHashAlgorithm first before hashing. So I propose to keep #hashMessage: 
but to move it to the class side of SHA1:

SHA1 class>>hashMessage: aStringOrByteArray
        ^ self new
                hashStream: aStringOrByteArray;
                yourself

Cheers,
Max


On 02.03.2012, at 09:46, Henrik Johansen wrote:

> 
> On Mar 2, 2012, at 9:05 AM, Marcus Denker wrote:
> 
>> 
>> On Mar 2, 2012, at 8:19 AM, Max Leske wrote:
>> 
>>> I need to calculate CRC for Git and couldn't find it in the system packages 
>>> (I guess I'd find it in Cryptography). Since Pharo has a system package 
>>> called "System-Hashing" I was wondering if anyone sees a reason why CRC 
>>> should not be part of that package. That would also allow the Zip 
>>> implementation to use the system CRC function (at the moment Zip implements 
>>> its own CRC check). 
>>> 
>> Yes, that would be nice. But people will yell at you for making Pharo 
>> bloated and going in the completely wrong direction and
>> that you should and never ever add any code.
> 
> Decomposing != Bloating.
> As long as you refactor the current users (which currently use the 
> implementation in ZipWriteStream) to use the new CRC class, it should be 
> fine. 
> I would suggest deprecating the class method in ZipWriteStream rather than 
> removing it though, based on the users in image, it is a likely method to be 
> in use by external packages doing CRC calculations.
> 
> It also seems the primitive for updating CRC is not reliant on the CrcTable 
> class var, so should be safe to use in new class' method as well.
> 
>> 
>>> Another thing: going through Sytem-Hashing I noticed that there are two 
>>> implementations for SHA1: "SHA1" and "SecureHashAlgorithm". They both have 
>>> the exact same class comment but vary slightly in the messages they 
>>> implement (although most of them are present in both classes). Can we 
>>> remove one?
>> 
>> Yes. But for sure someone will yell at you if you remove it, because the 
>> system should be stable and not force people to 
>> change their code. 
> 
> IIRC, it was initially included as SecureHashAlgorithm, being renamed when 
> imported from the Cryptography package.
> To allow existing packages relying on Crypto to load cleanly, SHA1 was later 
> also included.
> 
> As there are already other name clashes with the Crypto package (MD5 for 
> instance) I would vote for deprecating SecureHashAlgorithm.
> (SHA1 is arguably a more descriptive name anyways)
> Not sure if it's worth including hashMessage: in SHA1, it's just a utility 
> method.
> 
> Cheers,
> Henry
> 
> 
> 

Reply via email to