Как использовать / устанавливать пользовательские ключи вместо случайно сгенерированных в классе CryptoPP FHMQV? - PullRequest
0 голосов
/ 25 апреля 2020

Я использую CryptoPP 8.2.

Пример в вики Здесь работает. Теперь я хочу отправить сгенерированные ключи через сокет, чтобы вычислить общий секрет на другом конце. Как мне установить полученные ключи в классе FHMQV_Domain?

OID CURVE = secp256r1();
FHMQV_Domain<DL_GroupParameters_EC<ECP>> fhmqvA(CURVE,true); //Client
FHMQV_Domain<DL_GroupParameters_EC<ECP>> fhmqvB(CURVE,false); //Server

Я не видел ни одного метода внутри этого класса для установки пользовательских ключей.

  SecByteBlock sprivA(fhmqvA.StaticPrivateKeyLength()), spubA(fhmqvA.StaticPublicKeyLength());
  // Party A, ephemeral (temporary) key pair
  SecByteBlock eprivA(fhmqvA.EphemeralPrivateKeyLength()), epubA(fhmqvA.EphemeralPublicKeyLength());

  // Party B, static (long term) key pair
  SecByteBlock sprivB(fhmqvB.StaticPrivateKeyLength()), spubB(fhmqvB.StaticPublicKeyLength());
  // Party B, ephemeral (temporary) key pair
  SecByteBlock eprivB(fhmqvB.EphemeralPrivateKeyLength()), epubB(fhmqvB.EphemeralPublicKeyLength());

  // Imitate a long term (static) key
  fhmqvA.GenerateStaticKeyPair(rng, sprivA, spubA);
  // Ephemeral (temporary) key
  fhmqvA.GenerateEphemeralKeyPair(rng, eprivA, epubA);

  // Imitate a long term (static) key
  fhmqvB.GenerateStaticKeyPair(rng, sprivB, spubB);
  // Ephemeral (temporary) key
  fhmqvB.GenerateEphemeralKeyPair(rng, eprivB, epubB);

Это генерирует только случайные ключи. Я хочу предоставить их, когда они уже известны.

на вики-странице у него есть эта функция для создания класса с BufferedTransformation с параметрами и параметрами группы. Но я не знаю, как создать это, или это действительно то, что я ищу.


◆ FHMQV_Domain() [3/7]
Construct a FHMQV domain.

Parameters

bt  BufferedTransformation with group parameters and options
clientRole  flag indicating initiator or recipient```


Я использую эту функцию для создания класса

◆ FHMQV_Domain() [2/7]

Любая помощь будет с благодарностью.

1 Ответ

0 голосов
/ 26 апреля 2020

Хорошо, я собираюсь ответить на это, так как я решил это сам, так что на всякий случай, если кто-то столкнется с моей проблемой.

В примере, показанном в вопросе, мы должны создать spubB и epubB как SecByteBlock с размером StaticPublicKeyLength и EphemeralPublicKeyLength соответственно.

Затем мы можем использовать memcpy, чтобы установить B c stati c и B publi c эфемерный ключ к их BytePtr().

Так что для приведенного выше примера это будет выглядеть примерно так

memcpy(spubB.BytePtr(),(B Static public key's byte array),spubB.SizeInBytes()); //Sets the public static key.
memcpy(epubB.BytePtr(),(B Public ephemeral key's byte array),epubB.SizeInBytes()); //Sets the ephemeral key.
...