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
JavaScript
;
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