MD5 algorithm

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
9 messages Options
Reply | Threaded
Open this post in threaded view
|

MD5 algorithm

Dmitry Zamotkin-3
Hello, All!

Please, tell me, what Smalltalk version has implementation of MD5
message-digest algorithm? Or did anybody succeed to port it to Dolphin?

Dmitry


Reply | Threaded
Open this post in threaded view
|

Re: MD5 algorithm

Andy Bower
Dmitry,

> Please, tell me, what Smalltalk version has implementation of MD5
> message-digest algorithm? Or did anybody succeed to port it to Dolphin?

Although Dolphin doesn't have a direct implementation of MD5 it does have a
version of the SHA algorithm as part of the DolphinSure package. SHA will
produce a 160bit hash compared with the 128bits of MD5. The
SecureHashAlgorithm class is available in all versions of Dolphin 4 (but not
in earlier versions). You'll find that for speed the SHA is coded in an
external C DLL and called from the Smalltalk code.

Best Regards,

Andy Bower
Dolphin Support
http://www.object-arts.com
---
Are you trying too hard?
http://www.object-arts.com/Relax.htm
---


Reply | Threaded
Open this post in threaded view
|

Re: MD5 algorithm

sharris
In reply to this post by Dmitry Zamotkin-3
Doesn't Windows have a crypto package that includes MD5
among other things ( I heard that it sucks and is really
slow but it is better than nothing ) the funny thing is
that it appears even microsoft apps don't use the public
crypto api they provide.

"Dmitry Zamotkin" <[hidden email]> wrote in message news:<9gkje5$l2v$[hidden email]>...
> Hello, All!
>
> Please, tell me, what Smalltalk version has implementation of MD5
> message-digest algorithm? Or did anybody succeed to port it to Dolphin?
>
> Dmitry


Reply | Threaded
Open this post in threaded view
|

Re: MD5 algorithm

Ingo Blank
In reply to this post by Dmitry Zamotkin-3
"Dmitry Zamotkin" <[hidden email]> schrieb im Newsbeitrag
news:9gkje5$l2v$[hidden email]...
> Hello, All!
>
> Please, tell me, what Smalltalk version has implementation of MD5
> message-digest algorithm? Or did anybody succeed to port it to Dolphin?
>
> Dmitry

Dmitry,

though I have no ST implementation of MD5 digest, there is an
OpenSource for it. I have it run on Linux and Win2000/Cygwin.

IMHO it's not too hard to create a DLL from this C Source, then calling it
through an ExternalLibrary interface.

Ingo


Reply | Threaded
Open this post in threaded view
|

Re: MD5 algorithm

Ingo Blank
In reply to this post by sharris
"steve" <[hidden email]> schrieb im Newsbeitrag
news:[hidden email]...
> Doesn't Windows have a crypto package that includes MD5
> among other things ( I heard that it sucks and is really
> slow but it is better than nothing ) the funny thing is
> that it appears even microsoft apps don't use the public
> crypto api they provide.

Steve,

honestly, *WHO* would use a _ClosedSource_ cryptographic
package, provided by Microsoft ???

What do you want to know today ?

Ingo


Reply | Threaded
Open this post in threaded view
|

Re: MD5 algorithm

Dmitry Zamotkin-3
In reply to this post by Ingo Blank
"Ingo Blank" <[hidden email]> wrote in message
news:3b2eabb2$0$137$[hidden email]...

> IMHO it's not too hard to create a DLL from this C Source, then calling it
> through an ExternalLibrary interface.

Yes, I've found RFC 1321 with reference implementation:
http://deesse.univ-lemans.fr:8003/Connected/RFC/1321

I'm not looking for easy way :) , but counting on native Smalltalk
implementation. Is Smalltalk too slow to run this algorithm?

> Ingo

Dmitry


Reply | Threaded
Open this post in threaded view
|

Re: MD5 algorithm

Ingo Blank
"Dmitry Zamotkin" <[hidden email]> schrieb im Newsbeitrag
news:9gmol0$srd$[hidden email]...
>
> "Ingo Blank" <[hidden email]> wrote in message
> news:3b2eabb2$0$137$[hidden email]...
>
> > IMHO it's not too hard to create a DLL from this C Source, then calling
it

> > through an ExternalLibrary interface.
>
> Yes, I've found RFC 1321 with reference implementation:
> http://deesse.univ-lemans.fr:8003/Connected/RFC/1321
>
> I'm not looking for easy way :) , but counting on native Smalltalk
> implementation. Is Smalltalk too slow to run this algorithm?
>
> > Ingo
>
 Dmitry,

