HashStream.st
author Claus Gittinger <cg@exept.de>
Tue, 09 Jul 2019 20:55:17 +0200
changeset 24417 03b083548da2
parent 24268 ec6569c964a0
child 24639 5029906439fe
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:
23381
e02ede0d6d8d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22564
diff changeset
     1
"{ Encoding: utf8 }"
e02ede0d6d8d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22564
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
"
7014
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
    14
"{ Package: 'stx:libbasic' }"
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
    15
19165
87e7d17b96e1 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 16869
diff changeset
    16
"{ NameSpace: Smalltalk }"
87e7d17b96e1 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 16869
diff changeset
    17
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
Stream subclass:#HashStream
7014
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
    19
	instanceVariableNames:''
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
    20
	classVariableNames:''
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
    21
	poolDictionaries:''
12418
720aa584e5cf category changes
Claus Gittinger <cg@exept.de>
parents: 12273
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
!HashStream class methodsFor:'documentation'!
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
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
 COPYRIGHT (c) 1999 by eXept Software AG
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
              All Rights Reserved
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
 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
    33
 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
    34
 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
    35
 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
    36
 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
    37
 hereby transferred.
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
!
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
documentation
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
"
22512
eccb82f4c3ad #OTHER by mawalch
mawalch
parents: 21394
diff changeset
    44
    Abstract class.
13910
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    45
    Subclasses generate hash values used as checksums
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
    or for generating cryptographic signatures.
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
13910
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    48
    Notice: due to historic reasons and compatibility with Squeak,
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    49
    there are two modes of operation:
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    50
        1) hashFunction mode, in which the hash of a single block of bytes is computed
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    51
        2) hashStream mode, in which instances behave like a writeStream, computing and
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    52
           updating the hash, as data is sent to it.
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    53
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    54
    hashFunction mode is called using: #hashValueOf:aStringOrByteArray
22512
eccb82f4c3ad #OTHER by mawalch
mawalch
parents: 21394
diff changeset
    55
    Warning: Not all subclasses support the stream mode
13910
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    56
             (especially those which were ported from squeak do not).
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    57
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
    [author:]
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
        Stefan Vogel
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
    [see also:]
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
        SHA1Stream MD5Stream
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
"
13910
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    64
!
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    65
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    66
examples
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    67
"
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    68
  hashFunction mode:
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    69
                                                                [exBegin]
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    70
    MD5Stream hashValueOf:'hello world'
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    71
    MD4Stream hashValueOf:'hello world'
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    72
                                                                [exEnd]
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    73
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    74
  hashStream mode:
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    75
                                                                [exBegin]
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    76
    |md5|
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    77
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    78
    md5 := MD5Stream new.
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    79
    md5 nextPutAll:'hello world'.
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    80
    md5 hashValue  
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    81
                                                                [exEnd]
6fa973ab48c0 added: #examples
Claus Gittinger <cg@exept.de>
parents: 13904
diff changeset
    82
"
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
! !
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
!HashStream class methodsFor:'instance creation'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
7015
862174119468 category change
penk
parents: 7014
diff changeset
    87
new
862174119468 category change
penk
parents: 7014
diff changeset
    88
    "have to re-allow new - it was disabled in Stream"
862174119468 category change
penk
parents: 7014
diff changeset
    89
    ^ self basicNew initialize
862174119468 category change
penk
parents: 7014
diff changeset
    90
862174119468 category change
penk
parents: 7014
diff changeset
    91
862174119468 category change
penk
parents: 7014
diff changeset
    92
!
862174119468 category change
penk
parents: 7014
diff changeset
    93
862174119468 category change
penk
parents: 7014
diff changeset
    94
random
862174119468 category change
penk
parents: 7014
diff changeset
    95
    "create a random number generator using myself"
862174119468 category change
penk
parents: 7014
diff changeset
    96
862174119468 category change
penk
parents: 7014
diff changeset
    97
    ^ HashRandom with:self
862174119468 category change
penk
parents: 7014
diff changeset
    98
862174119468 category change
penk
parents: 7014
diff changeset
    99
    "
862174119468 category change
penk
parents: 7014
diff changeset
   100
     SHA1Stream random next
862174119468 category change
penk
parents: 7014
diff changeset
   101
    "
862174119468 category change
penk
parents: 7014
diff changeset
   102
862174119468 category change
penk
parents: 7014
diff changeset
   103
    "Modified: / 12.11.1999 / 17:21:17 / stefan"
862174119468 category change
penk
parents: 7014
diff changeset
   104
! !
862174119468 category change
penk
parents: 7014
diff changeset
   105
22513
e1d595a76d37 #OTHER by mawalch
mawalch
parents: 22512
diff changeset
   106
!HashStream class methodsFor:'Compatibility-Squeak'!
12145
Stefan Vogel <sv@exept.de>
parents: 12142
diff changeset
   107
Stefan Vogel <sv@exept.de>
parents: 12142
diff changeset
   108
