如何 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]
任何帮助将不胜感激。
好的,我会回答这个问题,因为我自己解决了这个问题,以防万一有人遇到我的问题。
在问题中显示的示例中,我们必须创建 spubB 和 epubB 作为 SecByteBlock
大小分别为 StaticPublicKeyLength
和 EphemeralPublicKeyLength
。
然后我们可以使用 memcpy
来设置 B public static 和 B 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.
我正在使用 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]
任何帮助将不胜感激。
好的,我会回答这个问题,因为我自己解决了这个问题,以防万一有人遇到我的问题。
在问题中显示的示例中,我们必须创建 spubB 和 epubB 作为 SecByteBlock
大小分别为 StaticPublicKeyLength
和 EphemeralPublicKeyLength
。
然后我们可以使用 memcpy
来设置 B public static 和 B 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.