MD5Stream.st
author Claus Gittinger <cg@exept.de>
Tue, 09 Jul 2019 20:55:17 +0200
changeset 24417 03b083548da2
parent 23955 65bb2eee0144
permissions -rw-r--r--
#REFACTORING by exept class: Smalltalk class changed: #recursiveInstallAutoloadedClassesFrom:rememberIn:maxLevels:noAutoload:packageTop:showSplashInLevels: Transcript showCR:(... bindWith:...) -> Transcript showCR:... with:...
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
23938
16758cdac0c1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21153
diff changeset
     1
"{ Encoding: utf8 }"
16758cdac0c1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21153
diff changeset
     2
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
 COPYRIGHT (c) 1999 by eXept Software AG
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	      All Rights Reserved
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
 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
     8
 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
     9
 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
    10
 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
    11
 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
    12
 hereby transferred.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
"
7041
1c0516e1f72d add testVektors
penk
parents: 6864
diff changeset
    14
"{ Package: 'stx:libbasic' }"
1c0516e1f72d add testVektors
penk
parents: 6864
diff changeset
    15
19608
1a12b69abe9c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 16008
diff changeset
    16
"{ NameSpace: Smalltalk }"
1a12b69abe9c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 16008
diff changeset
    17
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
HashStream subclass:#MD5Stream
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	instanceVariableNames:'hashContext'
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	classVariableNames:'HashSize ContextSize'
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
	poolDictionaries:''
12419
61bf18768ccb category changes
Claus Gittinger <cg@exept.de>
parents: 12265
diff changeset
    22
	category:'System-Crypt-Hashing'
