Let's talk code
You can reach me at
T3R673XU4HR7JQHB6LU65ZEB6KG6D4U36SD67LU74SLJHZPW
using one of the decoders below. Let me know which implementation you choose or roll your own and
let's talk about it, too ☺.
This value is also in my PGP key (704F C50C E572 DE89 DF9F 4323 6898 544F 1DC2 3CBE
).
gpg
⤴
curl https://arindrarto.dev/arindrarto.dev.asc | gpg --import
decode.py
⤴
#!/usr/bin/env python3.8
import sys
import binascii
from base64 import b32decode as b32d
from contextlib import suppress
def decode(value: str) -> str:
ds = [b - 128 for b in b32d(value.encode())]
return "".join(chr(d) for d in ds if d >= 32)
if __name__ == "__main__":
with suppress(IndexError):
try:
decoded = decode(sys.argv[1])
print(decoded)
except binascii.Error:
print("Error: invalid input", file=sys.stderr)
sys.exit(1)
decode/src/main.rs
⤴
use std::process;
use data_encoding::{BASE32, DecodeError}; // version 2.2.0
fn decode(value: impl AsRef<[u8]>) -> Result<String, DecodeError> {
let func = |x: &u8|
if *x >= 160 { Some((x - 128) as char) }
else { None };
let vref = value.as_ref();
let mut rv = String::with_capacity(vref.len() / 2);
rv.extend(
BASE32.decode(vref)?.iter().filter_map(func)
);
Ok(rv)
}
fn main() {
if let Some(value) = std::env::args().skip(1).next() {
let decoded = decode(value).unwrap_or_else(|_| {
eprintln!("Error: invalid input value");
process::exit(1);
});
println!("{}", decoded);
}
}
decode.go
⤴
package main
import (
"encoding/base32"
"fmt"
"os"
)
func decode(value string) (string, error) {
ns, err := base32.StdEncoding.DecodeString(value)
if err != nil {
return "", err
}
cs := make([]rune, len(ns))
for i, n := range ns {
if n >= 160 {
cs[i] = rune(n - 128)
}
}
return string(cs), nil
}
func main() {
if len(os.Args) > 1 {
decoded, err := decode(os.Args[1])
if err != nil {
fmt.Fprintf(os.Stderr, "Error: invalid input value\n")
os.Exit(1)
}
fmt.Println(decoded)
}
}
decode.js
⤴
#!/usr/bin/env node
const process = require('process');
const base32 = require('hi-base32'); // version 0.5.0
const func = (acc, n) => (
n >= 160
? `${acc}${String.fromCharCode(n - 128)}`
: acc
);
const decode = (value) => base32
.decode.asBytes(value)
.reduce(func, '');
try {
process.argv[2] && console.log(decode(process.argv[2]));
} catch {
console.error("Error: invalid input");
process.exit(1);
}