public static byte[] Token(byte[] public_key) { PublicKeyTokenGenerator gen; gen = new PublicKeyTokenGenerator(public_key); return(ExtractAndReverseBytes(gen.ComputeSHA1Hash())); }
private bool ReplaceModuleReference(DllToSign module, DllReference reference) { bool changed; ModuleDefinition md_ref; ModuleDefinition md_sign; md_ref = reference.Module; md_sign = module.Module; changed = false; for (int i = 0; i < md_sign.AssemblyReferences.Count; i++) { // Find any references to our 'reference' DLLs and update them if (md_sign.AssemblyReferences[i].Name == Path.GetFileNameWithoutExtension(md_ref.Name)) { if (Debug) { Console.WriteLine("Debug: Replacing reference to {0}, [{1}, {2}] with [{3}, {4}] in module {5}", md_sign.AssemblyReferences[i].Name, md_sign.AssemblyReferences[i].Version, PrintHex(md_sign.AssemblyReferences[i].PublicKeyToken), md_ref.Assembly.Name.Version, PrintHex(md_ref.Assembly.Name.PublicKeyToken), Path.GetFileNameWithoutExtension(module.Filename) ); } // We have a match - we need to replace they token and version md_sign.AssemblyReferences[i].PublicKeyToken = md_ref.Assembly.Name.PublicKeyToken; md_sign.AssemblyReferences[i].Version = md_ref.Assembly.Name.Version; module.ReferenceFixed = true; } // Find any references to our 'to sign' DLLs and replace the key token with the one we'll use to sign for (int j = 0; j < signdlls.Count; j++) { if (md_sign.AssemblyReferences[i].Name == Path.GetFileNameWithoutExtension(signdlls[j].Module.Name)) { if (Debug) { Console.WriteLine("Debug: Swapping key token for {0} from {1} to {2} in module {3}", Path.GetFileNameWithoutExtension(signdlls[j].Module.Name), PrintHex(md_sign.AssemblyReferences[i].PublicKeyToken), PrintHex(PublicKeyTokenGenerator.Token(keys[signdlls[j].Key].KeyPair)), md_sign.Name ); } md_sign.AssemblyReferences[i].PublicKeyToken = PublicKeyTokenGenerator.Token(keys[signdlls[j].Key].KeyPair); } } } return(changed); }