MCPcopy Create free account
hub / github.com/GDRETools/gdsdecomp / _close

Method _close

compat/file_access_encrypted_v3.cpp:113–152  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

111}
112
113void FileAccessEncryptedv3::_close() {
114 if (file.is_null()) {
115 return;
116 }
117
118 if (writing) {
119 Vector<uint8_t> compressed;
120 uint64_t len = data.size();
121 if (len % 16) {
122 len += 16 - (len % 16);
123 }
124
125 unsigned char hash[16];
126 ERR_FAIL_COND(CryptoCore::md5(data.ptr(), data.size(), hash) != OK); // Bug?
127
128 compressed.resize(len);
129 memset(compressed.ptrw(), 0, len);
130 for (int i = 0; i < data.size(); i++) {
131 compressed.write[i] = data[i];
132 }
133
134 CryptoCore::AESContext ctx;
135 ctx.set_encode_key(key.ptrw(), 256);
136
137 for (uint64_t i = 0; i < len; i += 16) {
138 ctx.encrypt_ecb(&compressed.write[i], &compressed.write[i]);
139 }
140
141 file->store_32(ENCRYPTED_HEADER_MAGIC);
142 file->store_32(mode);
143
144 file->store_buffer(hash, 16);
145 file->store_64(data.size());
146
147 file->store_buffer(compressed.ptr(), compressed.size());
148 data.clear();
149 }
150
151 file.unref();
152}
153
154bool FileAccessEncryptedv3::is_open() const {
155 return file != nullptr;

Callers

nothing calls this directly

Calls 6

set_encode_keyMethod · 0.80
encrypt_ecbMethod · 0.80
sizeMethod · 0.45
resizeMethod · 0.45
store_bufferMethod · 0.45
clearMethod · 0.45

Tested by

no test coverage detected