1f72f8299SJan Lentfer 2327e51cbSPeter Avalos#------------------------------------------------------------------------------ 3*614728caSSascha Wildner# $File: gnu,v 1.24 2021/04/26 15:56:00 christos Exp $ 4327e51cbSPeter Avalos# gnu: file(1) magic for various GNU tools 5327e51cbSPeter Avalos# 6327e51cbSPeter Avalos# GNU nlsutils message catalog file format 7327e51cbSPeter Avalos# 817b11469SPeter Avalos# GNU message catalog (.mo and .gmo files) 917b11469SPeter Avalos 106fca56fbSSascha Wildner# Update: Joerg Jenderek 116fca56fbSSascha Wildner# URL: https://www.gnu.org/software/gettext/manual/html_node/MO-Files.html 126fca56fbSSascha Wildner# Reference: ftp://ftp.gnu.org/pub/gnu/gettext/gettext-0.19.8.tar.gz/ 136fca56fbSSascha Wildner# gettext-0.19.8.1/gettext-runtime/intl/gmo.h 146fca56fbSSascha Wildner# Note: maybe call it like "GNU translation gettext machine object" 15327e51cbSPeter Avalos0 string \336\22\4\225 GNU message catalog (little endian), 166fca56fbSSascha Wildner#0 ulelong 0x950412DE GNU-format message catalog data 176fca56fbSSascha Wildner# TODO: write lines in such a way that code can also be called for big endian variant 186fca56fbSSascha Wildner#>0 use gettext-object 196fca56fbSSascha Wildner#0 name gettext-object 206fca56fbSSascha Wildner>4 ulelong x revision 216fca56fbSSascha Wildner!:mime application/x-gettext-translation 226fca56fbSSascha Wildner# mo extension is also used for Easeus Partition Master PE32 executable module 236fca56fbSSascha Wildner# like ConvertFatToNTFS.mo 246fca56fbSSascha Wildner!:ext gmo/mo 256fca56fbSSascha Wildner# only found three revision combinations 0.0 0.1 1.1 as unsigned 32-bit 266fca56fbSSascha Wildner# major revision 276fca56fbSSascha Wildner>4 ulelong/0xFFff x %u. 286fca56fbSSascha Wildner# minor revision 296fca56fbSSascha Wildner>4 ulelong&0x0000FFff x \b%u 306fca56fbSSascha Wildner>>8 ulelong x \b, %u message 316fca56fbSSascha Wildner# plural s 326fca56fbSSascha Wildner>>8 ulelong >1 \bs 336fca56fbSSascha Wildner# size of hashing table 346fca56fbSSascha Wildner#>20 ulelong x \b, %u hash 356fca56fbSSascha Wildner#>20 ulelong >1 \bes 36*614728caSSascha Wildner#>24 ulelong x at %#x 37970935fdSSascha Wildner# for revision x.0 offset of table with originals is 1Ch if directly after header 386fca56fbSSascha Wildner>4 ulelong&0x0000FFff =0 39*614728caSSascha Wildner>>12 ulelong !0x1C \b, at %#x string table 406fca56fbSSascha Wildner# but for x.1 table offset i found is 30h. That means directly after bigger header 416fca56fbSSascha Wildner>4 ulelong&0x0000FFff >0 42*614728caSSascha Wildner>>12 ulelong !0x30 \b, at %#x string table 436fca56fbSSascha Wildner# The following variables are only used in .mo files with minor revision >= 1 446fca56fbSSascha Wildner# number of system dependent segments 456fca56fbSSascha Wildner#>>28 ulelong x \b, %u segment 466fca56fbSSascha Wildner#>>28 ulelong >1 \bs 476fca56fbSSascha Wildner# offset of table describing system dependent segments 48*614728caSSascha Wildner#>>32 ulelong x at %#x 496fca56fbSSascha Wildner# number of system dependent strings pairs 506fca56fbSSascha Wildner>>36 ulelong x \b, %u sysdep message 516fca56fbSSascha Wildner>>36 ulelong >1 \bs 526fca56fbSSascha Wildner# offset of table with start offsets of original sysdep strings 53*614728caSSascha Wildner#>>40 ulelong x \b, at %#x sysdep strings 546fca56fbSSascha Wildner# offset of table with start offsets of translated sysdep strings 55*614728caSSascha Wildner#>>44 ulelong x \b, at %#x sysdep translations 56*614728caSSascha Wildner# >>(44.l) ulelong x %#x chars 57*614728caSSascha Wildner# >>>&0 ulelong x at %#x 586fca56fbSSascha Wildner# >>>>(&-4) string x "%s" 596fca56fbSSascha Wildner# string table after big header 60*614728caSSascha Wildner#>>48 ubequad x \b, string table %#llx 616fca56fbSSascha Wildner# 626fca56fbSSascha Wildner# 0th string length seems to be always 0 636fca56fbSSascha Wildner#>(12.l) ulelong x \b, %u chars 64*614728caSSascha Wildner#>>&0 ulelong x at %#x 65970935fdSSascha Wildner# if 1st string length positive inspect offset and string 666fca56fbSSascha Wildner#>(12.l+8) ulelong >0 \b, %u chars 67*614728caSSascha Wildner#>>&0 ulelong x at %#x 68970935fdSSascha Wildner# if 2nd string length positive inspect offset and string 696fca56fbSSascha Wildner# >(12.l+16) ulelong >0 \b, %u chars 70*614728caSSascha Wildner# >>&0 ulelong x at %#x 716fca56fbSSascha Wildner# skip newline byte 726fca56fbSSascha Wildner#>>>(&-4) ubyte =0x0A 736fca56fbSSascha Wildner#>>>>&0 string x "%s" 746fca56fbSSascha Wildner#>>>(&-4) ubyte !0x0A 756fca56fbSSascha Wildner#>>>>&-1 string x '%s' 766fca56fbSSascha Wildner# offset of table with translation strings 77*614728caSSascha Wildner#>16 ulelong x \b, at %#x translation table 786fca56fbSSascha Wildner# check translation 0 length and offset 796fca56fbSSascha Wildner>(16.l) ulelong >0 806fca56fbSSascha Wildner>>&0 ulelong x 816fca56fbSSascha Wildner# translation 0 seems to be often Project-Id with name and version 826fca56fbSSascha Wildner>>>(&-4) string x \b, %s 836fca56fbSSascha Wildner# trans. 1 with bytes >= 1 unlike icoutils-0.31.0\po\en@boldquot.gmo with 1 NL 846fca56fbSSascha Wildner>(16.l+8) ulelong >1 856fca56fbSSascha Wildner>>&0 ulelong x 866fca56fbSSascha Wildner>>>(&-4) ubyte !0x0A 876fca56fbSSascha Wildner>>>>&-1 string x '%s' 886fca56fbSSascha Wildner# 1 New Line like in tar-1.29\po\de.gmo 896fca56fbSSascha Wildner>>>(&-4) ubyte =0x0A 906fca56fbSSascha Wildner>>>>&0 ubyte !0x0A 916fca56fbSSascha Wildner>>>>>&-1 string x '%s' 926fca56fbSSascha Wildner# 2nd New Line like in parted-3.1\po\de.gmo 936fca56fbSSascha Wildner>>>>&0 ubyte =0x0A 946fca56fbSSascha Wildner>>>>>&0 string x '%s' 9517b11469SPeter Avalos 96327e51cbSPeter Avalos0 string \225\4\22\336 GNU message catalog (big endian), 976fca56fbSSascha Wildner#0 ubelong 0x950412DE GNU-format message catalog data 986fca56fbSSascha Wildner!:mime application/x-gettext-translation 996fca56fbSSascha Wildner!:ext gmo/mo 1006fca56fbSSascha Wildner# TODO: for big endian use same code as for little endian 1016fca56fbSSascha Wildner#>0 use \^gettext-object 1026fca56fbSSascha Wildner# DEBUG code 103*614728caSSascha Wildner#>16 ubelong x \b, at %#x translation table 104*614728caSSascha Wildner#>(16.L) ubelong x %#x chars 105*614728caSSascha Wildner#>>&0 ubelong x at %#x 1066fca56fbSSascha Wildner# unexpected value HERE! 107*614728caSSascha Wildner#>>>(&-4) ubequad x %#llx 1086fca56fbSSascha Wildner# 10917b11469SPeter Avalos>4 beshort x revision %d. 11017b11469SPeter Avalos>6 beshort >0 \b%d, 11117b11469SPeter Avalos>>8 belong x %d messages, 11217b11469SPeter Avalos>>36 belong x %d sysdep messages 11317b11469SPeter Avalos>6 beshort =0 \b%d, 11417b11469SPeter Avalos>>8 belong x %d messages 11517b11469SPeter Avalos 116327e51cbSPeter Avalos 117327e51cbSPeter Avalos# GnuPG 118327e51cbSPeter Avalos# The format is very similar to pgp 119327e51cbSPeter Avalos0 string \001gpg GPG key trust database 120327e51cbSPeter Avalos>4 byte x version %d 12179343712SPeter Avalos# Note: magic.mime had 0x8501 for the next line instead of 0x8502 122327e51cbSPeter Avalos0 beshort 0x8502 GPG encrypted data 12379343712SPeter Avalos!:mime text/PGP # encoding: data 12479343712SPeter Avalos 1256fca56fbSSascha Wildner# Update: Joerg Jenderek 1266fca56fbSSascha Wildner# Note: PGP and GPG use same data structure. 1276fca56fbSSascha Wildner# So recognition is now done by ./pgp with start test for byte 0x99 128327e51cbSPeter Avalos# This magic is not particularly good, as the keyrings don't have true 129327e51cbSPeter Avalos# magic. Nevertheless, it covers many keyrings. 1306fca56fbSSascha Wildner# 0 ubeshort-0x9901 <2 1316fca56fbSSascha Wildner# >3 byte 4 1326fca56fbSSascha Wildner# >>4 bedate x GPG key public ring, created %s 1336fca56fbSSascha Wildner# !:mime application/x-gnupg-keyring 134c30bd091SSascha Wildner 135e8af9738SPeter Avalos# Symmetric encryption 136e8af9738SPeter Avalos0 leshort 0x0d8c 137e8af9738SPeter Avalos>4 leshort 0x0203 138e8af9738SPeter Avalos>>2 leshort 0x0204 GPG symmetrically encrypted data (3DES cipher) 139e8af9738SPeter Avalos>>2 leshort 0x0304 GPG symmetrically encrypted data (CAST5 cipher) 140e8af9738SPeter Avalos>>2 leshort 0x0404 GPG symmetrically encrypted data (BLOWFISH cipher) 141e8af9738SPeter Avalos>>2 leshort 0x0704 GPG symmetrically encrypted data (AES cipher) 142e8af9738SPeter Avalos>>2 leshort 0x0804 GPG symmetrically encrypted data (AES192 cipher) 143e8af9738SPeter Avalos>>2 leshort 0x0904 GPG symmetrically encrypted data (AES256 cipher) 144e8af9738SPeter Avalos>>2 leshort 0x0a04 GPG symmetrically encrypted data (TWOFISH cipher) 145e8af9738SPeter Avalos>>2 leshort 0x0b04 GPG symmetrically encrypted data (CAMELLIA128 cipher) 146e8af9738SPeter Avalos>>2 leshort 0x0c04 GPG symmetrically encrypted data (CAMELLIA192 cipher) 147e8af9738SPeter Avalos>>2 leshort 0x0d04 GPG symmetrically encrypted data (CAMELLIA256 cipher) 148e8af9738SPeter Avalos 149e8af9738SPeter Avalos 150e8af9738SPeter Avalos# GnuPG Keybox file 1516fca56fbSSascha Wildner# <https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob;f=kbx/keybox-blob.c;hb=HEAD> 152e8af9738SPeter Avalos# From: Philipp Hahn <hahn@univention.de> 153e8af9738SPeter Avalos0 belong 32 154e8af9738SPeter Avalos>4 byte 1 155e8af9738SPeter Avalos>>8 string KBXf GPG keybox database 156e8af9738SPeter Avalos>>>5 byte 1 version %d 157e8af9738SPeter Avalos>>>16 bedate x \b, created-at %s 158e8af9738SPeter Avalos>>>20 bedate x \b, last-maintained %s 159e8af9738SPeter Avalos 160e8af9738SPeter Avalos 161327e51cbSPeter Avalos# From: James Youngman <jay@gnu.org> 162327e51cbSPeter Avalos# gnu find magic 163327e51cbSPeter Avalos0 string \0LOCATE GNU findutils locate database data 164327e51cbSPeter Avalos>7 string >\0 \b, format %s 165327e51cbSPeter Avalos>7 string 02 \b (frcode) 16679343712SPeter Avalos 16779343712SPeter Avalos# Files produced by GNU gettext 1689f86ab30SPeter Avalos 1699f86ab30SPeter Avalos# gettext message catalogue 170c30bd091SSascha Wildner0 search/1024 \nmsgid 171c30bd091SSascha Wildner>&0 search/1024 \nmsgstr GNU gettext message catalogue text 172c30bd091SSascha Wildner!:strength +100 1739f86ab30SPeter Avalos!:mime text/x-po 174