MD5Stream.st
author Claus Gittinger <cg@exept.de>
Thu, 17 Jan 2013 23:41:35 +0100
changeset 14668 dae8d0efb155
parent 14667 f6a830b971f3
child 14716 19f1a850f981
child 18011 deb0c3355881
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
 COPYRIGHT (c) 1999 by eXept Software AG
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
	      All Rights Reserved
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
 This software is furnished under a license and may be used
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
 hereby transferred.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
"
7041
1c0516e1f72d add testVektors
penk
parents: 6864
diff changeset
    12
"{ Package: 'stx:libbasic' }"
1c0516e1f72d add testVektors
penk
parents: 6864
diff changeset
    13
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
HashStream subclass:#MD5Stream
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
	instanceVariableNames:'hashContext'
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
	classVariableNames:'HashSize ContextSize'
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
	poolDictionaries:''
12419
61bf18768ccb category changes
Claus Gittinger <cg@exept.de>
parents: 12265
diff changeset
    18
	category:'System-Crypt-Hashing'
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
!MD5Stream primitiveDefinitions!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
%{
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
/*
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
 * includes, defines, structure definitions
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
 * and typedefs come here.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
 */
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
#include "md5.h"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
%}
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
! !
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
!MD5Stream class methodsFor:'documentation'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
copyright
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
 COPYRIGHT (c) 1999 by eXept Software AG
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
	      All Rights Reserved
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
 This software is furnished under a license and may be used
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
 only in accordance with the terms of that license and with the
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
 inclusion of the above copyright notice.   This software may not
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
 be provided or otherwise made available to, or used by, any
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
 other person.  No title to or ownership of the software is
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
 hereby transferred.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
documentation
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
    Generate a MD5 hash value as defined in RFC 1321.
12756
1814ef3ccb3d changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 12751
diff changeset
    55
    This may be used as checksum or for generating cryptographic signatures.
1814ef3ccb3d changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 12751
diff changeset
    56
1814ef3ccb3d changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 12751
diff changeset
    57
    Note:
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
    58
	in August 2004, some researchers have found a way to generate full collisions for MD5.
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
    59
	Therefore, for new applications, it may be wise to choose another hash function for security stuff.
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
    60
	See a hash-collision example in the examples method.
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
    62
	So, the MD5 algorithm has severe weaknesses, for example it is easy to compute two messages yielding
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
    63
	the same hash (collision attack).
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
    64
	The use of this algorithm is only justified for non-cryptographic application.
13932
46c83dd00617 changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 13925
diff changeset
    65
46c83dd00617 changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 13925
diff changeset
    66
12265
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
    67
    performance: roughly
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
    68
			80000 Kb/s on a 2Ghz Duo
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
    69
			27200 Kb/s on a 1.2Ghz Athlon
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
    70
			12600 Kb/s on a 400Mhz PIII
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
    71
			 9150 Kb/s on a 300Mhz Sparc.
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
    72
	performance is almost completely limited by the speed of the md5-routine, which is the reference
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
    73
	implementation in C from md5lib.
12756
1814ef3ccb3d changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 12751
diff changeset
    74
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
    [author:]
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
    76
	Stefan Vogel
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
    [see also:]
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
    79
	SHA1Stream
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
    [class variables:]
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
    82
	HashSize        size of returned hash value
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
    83
	ContextSize     (implementation) size of hash context
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
    [instance variables:]
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
    86
	hashContext     (implementation)
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
    87
			internal buffer for computation of the hash value
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
examples
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
"
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
    93
								[exBegin]
10782
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
    94
    Test Vectors (from FIPS PUB 180-1); results are:
7041
1c0516e1f72d add testVektors
penk
parents: 6864
diff changeset
    95
10782
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
    96
    'abc'
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
    97
    -> #[90 1 50 98 3C D2 4F B0 D6 96 3F 7D 28 E1 7F 72]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
10782
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
    99
    'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
   100
    -> #[82 15 EF 7 96 A2 B CA AA E1 16 D3 87 6C 66 4A]
7041
1c0516e1f72d add testVektors
penk
parents: 6864
diff changeset
   101
