Re: Re: Strange behavior with -static compilation flag

Jeffrey Walton <[email protected]> Thu, 27 Apr 2023 00:54:38 -0400
Newsgroups gmane.comp.encryption.cryptopp
Message-ID <CAH8yC8=_bzpPrTJZTmMGqjGF1deScu-rvuO+X4+w3ne2pVC0zA@mail.gmail.com>
On Thu, Apr 27, 2023 at 12:19 AM Dwight Kulkarni <[email protected]> wrote:
>
> Your code is exactly what I had before. But I was getting that heap error. It only went away when I used NEW. I have never seen that before. I also don't like using NEW at all but it wasn't working.

convert_cryptopp_intege and convert_cryptopp_integer_str test fine for
the attached program. You have a problem somewhere else in your
program.

$ g++ -o test.exe -g3 -O1 -fsanitize=address test.cxx ./libcryptopp.a
$ ./test.exe
Iostream: e9e930805f30e3ac95845917bef1d708h
  Vector: e9e930805f30e3ac95845917bef1d708
Convert1: e9e930805f30e3ac95845917bef1d708
Convert2: e9e930805f30e3ac95845917bef1d708

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 [email protected].
To view this discussion on the web visit https://groups.google.com/d/msgid/cryptopp-users/CAH8yC8%3D_bzpPrTJZTmMGqjGF1deScu-rvuO%2BX4%2Bw3ne2pVC0zA%40mail.gmail.com.
test.cxx (text/x-c++src, 1.6 KB)
#include <iostream>
#include <iomanip>
#include "integer.h"
#include "osrng.h"

std::string convert_cryptopp_integer_str(const CryptoPP::Integer& n)
{
    using namespace CryptoPP;

    const size_t len = n.MinEncodedSize(Integer::UNSIGNED);
    std::string v; v.resize(len);

    n.Encode((byte*)&v[0], v.size(), Integer::UNSIGNED);
    return v;
    
}

std::vector<CryptoPP::byte> convert_cryptopp_integer(const CryptoPP::Integer& n)
{
    using namespace CryptoPP;

    const size_t len = n.MinEncodedSize(Integer::UNSIGNED);
    std::vector<byte> v(len);

    n.Encode((byte*)&v[0], v.size(), Integer::UNSIGNED);
    return v; 
}

int main(int argc, char* argv[])
{
    using namespace CryptoPP;
    
    AutoSeededRandomPool prng;
    Integer n;
    
    n.Randomize(prng, 128);
    const size_t len = n.MinEncodedSize(Integer::UNSIGNED);

    // Error in vector size
    std::vector<byte> v(len);
    n.Encode((byte*)&v[0], v.size(), Integer::UNSIGNED);

    std::cout << "Iostream: " << std::hex << n << std::endl;
    std::cout << "  Vector: ";
    for(byte i : v) {
      std::cout << std::hex << std::setw(2) << std::setfill('0') << (i & 0xff);
    }
    std::cout << std::endl;

    std::cout << "Convert1: ";
    std::string w = convert_cryptopp_integer_str(n);
    for(byte i : w) {
      std::cout << std::hex << std::setw(2) << std::setfill('0') << (i & 0xff);
    }
    std::cout << std::endl;

    std::cout << "Convert2: ";
    std::vector<byte> x = convert_cryptopp_integer(n);
    for(byte i : x) {
      std::cout << std::hex << std::setw(2) << std::setfill('0') << (i & 0xff);
    }
    std::cout << std::endl;

    return 0;
}