PHP WebShell

Текущая директория: /opt/BitGoJS/node_modules/@stablelib/hex

Просмотр файла: hex.ts

// Copyright (C) 2016 Dmitry Chestnykh
// MIT License. See LICENSE file for details.

/**
 * Package hex implements hex encoder and decoder.
 */

//        0123456789  ABCDEF  | abcdef
// Index:    0 - 9    10-15   | 10-15
// ASCII:   48 - 57   65-70   | 97-102

function encodeNibble(b: number): string {
    // b >= 0
    let result = b + 48;
    // b > 9
    result += ((9 - b) >>> 8) & (-48 + 65 - 10);

    return String.fromCharCode(result);
}

function encodeNibbleLower(b: number): string {
    // b >= 0
    let result = b + 48;
    // b > 9
    result += ((9 - b) >>> 8) & (-48 + 97 - 10);

    return String.fromCharCode(result);
}

// Invalid character used in decoding to indicate
// that the character to decode is out of range of
// hex alphabet and cannot be decoded.
const INVALID_HEX_NIBBLE = 256;

function decodeNibble(c: number): number {
    let result = INVALID_HEX_NIBBLE;

    // 0-9: c > 47 and c < 58
    result += (((47 - c) & (c - 58)) >> 8) & (-INVALID_HEX_NIBBLE + c - 48);
    // A-F: c > 64 and c < 71
    result += (((64 - c) & (c - 71)) >> 8) & (-INVALID_HEX_NIBBLE + c - 65 + 10);
    // a-f: c > 96 and c < 103
    result += (((96 - c) & (c - 103)) >> 8) & (-INVALID_HEX_NIBBLE + c - 97 + 10);

    return result;
}

/**
 * Returns string with hex-encoded data.
 */
export function encode(data: Uint8Array, lowerCase = false): string {
    const enc = lowerCase ? encodeNibbleLower : encodeNibble;
    let s = "";
    for (let i = 0; i < data.length; i++) {
        s += enc(data[i] >>> 4);
        s += enc(data[i] & 0x0f);
    }
    return s;
}

/**
 * Returns Uint8Array with data decoded from hex string.
 *
 * Throws error if hex string length is not divisible by 2 or has non-hex
 * characters.
 */
export function decode(hex: string): Uint8Array {
    if (hex.length === 0) {
        return new Uint8Array(0);
    }
    if (hex.length % 2 !== 0) {
        throw new Error("hex: input string must be divisible by two");
    }
    const result = new Uint8Array(hex.length / 2);
    let haveBad = 0;
    for (let i = 0; i < hex.length; i += 2) {
        let v0 = decodeNibble(hex.charCodeAt(i));
        let v1 = decodeNibble(hex.charCodeAt(i + 1));

        result[i / 2] = v0 << 4 | v1;

        haveBad |= v0 & INVALID_HEX_NIBBLE;
        haveBad |= v1 & INVALID_HEX_NIBBLE;
    }
    if (haveBad !== 0) {
        throw new Error("hex: incorrect characters for decoding");
    }
    return result;
}

Выполнить команду


Для локальной разработки. Не используйте в интернете!