https://github.com/tleguern/libencode.sh
Binary to text encoding in Shell scripts.
https://github.com/tleguern/libencode.sh
base32 base32hex base64 shell
Last synced: 6 months ago
JSON representation
Binary to text encoding in Shell scripts.
- Host: GitHub
- URL: https://github.com/tleguern/libencode.sh
- Owner: tleguern
- License: isc
- Created: 2015-02-12T10:10:22.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2022-02-02T20:42:06.000Z (over 3 years ago)
- Last Synced: 2025-02-13T09:18:09.073Z (8 months ago)
- Topics: base32, base32hex, base64, shell
- Language: Shell
- Homepage:
- Size: 59.6 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# libencode.sh
Base64 family of binary-to-text encoding algorithms implemented in shell.
## Contents
1. [Libraries](#libraries)
2. [Compatibility](#compatibility)
3. [Requirements](#requirements)
4. [Demo](#demo)
5. [License](#license)## Libraries
* `encode.sh` is a general purpose library exposing various functionalities like conversion from decimal to binary or string padding. It exports the following functions:
* `enum`
* `leftpad`
* `rightpad`
* `ord`
* `chr`
* `dectobin`
* `bintodec`
* `dectohex`
* `swap32`
* `base64.sh` implements the Base64, Base64 URL, Base32, Base32 Hex and Base16 encoding algorithms. The following functions are considered public:
* `base64_encode`
* `base64url_encode`
* `base32_encode`
* `base32hex_encode`
* `base16_encode`
* `hex_encode`## Compatibility
libencode.sh targets shells supporting the KSH “local” extension.
It is therefore known to run with the following shells:* Debian Almquist SHell - dash ;
* GNU Bourne-Again SHell - bash ;
* MirBSD Korn SHell - mksh ;
* OpenBSD Korn SHell - oksh ;
* Yet Another SHell - yash.Additionally zsh is fully compatible with `encode.sh` but doesn't work well with `base64.sh`.
In both case the option `SH_WORD_SPLIT` must be activated.## Requirements
The following utilities are needed by libencode:
* printf (built-in shell version is fine) ;
* bc ;
* cut ;
* grep ;
* jot or seq ;
* sed.## Demo
A simple script wrapping all of the binary-to-text functions is provided: demo.sh.
It is a Korn Shell script using the autoload feature, so a directory populated with a file for every functions exported by libencode and a correct FPATH environnement variable are mandatory :$ mkdir -p ~/sh
$ cd ~/sh
$ ln -s $LIBENCODEPATH/base64.sh base16_encode
$ ln -s $LIBENCODEPATH/base64.sh hex_encode
$ ln -s $LIBENCODEPATH/base64.sh base32_encode
$ ln -s $LIBENCODEPATH/base64.sh base32hex_encode
$ ln -s $LIBENCODEPATH/base64.sh base64_encode
$ ln -s $LIBENCODEPATH/base64.sh base64url_encode
$ grep -E '^[a-z0-9]+\(' $LIBENCODEPATH/encode.sh | while read func; do
> func="$(echo $func | cut -d'(' -f1)";
> ln -s $LIBENCODEPATH/encode.sh "$func";
> done
$ export FPATH=$FPATH:$HOME/shThe environnement is now ready, demo.sh is usable :
$ mksh $LIBENCODEPATH/demo.sh -e base64 -s foobar
Zm9vYmFy
$ echo -n foobar | base64
Zm9vYmFyIt is also possible to use autoload in an interactive korn shell to use base64_encode directly :
$ autoload base64_encode
$ base64_encode foobar
Zm9vYmFyOf course all of these awkward steps can be bypassed if you just this project as intended: as a library.
## License
All the code is licensed under the ISC License.
It's free, not GPLed !