10782
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
   102
    A million repetitions of 'a'
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
   103
    -> #[77 7 D6 AE 4E 2 7C 70 EE A2 A9 35 C2 29 6F 21]
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   104
								[exEnd]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   106
								[exBegin]
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   107
     Transcript showCR:(MD5Stream hashValueOf:'abc') hexPrintString
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   108
								[exEnd]
13001
787e592f48f6 changed: #examples
Claus Gittinger <cg@exept.de>
parents: 12756
diff changeset
   109
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   110
								[exBegin]
12265
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   111
     (MD5Stream hashValueOf:'abc')
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   112
	printOn:Transcript base:16.
10782
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
   113
     Transcript cr.
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   114
								[exEnd]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   116
								[exBegin]
12265
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   117
     (MD5Stream hashValueOfStream:('abc' readStream))
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   118
	    printOn:Transcript base:16.
10782
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
   119
     Transcript cr.
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   120
								[exEnd]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   122
								[exBegin]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
    |hashStream|
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
    hashStream := MD5Stream new.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
    hashStream nextPut:'abc'.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
    hashStream hashValue printOn:Transcript base:16. Transcript cr.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
    hashStream nextPut:'dbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
    hashStream hashValue printOn:Transcript base:16. Transcript cr.
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   130
								[exEnd]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   132
								[exBegin]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
    |hashStream|
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
    hashStream := MD5Stream new.
7041
1c0516e1f72d add testVektors
penk
parents: 6864
diff changeset
   136
    hashStream nextPut:'a' asByteArray.
1c0516e1f72d add testVektors
penk
parents: 6864
diff changeset
   137
    hashStream nextPut:'bc' asByteArray.
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
    hashStream hashValue printOn:Transcript base:16. Transcript cr.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
    hashStream nextPut:'dbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq' asByteArray.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
    hashStream hashValue printOn:Transcript base:16. Transcript cr.
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   141
								[exEnd]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   143
								[exBegin]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
    |hashStream|
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
    hashStream := MD5Stream new.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
    1000000 timesRepeat:[ hashStream nextPut:$a ].
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
    hashStream hashValue printOn:Transcript base:16. Transcript cr.
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   149
								[exEnd]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   151
								[exBegin]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
    |hashStream|
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
    hashStream := MD5Stream new.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
    hashStream nextPut:'a'.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
    hashStream hashValue printOn:Transcript base:16. Transcript cr.
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   157
								[exEnd]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   159
								[exBegin]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
    |hashStream|
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
    hashStream := MD5Stream new.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
    hashStream nextPut:$a.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
    hashStream hashValue printOn:Transcript base:16. Transcript cr.
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   165
								[exEnd]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   167
								[exBegin]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
    |hashStream|
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
    hashStream := MD5Stream new.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
    hashStream nextPut:'abc'.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
    hashStream hashValue printOn:Transcript base:16. Transcript cr.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
    hashStream reset.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
    hashStream nextPut:'abc'.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
    hashStream hashValue printOn:Transcript base:16. Transcript cr.
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   176
								[exEnd]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   178
  a collision:
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   179
								[exBegin]
