[squeak-dev] Xtreams-Xtras: hashing and HMAC

mkobetic at gmail.com mkobetic at gmail.com
Mon Jan 17 14:01:31 UTC 2011


I started playing with FFI and got the hashing streams working. They require OpenSSL's libcrypto, which should be available on any reasonably recent Unix and OSX. The VW version also has interface to native Windows bcrypt.dll (available on Vista and later) but I haven't done that part yet. Anyway the hashing streams seem to work and performance isn't bad either. Hashing 100MB of ones

[	(([ 1 ] reading limiting: 100000000) hashing: 'md5')
		-= 0; close; digest
] timeToRun

takes little over 5 seconds on not particularly fast machine. The above expression runs about 2.5 times faster on VW on the same machine, but that's probably due to the time spent in the block based terminal. Profile on VW says that only about 15% of the time is spent in the hashing layer. Hashing the 21M pharo image is pretty much instant:

((FileDirectory default / 'pharo.image') reading hashing: 'md5') -= 0; close; digest

The code is in Xtreams-Xtras and Xtreams-XtrasTests (note that you'll have to load FFI!). I tested it on Pharo 1.2 beta with both cog vm and standard vm. There are few test failures with file terminals that don't seem to like to be closed twice. Should be an easy fix.

Enjoy,

Martin

P.S.: If any resident FFI experts find the time and interest to look over my C bindings and find something wrong, please let me know. In particular I have't quite figured out how to work with struct fields that contain arrays (e.g. 'unsigned char [128]'). I figured out that I can declare the actual size of the field as a third parameter in the #fields declaration, but the accessors generated for the field are not right. I suspect they need to be some form of ExternalData but I don't quite grok how that should be created (see e.g. HMAC_CTX>>key).

Also it seems that there isn't a type definition for 'int' so I'm replacing all references to that with 'long'. Is that how it's done?




More information about the Squeak-dev mailing list