eXept Software AG Logo

Smalltalk/X Webserver

Documentation of class 'SHA1Stream':

Home

Documentation
www.exept.de
Everywhere
for:
[back]

Class: SHA1Stream


Inheritance:

   Object
   |
   +--Stream
      |
      +--HashStream
         |
         +--SHA1Stream

Package:
stx:libbasic
Category:
System-Crypt-Hashing
Version:
rev: 1.58 date: 2019/03/23 20:45:49
user: cg
file: SHA1Stream.st directory: libbasic
module: stx stc-classLibrary: libbasic
Author:
Stefan Vogel

Description:


Generate a SHA-1 hash value as defined in
NIST, FIPS PUB 180-1: Secure Hash Standard, April 1995.

Notice (2005):
    Be aware that SHA-1 is considered broken and may not be appropriate in some applications.
    Especially it should no longer be used for security stuff.

performance: roughly
      200 Mb/s on a 2012 MAC Powerbook (2.6Ghz I7)
      150 Mb/s on a 2007 MAC Powerbook (2.6Ghz Duo)
      120 Mb/s on a 2.5Ghz 64X2 Athlon 4800+ (64bit)
       47400 Kb/s on a 2Ghz Duo (old measure)
        9580 Kb/s on a 400Mhz PIII
        3970 Kb/s on a 300Mhz Sparc



[class variables:]
    HashSize        size of returned hash value
    ContextSize     (implementation) size of hash context

[instance variables:]
    hashContext     (implementation)
                    internal buffer for computation of the hash value


Related information:

    MD5Stream
    SHA256Stream
    SHA512Stream
    (in
    libcrypt)

Class protocol:

initialization
o  initialize
self initialize

queries
o  hashBlockSize
return the block size used internally by the compression function

o  hashSize
return the size of the hashvalue returned by instances of this class


Instance protocol:

initialization
o  initialize
(comment from inherited method)
just to ignore initialize to objects which do not need it

positioning
o  reset
reset the stream in order to compute a new hash value

o  seedWith: fiveWordVector
seed the stream with 5*16 (for testing)

queries
o  hashValue
Get the value hashed so far.
The context is kept, so that more objects may be hashed after
retrieving a hash value

writing
o  nextPutByte: anInteger
update the hash value with anInteger <= 255.

o  nextPutBytes: count from: anObject startingAt: start
update the hash value with count bytes from an object starting at index start.
The object must have non-pointer indexed instvars
(i.e. be a ByteArray, String, Float- or DoubleArray),
or an externalBytes object (with known size)


Examples:


Test Vectors (from FIPS PUB 180-1); results are:
|hashStream|

hashStream := SHA1Stream new.
hashStream nextPut:'abc'.
hashStream hashValue printOn:Transcript base:16. Transcript cr.
hashStream nextPut:'dbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'.
hashStream hashValue printOn:Transcript base:16. Transcript cr.
|hashValue|

hashValue := SHA1Stream hashValueOf:'hello world'.
self assert:(hashValue hexPrintString = '2AAE6C35C94FCFB415DBE95F408B9CE91EE846ED')
|hashValue|

hashValue := SHA1Stream hashValueOf:'abc'.
hashValue printOn:Transcript base:16. Transcript cr.
|hashStream|

hashStream := SHA1Stream new.
hashStream nextPut:'abc' asByteArray.
hashStream hashValue printOn:Transcript base:16. Transcript cr.
hashStream nextPut:'dbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq' asByteArray.
hashStream hashValue printOn:Transcript base:16. Transcript cr.

|hashStream|

hashStream := SHA1Stream new.
1000000 timesRepeat:[ hashStream nextPut:$a ].
hashStream hashValue printOn:Transcript base:16. Transcript cr.
|hashStream|

hashStream := SHA1Stream new.
hashStream nextPut:'a'.
hashStream hashValue printOn:Transcript base:16. Transcript cr.
|hashStream|

hashStream := SHA1Stream new.
hashStream nextPut:$a.
hashStream hashValue printOn:Transcript base:16. Transcript cr.
timing throughput:
|hashStream n t|

hashStream := SHA1Stream new.
n := 1000000.
t := Time millisecondsToRun:[
        n timesRepeat:[
            hashStream nextPutAll:'12345678901234567890123456789012345678901234567890'.
        ].
     ].
t := (t / 1000) asFloat.
Transcript show:t; show:' seconds for '; show:(50*n/1024) asFloat; showCR:' Kb'.
Transcript show:(n*50/1024 / t); showCR:' Kb/s'


ST/X 7.2.0.0; WebServer 1.670 at bd0aa1f87cdd.unknown:8081; Tue, 07 Apr 2020 17:12:13 GMT