13896
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   180
    |hashStream|
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   181
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   182
    hashStream := MD5Stream new.
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   183
    hashStream nextPut:(ByteArray fromHexStringWithSeparators:'
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   184
d131dd02c5e6eec4693d9a0698aff95c 2fcab58712467eab4004583eb8fb7f89
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   185
55ad340609f4b30283e488832571415a 085125e8f7cdc99fd91dbdf280373c5b
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   186
d8823e3156348f5bae6dacd436c919c6 dd53e2b487da03fd02396306d248cda0
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   187
e99f33420f577ee8ce54b67080a80d1e c69821bcb6a8839396f9652b6ff72a70').
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   188
    hashStream hashValue printOn:Transcript base:16. Transcript cr.
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   189
    hashStream reset.
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   190
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   191
    hashStream nextPut:(ByteArray fromHexStringWithSeparators:'
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   192
d131dd02c5e6eec4693d9a0698aff95c 2fcab50712467eab4004583eb8fb7f89
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   193
55ad340609f4b30283e4888325f1415a 085125e8f7cdc99fd91dbd7280373c5b
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   194
d8823e3156348f5bae6dacd436c919c6 dd53e23487da03fd02396306d248cda0
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   195
e99f33420f577ee8ce54b67080280d1e c69821bcb6a8839396f965ab6ff72a70').
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   196
    hashStream hashValue printOn:Transcript base:16. Transcript cr.
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   197
								[exEnd]
13896
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   198
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
  timing throughput:
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   200
								[exBegin]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
    |hashStream n t|
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
    hashStream := MD5Stream new.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
    n := 1000000.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
    t := Time millisecondsToRun:[
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   206
	    n timesRepeat:[
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   207
		hashStream nextPutAll:'12345678901234567890123456789012345678901234567890'.
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   208
	    ].
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   209
	 ].
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
    t := (t / 1000) asFloat.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
    Transcript show:t; show:' seconds for '; show:(50*n/1024) asFloat; showCR:' Kb'.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
    Transcript show:(n*50/1024 / t); showCR:' Kb/s'
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   213
								[exEnd]
7041
1c0516e1f72d add testVektors
penk
parents: 6864
diff changeset
   214
"
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
! !
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
!MD5Stream class methodsFor:'initialization'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
initialize
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   220
    |ctxSize|
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
%{
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
   223
    ctxSize = __mkSmallInteger(sizeof(MD5_CTX));
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
%}.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
    ContextSize := ctxSize.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
    HashSize := 16.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
    "
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
	self initialize
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
    "
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
! !
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   235
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
!MD5Stream class methodsFor:'queries'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
blockSize
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
    "return the block size used internally by the compression function"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
    ^ 64
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
    "Created: / 18.3.1999 / 08:36:44 / stefan"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
hashSize
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
    "return the size of the hashvalue returned by instances of this class"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   248
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   249
    ^ HashSize
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   250
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   251
    "Created: / 18.3.1999 / 08:02:16 / stefan"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
! !
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   253
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
!MD5Stream methodsFor:'initialization'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   255
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   256
initialize
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   257
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   258
    hashContext := ByteArray new:ContextSize.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   259
    self reset.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   260
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   261
    "Modified: / 18.3.1999 / 08:03:42 / stefan"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   262
! !
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   263
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   264
!MD5Stream methodsFor:'positioning'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   265
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   266
reset
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
   "reset the stream in order to compute a new hash value"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   268
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   269
%{
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   270
   if (__isNonNilObject(__INST(hashContext)) &&
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   271
       __qClass(__INST(hashContext)) == @global(ByteArray) &&
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   272
       __byteArraySize(__INST(hashContext)) == sizeof(MD5_CTX)
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   273
   ) {
12265
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   274
	MD5_CTX *ctx =
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   275
	    (MD5_CTX *)__ByteArrayInstPtr(__INST(hashContext))->ba_element;
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   276
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   277
	MD5Init(ctx);
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
	RETURN(self);
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   279
   }
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   280
%}.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   281
   ^ self primitiveFailed
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   282
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   283
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   284
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   285
! !
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   286
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   287
!MD5Stream methodsFor:'queries'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   289
hashValue
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   290
    "Get the value hashed so far.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
     The context is kept, so that more objects may be hashed after
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
     retrieving a hash value"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
    |digest|
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   296
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
    digest := ByteArray new:HashSize.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   298
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   299
%{
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   300
    if (__isNonNilObject(__INST(hashContext)) &&
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
	__qClass(__INST(hashContext)) == @global(ByteArray) &&
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
	__byteArraySize(__INST(hashContext)) == sizeof(MD5_CTX) &&
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
	__isNonNilObject(digest) &&
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
	__qClass(digest) == @global(ByteArray) &&
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
	__byteArraySize(digest) == 16
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
    ) {
12265
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   307
	MD5_CTX *ctx =
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
	    (MD5_CTX *)__ByteArrayInstPtr(__INST(hashContext))->ba_element;
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
	MD5_CTX copyContext;
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
	memcpy(&copyContext, ctx, sizeof(copyContext));
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
	MD5Final(__ByteArrayInstPtr(digest)->ba_element, &copyContext);
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   313
	RETURN(digest);
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   314
    }
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   315
%}.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   316
12265
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   317
    ^ self primitiveFailed
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   318
! !
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   319
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   320
!MD5Stream methodsFor:'writing'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   321
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   322
nextPutBytes:count from:anObject startingAt:start
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   323
    "update the hash value with count bytes from an object starting at index start.
12265
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   324
     The object must have non-pointer indexed instvars
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   325
     (i.e. be a ByteArray, String, Float- or DoubleArray),
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   326
     or an externalBytes object (with known size)"
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   327
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   328
%{
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   329
    int len, offs;
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   330
    int objSize, nInstVars, nInstBytes;
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   331
    char *extPtr;
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   332
7197
a68adb223592 also handle subclasses of ExternalBytes (Mapped..)
Claus Gittinger <cg@exept.de>
parents: 7042
diff changeset
   333
    if (__isNonNilObject(__INST(hashContext))
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   334
       &&__qClass(__INST(hashContext)) == @global(ByteArray)
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   335
       &&__byteArraySize(__INST(hashContext)) == sizeof(MD5_CTX)
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   336
       && __bothSmallInteger(count, start)
7197
a68adb223592 also handle subclasses of ExternalBytes (Mapped..)
Claus Gittinger <cg@exept.de>
parents: 7042
diff changeset
   337
    ) {
12265
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   338
	MD5_CTX *ctx =
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   339
	    (MD5_CTX *)__ByteArrayInstPtr(__INST(hashContext))->ba_element;
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   340
12265
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   341
	len = __intVal(count);
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   342
	offs = __intVal(start) - 1;
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   343
12265
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   344
	if (__isExternalBytesLike(anObject)) {
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   345
	    OBJ sz;
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   346
12265
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   347
	    nInstBytes = 0;
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   348
	    extPtr = (char *)__externalBytesAddress(anObject);
14668
dae8d0efb155 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14667
diff changeset
   349
	    if (extPtr == (char *)0) goto bad;
12265
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   350
	    sz = __externalBytesSize(anObject);
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   351
	    if (__isSmallInteger(sz)) {
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   352
		objSize = __intVal(sz);
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   353
	    } else {
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   354
		objSize = 0; /* unknown */
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   355
	    }
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   356
	} else {
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   357
	    OBJ oClass;
7197
a68adb223592 also handle subclasses of ExternalBytes (Mapped..)
Claus Gittinger <cg@exept.de>
parents: 7042
diff changeset
   358
12265
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   359
	    oClass = __Class(anObject);
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   360
	    switch (__intVal(__ClassInstPtr(oClass)->c_flags) & ARRAYMASK) {
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   361
		case BYTEARRAY:
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   362
		case WORDARRAY:
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   363
		case LONGARRAY:
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   364
		case SWORDARRAY:
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   365
		case SLONGARRAY:
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   366
		case FLOATARRAY:
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   367
		case DOUBLEARRAY:
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   368
		    break;
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   369
		default:
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   370
		    goto bad;
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   371
	    }
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   372
	    nInstVars = __intVal(__ClassInstPtr(oClass)->c_ninstvars);
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   373
	    nInstBytes = __OBJS2BYTES__(nInstVars);
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   374
	    // nInstBytes is the number of bytes occupied by pointer instance variables
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   375
	    // subtract from size and add to byte-pointer
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   376
	    objSize = __Size(anObject) - OHDR_SIZE - nInstBytes;
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   377
	    extPtr = (char *)__byteArrayVal(anObject)+nInstBytes;
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   378
	}
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   379
	if ((offs >= 0) && (len >= 0) && (objSize >= (len + offs))) {
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   380
	    MD5Update(ctx, extPtr+offs, len);
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   381
	    RETURN (count);
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   382
	}
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   383
    }
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   384
bad: ;
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   385
%}.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   386
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   387
    ^ self primitiveFailed
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   388
! !
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   389
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   390
!MD5Stream class methodsFor:'documentation'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   391
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   392
version
14668
dae8d0efb155 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14667
diff changeset
   393
    ^ '$Header: /cvs/stx/stx/libbasic/MD5Stream.st,v 1.22 2013-01-17 22:41:35 cg Exp $'
12204
e95118ee583f changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 10783
diff changeset
   394
!
e95118ee583f changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 10783
diff changeset
   395
e95118ee583f changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 10783
diff changeset
   396
version_CVS
14668
dae8d0efb155 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14667
diff changeset
   397
    ^ '$Header: /cvs/stx/stx/libbasic/MD5Stream.st,v 1.22 2013-01-17 22:41:35 cg Exp $'
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   398
! !
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   399
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   400
MD5Stream initialize!