hashMessage:aStringOrByteArrayOrStream
12146
cc757f348884 comment/format in:
Stefan Vogel <sv@exept.de>
parents: 12145
diff changeset
   109
    "SQUEAK compatibility 
cc757f348884 comment/format in:
Stefan Vogel <sv@exept.de>
parents: 12145
diff changeset
   110
        - but this is a bad choice - squeak uses #digestMessage: at the instance side"
12145
Stefan Vogel <sv@exept.de>
parents: 12142
diff changeset
   111
Stefan Vogel <sv@exept.de>
parents: 12142
diff changeset
   112
    ^ self hashValueOf:aStringOrByteArrayOrStream
Stefan Vogel <sv@exept.de>
parents: 12142
diff changeset
   113
! !
Stefan Vogel <sv@exept.de>
parents: 12142
diff changeset
   114
12174
e40625636dd5 added: #canStream
Claus Gittinger <cg@exept.de>
parents: 12146
diff changeset
   115
!HashStream class methodsFor:'queries'!
e40625636dd5 added: #canStream
Claus Gittinger <cg@exept.de>
parents: 12146
diff changeset
   116
15622
79d968fa9f05 Rename #blockSize to #hashBlockSize
Stefan Vogel <sv@exept.de>
parents: 15621
diff changeset
   117
blockSize
79d968fa9f05 Rename #blockSize to #hashBlockSize
Stefan Vogel <sv@exept.de>
parents: 15621
diff changeset
   118
    "return the block size when the hash is used by encryption/decryption.
79d968fa9f05 Rename #blockSize to #hashBlockSize
Stefan Vogel <sv@exept.de>
parents: 15621
diff changeset
   119
     (see OfbCipherMode and CtrCipherMode)"
79d968fa9f05 Rename #blockSize to #hashBlockSize
Stefan Vogel <sv@exept.de>
parents: 15621
diff changeset
   120
79d968fa9f05 Rename #blockSize to #hashBlockSize
Stefan Vogel <sv@exept.de>
parents: 15621
diff changeset
   121
    ^ self hashSize
79d968fa9f05 Rename #blockSize to #hashBlockSize
Stefan Vogel <sv@exept.de>
parents: 15621
diff changeset
   122
!
79d968fa9f05 Rename #blockSize to #hashBlockSize
Stefan Vogel <sv@exept.de>
parents: 15621
diff changeset
   123
12174
e40625636dd5 added: #canStream
Claus Gittinger <cg@exept.de>
parents: 12146
diff changeset
   124
canStream
e40625636dd5 added: #canStream
Claus Gittinger <cg@exept.de>
parents: 12146
diff changeset
   125
    "simple hash functions (squeak-ported) cannot stream.
e40625636dd5 added: #canStream
Claus Gittinger <cg@exept.de>
parents: 12146
diff changeset
   126
     Use hashFunction: there"
e40625636dd5 added: #canStream
Claus Gittinger <cg@exept.de>
parents: 12146
diff changeset
   127
e40625636dd5 added: #canStream
Claus Gittinger <cg@exept.de>
parents: 12146
diff changeset
   128
    ^ true
13889
f335cf6d5783 added: #hashSize
Claus Gittinger <cg@exept.de>
parents: 13366
diff changeset
   129
!
f335cf6d5783 added: #hashSize
Claus Gittinger <cg@exept.de>
parents: 13366
diff changeset
   130
15622
79d968fa9f05 Rename #blockSize to #hashBlockSize
Stefan Vogel <sv@exept.de>
parents: 15621
diff changeset
   131
hashBlockSize
79d968fa9f05 Rename #blockSize to #hashBlockSize
Stefan Vogel <sv@exept.de>
parents: 15621
diff changeset
   132
    "return the block size used internally by the compression function"
79d968fa9f05 Rename #blockSize to #hashBlockSize
Stefan Vogel <sv@exept.de>
parents: 15621
diff changeset
   133
    
79d968fa9f05 Rename #blockSize to #hashBlockSize
Stefan Vogel <sv@exept.de>
parents: 15621
diff changeset
   134
    self subclassResponsibility
79d968fa9f05 Rename #blockSize to #hashBlockSize
Stefan Vogel <sv@exept.de>
parents: 15621
diff changeset
   135
!
79d968fa9f05 Rename #blockSize to #hashBlockSize
Stefan Vogel <sv@exept.de>
parents: 15621
diff changeset
   136
13889
f335cf6d5783 added: #hashSize
Claus Gittinger <cg@exept.de>
parents: 13366
diff changeset
   137
hashSize
13928
c344ee05a04c changed: #hashSize
Claus Gittinger <cg@exept.de>
parents: 13924
diff changeset
   138
    "return the size of the hashvalue returned by instances of this class (in bytes)"
c344ee05a04c changed: #hashSize
Claus Gittinger <cg@exept.de>
parents: 13924
diff changeset
   139
13889
f335cf6d5783 added: #hashSize
Claus Gittinger <cg@exept.de>
parents: 13366
diff changeset
   140
    self subclassResponsibility
f335cf6d5783 added: #hashSize
Claus Gittinger <cg@exept.de>
parents: 13366
diff changeset
   141
