Skip to content
This repository has been archived by the owner on Jul 6, 2022. It is now read-only.

Commit

Permalink
Fix RefIds in all files
Browse files Browse the repository at this point in the history
  • Loading branch information
nanosonde committed May 21, 2020
1 parent 121b400 commit 9ed6f9f
Showing 1 changed file with 46 additions and 25 deletions.
71 changes: 46 additions & 25 deletions MainWindowViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,33 +57,26 @@ public string GeneratedHashString
}
}

private object _instance;
private Type _type;
private readonly object _instance;
private readonly Type _type;
}

class HardwareSigner
{
public HardwareSigner(
FileInfo hardwareFile,
IDictionary<string, string> applProgIdMappings,
IDictionary<string, string> applProgHashes)
IDictionary<string, string> applProgHashes,
bool patchIds)
{
Assembly asm1 = Assembly.LoadFrom("C:\\Program Files (x86)\\ETS5\\Knx.Ets.XmlSigning.dll");
Assembly asm2 = Assembly.LoadFrom("C:\\Program Files (x86)\\ETS5\\Knx.Ets.Xml.ObjectModel.dll");

Type RegistrationKeyEnum = asm2.GetType("Knx.Ets.Xml.ObjectModel.RegistrationKey");
object registrationKey = Enum.Parse(RegistrationKeyEnum, "knxconv");

/*
public HardwareSigner(
FileInfo hardwareFile,
IDictionary< string, string> applProgIdMappings,
IDictionary<string, string> applProgHashes,
bool patchIds,
RegistrationKey registrationKey)
*/
// patchId = false, registrationKey= Knx.Ets.Xml.ObjectModel.RegistrationKey.knxconv (is an enum)
_instance = Activator.CreateInstance(asm1.GetType("Knx.Ets.XmlSigning.HardwareSigner"), hardwareFile, applProgIdMappings, applProgHashes, false, registrationKey);
// registrationKey= Knx.Ets.Xml.ObjectModel.RegistrationKey.knxconv (is an enum)
_instance = Activator.CreateInstance(asm1.GetType("Knx.Ets.XmlSigning.HardwareSigner"), hardwareFile, applProgIdMappings, applProgHashes, patchIds, registrationKey);
_type = asm1.GetType("Knx.Ets.XmlSigning.HardwareSigner");
}

Expand All @@ -92,8 +85,16 @@ public void SignFile()
_type.GetMethod("SignFile", BindingFlags.Instance | BindingFlags.Public).Invoke(_instance, null);
}

private object _instance;
private Type _type;
private readonly object _instance;
private readonly Type _type;

public IDictionary<string, string> OldNewIdMappings
{
get
{
return (IDictionary<string, string>) _type.GetProperty("OldNewIdMappings", BindingFlags.Public | BindingFlags.Instance).GetValue(_instance);
}
}
}

class XmlSigning
Expand All @@ -107,15 +108,29 @@ public static void SignDirectory(

Type ds = asm.GetType("Knx.Ets.XmlSigning.XmlSigning");

/*
static void SignDirectory(
string path,
bool useCasingOfBaggagesXml = false,
string[] excludeFileEndings = null)
*/
ds.GetMethod("SignDirectory", BindingFlags.Static | BindingFlags.NonPublic).Invoke(null, new object[] { path, useCasingOfBaggagesXml, excludeFileEndings });
}
}

class CatalogIdPatcher
{
public CatalogIdPatcher(
FileInfo catalogFile,
IDictionary<string, string> hardware2ProgramIdMapping)
{
Assembly asm = Assembly.LoadFrom("C:\\Program Files (x86)\\ETS5\\Knx.Ets.XmlSigning.dll");
_instance = Activator.CreateInstance(asm.GetType("Knx.Ets.XmlSigning.CatalogIdPatcher"), catalogFile, hardware2ProgramIdMapping);
_type = asm.GetType("Knx.Ets.XmlSigning.CatalogIdPatcher");
}

public void Patch()
{
_type.GetMethod("Patch", BindingFlags.Instance | BindingFlags.Public).Invoke(_instance, null);
}

private readonly object _instance;
private readonly Type _type;
}
}

namespace CreateKnxProd
Expand Down Expand Up @@ -733,15 +748,16 @@ private void Export(object param)
serializer.Serialize(xmlWriter, document);
}

// Sign ApplicationProgram XML file
// Sign ApplicationProgram XML file and patch RefIds in ApplicationProgram XML file
IDictionary<string, string> applProgIdMappings = new Dictionary<string, string>();
IDictionary<string, string> applProgHashes = new Dictionary<string, string>();
IDictionary<string, string> mapBaggageIdToFileIntegrity = new Dictionary<string, string>(50);

FileInfo applProgFileInfo = new FileInfo(Path.Combine(tempDirectory, mfid, applicationProgramFilename));
FileInfo hwFileInfo = new FileInfo(Path.Combine(tempDirectory, mfid, "Hardware.xml"));
FileInfo catalogFileInfo = new FileInfo(Path.Combine(tempDirectory, mfid, "Catalog.xml"));

Signing.ApplicationProgramHasher aph = new Signing.ApplicationProgramHasher(applProgFileInfo, mapBaggageIdToFileIntegrity, false);
Signing.ApplicationProgramHasher aph = new Signing.ApplicationProgramHasher(applProgFileInfo, mapBaggageIdToFileIntegrity, true);
aph.HashFile();

string oldApplProgId = aph.OldApplProgId;
Expand All @@ -757,9 +773,14 @@ private void Export(object param)
if (!applProgHashes.ContainsKey(newApplProgId))
applProgHashes.Add(newApplProgId, genHashString);

// Sign Hardware.xml
Signing.HardwareSigner hws = new Signing.HardwareSigner(hwFileInfo, applProgIdMappings, applProgHashes);
// Sign Hardware.xml and patch RefIds in Hardware.xml
Signing.HardwareSigner hws = new Signing.HardwareSigner(hwFileInfo, applProgIdMappings, applProgHashes, true);
hws.SignFile();
IDictionary<string, string> hardware2ProgramIdMapping = hws.OldNewIdMappings;

// Patch RefIds in Catalog.xml
Signing.CatalogIdPatcher cip = new Signing.CatalogIdPatcher(catalogFileInfo, hardware2ProgramIdMapping);
cip.Patch();

// Signing directory
Signing.XmlSigning.SignDirectory(Path.Combine(tempDirectory, mfid));
Expand Down

0 comments on commit 9ed6f9f

Please sign in to comment.