
2 changed files with 0 additions and 40 deletions
@ -1,21 +0,0 @@ |
|||||
// This file is under GNU General Public License 3.0
|
|
||||
// see LICENSE.txt
|
|
||||
|
|
||||
#include "constant_time_algo.hh" |
|
||||
|
|
||||
namespace pEp { |
|
||||
bool constant_time_equal(const std::string &a, const std::string &b) |
|
||||
{ |
|
||||
if (a.size() != b.size()) |
|
||||
return false; |
|
||||
|
|
||||
unsigned d = 0; |
|
||||
for (std::size_t idx = 0; idx < a.size(); ++idx) { |
|
||||
d |= (static_cast<unsigned>(a[idx]) ^ static_cast<unsigned>(b[idx])); |
|
||||
} |
|
||||
|
|
||||
// if d is still 0, the strings are equal.
|
|
||||
return d == 0; |
|
||||
} |
|
||||
|
|
||||
} // end of namespace pEp
|
|
@ -1,19 +0,0 @@ |
|||||
// This file is under GNU General Public License 3.0
|
|
||||
// see LICENSE.txt
|
|
||||
|
|
||||
#ifndef LIBPEPADAPTER_CONSTANT_TIME_ALGO_HH |
|
||||
#define LIBPEPADAPTER_CONSTANT_TIME_ALGO_HH |
|
||||
|
|
||||
#include <string> |
|
||||
|
|
||||
namespace pEp { |
|
||||
// Returns false if a.size() != b.size().
|
|
||||
// Compares always _all_ characters of 'a' and 'b' so runtime does not
|
|
||||
// depends on the character position where the strings differ.
|
|
||||
// Use this function instead of operator== if timing sidechannel attack
|
|
||||
// might be a security problem.
|
|
||||
bool constant_time_equal(const std::string &a, const std::string &b); |
|
||||
|
|
||||
} // end of namespace pEp
|
|
||||
|
|
||||
#endif // LIBPEPADAPTER_CONSTANT_TIME_ALGO_HH
|
|
Loading…
Reference in new issue