f335cf6d5783 added: #hashSize
Claus Gittinger <cg@exept.de>
parents: 13366
diff changeset
   142
    "Created: / 04-01-2012 / 19:22:32 / cg"
21394
52c5888621c2 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19644
diff changeset
   143
!
52c5888621c2 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19644
diff changeset
   144
52c5888621c2 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19644
diff changeset
   145
isAbstract
52c5888621c2 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19644
diff changeset
   146
    "Return if this class is an abstract class.
52c5888621c2 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19644
diff changeset
   147
     True is returned here for myself only; false for subclasses.
52c5888621c2 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19644
diff changeset
   148
     Abstract subclasses must redefine this again."
52c5888621c2 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19644
diff changeset
   149
52c5888621c2 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19644
diff changeset
   150
    ^ self == HashStream.
12174
e40625636dd5 added: #canStream
Claus Gittinger <cg@exept.de>
parents: 12146
diff changeset
   151
! !
e40625636dd5 added: #canStream
Claus Gittinger <cg@exept.de>
parents: 12146
diff changeset
   152
12146
cc757f348884 comment/format in:
Stefan Vogel <sv@exept.de>
parents: 12145
diff changeset
   153
!HashStream class methodsFor:'self tests'!
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   154
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   155
test
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   156
    "test against testVector"
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   157
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   158
    self testVector do:[:pair |
13924
450a2fe36142 changed: #test
Claus Gittinger <cg@exept.de>
parents: 13918
diff changeset
   159
        |data expectedHash expectedHashBytes computedHash hashStream|
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   160
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   161
        data := pair first.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   162
        expectedHash := pair second.
12753
3e6acf834564 changed: #test
Claus Gittinger <cg@exept.de>
parents: 12418
diff changeset
   163
        expectedHash isString ifTrue:[
3e6acf834564 changed: #test
Claus Gittinger <cg@exept.de>
parents: 12418
diff changeset
   164
            expectedHashBytes := ByteArray fromHexString:expectedHash
3e6acf834564 changed: #test
Claus Gittinger <cg@exept.de>
parents: 12418
diff changeset
   165
        ] ifFalse:[
3e6acf834564 changed: #test
Claus Gittinger <cg@exept.de>
parents: 12418
diff changeset
   166
            expectedHashBytes := expectedHash
3e6acf834564 changed: #test
Claus Gittinger <cg@exept.de>
parents: 12418
diff changeset
   167
        ].
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   168
13366
0e1bdf4f4156 changed: #test
Stefan Vogel <sv@exept.de>
parents: 12753
diff changeset
   169
        "/ non-stream interface must be implemented by all
13924
450a2fe36142 changed: #test
Claus Gittinger <cg@exept.de>
parents: 13918
diff changeset
   170
        computedHash := self hashValueOf:data.
450a2fe36142 changed: #test
Claus Gittinger <cg@exept.de>
parents: 13918
diff changeset
   171
        self assert:computedHash = expectedHashBytes message:'Test failed'.
12174
e40625636dd5 added: #canStream
Claus Gittinger <cg@exept.de>
parents: 12146
diff changeset
   172
        self canStream ifTrue:[
e40625636dd5 added: #canStream
Claus Gittinger <cg@exept.de>
parents: 12146
diff changeset
   173
            hashStream := self new.
e40625636dd5 added: #canStream
Claus Gittinger <cg@exept.de>
parents: 12146
diff changeset
   174
            hashStream nextPut:data.
13924
450a2fe36142 changed: #test
Claus Gittinger <cg@exept.de>
parents: 13918
diff changeset
   175
            computedHash := hashStream hashValue.
450a2fe36142 changed: #test
Claus Gittinger <cg@exept.de>
parents: 13918
diff changeset
   176
            self assert:computedHash = expectedHashBytes message:'Test failed'
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   177
        ].
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   178
    ].
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   179
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   180
    "
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   181
        MD5Stream test.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   182
        SHA1Stream test.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   183
        RipeMD160Stream test.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   184
    "
13924
450a2fe36142 changed: #test
Claus Gittinger <cg@exept.de>
parents: 13918
diff changeset
   185
450a2fe36142 changed: #test
Claus Gittinger <cg@exept.de>
parents: 13918
diff changeset
   186
    "Modified: / 10-01-2012 / 22:35:17 / cg"
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   187
!
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   188
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   189
testVector
13918
1452ea5f41f0 test stuff
Claus Gittinger <cg@exept.de>
parents: 13910
diff changeset
   190
    "/ obsolete - moved to TestHashAlgorithms unit test.
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   191
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   192
    ^ self subclassResponsibility
13918
1452ea5f41f0 test stuff
Claus Gittinger <cg@exept.de>
parents: 13910
diff changeset
   193
1452ea5f41f0 test stuff
Claus Gittinger <cg@exept.de>
parents: 13910
diff changeset
   194
    "Modified (comment): / 09-01-2012 / 21:49:59 / cg"
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   195
! !
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   196
7015
862174119468 category change
penk
parents: 7014
diff changeset
   197
