Content.write(File.read())\r
File.close()\r
for fmp in self.FmpPayloadList:\r
- Buffer = fmp.GenCapsuleSubItem()\r
if fmp.Certificate_Guid:\r
ExternalTool, ExternalOption = FindExtendTool([], GenFdsGlobalVariable.ArchList, fmp.Certificate_Guid)\r
CmdOption = ''\r
dwLength = 4 + 2 + 2 + 16 + os.path.getsize(CapOutputTmp) - os.path.getsize(CapInputFile)\r
else:\r
dwLength = 4 + 2 + 2 + 16 + 16 + 256 + 256\r
- Buffer += pack('Q', fmp.MonotonicCount)\r
- Buffer += pack('I', dwLength)\r
- Buffer += pack('H', WIN_CERT_REVISION)\r
- Buffer += pack('H', WIN_CERT_TYPE_EFI_GUID)\r
- Buffer += uuid.UUID(fmp.Certificate_Guid).get_bytes_le()\r
- if os.path.exists(CapOutputTmp):\r
- TmpFile = open(CapOutputTmp, 'rb')\r
- Buffer += TmpFile.read()\r
- TmpFile.close()\r
- if fmp.VendorCodeFile:\r
- VendorFile = open(fmp.VendorCodeFile, 'rb')\r
- Buffer += VendorFile.read()\r
- VendorFile.close()\r
- FwMgrHdr.write(pack('=Q', PreSize))\r
- PreSize += len(Buffer)\r
- Content.write(Buffer)\r
+ fmp.ImageFile = CapOutputTmp\r
+ AuthData = [fmp.MonotonicCount, dwLength, WIN_CERT_REVISION, WIN_CERT_TYPE_EFI_GUID, fmp.Certificate_Guid]\r
+ Buffer = fmp.GenCapsuleSubItem(AuthData)\r
else:\r
- ImageFile = open(fmp.ImageFile, 'rb')\r
- Buffer += ImageFile.read()\r
- ImageFile.close()\r
- if fmp.VendorCodeFile:\r
- VendorFile = open(fmp.VendorCodeFile, 'rb')\r
- Buffer += VendorFile.read()\r
- VendorFile.close()\r
- FwMgrHdr.write(pack('=Q', PreSize))\r
- PreSize += len(Buffer)\r
- Content.write(Buffer)\r
+ Buffer = fmp.GenCapsuleSubItem()\r
+ FwMgrHdr.write(pack('=Q', PreSize))\r
+ PreSize += len(Buffer)\r
+ Content.write(Buffer)\r
BodySize = len(FwMgrHdr.getvalue()) + len(Content.getvalue())\r
Header.write(pack('=I', HdrSize + BodySize))\r
#\r
from struct import pack\r
import os\r
from Common.Misc import SaveFileOnChange\r
+import uuid\r
\r
## base class for capsule data\r
#\r
self.Certificate_Guid = None\r
self.MonotonicCount = None\r
\r
- def GenCapsuleSubItem(self):\r
+ def GenCapsuleSubItem(self, AuthData=[]):\r
if not self.Version:\r
self.Version = 0x00000002\r
ImageFileSize = os.path.getsize(self.ImageFile)\r
+ if AuthData:\r
+ # the ImageFileSize need include the full authenticated info size. From first bytes of MonotonicCount to last bytes of certificate.\r
+ # the 32 bit is the MonotonicCount, dwLength, wRevision, wCertificateType and CertType\r
+ ImageFileSize += 32\r
VendorFileSize = 0\r
if self.VendorCodeFile:\r
VendorFileSize = os.path.getsize(self.VendorCodeFile)\r
VendorFileSize,\r
int(self.HardwareInstance, 16)\r
)\r
+ if AuthData:\r
+ Buffer += pack('QIHH', AuthData[0], AuthData[1], AuthData[2], AuthData[3])\r
+ Buffer += uuid.UUID(AuthData[4]).get_bytes_le()\r
+\r
+ #\r
+ # Append file content to the structure\r
+ #\r
+ ImageFile = open(self.ImageFile, 'rb')\r
+ Buffer += ImageFile.read()\r
+ ImageFile.close()\r
+ if self.VendorCodeFile:\r
+ VendorFile = open(self.VendorCodeFile, 'rb')\r
+ Buffer += VendorFile.read()\r
+ VendorFile.close()\r
return Buffer\r