You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

35 lines
1.5 KiB

namespace com.hitrust.util.Encryption
{
using com.hitrust.util.Checksums;
using System;
using System.Security.Cryptography;
public abstract class PkzipClassic : SymmetricAlgorithm
{
protected PkzipClassic()
{
}
public static byte[] GenerateKeys(byte[] seed)
{
if (seed == null)
{
throw new ArgumentNullException("seed");
}
if (seed.Length == 0)
{
throw new ArgumentException("Length is zero", "seed");
}
uint[] newKeys = new uint[] { 0x12345678, 0x23456789, 0x34567890 };
for (int i = 0; i < seed.Length; i++)
{
newKeys[0] = Crc32.ComputeCrc32(newKeys[0], seed[i]);
newKeys[1] += (byte) newKeys[0];
newKeys[1] = (newKeys[1] * 0x8088405) + 1;
newKeys[2] = Crc32.ComputeCrc32(newKeys[2], (byte) (newKeys[1] >> 0x18));
}
return new byte[] { ((byte) (newKeys[0] & 0xff)), ((byte) ((newKeys[0] >> 8) & 0xff)), ((byte) ((newKeys[0] >> 0x10) & 0xff)), ((byte) ((newKeys[0] >> 0x18) & 0xff)), ((byte) (newKeys[1] & 0xff)), ((byte) ((newKeys[1] >> 8) & 0xff)), ((byte) ((newKeys[1] >> 0x10) & 0xff)), ((byte) ((newKeys[1] >> 0x18) & 0xff)), ((byte) (newKeys[2] & 0xff)), ((byte) ((newKeys[2] >> 8) & 0xff)), ((byte) ((newKeys[2] >> 0x10) & 0xff)), ((byte) ((newKeys[2] >> 0x18) & 0xff)) };
}
}
}