Botan 3.6.1
Crypto and TLS for C&
big_io.cpp
Go to the documentation of this file.
1/*
2* BigInt Input/Output
3* (C) 1999-2007 Jack Lloyd
4*
5* Botan is released under the Simplified BSD License (see license.txt)
6*/
7
8#include <botan/bigint.h>
9#include <istream>
10#include <ostream>
11
12namespace Botan {
13
14/*
15* Write the BigInt into a stream
16*/
17std::ostream& operator<<(std::ostream& stream, const BigInt& n) {
18 const auto stream_flags = stream.flags();
19 // NOLINTNEXTLINE(*-non-zero-enum-to-bool-conversion)
20 if(stream_flags & std::ios::oct) {
21 throw Invalid_Argument("Octal output of BigInt not supported");
22 }
23
24 // NOLINTNEXTLINE(*-non-zero-enum-to-bool-conversion)
25 const size_t base = (stream_flags & std::ios::hex) ? 16 : 10;
26
27 if(base == 10) {
28 stream << n.to_dec_string();
29 } else {
30 stream << n.to_hex_string();
31 }
32
33 if(!stream.good()) {
34 throw Stream_IO_Error("BigInt output operator has failed");
35 }
36 return stream;
37}
38
39/*
40* Read the BigInt from a stream
41*/
42std::istream& operator>>(std::istream& stream, BigInt& n) {
43 std::string str;
44 std::getline(stream, str);
45 if(stream.bad() || (stream.fail() && !stream.eof())) {
46 throw Stream_IO_Error("BigInt input operator has failed");
47 }
48 n = BigInt(str);
49 return stream;
50}
51
52} // namespace Botan
std::string to_dec_string() const
Definition big_code.cpp:16
std::string to_hex_string() const
Definition big_code.cpp:86
std::ostream & operator<<(std::ostream &out, const OID &oid)
Definition asn1_obj.h:322
int operator>>(int fd, Pipe &pipe)
Definition fd_unix.cpp:39