UNPKG

@kinecosystem/kin-base

Version:
58 lines (42 loc) 1.67 kB
"use strict"; var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; }; exports.decodeBase58Check = decodeBase58Check; Object.defineProperty(exports, "__esModule", { value: true }); var bs58 = _interopRequire(require("./vendor/bs58")); var isUndefined = _interopRequire(require("lodash/isUndefined")); var hash = require("./hashing").hash; var verifyChecksum = require("./util/checksum").verifyChecksum; var versionBytes = { accountId: 0, // decimal 0 none: 1, // decimal 1 seed: 33 }; function decodeBase58Check(versionByteName, encoded) { var decoded = bs58.decode(encoded); var versionByte = decoded[0]; var payload = decoded.slice(0, decoded.length - 4); var data = payload.slice(1); var checksum = decoded.slice(decoded.length - 4); var expectedVersion = versionBytes[versionByteName]; if (isUndefined(expectedVersion)) { throw new Error("" + versionByteName + " is not a valid version byte name. expected one of \"accountId\", \"seed\", or \"none\""); } if (versionByte !== expectedVersion) { throw new Error("invalid version byte. expected " + expectedVersion + ", got " + versionByte); } var expectedChecksum = calculateChecksum(payload); if (!verifyChecksum(expectedChecksum, checksum)) { throw new Error("invalid checksum"); } if (versionByteName === "accountId" && decoded.length !== 37) { throw new Error("Decoded address length is invalid. Expected 37, got " + decoded.length); } return Buffer.from(data); } function calculateChecksum(payload) { var inner = hash(payload); var outer = hash(inner); return outer.slice(0, 4); } // decimal 33