C++ массивы байт переменной (неизвестной) длины для представления данных и SHA256

275
16 мая 2018, 19:40

Хочу переписать этот код с Go на C++/Boost ради опыта работы с библиотеками типа asio.

package main
import "time"
import "strconv"
import "bytes"
import "crypto/sha256"
type Block struct {
    Timestamp     int64
    Data          []byte
    PrevBlockHash []byte
    Hash          []byte
}
func (block *Block) SetHash() {
    timestamp := []byte(strconv.FormatInt(block.Timestamp, 10))
    headers := bytes.Join([][]byte{ block.PrevBlockHash, block.Data, timestamp }, []byte{})
    hash := sha256.Sum256(headers)
    block.Hash = hash[:]
}

Так как я не до донца понимаю, как устроен Golang, возникли вопросы насчет выбора типов данных. Timestamp из структуры Block можно оставить таким же uint64_t. Data, PrevBlockHash и Hash здесь массивы произвольной длины, кроме хэшей, который представлены 32-байтными массивами байт. Чем можно заменить эти массивы байт в C++? Использовать std::string? Я ведь не буду использовать const char* и рисковать сделать учечку памяти.

Какую библиотеку sha256 выбрать? SSL? Есть ли криптография в бусте?

READ ALSO
Цикличный сдвиг элементов списка [требует правки]

Цикличный сдвиг элементов списка [требует правки]

Как реализовать цикличный сдвиг элементов списка?

250
Расшифровка CryptoStream в с++

Расшифровка CryptoStream в с++

Есть файл зашифрованный с помощью класса CryptoStream (NET Framework)

281
Наследование шаблона с++ [дубликат]

Наследование шаблона с++ [дубликат]

На данный вопрос уже ответили:

229
Ошибка в библиотеке functional? - C++

Ошибка в библиотеке functional? - C++

При попытке подключения библиотеки thread или mutex компиляция падаетОшибка находится в библиотеке functional из стандарта C++ При ее подключении программа...

276