55 {
56 if (ringPayloads.GetDirectDequeueSize() >= payloadLen) {
57 return Decode(symmetricKey,randKey, payloadLen, checkSum, ringPayloads.GetDequeueBufferPtr());
58 }
59 else {
60 BYTE Pb = checkSum ^ (symmetricKey + 1);
61 BYTE payloadSum = Pb ^ (randKey + 1);
64 BYTE payloadSumCmp = 0;
65
66 UINT offset = ringPayloads.GetDeqOffset();
67 BYTE* bytepayloads = ringPayloads.GetBeginBufferPtr();
68 for (USHORT i = 1; i <= payloadLen; i++, offset++) {
69 offset = offset % (ringPayloads.GetBufferSize() + 1);
70
71
72 Pn = bytepayloads[offset] ^ (Eb + symmetricKey + i + 1);
73 Dn = Pn ^ (Pb + randKey + i + 1);
74
75 Pb = Pn;
76 Eb = bytepayloads[offset];
77 bytepayloads[offset] = Dn;
78 payloadSumCmp += bytepayloads[offset];
79 payloadSumCmp %= 256;
80 }
81
82 if (payloadSum != payloadSumCmp) {
83#if defined(ASSERT)
84 DebugBreak();
85#endif
86 return false;
87 }
88
89 return true;
90 }
91}
bool Decode(BYTE symmetricKey, BYTE randKey, USHORT payloadLen, BYTE checkSum, BYTE *payloads)
Definition JNetEncryption.cpp:25