Генерирование 65-байтового открытого ключа c | 32-байтовый закрытый ключ с использованием Bouncy Castle - PullRequest
0 голосов
/ 07 февраля 2020

Мне нужно сгенерировать пары эфемерных ключей в 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 байт)

спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...