CM_RetrieveKey() abort with corrupted certificate

John Stark <[email protected]> Fri, 25 Jan 2002 15:49:01 +0000
Newsgroups gmane.ietf.sfl
Organization Metanate Ltd
Message-ID <[email protected]>
We are developing an application that uses SFL version 1.10 with the
corresponding release of the Certificate Management Library (1.9.3) and
crypto++4.1.  I have compiled the sources using both GCC 2.95.3 and GCC
2.96.

One of the tests we are attempting is one where a DSA-signed RSA
public-key certificate has deliberately been corrupted, invalidating its
signature.  (The actual change advances the expiry date by a year,
leaving all of the encoding unchanged apart from one incremented
character in a UTC Time string.)

The CML function CM_RetrieveKey() is used to obtain a validated
certification path from the corrupted certificate.  On a system that has
GCC 2.95.3, the CML correctly reports that the certificate has an
invalid signature.  On another system that has GCC 2.96, the call to
CM_RetrieveKey() causes an abort, and an incomplete call stack
(attached) is shown if run under GDB.  I'm not sure whether the compiler
version is directly relevant, or whether it's coincidental (e.g. caused
by uninitialised memory).

Does anyone know of any problems with using the CML to verify corrupted
certificates, whether or not compiled with GCC 2.96, or whether this bug
will be fixed by moving to SFL version 2.0 and the corresponding release
of CML?

John Stark
Metanate Ltd
e-mail: [email protected]


Program received signal SIGABRT, Aborted.
[Switching to Thread 1024 (LWP 4944)]
0x4035ea01 in __kill () from /lib/i686/libc.so.6
Current language:  auto; currently c
(gdb) where
#0  0x4035ea01 in __kill () from /lib/i686/libc.so.6
#1  0x400305bb in raise (sig=6) at signals.c:65
#2  0x4035ff82 in abort () at ../sysdeps/generic/abort.c:88
#3  0x402eeefb in __default_terminate () at ../../gcc/libgcc2.c:3034
#4  0x402eef1a in __terminate () at ../../gcc/libgcc2.c:3034
#5  0x402efc55 in throw_helper (eh=0x8326a58, pc=0x2e,
my_udata=0xbffff400, 
    offset_p=0xbffff3fc) at ../../gcc/libgcc2.c:3168
#6  0x402eff4f in __rethrow (index=0x40efb614) at
../../gcc/libgcc2.c:3168
#7  0x40dcb6df in CSM_Free3::SMTI_Verify (this=0x2e2f2e2e, 
    pSignerKey=0x2e2e2f2e, pDigestAlg=0x504d532f,
pSignatureAlg=0x74736944, 
    pData=0x676c412f, pSignature=0x72632f73)
    at ../../libcert/include/sm_apiCert.h:844
#8  0x65657246 in ?? ()