Multiple changes to get the cryptoki framework and builtin-object

module working:  1) C_GetFunctionList is always present; 2) fwObject
and fwSession now remember their handles on behalf of the fwInstance;
3) fwSessions are created before mdSessions, so the mdSession can
use the fwSession's arena; 4) finished implementing findObjects;
5) builtin constants are in network byte order; 6) libnssckbi.so
knows about and can pull in its dependencies (e.g. libnssckfw.so,
libnssb.so, and NSPR).
This commit is contained in:
roeber%netscape.com 2000-04-19 21:32:38 +00:00
Родитель 4bff05d655
Коммит de87428c74
12 изменённых файлов: 427 добавлений и 102 удалений

Просмотреть файл

@ -31,7 +31,7 @@
# may use your version of this file under either the MPL or the
# GPL.
#
my $cvs_id = '@(#) $RCSfile: certdata.perl,v $ $Revision: 1.1 $ $Date: 2000-03-31 19:43:47 $ $Name: $';
my $cvs_id = '@(#) $RCSfile: certdata.perl,v $ $Revision: 1.2 $ $Date: 2000-04-19 21:32:33 $ $Name: $';
use strict;
my %constants;
@ -41,7 +41,7 @@ my @objects = ();
my @objsize;
my $cvsid;
$constants{CKO_DATA} = "static const CK_OBJECT_CLASS cko_data = CKO_DATA;\n";
$constants{CKO_DATA} = "static const CK_OBJECT_CLASS cko_data = HTONL(CKO_DATA);\n";
$constants{CK_TRUE} = "static const CK_BBOOL ck_true = CK_TRUE;\n";
$constants{CK_FALSE} = "static const CK_BBOOL ck_false = CK_FALSE;\n";
@ -117,6 +117,8 @@ while(<>) {
if( $fields[1] =~ /^CK_/ ) {
my $lcv = $fields[2];
$lcv =~ tr/A-Z/a-z/;
$lcv =~ s/[hn]to[nh][ls]\(//;
$lcv =~ s/\)//;
if( !defined($constants{$fields[2]}) ) {
$constants{$fields[2]} = "static const $fields[1] $lcv = $fields[2];\n";
}
@ -201,6 +203,19 @@ static const char CVS_ID[] = $cvsid;
#include "builtins.h"
#endif /* BUILTINS_H */
#if IS_BIG_ENDIAN
#define HTONS(x) (x)
#define HTONL(x) (x)
#endif
#if IS_LITTLE_ENDIAN
#define HTONS(x) ((((x)<<8)&0xff00)|(((x)>>8)&0x00ff))
#define HTONL(x) ((((x)<<24)&0xff000000)|(((x)<<8)&0x00ff0000)|(((x)>>8)&0x0000ff00)|(((x)>>24)&0x000000ff))
#endif
#define NTOHS(x) HTONS(x)
#define NTOHL(x) HTONL(x)
EOD
;

Просмотреть файл

@ -30,7 +30,7 @@
# may use your version of this file under either the MPL or the
# GPL.
#
CVS_ID "@(#) $RCSfile: certdata.txt,v $ $Revision: 1.1 $ $Date: 2000-03-31 19:43:48 $ $Name: $"
CVS_ID "@(#) $RCSfile: certdata.txt,v $ $Revision: 1.2 $ $Date: 2000-04-19 21:32:38 $ $Name: $"
#
# certdata.txt
@ -86,14 +86,19 @@ CVS_ID "@(#) $RCSfile: certdata.txt,v $ $Revision: 1.1 $ $Date: 2000-03-31 19:43
# (other trust attributes can be defined)
#
#
# I wish the perl script were smart enough to know the lengths of constants,
# so it could deduce when to do the HTONL/HTONS stuff.
#
BEGINDATA
CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
CKA_CLASS CK_OBJECT_CLASS HTONL(CKO_CERTIFICATE)
CKA_TOKEN CK_BBOOL CK_TRUE
CKA_PRIVATE CK_BBOOL CK_FALSE
CKA_MODIFIABLE CK_BBOOL CK_FALSE
CKA_LABEL UTF8 "Test certificate #3"
CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE HTONL(CKC_X_509)
CKA_SUBJECT MULTILINE_OCTAL
\060\201\243\061\013\060\011\006\003\125\004\006\023\002\125\123
\061\013\060\011\006\003\125\004\010\023\002\103\101\061\023\060
@ -119,7 +124,7 @@ CKA_VALUE MULTILINE_OCTAL
\0
END
CKA_CLASS CK_OBJECT_CLASS CKO_NETSCAPE_TRUST
CKA_CLASS CK_OBJECT_CLASS HTONL(CKO_NETSCAPE_TRUST)
CKA_TOKEN CK_BBOOL CK_TRUE
CKA_PRIVATE CK_BBOOL CK_FALSE
CKA_MODIFIABLE CK_BBOOL CK_FALSE
@ -131,13 +136,13 @@ CKA_ISSUER MULTILINE_OCTAL
\164\151\143\040\111\111
END
CKA_SERIAL_NUMBER OCTAL \001\276
CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NETSCAPE_TRUSTED
CKA_TRUST_CLIENT_AUTH CK_TRUST CKT_NETSCAPE_TRUSTED
CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NETSCAPE_TRUSTED
CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NETSCAPE_TRUSTED
CKA_TRUST_DIGITAL_SIGNATURE CK_TRUST CKT_NETSCAPE_TRUSTED_DELEGATOR
CKA_TRUST_NON_REPUDIATION CK_TRUST CKT_NETSCAPE_TRUSTED_DELEGATOR
CKA_TRUST_KEY_ENCIPHERMENT CK_TRUST CKT_NETSCAPE_TRUSTED_DELEGATOR
CKA_TRUST_DATA_ENCIPHERMENT CK_TRUST CKT_NETSCAPE_TRUSTED_DELEGATOR
CKA_TRUST_KEY_AGREEMENT CK_TRUST CKT_NETSCAPE_TRUSTED_DELEGATOR
CKA_TRUST_KEY_CERT_SIGN CK_TRUST CKT_NETSCAPE_TRUSTED_DELEGATOR
CKA_TRUST_SERVER_AUTH CK_TRUST HTONL(CKT_NETSCAPE_TRUSTED)
CKA_TRUST_CLIENT_AUTH CK_TRUST HTONL(CKT_NETSCAPE_TRUSTED)
CKA_TRUST_EMAIL_PROTECTION CK_TRUST HTONL(CKT_NETSCAPE_TRUSTED)
CKA_TRUST_CODE_SIGNING CK_TRUST HTONL(CKT_NETSCAPE_TRUSTED)
CKA_TRUST_DIGITAL_SIGNATURE CK_TRUST HTONL(CKT_NETSCAPE_TRUSTED_DELEGATOR)
CKA_TRUST_NON_REPUDIATION CK_TRUST HTONL(CKT_NETSCAPE_TRUSTED_DELEGATOR)
CKA_TRUST_KEY_ENCIPHERMENT CK_TRUST HTONL(CKT_NETSCAPE_TRUSTED_DELEGATOR)
CKA_TRUST_DATA_ENCIPHERMENT CK_TRUST HTONL(CKT_NETSCAPE_TRUSTED_DELEGATOR)
CKA_TRUST_KEY_AGREEMENT CK_TRUST HTONL(CKT_NETSCAPE_TRUSTED_DELEGATOR)
CKA_TRUST_KEY_CERT_SIGN CK_TRUST HTONL(CKT_NETSCAPE_TRUSTED_DELEGATOR)

Просмотреть файл

@ -32,7 +32,7 @@
*/
#ifdef DEBUG
static const char CVS_ID[] = "@(#) $RCSfile: constants.c,v $ $Revision: 1.1 $ $Date: 2000-03-31 19:43:49 $ $Name: $";
static const char CVS_ID[] = "@(#) $RCSfile: constants.c,v $ $Revision: 1.2 $ $Date: 2000-04-19 21:32:38 $ $Name: $";
#endif /* DEBUG */
/*
@ -76,6 +76,7 @@ nss_builtins_TokenLabel = "Builtin Object Token";
NSS_IMPLEMENT_DATA const NSSUTF8 *
nss_builtins_TokenModel = "1";
/* should this be e.g. the certdata.txt RCS revision number? */
NSS_IMPLEMENT_DATA const NSSUTF8 *
nss_builtins_TokenSerialNumber = "1";

Просмотреть файл

@ -30,7 +30,7 @@
# may use your version of this file under either the MPL or the
# GPL.
#
MANIFEST_CVS_ID = "@(#) $RCSfile: manifest.mn,v $ $Revision: 1.1 $ $Date: 2000-03-31 19:43:49 $ $Name: $"
MANIFEST_CVS_ID = "@(#) $RCSfile: manifest.mn,v $ $Revision: 1.2 $ $Date: 2000-04-19 21:32:38 $ $Name: $"
CORE_DEPTH = ../../../..
@ -51,3 +51,5 @@ CSRCS = \
REQUIRES = security nspr
LIBRARY_NAME = nssckbi
EXTRA_SHARED_LIBS = -L$(DIST)/lib -lnssckfw -lnssb -lnspr4 -lplc4 -lplds4

Просмотреть файл

@ -31,7 +31,7 @@
# may use your version of this file under either the MPL or the
# GPL.
#
$cvs_id = '@(#) $RCSfile: ckapi.perl,v $ $Revision: 1.1 $ $Date: 2000-03-31 19:43:10 $ $Name: $';
$cvs_id = '@(#) $RCSfile: ckapi.perl,v $ $Revision: 1.2 $ $Date: 2000-04-19 21:31:42 $ $Name: $';
$copyright = '/* THIS IS A GENERATED FILE */
/*
@ -477,7 +477,7 @@ __ADJOIN(MODULE_NAME,C_GetFunctionList)
return CKR_OK;
}
#ifdef DECLARE_STRICT_CRYPTOKI_NAMES
/* This one is always present */
CK_RV CK_ENTRY
C_GetFunctionList
(
@ -486,7 +486,6 @@ C_GetFunctionList
{
return __ADJOIN(MODULE_NAME,C_GetFunctionList)(ppFunctionList);
}
#endif /* DECLARE_STRICT_CRYPTOKI_NAMES */
#undef __ADJOIN

Просмотреть файл

@ -35,7 +35,7 @@
#define CKFW_H
#ifdef DEBUG
static const char CKFW_CVS_ID[] = "@(#) $RCSfile: ckfw.h,v $ $Revision: 1.1 $ $Date: 2000-03-31 19:43:11 $ $Name: $";
static const char CKFW_CVS_ID[] = "@(#) $RCSfile: ckfw.h,v $ $Revision: 1.2 $ $Date: 2000-04-19 21:31:45 $ $Name: $";
#endif /* DEBUG */
/*
@ -82,6 +82,7 @@ static const char CKFW_CVS_ID[] = "@(#) $RCSfile: ckfw.h,v $ $Revision: 1.1 $ $D
* nssCKFWInstance_CreateObjectHandle
* nssCKFWInstance_ResolveObjectHandle
* nssCKFWInstance_DestroyObjectHandle
* nssCKFWInstance_FindObjectHandle
*
* -- module fronts --
* nssCKFWInstance_GetNSlots
@ -275,6 +276,17 @@ nssCKFWInstance_DestroyObjectHandle
CK_OBJECT_HANDLE hObject
);
/*
* nssCKFWInstance_FindObjectHandle
*
*/
NSS_IMPLEMENT CK_OBJECT_HANDLE
nssCKFWInstance_FindObjectHandle
(
NSSCKFWInstance *fwInstance,
NSSCKFWObject *fwObject
);
/*
* nssCKFWInstance_GetNSlots
*
@ -1190,6 +1202,9 @@ nssCKFWMechanism_GetInHardware
* nssCKFWSession_GetSessionState
* nssCKFWSession_SetFWFindObjects
* nssCKFWSession_GetFWFindObjects
* nssCKFWSession_SetMDSession
* nssCKFWSession_SetHandle
* nssCKFWSession_GetHandle
*
* -- module fronts --
* nssCKFWSession_GetDeviceError
@ -1215,7 +1230,6 @@ NSS_EXTERN NSSCKFWSession *
nssCKFWSession_Create
(
NSSCKFWToken *fwToken,
NSSCKMDSession *mdSession,
CK_BBOOL rw,
CK_VOID_PTR pApplication,
CK_NOTIFY Notify,
@ -1327,6 +1341,38 @@ nssCKFWSession_GetFWFindObjects
CK_RV *pError
);
/*
* nssCKFWSession_SetMDSession
*
*/
NSS_EXTERN CK_RV
nssCKFWSession_SetMDSession
(
NSSCKFWSession *fwSession,
NSSCKMDSession *mdSession
);
/*
* nssCKFWSession_SetHandle
*
*/
NSS_EXTERN CK_RV
nssCKFWSession_SetHandle
(
NSSCKFWSession *fwSession,
CK_SESSION_HANDLE hSession
);
/*
* nssCKFWSession_GetHandle
*
*/
NSS_EXTERN CK_SESSION_HANDLE
nssCKFWSession_GetHandle
(
NSSCKFWSession *fwSession
);
/*
* nssCKFWSession_GetDeviceError
*
@ -1492,6 +1538,8 @@ nssCKFWSession_GetRandom
* nssCKFWObject_GetArena
*
* -- private accessors --
* nssCKFWObject_SetHandle
* nssCKFWObject_GetHandle
*
* -- module fronts --
* nssCKFWObject_IsTokenObject
@ -1559,6 +1607,27 @@ nssCKFWObject_GetArena
CK_RV *pError
);
/*
* nssCKFWObject_SetHandle
*
*/
NSS_IMPLEMENT CK_RV
nssCKFWObject_SetHandle
(
NSSCKFWObject *fwObject,
CK_OBJECT_HANDLE hObject
);
/*
* nssCKFWObject_GetHandle
*
*/
NSS_IMPLEMENT CK_OBJECT_HANDLE
nssCKFWObject_GetHandle
(
NSSCKFWObject *fwObject
);
/*
* nssCKFWObject_IsTokenObject
*

Просмотреть файл

@ -32,7 +32,7 @@
*/
#ifdef DEBUG
static const char CVS_ID[] = "@(#) $RCSfile: instance.c,v $ $Revision: 1.1 $ $Date: 2000-03-31 19:43:19 $ $Name: $";
static const char CVS_ID[] = "@(#) $RCSfile: instance.c,v $ $Revision: 1.2 $ $Date: 2000-04-19 21:31:49 $ $Name: $";
#endif /* DEBUG */
/*
@ -132,7 +132,6 @@ struct NSSCKFWInstanceStr {
CK_ULONG lastSessionHandle;
nssCKFWHash *sessionHandleHash;
nssCKFWHash *sessionHandleReverseHash;
CK_ULONG lastObjectHandle;
nssCKFWHash *objectHandleHash;
@ -288,19 +287,13 @@ nssCKFWInstance_Create
goto loser;
}
fwInstance->sessionHandleReverseHash = nssCKFWHash_Create(fwInstance,
fwInstance->arena, pError);
if( (nssCKFWHash *)NULL == fwInstance->sessionHandleReverseHash ) {
goto loser;
}
fwInstance->objectHandleHash = nssCKFWHash_Create(fwInstance,
fwInstance->arena, pError);
if( (nssCKFWHash *)NULL == fwInstance->objectHandleHash ) {
goto loser;
}
if( (void *)NULL != (void *)mdInstance->GetSlots ) {
if( (void *)NULL == (void *)mdInstance->GetSlots ) {
/* That routine is required */
*pError = CKR_GENERAL_ERROR;
goto loser;
@ -377,7 +370,9 @@ nssCKFWInstance_Destroy
NSSCKFWInstance *fwInstance
)
{
#ifdef NSSDEBUG
CK_RV error = CKR_OK;
#endif /* NSSDEBUG */
CK_ULONG i;
#ifdef NSSDEBUG
@ -560,6 +555,14 @@ nssCKFWInstance_CreateSessionHandle
}
hSession = ++(fwInstance->lastSessionHandle);
/* Alan would say I should unlock for this call. */
*pError = nssCKFWSession_SetHandle(fwSession, hSession);
if( CKR_OK != *pError ) {
goto done;
}
*pError = nssCKFWHash_Add(fwInstance->sessionHandleHash,
(const void *)hSession, (const void *)fwSession);
if( CKR_OK != *pError ) {
@ -567,13 +570,6 @@ nssCKFWInstance_CreateSessionHandle
goto done;
}
*pError = nssCKFWHash_Add(fwInstance->sessionHandleReverseHash,
(const void *)fwSession, (const void *)hSession);
if( CKR_OK != *pError ) {
nssCKFWHash_Remove(fwInstance->sessionHandleHash, (const void *)hSession);
hSession = (CK_SESSION_HANDLE)0;
}
done:
nssCKFWMutex_Unlock(fwInstance->mutex);
return hSession;
@ -605,6 +601,8 @@ nssCKFWInstance_ResolveSessionHandle
fwSession = (NSSCKFWSession *)nssCKFWHash_Lookup(
fwInstance->sessionHandleHash, (const void *)hSession);
/* Assert(hSession == nssCKFWSession_GetHandle(fwSession)) */
(void)nssCKFWMutex_Unlock(fwInstance->mutex);
return fwSession;
@ -637,7 +635,7 @@ nssCKFWInstance_DestroySessionHandle
fwInstance->sessionHandleHash, (const void *)hSession);
nssCKFWHash_Remove(fwInstance->sessionHandleHash, (const void *)hSession);
nssCKFWHash_Remove(fwInstance->sessionHandleReverseHash, (const void *)fwSession);
nssCKFWSession_SetHandle(fwSession, (CK_SESSION_HANDLE)0);
(void)nssCKFWMutex_Unlock(fwInstance->mutex);
@ -655,24 +653,18 @@ nssCKFWInstance_FindSessionHandle
NSSCKFWSession *fwSession
)
{
CK_SESSION_HANDLE hSession;
#ifdef NSSDEBUG
if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) {
return (CK_SESSION_HANDLE)0;
}
#endif /* NSSDEBUG */
if( CKR_OK != nssCKFWMutex_Lock(fwInstance->mutex) ) {
if( CKR_OK != nssCKFWSession_verifyPointer(fwSession) ) {
return (CK_SESSION_HANDLE)0;
}
#endif /* NSSDEBUG */
hSession = (CK_SESSION_HANDLE)nssCKFWHash_Lookup(
fwInstance->sessionHandleReverseHash, (const void *)fwSession);
(void)nssCKFWMutex_Unlock(fwInstance->mutex);
return hSession;
return nssCKFWSession_GetHandle(fwSession);
/* look it up and assert? */
}
/*
@ -706,6 +698,13 @@ nssCKFWInstance_CreateObjectHandle
}
hObject = ++(fwInstance->lastObjectHandle);
*pError = nssCKFWObject_SetHandle(fwObject, hObject);
if( CKR_OK != *pError ) {
hObject = (CK_OBJECT_HANDLE)0;
goto done;
}
*pError = nssCKFWHash_Add(fwInstance->objectHandleHash,
(const void *)hObject, (const void *)fwObject);
if( CKR_OK != *pError ) {
@ -744,6 +743,8 @@ nssCKFWInstance_ResolveObjectHandle
fwObject = (NSSCKFWObject *)nssCKFWHash_Lookup(
fwInstance->objectHandleHash, (const void *)hObject);
/* Assert(hObject == nssCKFWObject_GetHandle(fwObject)) */
(void)nssCKFWMutex_Unlock(fwInstance->mutex);
return fwObject;
}
@ -761,6 +762,7 @@ nssCKFWInstance_ReassignObjectHandle
)
{
CK_RV error = CKR_OK;
NSSCKFWObject *oldObject;
#ifdef NSSDEBUG
error = nssCKFWInstance_verifyPointer(fwInstance);
@ -774,10 +776,20 @@ nssCKFWInstance_ReassignObjectHandle
return error;
}
oldObject = (NSSCKFWObject *)nssCKFWHash_Lookup(
fwInstance->objectHandleHash, (const void *)hObject);
/* Assert(hObject == nssCKFWObject_GetHandle(oldObject) */
(void)nssCKFWObject_SetHandle(oldObject, (CK_SESSION_HANDLE)0);
nssCKFWHash_Remove(fwInstance->objectHandleHash, (const void *)hObject);
error = nssCKFWObject_SetHandle(fwObject, hObject);
if( CKR_OK != error ) {
goto done;
}
error = nssCKFWHash_Add(fwInstance->objectHandleHash,
(const void *)hObject, (const void *)fwObject);
done:
(void)nssCKFWMutex_Unlock(fwInstance->mutex);
return error;
}
@ -807,13 +819,38 @@ nssCKFWInstance_DestroyObjectHandle
fwObject = (NSSCKFWObject *)nssCKFWHash_Lookup(
fwInstance->objectHandleHash, (const void *)hObject);
/* Assert(hObject = nssCKFWObject_GetHandle(fwObject)) */
nssCKFWHash_Remove(fwInstance->objectHandleHash, (const void *)hObject);
(void)nssCKFWObject_SetHandle(fwObject, (CK_SESSION_HANDLE)0);
(void)nssCKFWMutex_Unlock(fwInstance->mutex);
return;
}
/*
* nssCKFWInstance_FindObjectHandle
*
*/
NSS_IMPLEMENT CK_OBJECT_HANDLE
nssCKFWInstance_FindObjectHandle
(
NSSCKFWInstance *fwInstance,
NSSCKFWObject *fwObject
)
{
#ifdef NSSDEBUG
if( CKR_OK != nssCKFWInstance_verifyPointer(fwInstance) ) {
return (CK_OBJECT_HANDLE)0;
}
if( CKR_OK != nssCKFWObject_verifyPointer(fwObject) ) {
return (CK_OBJECT_HANDLE)0;
}
#endif /* NSSDEBUG */
return nssCKFWObject_GetHandle(fwObject);
}
/*
* nssCKFWInstance_GetNSlots
*

Просмотреть файл

@ -32,7 +32,7 @@
*/
#ifdef DEBUG
static const char CVS_ID[] = "@(#) $RCSfile: object.c,v $ $Revision: 1.1 $ $Date: 2000-03-31 19:43:34 $ $Name: $";
static const char CVS_ID[] = "@(#) $RCSfile: object.c,v $ $Revision: 1.2 $ $Date: 2000-04-19 21:31:54 $ $Name: $";
#endif /* DEBUG */
/*
@ -69,6 +69,8 @@ static const char CVS_ID[] = "@(#) $RCSfile: object.c,v $ $Revision: 1.1 $ $Date
* nssCKFWObject_GetArena
*
* -- private accessors --
* nssCKFWObject_SetHandle
* nssCKFWObject_GetHandle
*
* -- module fronts --
* nssCKFWObject_IsTokenObject
@ -90,6 +92,7 @@ struct NSSCKFWObjectStr {
NSSCKFWToken *fwToken;
NSSCKMDInstance *mdInstance;
NSSCKFWInstance *fwInstance;
CK_OBJECT_HANDLE hObject;
};
#ifdef DEBUG
@ -333,6 +336,56 @@ nssCKFWObject_GetArena
return fwObject->arena;
}
/*
* nssCKFWObject_SetHandle
*
*/
NSS_IMPLEMENT CK_RV
nssCKFWObject_SetHandle
(
NSSCKFWObject *fwObject,
CK_OBJECT_HANDLE hObject
)
{
#ifdef NSSDEBUG
CK_RV error = CKR_OK;
#endif /* NSSDEBUG */
#ifdef NSSDEBUG
error = nssCKFWObject_verifyPointer(fwObject);
if( CKR_OK != error ) {
return error;
}
#endif /* NSSDEBUG */
if( (CK_OBJECT_HANDLE)0 != fwObject->hObject ) {
return CKR_GENERAL_ERROR;
}
fwObject->hObject = hObject;
return CKR_OK;
}
/*
* nssCKFWObject_GetHandle
*
*/
NSS_IMPLEMENT CK_OBJECT_HANDLE
nssCKFWObject_GetHandle
(
NSSCKFWObject *fwObject
)
{
#ifdef NSSDEBUG
if( CKR_OK != nssCKFWObject_verifyPointer(fwObject) ) {
return (CK_OBJECT_HANDLE)0;
}
#endif /* NSSDEBUG */
return fwObject->hObject;
}
/*
* nssCKFWObject_IsTokenObject
*

Просмотреть файл

@ -32,7 +32,7 @@
*/
#ifdef DEBUG
static const char CVS_ID[] = "@(#) $RCSfile: session.c,v $ $Revision: 1.1 $ $Date: 2000-03-31 19:43:35 $ $Name: $";
static const char CVS_ID[] = "@(#) $RCSfile: session.c,v $ $Revision: 1.2 $ $Date: 2000-04-19 21:31:55 $ $Name: $";
#endif /* DEBUG */
/*
@ -71,6 +71,9 @@ static const char CVS_ID[] = "@(#) $RCSfile: session.c,v $ $Revision: 1.1 $ $Dat
* nssCKFWSession_GetSessionState
* nssCKFWSession_SetFWFindObjects
* nssCKFWSession_GetFWFindObjects
* nssCKFWSession_SetMDSession
* nssCKFWSession_SetHandle
* nssCKFWSession_GetHandle
*
* -- module fronts --
* nssCKFWSession_GetDeviceError
@ -106,6 +109,7 @@ struct NSSCKFWSessionStr {
CK_BBOOL rw;
NSSCKFWFindObjects *fwFindObjects;
CK_SESSION_HANDLE hSession;
};
#ifdef DEBUG
@ -157,7 +161,6 @@ NSS_IMPLEMENT NSSCKFWSession *
nssCKFWSession_Create
(
NSSCKFWToken *fwToken,
NSSCKMDSession *mdSession,
CK_BBOOL rw,
CK_VOID_PTR pApplication,
CK_NOTIFY Notify,
@ -192,7 +195,7 @@ nssCKFWSession_Create
}
fwSession->arena = arena;
fwSession->mdSession = mdSession;
fwSession->mdSession = (NSSCKMDSession *)NULL; /* set later */
fwSession->fwToken = fwToken;
fwSession->mdToken = nssCKFWToken_GetMDToken(fwToken);
@ -438,7 +441,9 @@ nssCKFWSession_SetFWFindObjects
NSSCKFWFindObjects *fwFindObjects
)
{
#ifdef NSSDEBUG
CK_RV error = CKR_OK;
#endif /* NSSDEBUG */
#ifdef NSSDEBUG
error = nssCKFWSession_verifyPointer(fwSession);
@ -449,7 +454,8 @@ nssCKFWSession_SetFWFindObjects
/* fwFindObjects may be null */
#endif /* NSSDEBUG */
if( (NSSCKFWFindObjects *)NULL != fwSession->fwFindObjects ) {
if( ((NSSCKFWFindObjects *)NULL != fwSession->fwFindObjects) &&
((NSSCKFWFindObjects *)NULL != fwFindObjects) ) {
return CKR_OPERATION_ACTIVE;
}
@ -488,6 +494,91 @@ nssCKFWSession_GetFWFindObjects
return fwSession->fwFindObjects;
}
/*
* nssCKFWSession_SetMDSession
*
*/
NSS_IMPLEMENT CK_RV
nssCKFWSession_SetMDSession
(
NSSCKFWSession *fwSession,
NSSCKMDSession *mdSession
)
{
#ifdef NSSDEBUG
CK_RV error = CKR_OK;
#endif /* NSSDEBUG */
#ifdef NSSDEBUG
error = nssCKFWSession_verifyPointer(fwSession);
if( CKR_OK != error ) {
return error;
}
if( (NSSCKMDSession *)NULL == mdSession ) {
return CKR_ARGUMENTS_BAD;
}
#endif /* NSSDEBUG */
if( (NSSCKMDSession *)NULL != fwSession->mdSession ) {
return CKR_GENERAL_ERROR;
}
fwSession->mdSession = mdSession;
return CKR_OK;
}
/*
* nssCKFWSession_SetHandle
*
*/
NSS_IMPLEMENT CK_RV
nssCKFWSession_SetHandle
(
NSSCKFWSession *fwSession,
CK_SESSION_HANDLE hSession
)
{
#ifdef NSSDEBUG
CK_RV error = CKR_OK;
#endif /* NSSDEBUG */
#ifdef NSSDEBUG
error = nssCKFWSession_verifyPointer(fwSession);
if( CKR_OK != error ) {
return error;
}
#endif /* NSSDEBUG */
if( (CK_SESSION_HANDLE)0 != fwSession->hSession ) {
return CKR_GENERAL_ERROR;
}
fwSession->hSession = hSession;
return CKR_OK;
}
/*
* nssCKFWSession_GetHandle
*
*/
NSS_IMPLEMENT CK_SESSION_HANDLE
nssCKFWSession_GetHandle
(
NSSCKFWSession *fwSession
)
{
#ifdef NSSDEBUG
if( CKR_OK != nssCKFWSession_verifyPointer(fwSession) ) {
return (NSSCKMDSession *)NULL;
}
#endif /* NSSDEBUG */
return fwSession->hSession;
}
/*
* nssCKFWSession_GetDeviceError
*
@ -500,7 +591,11 @@ nssCKFWSession_GetDeviceError
{
#ifdef NSSDEBUG
if( CKR_OK != nssCKFWSession_verifyPointer(fwSession) ) {
return CK_FALSE;
return (CK_ULONG)0;
}
if( (NSSCKMDSession *)NULL == fwSession->mdSession ) {
return (CK_ULONG)0;
}
#endif /* NSSDEBUG */
@ -548,6 +643,10 @@ nssCKFWSession_Login
return CKR_ARGUMENTS_BAD;
}
}
if( (NSSCKMDSession *)NULL == fwSession->mdSession ) {
return CKR_GENERAL_ERROR;
}
#endif /* NSSDEBUG */
oldState = nssCKFWToken_GetSessionState(fwSession->fwToken);
@ -645,6 +744,10 @@ nssCKFWSession_Logout
if( CKR_OK != error ) {
return error;
}
if( (NSSCKMDSession *)NULL == fwSession->mdSession ) {
return CKR_GENERAL_ERROR;
}
#endif /* NSSDEBUG */
oldState = nssCKFWToken_GetSessionState(fwSession->fwToken);
@ -716,6 +819,10 @@ nssCKFWSession_InitPIN
if( CKR_OK != error ) {
return error;
}
if( (NSSCKMDSession *)NULL == fwSession->mdSession ) {
return CKR_GENERAL_ERROR;
}
#endif /* NSSDEBUG */
state = nssCKFWToken_GetSessionState(fwSession->fwToken);
@ -761,6 +868,10 @@ nssCKFWSession_SetPIN
if( CKR_OK != error ) {
return error;
}
if( (NSSCKMDSession *)NULL == fwSession->mdSession ) {
return CKR_GENERAL_ERROR;
}
#endif /* NSSDEBUG */
state = nssCKFWToken_GetSessionState(fwSession->fwToken);
@ -817,6 +928,11 @@ nssCKFWSession_GetOperationStateLen
if( CKR_OK != *pError ) {
return (CK_ULONG)0;
}
if( (NSSCKMDSession *)NULL == fwSession->mdSession ) {
*pError = CKR_GENERAL_ERROR;
return (CK_ULONG)0;
}
#endif /* NSSDEBUG */
if( (void *)NULL == (void *)fwSession->mdSession->GetOperationStateLen ) {
@ -873,6 +989,10 @@ nssCKFWSession_GetOperationState
if( (void *)NULL == buffer->data ) {
return CKR_ARGUMENTS_BAD;
}
if( (NSSCKMDSession *)NULL == fwSession->mdSession ) {
return CKR_GENERAL_ERROR;
}
#endif /* NSSDEBUG */
if( (void *)NULL == (void *)fwSession->mdSession->GetOperationState ) {
@ -970,6 +1090,10 @@ nssCKFWSession_SetOperationState
return error;
}
}
if( (NSSCKMDSession *)NULL == fwSession->mdSession ) {
return CKR_GENERAL_ERROR;
}
#endif /* NSSDEBUG */
ulBuffer = (CK_ULONG *)state->data;
@ -1076,6 +1200,11 @@ nssCKFWSession_CreateObject
*pError = CKR_ARGUMENTS_BAD;
return (NSSCKFWObject *)NULL;
}
if( (NSSCKMDSession *)NULL == fwSession->mdSession ) {
*pError = CKR_GENERAL_ERROR;
return (NSSCKFWObject *)NULL;
}
#endif /* NSSDEBUG */
/*
@ -1194,6 +1323,11 @@ nssCKFWSession_CopyObject
if( CKR_OK != *pError ) {
return (NSSCKFWObject *)NULL;
}
if( (NSSCKMDSession *)NULL == fwSession->mdSession ) {
*pError = CKR_GENERAL_ERROR;
return (NSSCKFWObject *)NULL;
}
#endif /* NSSDEBUG */
/*
@ -1345,10 +1479,15 @@ nssCKFWSession_FindObjectsInit
return (NSSCKFWFindObjects *)NULL;
}
if( (CK_ATTRIBUTE_PTR)NULL == pTemplate ) {
if( ((CK_ATTRIBUTE_PTR)NULL == pTemplate) && (ulAttributeCount != 0) ) {
*pError = CKR_ARGUMENTS_BAD;
return (NSSCKFWFindObjects *)NULL;
}
if( (NSSCKMDSession *)NULL == fwSession->mdSession ) {
*pError = CKR_GENERAL_ERROR;
return (NSSCKFWFindObjects *)NULL;
}
#endif /* NSSDEBUG */
if( CK_TRUE == nssCKFWInstance_GetModuleHandlesSessionObjects(
@ -1480,6 +1619,10 @@ nssCKFWSession_SeedRandom
if( 0 == seed->size ) {
return CKR_ARGUMENTS_BAD;
}
if( (NSSCKMDSession *)NULL == fwSession->mdSession ) {
return CKR_GENERAL_ERROR;
}
#endif /* NSSDEBUG */
if( (void *)NULL == (void *)fwSession->mdSession->SeedRandom ) {
@ -1519,6 +1662,10 @@ nssCKFWSession_GetRandom
if( (void *)NULL == buffer->data ) {
return CKR_ARGUMENTS_BAD;
}
if( (NSSCKMDSession *)NULL == fwSession->mdSession ) {
return CKR_GENERAL_ERROR;
}
#endif /* NSSDEBUG */
if( (void *)NULL == (void *)fwSession->mdSession->GetRandom ) {

Просмотреть файл

@ -32,7 +32,7 @@
*/
#ifdef DEBUG
static const char CVS_ID[] = "@(#) $RCSfile: sessobj.c,v $ $Revision: 1.2 $ $Date: 2000-04-03 21:58:53 $ $Name: $";
static const char CVS_ID[] = "@(#) $RCSfile: sessobj.c,v $ $Revision: 1.3 $ $Date: 2000-04-19 21:32:11 $ $Name: $";
#endif /* DEBUG */
/*
@ -384,7 +384,9 @@ nss_ckmdSessionObject_Destroy
NSSCKFWInstance *fwInstance
)
{
#ifdef NSSDEBUG
CK_RV error = CKR_OK;
#endif /* NSSDEBUG */
nssCKMDSessionObject *mdso;
CK_ULONG i;
@ -501,7 +503,9 @@ nss_ckmdSessionObject_GetAttributeTypes
CK_ULONG ulCount
)
{
#ifdef NSSDEBUG
CK_RV error = CKR_OK;
#endif /* NSSDEBUG */
nssCKMDSessionObject *obj;
#ifdef NSSDEBUG
@ -651,7 +655,9 @@ nss_ckmdSessionObject_SetAttribute
NSSItem n;
NSSItem *ra;
CK_ATTRIBUTE_TYPE_PTR rt;
#ifdef NSSDEBUG
CK_RV error;
#endif /* NSSDEBUG */
#ifdef NSSDEBUG
error = nss_ckmdSessionObject_verifyPointer(mdObject);
@ -855,28 +861,6 @@ nss_ckmdFindSessionObjects_Next
CK_RV *pError
);
/*
* This (or something like it) should be in ../base or something.
*/
static int
attributes_match
(
NSSItem *a,
void *b_data,
CK_ULONG b_size
)
{
if( a->size != b_size ) {
return 0;
}
if( PR_TRUE == nsslibc_memequal(a->data, b_data, a->size, (PRStatus *)NULL) ) {
return 1;
} else {
return 0;
}
}
static CK_BBOOL
items_match
(
@ -885,7 +869,15 @@ items_match
CK_ULONG ulValueLen
)
{
return CK_FALSE; /* XXX fgmr 19990517 rush to compile.. */
if( a->size != ulValueLen ) {
return CK_FALSE;
}
if( PR_TRUE == nsslibc_memequal(a->data, pValue, ulValueLen, (PRStatus *)NULL) ) {
return CK_TRUE;
} else {
return CK_FALSE;
}
}
/*
@ -1069,7 +1061,6 @@ nss_ckmdFindSessionObjects_Next
)
{
nssCKMDFindSessionObjects *mdfso;
nssCKFWHash *hash;
#ifdef NSSDEBUG
if( CKR_OK != nss_ckmdFindSessionObjects_verifyPointer(mdFindObjects) ) {

Просмотреть файл

@ -32,7 +32,7 @@
*/
#ifdef DEBUG
static const char CVS_ID[] = "@(#) $RCSfile: token.c,v $ $Revision: 1.1 $ $Date: 2000-03-31 19:43:39 $ $Name: $";
static const char CVS_ID[] = "@(#) $RCSfile: token.c,v $ $Revision: 1.2 $ $Date: 2000-04-19 21:32:20 $ $Name: $";
#endif /* DEBUG */
/*
@ -1348,27 +1348,32 @@ nssCKFWToken_OpenSession
goto done;
}
mdSession = fwToken->mdToken->OpenSession(fwToken->mdToken, fwToken,
fwToken->mdInstance, fwToken->fwInstance,
/*XXX fgmr! */(NSSCKFWSession *)NULL,
rw, pError);
if( (NSSCKMDSession *)NULL == mdSession ) {
fwSession = nssCKFWSession_Create(fwToken, rw, pApplication, Notify, pError);
if( (NSSCKFWSession *)NULL == fwSession ) {
if( CKR_OK == *pError ) {
*pError = CKR_GENERAL_ERROR;
}
goto done;
}
fwSession = nssCKFWSession_Create(fwToken, mdSession, rw,
pApplication, Notify, pError);
if( (NSSCKFWSession *)NULL == fwSession ) {
mdSession = fwToken->mdToken->OpenSession(fwToken->mdToken, fwToken,
fwToken->mdInstance, fwToken->fwInstance, fwSession,
rw, pError);
if( (NSSCKMDSession *)NULL == mdSession ) {
(void)nssCKFWSession_Destroy(fwSession, CK_FALSE);
if( CKR_OK == *pError ) {
*pError = CKR_GENERAL_ERROR;
}
goto done;
}
*pError = nssCKFWSession_SetMDSession(fwSession, mdSession);
if( CKR_OK != *pError ) {
if( (void *)NULL != (void *)mdSession->Close ) {
mdSession->Close(mdSession, fwSession, fwToken->mdToken, fwToken,
fwToken->mdInstance, fwToken->fwInstance);
}
(void)nssCKFWSession_Destroy(fwSession, CK_FALSE);
goto done;
}
@ -1527,7 +1532,7 @@ nssCKFWToken_RemoveSession
return error;
}
if( CKR_OK != nssCKFWHash_Exists(fwToken->sessions, fwSession) ) {
if( CK_TRUE != nssCKFWHash_Exists(fwToken->sessions, fwSession) ) {
error = CKR_SESSION_HANDLE_INVALID;
goto done;
}

Просмотреть файл

@ -32,7 +32,7 @@
*/
#ifdef DEBUG
static const char CVS_ID[] = "@(#) $RCSfile: wrap.c,v $ $Revision: 1.1 $ $Date: 2000-03-31 19:43:41 $ $Name: $";
static const char CVS_ID[] = "@(#) $RCSfile: wrap.c,v $ $Revision: 1.2 $ $Date: 2000-04-19 21:32:26 $ $Name: $";
#endif /* DEBUG */
/*
@ -778,7 +778,12 @@ NSSCKFWC_GetMechanismList
(void)nsslibc_memset(pMechanismList, 0, *pulCount * sizeof(CK_MECHANISM_TYPE));
*pulCount = count;
error = nssCKFWToken_GetMechanismTypes(fwToken, pMechanismList);
if( 0 != count ) {
error = nssCKFWToken_GetMechanismTypes(fwToken, pMechanismList);
} else {
error = CKR_OK;
}
if( CKR_OK == error ) {
return CKR_OK;
@ -1316,10 +1321,8 @@ NSSCKFWC_CloseSession
goto loser;
}
error = nssCKFWSession_Destroy(fwSession, CK_TRUE);
/* In any case: */
nssCKFWInstance_DestroySessionHandle(fwInstance, hSession);
error = nssCKFWSession_Destroy(fwSession, CK_TRUE);
if( CKR_OK != error ) {
goto loser;
@ -2320,8 +2323,6 @@ NSSCKFWC_SetAttributeValue
NSSCKFWObject *fwObject;
NSSCKFWObject *newFwObject;
CK_ULONG i;
if( (NSSCKFWInstance *)NULL == fwInstance ) {
error = CKR_CRYPTOKI_NOT_INITIALIZED;
goto loser;
@ -2419,7 +2420,7 @@ NSSCKFWC_FindObjectsInit
goto loser;
}
if( (CK_ATTRIBUTE_PTR)CK_NULL_PTR == pTemplate ) {
if( ((CK_ATTRIBUTE_PTR)CK_NULL_PTR == pTemplate) && (ulCount != 0) ) {
error = CKR_ARGUMENTS_BAD;
goto loser;
}
@ -2533,7 +2534,7 @@ NSSCKFWC_FindObjects
NSSCKFWObject *fwObject = nssCKFWFindObjects_Next(fwFindObjects,
arena, &error);
if( (NSSCKFWObject *)NULL == fwObject ) {
goto loser;
break;
}
phObject[i] = nssCKFWInstance_FindObjectHandle(fwInstance, fwObject);