summaryrefslogtreecommitdiffstats
path: root/botan/src/math/bigint/big_io.cpp
diff options
context:
space:
mode:
authorKeith Isdale <keith.isdale@nokia.com>2010-07-26 14:56:53 +1000
committerKeith Isdale <keith.isdale@nokia.com>2010-07-26 14:56:53 +1000
commit9f034793bcfc51c2b7c1dd14db806f7258f9a9eb (patch)
tree63bd0f50ce5b77828ad8205eafd7b9412810499e /botan/src/math/bigint/big_io.cpp
parent619d92cfef29e653bfdf852e83888e50cfc4348f (diff)
parent65271649dbc90f3af1184ad1b23bdb64c0c07d07 (diff)
Merge branch 'master' of git://git-nokia.trolltech.com.au/qtsoftware/research/qtuitest
Diffstat (limited to 'botan/src/math/bigint/big_io.cpp')
-rw-r--r--botan/src/math/bigint/big_io.cpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/botan/src/math/bigint/big_io.cpp b/botan/src/math/bigint/big_io.cpp
new file mode 100644
index 0000000..b50fcce
--- /dev/null
+++ b/botan/src/math/bigint/big_io.cpp
@@ -0,0 +1,55 @@
+/*
+* BigInt Input/Output
+* (C) 1999-2007 Jack Lloyd
+*
+* Distributed under the terms of the Botan license
+*/
+
+#include <botan/bigint.h>
+#include <iostream>
+
+namespace Botan {
+
+/*
+* Write the BigInt into a stream
+*/
+std::ostream& operator<<(std::ostream& stream, const BigInt& n)
+ {
+ BigInt::Base base = BigInt::Decimal;
+ if(stream.flags() & std::ios::hex)
+ base = BigInt::Hexadecimal;
+ else if(stream.flags() & std::ios::oct)
+ base = BigInt::Octal;
+
+ if(n == 0)
+ stream.write("0", 1);
+ else
+ {
+ if(n < 0)
+ stream.write("-", 1);
+ SecureVector<byte> buffer = BigInt::encode(n, base);
+ u32bit skip = 0;
+ while(buffer[skip] == '0' && skip < buffer.size())
+ ++skip;
+ stream.write(reinterpret_cast<const char*>(buffer.begin()) + skip,
+ buffer.size() - skip);
+ }
+ if(!stream.good())
+ throw Stream_IO_Error("BigInt output operator has failed");
+ return stream;
+ }
+
+/*
+* Read the BigInt from a stream
+*/
+std::istream& operator>>(std::istream& stream, BigInt& n)
+ {
+ std::string str;
+ std::getline(stream, str);
+ if(stream.bad() || (stream.fail() && !stream.eof()))
+ throw Stream_IO_Error("BigInt input operator has failed");
+ n = BigInt(str);
+ return stream;
+ }
+
+}