6864
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
!MD5Stream primitiveDefinitions!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
%{
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
 * includes, defines, structure definitions
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
 * and typedefs come here.
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
#include "md5.h"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
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
! !
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
!MD5Stream class methodsFor:'documentation'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
copyright
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
 COPYRIGHT (c) 1999 by eXept Software AG
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
	      All Rights Reserved
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
 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
    46
 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
    47
 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
    48
 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
    49
 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
    50
 hereby transferred.
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
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
!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
documentation
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
    Generate a MD5 hash value as defined in RFC 1321.
12756
1814ef3ccb3d changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 12751
diff changeset
    59
1814ef3ccb3d changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 12751
diff changeset
    60
    Note:
14787
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    61
        in August 2004, some researchers have found a way to generate full collisions for MD5.
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    62
        Therefore, for new applications, it may be wise to choose another hash function for security stuff.
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    63
        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
    64
23938
16758cdac0c1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21153
diff changeset
    65
        The MD5 algorithm has severe weaknesses, for example it is easy to compute two messages yielding
14787
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    66
        the same hash (collision attack).
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    67
        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
    68
46c83dd00617 changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 13925
diff changeset
    69
12265
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
    70
    performance: roughly
21153
f573eac03390 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19608
diff changeset
    71
                          150 Mb/s on a 2007 MAC Powerbook (2.6Ghz I7-Duo)
14787
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    72
                       104000 Kb/s on a 2.5Ghz 64X2 Athlon 4800+ (64bit)
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    73
                        80000 Kb/s on a 2Ghz Duo
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    74
                        27200 Kb/s on a 1.2Ghz Athlon
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    75
                        12600 Kb/s on a 400Mhz PIII
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    76
                         9150 Kb/s on a 300Mhz Sparc.
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    77
        performance is almost completely limited by the speed of the md5-routine, which is the reference
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    78
        implementation in C from md5lib.
12756
1814ef3ccb3d changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 12751
diff changeset
    79
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
    [author:]
14787
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    81
        Stefan Vogel
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
19608
1a12b69abe9c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 16008
diff changeset
    83
    [references:]
1a12b69abe9c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 16008
diff changeset
    84
        * Ronald L. Rivest, http://www.roxen.com/rfc/rfc1321.html
1a12b69abe9c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 16008
diff changeset
    85
          ''The MD5 Message-Digest Algorithm'', IETF RFC-1321 (informational).
1a12b69abe9c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 16008
diff changeset
    86
        * Bruce Schneier, Section 18.5 MD5, ''Applied Cryptography, 2nd edition'', John Wiley &amp; Sons, 1996
1a12b69abe9c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 16008
diff changeset
    87
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
    [see also:]
14787
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    89
        SHA1Stream
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    90
        SHA256Stream SHA512Stream (in libcrypt)
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
    [class variables:]
14787
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    93
        HashSize        size of returned hash value
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    94
        ContextSize     (implementation) size of hash context
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
    [instance variables:]
14787
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    97
        hashContext     (implementation)
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    98
                        internal buffer for computation of the hash value
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
examples
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
"
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   104
								[exBegin]
10782
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
   105
    Test Vectors (from FIPS PUB 180-1); results are:
7041
1c0516e1f72d add testVektors
penk
parents: 6864
diff changeset
   106
10782
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
   107
    'abc'
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
   108
    -> #[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
   109
10782
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
   110
    'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
   111
    -> #[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
   112
10782
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
   113
    A million repetitions of 'a'
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
   114
    -> #[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
   115
								[exEnd]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   117
								[exBegin]
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   118
     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
   119
								[exEnd]
13001
787e592f48f6 changed: #examples
Claus Gittinger <cg@exept.de>
parents: 12756
diff changeset
   120
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   121
								[exBegin]
12265
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   122
     (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
   123
	printOn:Transcript base:16.
10782
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
   124
     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
   125
								[exEnd]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   127
								[exBegin]
12265
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   128
     (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
   129
	    printOn:Transcript base:16.
10782
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
   130
     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
   131
								[exEnd]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   133
								[exBegin]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
    |hashStream|
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
    hashStream := MD5Stream new.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
    hashStream nextPut:'abc'.
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'.
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.
7041
1c0516e1f72d add testVektors
penk
parents: 6864
diff changeset
   147
    hashStream nextPut:'a' asByteArray.
1c0516e1f72d add testVektors
penk
parents: 6864
diff changeset
   148
    hashStream nextPut:'bc' asByteArray.
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
    hashStream hashValue printOn:Transcript base:16. Transcript cr.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
    hashStream nextPut:'dbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq' asByteArray.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
    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
   152
								[exEnd]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   154
								[exBegin]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
    |hashStream|
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
    hashStream := MD5Stream new.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
    1000000 timesRepeat:[ hashStream nextPut:$a ].
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
    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
   160
								[exEnd]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   162
								[exBegin]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
    |hashStream|
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
    hashStream := MD5Stream new.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
    hashStream nextPut:'a'.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
    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
   168
								[exEnd]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   170
								[exBegin]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
    |hashStream|
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
    hashStream := MD5Stream new.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
    hashStream nextPut:$a.
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
								[exBegin]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
    |hashStream|
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
    hashStream := MD5Stream new.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
    hashStream nextPut:'abc'.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
    hashStream hashValue printOn:Transcript base:16. Transcript cr.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
    hashStream reset.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
    hashStream nextPut:'abc'.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
    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
   187
								[exEnd]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   189
  a collision:
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   190
								[exBegin]
13896
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   191
    |hashStream|
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   192
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   193
    hashStream := MD5Stream new.
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   194
    hashStream nextPut:(ByteArray fromHexStringWithSeparators:'
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   195
d131dd02c5e6eec4693d9a0698aff95c 2fcab58712467eab4004583eb8fb7f89
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   196
55ad340609f4b30283e488832571415a 085125e8f7cdc99fd91dbdf280373c5b
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   197
d8823e3156348f5bae6dacd436c919c6 dd53e2b487da03fd02396306d248cda0
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   198
e99f33420f577ee8ce54b67080a80d1e c69821bcb6a8839396f9652b6ff72a70').
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   199
    hashStream hashValue printOn:Transcript base:16. Transcript cr.
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   200
    hashStream reset.
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   201
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   202
    hashStream nextPut:(ByteArray fromHexStringWithSeparators:'
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   203
d131dd02c5e6eec4693d9a0698aff95c 2fcab50712467eab4004583eb8fb7f89
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   204
55ad340609f4b30283e4888325f1415a 085125e8f7cdc99fd91dbd7280373c5b
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   205
d8823e3156348f5bae6dacd436c919c6 dd53e23487da03fd02396306d248cda0
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   206
e99f33420f577ee8ce54b67080280d1e c69821bcb6a8839396f965ab6ff72a70').
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   207
    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
   208
								[exEnd]
13896
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   209
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
  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
   211
								[exBegin]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
    |hashStream n t|
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
    hashStream := MD5Stream new.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
    n := 1000000.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
    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
   217
	    n timesRepeat:[
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   218
		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
   219
	    ].
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   220
	 ].
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
    t := (t / 1000) asFloat.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
    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
   223
    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
   224
								[exEnd]
7041
1c0516e1f72d add testVektors
penk
parents: 6864
diff changeset
   225
"
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
! !
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
!MD5Stream class methodsFor:'initialization'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
initialize
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
    |ctxSize|
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
%{
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
   234
    ctxSize = __mkSmallInteger(sizeof(MD5_CTX));
6864
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
    ContextSize := ctxSize.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
    HashSize := 16.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
    "
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
	self initialize
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
    "
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
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
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
!MD5Stream class methodsFor:'queries'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   248
15624
11ce1e9cf098 Rename #blockSize to #hashBlockSize
Stefan Vogel <sv@exept.de>
parents: 14787
diff changeset
   249
hashBlockSize
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   250
    "return the block size used internally by the compression function"
15624
11ce1e9cf098 Rename #blockSize to #hashBlockSize
Stefan Vogel <sv@exept.de>
parents: 14787
diff changeset
   251
    
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
    ^ 64
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
    "Created: / 18.3.1999 / 08:36:44 / stefan"
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
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   257
hashSize
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   258
    "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
   259
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   260
    ^ HashSize
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   261
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   262
    "Created: / 18.3.1999 / 08:02:16 / stefan"
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
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   265
!MD5Stream methodsFor:'initialization'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   266
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
initialize
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
    hashContext := ByteArray new:ContextSize.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   270
    self reset.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   271
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   272
    "Modified: / 18.3.1999 / 08:03:42 / stefan"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   273
! !
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   274
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   275
!MD5Stream methodsFor:'positioning'!
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
reset
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
   "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
   279
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   280
%{
14723
8657c48a4c03 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14716
diff changeset
   281
   if (__isByteArray(__INST(hashContext)) &&
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   282
       __byteArraySize(__INST(hashContext)) == sizeof(MD5_CTX)
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   283
   ) {
14723
8657c48a4c03 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14716
diff changeset
   284
	MD5_CTX *ctx = (MD5_CTX *)__ByteArrayInstPtr(__INST(hashContext))->ba_element;
6864
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
	MD5Init(ctx);
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   287
	RETURN(self);
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
%}.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   290
   ^ self primitiveFailed
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
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
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   296
!MD5Stream methodsFor:'queries'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   298
hashValue
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   299
    "Get the value hashed so far.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   300
     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
   301
     retrieving a hash value"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
    |digest|
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
    digest := ByteArray new:HashSize.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
%{
14723
8657c48a4c03 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14716
diff changeset
   309
    if (__isByteArray(__INST(hashContext)) &&
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
	__byteArraySize(__INST(hashContext)) == sizeof(MD5_CTX) &&
14723
8657c48a4c03 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14716
diff changeset
   311
	__isByteArray(digest) &&
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
	__byteArraySize(digest) == 16
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   313
    ) {
14723
8657c48a4c03 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14716
diff changeset
   314
	MD5_CTX *ctx = (MD5_CTX *)__ByteArrayInstPtr(__INST(hashContext))->ba_element;
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   315
	MD5_CTX copyContext;
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   316
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   317
	memcpy(&copyContext, ctx, sizeof(copyContext));
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   318
	MD5Final(__ByteArrayInstPtr(digest)->ba_element, &copyContext);
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   319
	RETURN(digest);
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   320
    }
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   321
%}.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   322
12265
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   323
    ^ self primitiveFailed
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   324
! !
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   325
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   326
!MD5Stream methodsFor:'writing'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   327
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   328
nextPutBytes:count from:anObject startingAt:start
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   329
    "update the hash value with count bytes from an object starting at index start.
12265
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   330
     The object must have non-pointer indexed instvars
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   331
     (i.e. be a ByteArray, String, Float- or DoubleArray),
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   332
     or an externalBytes object (with known size)"
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   333
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   334
%{
14723
8657c48a4c03 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14716
diff changeset
   335
    INT len, offs;
8657c48a4c03 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14716
diff changeset
   336
    INT objSize;
15988
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   337
    int nInstBytes;
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   338
    char *extPtr;
23955
65bb2eee0144 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 23938
diff changeset
   339
    OBJ _hashContext = __INST(hashContext);
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   340
23955
65bb2eee0144 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 23938
diff changeset
   341
    // convert first, check later
65bb2eee0144 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 23938
diff changeset
   342
    len = __intVal(count);
65bb2eee0144 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 23938
diff changeset
   343
    offs = __intVal(start) - 1;
65bb2eee0144 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 23938
diff changeset
   344
65bb2eee0144 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 23938
diff changeset
   345
    if (__isByteArray(_hashContext)
65bb2eee0144 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 23938
diff changeset
   346
       && __byteArraySize(_hashContext) == sizeof(MD5_CTX)
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   347
       && __bothSmallInteger(count, start)
7197
a68adb223592 also handle subclasses of ExternalBytes (Mapped..)
Claus Gittinger <cg@exept.de>
parents: 7042
diff changeset
   348
    ) {
23955
65bb2eee0144 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 23938
diff changeset
   349
        MD5_CTX *ctx = (MD5_CTX *)__byteArrayVal(_hashContext);
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   350
23955
65bb2eee0144 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 23938
diff changeset
   351
        if (__isByteArrayLike(anObject)) {
65bb2eee0144 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 23938
diff changeset
   352
            extPtr = (char *)__byteArrayVal(anObject);
65bb2eee0144 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 23938
diff changeset
   353
            objSize = __byteArraySize(anObject);
65bb2eee0144 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 23938
diff changeset
   354
        } else if (__isStringLike(anObject)) { 
65bb2eee0144 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 23938
diff changeset
   355
            extPtr = (char *)__stringVal(anObject);
65bb2eee0144 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 23938
diff changeset
   356
            objSize = __stringSize(anObject);
65bb2eee0144 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 23938
diff changeset
   357
        } else if (__isExternalBytesLike(anObject)) {
15988
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   358
            OBJ sz;
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   359
15988
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   360
            nInstBytes = 0;
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   361
            extPtr = (char *)__externalBytesAddress(anObject);
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   362
            if (extPtr == (char *)0) goto bad;
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   363
            sz = __externalBytesSize(anObject);
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   364
            if (__isSmallInteger(sz)) {
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   365
                objSize = __intVal(sz);
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   366
            } else {
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   367
                objSize = 0; /* unknown */
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   368
            }
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   369
        } else {
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   370
            OBJ oClass = __Class(anObject);
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   371
            int nInstVars = __intVal(__ClassInstPtr(oClass)->c_ninstvars);
7197
a68adb223592 also handle subclasses of ExternalBytes (Mapped..)
Claus Gittinger <cg@exept.de>
parents: 7042
diff changeset
   372
16003
251463ee7d9c class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15997
diff changeset
   373
            nInstBytes = OHDR_SIZE + __OBJS2BYTES__(nInstVars);
15988
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   374
            switch (__intVal(__ClassInstPtr(oClass)->c_flags) & ARRAYMASK) {
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   375
                case BYTEARRAY:
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   376
                case WORDARRAY:
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   377
                case LONGARRAY:
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   378
                case SWORDARRAY:
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   379
                case SLONGARRAY:
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   380
                case FLOATARRAY:
15992
24d68f700fdf class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15988
diff changeset
   381
                    break;
15988
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   382
                case DOUBLEARRAY:
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   383
#ifdef __NEED_DOUBLE_ALIGN
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   384
                    nInstBytes = (nInstBytes-1+__DOUBLE_ALIGN) &~ (__DOUBLE_ALIGN-1);
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   385
#endif
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   386
                    break;
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   387
                case LONGLONGARRAY:
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   388
                case SLONGLONGARRAY:
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   389
#ifdef __NEED_LONGLONG_ALIGN
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   390
                    nInstBytes = (nInstBytes-1+__LONGLONG_ALIGN) &~ (__LONGLONG_ALIGN-1);
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   391
#endif
15992
24d68f700fdf class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15988
diff changeset
   392
                    break;
15988
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   393
                default:
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   394
                    goto bad;
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   395
            }
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   396
            // nInstBytes is the number of bytes occupied by pointer instance variables
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   397
            // subtract from size and add to byte-pointer
16003
251463ee7d9c class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15997
diff changeset
   398
            objSize = __Size(anObject) - nInstBytes;
16008
25ae6c8526f6 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 16003
diff changeset
   399
            extPtr = (char *)anObject + nInstBytes;
15988
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   400
        }
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   401
        if ((offs >= 0) && (len >= 0) && (objSize >= (len + offs))) {
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   402
            MD5Update(ctx, extPtr+offs, len);
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   403
            RETURN (count);
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   404
        }
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   405
    }
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   406
bad: ;
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   407
%}.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   408
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   409
    ^ self primitiveFailed
23955
65bb2eee0144 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 23938
diff changeset
   410
65bb2eee0144 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 23938
diff changeset
   411
    "Modified: / 23-03-2019 / 15:16:34 / Claus Gittinger"
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   412
! !
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   413
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   414
!MD5Stream class methodsFor:'documentation'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   415
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   416
version
19608
1a12b69abe9c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 16008
diff changeset
   417
    ^ '$Header$'
12204
e95118ee583f changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 10783
diff changeset
   418
!
e95118ee583f changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 10783
diff changeset
   419
e95118ee583f changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 10783
diff changeset
   420
version_CVS
19608
1a12b69abe9c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 16008
diff changeset
   421
    ^ '$Header$'
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   422
! !
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   423
14716
19f1a850f981 class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14668
diff changeset
   424
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   425
MD5Stream initialize!