// (C) 2016 University of Bristol. See License.txt #include #include "octetStream.h" #include #include "Networking/sockets.h" #include "Tools/sha1.h" #include "Exceptions/Exceptions.h" #include "Networking/data.h" void octetStream::assign(const octetStream& os) { if (os.len>=mxlen) { if (data) delete[] data; mxlen=os.mxlen; data=new octet[mxlen]; } len=os.len; memcpy(data,os.data,len*sizeof(octet)); ptr=os.ptr; } octetStream::octetStream(int maxlen) { mxlen=maxlen; len=0; ptr=0; data=new octet[mxlen]; } octetStream::octetStream(const octetStream& os) { mxlen=os.mxlen; len=os.len; data=new octet[mxlen]; memcpy(data,os.data,len*sizeof(octet)); ptr=os.ptr; } void octetStream::hash(octetStream& output) const { blk_SHA_CTX ctx; blk_SHA1_Init(&ctx); blk_SHA1_Update(&ctx,data,len); blk_SHA1_Final(output.data,&ctx); output.len=HASH_SIZE; } octetStream octetStream::hash() const { octetStream h(HASH_SIZE); hash(h); return h; } bigint octetStream::check_sum() const { unsigned char hash[HASH_SIZE]; blk_SHA_CTX ctx; blk_SHA1_Init(&ctx); blk_SHA1_Update(&ctx,data,len); blk_SHA1_Final(hash,&ctx); bigint ans; bigintFromBytes(ans,hash,HASH_SIZE); return ans; } bool octetStream::equals(const octetStream& a) const { if (len!=a.len) { return false; } for (int i=0; i>4; s << hex << t1 << t0 << dec; } return s; }