aboutsummaryrefslogtreecommitdiff
path: root/src/link/MachO/CodeSignature.zig
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2020-12-01 18:02:12 +0100
committerJakub Konka <kubkon@jakubkonka.com>2020-12-01 18:03:31 +0100
commited180465182fb95424f1c08793b529d5ec577018 (patch)
tree614b7046ba82a2749370f54ce5d7743a10289ae7 /src/link/MachO/CodeSignature.zig
parentabb697e751cb0febf4e5e26f0190c01d7c5fd922 (diff)
downloadzig-ed180465182fb95424f1c08793b529d5ec577018.tar.gz
zig-ed180465182fb95424f1c08793b529d5ec577018.zip
macho: dynamically calculate code signature padding
Diffstat (limited to 'src/link/MachO/CodeSignature.zig')
-rw-r--r--src/link/MachO/CodeSignature.zig8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/link/MachO/CodeSignature.zig b/src/link/MachO/CodeSignature.zig
index c7cfdfcb44..442132dac1 100644
--- a/src/link/MachO/CodeSignature.zig
+++ b/src/link/MachO/CodeSignature.zig
@@ -179,3 +179,11 @@ test "CodeSignature header" {
const expected = &[_]u8{ 0xfa, 0xde, 0x0c, 0xc0, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0x0 };
testing.expect(mem.eql(u8, expected[0..], buffer[0..]));
}
+
+pub fn calcCodeSignaturePadding(id: []const u8, file_size: u64) u32 {
+ const ident_size = id.len + 1;
+ const total_pages = mem.alignForwardGeneric(u64, file_size, page_size) / page_size;
+ const hashed_size = total_pages * hash_size;
+ const codesig_header = @sizeOf(macho.SuperBlob) + @sizeOf(macho.BlobIndex) + @sizeOf(macho.CodeDirectory);
+ return @intCast(u32, mem.alignForwardGeneric(u64, codesig_header + ident_size + hashed_size, @sizeOf(u64)));
+}