39 lines
865 B
C#
39 lines
865 B
C#
namespace Org.BouncyCastle.Crypto.Engines;
|
|
|
|
public class VmpcKsa3Engine : VmpcEngine
|
|
{
|
|
public override string AlgorithmName => "VMPC-KSA3";
|
|
|
|
protected override void InitKey(byte[] keyBytes, byte[] ivBytes)
|
|
{
|
|
s = 0;
|
|
P = new byte[256];
|
|
for (int i = 0; i < 256; i++)
|
|
{
|
|
P[i] = (byte)i;
|
|
}
|
|
for (int j = 0; j < 768; j++)
|
|
{
|
|
s = P[(s + P[j & 0xFF] + keyBytes[j % keyBytes.Length]) & 0xFF];
|
|
byte b = P[j & 0xFF];
|
|
P[j & 0xFF] = P[s & 0xFF];
|
|
P[s & 0xFF] = b;
|
|
}
|
|
for (int k = 0; k < 768; k++)
|
|
{
|
|
s = P[(s + P[k & 0xFF] + ivBytes[k % ivBytes.Length]) & 0xFF];
|
|
byte b2 = P[k & 0xFF];
|
|
P[k & 0xFF] = P[s & 0xFF];
|
|
P[s & 0xFF] = b2;
|
|
}
|
|
for (int l = 0; l < 768; l++)
|
|
{
|
|
s = P[(s + P[l & 0xFF] + keyBytes[l % keyBytes.Length]) & 0xFF];
|
|
byte b3 = P[l & 0xFF];
|
|
P[l & 0xFF] = P[s & 0xFF];
|
|
P[s & 0xFF] = b3;
|
|
}
|
|
n = 0;
|
|
}
|
|
}
|