2016-03-10 1 views
0

Я пытаюсь использовать некоторые строки во время компиляции (их не нужно извлекать), используя библиотеку Crypto++ и функцию constexpr. Это код, который я до сих пор:Хранение времени компиляции с constexpr и CryptoPP

constexpr const char* operator "" _SHA3_HASH(const char *input, unsigned int length){ 
    CryptoPP::SHA3_512 hash; 
    byte digest [CryptoPP::SHA3_512::DIGESTSIZE]; 
    hash.CalculateDigest(digest, (byte*)input, length); 
    return (const char*) digest; 
} 

Для использования: std::string passwordHash="password1234"_SHA3_HASH

Я не думаю, что есть способ, я могу получить эту работу, так как CryptoPP::SHA3_512 класс, вероятно, не literal- дружелюбный. Есть ли лучшая (или рабочая) альтернатива, которую я могу использовать?

Примечание:

  • Я предпочел бы использовать библиотеку Crypto ++, если это возможно
  • SHA-3 был бы хорошо, но любой безопасный хэш будет делать
  • Если я не могу во время компиляции хэша, какой мои альтернативы?
  • Я просмотрел возможные дубликаты, но ни один из них не обнаруживает какой-либо метод для сложного кода в функциях constexpr.
  • Я использую встроенный компилятор в Qt creator, который является MinGW 32 бит.

ответ

1

Вы говорите, что время компиляции. Вы действительно это имеете в виду? Это означает, что пользовательский строковый литерал объявлен constexpr, который (AFIAK) невозможен (я пробовал).

Это оставляет маршрут повторной реализации SHA-3 хэш как функции шаблона constexpr со следующей подписью:

template<size_t N> 
constexpr custom_digest sha3_hash(const char (&source)[N]) 
{ 
    // your constexpr-friendly code goes here 
} 

Имейте в виду, что каждая функция вызывается ваша функция constexpr также должна быть constexpr (т.е. дело только в литеральных типах или constexpr пользовательских типах, составленных из них).

Да, const char (&)[N] - буквальный тип.

+0

Я имею в виду, что когда я открываю .exe в Notepad (oe), я не вижу строки, только хэш. Могу ли я попытаться разучиться в [твист-версию] (https://twitter.com/TweetFIPS202)? – Mutantoe

+2

, если вы успешно реализуете хеширование SHA3 как constexpr, то в оптимизированной сборке исходных строк не будет - только хэш (по крайней мере, в clang). –