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

Function codec_init_key

Source/codec.cpp:56–91  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

54}
55
56void codec_init_key(int unused, char *pszPassword)
57{
58 int i, ch, n;
59 char key[136]; // last 64 bytes are the SHA1
60 char pw[64];
61 char digest[SHA1HashSize];
62 char *keyInit;
63
64 uint32_t rand_state = 0x7058;
65
66 keyInit = key;
67 for (i = 0; i < 136; i++) {
68 rand_state = rand_state * 214013 + 2531011;
69 *keyInit = (rand_state >> 16) & 0x7FFF;
70 keyInit++;
71 }
72 ch = 0;
73 for (i = 0; i < 64; i++) {
74 if (!pszPassword[ch])
75 ch = 0;
76 pw[i] = pszPassword[ch];
77 ch++;
78 }
79 SHA1Reset(0);
80 SHA1Calculate(0, pw, digest);
81 SHA1Clear();
82 for (i = 0; (DWORD)i < 136; i++)
83 key[i] ^= digest[i % SHA1HashSize];
84 memset(pw, 0, sizeof(pw));
85 memset(digest, 0, sizeof(digest));
86 for (n = 0; n < 3; n++) {
87 SHA1Reset(n);
88 SHA1Calculate(n, &key[72], NULL);
89 }
90 memset(key, 0, sizeof(key));
91}
92
93DWORD codec_get_encoded_len(DWORD dwSrcBytes)
94{

Callers 2

codec_decodeFunction · 0.85
codec_encodeFunction · 0.85

Calls 3

SHA1ResetFunction · 0.85
SHA1CalculateFunction · 0.85
SHA1ClearFunction · 0.85

Tested by

no test coverage detected