Thank you so much Falko! My code works perfectly now.<br><br><div class="gmail_quote">On Mon, Mar 9, 2009 at 10:44 AM, Falko Strenzke <span dir="ltr"><<a href="mailto:strenzke@flexsecure.de">strenzke@flexsecure.de</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Hi,<br>
<br>
I only took a glance at your code, but one thing sure is not a good<br>
idea. Thats calling get() on an auto_ptr to store it's pointer value<br>
somewhere else. As far as I know, then it can happen that the compiler<br>
destroys the auto_ptr before it goes out of scope (since he understands<br>
that you don't use it anymore), invalidating the object you got a<br>
pointer to by calling get(). To verify that, try something like<br>
std::cout << loadedPrivateKey.get() << std::endl;<br>
at the very end of the function. That should prevent the auto_ptr from<br>
being destructed too soon.<br>
<br>
But to use the auto_ptr correctly, use release() instead of get(). Then<br>
the auto_ptr is assigned NULL, and will never call the the destructor of<br>
it's former pointee, which is the object you want to use.<br>
<br>
Regards,<br>
Falko<br>
<br>
> Message: 1<br>
> Date: Sat, 7 Mar 2009 20:16:16 -0500<br>
> From: "Z. S. O." <<a href="mailto:tiredashell@gmail.com">tiredashell@gmail.com</a>><br>
> Subject: [Botan-devel] Creating a class for signing data<br>
> To: Botan development list <<a href="mailto:botan-devel@randombit.net">botan-devel@randombit.net</a>><br>
> Message-ID:<br>
>       <<a href="mailto:d6bdc39c0903071716v7b2dfec0x14175111c732c5cf@mail.gmail.com">d6bdc39c0903071716v7b2dfec0x14175111c732c5cf@mail.gmail.com</a>><br>
> Content-Type: text/plain; charset="iso-8859-1"<br>
><br>
> Sorry once again for all my questions; I only resort to this list when I've<br>
> tried everything else.<br>
> I'm trying to make classes that encapsulate various things in Botan. The one<br>
> below is meant to create digital signatures. You'll notice that I try my<br>
> best to optimize performance by making rng a global variable and signer a<br>
> class data member, so I don't have to keep recreating them locally. The<br>
> problem is that when I try to perform this->signer->sign_message(), it<br>
> creates a segmentation fault.<br>
><br>
> I admit I'm still an amateur at C++, so if I could get an explanation about<br>
> what I'm doing wrong I would really appreciate it.<br>
><br>
> class MySigner<br>
> {<br>
>   public:<br>
>     MySigner (string privateKey)<br>
>     {<br>
> DataSource_Memory key_src(privateKey);<br>
> auto_ptr<PKCS8_PrivateKey> loadedPrivateKey(PKCS8::load_key(key_src, rng));<br>
> RSA_PrivateKey* rsaPrivateKey =<br>
> dynamic_cast<RSA_PrivateKey*>(loadedPrivateKey.get());<br>
> PK_Signing_Key* key = dynamic_cast<PK_Signing_Key*>(rsaPrivateKey);<br>
> this->signer = get_pk_signer(*key, "EMSA4(SHA-1)");<br>
>     }<br>
><br>
>     string Sign (string message)<br>
>     {<br>
> byte *msg = (unsigned char*) message.c_str();<br>
> return b64_encode(this->signer->sign_message(msg, sizeof(msg), rng));<br>
>     }<br>
>   private:<br>
>     PK_Signer* signer;<br>
> };<br>
> -------------- next part --------------<br>
> An HTML attachment was scrubbed...<br>
> URL: <<a href="http://lists.randombit.net/pipermail/botan-devel/attachments/20090307/e1a343b3/attachment.html" target="_blank">http://lists.randombit.net/pipermail/botan-devel/attachments/20090307/e1a343b3/attachment.html</a>><br>

><br>
> ------------------------------<br>
><br>
> _______________________________________________<br>
> botan-devel mailing list<br>
> <a href="mailto:botan-devel@randombit.net">botan-devel@randombit.net</a><br>
> <a href="http://lists.randombit.net/mailman/listinfo/botan-devel" target="_blank">http://lists.randombit.net/mailman/listinfo/botan-devel</a><br>
><br>
><br>
> End of botan-devel Digest, Vol 50, Issue 2<br>
> ******************************************<br>
><br>
<br>
<br>
--<br>
<br>
Dipl.-Phys.<br>
Falko Strenzke<br>
FlexSecure GmbH<br>
Industriestr. 12<br>
D - 64297 Darmstadt<br>
Tel.: +49 (0) 6151 501 23-14<br>
Fax:  +49 (0) 6151 501 23-19<br>
E-Mail: <a href="mailto:strenzke@flexsecure.de">strenzke@flexsecure.de</a><br>
Internet: <a href="http://www.flexsecure.de" target="_blank">www.flexsecure.de</a><br>
<br>
Geschäftsführer:<br>
Erwin Stallenberger, Markus Ruppert<br>
<br>
Amtsgericht Darmstadt<br>
HRB 8036<br>
Umsatzsteuernummer:<br>
DE 214745269<br>
<br>
<br>
<br>
<br>
<br>_______________________________________________<br>
botan-devel mailing list<br>
<a href="mailto:botan-devel@randombit.net">botan-devel@randombit.net</a><br>
<a href="http://lists.randombit.net/mailman/listinfo/botan-devel" target="_blank">http://lists.randombit.net/mailman/listinfo/botan-devel</a><br>
<br></blockquote></div><br>