!HashStream class methodsFor:'utilities'!
862174119468 category change
penk
parents: 7014
diff changeset
   198
19644
b1ca9bfcb4ac #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19439
diff changeset
   199
cryptBlock:aStringOrByteArray from:srcIdx to:srcEndOrNil into:resultOrNil startingAt:dstIdx encrypt:encryptMode
15621
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   200
    "one-way encryption of aStringOrByteArray.
19644
b1ca9bfcb4ac #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19439
diff changeset
   201
     Used when a HashStream is used as the block cipher with OFB or CTR mode.
15621
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   202
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   203
     encryptMode is ignored here."
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   204
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   205
    |hashValue|
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   206
19644
b1ca9bfcb4ac #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19439
diff changeset
   207
    (srcIdx == 1 and:[srcEndOrNil isNil]) ifTrue:[
15621
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   208
        hashValue := self hashValueOf:aStringOrByteArray.
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   209
    ] ifFalse:[
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   210
        |bytesToEncrypt|
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   211
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   212
        bytesToEncrypt := aStringOrByteArray copyFrom:srcIdx to:srcIdx+self hashSize-1.
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   213
        hashValue := self hashValueOf:bytesToEncrypt.
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   214
    ].
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   215
    resultOrNil isNil ifTrue:[
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   216
        ^ hashValue.
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   217
    ] ifFalse:[
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   218
        resultOrNil replaceBytesFrom:dstIdx to:dstIdx+hashValue size-1 with:hashValue startingAt:1.
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   219
        ^ resultOrNil.
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   220
    ].
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   221
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   222
    "
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   223
        |cipher iv cipherText|
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   224
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   225
        cipher := OfbCipher for:SHA512Stream.
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   226
        iv := cipher randomInitializationVector.
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   227
        cipherText := cipher encrypt:'Hello world, here is the alien from Mars and 1234567890' asByteArray.
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   228
        self information:cipherText printString.
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   229
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   230
        cipher initializationVector:iv.
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   231
        self information:(cipher decrypt:cipherText) asString.
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   232
    "
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   233
!
2a93f0420de1 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14842
diff changeset
   234
12145
Stefan Vogel <sv@exept.de>
parents: 12142
diff changeset
   235
digestMessage:aStringOrByteArrayOrStream
Stefan Vogel <sv@exept.de>
parents: 12142
diff changeset
   236
    ^ self hashValueOf:aStringOrByteArrayOrStream
Stefan Vogel <sv@exept.de>
parents: 12142
diff changeset
   237
!
Stefan Vogel <sv@exept.de>
parents: 12142
diff changeset
   238
23381
e02ede0d6d8d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22564
diff changeset
   239
hashValueHexString:aString
e02ede0d6d8d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22564
diff changeset
   240
    | hash |
e02ede0d6d8d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22564
diff changeset
   241
    
e02ede0d6d8d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22564
diff changeset
   242
    hash := self hashValueOf:aString.
e02ede0d6d8d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22564
diff changeset
   243
    ^ hash hexPrintString asLowercase
e02ede0d6d8d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22564
diff changeset
   244
e02ede0d6d8d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22564
diff changeset
   245
    "
e02ede0d6d8d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22564
diff changeset
   246
     MD5Stream hashValueHexString:'abc'
e02ede0d6d8d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22564
diff changeset
   247
    "
e02ede0d6d8d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22564
diff changeset
   248
e02ede0d6d8d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22564
diff changeset
   249
    "Created: / 23-09-2018 / 03:44:21 / Claus Gittinger"
e02ede0d6d8d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22564
diff changeset
   250
!
e02ede0d6d8d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22564
diff changeset
   251
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   252
hashValueOf:aStringOrByteArrayOrStream
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   253
    |hashStream|
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
    hashStream := self new.
13929
ef3fa2d52e05 changed: #hashValueOf:
Claus Gittinger <cg@exept.de>
parents: 13928
diff changeset
   256
    aStringOrByteArrayOrStream isStream ifTrue:[
ef3fa2d52e05 changed: #hashValueOf:
Claus Gittinger <cg@exept.de>
parents: 13928
diff changeset
   257
        aStringOrByteArrayOrStream copyToEndInto:hashStream.
ef3fa2d52e05 changed: #hashValueOf:
Claus Gittinger <cg@exept.de>
parents: 13928
diff changeset
   258
    ] ifFalse:[
ef3fa2d52e05 changed: #hashValueOf:
Claus Gittinger <cg@exept.de>
parents: 13928
diff changeset
   259
        hashStream nextPutAll:aStringOrByteArrayOrStream.
ef3fa2d52e05 changed: #hashValueOf:
Claus Gittinger <cg@exept.de>
parents: 13928
diff changeset
   260
    ].
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   261
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   262
    ^ hashStream hashValue
7014
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
   263
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
   264
    "
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
   265
     MD5Stream hashValueOf:'BlaBlaBla'
