MD5Stream.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 22 Sep 2015 16:28:42 +0100
branchjv
changeset 18759 c1217211909c
parent 18120 e3a375d5f6a8
child 19611 b1aaf1175f51
permissions -rw-r--r--
Changed identification strings to contain jv-branch ...to make explicit that this distribution is not the official one used by eXept and therefore that eXept is not to be blamed in case of any problem.
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:
14787
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    58
        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
    59
        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
    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
14787
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    62
        So, the MD5 algorithm has severe weaknesses, for example it is easy to compute two messages yielding
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    63
        the same hash (collision attack).
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
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
14787
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    68
                       104000 Kb/s on a 2.5Ghz 64X2 Athlon 4800+ (64bit)
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    69
                        80000 Kb/s on a 2Ghz Duo
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    70
                        27200 Kb/s on a 1.2Ghz Athlon
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    71
                        12600 Kb/s on a 400Mhz PIII
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    72
                         9150 Kb/s on a 300Mhz Sparc.
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    73
        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
    74
        implementation in C from md5lib.
12756
1814ef3ccb3d changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 12751
diff changeset
    75
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
    [author:]
14787
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    77
        Stefan Vogel
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
    [see also:]
14787
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    80
        SHA1Stream
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    81
        SHA256Stream SHA512Stream (in libcrypt)
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
    [class variables:]
14787
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    84
        HashSize        size of returned hash value
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    85
        ContextSize     (implementation) size of hash context
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
    [instance variables:]
14787
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    88
        hashContext     (implementation)
497cefec769f class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14723
diff changeset
    89
                        internal buffer for computation of the hash value
6864
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
!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
examples
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
"
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
    95
								[exBegin]
10782
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
    96
    Test Vectors (from FIPS PUB 180-1); results are:
7041
1c0516e1f72d add testVektors
penk
parents: 6864
diff changeset
    97
10782
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
    98
    'abc'
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
    99
    -> #[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
   100
10782
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
   101
    'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
   102
    -> #[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
   103
10782
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
   104
    A million repetitions of 'a'
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
   105
    -> #[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
   106
								[exEnd]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   108
								[exBegin]
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   109
     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
   110
								[exEnd]
13001
787e592f48f6 changed: #examples
Claus Gittinger <cg@exept.de>
parents: 12756
diff changeset
   111
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   112
								[exBegin]
