AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |
Back to Blog
Void DecryptData(std:: uint32_t Vector, std:: uint32_t* Data) see "IsTableBlock" above on making sure BlockIndex // is a table or use: // BlockNumber &= (~0x1FF) for( std:: size_t i = 0 i > 24) & 0xFF] Ensure BlockIndex is a valid Table-Block index void DecryptTable(std:: uint32_t BlockIndex, std:: uint32_t* Data) The input Vector is the checksum integer found in the Table-Block. When decrypting a Data-Block, an initial decryption vector is given which selects the appropriate integers from UserKey using the individual bytes of the 32-bit vector integer and xors with the vector integer itself, and subtracts this value from the cipher to get the plaintext before passing on the vector to the next round using the cipher integer. This sum is exclusive-ored with the current 4-byte cipher-word and the block-index followed by a 16-bit left rotation of the result. When decrypting a Table-Block, four of the 256 keys within UserKey are indexed by the four bytes of the 32-bit block-index and then summed together. sai file (block index 0) will be a Table-Block storing related data for the 511 blocks after it. Table-Blocks can be decrypted by random access using only their multiple-of-512 block index and the the UserKey. Table-Blocks and Data-Blocks are encrypted differently using the same UserKey. sai file will be referred to as the UserKey since this is the only symmetrical key used to decrypt and encrypt files generated by the end-ser. Different files related to Sai use different static keys. Return (BlockIndex & 0x1FF) ? true: false Īll blocks are encrypted and decrypted symmetrically using a simple exclusive-or-based encryption which refers to a static atlas of 256 32-bit integers which can be found at the end of this text. Return (BlockIndex & 0x1FF) ? false: true īool IsDataBlock(std:: size_t BlockIndex) PAINTTOOL SAI PROJECT A LINE ACROSS THE IMAGE HOW TODemonstrating how to quickly determine if a block Index is a data-block or a table-block bool IsTableBlock(std:: size_t BlockIndex) Std:: size_t NearestTable(std:: size_t BlockIndex) Gets the Table-Block index appropriate for the current block index Every other block that is not a Table-Block is a Data-Block: Every block index that is a multiple of 512( 0, 512, 1024, etc) is a Table-Block containing meta-data about the block itself and the 511 blocks after it. sai documents and very partially show related information for the other files.Īn individual block in a. This document will mostly cover the method used for sai's user created. PAINTTOOL SAI PROJECT A LINE ACROSS THE IMAGE ARCHIVEIt's been found that some preliminary files such as thumbnails and the archive responsible for swatches/palettes use a different decryption key, block size, and Table-Block location. The file itself is encrypted in ECB blocks in which any randomly accessed block can be decrypted by also decrypting the appropriate Table-Block and accessing its 32-bit key found within. Each layer, mask, and related meta data is stored in an individual pseudo-file which also has a layer of block-level encryption. sai file among with other files such as thumbnails, the sai.ssd file and others is but an archive containing a file-system-like structure once decrypted. sai as its document format for storing both raster and vector layers as well as other canvas related meta-data. PAINTTOOL SAI PROJECT A LINE ACROSS THE IMAGE SOFTWARE
0 Comments
Read More
Leave a Reply. |