12146
cc757f348884 comment/format in:
Stefan Vogel <sv@exept.de>
parents: 12145
diff changeset
   266
     MD5Stream hashValueOf:('makefile' asFilename readStream)
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   267
     MD5Stream hashValueOf:('BlaBlaBla' readStream)
7014
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
   268
    "
13929
ef3fa2d52e05 changed: #hashValueOf:
Claus Gittinger <cg@exept.de>
parents: 13928
diff changeset
   269
ef3fa2d52e05 changed: #hashValueOf:
Claus Gittinger <cg@exept.de>
parents: 13928
diff changeset
   270
    "Modified: / 12-01-2012 / 12:14:44 / cg"
7014
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
   271
!
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
   272
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   273
hashValueOfFile:aFilename
12146
cc757f348884 comment/format in:
Stefan Vogel <sv@exept.de>
parents: 12145
diff changeset
   274
    |hash|
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   275
12146
cc757f348884 comment/format in:
Stefan Vogel <sv@exept.de>
parents: 12145
diff changeset
   276
    aFilename asFilename readingFileDo:[:readStream|
cc757f348884 comment/format in:
Stefan Vogel <sv@exept.de>
parents: 12145
diff changeset
   277
        readStream binary.
cc757f348884 comment/format in:
Stefan Vogel <sv@exept.de>
parents: 12145
diff changeset
   278
        hash := self hashValueOf:readStream.
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   279
    ].
12146
cc757f348884 comment/format in:
Stefan Vogel <sv@exept.de>
parents: 12145
diff changeset
   280
    ^ hash
7014
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
   281
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
   282
    "
12146
cc757f348884 comment/format in:
Stefan Vogel <sv@exept.de>
parents: 12145
diff changeset
   283
     MD5Stream hashValueOfFile:'makefile'
7014
c443479ee603 hashValueOf - generalized
penk
parents: 6864
diff changeset
   284
    "
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
22512
eccb82f4c3ad #OTHER by mawalch
mawalch
parents: 21394
diff changeset
   287
!HashStream methodsFor:'Compatibility-Squeak'!
eccb82f4c3ad #OTHER by mawalch
mawalch
parents: 21394
diff changeset
   288
eccb82f4c3ad #OTHER by mawalch
mawalch
parents: 21394
diff changeset
   289
digestMessage:bytes
eccb82f4c3ad #OTHER by mawalch
mawalch
parents: 21394
diff changeset
   290
    "SQUEAK: answer the digest of bytes"
eccb82f4c3ad #OTHER by mawalch
mawalch
parents: 21394
diff changeset
   291
eccb82f4c3ad #OTHER by mawalch
mawalch
parents: 21394
diff changeset
   292
    ^ self hashValueOf:bytes
22564
097f48409054 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22513
diff changeset
   293
!
097f48409054 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22513
diff changeset
   294
097f48409054 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22513
diff changeset
   295
hashMessage:bytes
097f48409054 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22513
diff changeset
   296
    "SQUEAK: answer the digest of bytes"
097f48409054 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22513
diff changeset
   297
097f48409054 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22513
diff changeset
   298
    ^ self hashValueOf:bytes
22512
eccb82f4c3ad #OTHER by mawalch
mawalch
parents: 21394
diff changeset
   299
! !
eccb82f4c3ad #OTHER by mawalch
mawalch
parents: 21394
diff changeset
   300
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
!HashStream methodsFor:'accessing'!
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
contents
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
    "return the entire contents of the stream
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
     - this is our hashValue."
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
    ^ self hashValue
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
    "Created: / 17.3.1999 / 15:10:03 / stefan"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
! !
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
!HashStream methodsFor:'not implemented'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   313
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   314
next
13904
1aacd72f4414 comment/format in: #next
Claus Gittinger <cg@exept.de>
parents: 13903
diff changeset
   315
    "I can only write"
1aacd72f4414 comment/format in: #next
Claus Gittinger <cg@exept.de>
parents: 13903
diff changeset
   316
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   317
    ^ self shouldNotImplement
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   318
13904
1aacd72f4414 comment/format in: #next
Claus Gittinger <cg@exept.de>
parents: 13903
diff changeset
   319
    "Created: / 17-03-1999 / 15:11:03 / stefan"
1aacd72f4414 comment/format in: #next
Claus Gittinger <cg@exept.de>
parents: 13903
diff changeset
   320
    "Modified (comment): / 09-01-2012 / 16:55:28 / cg"
6864
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
12142
1814d6072f33 new: #hmac, #digestMessage:
Stefan Vogel <sv@exept.de>
parents: 11799
diff changeset
   323
!HashStream methodsFor:'operations'!
1814d6072f33 new: #hmac, #digestMessage:
Stefan Vogel <sv@exept.de>
parents: 11799
diff changeset
   324
19165
87e7d17b96e1 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 16869
diff changeset
   325
hashValueOf:bytes
12142
1814d6072f33 new: #hmac, #digestMessage:
Stefan Vogel <sv@exept.de>
parents: 11799
diff changeset
   326
    "answer the digest of bytes"
