Мне нужно сгенерировать пары эфемерных ключей в c C#, мне удалось сгенерировать 65-байтовый ключ publi c, используя этот код:
X9ECParameters x9EC = NistNamedCurves.GetByName("P-256");
ECDomainParameters ecDomain = new ECDomainParameters(x9EC.Curve, x9EC.G, x9EC.N, x9EC.H, x9EC.GetSeed());
ECKeyPairGenerator g = (ECKeyPairGenerator)GeneratorUtilities.GetKeyPairGenerator("ECDH");
g.Init(new ECKeyGenerationParameters(ecDomain, new SecureRandom()));
AsymmetricCipherKeyPair ephemeralKeyPair = g.GenerateKeyPair();
я извлек publi c ключ (65 байт) как этот:
var pubKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(ephemeralKeyPair.Public);
byte[] publicKey = pubKeyInfo.PublicKeyData.GetBytes();
Эфемерный закрытый ключ должен быть выражен в виде целочисленного значения в шестнадцатеричном формате. Связанная кривая - «NIST P-256», но мой закрытый ключ длиннее этого, я использую этот код для извлечения секретного ключа:
var privateKey=PrivateKeyInfoFactory.CreatePrivateKeyInfo(ephemeralKeyPair.Private).ParsePrivateKey().GetDerEncoded();
как мне извлечь 32-байтовый приватный ключ ключ? а также, как я могу сгенерировать Общий секрет, используя алгоритм Диффи-Хеллмана Ellipti c -curve и используя в качестве параметров: -другой заданный ключ publi c (65 байт) -приватный ключ выше (32 байт)
спасибо.