eXept Software AG Logo

Smalltalk/X Webserver

Documentation of class 'Base32Coder':

Home

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

Class: Base32Coder


Inheritance:

   Object
   |
   +--Visitor
      |
      +--AspectVisitor
         |
         +--ObjectCoder
            |
            +--BaseNCoder
               |
               +--Base32Coder

Package:
stx:libbasic2
Category:
System-Storage
Version:
rev: 1.7 date: 2018/09/30 13:55:17
user: cg
file: Base32Coder.st directory: libbasic2
module: stx stc-classLibrary: libbasic2
Author:
Stefan Vogel

Description:


Instances of this class perform Base32 en- and decoding as defined in RFC 3548
5 bytes are mapped to 8 characters, representing 5 bits each.



[instance variables:]

[class variables:]
    Base32Mapping         String   Mapping from bytes (with 5 valid bits)   
                                   to Base32 characters
    Base32ReverseMapping  Array    Mapping from Base32 characters to 5-bit-Bytes


Related information:



Class protocol:

initialization
o  initializeMappings
initialize class variables

usage example(s):

     Base32Mapping := nil.
     self initializeMappings

o  mapping

o  reverseMapping


Instance protocol:

encoding
o  nextPutByte: aByte
encode aByte on the output stream

misc
o  flush
flush the remaining bits of buffer.
The number of bits in buffer is not a multiple of 6, so we pad
the buffer and signal that padding has been done via $= characters.

private
o  fillBuffer
fill buffer with next 8 characters each representing 5 bits


Examples:


   |data1 text data2|

   data1 := #[0 1 16r7F 16r80 16r81 16rFE 16rFF].
   text := Base32Coder encode:data1.
   data2 := Base32Coder decode:text.
   self assert:(data2 = data1)
   |coder|

   coder := Base32Coder on:'' writeStream.
   coder nextPutAll:#[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19].
   coder flush.
   coder contents inspect.
   coder reset.
   coder nextPut:254.
   coder contents inspect.
   |coder decoder|

   coder := Base32Coder on:'' writeStream.
   coder nextPutAll:#[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20].
   coder flush.

   decoder := Base32Coder on:(coder contents readStream).
   [decoder atEnd] whileFalse:[
      Transcript show:decoder next
   ].
   Transcript cr.
   |coder|

   coder := Base32Coder on:'' writeStream.
   coder nextPutAll:(0 to:200) asByteArray.
   coder flush.

   Transcript showCR:(coder contents).
   |bytes encoded decoded|

   bytes := #[0 0 0] copy.
   0 to:255 do:[:b1 |
       Transcript showCR:b1.  
       bytes at:1 put:b1.  
       0 to:255 do:[:b2 |
           bytes at:2 put:b2.  
           0 to:255 do:[:b3 |
               bytes at:3 put:b3.  
               encoded := Base32Coder encode:bytes.
               decoded := Base32Coder decode:encoded.
               self assert:(decoded = bytes).
           ]
       ]
   ].


ST/X 7.2.0.0; WebServer 1.670 at bd0aa1f87cdd.unknown:8081; Sat, 27 Apr 2024 00:35:05 GMT