public override void CryptApiData(DRIS dris, byte[] data, int length, int alg_answer) { int i, j, k; var bigseed = new byte[256]; var S = new byte[256]; byte temp, t; for (i = 0; i < 256; i += 8) { dris.Set4Bytes(bigseed, i, dris.seed1); dris.Set4Bytes(bigseed, i + 4, dris.seed2); } for (i = 0; i < 256; i++) { S[i] = (byte)i; } for (i = 0, j = 0; i < 256; i++) { j = (j + S[i] + bigseed[i] + 7) % 256; temp = S[i]; S[i] = S[j]; S[j] = temp; } for (i = 0, j = 0, k = 0; k < length; k++) { i = (i + 1) % 256; j = (j + S[i] + 71) % 256; temp = S[i]; S[i] = S[j]; S[j] = temp; t = (byte)(S[i] + S[j] + 16); data[k] ^= S[t]; } }
public override void CryptDRIS(DRIS dris) { int i, j, k; var bigseed = new byte[256]; var S = new byte[256]; byte temp, t; var dris_bytes = new byte[Marshal.SizeOf(dris)]; dris.DrisToByteArray(dris, dris_bytes); // convert DRIS to byte array so we can encrypt it for (i = 0; i < 256; i += 8) { dris.Set4Bytes(bigseed, i, dris.seed1); dris.Set4Bytes(bigseed, i + 4, dris.seed2); } for (i = 0; i < 256; i++) { S[i] = (byte)i; } for (i = 0, j = 0; i < 256; i++) { j = (j + S[i] + bigseed[i] + 11) % 256; temp = S[i]; S[i] = S[j]; S[j] = temp; } for (i = 0, j = 0, k = 16; k < Marshal.SizeOf(dris); k++) { i = (i + 1) % 256; j = (j + S[i] + 37) % 256; temp = S[i]; S[i] = S[j]; S[j] = temp; t = (byte)(S[i] + S[j] + 17); dris_bytes[k] ^= S[t]; } dris.ByteArrayToDris(dris_bytes, dris); // convert it back again }