UNPKG

@fioprotocol/fiojs

Version:

FioJS is a Utility SDK for packing, signing and encryption functionality for the FIO blockchain. It is used by the FIO TypeScript SDK

104 lines 4.87 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createSharedCipher = exports.deserialize = exports.serialize = void 0; var ser = __importStar(require("./chain-serialize")); var encryption_check_1 = require("./encryption-check"); var _a = require("./ecc"), PublicKey = _a.PublicKey, PrivateKey = _a.PrivateKey; var fioAbi = require("../src/encryption-fio.abi.json"); var createHmac = require("create-hmac"); var fioTypes = ser.getTypesFromAbi(ser.createInitialTypes(), fioAbi); /** Convert `value` to binary form. `type` must be a built-in abi type. */ function serialize(serialBuffer, type, value) { fioTypes.get(type).serialize(serialBuffer, value); } exports.serialize = serialize; /** Convert data in `buffer` to structured form. `type` must be a built-in abi type. */ function deserialize(serialBuffer, type) { return fioTypes.get(type).deserialize(serialBuffer); } exports.deserialize = deserialize; function createSharedCipher(_a) { var _b = _a === void 0 ? {} : _a, privateKey = _b.privateKey, publicKey = _b.publicKey, textEncoder = _b.textEncoder, textDecoder = _b.textDecoder; privateKey = PrivateKey(privateKey); publicKey = PublicKey(publicKey); var sharedSecret = privateKey.getSharedSecret(publicKey); return new SharedCipher({ sharedSecret: sharedSecret, textEncoder: textEncoder, textDecoder: textDecoder }); } exports.createSharedCipher = createSharedCipher; var SharedCipher = /** @class */ (function () { function SharedCipher(_a) { var _b = _a === void 0 ? {} : _a, sharedSecret = _b.sharedSecret, textEncoder = _b.textEncoder, textDecoder = _b.textDecoder; this.sharedSecret = sharedSecret; this.textEncoder = textEncoder; this.textDecoder = textDecoder; } /** * Encrypt the content of a FIO message. * * @arg {string} fioContentType - `new_funds_content`, etc * @arg {object} content * @arg {Buffer} [IV = randomBytes(16)] - An unpredictable strong random value * is required and supplied by default. Unit tests may provide a static value * to achieve predictable results. * @return {string} cipher base64 */ SharedCipher.prototype.encrypt = function (fioContentType, content, IV) { var buffer = new ser.SerialBuffer({ textEncoder: this.textEncoder, textDecoder: this.textDecoder }); serialize(buffer, fioContentType, content); var message = Buffer.from(buffer.asUint8Array()); var cipherbuffer = (0, encryption_check_1.checkEncrypt)(this.sharedSecret, message, IV); // checkDecrypt(this.sharedSecret, cipherbuffer); return cipherbuffer.toString("base64"); }; /** * Decrypt the content of a FIO message. * * @arg {string} fioContentType - `new_funds_content`, etc * @arg {object} content - cipher base64 * @return {object} decrypted FIO object */ SharedCipher.prototype.decrypt = function (fioContentType, content) { var message = (0, encryption_check_1.checkDecrypt)(this.sharedSecret, Buffer.from(content, "base64")); var messageArray = Uint8Array.from(message); var buffer = new ser.SerialBuffer({ array: messageArray, textDecoder: this.textDecoder, textEncoder: this.textEncoder, }); return deserialize(buffer, fioContentType); }; /** * @example hashA(PublicKey.toBuffer()) * @arg {string|Buffer} key buffer * @return {string} hex, one-way hash unique to this SharedCipher and key */ SharedCipher.prototype.hashA = function (key) { var hash = createHmac("sha1", this.sharedSecret).update(key).digest(); return "0x" + hash.slice(0, 16).toString("hex"); }; return SharedCipher; }()); //# sourceMappingURL=encryption-fio.js.map