public static AbstractBlob CreateFromStream(ReadingContext SR) { // Read the magic and length (common to all blobs) UInt32 Magic = SR.ReadUInt32(); UInt32 Length = SR.ReadUInt32(); AbstractBlob Result; switch (Magic) { case CSMAGIC_CODEDIRECTORY: Result = new CodeDirectoryBlob(); break; case CSMAGIC_CODEDIR_SIGNATURE: Result = new CodeDirectorySignatureBlob(); break; case CSMAGIC_ENTITLEMENTS: Result = new EntitlementsBlob(); break; case CSMAGIC_REQUIREMENTS_TABLE: Result = new RequirementsBlob(); break; case CSMAGIC_EMBEDDED_SIGNATURE: Result = new CodeSigningTableBlob(); break; case CSMAGIC_REQUIREMENT: Result = new RequirementBlob(); break; default: Result = new OpaqueBlob(); break; } Result.MyMagic = Magic; Result.UnpackageData(SR, Length); if (Config.bCodeSignVerbose) { Console.WriteLine("[Read blob with magic 0x{0:X} and length={1}]\n{2}", Magic, Length, Result.ToString()); } return Result; }
public static RequirementBlob CreateFromCertificate(X509Certificate2 SigningCert, string Bundle, ExpressionOp OldReq = null) { RequirementBlob Blob = new RequirementBlob(); Blob.InitializeFromCert(SigningCert, Bundle, OldReq); return Blob; }