1814d6072f33 new: #hmac, #digestMessage:
Stefan Vogel <sv@exept.de>
parents: 11799
diff changeset
   327
19165
87e7d17b96e1 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 16869
diff changeset
   328
    ^ self 
87e7d17b96e1 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 16869
diff changeset
   329
        reset;
87e7d17b96e1 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 16869
diff changeset
   330
        nextPutAll:bytes;
87e7d17b96e1 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 16869
diff changeset
   331
        hashValue.
12142
1814d6072f33 new: #hmac, #digestMessage:
Stefan Vogel <sv@exept.de>
parents: 11799
diff changeset
   332
1814d6072f33 new: #hmac, #digestMessage:
Stefan Vogel <sv@exept.de>
parents: 11799
diff changeset
   333
    "
1814d6072f33 new: #hmac, #digestMessage:
Stefan Vogel <sv@exept.de>
parents: 11799
diff changeset
   334
        SHA1Stream new 
19165
87e7d17b96e1 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 16869
diff changeset
   335
                hashValueOf:'123456789abcdefg';
87e7d17b96e1 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 16869
diff changeset
   336
                hashValueOf:'123456789abcdefg'
12273
96403b4aeb20 comment/format in: #digestMessage:
Stefan Vogel <sv@exept.de>
parents: 12174
diff changeset
   337
96403b4aeb20 comment/format in: #digestMessage:
Stefan Vogel <sv@exept.de>
parents: 12174
diff changeset
   338
        (SHA1Stream new hmac key:'123456') 
19165
87e7d17b96e1 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 16869
diff changeset
   339
                hashValueOf:'123456789abcdefg';
87e7d17b96e1 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 16869
diff changeset
   340
                hashValueOf:'123456789abcdefg'
12273
96403b4aeb20 comment/format in: #digestMessage:
Stefan Vogel <sv@exept.de>
parents: 12174
diff changeset
   341
96403b4aeb20 comment/format in: #digestMessage:
Stefan Vogel <sv@exept.de>
parents: 12174
diff changeset
   342
        (SHA1Stream new hmac key:'123456') 
96403b4aeb20 comment/format in: #digestMessage:
Stefan Vogel <sv@exept.de>
parents: 12174
diff changeset
   343
                nextPutAll:'123456789abcdefg';
96403b4aeb20 comment/format in: #digestMessage:
Stefan Vogel <sv@exept.de>
parents: 12174
diff changeset
   344
                contents
12142
1814d6072f33 new: #hmac, #digestMessage:
Stefan Vogel <sv@exept.de>
parents: 11799
diff changeset
   345
    "
1814d6072f33 new: #hmac, #digestMessage:
Stefan Vogel <sv@exept.de>
parents: 11799
diff changeset
   346
!
1814d6072f33 new: #hmac, #digestMessage:
Stefan Vogel <sv@exept.de>
parents: 11799
diff changeset
   347
1814d6072f33 new: #hmac, #digestMessage:
Stefan Vogel <sv@exept.de>
parents: 11799
diff changeset
   348
reset
1814d6072f33 new: #hmac, #digestMessage:
Stefan Vogel <sv@exept.de>
parents: 11799
diff changeset
   349
    "initialize to a clean state"
1814d6072f33 new: #hmac, #digestMessage:
Stefan Vogel <sv@exept.de>
parents: 11799
diff changeset
   350
1814d6072f33 new: #hmac, #digestMessage:
Stefan Vogel <sv@exept.de>
parents: 11799
diff changeset
   351
    ^ self subclassResponsibility
1814d6072f33 new: #hmac, #digestMessage:
Stefan Vogel <sv@exept.de>
parents: 11799
diff changeset
   352
! !
1814d6072f33 new: #hmac, #digestMessage:
Stefan Vogel <sv@exept.de>
parents: 11799
diff changeset
   353
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   354
!HashStream methodsFor:'queries'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   355
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   356
blockSize
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   357
    "the class knows about the basic block size"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   358
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   359
    ^ self class blockSize
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   360
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   361
    "Created: / 18.3.1999 / 10:17:02 / stefan"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   362
!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   363
15622
79d968fa9f05 Rename #blockSize to #hashBlockSize
Stefan Vogel <sv@exept.de>
parents: 15621
diff changeset
   364
hashBlockSize
79d968fa9f05 Rename #blockSize to #hashBlockSize
Stefan Vogel <sv@exept.de>
parents: 15621
diff changeset
   365
    "the class knows about the basic block size"
79d968fa9f05 Rename #blockSize to #hashBlockSize
Stefan Vogel <sv@exept.de>
parents: 15621
diff changeset
   366
    
79d968fa9f05 Rename #blockSize to #hashBlockSize
Stefan Vogel <sv@exept.de>
parents: 15621
diff changeset
   367
    ^ self class hashBlockSize
79d968fa9f05 Rename #blockSize to #hashBlockSize
Stefan Vogel <sv@exept.de>
parents: 15621
diff changeset
   368
