RE: Integrated v1.1 SFL & Fortezza CTIL

"Leonberger, Pierce" <[email protected]>
Newsgroups gmane.ietf.sfl
Message-ID <33BD629222C0D211B6DB0060085ACF3117C355@WFHQEX03>
THANKS!!

FYI: Issues 1-4 have been addressed.  

We'll address the other issues ASAP.

Thanks again,
Pierce Leonberger
--
J.G. Van Dyke & Associates, Inc.


-----Original Message-----
From: Thomas Fronckowiak Jr. [mailto:[email protected]]
Sent: Wednesday, August 18, 1999 3:23 PM
To: [email protected]
Subject: Integrated v1.1 SFL & Fortezza CTIL


We (LJL) have integrated v1.1 SFL using the Fortezza CTIL and have 
successfully signed, verified, encrypted and decrypted.

Following is a list of issues/concerns we've come across so far, 
mostly with the Fortezza CTIL:

1. Failure setting personality during encrypt/decrypt.
Module: 	sm_fortdll.dll
File:		sm_fort.cpp
Function:	CSM_Fortezza::SMTI_GenerateKeyAgreement &
		CSM_Fortezza::SMTI_ExtractKeyAgreement
Line:		[947]	error = CI_SetPersonality(mp_cardInfo->GetSlot());
		[1020]	error = CI_SetPersonality( mp_cardInfo->GetSlot());

GetSlot returns the current slot which happens to be changed during a call
to GetUserPath().  Suggest:

   error = CI_SetPersonality(m_nEncryptorIndex);

to be consistant with other CI_SetPesonality calls.

2. If/else logic causes the root certificate to be retrieved, even
when bRootFlag == FALSE.
Module: 	sm_fortdll.dll
File:		sm_fortci.cpp
Function: 	CSM_Fortezza::GetUserPath()
Line: 		[327] if (nParentSlot == 0 && bRootFlag == true )

	if (nParentSlot == 0 && bRootFlag == true )
	else

should be changed to:

	if (nParentSlot == 0 && bRootFlag == true )
	else if (nParentSlot>0)

3. Encrypt failed because the data length was not a multiple of 8 bytes.
Module: 	sm_fortdll.dll
File:		sm_fort.cpp
Function: 	CSM_Fortezza::GeneratePad()
Line: 		[820] data.Open(SM_FOPEN_APPEND);

Padding is calculated correctly, but it is not appended to the data.
Rather it overwrites the first (x) bytes of the data.  The problem
is in CSM_Buffer::Open - the option SM_FOPEN_APPEND only has
an affect when CSM_Buffer refers to a file.  The work around
was to copy the data, add the padding, and then reset the
CSM_Buffer.

4. Decryption sometimes gives a "Bad Pad" error.
Module: 	sm_fortdll.dll
File:		sm_fort.cpp
Function: 	CSM_Fortezza::ExtractPad()
Line: 		[852] data.Seek(-1, SEEK_END);

Attempting to extract the padding after decryption.  This function
works for padding between 2-8.  A padding of 1 returns an
error because SEEK_END with a -1 puts the pointer to the
*2nd* last byte, not the last byte.  Should be:

   data.Seek(0, SEEK_END);

5. SM_ASSIGN_ANYBUF failed.
Module: 	libsm.lib
File:		sm_MsgCertCrls.cpp
Function: 	CSM_Fortezza::UpdateParams()
Line: 		[515] data.Seek(-1, SEEK_END);

alg.parameters is NULL. Suggest:

	if (alg.parameters)
		delete (CSM_Buffer*)alg.parameters->value;
	SM_ASSIGN_ANYBUF(pCBuf, alg.parameters);

be changed to:

	if (alg.parameters)
		delete (CSM_Buffer*)alg.parameters->value;
	else
		alg.parameters = new AsnAny;

	SM_ASSIGN_ANYBUF(pCBuf, alg.parameters);

6. CSM_Fortezza::SMTI_XXXXX functions that perform a CI_Lock() call 
CI_Unlock() before the SME_FINISH_CATCH line instead of after it.  We 
haven't experienced any problem with this - just wondered if this might
cause a situation where the card was left locked after a thrown error.

7. May consider updating CSM_OID::GetOIDDescription() to include 
id-keyExchangeAlgorithm, id-fortezzaWrap80, and other fortezza
oids.

Thanks,
Tom
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.