MCPcopy Create free account
hub / github.com/diasurgical/devilution / codec_encode

Function codec_encode

Source/codec.cpp:100–138  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

98}
99
100void codec_encode(BYTE *pbSrcDst, DWORD size, int size_64, char *pszPassword)
101{
102 char buf[128];
103 char tmp[SHA1HashSize];
104 char dst[SHA1HashSize];
105 DWORD chunk;
106 WORD last_chunk;
107 CodecSignature *sig;
108
109 if (size_64 != codec_get_encoded_len(size))
110 app_fatal("Invalid encode parameters");
111 codec_init_key(1, pszPassword);
112
113 last_chunk = 0;
114 while (size != 0) {
115 chunk = size < 64 ? size : 64;
116 memcpy(buf, pbSrcDst, chunk);
117 if (chunk < 64)
118 memset(buf + chunk, 0, 64 - chunk);
119 SHA1Result(0, dst);
120 SHA1Calculate(0, buf, NULL);
121 for (int j = 0; j < 64; j++) {
122 buf[j] ^= dst[j % SHA1HashSize];
123 }
124 memset(dst, 0, sizeof(dst));
125 memcpy(pbSrcDst, buf, 64);
126 last_chunk = chunk;
127 pbSrcDst += 64;
128 size -= chunk;
129 }
130 memset(buf, 0, sizeof(buf));
131 SHA1Result(0, tmp);
132 sig = (CodecSignature *)pbSrcDst;
133 sig->error = 0;
134 sig->unused = 0;
135 sig->checksum = *(DWORD *)tmp;
136 sig->last_chunk_size = last_chunk;
137 SHA1Clear();
138}
139
140DEVILUTION_END_NAMESPACE
141

Callers 2

pfile_encode_heroFunction · 0.85
pfile_write_save_fileFunction · 0.85

Calls 6

codec_get_encoded_lenFunction · 0.85
app_fatalFunction · 0.85
codec_init_keyFunction · 0.85
SHA1ResultFunction · 0.85
SHA1CalculateFunction · 0.85
SHA1ClearFunction · 0.85

Tested by

no test coverage detected