diff options
Diffstat (limited to 'Swiften/StringCodecs/PBKDF2.h')
| -rw-r--r-- | Swiften/StringCodecs/PBKDF2.h | 19 | 
1 files changed, 17 insertions, 2 deletions
diff --git a/Swiften/StringCodecs/PBKDF2.h b/Swiften/StringCodecs/PBKDF2.h index 7f87af7..0c04145 100644 --- a/Swiften/StringCodecs/PBKDF2.h +++ b/Swiften/StringCodecs/PBKDF2.h @@ -6,11 +6,26 @@  #pragma once -#include "Swiften/Base/ByteArray.h" +#include <Swiften/Base/SafeByteArray.h> +#include <Swiften/Base/Concat.h>  namespace Swift {  	class PBKDF2 {  		public: -			static ByteArray encode(const ByteArray& password, const ByteArray& salt, int iterations); +			template<typename PRF> +			static ByteArray encode(const SafeByteArray& password, const ByteArray& salt, int iterations) { +				PRF prf; +				ByteArray u = prf(password, concat(salt, createByteArray("\0\0\0\1", 4))); +				ByteArray result(u); +				int i = 1; +				while (i < iterations) { +					u = prf(password, u); +					for (unsigned int j = 0; j < u.size(); ++j) { +						result[j] ^= u[j]; +					} +					++i; +				} +				return result; +			}  	};  }  | 
 Swift