#include #include #include #include #include #include #include #include #include #include "eyetil.h" #include "config.h" #ifdef HAVE_LIBUUID # include #endif binary_t& binary_t::from_hex(const std::string& h) { std::string::size_type hs = h.length(); if(hs&1) throw std::runtime_error("odd number of characters in hexadecimal number"); size_t rvs = hs>>1; resize(rvs); const unsigned char *hp = (const unsigned char*)h.data(); iterator oi=begin(); char t[3] = { 0,0,0 }; for(size_t i=0;i(0xff&strtol(t,0,16)); } return *this; } binary_t& binary_t::from_data(const void *d,size_t s) { resize(s); std::copy((const unsigned char*)d,(const unsigned char *)d+s, begin() ); return *this; } binary_t& binary_t::make_nonce() { #ifdef HAVE_LIBUUID uuid_t uuid; uuid_generate(uuid); from_data((unsigned char*)uuid,sizeof(uuid)); #else resize(16); std::generate_n(begin(),16,rand); #endif /* HAVE_LIBUUID */ return *this; } std::string binary_t::hex() const { std::string rv; rv.reserve((size()<<1)+1); char t[3] = {0,0,0}; for(const_iterator i=begin(),ie=end();i!=ie;++i) { size_t rc = snprintf(t,sizeof(t),"%02x",*i); assert(rc>16) sum = (sum&0xffff)+hw; return 0xffff&~sum; } void integrity_digester::update(const void *d_,size_t s) { uint8_t *d=(uint8_t*)d_; if(data_size) { int l = sizeof(data)-data_size; if(l>s) { memmove(data.dptr(data_size),d,s); data_size+=s; return; } memmove(data.dptr(data_size),d,l); d+=l; s-=l; md5.update( data.tcpcksum(data) ); } if(s(),block512_t::tcpcksum); size_t ss=bb*sizeof(block512_t); d+=ss; s-=ss; assert(s