from Common.Misc import *\r
import collections\r
import Common.DataType as DataType\r
+import Common.GlobalData as GlobalData\r
\r
var_info = collections.namedtuple("uefi_var", "pcdindex,pcdname,defaultstoragename,skuname,var_name, var_guid, var_offset,var_attribute,pcd_default_value, default_value, data_type,PcdDscLine,StructurePcd")\r
NvStorageHeaderSize = 28\r
offset += VariableHeaderSize + len(default_info.var_name.split(","))\r
var_data_offset[default_info.pcdindex] = offset\r
offset += data_size - len(default_info.var_name.split(","))\r
-\r
- var_header_buffer = VariableMgr.PACK_VARIABLE_HEADER(var_attr_value, len(default_info.var_name.split(",")), len (default_data), vendorguid)\r
+ if GlobalData.gCommandLineDefines.get(TAB_DSC_DEFINES_VPD_AUTHENTICATED_VARIABLE_STORE,"FALSE").upper() == "TRUE":\r
+ var_header_buffer = VariableMgr.PACK_AUTHENTICATED_VARIABLE_HEADER(var_attr_value, len(default_info.var_name.split(",")), len (default_data), vendorguid)\r
+ else:\r
+ var_header_buffer = VariableMgr.PACK_VARIABLE_HEADER(var_attr_value, len(default_info.var_name.split(",")), len (default_data), vendorguid)\r
NvStoreDataBuffer += (var_header_buffer + DataBuffer)\r
\r
- variable_storage_header_buffer = VariableMgr.PACK_VARIABLE_STORE_HEADER(len(NvStoreDataBuffer) + 28)\r
+ if GlobalData.gCommandLineDefines.get(TAB_DSC_DEFINES_VPD_AUTHENTICATED_VARIABLE_STORE,"FALSE").upper() == "TRUE":\r
+ variable_storage_header_buffer = VariableMgr.PACK_AUTHENTICATED_VARIABLE_STORE_HEADER(len(NvStoreDataBuffer) + 28)\r
+ else:\r
+ variable_storage_header_buffer = VariableMgr.PACK_VARIABLE_STORE_HEADER(len(NvStoreDataBuffer) + 28)\r
\r
nv_default_part = VariableMgr.AlignData(VariableMgr.PACK_DEFAULT_DATA(0, 0, VariableMgr.unpack_data(variable_storage_header_buffer+NvStoreDataBuffer)), 8)\r
\r
\r
return GuidBuffer + SizeBuffer + FormatBuffer + StateBuffer + reservedBuffer\r
\r
+ def PACK_AUTHENTICATED_VARIABLE_STORE_HEADER(size):\r
+ #Signature: gEfiAuthenticatedVariableGuid\r
+ Guid = "{ 0xaaf32c78, 0x947b, 0x439a, { 0xa1, 0x80, 0x2e, 0x14, 0x4e, 0xc3, 0x77, 0x92 }}"\r
+ Guid = GuidStructureStringToGuidString(Guid)\r
+ GuidBuffer = PackGUID(Guid.split('-'))\r
+\r
+ SizeBuffer = pack('=L', size)\r
+ FormatBuffer = pack('=B', 0x5A)\r
+ StateBuffer = pack('=B', 0xFE)\r
+ reservedBuffer = pack('=H', 0)\r
+ reservedBuffer += pack('=L', 0)\r
+\r
+ return GuidBuffer + SizeBuffer + FormatBuffer + StateBuffer + reservedBuffer\r
+\r
@staticmethod\r
def PACK_NV_STORE_DEFAULT_HEADER(size, maxsize):\r
Signature = pack('=B', ord('N'))\r
\r
return Buffer\r
\r
+ @staticmethod\r
+ def PACK_AUTHENTICATED_VARIABLE_HEADER(attribute, namesize, datasize, vendorguid):\r
+\r
+ Buffer = pack('=H', 0x55AA) # pack StartID\r
+ Buffer += pack('=B', 0x3F) # pack State\r
+ Buffer += pack('=B', 0) # pack reserved\r
+\r
+ Buffer += pack('=L', attribute)\r
+\r
+ Buffer += pack('=Q', 0) # pack MonotonicCount\r
+ Buffer += pack('=HBBBBBBLhBB', # pack TimeStamp\r
+ 0, # UINT16 Year\r
+ 0, # UINT8 Month\r
+ 0, # UINT8 Day\r
+ 0, # UINT8 Hour\r
+ 0, # UINT8 Minute\r
+ 0, # UINT8 Second\r
+ 0, # UINT8 Pad1\r
+ 0, # UINT32 Nanosecond\r
+ 0, # INT16 TimeZone\r
+ 0, # UINT8 Daylight\r
+ 0) # UINT8 Pad2\r
+ Buffer += pack('=L', 0) # pack PubKeyIndex\r
+\r
+ Buffer += pack('=L', namesize)\r
+ Buffer += pack('=L', datasize)\r
+\r
+ Buffer += PackGUID(vendorguid)\r
+\r
+ return Buffer\r
+\r
@staticmethod\r
def PACK_VARIABLES_DATA(var_value,data_type, tail = None):\r
Buffer = bytearray()\r