import * as asn1js from "asn1js"; import * as pvutils from "pvutils"; import { ContentInfo, ContentInfoJson } from "./ContentInfo"; import { SafeContents } from "./SafeContents"; import { EnvelopedData } from "./EnvelopedData"; import { EncryptedData } from "./EncryptedData"; import * as Schema from "./Schema"; import { id_ContentType_Data, id_ContentType_EncryptedData, id_ContentType_EnvelopedData } from "./ObjectIdentifiers"; import { ArgumentError, AsnError, ParameterError } from "./errors"; import { PkiObject, PkiObjectParameters } from "./PkiObject"; import { EMPTY_STRING } from "./constants"; import * as common from "./common";
// Get internal properties from parsed schema this.safeContents = Array.from(asn1.result.contentInfos, element => new ContentInfo({ schema: element }));
}
public toSchema(): asn1js.Sequence {
return (new asn1js.Sequence({
value: Array.from(this.safeContents, o => o.toSchema())
}));
}
public toJSON(): AuthenticatedSafeJson {
return {
safeContents: Array.from(this.safeContents, o => o.toJSON())
};
}
public async parseInternalValues(parameters: { safeContents: SafeContent[]; }, crypto = common.getCrypto(true)): Promise<void> { //#region Check input data from "parameters"
ParameterError.assert(parameters, SAFE_CONTENTS);
ArgumentError.assert(parameters.safeContents, SAFE_CONTENTS, "Array"); if (parameters.safeContents.length !== this.safeContents.length) { thrownew ArgumentError("Length of \"parameters.safeContents\" must be equal to \"this.safeContents.length\"");
} //#endregion
//#region Create value for "this.parsedValue.authenticatedSafe" this.parsedValue = {
safeContents: [] as any[],
};
for (const [index, content] of this.safeContents.entries()) { const safeContent = parameters.safeContents[index]; const errorTarget = `parameters.safeContents[${index}]`; switch (content.contentType) { //#region data case id_ContentType_Data:
{ // Check that we do have OCTET STRING as "content"
ArgumentError.assert(content.content, "this.safeContents[j].content", asn1js.OctetString);
//#region Check we have "constructive encoding" for AuthSafe content const authSafeContent = content.content.getValue(); //#endregion
//#region Finally initialize initial values of SAFE_CONTENTS type this.parsedValue.safeContents.push({
privacyMode: 0, // No privacy, clear data
value: SafeContents.fromBER(authSafeContent)
}); //#endregion
} break; //#endregion //#region envelopedData case id_ContentType_EnvelopedData:
{ //#region Initial variables const cmsEnveloped = new EnvelopedData({ schema: content.content }); //#endregion
//#region Initialize internal data this.parsedValue.safeContents.push({
privacyMode: 1, // Password-based privacy mode
value: SafeContents.fromBER(decrypted),
}); //#endregion
} break; //#endregion //#region default default: thrownew Error(`Unknown "contentType"for AuthenticatedSafe: " ${content.contentType}`); //#endregion
}
} //#endregion
} public async makeInternalValues(parameters: {
safeContents: any[];
}, crypto = common.getCrypto(true)): Promise<this> { //#region Check data in PARSED_VALUE if (!(this.parsedValue)) { thrownew Error("Please run \"parseValues\" first or add \"parsedValue\" manually");
}
ArgumentError.assert(this.parsedValue, "this.parsedValue", "object");
ArgumentError.assert(this.parsedValue.safeContents, "this.parsedValue.safeContents", "Array");
//#region Check input data from "parameters"
ArgumentError.assert(parameters, "parameters", "object");
ParameterError.assert(parameters, "safeContents");
ArgumentError.assert(parameters.safeContents, "parameters.safeContents", "Array"); if (parameters.safeContents.length !== this.parsedValue.safeContents.length) { thrownew ArgumentError("Length of \"parameters.safeContents\" must be equal to \"this.parsedValue.safeContents\"");
} //#endregion
for (const [index, content] of this.parsedValue.safeContents.entries()) { //#region Check current "content" value
ParameterError.assert("content", content, "privacyMode", "value");
ArgumentError.assert(content.value, "content.value", SafeContents); //#endregion
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.