case dsaKey:
case lowDSAKey:
SECKEY_CopyLowPrivateKey(SECKEYLowPrivateKey *privKey){    SECKEYLowPrivateKey *returnKey = NULL;    SECStatus rv = SECFailure;    PLArenaPool *poolp;    if(!privKey) {	return NULL;    }    poolp = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);    if(!poolp) {	return NULL;    }    returnKey = (SECKEYLowPrivateKey*)PORT_ArenaZAlloc(poolp, sizeof(SECKEYLowPrivateKey));    if(!returnKey) {	rv = SECFailure;	goto loser;    }    returnKey->keyType = privKey->keyType;    returnKey->arena = poolp;    switch(privKey->keyType) {	case rsaKey:	    rv = SECITEM_CopyItem(poolp, &(returnKey->u.rsa.modulus), 	    				&(privKey->u.rsa.modulus));	    if(rv != SECSuccess) break;	    rv = SECITEM_CopyItem(poolp, &(returnKey->u.rsa.version), 	    				&(privKey->u.rsa.version));	    if(rv != SECSuccess) break;	    rv = SECITEM_CopyItem(poolp, &(returnKey->u.rsa.publicExponent), 	    				&(privKey->u.rsa.publicExponent));	    if(rv != SECSuccess) break;	    rv = SECITEM_CopyItem(poolp, &(returnKey->u.rsa.privateExponent), 	    				&(privKey->u.rsa.privateExponent));	    if(rv != SECSuccess) break;	    rv = SECITEM_CopyItem(poolp, &(returnKey->u.rsa.prime1), 	    				&(privKey->u.rsa.prime1));	    if(rv != SECSuccess) break;	    rv = SECITEM_CopyItem(poolp, &(returnKey->u.rsa.prime2), 	    				&(privKey->u.rsa.prime2));	    if(rv != SECSuccess) break;	    rv = SECITEM_CopyItem(poolp, &(returnKey->u.rsa.exponent1), 	    				&(privKey->u.rsa.exponent1));	    if(rv != SECSuccess) break;	    rv = SECITEM_CopyItem(poolp, &(returnKey->u.rsa.exponent2), 	    				&(privKey->u.rsa.exponent2));	    if(rv != SECSuccess) break;	    rv = SECITEM_CopyItem(poolp, &(returnKey->u.rsa.coefficient), 	    				&(privKey->u.rsa.coefficient));	    if(rv != SECSuccess) break;	    break;	case dsaKey:	    rv = SECITEM_CopyItem(poolp, &(returnKey->u.dsa.publicValue),	    				&(privKey->u.dsa.publicValue));	    if(rv != SECSuccess) break;	    rv = SECITEM_CopyItem(poolp, &(returnKey->u.dsa.privateValue),	    				&(privKey->u.dsa.privateValue));	    if(rv != SECSuccess) break;	    returnKey->u.dsa.params.arena = poolp;	    rv = SECITEM_CopyItem(poolp, &(returnKey->u.dsa.params.prime),					&(privKey->u.dsa.params.prime));	    if(rv != SECSuccess) break;	    rv = SECITEM_CopyItem(poolp, &(returnKey->u.dsa.params.subPrime),					&(privKey->u.dsa.params.subPrime));	    if(rv != SECSuccess) break;	    rv = SECITEM_CopyItem(poolp, &(returnKey->u.dsa.params.base),					&(privKey->u.dsa.params.base));	    if(rv != SECSuccess) break;	    break;	case dhKey:	    rv = SECITEM_CopyItem(poolp, &(returnKey->u.dh.publicValue),	    				&(privKey->u.dh.publicValue));	    if(rv != SECSuccess) break;	    rv = SECITEM_CopyItem(poolp, &(returnKey->u.dh.privateValue),	    				&(privKey->u.dh.privateValue));	    if(rv != SECSuccess) break;	    returnKey->u.dsa.params.arena = poolp;	    rv = SECITEM_CopyItem(poolp, &(returnKey->u.dh.prime),					&(privKey->u.dh.prime));	    if(rv != SECSuccess) break;	    rv = SECITEM_CopyItem(poolp, &(returnKey->u.dh.base),					&(privKey->u.dh.base));	    if(rv != SECSuccess) break;	    break;	case fortezzaKey:	    returnKey->u.fortezza.certificate = 	    				privKey->u.fortezza.certificate;	    returnKey->u.fortezza.socket = 	    				privKey->u.fortezza.socket;	    PORT_Memcpy(returnKey->u.fortezza.serial, 	    				privKey->u.fortezza.serial, 8);	    rv = SECSuccess;	    break;	default:	    rv = SECFailure;    }loser:    if(rv != SECSuccess) {	PORT_FreeArena(poolp, PR_TRUE);	returnKey = NULL;    }    return returnKey;}