@tidecloak/js
Version:
TideCloak client side JS SDK
52 lines • 2.9 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const SerializedField_js_1 = __importDefault(require("../Models/SerializedField.js"));
const AES_js_1 = require("../Cryptide/Encryption/AES.js");
const Hash_js_1 = require("../Cryptide/Hashing/Hash.js");
const Serialization_js_1 = require("../Cryptide/Serialization.js");
const Ed25519_js_1 = require("../Cryptide/Ed25519.js");
class DecryptRequest {
/**
*
* @param {Uint8Array[]} serializedFields
* @param {Uint8Array[]} ECDHi
*/
static async generateRequests(serializedFields, ECDHi) {
const deserializedFields = serializedFields.map(field => SerializedField_js_1.default.deserialize(field));
const pre_encFieldChks = deserializedFields.map(df => (0, Hash_js_1.SHA256_Digest)(df.data));
const encFieldChks = await Promise.all(pre_encFieldChks);
const toEncrypt = {
Timestamps: deserializedFields.map(df => df.timestamp), // using first as theyre all the same
EncFieldChks: encFieldChks.map(e => (0, Serialization_js_1.bytesToBase64)(e)),
C1s: deserializedFields.map(df => df.key.toBase64()),
Tags: deserializedFields.map(df => df.tag),
Sigs: deserializedFields.map(df => (0, Serialization_js_1.bytesToBase64)(df.sig))
};
const pre_encRequests = ECDHi.map(ECDH => (0, AES_js_1.encryptData)(JSON.stringify(toEncrypt), ECDH));
const encRequests = await Promise.all(pre_encRequests);
return {
encRequests,
encryptedFields: deserializedFields.map(df => df.data),
tags: toEncrypt.Tags // i don't want to use map again here
};
}
/**
* @param {Uint8Array[]} encryptedFields
* @param {Uint8Array[]} ECDHi
* @param {string[]} encryptedFieldKeys
* @param {bignt[]} lis
*/
static async decryptFields(encryptedFields, ECDHi, encryptedFieldKeys, lis) {
const pre_decryptedData = encryptedFieldKeys.map(async (encK, i) => JSON.parse(await (0, AES_js_1.decryptData)(encK, ECDHi[i])));
const decryptedData = await Promise.all(pre_decryptedData);
const fieldKeys = encryptedFields.map((_, i) => decryptedData.reduce((sum, next, j) => sum.add(Ed25519_js_1.Point.fromBase64(next.AppliedFieldKeys[i]).mul(lis[j])), Ed25519_js_1.Point.ZERO)); // main loop over amount of encrypted datas
const pre_decryptedFields = fieldKeys.map(async (fk, i) => (0, AES_js_1.decryptDataRawOutput)(encryptedFields[i], await (0, Hash_js_1.SHA256_Digest)(fk.toRawBytes())));
const decryptedFields = await Promise.all(pre_decryptedFields);
return decryptedFields;
}
}
exports.default = DecryptRequest;
//# sourceMappingURL=DecryptRequest.js.map