如何 use/set 自定义密钥而不是在 CryptoPP FHMQV class 上随机生成?

How to use/set custom keys instead of randomly generated on CryptoPP FHMQV class?

我正在使用 CryptoPP 8.2。

wiki Here 中的示例有效。 现在我想通过套接字发送生成的密钥以计算另一端的共享秘密。我如何将收到的密钥设置为 FHMQV_Domain class?

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

我没有在这个 class 中看到任何设置自定义键的方法。

  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);

这只会生成随机密钥。我想在它们已知时提供它们。

在 wiki 页面中,它具有使用 BufferedTransformation 以及组参数和选项创建 class 的功能。但我不知道如何创建它,或者这是否真的是我想要的。


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

Parameters

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


我正在使用此功能进行 class 创建

◆ FHMQV_Domain() [2/7]

任何帮助将不胜感激。

好的,我会回答这个问题,因为我自己解决了这个问题,以防万一有人遇到我的问题。

在问题中显示的示例中,我们必须创建 spubBepubB 作为 SecByteBlock 大小分别为 StaticPublicKeyLengthEphemeralPublicKeyLength

然后我们可以使用 memcpy 来设置 B public staticB public ephemeral 键入他们的 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.