eXept Software AG Logo

Smalltalk/X Webserver

Documentation of class 'SHA1Stream':

Home

everywhere
www.exept.de
for:
[back]

Class: SHA1Stream


Inheritance:

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

Package:
stx:libbasic
Category:
System-Crypt-Hashing
Version:
rev: 1.19 date: 2010/04/13 14:36:36
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.
This may be used as checksum
or for generating cryptographic signatures.

performance: roughly
       47400 Kb/s on a 2Ghz Duo
        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

Class protocol:

initialization
o  initialize

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

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

testing
o  testVector
Test Vectors (from FIPS PUB 180-1)


Instance protocol:

initialization
o  initialize

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

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  nextPut: anObject
update our hash value for anObject.
anObject may be a String, a Character, a Smallinteger or an Array of primitive
types like ByteArray.

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|

hahValue := 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 6.1.1; WebServer 1.620 at exept:8081; Wed, 23 May 2012 21:00:01 GMT