I can't say whether ST is *too* slow, but all these cryptographic algorithms
are pretty expensive. So I estimate, you get a performance increase
measurable in orders of magnitude, using a C (or Assembler :-)
implementation.

All high level languages, that implement MD5 ( I know MIT Scheme, and some
LISP dialects), use *external* - I assume C - libraries.

I myself implemented an SHA-256 this way.
N.B. that was before I "discovered" the SHA-160 in Dolphin =:)


Ingo


Reply | Threaded
Open this post in threaded view
|

Re: MD5 algorithm

Dmitry Zamotkin-3
"Ingo Blank" <[hidden email]> wrote in message
news:3b2f473a$0$29840$[hidden email]...

> I can't say whether ST is *too* slow, but all these cryptographic
algorithms

> are pretty expensive. So I estimate, you get a performance increase
> measurable in orders of magnitude, using a C (or Assembler :-)
> implementation.
>
> All high level languages, that implement MD5 ( I know MIT Scheme, and some
> LISP dialects), use *external* - I assume C - libraries.
>
> I myself implemented an SHA-256 this way.
> N.B. that was before I "discovered" the SHA-160 in Dolphin =:)
>
>
> Ingo

There is my implementation of MD5 algorithm with using external DLL and
SUnit tests.

Dmitry
























