Function to read PQG params from the key.

This commit is contained in:
relyea%netscape.com 2002-02-04 18:00:14 +00:00
parent adf57d19ba
commit 71b1a77b4d
3 changed files with 47 additions and 0 deletions

View File

@ -640,6 +640,7 @@ PK11_DeleteTokenPrivateKey;
PK11_DeleteTokenPublicKey;
PK11_DeleteTokenSymKey;
PK11_GetSymKeyNickname;
PK11_GetPQGParamsFromPrivateKey;
PK11_GetPublicKeyNickname;
PK11_GetPrivateKeyNickname;
PK11_SetSymKeyNickname;

View File

@ -374,6 +374,7 @@ SECKEYPrivateKeyList* PK11_ListPrivKeysInSlot(PK11SlotInfo *slot,
char *nickname, void *wincx);
SECKEYPublicKeyList* PK11_ListPublicKeysInSlot(PK11SlotInfo *slot,
char *nickname);
SECKEYPQGParams *PK11_GetPQGParamsFromPrivateKey(SECKEYPrivateKey *privKey);
/* depricated */
SECKEYPrivateKeyList* PK11_ListPrivateKeysInSlot(PK11SlotInfo *slot);

View File

@ -4893,3 +4893,48 @@ PK11_SetPublicKeyNickname(SECKEYPublicKey *pubKey, const char *nickname)
return PK11_SetObjectNickname(pubKey->pkcs11Slot,
pubKey->pkcs11ID,nickname);
}
SECKEYPQGParams *
PK11_GetPQGParamsFromPrivateKey(SECKEYPrivateKey *privKey)
{
CK_ATTRIBUTE pTemplate[] = {
{ CKA_PRIME, NULL, 0 },
{ CKA_SUBPRIME, NULL, 0 },
{ CKA_BASE, NULL, 0 },
};
int pTemplateLen = sizeof(pTemplate)/sizeof(pTemplate[0]);
PRArenaPool *arena = NULL;
SECKEYPQGParams *params;
CK_RV crv;
arena = PORT_NewArena(2048);
if (arena == NULL) {
goto loser;
}
params=(SECKEYPQGParams *)PORT_ArenaZAlloc(arena,sizeof(SECKEYPQGParams));
if (params == NULL) {
goto loser;
}
crv = PK11_GetAttributes(arena, privKey->pkcs11Slot, privKey->pkcs11ID,
pTemplate, pTemplateLen);
if (crv != CKR_OK) {
PORT_SetError( PK11_MapError(crv) );
goto loser;
}
params->arena = arena;
params->prime.data = pTemplate[0].pValue;
params->prime.len = pTemplate[0].ulValueLen;
params->subPrime.data = pTemplate[1].pValue;
params->subPrime.len = pTemplate[1].ulValueLen;
params->base.data = pTemplate[2].pValue;
params->base.len = pTemplate[2].ulValueLen;
return params;
loser:
PORT_FreeArena(arena,PR_FALSE);
return NULL;
}