HashStream.st
author Stefan Vogel <sv@exept.de>
Mon, 05 May 2003 14:58:46 +0200
changeset 7251 0ef2a2a16faa
parent 7042 dbb7898901e3
child 11799 2cbd0a5e7c64
child 17711 39faaaf888b4
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
 COPYRIGHT (c) 1999 by eXept Software AG
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
              All Rights Reserved
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
 This software is furnished under a license and may be used
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
 hereby transferred.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
7014
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
    13
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
    14
"{ Package: 'stx:libbasic' }"
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
    15
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
Stream subclass:#HashStream
7014
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
    17
	instanceVariableNames:''
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
    18
	classVariableNames:''
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
    19
	poolDictionaries:''
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
    20
	category:'System-Crypt-Streams'
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
!
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
!HashStream class methodsFor:'documentation'!
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
copyright
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
 COPYRIGHT (c) 1999 by eXept Software AG
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
              All Rights Reserved
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
 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
    31
 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
    32
 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
    33
 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
    34
 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
    35
 hereby transferred.
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
!
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
documentation
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
    Abstract class. Subclasses generate hash values used as checksums
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
    or for generating cryptographic signatures.
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
    [author:]
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
        Stefan Vogel
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
    [see also:]
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
        SHA1Stream MD5Stream
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
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
!HashStream class methodsFor:'instance creation'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
7015
862174119468 category change
penk
parents: 7014
diff changeset
    55
new
862174119468 category change
penk
parents: 7014
diff changeset
    56
    "have to re-allow new - it was disabled in Stream"
862174119468 category change
penk
parents: 7014
diff changeset
    57
    ^ self basicNew initialize
862174119468 category change
penk
parents: 7014
diff changeset
    58
862174119468 category change
penk
parents: 7014
diff changeset
    59
862174119468 category change
penk
parents: 7014
diff changeset
    60
!
862174119468 category change
penk
parents: 7014
diff changeset
    61
862174119468 category change
penk
parents: 7014
diff changeset
    62
random
862174119468 category change
penk
parents: 7014
diff changeset
    63
    "create a random number generator using myself"
862174119468 category change
penk
parents: 7014
diff changeset
    64
862174119468 category change
penk
parents: 7014
diff changeset
    65
    ^ HashRandom with:self
862174119468 category change
penk
parents: 7014
diff changeset
    66
862174119468 category change
penk
parents: 7014
diff changeset
    67
    "
862174119468 category change
penk
parents: 7014
diff changeset
    68
     SHA1Stream random next
862174119468 category change
penk
parents: 7014
diff changeset
    69
    "
862174119468 category change
penk
parents: 7014
diff changeset
    70
862174119468 category change
penk
parents: 7014
diff changeset
    71
    "Modified: / 12.11.1999 / 17:21:17 / stefan"
862174119468 category change
penk
parents: 7014
diff changeset
    72
! !
862174119468 category change
penk
parents: 7014
diff changeset
    73
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
    74
!HashStream class methodsFor:'testing'!
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
    75
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
    76
test
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
    77
    "test against testVector"
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
    78
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
    79
    self testVector do:[:pair |
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
    80
        |data expectedHash hashStream|
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
    81
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
    82
        data := pair first.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
    83
        expectedHash := pair second.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
    84
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
    85
        hashStream := self new.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
    86
        hashStream nextPut:data.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
    87
        hashStream hashValue ~= expectedHash ifTrue:[
7251
0ef2a2a16faa *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 7042
diff changeset
    88
            self error:'Test failed'
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
    89
        ].
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
    90
        (self hashValueOf:data) ~= expectedHash ifTrue:[
7251
0ef2a2a16faa *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 7042
diff changeset
    91
            self error:'Test failed'
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
    92
        ].
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
    93
    ].
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
    94
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
    95
    "
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
    96
        MD5Stream test.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
    97
        SHA1Stream test.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
    98
        RipeMD160Stream test.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
    99
    "
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   100
!
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   101
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   102
testVector
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   103
    "define a testvector to test the implementation"
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   104
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   105
    ^ self subclassResponsibility
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   106
! !
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   107
7015
862174119468 category change
penk
parents: 7014
diff changeset
   108
!HashStream class methodsFor:'utilities'!
862174119468 category change
penk
parents: 7014
diff changeset
   109
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   110
hashValueOf:aStringOrByteArrayOrStream
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   111
    |hashStream|
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   112
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   113
    hashStream := self new.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   114
    aStringOrByteArrayOrStream readStream copyToEndInto:hashStream.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   115
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   116
    ^ hashStream hashValue
