import * as asn1js from "asn1js"; import * as pvutils from "pvutils"; import * as bs from "bytestreamjs"; import * as common from "./common"; import { PublicKeyInfo } from "./PublicKeyInfo"; import * as Schema from "./Schema"; import { AlgorithmIdentifier } from "./AlgorithmIdentifier"; import { Certificate } from "./Certificate"; import { PkiObject, PkiObjectParameters } from "./PkiObject"; import { EMPTY_BUFFER, EMPTY_STRING } from "./constants"; import { SignedCertificateTimestampList } from "./SignedCertificateTimestampList"; import { id_SignedCertificateTimestampList } from "./ObjectIdentifiers";
public version!: number; public logID!: ArrayBuffer; public timestamp!: Date; public extensions!: ArrayBuffer; public hashAlgorithm!: string; public signatureAlgorithm!: string; public signature!: ArrayBuffer;
if ("stream" in parameters && parameters.stream) { this.fromStream(parameters.stream);
}
if (parameters.schema) { this.fromSchema(parameters.schema);
}
}
/** *Returnsdefaultvaluesforallclassmembers *@parammemberNameStringnameforaclassmember *@returnsDefaultvalue
*/ publicstatic override defaultValues(memberName: typeof VERSION): number; publicstatic override defaultValues(memberName: typeof LOG_ID): ArrayBuffer; publicstatic override defaultValues(memberName: typeof EXTENSIONS): ArrayBuffer; publicstatic override defaultValues(memberName: typeof TIMESTAMP): Date; publicstatic override defaultValues(memberName: typeof HASH_ALGORITHM): string; publicstatic override defaultValues(memberName: typeof SIGNATURE_ALGORITHM): string; publicstatic override defaultValues(memberName: typeof SIGNATURE): ArrayBuffer; publicstatic override defaultValues(memberName: string): any { switch (memberName) { case VERSION:
return 0; case LOG_ID: case EXTENSIONS:
return EMPTY_BUFFER; case TIMESTAMP:
return new Date(0); case HASH_ALGORITHM: case SIGNATURE_ALGORITHM:
return EMPTY_STRING; case SIGNATURE:
return EMPTY_BUFFER; default:
return super.defaultValues(memberName);
}
}
public fromSchema(schema: Schema.SchemaType): void { if ((schema instanceof asn1js.RawData) === false) thrownew Error("Object's schema was not verified against input data for SignedCertificateTimestamp");
const seqStream = new bs.SeqStream({
stream: new bs.ByteStream({
buffer: schema.data
})
});
if (this.version === 0) { this.logID = (new Uint8Array(stream.getBlock(32))).buffer.slice(0); this.timestamp = new Date(pvutils.utilFromBase(new Uint8Array(stream.getBlock(8)), 8));
if (blockLength !== (47 + extensionsLength + signatureLength)) { thrownew Error("Object's stream was not correct for SignedCertificateTimestamp");
}
}
}
public toSchema(): asn1js.RawData { const stream = this.toStream();
return new asn1js.RawData({ data: stream.stream.buffer });
}
/** *ConvertscurrentobjecttoSeqStreamdata *@returnsSeqStreamobject
*/ public toStream(): bs.SeqStream { const stream = new bs.SeqStream();
//#region Check we do have what to verify if (parsedValue === null) thrownew Error("No SignedCertificateTimestampList extension in the specified certificate"); //#endregion
//#region Prepare modifier TBS value const tbs = certificate.encodeTBS().toBER(); //#endregion
//#region Initialize "issuer_key_hash" value const issuerId = await crypto.digest({ name: "SHA-256" }, new Uint8Array(issuerCertificate.subjectPublicKeyInfo.toSchema().toBER(false))); //#endregion
//#region Make final "PreCert" value
stream.appendView(new Uint8Array(issuerId));
stream.appendUint24(tbs.byteLength);
stream.appendView(new Uint8Array(tbs));
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.