12265
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   113
     (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
   114
	printOn:Transcript base:16.
10782
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
   115
     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
   116
								[exEnd]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   118
								[exBegin]
12265
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   119
     (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
   120
	    printOn:Transcript base:16.
10782
0eb9a61f1e32 comments
Claus Gittinger <cg@exept.de>
parents: 8913
diff changeset
   121
     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
   122
								[exEnd]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   124
								[exBegin]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
    |hashStream|
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
    hashStream := MD5Stream new.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
    hashStream nextPut:'abc'.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
    hashStream hashValue printOn:Transcript base:16. Transcript cr.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
    hashStream nextPut:'dbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
    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
   132
								[exEnd]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   134
								[exBegin]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
    |hashStream|
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
    hashStream := MD5Stream new.
7041
1c0516e1f72d add testVektors
penk
parents: 6864
diff changeset
   138
    hashStream nextPut:'a' asByteArray.
1c0516e1f72d add testVektors
penk
parents: 6864
diff changeset
   139
    hashStream nextPut:'bc' asByteArray.
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
    hashStream hashValue printOn:Transcript base:16. Transcript cr.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
    hashStream nextPut:'dbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq' asByteArray.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
    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
   143
								[exEnd]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   145
								[exBegin]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
    |hashStream|
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
    hashStream := MD5Stream new.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
    1000000 timesRepeat:[ hashStream nextPut:$a ].
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
    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
   151
								[exEnd]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   153
								[exBegin]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
    |hashStream|
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
    hashStream := MD5Stream new.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
    hashStream nextPut:'a'.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
    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
   159
								[exEnd]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   161
								[exBegin]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
    |hashStream|
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
    hashStream := MD5Stream new.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
    hashStream nextPut:$a.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
    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
   167
								[exEnd]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   169
								[exBegin]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
    |hashStream|
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
    hashStream := MD5Stream new.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
    hashStream nextPut:'abc'.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
    hashStream hashValue printOn:Transcript base:16. Transcript cr.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
    hashStream reset.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
    hashStream nextPut:'abc'.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
    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
   178
								[exEnd]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
14667
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   180
  a collision:
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   181
								[exBegin]
13896
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   182
    |hashStream|
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   183
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   184
    hashStream := MD5Stream new.
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   185
    hashStream nextPut:(ByteArray fromHexStringWithSeparators:'
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   186
d131dd02c5e6eec4693d9a0698aff95c 2fcab58712467eab4004583eb8fb7f89
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   187
55ad340609f4b30283e488832571415a 085125e8f7cdc99fd91dbdf280373c5b
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   188
d8823e3156348f5bae6dacd436c919c6 dd53e2b487da03fd02396306d248cda0
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   189
e99f33420f577ee8ce54b67080a80d1e c69821bcb6a8839396f9652b6ff72a70').
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   190
    hashStream hashValue printOn:Transcript base:16. Transcript cr.
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   191
    hashStream reset.
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 nextPut:(ByteArray fromHexStringWithSeparators:'
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   194
d131dd02c5e6eec4693d9a0698aff95c 2fcab50712467eab4004583eb8fb7f89
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   195
55ad340609f4b30283e4888325f1415a 085125e8f7cdc99fd91dbd7280373c5b
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   196
d8823e3156348f5bae6dacd436c919c6 dd53e23487da03fd02396306d248cda0
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   197
e99f33420f577ee8ce54b67080280d1e c69821bcb6a8839396f965ab6ff72a70').
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   198
    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
   199
								[exEnd]
13896
f93b997ad55c changed:
Claus Gittinger <cg@exept.de>
parents: 13894
diff changeset
   200
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
  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
   202
								[exBegin]
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
    |hashStream n t|
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
    hashStream := MD5Stream new.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
    n := 1000000.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
    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
   208
	    n timesRepeat:[
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   209
		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
   210
	    ].
f6a830b971f3 care for externalAddress being NULL before accessing an external buffer's contents
Claus Gittinger <cg@exept.de>
parents: 13932
diff changeset
   211
	 ].
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
    t := (t / 1000) asFloat.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
    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
   214
    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
   215
								[exEnd]
7041
1c0516e1f72d add testVektors
penk
parents: 6864
diff changeset
   216
"
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
! !
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
!MD5Stream class methodsFor:'initialization'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   220
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
initialize
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
    |ctxSize|
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   223
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
%{
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 7197
diff changeset
   225
    ctxSize = __mkSmallInteger(sizeof(MD5_CTX));
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
    ContextSize := ctxSize.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
    HashSize := 16.
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
    "
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
	self initialize
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
! !
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
!MD5Stream class methodsFor:'queries'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
15624
11ce1e9cf098 Rename #blockSize to #hashBlockSize
Stefan Vogel <sv@exept.de>
parents: 14787
diff changeset
   240
hashBlockSize
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
    "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
   242
    
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
    ^ 64
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
    "Created: / 18.3.1999 / 08:36:44 / stefan"
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
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   248
hashSize
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   249
    "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
   250
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   251
    ^ HashSize
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
    "Created: / 18.3.1999 / 08:02:16 / stefan"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
! !
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
!MD5Stream methodsFor:'initialization'!
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
initialize
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
    hashContext := ByteArray new:ContextSize.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   261
    self reset.
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
    "Modified: / 18.3.1999 / 08:03:42 / stefan"
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
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   266
!MD5Stream methodsFor:'positioning'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   268
reset
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   269
   "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
   270
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   271
%{
14723
8657c48a4c03 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14716
diff changeset
   272
   if (__isByteArray(__INST(hashContext)) &&
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   273
       __byteArraySize(__INST(hashContext)) == sizeof(MD5_CTX)
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   274
   ) {
14723
8657c48a4c03 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14716
diff changeset
   275
	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
   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
%{
14723
8657c48a4c03 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14716
diff changeset
   300
    if (__isByteArray(__INST(hashContext)) &&
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
	__byteArraySize(__INST(hashContext)) == sizeof(MD5_CTX) &&
14723
8657c48a4c03 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14716
diff changeset
   302
	__isByteArray(digest) &&
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
	__byteArraySize(digest) == 16
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
    ) {
14723
8657c48a4c03 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14716
diff changeset
   305
	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
   306
	MD5_CTX copyContext;
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
	memcpy(&copyContext, ctx, sizeof(copyContext));
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
	MD5Final(__ByteArrayInstPtr(digest)->ba_element, &copyContext);
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
	RETURN(digest);
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
    }
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
%}.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   313
12265
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   314
    ^ self primitiveFailed
6864
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
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   317
!MD5Stream methodsFor:'writing'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   318
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   319
nextPutBytes:count from:anObject startingAt:start
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   320
    "update the hash value with count bytes from an object starting at index start.
12265
Claus Gittinger <cg@exept.de>
parents: 12256
diff changeset
   321
     The object must have non-pointer indexed instvars
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   322
     (i.e. be a ByteArray, String, Float- or DoubleArray),
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   323
     or an externalBytes object (with known size)"
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   324
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   325
%{
14723
8657c48a4c03 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14716
diff changeset
   326
    INT len, offs;
8657c48a4c03 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14716
diff changeset
   327
    INT objSize;
15988
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   328
    int nInstBytes;
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   329
    char *extPtr;
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   330
14723
8657c48a4c03 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14716
diff changeset
   331
    if (__isByteArray(__INST(hashContext))
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   332
       &&__byteArraySize(__INST(hashContext)) == sizeof(MD5_CTX)
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   333
       && __bothSmallInteger(count, start)
7197
a68adb223592 also handle subclasses of ExternalBytes (Mapped..)
Claus Gittinger <cg@exept.de>
parents: 7042
diff changeset
   334
    ) {
15988
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   335
        MD5_CTX *ctx = (MD5_CTX *)__ByteArrayInstPtr(__INST(hashContext))->ba_element;
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   336
15988
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   337
        len = __intVal(count);
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   338
        offs = __intVal(start) - 1;
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   339
15988
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   340
        if (__isExternalBytesLike(anObject)) {
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   341
            OBJ sz;
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   342
15988
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   343
            nInstBytes = 0;
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   344
            extPtr = (char *)__externalBytesAddress(anObject);
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   345
            if (extPtr == (char *)0) goto bad;
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   346
            sz = __externalBytesSize(anObject);
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   347
            if (__isSmallInteger(sz)) {
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   348
                objSize = __intVal(sz);
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   349
            } else {
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   350
                objSize = 0; /* unknown */
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   351
            }
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   352
        } else {
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   353
            OBJ oClass = __Class(anObject);
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   354
            int nInstVars = __intVal(__ClassInstPtr(oClass)->c_ninstvars);
7197
a68adb223592 also handle subclasses of ExternalBytes (Mapped..)
Claus Gittinger <cg@exept.de>
parents: 7042
diff changeset
   355
16003
251463ee7d9c class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15997
diff changeset
   356
            nInstBytes = OHDR_SIZE + __OBJS2BYTES__(nInstVars);
15988
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   357
            switch (__intVal(__ClassInstPtr(oClass)->c_flags) & ARRAYMASK) {
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   358
                case BYTEARRAY:
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   359
                case WORDARRAY:
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   360
                case LONGARRAY:
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   361
                case SWORDARRAY:
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   362
                case SLONGARRAY:
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   363
                case FLOATARRAY:
15992
24d68f700fdf class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15988
diff changeset
   364
                    break;
15988
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   365
                case DOUBLEARRAY:
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   366
#ifdef __NEED_DOUBLE_ALIGN
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   367
                    nInstBytes = (nInstBytes-1+__DOUBLE_ALIGN) &~ (__DOUBLE_ALIGN-1);
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   368
#endif
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   369
                    break;
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   370
                case LONGLONGARRAY:
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   371
                case SLONGLONGARRAY:
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   372
#ifdef __NEED_LONGLONG_ALIGN
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   373
                    nInstBytes = (nInstBytes-1+__LONGLONG_ALIGN) &~ (__LONGLONG_ALIGN-1);
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   374
#endif
15992
24d68f700fdf class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15988
diff changeset
   375
                    break;
15988
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   376
                default:
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   377
                    goto bad;
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   378
            }
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   379
            // nInstBytes is the number of bytes occupied by pointer instance variables
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   380
            // subtract from size and add to byte-pointer
16003
251463ee7d9c class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15997
diff changeset
   381
            objSize = __Size(anObject) - nInstBytes;
16008
25ae6c8526f6 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 16003
diff changeset
   382
            extPtr = (char *)anObject + nInstBytes;
15988
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   383
        }
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   384
        if ((offs >= 0) && (len >= 0) && (objSize >= (len + offs))) {
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   385
            MD5Update(ctx, extPtr+offs, len);
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   386
            RETURN (count);
c096b155b704 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 15624
diff changeset
   387
        }
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   388
    }
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   389
bad: ;
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   390
%}.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   391
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7041
diff changeset
   392
    ^ self primitiveFailed
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   393
! !
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   394
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   395
!MD5Stream class methodsFor:'documentation'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   396
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   397
version
16008
25ae6c8526f6 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 16003
diff changeset
   398
    ^ '$Header: /cvs/stx/stx/libbasic/MD5Stream.st,v 1.31 2014-02-12 15:25:16 stefan Exp $'
12204
e95118ee583f changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 10783
diff changeset
   399
!
e95118ee583f changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 10783
diff changeset
   400
e95118ee583f changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 10783
diff changeset
   401
version_CVS
16008
25ae6c8526f6 class: MD5Stream
Stefan Vogel <sv@exept.de>
parents: 16003
diff changeset
   402
    ^ '$Header: /cvs/stx/stx/libbasic/MD5Stream.st,v 1.31 2014-02-12 15:25:16 stefan Exp $'
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   403
! !
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   404
14716
19f1a850f981 class: MD5Stream
Claus Gittinger <cg@exept.de>
parents: 14668
diff changeset
   405
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   406
MD5Stream initialize!