UNPKG

purity-identity

Version:

Key generation for the Purity users, tool to encrypt/decrypt messages with their identities and helpers for compressing decompressing public keys

114 lines 4.34 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.unserializePublicKey = exports.serializePublicKey = exports.compressPublicKey = exports.decryptData = exports.encryptData = exports.createIdentity = exports.IdenityService = void 0; const eth_crypto_1 = require("eth-crypto"); const web3_utils_1 = require("web3-utils"); /** * Used for Premium Content's encryption/decryption and contract store for pubkeys **/ class IdenityService { constructor(identity = null) { if (identity) { this.identity = identity; } else { this.identity = createIdentity(); } } encryptData(data) { return __awaiter(this, void 0, void 0, function* () { return encryptData(this.identity.publicKey, data); }); } decryptEncryptedData(encryptedData) { return __awaiter(this, void 0, void 0, function* () { return decryptData(this.identity.privateKey, encryptedData); }); } getCompressedPublicKey() { return compressPublicKey(this.identity.publicKey); } getDecompressedPublicKey() { return this.identity.publicKey; } getSerializedPublicKey() { return serializePublicKey(this.identity.publicKey); } } exports.IdenityService = IdenityService; // PUBLIC FUNCTIONS function createIdentity() { return eth_crypto_1.default.createIdentity(); } exports.createIdentity = createIdentity; function encryptData(pubKey, data) { return eth_crypto_1.default.encryptWithPublicKey(pubKey, data // message ); } exports.encryptData = encryptData; function decryptData(privKey, encryptedData) { return eth_crypto_1.default.decryptWithPrivateKey(privKey, encryptedData); } exports.decryptData = decryptData; function compressPublicKey(pubKey) { return eth_crypto_1.default.publicKey.compress(pubKey); } exports.compressPublicKey = compressPublicKey; /** * For contract store, the public key has to be serialized and compressed * as much as possible **/ function serializePublicKey(pubKey) { const compressedPubKey = compressPublicKey(pubKey); const userPubKeyPart1 = serializeCompressedPublicKeyPrefix(compressedPubKey); const userPubKeyPart2 = serializeCompressedPublicKey(compressedPubKey); return { pubKeyPrefix: userPubKeyPart1, pubKey: userPubKeyPart2 }; } exports.serializePublicKey = serializePublicKey; /** * Get decompressed public key string from contract store **/ function unserializePublicKey(pubKeyPrefix, pubKey) { return eth_crypto_1.default.publicKey.decompress(decompressPublicKeyPrefix(pubKeyPrefix) + pubKey.substr(2, pubKey.length)); } exports.unserializePublicKey = unserializePublicKey; /** * Gives back the compressed public key's first two characters in a boolean, * because it only can be "02" or "03" * returns true if "03" **/ function serializeCompressedPublicKeyPrefix(compressedPubKey) { const firstTwoChars = compressedPubKey.substr(0, 2); if (firstTwoChars === "03") { return true; } if (firstTwoChars === "02") { return false; } // else throw new Error(`The first two characters of the ${compressedPubKey}` + ` compressed public key are not 02 or 03`); } /** * Serializes the public key's bigger part (without prefix) **/ function serializeCompressedPublicKey(compressedPubKey) { let userPubKeyPart2 = compressedPubKey.substr(2, compressedPubKey.length); return web3_utils_1.hexToBytes("0x" + userPubKeyPart2); } function decompressPublicKeyPrefix(prefix) { return prefix ? "03" : "02"; } //# sourceMappingURL=index.js.map