Folks:

The following test code fails on Mac OS 10.5 with gcc "i686-apple- 
darwin9-g++-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5490)" on Mac OS  
10.5.  It prints out

N8CryptoPP50DL_PrivateKey_WithSignaturePairwiseConsistencyTestINS_16DL_P 
rivateKey_ECINS_3ECPEEENS_5ECDSAIS2_NS_4SHA1EEEEE

and then the dynamic_cast yields NULL.  (Thanks to Brian Warner for  
running that test.)

On Mac OS 10.5 with "i686-apple-darwin9-g++-4.0.1 (GCC) 4.0.1 (Apple  
Inc. build 5484)" it emits the same type information and then the  
dynamic_cast succeeds and yields a pointer to an object that appears  
to work.  (Thanks to Kevin Reid for running that test.)

On Mac OS 10.4 with "i686-apple-darwin8-g++-4.0.1 (GCC) 4.0.1 (Apple  
Computer, Inc. build 5367)" it emits the same type information and  
then the dynamic_cast succeeds.  (Thanks to myself for running that  
test.)  Also on many of the other platforms on the pycryptopp  
buildbot [1] the equivalent dynamic_cast (built into the pycryptopp  
unit tests) succeeds.

So there are two questions I have:

1.  What changed between build #5484 and build #5490 of Apple's  
version of g++ v4.0.1 that makes this dynamic_cast return NULL?

2.  Why does the type information contain the string "SHA1" when the  
private key was declared as using Tiger?  Brian instrumented his test  
code to print the type of the "::Signer" instance s and it was:  
"PN8CryptoPP16PK_FinalTemplateINS_13DL_SignerImplINS_25DL_SignatureSchem 
eOptionsINS_5DL_SSINS_13DL_Keys_ECDSAINS_3ECPEEENS_18DL_Algorithm_ECDSAI 
S5_EENS_37DL_SignatureMessageEncodingMethod_DSAENS_5TigerEiEES6_S8_S9_SA 
_EEEEEE".

Regards,

Zooko

[1] http://allmydata.org/buildbot-pycryptopp/waterfall

------- begin test code
#include <cryptopp/filters.h>
#include <cryptopp/osrng.h>
#include <cryptopp/eccrypto.h>
#include <cryptopp/oids.h>
#include <cryptopp/tiger.h>
#include <cryptopp/sha.h>
#include <cryptopp/pubkey.h>
#include <cryptopp/rng.h>
#include <iostream>
#include <cryptopp/ecp.h>
#include <cryptopp/hex.h>

USING_NAMESPACE(CryptoPP)
int main(int argc, char**argv) {
     ECDSA<ECP, Tiger>::Verifier *v;
     ECDSA<ECP, Tiger>::Signer *s;

     DL_GroupParameters_EC<ECP> params(ASN1::secp192r1());
     params.SetPointCompression(true);

     RandomPool rng;
     s = new ECDSA<ECP, Tiger>::Signer(rng, params);

     std::cout << "xxx 0" << typeid(s->GetPrivateKey()).name() <<  
"\n"; std::cout.flush();

     const DL_PrivateKey_EC<ECP>* privkey = dynamic_cast<const  
DL_PrivateKey_EC<ECP>*>(&(s->GetPrivateKey()));
     std::cout << "xxx 1" << typeid(privkey).name() << "\n";  
std::cout.flush();
     if (!privkey) {
         std::cout << "dynamic_cast failed for k->GetPrivateKey()" <<  
"\n"; std::cout.flush();
         return -1;
     }
     return 0;
}


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the "Crypto++ Users" 
Google Group.
To unsubscribe, send an email to [email protected].
More information about Crypto++ and this group is available at 
http://www.cryptopp.com.
-~----------~----~----~----~------~----~------~--~---

Reply via email to