Конвертировать Integer обратно в SecByteBlock?

Я использую библиотеку Crypto ++:

DH dh;
AutoSeededRandomPool rnd;
SecByteBlock priv(dh.PrivateKeyLength());
SecByteBlock pub(dh.PublicKeyLength());

Это генерирует закрытый и открытый ключ, используя diffie-hellman:

dh.GenerateKeyPair(rnd, priv, pub);

Здесь я конвертирую нечитаемые закрытые и открытые ключи в Integer (например, 123)

// SecByteBlock -convert-> Integer
Integer a, b;
a.Decode(priv.BytePtr(), priv.SizeInBytes());
b.Decode(pub.BytePtr(), pub.SizeInBytes());

Какой код мне нужно конвертировать обратно из Integer в SecByteBlock?

Integer -convert-> SecByteBlock

3

Решение

Чтобы извлечь байты из IntegerВы используете MinEncodedSize а также Encode методы (см. документацию Crypto ++). Обратите внимание на то, что кодировка имеет порядок байтов.

Вот пример метода, чтобы обернуть это (который предполагает Integer является неподписанным, как применимо в этом случае):

void UnsignedIntegerToByteBlock(const Integer& x, SecByteBlock& bytes)
{
size_t encodedSize = x.MinEncodedSize(Integer::UNSIGNED);
bytes.resize(encodedSize);
x.Encode(bytes.BytePtr(), encodedSize, Integer::UNSIGNED);
}

Вы можете использовать это так:

Integer a;
// ...
SecByteBlock bbA;
UnsignedIntegerToByteBlock(a, bbA);
2

Другие решения


По вопросам рекламы [email protected]