I may not be using my eyes properly, but I cannot see how to attach files 
to this...

Shall I email you it?  Is just the cpp OK or do you want a makefile etc.?  
Makefile will take a little longer as I will need to set that up....  And 
my wife is demanding attention so may not be able to do it immediately..

On Friday, 8 October 2021 at 18:00:26 UTC+1 Jeffrey Walton wrote:

> On Fri, Oct 8, 2021 at 12:40 PM Tony Stead <ths...@gmail.com> wrote: 
> > 
> > Hi, 
> > 
> > Sorry I hadn't noticed your response. 
> > 
> > I have created a fairly simple demonstration. In doing so I realise you 
> may need to manipulate two integers to create the problem.. But this 
> triggers the issue. 
> > 
> > // To cause the overrun we need to manipulate two integers that then 
> cross a 64 bit boundary. 
> > // In addition they need to be positioned such that they cross a 
> boundary in the lookup table within 
> > // RoundupSizeTable table in integer.cpp.. 
> > 
> > //------------------------------ 
> > // static const unsigned int RoundupSizeTable[] = {2, 2, 2, 4, 4, 8, 8, 
> 8, 8}; 
> > // 
> > //static inline size_t RoundupSize(size_t n) 
> > //{ 
> > // if (n<=8) 
> > // return RoundupSizeTable[n]; 
> > // else if (n<=16) 
> > // return 16; 
> > // else if (n<=32) 
> > // return 32; 
> > // else if (n<=64) 
> > // return 64; 
> > // else 
> > // return size_t(1) << BitPrecision(n-1); 
> > //} 
> > //------------------------------- 
> > 
> > // With the following number we will downsize from 5 lots of 64 bits to 
> 4, making the lookup 
> > // in roundup table cross from 8 to 4. 
> > std::uint8_t bitstream[] = 
> > { 0x01, 
> > 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
> > 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
> > 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
> > 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; 
> > CryptoPP::Integer bigint1(bitstream, sizeof(bitstream)); 
> > CryptoPP::Integer bigint2(bitstream, sizeof(bitstream)); 
> > 
> > // Bit shift to top bits are zeroised, this means that the CountWords 
> algorithm will later ignore leading zero bytes. 
> > // I figure you could probably also use substract here, anything that 
> does not reallocate the reg buffer. 
> > bigint1 >>= 1; 
> > bigint2 >>= 1; 
> > 
> > // Now perform one of the vulnerable manipulations. 
> > // It is within this operator that a new integer is allocated with the 
> reduced buffer size, but 
> > // the full length of one of the original integers is copied into the 
> buffer. 
> > auto result = bigint2 & bigint1; 
> > 
> > Hope this helps, let me know if I can help any further. 
>
> Thanks. 
>
> Do you have a *.cpp file I can compile and run? 
>
> Jeff 
>

-- 
You received this message because you are subscribed to the Google Groups 
"Crypto++ Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to cryptopp-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/cryptopp-users/7e28672b-d576-4196-bb0c-909fe0b25f2cn%40googlegroups.com.

Reply via email to