Rev 26 | Go to most recent revision | Blame | Last modification | View Log | RSS feed
=============================
DC4 FILE FORMAT SPECIFICATION
=============================
Type: Encrypted file
Contents: Binary information
Used by: ViaThinkSoft (De)Coder 4.0
ViaThinkSoft (De)Coder 4.1
Author: Daniel Marschall
Last update: April, 30th 2024
CONTENTS
========
[1.0] Sample file-format by Hagen Reddmann
[2.0] DC4 Standard 1 used by (De)Coder 4.0
[3.0] DC4 Standard 2 used by (De)Coder 4.1 Beta
[4.0] DC4 Standard 3 used by (De)Coder 4.1 Final/Cancelled
[5.0] DC4 Standard 3 used by (De)Coder 5.0
[APP A] Comments
* Links to websites
[1.0] SAMPLE FILE-FORMAT BY HAGEN REDDMANN
==========================================
This file format is NOT used by (De)Coder.
It is only the guideline of the DC4-Format.
Hagen Reddmann posted the demo-algorithm in this topic:
https://www.delphipraxis.net/66783-sichere-verschluesselung-von-dateien-mit-dem-dec-5-1-a.html (in German)
---------------------------------------------------------------------------------------------------
Offset Type Size Content/Description
---------------------------------------------------------------------------------------------------
00h Long 4 DEC 5.1c Cipher idendity with identity-base 0x84485225
0x51F07042 TCipher_Blowfish (KeySize: 56, BlockSize: 8, BufferSize: 8)
0xB6936130 TCipher_Twofish (KeySize: 32, BlockSize: 16, BufferSize: 16)
0x3C212341 TCipher_IDEA (KeySize: 16, BlockSize: 8, BufferSize: 8)
0x42DBD0CA TCipher_Cast256 (KeySize: 32, BlockSize: 16, BufferSize: 16)
0x43B28323 TCipher_Mars (KeySize: 56, BlockSize: 16, BufferSize: 16)
0x76BA0D8C TCipher_RC4 (KeySize: 256, BlockSize: 1, BufferSize: 16)
0x98B46CA0 TCipher_RC6 (KeySize: 256, BlockSize: 16, BufferSize: 16)
0xFDA1E273 TCipher_Rijndael (KeySize: 32, BlockSize: 16, BufferSize: 16, default)
0x2C4D11CF TCipher_Square (KeySize: 16, BlockSize: 16, BufferSize: 16)
0x96954A47 TCipher_SCOP (KeySize: 48, BlockSize: 4, BufferSize: 32, faulty implementation)
0x47E376A6 TCipher_Sapphire(KeySize: 1024, BlockSize: 1, BufferSize: 32)
0x6113DA7A TCipher_1DES (KeySize: 8, BlockSize: 8, BufferSize: 8)
0x73A67594 TCipher_2DES (KeySize: 16, BlockSize: 8, BufferSize: 8)
0xCB1A12F1 TCipher_3DES (KeySize: 24, BlockSize: 8, BufferSize: 8)
0x75D8876B TCipher_2DDES (KeySize: 16, BlockSize: 16, BufferSize: 16)
0x48B8AEDB TCipher_3DDES (KeySize: 24, BlockSize: 16, BufferSize: 16)
0x18A1F944 TCipher_3TDES (KeySize: 24, BlockSize: 24, BufferSize: 24)
0x51C323C2 TCipher_3Way (KeySize: 12, BlockSize: 12, BufferSize: 12)
0xE864D553 TCipher_Cast128 (KeySize: 16, BlockSize: 8, BufferSize: 8)
0xA1EEEAAF TCipher_Gost (KeySize: 32, BlockSize: 8, BufferSize: 8)
0x56555753 TCipher_Misty (KeySize: 16, BlockSize: 8, BufferSize: 8)
0x5BF00A6F TCipher_NewDES (KeySize: 15, BlockSize: 8, BufferSize: 8)
0xB211D023 TCipher_Q128 (KeySize: 16, BlockSize: 16, BufferSize: 16)
0x9FD9A8B9 TCipher_RC2 (KeySize: 128, BlockSize: 8, BufferSize: 8)
0x01BD3D1A TCipher_RC5 (KeySize: 256, BlockSize: 8, BufferSize: 8)
0x92D7CD5C TCipher_SAFER (KeySize: 16, BlockSize: 8, BufferSize: 8)
0x8B78B805 TCipher_Shark (KeySize: 16, BlockSize: 8, BufferSize: 8, faulty implementation)
0xD731ED9F TCipher_Skipjack (KeySize: 10, BlockSize: 8, BufferSize: 8)
0x0402530B TCipher_TEA (KeySize: 16, BlockSize: 8, BufferSize: 8)
0x6B431EA1 TCipher_TEAN (KeySize: 16, BlockSize: 8, BufferSize: 8)
04h Byte 1 DEC 5.1c Cipher mode
0x00 CTSx double CBC, with CFS8 padding of truncated final block (default, proprietary to DEC)
0x01 CBCx Cipher Block Chainung, with CFB8 padding of truncated final block
0x02 CFB8 8bit Cipher Feedback mode
0x03 CFBx CFB on Blocksize of Cipher
0x04 OFB8 8bit Output Feedback mode
0x05 OFBx OFB on Blocksize bytes
0x06 CFS8 8Bit CFS, double CFB
0x07 CFSx CFS on Blocksize bytes
0x08 ECBx Electronic Code Book (CalcMAC not possible)
05h Long 4 DEC 5.1c Hash-Idendity with identity-base 0x84485225.
0xD6B9FFD9 THash_MD2 (DigestSize: 16, BlockSize: 16)
0x3FDA5AEC THash_MD4 (DigestSize: 16, BlockSize: 64)
0x48DD6A7A THash_MD5 (DigestSize: 16, BlockSize: 64)
0xA5B81E29 THash_SHA (DigestSize: 20, BlockSize: 64)
0x7E3889A5 THash_SHA1 (DigestSize: 20, BlockSize: 64, default)
0x9BFE22E7 THash_SHA256 (DigestSize: 32, BlockSize: 64)
0xC19C57B1 THash_SHA384 (DigestSize: 48, BlockSize: 128)
0xFDB0357F THash_SHA512 (DigestSize: 64, BlockSize: 128, default)
0x815B1495 THash_Sapphire (DigestSize: 64, BlockSize: 1)
0x3729E306 THash_Panama (DigestSize: 32, BlockSize: 32)
0x0B148DEE THash_Tiger (DigestSize: 24, BlockSize: 64)
0x42F77C97 THash_RipeMD128 (DigestSize: 16, BlockSize: 64)
0x284031A1 THash_RipeMD160 (DigestSize: 20, BlockSize: 64)
0xE848790E THash_RipeMD256 (DigestSize: 32, BlockSize: 64)
0x4FA820CB THash_RipeMD320 (DigestSize: 40, BlockSize: 64)
0xB59AAC5E THash_Haval128 (DigestSize: 16, BlockSize: 128)
0xDF2DE168 THash_Haval160 (DigestSize: 20, BlockSize: 128)
0xB6BB9C8B THash_Haval192 (DigestSize: 24, BlockSize: 128)
0xBE6A5E2C THash_Haval224 (DigestSize: 28, BlockSize: 128)
0x1F25A9C7 THash_Haval256 (DigestSize: 32, BlockSize: 128)
0x59D2CCC4 THash_Whirlpool (DigestSize: 64, BlockSize: 64)
0xA07F7DB2 THash_Whirlpool1 (DigestSize: 64, BlockSize: 64)
0x9C721C33 THash_Square (DigestSize: 16, BlockSize: 16)
0xE62E90A3 THash_Snefru128 (DigestSize: 16, BlockSize: 48)
0x4C91953A THash_Snefru256 (DigestSize: 32, BlockSize: 32)
09h Byte 1 Size of seed (Default value: 16 Bytes)
0Ah Binary 0-255 Seed (Random data)
Long 4 Size of data
Binary var DEC 5.1c encrypted data; Password = Hash->KDfx(User-Password, Seed); KDFx is proprietary to DEC
Byte 1 Size of CalcMAC
Binary 0-255 DEC "CalcMAC"; Size depends on cipher algorithm and cipher mode. The algorithms of DEC give out CalcMAC with the length 16-64.
---------------------------------------------------------------------------------------------------
[2.0] DC4 STANDARD 1 USED BY (DE)CODER 4.0
==========================================
This file format is used by (De)Coder 4.0
The Idendity-Base of this file format is 0x59178954 (but identities are not used).
---------------------------------------------------------------------------------------------------
Offset Type Size Content/Description
---------------------------------------------------------------------------------------------------
00h Byte 1 Compress mode flag
00h: Uncompressed file - Default in (De)Coder 4.0
01h: Folder compressed with ZIP - Default in (De)Coder 4.0
01h Byte 1 Version flag; Hardcoded value: 01h.
02h String var Original file name, ANSI encoded
Byte 1 Terminus Value: 1Fh ("?")
Binary 16 Seed (Random data. Default size: 16 bytes = 0x10
Binary var DEC 5.1c encrypted data (read until file end minus the size of the checksum)
Password: Hash->KDfx(User-Password, Seed); KDFx is proprietary to DEC
Algorithm: RIJNDAEL (AES)
Mode: CTSx (proprietary to DEC)
Binary var Checksum of the data before encryption
Default hash configuration
Algorithm: SHA 512
Size dependend on the hash algorithm (DigestSize).
The algorithms of DEC give out a hash with the length 16-64.
---------------------------------------------------------------------------------------------------
[3.0] DC4 STANDARD 2 USED BY (DE)CODER 4.1 BETA
===============================================
This file format is used by (De)Coder 4.1 Public Beta 1 through (De)Coder 4.1 Public Beta 4b.
---------------------------------------------------------------------------------------------------
Offset Type Size Content/Description
---------------------------------------------------------------------------------------------------
00h Byte 1 Compress mode flag
00h: Uncompressed file
01h: Folder compressed with ZIP
02h: ZLib-compressed file - Default in (De)Coder 4.1
03h: ZLib-compressed folder, packed ZIP - Default in (De)Coder 4.1
01h Byte 1 Version flag; Hardcoded value: 02h
02h Binary var Original file name, ANSI encoded, in BASE64 (binary)
Byte 1 Terminus Value: 1Fh ("?")
Long 4 DEC 5.1c Idendity-Base; Default 0x84671842
Long 4 DEC 5.1c Cipher idendity. If the default identitiy base 0x84671842 is used, then the identities are:
0xFAD52117 TCipher_Blowfish (KeySize: 56, BlockSize: 8, BufferSize: 8)
0x1DB63065 TCipher_Twofish (KeySize: 32, BlockSize: 16, BufferSize: 16)
0x97047214 TCipher_IDEA (KeySize: 16, BlockSize: 8, BufferSize: 8)
0xE9FE819F TCipher_Cast256 (KeySize: 32, BlockSize: 16, BufferSize: 16)
0xE897D276 TCipher_Mars (KeySize: 56, BlockSize: 16, BufferSize: 16)
0xDD9F5CD9 TCipher_RC4 (KeySize: 256, BlockSize: 1, BufferSize: 16)
0x33913DF5 TCipher_RC6 (KeySize: 256, BlockSize: 16, BufferSize: 16)
0x5684B326 TCipher_Rijndael (KeySize: 32, BlockSize: 16, BufferSize: 16, default)
0x8768409A TCipher_Square (KeySize: 16, BlockSize: 16, BufferSize: 16)
0x3DB01B12 TCipher_SCOP (KeySize: 48, BlockSize: 4, BufferSize: 32, faulty implementation)
0xECC627F3 TCipher_Sapphire(KeySize: 1024, BlockSize: 1, BufferSize: 32)
0xCA368B2F TCipher_1DES (KeySize: 8, BlockSize: 8, BufferSize: 8)
0xD88324C1 TCipher_2DES (KeySize: 16, BlockSize: 8, BufferSize: 8)
0x603F43A4 TCipher_3DES (KeySize: 24, BlockSize: 8, BufferSize: 8)
0xDEFDD63E TCipher_2DDES (KeySize: 16, BlockSize: 16, BufferSize: 16)
0xE39DFF8E TCipher_3DDES (KeySize: 24, BlockSize: 16, BufferSize: 16)
0xB384A811 TCipher_3TDES (KeySize: 24, BlockSize: 24, BufferSize: 24)
0xFAE67297 TCipher_3Way (KeySize: 12, BlockSize: 12, BufferSize: 12)
0x43418406 TCipher_Cast128 (KeySize: 16, BlockSize: 8, BufferSize: 8)
0x0ACBBBFA TCipher_Gost (KeySize: 32, BlockSize: 8, BufferSize: 8)
0xFD700606 TCipher_Misty (KeySize: 16, BlockSize: 8, BufferSize: 8)
0xF0D55B3A TCipher_NewDES (KeySize: 15, BlockSize: 8, BufferSize: 8)
0x19348176 TCipher_Q128 (KeySize: 16, BlockSize: 16, BufferSize: 16)
0x34FCF9EC TCipher_RC2 (KeySize: 128, BlockSize: 8, BufferSize: 8)
0xAA986C4F TCipher_RC5 (KeySize: 256, BlockSize: 8, BufferSize: 8)
0x39F29C09 TCipher_SAFER (KeySize: 16, BlockSize: 8, BufferSize: 8)
0x205DE950 TCipher_Shark (KeySize: 16, BlockSize: 8, BufferSize: 8, faulty implementation)
0x7C14BCCA TCipher_Skipjack (KeySize: 10, BlockSize: 8, BufferSize: 8)
0xAF27025E TCipher_TEA (KeySize: 16, BlockSize: 8, BufferSize: 8)
0xC0664FF4 TCipher_TEAN (KeySize: 16, BlockSize: 8, BufferSize: 8)
Byte 1 DEC 5.1c Cipher mode
0x00 CTSx double CBC, with CFS8 padding of truncated final block (default, proprietary to DEC)
0x01 CBCx Cipher Block Chainung, with CFB8 padding of truncated final block
0x02 CFB8 8bit Cipher Feedback mode
0x03 CFBx CFB on Blocksize of Cipher
0x04 OFB8 8bit Output Feedback mode
0x05 OFBx OFB on Blocksize bytes
0x06 CFS8 8Bit CFS, double CFB
0x07 CFSx CFS on Blocksize bytes
0x08 ECBx Electronic Code Book (CalcMAC not possible)
Long 4 DEC 5.1c Hash idendity. If the default identitiy base 0x84671842 is used, then the identities are:
0x7D9CAE8C THash_MD2 (DigestSize: 16, BlockSize: 16)
0x94FF0BB9 THash_MD4 (DigestSize: 16, BlockSize: 64)
0xE3F83B2F THash_MD5 (DigestSize: 16, BlockSize: 64)
0x0E9D4F7C THash_SHA (DigestSize: 20, BlockSize: 64)
0xD51DD8F0 THash_SHA1 (DigestSize: 20, BlockSize: 64)
0x30DB73B2 THash_SHA256 (DigestSize: 32, BlockSize: 64)
0x6AB906E4 THash_SHA384 (DigestSize: 48, BlockSize: 128)
0x5695642A THash_SHA512 (DigestSize: 64, BlockSize: 128, default)
0x2A7E45C0 THash_Sapphire (DigestSize: 64, BlockSize: 1)
0x9C0CB253 THash_Panama (DigestSize: 32, BlockSize: 32)
0xA031DCBB THash_Tiger (DigestSize: 24, BlockSize: 64)
0xE9D22DC2 THash_RipeMD128 (DigestSize: 16, BlockSize: 64)
0x836560F4 THash_RipeMD160 (DigestSize: 20, BlockSize: 64)
0x436D285B THash_RipeMD256 (DigestSize: 32, BlockSize: 64)
0xE48D719E THash_RipeMD320 (DigestSize: 40, BlockSize: 64)
0x1EBFFD0B THash_Haval128 (DigestSize: 16, BlockSize: 128)
0x7408B03D THash_Haval160 (DigestSize: 20, BlockSize: 128)
0x1D9ECDDE THash_Haval192 (DigestSize: 24, BlockSize: 128)
0x154F0F79 THash_Haval224 (DigestSize: 28, BlockSize: 128)
0xB400F892 THash_Haval256 (DigestSize: 32, BlockSize: 128)
0xF2F79D91 THash_Whirlpool (DigestSize: 64, BlockSize: 64)
0x0B5A2CE7 THash_Whirlpool1 (DigestSize: 64, BlockSize: 64)
0x37574D66 THash_Square (DigestSize: 16, BlockSize: 16)
0x4D0BC1F6 THash_Snefru128 (DigestSize: 16, BlockSize: 48)
0xE7B4C46F THash_Snefru256 (DigestSize: 32, BlockSize: 32)
Byte 1 Size of seed; Default value: 32 byte
Binary 0-255 Seed (Random data)
Binary var With DEC 5.1c encrypted data, encrypted with password (read until file end minus the size of the checksum and the file terminus)
Password = Hash->KDfx(User-Password, Seed); KDFx is proprietary to DEC
Binary var Secured checksum of the data before encryption
= Hash(Hash(Original Data) & Seed & User-Password)
Size dependend on the hash algorithm (DigestSize).
The algorithms of DEC give out a hash with the length 16-64.
Binary 16 DC4-Terminus; Hardcoded value: "RENURVJNSU5VUw==" (BASE64: "DCTERMINUS")
---------------------------------------------------------------------------------------------------
[4.0] DC4 STANDARD 3 USED BY (DE)CODER 4.1 (CANCELLED)
======================================================
This file format was intended to be used by the final version of (De)Coder 4.1, which was never finished and never released.
---------------------------------------------------------------------------------------------------
Offset Type Size Content/Description
---------------------------------------------------------------------------------------------------
00h Byte 1 Compress mode flag
00h: Uncompressed file
01h: Folder compressed with ZIP
02h: ZLib-compressed file - Default in (De)Coder 4.1
03h: ZLib-compressed folder, packed ZIP - Default in (De)Coder 4.1
01h Byte 1 Version flag; Hardcoded value: 03h
02h Byte 1 Filename encrypted with User-Password?
00h: No
01h: Yes
03h Long 4 Size (in bytes) of the encrypted filename that follows
07h Binary var Original file name, not null-terminated WideString (UTF-16)
Encrypted with DEC 5.1c (cipher/hash see below)
If offset 02h of this part has the value 00h:
Encryption-Password = Hash->KDfx(5Eh D1h 6Bh 12h 7Dh B4h C4h 3Ch, Seed)
If offset 02h of this part has the value 01h:
Encryption-Password = Hash->KDfx(User-Password, Seed)
KDFx is proprietary to DEC
Long 4 DEC 5.1c Idendity-Base; Default Idendity-Base: 0x19387612
Long 4 DEC 5.1c Cipher idendity. If the default identitiy base 0x84671842 is used, then the identities are:
0xEC871D7C TCipher_Blowfish (KeySize: 56, BlockSize: 8, BufferSize: 8)
0x0BE40C0E TCipher_Twofish (KeySize: 32, BlockSize: 16, BufferSize: 16)
0x81564E7F TCipher_IDEA (KeySize: 16, BlockSize: 8, BufferSize: 8)
0xFFACBDF4 TCipher_Cast256 (KeySize: 32, BlockSize: 16, BufferSize: 16)
0xFEC5EE1D TCipher_Mars (KeySize: 56, BlockSize: 16, BufferSize: 16)
0xCBCD60B2 TCipher_RC4 (KeySize: 256, BlockSize: 1, BufferSize: 16)
0x25C3019E TCipher_RC6 (KeySize: 256, BlockSize: 16, BufferSize: 16)
0x40D68F4D TCipher_Rijndael (KeySize: 32, BlockSize: 16, BufferSize: 16, default)
0x913A7CF1 TCipher_Square (KeySize: 16, BlockSize: 16, BufferSize: 16)
0x2BE22779 TCipher_SCOP (KeySize: 48, BlockSize: 4, BufferSize: 32, faulty implementation)
0xFA941B98 TCipher_Sapphire(KeySize: 1024, BlockSize: 1, BufferSize: 32)
0xDC64B744 TCipher_1DES (KeySize: 8, BlockSize: 8, BufferSize: 8)
0xCED118AA TCipher_2DES (KeySize: 16, BlockSize: 8, BufferSize: 8)
0x766D7FCF TCipher_3DES (KeySize: 24, BlockSize: 8, BufferSize: 8)
0xC8AFEA55 TCipher_2DDES (KeySize: 16, BlockSize: 16, BufferSize: 16)
0xF5CFC3E5 TCipher_3DDES (KeySize: 24, BlockSize: 16, BufferSize: 16)
0xA5D6947A TCipher_3TDES (KeySize: 24, BlockSize: 24, BufferSize: 24)
0xECB44EFC TCipher_3Way (KeySize: 12, BlockSize: 12, BufferSize: 12)
0x5513B86D TCipher_Cast128 (KeySize: 16, BlockSize: 8, BufferSize: 8)
0x1C998791 TCipher_Gost (KeySize: 32, BlockSize: 8, BufferSize: 8)
0xEB223A6D TCipher_Misty (KeySize: 16, BlockSize: 8, BufferSize: 8)
0xE6876751 TCipher_NewDES (KeySize: 15, BlockSize: 8, BufferSize: 8)
0x0F66BD1D TCipher_Q128 (KeySize: 16, BlockSize: 16, BufferSize: 16)
0x22AEC587 TCipher_RC2 (KeySize: 128, BlockSize: 8, BufferSize: 8)
0xBCCA5024 TCipher_RC5 (KeySize: 256, BlockSize: 8, BufferSize: 8)
0x2FA0A062 TCipher_SAFER (KeySize: 16, BlockSize: 8, BufferSize: 8)
0x360FD53B TCipher_Shark (KeySize: 16, BlockSize: 8, BufferSize: 8, faulty implementation)
0x6A4680A1 TCipher_Skipjack (KeySize: 10, BlockSize: 8, BufferSize: 8)
0xB9753E35 TCipher_TEA (KeySize: 16, BlockSize: 8, BufferSize: 8)
0xD634739F TCipher_TEAN (KeySize: 16, BlockSize: 8, BufferSize: 8)
Byte 1 DEC 5.1c Cipher mode
0x00 CTSx double CBC, with CFS8 padding of truncated final block (default, proprietary to DEC)
0x01 CBCx Cipher Block Chainung, with CFB8 padding of truncated final block
0x02 CFB8 8bit Cipher Feedback mode
0x03 CFBx CFB on Blocksize of Cipher
0x04 OFB8 8bit Output Feedback mode
0x05 OFBx OFB on Blocksize bytes
0x06 CFS8 8Bit CFS, double CFB
0x07 CFSx CFS on Blocksize bytes
0x08 ECBx Electronic Code Book (CalcMAC not possible)
Long 4 DEC 5.1c Hash idendity. If the default identitiy base 0x84671842 is used, then the identities are:
0x6BCE92E7 THash_MD2 (DigestSize: 16, BlockSize: 16)
0x82AD37D2 THash_MD4 (DigestSize: 16, BlockSize: 64)
0xF5AA0744 THash_MD5 (DigestSize: 16, BlockSize: 64)
0x18CF7317 THash_SHA (DigestSize: 20, BlockSize: 64)
0xC34FE49B THash_SHA1 (DigestSize: 20, BlockSize: 64)
0x26894FD9 THash_SHA256 (DigestSize: 32, BlockSize: 64)
0x7CEB3A8F THash_SHA384 (DigestSize: 48, BlockSize: 128)
0x40C75841 THash_SHA512 (DigestSize: 64, BlockSize: 128, default)
0x3C2C79AB THash_Sapphire (DigestSize: 64, BlockSize: 1)
0x8A5E8E38 THash_Panama (DigestSize: 32, BlockSize: 32)
0xB663E0D0 THash_Tiger (DigestSize: 24, BlockSize: 64)
0xFF8011A9 THash_RipeMD128 (DigestSize: 16, BlockSize: 64)
0x95375C9F THash_RipeMD160 (DigestSize: 20, BlockSize: 64)
0x553F1430 THash_RipeMD256 (DigestSize: 32, BlockSize: 64)
0xF2DF4DF5 THash_RipeMD320 (DigestSize: 40, BlockSize: 64)
0x08EDC160 THash_Haval128 (DigestSize: 16, BlockSize: 128)
0x625A8C56 THash_Haval160 (DigestSize: 20, BlockSize: 128)
0x0BCCF1B5 THash_Haval192 (DigestSize: 24, BlockSize: 128)
0x031D3312 THash_Haval224 (DigestSize: 28, BlockSize: 128)
0xA252C4F9 THash_Haval256 (DigestSize: 32, BlockSize: 128)
0xE4A5A1FA THash_Whirlpool (DigestSize: 64, BlockSize: 64)
0x1D08108C THash_Whirlpool1 (DigestSize: 64, BlockSize: 64)
0x2105710D THash_Square (DigestSize: 16, BlockSize: 16)
0x5B59FD9D THash_Snefru128 (DigestSize: 16, BlockSize: 48)
0xF1E6F804 THash_Snefru256 (DigestSize: 32, BlockSize: 32)
Byte 1 Size of seed (default: 32 byte = 0x20)
Binary 0-255 Seed (Random data)
Binary var With DEC 5.1c encrypted data (read until file end minus the size of the checksum and the file terminus)
Encryption-Password = Hash->KDfx(User-Password, Seed); KDFx is proprietary to DEC
[I don't understand this paragraph anymore. You can probably ignore it.]
The final version of (De)Coder 4.1 can also use a 2-factor-method.
The "special-checksum" of a file can be used as the user password.
The formula is:
User-Password = Hash(File-Contents)
Combined formula:
Encryption-Password = Hash->KDfx(Hash(File-Contents), Seed)
[End]
Binary var Secured checksum of the data before encryption
= Hash(Hash(Original Data) & Seed & Hash(Seed & Hash(Seed & User-Password)))
Size dependend on the hash algorithm (DigestSize).
The algorithms of DEC give out a hash with the length 16-64.
Binary 8 DC4-Terminus; Hardcoded value: 63 F3 DF 89 B7 27 20 EA
---------------------------------------------------------------------------------------------------
[5.0] DC4 STANDARD 4 USED BY (DE)CODER 5.0
==========================================
This file format was intended to be used by (De)Coder 5.0. The file-name extension can be dc4 or dc5.
---------------------------------------------------------------------------------------------------
Offset Type Size Content/Description
---------------------------------------------------------------------------------------------------
00h Byte 1 Compress mode flag
Bit 0/LSB: [Ver1+] Is ZIP compressed folder (1) or a regular file (0)?
Bit 1: [Ver2+] Additionally ZLib compressed (1) or not ZLib compressed (0)? (default: 1 for regular files, 0 for ZIP folders)
Bit 2: Reserved
Bit 3: Reserved
Bit 4: Reserved
Bit 5: Reserved
Bit 6: Reserved
Bit 7/MSB: Reserved
01h Byte 1 Version flag; Hardcoded value: 04h
02h Binary 27 Magic Sequence; Hardcoded value: "1.3.6.1.4.1.37476.2.2.1.4"
This is the OID { iso(1) identified-organization(3) dod(6) internet(1) private(4) enterprise(1) 37476 products(2) decoder(2) fileformat(1) dc4(4) }
1Bh Byte 1 Size of the encrypted filename that follows
1Ch Binary var Original file name, UTF-8 Encoded; possible values:
- Original name in its entirety (example "foobar.txt")
- Just its extension (example "*.txt")
- Redacted (empty string "")
Long 4 DEC 6.4 Idendity-Base; Default Idendity-Base: 0x1259D82A.
Backwards compatible with DEC 5.1c. Also, the following internal renaming is applied
to ensure that the identity base is equal to DEC 5.1c:
- TCipher_AES (DEC 6.4) will be renamed to TCipher_Rijndael (DEC 5.1)
- THash_Whirlpool0 (DEC 6.4) will be renamed to THash_Whirlpool (DEC 5.1)
- THash_SHA0 (DEC 6.4) will be renamed to THash_SHA (DEC 5.1)
Long 4 DEC 6.4 Cipher idendity. If the default identitiy base 0x1259D82A is used, then the identities are:
0x14CEB4D7 TCipher_1DES (KeySize: 8, BlockSize: 8, BufferSize: 8)
0x366FED8E TCipher_Mars (KeySize: 56, BlockSize: 16, BufferSize: 16)
0xA2EC8332 TCipher_Skipjack (KeySize: 10, BlockSize: 8, BufferSize: 8)
0xE70AA3F1 TCipher_SAFER (KeySize: 16, BlockSize: 8, BufferSize: 8)
0x9DB9BBFE TCipher_Cast128 (KeySize: 16, BlockSize: 8, BufferSize: 8)
0x03676321 TCipher_RC4 (KeySize: 256, BlockSize: 1, BufferSize: 16)
0xBD7FDE66 TCipher_XTEA (KeySize: 16, BlockSize: 8, BufferSize: 8)
0xE34824EA TCipher_SCOP (KeySize: 48, BlockSize: 4, BufferSize: 32)
0xEA04C614 TCipher_RC2 (KeySize: 128, BlockSize: 8, BufferSize: 8)
0x2E2D64C2 TCipher_NewDES (KeySize: 15, BlockSize: 8, BufferSize: 8)
0xED69020D TCipher_RC6 (KeySize: 256, BlockSize: 16, BufferSize: 16)
0x067B1B39 TCipher_2DES (KeySize: 16, BlockSize: 8, BufferSize: 8)
0xC7CCBE8E TCipher_Q128 (KeySize: 16, BlockSize: 16, BufferSize: 16)
0xC34E0F9D TCipher_Twofish (KeySize: 32, BlockSize: 16, BufferSize: 16)
0x242D1EEF TCipher_Blowfish (KeySize: 56, BlockSize: 8, BufferSize: 8)
0xB83DBC1A TCipher_AES128 (KeySize: 16, BlockSize: 16, BufferSize: 16)
0x3D65C076 TCipher_3DDES (KeySize: 24, BlockSize: 16, BufferSize: 16)
0x6D7C97E9 TCipher_3TDES (KeySize: 24, BlockSize: 24, BufferSize: 24)
0x241E4D6F TCipher_3Way (KeySize: 12, BlockSize: 12, BufferSize: 12)
0x71DF3DA6 TCipher_TEA (KeySize: 16, BlockSize: 8, BufferSize: 8)
0x66BC7BE6 TCipher_Null (KeySize: 0, BlockSize: 1, BufferSize: 8)
0x1282B983 TCipher_AES256 (KeySize: 32, BlockSize: 16, BufferSize: 16)
0xBEC77C5C TCipher_3DES (KeySize: 24, BlockSize: 8, BufferSize: 8)
0x0005E9C6 TCipher_2DDES (KeySize: 16, BlockSize: 16, BufferSize: 16)
0x59907F62 TCipher_Square (KeySize: 16, BlockSize: 16, BufferSize: 16)
0x3706BE67 TCipher_Cast256 (KeySize: 32, BlockSize: 16, BufferSize: 16)
0x323E180B TCipher_Sapphire (KeySize: 1024, BlockSize: 1, BufferSize: 32)
0x49FC4DEC TCipher_IDEA (KeySize: 16, BlockSize: 8, BufferSize: 8)
0x988B2D75 TCipher_AES (KeySize: 32, BlockSize: 16, BufferSize: 16, default)
0xFEA5D6A8 TCipher_Shark (KeySize: 16, BlockSize: 8, BufferSize: 8)
0xD4338402 TCipher_Gost (KeySize: 32, BlockSize: 8, BufferSize: 8)
0x238839FE TCipher_Misty (KeySize: 16, BlockSize: 8, BufferSize: 8)
0x746053B7 TCipher_RC5 (KeySize: 256, BlockSize: 8, BufferSize: 8)
0x1E9E700C TCipher_TEAN (KeySize: 16, BlockSize: 8, BufferSize: 8)
0xBB1C8CCF TCipher_AES192 (KeySize: 24, BlockSize: 16, BufferSize: 16)
Byte 1 DEC 6.4 Cipher mode
0x00 CTSx double CBC, with CFS8 padding of truncated final block (default, proprietary to DEC)
0x01 CBCx Cipher Block Chainung, with CFB8 padding of truncated final block
0x02 CFB8 8bit Cipher Feedback mode
0x03 CFBx CFB on Blocksize of Cipher
0x04 OFB8 8bit Output Feedback mode
0x05 OFBx OFB on Blocksize bytes
0x06 CFS8 8Bit CFS, double CFB
0x07 CFSx CFS on Blocksize bytes
0x08 ECBx Electronic Code Book
0x09 GCM Galois Counter Mode
0x0A CTS3 double CBC, with less secure padding of truncated final block (deprecated)
Long 4 DEC 6.4 Hash idendity. If the default identitiy base 0x1259D82A is used, then the identities are:
0x42F48DAB THash_Panama (DigestSize: 32, BlockSize: 32)
0x9D9517A3 THash_RipeMD256 (DigestSize: 32, BlockSize: 64)
0xC366F226 THash_Haval192 (DigestSize: 24, BlockSize: 128)
0xB441391C THash_SHA384 (DigestSize: 48, BlockSize: 128)
0xEE234C4A THash_SHA256 (DigestSize: 32, BlockSize: 64)
0xC047C2F3 THash_Haval128 (DigestSize: 16, BlockSize: 128)
0xA09321D2 THash_SHA3_224 (DigestSize: 28, BlockSize: 144)
0xE9AF729E THash_Square (DigestSize: 16, BlockSize: 16)
0x2F5EA7BA THash_Keccak_224 (DigestSize: 28, BlockSize: 144)
0x6792C1A1 THash_SHA3_512 (DigestSize: 64, BlockSize: 72, default)
0x93F3FE0E THash_Snefru128 (DigestSize: 16, BlockSize: 48)
0xE85F47C9 THash_Keccak_512 (DigestSize: 64, BlockSize: 72)
0xF4867A38 THash_Sapphire (DigestSize: 64, BlockSize: 1)
0x5BBEA36F THash_SHA3_384 (DigestSize: 48, BlockSize: 104)
0x7CE2D79E THash_SHA0 (DigestSize: 20, BlockSize: 64)
0x8E115051 THash_Keccak_256 (DigestSize: 32, BlockSize: 136)
0xD4732507 THash_Keccak_384 (DigestSize: 48, BlockSize: 104)
0xAAF08FC5 THash_Haval160 (DigestSize: 20, BlockSize: 128)
0x4F6CBBA1 THash_SHA224 (DigestSize: 28, BlockSize: 64)
0xEC61EF43 THash_BCrypt (DigestSize: 23, BlockSize: 8)
0xA2A52389 THash_Whirlpool0 (DigestSize: 64, BlockSize: 64)
0x0BE5E708 THash_SHA1 (DigestSize: 20, BlockSize: 64)
0x6AF8C76A THash_Haval256 (DigestSize: 32, BlockSize: 128)
0x394CFB97 THash_Snefru256 (DigestSize: 32, BlockSize: 32)
0xA3649174 THash_MD2 (DigestSize: 16, BlockSize: 16)
0x4A073441 THash_MD4 (DigestSize: 16, BlockSize: 64)
0x01DCD639 THash_SHA3_256 (DigestSize: 32, BlockSize: 136)
0x5D9D5F0C THash_RipeMD160 (DigestSize: 20, BlockSize: 64)
0x3D0004D7 THash_MD5 (DigestSize: 16, BlockSize: 64)
0xE87A86C8 THash_WhirlpoolT (DigestSize: 64, BlockSize: 64)
0xCBB73081 THash_Haval224 (DigestSize: 28, BlockSize: 128)
0x7EC9E343 THash_Tiger (DigestSize: 24, BlockSize: 64)
0x3A754E66 THash_RipeMD320 (DigestSize: 40, BlockSize: 64)
0xF7DACACC THash_Shake256 (DigestSize: 0, BlockSize: 136)
0x886D5BD2 THash_SHA512 (DigestSize: 64, BlockSize: 128)
0x5D65CF55 THash_Shake128 (DigestSize: 0, BlockSize: 168)
0xD5A2131F THash_Whirlpool1 (DigestSize: 64, BlockSize: 64)
0x372A123A THash_RipeMD128 (DigestSize: 16, BlockSize: 64)
Byte 1 IV Size (default: 16 = 0x10)
Binary var IV (Random Data)
Byte 1 Blocking filling mode (default: 0x00)
0x00 Byte filling mode
Byte 1 Filler byte of last block (default: 0xFF)
Byte 1 Size of seed (default 32 = 0x20)
Binary 0-255 Seed (Random data)
Byte 1 KDF version
0x01 KDF1
0x02 KDF2
0x03 KDF3
0x04 KDFx (default, proprietary to DEC)
0x05 PBKDF2
Long 4 PBKDF iterations (ONLY present if KDF Version = 0x05)
Binary var With DEC 6.4 encrypted data (read until file end minus the size of the checksum)
Encryption-Password = Hash->KDf<Version>(User-Password, Seed)
Binary var HMAC checksum (Encrypt-then-HMAC)
= HMAC(HMacKey, EncryptedData)
with Key = Encryption-Password
Size dependend on the hash algorithm (DigestSize).
The algorithms of DEC give out a hash with the length 16-64.
---------------------------------------------------------------------------------------------------
== [APPENDIX A] COMMENTS ==
* Links to websites
Source code and program "(De)Coder" downloadable at:
https://www.viathinksoft.com/projects/decoder
Other information about the file extension:
https://fileinfo.com/extension/dc4
Delphi Encryption Compendium (DEC) downloadable at:
https://github.com/MHumm/DelphiEncryptionCompendium