2
0
mirror of https://github.com/boostorg/hash2.git synced 2026-01-22 05:12:36 +00:00
Files
hash2/test/md5.cpp
2018-01-06 16:45:24 +02:00

57 lines
1.8 KiB
C++

// Copyright 2017, 2018 Peter Dimov.
// Distributed under the Boost Software License, Version 1.0.
#define _CRT_SECURE_NO_WARNINGS
#include <boost/hash2/md5.hpp>
#include <boost/core/lightweight_test.hpp>
#include <boost/cstdint.hpp>
#include <string>
#include <cstddef>
#include <cstdio>
using boost::hash2::byte_type;
template<std::size_t N> std::string to_string( boost::array<byte_type, N> const & v )
{
std::string r;
for( std::size_t i = 0; i < N; ++i )
{
char buffer[ 8 ];
std::sprintf( buffer, "%02x", static_cast<int>( v[ i ] ) );
r += buffer;
}
return r;
}
template<class H> std::string digest( char const * s )
{
H h;
h.update( reinterpret_cast<byte_type const*>( s ), std::strlen( s ) );
return to_string( h.result() );
}
using boost::hash2::md5_128;
int main()
{
// Test vectors from https://tools.ietf.org/html/rfc1321
BOOST_TEST_EQ( digest<md5_128>( "" ), std::string( "d41d8cd98f00b204e9800998ecf8427e" ) );
BOOST_TEST_EQ( digest<md5_128>( "a" ), std::string( "0cc175b9c0f1b6a831c399e269772661" ) );
BOOST_TEST_EQ( digest<md5_128>( "abc" ), std::string( "900150983cd24fb0d6963f7d28e17f72" ) );
BOOST_TEST_EQ( digest<md5_128>( "message digest" ), std::string( "f96b697d7cb7938d525a2f31aaf161d0" ) );
BOOST_TEST_EQ( digest<md5_128>( "abcdefghijklmnopqrstuvwxyz" ), std::string( "c3fcd3d76192e4007dfb496cca67e13b" ) );
BOOST_TEST_EQ( digest<md5_128>( "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" ), std::string( "d174ab98d277d9f5a5611c2c9f419d9f" ) );
BOOST_TEST_EQ( digest<md5_128>( "12345678901234567890123456789012345678901234567890123456789012345678901234567890" ), std::string( "57edf4a22be3c955ac49da2e2107b67a" ) );
return boost::report_errors();
}