public static UInt16 Decrypt(ElGamalKey key, KeyValuePair <ushort, ushort> decrypted) { var apx = (UInt16)PrimitiveUtilities.ModularPower(decrypted.Key, key.P - 1 - key.X, key.P); var bapx = (UInt16)((decrypted.Value * apx) % key.P); return(bapx); }
public static KeyValuePair <UInt16, UInt16> EncryptKey(ElGamalKey key, UInt16 value) { Random random = new Random(); var k = random.Next(1, key.P - 1); var a = (UInt16)PrimitiveUtilities.ModularPower(key.G, k, key.P); var b = (UInt16)PrimitiveUtilities.ModularPower(key.Y, k, key.P); var c = (b * value) % key.P; return(new KeyValuePair <ushort, ushort>(a, (UInt16)c)); }