| ... | @@ -1754,6 +1754,57 @@ fn writeAllUndefSymbols(self: *MachO) !void { | ... | @@ -1754,6 +1754,57 @@ fn writeAllUndefSymbols(self: *MachO) !void { |
| 1754 | fn codeSign(self: *MachO) !void { | 1754 | fn codeSign(self: *MachO) !void { |
| 1755 | const code_sig_cmd = &self.load_commands.items[self.code_signature_cmd_index.?].LinkeditData; | 1755 | const code_sig_cmd = &self.load_commands.items[self.code_signature_cmd_index.?].LinkeditData; |
| 1756 | // TODO add actual code signing mechanism | 1756 | // TODO add actual code signing mechanism |
| | 1757 | var buffer: std.ArrayListUnmanaged(u8) = .{}; |
| | 1758 | defer buffer.deinit(self.base.allocator); |
| | 1759 | // var super_blob = macho.SuperBlob{ |
| | 1760 | // .magic = macho.CSMAGIC_EMBEDDED_SIGNATURE, |
| | 1761 | // .length = 0, |
| | 1762 | // .count = 2, |
| | 1763 | // }; |
| | 1764 | const length: u32 = @sizeOf(u32) * 12; |
| | 1765 | try buffer.ensureCapacity(self.base.allocator, length); |
| | 1766 | var buf: [@sizeOf(u32)]u8 = undefined; |
| | 1767 | mem.writeIntBig(u32, &buf, macho.CSMAGIC_EMBEDDED_SIGNATURE); |
| | 1768 | buffer.appendSliceAssumeCapacity(buf[0..]); |
| | 1769 | mem.writeIntBig(u32, &buf, length); |
| | 1770 | buffer.appendSliceAssumeCapacity(buf[0..]); |
| | 1771 | mem.writeIntBig(u32, &buf, 2); |
| | 1772 | buffer.appendSliceAssumeCapacity(buf[0..]); |
| | 1773 | // macho.BlobIndex{ |
| | 1774 | // .type = macho.CSSLOT_REQUIREMENTS, |
| | 1775 | // .offset = offset, |
| | 1776 | // }; |
| | 1777 | mem.writeIntBig(u32, &buf, macho.CSSLOT_REQUIREMENTS); |
| | 1778 | buffer.appendSliceAssumeCapacity(buf[0..]); |
| | 1779 | mem.writeIntBig(u32, &buf, 28); |
| | 1780 | buffer.appendSliceAssumeCapacity(buf[0..]); |
| | 1781 | // macho.BlobIndex{ |
| | 1782 | // .type = macho.CSSLOT_SIGNATURESLOT, |
| | 1783 | // .offset = offset, |
| | 1784 | // }; |
| | 1785 | mem.writeIntBig(u32, &buf, macho.CSSLOT_SIGNATURESLOT); |
| | 1786 | buffer.appendSliceAssumeCapacity(buf[0..]); |
| | 1787 | mem.writeIntBig(u32, &buf, 40); |
| | 1788 | buffer.appendSliceAssumeCapacity(buf[0..]); |
| | 1789 | // const requirements_blob = macho.GenericBlob{ |
| | 1790 | // .magic = macho.CSMAGIC_REQUIREMENTS, |
| | 1791 | // .length = 0, |
| | 1792 | // }; |
| | 1793 | mem.writeIntBig(u32, &buf, macho.CSMAGIC_REQUIREMENTS); |
| | 1794 | buffer.appendSliceAssumeCapacity(buf[0..]); |
| | 1795 | mem.writeIntBig(u32, &buf, @sizeOf(u32) * 3); |
| | 1796 | buffer.appendSliceAssumeCapacity(buf[0..]); |
| | 1797 | mem.writeIntBig(u32, &buf, 0); |
| | 1798 | buffer.appendSliceAssumeCapacity(buf[0..]); |
| | 1799 | // const signature_blob = macho.GenericBlob{ |
| | 1800 | // .magic = macho.CSSLOT_SIGNATURESLOT, |
| | 1801 | // .length = 0, |
| | 1802 | // }; |
| | 1803 | mem.writeIntBig(u32, &buf, macho.CSMAGIC_BLOBWRAPPER); |
| | 1804 | buffer.appendSliceAssumeCapacity(buf[0..]); |
| | 1805 | mem.writeIntBig(u32, &buf, @sizeOf(u32) * 2); |
| | 1806 | buffer.appendSliceAssumeCapacity(buf[0..]); |
| | 1807 | try self.base.file.?.pwriteAll(buffer.items[0..], code_sig_cmd.dataoff); |
| 1757 | try self.base.file.?.pwriteAll(&[_]u8{ 0 }, code_sig_cmd.dataoff + code_sig_cmd.datasize - 1); | 1808 | try self.base.file.?.pwriteAll(&[_]u8{ 0 }, code_sig_cmd.dataoff + code_sig_cmd.datasize - 1); |
| 1758 | } | 1809 | } |
| 1759 | | 1810 | |