!
79d968fa9f05 Rename #blockSize to #hashBlockSize
Stefan Vogel <sv@exept.de>
parents: 15621
diff changeset
   369
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   370
hashSize
13928
c344ee05a04c changed: #hashSize
Claus Gittinger <cg@exept.de>
parents: 13924
diff changeset
   371
    "return the size of the returned hashvalue (in bytes)"
c344ee05a04c changed: #hashSize
Claus Gittinger <cg@exept.de>
parents: 13924
diff changeset
   372
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   373
    "the class knows about the basic hash size"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   374
    ^ self class hashSize
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   375
13928
c344ee05a04c changed: #hashSize
Claus Gittinger <cg@exept.de>
parents: 13924
diff changeset
   376
    "Created: / 18-03-1999 / 10:17:12 / stefan"
c344ee05a04c changed: #hashSize
Claus Gittinger <cg@exept.de>
parents: 13924
diff changeset
   377
    "Modified: / 15-10-1999 / 11:53:20 / stefan"
c344ee05a04c changed: #hashSize
Claus Gittinger <cg@exept.de>
parents: 13924
diff changeset
   378
    "Modified (comment): / 11-01-2012 / 10:12:09 / cg"
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   379
!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   380
7251
0ef2a2a16faa *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 7042
diff changeset
   381
hashValue
13969
b5df2d4c7581 added: #hashValueOf:
Claus Gittinger <cg@exept.de>
parents: 13929
diff changeset
   382
    "return the value of the computed hash"
7251
0ef2a2a16faa *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 7042
diff changeset
   383
0ef2a2a16faa *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 7042
diff changeset
   384
    ^ self subclassResponsibility
13969
b5df2d4c7581 added: #hashValueOf:
Claus Gittinger <cg@exept.de>
parents: 13929
diff changeset
   385
b5df2d4c7581 added: #hashValueOf:
Claus Gittinger <cg@exept.de>
parents: 13929
diff changeset
   386
    "Modified (comment): / 23-01-2012 / 10:01:20 / cg"
b5df2d4c7581 added: #hashValueOf:
Claus Gittinger <cg@exept.de>
parents: 13929
diff changeset
   387
!
b5df2d4c7581 added: #hashValueOf:
Claus Gittinger <cg@exept.de>
parents: 13929
diff changeset
   388
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   389
isReadable
19439
6015d8264192 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19399
diff changeset
   390
    "return true, if reading is supported by the receiver.
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   391
     Always return false here"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   392
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   393
    ^ false
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
    "Modified: / 17.3.1999 / 15:06:09 / stefan"
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
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   398
isWritable
19439
6015d8264192 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19399
diff changeset
   399
    "return true, if writing is supported by the receiver.
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   400
     Always return true here"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   401
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   402
    ^ true
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
    "Created: / 17.3.1999 / 15:05:49 / stefan"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   405
! !
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   406
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   407
!HashStream methodsFor:'testing'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   408
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   409
atEnd
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   410
    "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
   411
    this is never reached"
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
    ^ false
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   414
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   415
    "Created: / 17.3.1999 / 15:08:55 / stefan"
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   416
! !
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   417
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   418
!HashStream methodsFor:'writing'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   419
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   420
nextPut:anObject
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   421
    "add the hash of anObject to the computed hash so far.
13903
f2b227a2fcaa changed:
Claus Gittinger <cg@exept.de>
parents: 13901
diff changeset
   422
     anObject can be a Character, SmallInteger ByteArray or String"
f2b227a2fcaa changed:
Claus Gittinger <cg@exept.de>
parents: 13901
diff changeset
   423
f2b227a2fcaa changed:
Claus Gittinger <cg@exept.de>
parents: 13901
diff changeset
   424
    anObject isByteCollection ifTrue:[
f2b227a2fcaa changed:
Claus Gittinger <cg@exept.de>
parents: 13901
diff changeset
   425
        self nextPutBytes:(anObject byteSize) from:anObject startingAt:1.
f2b227a2fcaa changed:
Claus Gittinger <cg@exept.de>
parents: 13901
diff changeset
   426
        ^ self.
f2b227a2fcaa changed:
Claus Gittinger <cg@exept.de>
parents: 13901
diff changeset
   427
    ].
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   428
13903
f2b227a2fcaa changed:
Claus Gittinger <cg@exept.de>
parents: 13901
diff changeset
   429
    anObject isCharacter ifTrue:[
19399
e51189dbeba1 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19165
diff changeset
   430
        "/ only 8bit chars are allowed !!
e51189dbeba1 #REFACTORING
Stefan Vogel <sv@exept.de>
parents: 19165
diff changeset
   431
        self nextPutBytes:1 from:(ByteArray with:anObject codePoint) startingAt:1.
13903
f2b227a2fcaa changed:
Claus Gittinger <cg@exept.de>
parents: 13901
diff changeset
   432
        ^ self.
f2b227a2fcaa changed:
Claus Gittinger <cg@exept.de>
parents: 13901
diff changeset
   433
    ].
f2b227a2fcaa changed:
Claus Gittinger <cg@exept.de>
parents: 13901
diff changeset
   434
