home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-07-19 | 1.5 KB | 65 lines | [TEXT/CWIE] |
- unit MyBase64;
-
- interface
-
- uses
- Types;
-
- function DecodeBase64( const src: Str255; var dst: Str255 ): Boolean;
-
- implementation
-
- uses
- MyAssertions;
-
- const
- base64_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
- base64_pad = '=';
-
- function DecodeBase64( const src: Str255; var dst: Str255 ): Boolean;
- var
- map: array[char] of integer;
- ch: char;
- i, base: integer;
- n: longint;
- good: boolean;
- begin
- Assert( length(base64_chars) = 64 );
- for ch := chr(0) to chr(255) do begin
- map[ch] := -1;
- end;
- for i := 1 to 64 do begin
- map[base64_chars[i]] := i -1;
- end;
- map[base64_pad] := 0;
- dst := '';
- good := true;
- for i := 1 to length(src) div 4 do begin
- base := i*4-3;
- if (map[src[base]] >= 0) & (map[src[base+1]] >= 0) & (map[src[base+2]] >= 0) & (map[src[base+3]] >= 0) then begin
- n := bsl(map[src[base]], 18) + bsl(map[src[base+1]], 12) + bsl(map[src[base+2]], 6) + map[src[base+3]];
- dst := concat( dst, chr( band( bsr(n, 16), $00FF) ) );
- if src[base+2] <> base64_pad then begin
- dst := concat( dst, chr( band( bsr(n, 8), $00FF) ) );
- end;
- if src[base+3] <> base64_pad then begin
- dst := concat( dst, chr( band( bsr(n, 0), $00FF) ) );
- end;
- end else begin
- good := false;
- leave;
- end;
- end;
- if not good then begin
- dst := '';
- end;
- DecodeBase64 := good;
- end;
-
- end.
-
- Authorization: Basic c3F1ZWFtaXNoOm9zc2lmcmFnZQ==
-
-
- The username used above should be "squeamish" and the password "ossifrage".
-