begin 666 MD5Crypto.zip
M4$L#!!0``@`(`$R:U"K%5R2)0"P```!R```-````;60U8W)Y<'1O+F1L;.Q]
M"WA3Q[7NEK5E;ULRDHG\`$P06&F=&(B+(#$1$$&,,8D)\@,Y*<3@8!-;,3:1
MMX#T.M2.K,321"D]3=NTI;<XIJ?D<=OTG.:4O(@V"I:!D/ (X944$])D&X78
M$.('`>NN-7O+E@UIS_WNO=_]SOT\WS>>/3-KUOQKS9J9-;.W8-D/MS)*AF%8
MB.$PP^QBI&!A_GEHA#ANRAOCF+_$'YRZ2U%P<&I)576]88.C[A%'^7K#VO+:
MVCK>\'"EP>&L-537&G*7%QO6UU54SDQ,3##*/*R+&:9 H6+\N[/-$;Z=S+BI
M:BAC[H!,@51V*!W^Z+ !S>KH<XR$FV&&4\8_G(F122GM4"JS*6:8.LQL9YC,
M?R3DJPPS3\G\+X<3VVG3[PPS^<K-/*0]<V1 =T0+(04#PZR9Z:@HY\L9YAVE
M+#O2W#62#L;*,E,B8_I1BVL82:@%U]'Y9U9+A$^QDNQ,+,1U-Z!S5-;4K079
M64D'E*[F.KI%S%CX+QU(KI$U[?/DZSWYNB"CR%C\2-#">EX^V!VT<(,?O_%\
MT*+96#)+%]@JA^(59)51;RLE#4:]3_\)9;%<1P1!5/HT)UV==YOW>Y;KZI7A
M)7JR24\."%V3E1<]F_2[<4')ZC'_S;&4E!C3;+[<G+0BJ^A+8!C7NQK?\K3"
M4O$0,OO*U7ZWZUW._'5].A+Z<F<)UE+Q-:ARM5N@PK778O[:\9G)'XHQ72 %
MQK2L3Y1=Q;Z2G+051>("B=WJLH=6RHA=7W*^7"-#`:?9.=\FG<TJ;HJ'CF*!
M$% #Y-=SD'M_CD/U^F9$V5%8E;V&T96*VG XC.@*C)R=`X#AP7 80!F@S*XK
M+1)OCZ?=V1^P,Z7BI_%RWP!R2%W0OP5 YA>OL!'>:"VU6WPE1CV))5M84L:1
M6DUAD2?7N$:<@X@^`-YK2 "8]!W."&8<5 O05*<4?,_$;-YA/PY*[HP3NB9
M\0?*(#F4T=%W)..H>C^TTBOW^YY+M/TU*)+]PEF-<%ZOWJ_L(%WD<-^QC$,9
MW>ICI,:8ICSFVW;3Z0T&(SDJG-<*YY+41\E)Y6%R/N,4D(GJ3X H7?F);]N4
MK]Y_6R#?"MT)PKD4];?DE/(*Z<XX`T1=E,@`1,UI?](V?$-.".?B!'&"^@0)
M*L^04$8`B,ZK]P*14;G7]XSBMO:GER!PC="E5PO*`!%)!Y <`$P'@2A3>=#W
M7,)->=D[`7B75O@T">0YA- S$'J(`I\.P-]*5?P\[QHY+IQ/$+Y(41\G`Q3X
M%0K\&A!E*Z_YMIE//-]8#<"_B!-"$VX`?+8$O"^7(' 8?KWZ!, .`/#@$/ <
M"OS/*V&LP:RUPMDDT/@!A)Z!T"7@\RCPW<=7>1!X@O!IR@V 6RCP:4E;'P7@
MG\8)W1-N`#R7`O_98\]?0^ :(:17?PNPSY#NOJ.>5<:2C). "\'G*S\AW0#_
MV7L>_U> '](*G4D2_(Q0WR$PHP<R]E !"J@`4[F_+$4!$H2S*=222D"$;M"\
M2 70*P^2$(CP\"TW]Z+1J(3SDZ@M/:#L`)/IH@)D*H\1L0^%L/R[Q9_1A6+$
M"]VIZN,@Q)6,?BK /.4UT@5$V\R%/RS[7L9Y%&.<$!HOB9%QDH+7`?CS0-2<
M]E+P/[HRNE$`C= )^B=[E&<R`A&3`:F/`?B'=+=_E!%"PU$)79.HQ0<R.BCP
M'*KY8GUN#,*.%\ZG`NP0:![U+L*$.$95$ '>]'GK"0GX.*%[_ C@AB'@'=\>
M_8("[]8(YT#_,"VN9)R)F(P,_/.#9Z=2X.=4@CAI!/#\(> ?Q=T9D(#'"UVI
MU.([,CZ@P--1XT#T7,+3B<<N9]"I.DXX/YY.U<,R\&QJ,A?T/UQ,CA-1.*\1
MOM"#T?0K4;HK,"RRR<C 55WG7I0TKA)"DT8`3QL"WM_6?54"'B^(J;+)2*8R
M?0CXR9BZ1R3@XX2N\2. 6Y3XUPC O06W^=#>-<*GL,*0H\H.TR'3824%#K 7
MS;T21DVS0G>Z!-HT8+I"[;NI][&G$:9:""4#3+0:, [32=,IV:JGE?]V/4+4
M":(.(9I"9*]ICS+7F _@-#E_OX:V'"^<3:6VK%<&3**RR_?<;;GG=^_ L41M
MLL+Y]%&PI@.L%S_XVWT(2RUT)TL&8.HW#5!8:^Y[LQ=AZ8203EHO3+"*F;J4
M8&>^5S(WO/7.;K(7^_U[*M57KC)H.J&D!NW;-J%]RV\R88N#?D/IZ@/D#/1[
MPG025]")5[[?>IX<Q5$'@:%K]5'H]U2D>HH[N_M#Z#>D@ZY']9L)_:HFM[ C
M^IT]U*\%^IU[Z,.3-^H7#1_Z_ONO3G\.2_RG5-=1_:)10-_]#2],&2VS7 U"
MI57:7GF7!+#O<ZGJ`%0'^XZJ3YC.`.YG)N1.N_4R.2F<BQ6Z)JI/*D^@ALD'
M?8?5!TP=U$KRP4I^&;[M'AR.!.&\M"H>Z#NB/FPZ2@?$" /RAXSG7L8!T0K=
M26 GWX)Q'U=?P2&A`C;GS-W^LZND7^A6"YW)ZGXB**_T'5('P1Q0%^F^;<K
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
J,@``5&5S=$U$-4-R>7!T;RYP86-02P4&``````,``P"U````&#<`````
`
end


Reply | Threaded
Open this post in threaded view
|

Re: MD5 algorithm

Doug Swartz
In reply to this post by Dmitry Zamotkin-3
Dmitry Zamotkin <[hidden email]> wrote in message
news:9gkje5$l2v$[hidden email]...
> Hello, All!
>
> Please, tell me, what Smalltalk version has implementation of MD5
> message-digest algorithm? Or did anybody succeed to port it to Dolphin?
>
IBM Smalltalk has an MD5 implementation implemented completely in
Smalltalk(AbtMD5Engine). It appears to be a very straightforward (not
particularly objectized) implementation of the specification. It is 11
methods in AbtMD5Engine and a couple of methods added to ByteArray and
Integer. It looks like it could be implemented in Dolphin as a
straightforward port, although IBM might frown on it.

Is it too slow? That all depends on how big your messages are and how many
messages you need to make digests for. On my Pentium 233 (I think I need a
raise) it creates a digest for a 1000 character String in between 82 and 85
milliseconds. Performance is linear; a 10000 character String takes about
825 milliseconds. I think that's plenty fast for some things, but not what
you'd want in a packet switch.

Doug Swartz
[hidden email]