-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #8 from cppalliance/file
Add file support to MD5
- Loading branch information
Showing
5 changed files
with
289 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
// Copyright 2024 Matt Borland | ||
// Distributed under the Boost Software License, Version 1.0. | ||
// https://www.boost.org/LICENSE_1_0.txt | ||
|
||
#ifndef BOOST_CRYPT_UTILITY_FILE_HPP | ||
#define BOOST_CRYPT_UTILITY_FILE_HPP | ||
|
||
#include <boost/crypt/utility/config.hpp> | ||
#include <boost/crypt/utility/cstdint.hpp> | ||
|
||
#ifndef BOOST_CRYPT_BUILD_MODULE | ||
#include <fstream> | ||
#include <string> | ||
#include <ios> | ||
#include <exception> | ||
#include <array> | ||
#endif | ||
|
||
namespace boost { | ||
namespace crypt { | ||
namespace utility { | ||
|
||
template <std::size_t block_size = 64U> | ||
class file_reader | ||
{ | ||
private: | ||
std::ifstream fd; | ||
std::array<std::uint8_t, block_size> buffer_ {}; | ||
|
||
public: | ||
explicit file_reader(const std::string& filename) : fd(filename, std::ios::binary | std::ios::in) | ||
{ | ||
if (!fd.is_open()) | ||
{ | ||
throw std::runtime_error("Error opening file: " + filename); | ||
} | ||
} | ||
|
||
explicit file_reader(const char* filename) : fd(filename, std::ios::binary | std::ios::in) | ||
{ | ||
if (!fd.is_open()) | ||
{ | ||
throw std::runtime_error("Error opening file"); | ||
} | ||
} | ||
|
||
#ifdef BOOST_CRYPT_HAS_STRING_VIEW | ||
explicit file_reader(std::string_view filename) : fd(filename.data(), std::ios::binary | std::ios::in) | ||
{ | ||
if (!fd.is_open()) | ||
{ | ||
throw std::runtime_error("Error opening file"); | ||
} | ||
} | ||
#endif | ||
|
||
auto read_next_block() | ||
{ | ||
fd.read(reinterpret_cast<char*>(buffer_.data()), block_size); | ||
return buffer_.begin(); | ||
} | ||
|
||
auto get_bytes_read() const -> std::size_t | ||
{ | ||
return static_cast<std::size_t>(fd.gcount()); | ||
} | ||
|
||
auto eof() const -> bool | ||
{ | ||
return fd.eof(); | ||
} | ||
|
||
~file_reader() | ||
{ | ||
if (fd.is_open()) | ||
{ | ||
fd.close(); | ||
} | ||
} | ||
}; | ||
|
||
} // namespace utility | ||
} // namespace crypt | ||
} // namespace boost | ||
|
||
#endif //BOOST_CRYPT_UTILITY_FILE_HPP |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
The quick brown fox jumps over the lazy dog. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras leo purus, faucibus id risus pulvinar, condimentum molestie justo. Nulla sit amet pulvinar magna. In at quam id leo scelerisque posuere. Nullam porttitor auctor vestibulum. Nullam ac velit orci. Quisque semper hendrerit tortor, eu vulputate mauris vestibulum eget. Quisque nunc neque, posuere ut tortor a, suscipit tristique diam. Maecenas nec elit turpis. Nullam sapien enim, rhoncus et aliquet id, accumsan ac justo. Maecenas eu diam eget lorem vehicula lacinia eget sit amet orci. Ut lobortis magna arcu, pharetra lacinia est lobortis ut. Nam sagittis ex et magna maximus volutpat. Praesent lacinia felis neque. Vestibulum velit nisl, ullamcorper eu hendrerit eget, aliquet vitae ante. Mauris scelerisque blandit felis sed pharetra. | ||
|
||
Etiam a sapien at arcu cursus malesuada. Mauris ut quam velit. Praesent rutrum, neque ut vehicula hendrerit, lorem libero malesuada neque, sed sodales turpis lorem fermentum erat. Vestibulum in eleifend erat, nec blandit libero. Etiam aliquam lacus sit amet nisl cursus, ut consequat orci dignissim. Proin varius lectus augue, a euismod quam euismod at. Nullam augue sapien, finibus viverra ante ac, ultricies eleifend ipsum. Mauris ullamcorper eros nulla, sed porta nulla imperdiet sed. Sed ac massa dui. Pellentesque tellus ligula, posuere quis enim hendrerit, suscipit eleifend felis. Vivamus consectetur feugiat orci a faucibus. Morbi tristique, ex sit amet mollis laoreet, ligula ligula tempor lorem, sed posuere nisl sem at nunc. Morbi a sodales justo. Sed efficitur nibh vitae turpis aliquam semper nec in urna. | ||
|
||
In neque nisl, malesuada eu tristique non, euismod a diam. Sed mattis scelerisque consectetur. Sed in molestie libero, quis porta felis. Curabitur vel augue mauris. Aliquam dignissim facilisis bibendum. Vestibulum ut dignissim metus, ut fermentum elit. Etiam eu arcu id massa tristique semper. Ut lobortis neque eget hendrerit pretium. Nulla congue justo nec nibh cursus mattis. Morbi libero urna, sagittis ac risus vel, rutrum finibus purus. | ||
|
||
Nam mattis fringilla justo eget pretium. Vivamus quis facilisis tortor. Aenean blandit elit eu mollis lacinia. Cras orci odio, aliquet eget lacus ac, feugiat lacinia magna. Pellentesque vel urna congue metus faucibus accumsan. Donec ac tortor feugiat nibh maximus imperdiet non id lectus. Duis commodo, purus eu suscipit porttitor, lorem purus faucibus enim, ac ultricies nulla massa vitae magna. Vestibulum maximus enim ante, quis lacinia magna molestie nec. Donec eleifend sapien at risus iaculis rhoncus. Phasellus sit amet urna pulvinar, commodo mi ut, feugiat sapien. Nullam id felis nec turpis commodo laoreet. | ||
|
||
Vivamus quis felis pretium, bibendum turpis vitae, maximus nulla. Phasellus a elit id erat lacinia lacinia. Nunc in feugiat libero. Morbi sodales quam eget sem egestas varius ut quis orci. In hac habitasse platea dictumst. Sed sollicitudin vestibulum faucibus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Etiam rhoncus nulla elit, id egestas arcu posuere vulputate. Nullam sit amet leo iaculis, viverra nisi nec, efficitur nisi. Fusce nec dui ultricies, ultricies est ac, pretium est. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters