using Lagrange.Core.Utility.Crypto.Provider.Ecdh; namespace Lagrange.Core.Test.Tests; public class EcdhTest { public static void Test() { { var uncompressedPublicKey = new byte[] { 0x04, 0xEB, 0xCA, 0x94, 0xD7, 0x33, 0xE3, 0x99, 0xB2, 0xDB, 0x96, 0xEA, 0xCD, 0xD3, 0xF6, 0x9A, 0x8B, 0xB0, 0xF7, 0x42, 0x24, 0xE2, 0xB4, 0x4E, 0x33, 0x57, 0x81, 0x22, 0x11, 0xD2, 0xE6, 0x2E, 0xFB, 0xC9, 0x1B, 0xB5, 0x53, 0x09, 0x8E, 0x25, 0xE3, 0x3A, 0x79, 0x9A, 0xDC, 0x7F, 0x76, 0xFE, 0xB2, 0x08, 0xDA, 0x7C, 0x65, 0x22, 0xCD, 0xB0, 0x71, 0x9A, 0x30, 0x51, 0x80, 0xCC, 0x54, 0xA8, 0x2E }; var compressedPublicKey = new byte[] { 0x02, 0xEB, 0xCA, 0x94, 0xD7, 0x33, 0xE3, 0x99, 0xB2, 0xDB, 0x96, 0xEA, 0xCD, 0xD3, 0xF6, 0x9A, 0x8B, 0xB0, 0xF7, 0x42, 0x24, 0xE2, 0xB4, 0x4E, 0x33, 0x57, 0x81, 0x22, 0x11, 0xD2, 0xE6, 0x2E, 0xFB }; EcdhProvider ecdhProvider = new EcdhProvider(EllipticCurve.Prime256V1); var unpacked1 = ecdhProvider.UnpackPublic(uncompressedPublicKey); var unpacked2 = ecdhProvider.UnpackPublic(compressedPublicKey); if (unpacked1.X == unpacked2.X && unpacked1.Y == unpacked2.Y) { Console.WriteLine("UnpackPublic() works correctly"); } else { Console.WriteLine("UnpackPublic() does not work correctly"); } } { // from https://github.com/KonataDev/Konata.Core/blob/develop/Konata.Core.Test/UtilTest/EcdhTest.cs var uncompressedPublicKey = new byte[] { 0x04, 0xD5, 0xCF, 0xB0, 0x2D, 0x5D, 0x4F, 0xCA, 0x2C, 0x84, 0xF6, 0xF1, 0x29, 0x4B, 0x45, 0x5B, 0xAB, 0x4C, 0x96, 0x98, 0xDD, 0x57, 0x2B, 0xF8, 0x63, 0x82, 0xA9, 0xDA, 0xF8, 0xAD, 0xE9, 0xD4, 0x5A, 0x57, 0xDE, 0x14, 0x04, 0xFA, 0x5D, 0x41, 0x29, 0x1E, 0x0A, 0x56, 0xCB, 0x45, 0x08, 0xD3, 0x2F }; var compressedPublicKey = new byte[] { 0x03, 0xD5, 0xCF, 0xB0, 0x2D, 0x5D, 0x4F, 0xCA, 0x2C, 0x84, 0xF6, 0xF1, 0x29, 0x4B, 0x45, 0x5B, 0xAB, 0x4C, 0x96, 0x98, 0xDD, 0x57, 0x2B, 0xF8, 0x63 }; EcdhProvider ecdhProvider = new EcdhProvider(EllipticCurve.Secp192K1); var unpacked1 = ecdhProvider.UnpackPublic(uncompressedPublicKey); var unpacked2 = ecdhProvider.UnpackPublic(compressedPublicKey); if (unpacked1.X == unpacked2.X && unpacked1.Y == unpacked2.Y) { Console.WriteLine("UnpackPublic() works correctly"); } else { Console.WriteLine("UnpackPublic() does not work correctly"); } } } }