7014
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
   117
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
   118
    "
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
   119
     MD5Stream hashValueOf:'BlaBlaBla'
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   120
     MD5Stream hashValueOf:('Makefile' asFilename readStream)
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   121
     MD5Stream hashValueOf:('BlaBlaBla' readStream)
7014
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
   122
    "
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
   123
!
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
   124
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
hashValueOfFile:aFilename
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   126
    |stream hash|
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   127
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   128
    [
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   129
        stream := aFilename asFilename readStream.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   130
        stream binary.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   131
        hash := self hashValueOf:stream.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   132
    ] ensure:[
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   133
        stream notNil ifTrue:[
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   134
            stream close
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   135
        ].
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   136
    ].
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   137
    ^ hash.
7014
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
   138
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
   139
    "
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
   140
     MD5Stream hashValueOfFile:'Makefile'
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
   141
    "
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
! !
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
!HashStream methodsFor:'accessing'!
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
contents
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
    "return the entire contents of the stream
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
     - this is our hashValue."
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
    ^ self hashValue
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
    "Created: / 17.3.1999 / 15:10:03 / stefan"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
! !
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
!HashStream methodsFor:'not implemented'!
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
next
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
    ^ self shouldNotImplement
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
    "Created: / 17.3.1999 / 15:11:03 / stefan"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
! !
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
!HashStream methodsFor:'queries'!
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
blockSize
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
    "the class knows about the basic block size"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
    ^ self class blockSize
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
    "Created: / 18.3.1999 / 10:17:02 / stefan"
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
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
hashSize
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
    "the class knows about the basic hash size"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
    ^ self class hashSize
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
    "Created: / 18.3.1999 / 10:17:12 / stefan"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
    "Modified: / 15.10.1999 / 11:53:20 / stefan"
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
7251
0ef2a2a16faa *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 7042
diff changeset
   182
hashValue
0ef2a2a16faa *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 7042
diff changeset
   183
    "retunr the value of the computeted hash"
0ef2a2a16faa *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 7042
diff changeset
   184
0ef2a2a16faa *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 7042
diff changeset
   185
    ^ self subclassResponsibility
0ef2a2a16faa *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 7042
diff changeset
   186
!
0ef2a2a16faa *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 7042
diff changeset
   187
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
isReadable
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
    "return true, if reading is supported by the recevier.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
     Always return false here"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
    ^ false
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
    "Modified: / 17.3.1999 / 15:06:09 / stefan"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   195
!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
isWritable
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
    "return true, if writing is supported by the recevier.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
     Always return true here"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   200
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
    ^ true
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
    "Created: / 17.3.1999 / 15:05:49 / stefan"
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
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
!HashStream methodsFor:'testing'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
atEnd
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
    "return true if the end of the stream has been reached;
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
    this is never reached"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
    ^ false
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
    "Created: / 17.3.1999 / 15:08:55 / stefan"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
! !
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
!HashStream methodsFor:'writing'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   219
nextPut:anObject
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   220
    "add the hash of anObject to the computed hash so far.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   221
     anObject can be a Character, SmallInteger, or Character-, Byte-
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   222
     Integer-Array"
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   223
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   224
    ^ self subclassResponsibility
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   225
!
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   226
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
nextPutAll:aCollection
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
    "Hash streams handle Strings and ByteArrays in nextPut:"
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
    aCollection class isBytes ifTrue:[
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
        self nextPut:aCollection.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
    ] ifFalse:[
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
        super nextPutAll:aCollection
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
    "Created: / 14.10.1999 / 11:22:50 / stefan"
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   237
!
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   238
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   239
nextPutBytes:count from:anObject startingAt:start
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   240
    "write count bytes from an object starting at index start.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   241
     Return the number of bytes written.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   242
     The object must have non-pointer indexed instvars 
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   243
     (i.e. be a ByteArray, String, Float- or DoubleArray).     
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   244
     Use with care - non object oriented i/o.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   245
     This is provided for compatibility with externalStream;
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   246
     to support binary storage.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   247
7251
0ef2a2a16faa *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 7042
diff changeset
   248
     Redefined, because HashStream encodes integers as 4 bytes.
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   249
     You should implement this method in subclasses"
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   250
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   251
    |idx|
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   252
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   253
    "self subclassResponsibility"
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   254
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   255
    idx := start.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   256
    1 to:count do:[:i |
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   257
        self nextPut:(anObject byteAt:idx) asCharacter.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   258
        idx := idx + 1
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   259
    ].
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   260
    ^ count
6864
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
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   263
!HashStream class methodsFor:'documentation'!
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
version
7251
0ef2a2a16faa *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 7042
diff changeset
   266
    ^ '$Header: /cvs/stx/stx/libbasic/HashStream.st,v 1.5 2003-05-05 12:58:46 stefan Exp $'
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
! !