zbase32

This performs zbase32 encoding

Created by: hackvertor
Installed 1 times

Category: Convert

Created on: Thursday, October 10, 2024 at 11:59:00 AM

Updated on: Thursday, October 10, 2024 at 11:59:00 AM

This is a built in tag
Tag arguments
[]
Code
class zbase32 {
  encode(input) {
    const zBase32chars = "ybndrfg8ejkmcpqxot1uwisza345h769";
    let output = "";
    let buffer = 0;
    let bitsLeft = 0;

    for (let i = 0; i < input.length; i++) {
      buffer = (buffer << 8) | input.charCodeAt(i);
      bitsLeft += 8;

      while (bitsLeft >= 5) {
        output += zBase32chars.charAt((buffer >> (bitsLeft - 5)) & 31);
        bitsLeft -= 5;
      }
    }

    if (bitsLeft > 0) {
      output += zBase32chars.charAt((buffer << (5 - bitsLeft)) & 31);
    }

    return output;
  }

  decode(input) {
    const zBase32chars = "ybndrfg8ejkmcpqxot1uwisza345h769";
    const cleanInput = input.replace(/=/g, "");
    let buffer = 0;
    let bitsLeft = 0;
    let output = "";

    for (let i = 0; i < cleanInput.length; i++) {
      buffer = (buffer << 5) | zBase32chars.indexOf(cleanInput.charAt(i));
      bitsLeft += 5;

      if (bitsLeft >= 8) {
        output += String.fromCharCode((buffer >> (bitsLeft - 8)) & 255);
        bitsLeft -= 8;
      }
    }

    return output;
  }

  matches(input) {
    const zbase32Regex = /^[ybndrfg8ejkmcpqxot1uwisza345h769]{10,}$/;
    const result = zbase32Regex.exec(input);
    return result ? result : null;
  }
}