Botan 3.0.0
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 {
19 const auto stream_flags = stream.flags();
20 if(stream_flags & std::ios::oct)
21 throw Invalid_Argument("Octal output of BigInt not supported");
22
23 const size_t base = (stream_flags & std::ios::hex) ? 16 : 10;
24
25 std::string enc;
26
27 if(base == 10)
28 enc = n.to_dec_string();
29 else
30 enc = n.to_hex_string();
31
32 stream.write(enc.data(), enc.size());
33
34 if(!stream.good())
35 throw Stream_IO_Error("BigInt output operator has failed");
36 return stream;
37 }
38
39/*
40* Read the BigInt from a stream
41*/
42std::istream& operator>>(std::istream& stream, BigInt& n)
43 {
44 std::string str;
45 std::getline(stream, str);
46 if(stream.bad() || (stream.fail() && !stream.eof()))
47 throw Stream_IO_Error("BigInt input operator has failed");
48 n = BigInt(str);
49 return stream;
50 }
51
52}
std::string to_dec_string() const
Definition: big_code.cpp:14
std::string to_hex_string() const
Definition: big_code.cpp:88
Definition: alg_id.cpp:12
std::ostream & operator<<(std::ostream &out, const OID &oid)
Definition: asn1_oid.cpp:150
int operator>>(int fd, Pipe &pipe)
Definition: fd_unix.cpp:40