f2b227a2fcaa changed:
Claus Gittinger <cg@exept.de>
parents: 13901
diff changeset
   435
    anObject isInteger ifTrue:[
16869
3b9768c47331 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 15622
diff changeset
   436
        self nextPutBytes:anObject digitBytes.
3b9768c47331 class: HashStream
Stefan Vogel <sv@exept.de>
parents: 15622
diff changeset
   437
        ^ self.
13903
f2b227a2fcaa changed:
Claus Gittinger <cg@exept.de>
parents: 13901
diff changeset
   438
    ].
f2b227a2fcaa changed:
Claus Gittinger <cg@exept.de>
parents: 13901
diff changeset
   439
24268
ec6569c964a0 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 23381
diff changeset
   440
    ArgumentError raise
13903
f2b227a2fcaa changed:
Claus Gittinger <cg@exept.de>
parents: 13901
diff changeset
   441
f2b227a2fcaa changed:
Claus Gittinger <cg@exept.de>
parents: 13901
diff changeset
   442
    "Modified (comment): / 09-01-2012 / 16:54:05 / cg"
24268
ec6569c964a0 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 23381
diff changeset
   443
    "Modified: / 06-06-2019 / 23:19:25 / Claus Gittinger"
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   444
!
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   445
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   446
nextPutAll:aCollection
19165
87e7d17b96e1 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 16869
diff changeset
   447
    "Hash streams handle Strings and ByteArrays in #nextPutBytes:"
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   448
11799
2cbd0a5e7c64 changed #nextPutAll:
Stefan Vogel <sv@exept.de>
parents: 7251
diff changeset
   449
    aCollection isByteCollection ifTrue:[
13900
0dc22ed6d46f changed: #nextPutAll:
Claus Gittinger <cg@exept.de>
parents: 13889
diff changeset
   450
        self nextPutBytes:(aCollection byteSize) from:aCollection startingAt:1.
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   451
    ] ifFalse:[
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   452
        super nextPutAll:aCollection
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   453
    ].
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   454
13900
0dc22ed6d46f changed: #nextPutAll:
Claus Gittinger <cg@exept.de>
parents: 13889
diff changeset
   455
    "Created: / 14-10-1999 / 11:22:50 / stefan"
0dc22ed6d46f changed: #nextPutAll:
Claus Gittinger <cg@exept.de>
parents: 13889
diff changeset
   456
    "Modified: / 09-01-2012 / 13:02:44 / cg"
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   457
!
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   458
19165
87e7d17b96e1 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 16869
diff changeset
   459
nextPutByte:aByte
87e7d17b96e1 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 16869
diff changeset
   460
    "add the hash of anObject to the computed hash so far.
87e7d17b96e1 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 16869
diff changeset
   461
     aByte can be a SmallInteger <= 255"
87e7d17b96e1 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 16869
diff changeset
   462
87e7d17b96e1 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 16869
diff changeset
   463
    self nextPutBytes:1 from:(ByteArray with:aByte) startingAt:1.
87e7d17b96e1 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 16869
diff changeset
   464
!
87e7d17b96e1 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 16869
diff changeset
   465
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   466
nextPutBytes:count from:anObject startingAt:start
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   467
    "write count bytes from an object starting at index start.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   468
     Return the number of bytes written.
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   469
     The object must have non-pointer indexed instvars 
13903
f2b227a2fcaa changed:
Claus Gittinger <cg@exept.de>
parents: 13901
diff changeset
   470
     (i.e. be a ByteArray, String, Float- or DoubleArray)."
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   471
13903
f2b227a2fcaa changed:
Claus Gittinger <cg@exept.de>
parents: 13901
diff changeset
   472
    self subclassResponsibility
7042
dbb7898901e3 Fix #hashValueOf:
Stefan Vogel <sv@exept.de>
parents: 7015
diff changeset
   473
13903
f2b227a2fcaa changed:
Claus Gittinger <cg@exept.de>
parents: 13901
diff changeset
   474
    "Modified: / 09-01-2012 / 16:41:31 / cg"
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   475
! !
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   476
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   477
!HashStream class methodsFor:'documentation'!
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   478
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   479
version
19165
87e7d17b96e1 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 16869
diff changeset
   480
    ^ '$Header$'
12142
1814d6072f33 new: #hmac, #digestMessage:
Stefan Vogel <sv@exept.de>
parents: 11799
diff changeset
   481
!
1814d6072f33 new: #hmac, #digestMessage:
Stefan Vogel <sv@exept.de>
parents: 11799
diff changeset
   482
1814d6072f33 new: #hmac, #digestMessage:
Stefan Vogel <sv@exept.de>
parents: 11799
diff changeset
   483
version_CVS
19165
87e7d17b96e1 #FEATURE
Stefan Vogel <sv@exept.de>
parents: 16869
diff changeset
   484
    ^ '$Header$'
6864
0d5bd7218853 MD5 stuff now in base system
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   485
! !
14842
8f7ca0be2aed class: HashStream
Stefan Vogel <sv@exept.de>
parents: 14453
diff changeset
   486