UNPKG

@tidecloak/js

Version:

TideCloak client side JS SDK

180 lines 7.46 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.QuantumPublic = exports.QuantumPrivate = exports.Symmetric = exports.Public = exports.Private = exports.Seed = exports.SerializedComponent = exports.BasePublicComponent = exports.BasePrivateComponent = exports.BaseSeedComponent = exports.BaseComponent = void 0; const Serialization_js_1 = require("../Serialization.js"); const ComponentRegistry_js_1 = require("./ComponentRegistry.js"); const BaseScheme_js_1 = __importDefault(require("./Schemes/BaseScheme.js")); const SchemeRegistry_js_1 = require("./Schemes/SchemeRegistry.js"); class BaseComponent { constructor() { } Add(component) { if (component.Scheme == this.Scheme) { let res = this.AddComponent(component); if (res instanceof BaseComponent && res.Scheme == this.Scheme) return res; } throw Error("Mismatch between components"); } Multiply(component) { if (component.Scheme == this.Scheme) { let res = this.MultiplyComponent(component); if (res instanceof BaseComponent && res.Scheme == this.Scheme) return res; } throw Error("Mismatch between components"); } Minus(component) { if (component.Scheme == this.Scheme) { let res = this.MinusComponent(component); if (res instanceof BaseComponent && res.Scheme == this.Scheme) return res; } throw Error("Mismatch between components"); } Equals(component) { if (component.Scheme == this.Scheme) { let res = this.EqualsComponent(component); if (typeof res == "boolean") return res; } throw Error("Mismatch between components"); } Mod() { let res = this.ModComponent(); if (res instanceof BaseComponent && res.Scheme == this.Scheme) return res; throw Error("Mismatch between components"); } ModInv() { let res = this.ModInvComponent(); if (res instanceof BaseComponent && res.Scheme == this.Scheme) return res; throw Error("Mismatch between components"); } AddComponent(component) { throw Error("Add not implemented"); } MultiplyComponent(component) { throw Error("Multiply not implemented"); } MinusComponent(component) { throw Error("Minus not implemented"); } EqualsComponent(component) { throw Error("Equals not implemented"); } ModComponent() { throw Error("Mod not implemented"); } ModInvComponent() { throw Error("Mod inv not implemented"); } SerializeComponent() { throw Error("Serialize not implemented"); } /**@returns {BaseScheme} */ get Scheme() { throw Error("Not implemented"); } /**@returns {string} */ get ComponentType() { throw Error("Not implemented"); } /** * * @returns {SerializedComponent} */ Serialize() { let raw = this.SerializeComponent(); let schemeInt = SchemeRegistry_js_1.SchemeType.indexOf(this.Scheme); let componentTypeInt = ComponentKeyType.indexOf(this.ComponentType); if (schemeInt == -1 || componentTypeInt == -1) throw Error("Could not find scheme or component type in registries"); let schemeBytes = (0, Serialization_js_1.getBytesFromInt16)(schemeInt); let header = (0, Serialization_js_1.ConcatUint8Arrays)([new Uint8Array([componentTypeInt << 4]), schemeBytes]); // shift to the left (for when we have version, but all versions are 0 for now) return new SerializedComponent((0, Serialization_js_1.ConcatUint8Arrays)([header, raw]), this.ComponentType); } /** * @param {Uint8Array|string} serialized * @returns {BaseComponent} */ static DeserializeComponent(serialized) { let b = []; if (!(serialized instanceof Uint8Array)) { try { try { b = (0, Serialization_js_1.Hex2Bytes)(serialized); } catch { b = (0, Serialization_js_1.base64ToBytes)(serialized); } } catch { throw Error("Unable to deserialize component"); } } else b = serialized; let scheme = SchemeRegistry_js_1.SchemeType[toInt16(b.slice(1, 3), 0)]; let k = (b[0] >> 4) & 0x0F; let keyType = ComponentKeyType[k]; let component = ComponentRegistry_js_1.Registery[scheme.Name][keyType]; return component.Create(b.slice(3)); } } exports.BaseComponent = BaseComponent; BaseComponent.Name = () => { throw Error("Name not implemented"); }; BaseComponent.Version = () => { throw Error("Version not implemented"); }; class BaseSeedComponent extends BaseComponent { get ComponentType() { return exports.Seed; } static New() { throw Error("Not implemented"); } GetPublic() { throw Error("Not implemented"); } GetPrivate() { throw Error("Not implemented"); } get rawBytes() { throw Error("Not implemented"); } } exports.BaseSeedComponent = BaseSeedComponent; class BasePrivateComponent extends BaseComponent { get ComponentType() { return exports.Private; } static New() { throw Error("Not implemented"); } GetPublic() { throw Error("Not implemented"); } get priv() { throw Error("Not implemented"); } } exports.BasePrivateComponent = BasePrivateComponent; class BasePublicComponent extends BaseComponent { get ComponentType() { return exports.Public; } get public() { throw Error("Not implemented"); } } exports.BasePublicComponent = BasePublicComponent; class SerializedComponent { constructor(bytes, compentType) { this.Bytes = bytes; this.ComponentType = compentType; } ToBytes() { return this.Bytes; } ToString() { switch (this.ComponentType) { case exports.Seed: return (0, Serialization_js_1.bytesToBase64)(this.Bytes); case exports.Private: return (0, Serialization_js_1.bytesToBase64)(this.Bytes); case exports.Public: return (0, Serialization_js_1.Bytes2Hex)(this.Bytes); case exports.Symmetric: return (0, Serialization_js_1.bytesToBase64)(this.Bytes); case exports.QuantumPrivate: throw Error("Not implemented yet"); case exports.QuantumPublic: throw Error("Not implemented yet"); default: throw Error("Unknown component type"); } } } exports.SerializedComponent = SerializedComponent; function toInt16(bytes, offset = 0) { const buffer = bytes.buffer; const view = new DataView(buffer); return view.getInt16(offset, true); // 'true' for little-endian, set to 'false' for big-endian } exports.Seed = "Seed"; exports.Private = "Private"; exports.Public = "Public"; exports.Symmetric = "Symmetric"; exports.QuantumPrivate = "QuantumPrivate"; exports.QuantumPublic = "QuantumPublic"; const ComponentKeyType = [ exports.Seed, // 0 exports.Private, // 1 exports.Public, // 2 exports.Symmetric, // 3 exports.QuantumPrivate, // 4 exports.QuantumPublic // 5 ]; //# sourceMappingURL=BaseComponent.js.map