Base64UrlCoder.st
author Claus Gittinger <cg@exept.de>
Tue, 25 Jun 2019 14:28:51 +0200
changeset 5050 44fa8672d102
parent 4744 ed3d184041f4
child 5377 21cb5f70fbd5
permissions -rw-r--r--
#DOCUMENTATION by cg class: SharedQueue comment/format in: #next #nextWithTimeout:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4744
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:libbasic2' }"
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
"{ NameSpace: Smalltalk }"
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
Base64Coder subclass:#Base64UrlCoder
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	instanceVariableNames:''
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	classVariableNames:'Base64UrlMapping Base64UrlReverseMapping'
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
	poolDictionaries:''
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
	category:'System-Storage'
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
!
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
!Base64UrlCoder class methodsFor:'documentation'!
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
documentation
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
"
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
    A variant of base64 encoding which generates url- and filename save encodings.
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
    Same as Base64 except that instead of plus and slash, minus and underline are generated.
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
    The main entry point API is
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
        Base64UrlCoder encode:aStringOrBytes
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
    and
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
        Base64UrlCoder decode:aString
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
    If the decoder should return a string, use
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
        Base64UrlCoder decodeAsString:aString.
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
    [author:]
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
        Claus Gittinger
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
    [see also:]
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
        RFC https://tools.ietf.org/html/rfc4648
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
    [instance variables:]
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
    [class variables:]
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
        Base64UrlMapping         String   Mapping from bytes (with 6 valid bits)
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
                                          to Base64Url characters
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
        Base64UrlReverseMapping  Array    Mapping from Base64Url characters to 6-bit-Bytes
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
"
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
!
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
examples
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
"
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
                                                                [exBegin]
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
   (Base64Coder encode:#[0 0 16r3F]) = 'AAA/'
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
                                                                [exEnd]
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
                                                                [exBegin]
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
   (Base64Coder decode:'AAA/') = #[0 0 63]
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
                                                                [exEnd]
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
                                                                [exBegin]
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
   (Base64UrlCoder encode:#[0 0 16r3F]) = 'AAA_'
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
                                                                [exEnd]
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
                                                                [exBegin]
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
   (Base64UrlCoder decode:'AAA_') = #[0 0 63]
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
                                                                [exEnd]
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
"
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
! !
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
!Base64UrlCoder class methodsFor:'initialization'!
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
initializeMappings
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
    "initialize class variables"
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
    Base64UrlMapping isNil ifTrue:[
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
        "65 characters representing the 6-bit values from 0-63 and one pad character"
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
        "/ notice: minus and underline instead of plus and slash
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
        Base64UrlMapping := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_='.
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
        Base64UrlReverseMapping := self reverseMappingFor:Base64UrlMapping.
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
    ].
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
    "
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
     Base64UrlMapping := nil.
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
     self initializeMappings
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
    "
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
    "Created: / 30-09-2018 / 15:20:47 / Claus Gittinger"
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
!
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
mapping
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
    ^ Base64UrlMapping
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
    "Created: / 30-09-2018 / 15:31:14 / Claus Gittinger"
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
!
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
reverseMapping
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
    ^ Base64UrlReverseMapping
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
    "Created: / 30-09-2018 / 15:31:21 / Claus Gittinger"
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
! !
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
!Base64UrlCoder class methodsFor:'documentation'!
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
version_CVS
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
    ^ '$Header$'
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
! !
ed3d184041f4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97