return SECFailure;
goto loser;
DES_Decrypt(DESContext *cx, unsigned char *output,            unsigned int *outputLen, unsigned int maxOutputLen,            unsigned char *input, unsigned int inputLen){	unsigned int outputLenUpdate, outputLenFinal;	int status;	ptrdiff_t inpptr;	unsigned char *inp = NULL;	PRBool cpybuffer = PR_FALSE;	/*  The BSAFE Crypto-C 4.1 library with which we tested on a Sun 	 *  UltraSparc crashed when the input to an DES CBC decryption operation	 *  was not 4-byte aligned.	 *  So, we work around this problem by aligning unaligned input in a	 *  temporary buffer.	 */	inpptr = (ptrdiff_t)input;	if (inpptr & 0x03) {		inp = PORT_ZAlloc(inputLen);		if (inp == NULL) {			PORT_SetError(PR_OUT_OF_MEMORY_ERROR);			return SECFailure;		}		PORT_Memcpy(inp, input, inputLen);		cpybuffer = PR_TRUE;	} else {		inp = input;	}	PORT_Assert(cx != NULL);	if (cx == NULL) {		PORT_SetError(SEC_ERROR_INVALID_ARGS);		return SECFailure;	}	PORT_Assert((inputLen & (DES_BLOCK_SIZE - 1)) == 0);	if (inputLen & (DES_BLOCK_SIZE - 1)) {		PORT_SetError(SEC_ERROR_INVALID_ARGS);		return SECFailure;	}	PORT_Assert(maxOutputLen >= inputLen);  /* check for enough room */	if (maxOutputLen < inputLen) {		PORT_SetError(SEC_ERROR_INVALID_ARGS);		return SECFailure;	}	if ((status = B_DecryptInit(cx->algobj, cx->keyobj, cx->alg_chooser,	                            (A_SURRENDER_CTX *)NULL_PTR)) != 0) {		PORT_SetError(SEC_ERROR_INVALID_ARGS);		return SECFailure;	}	if ((status = B_DecryptUpdate(cx->algobj, 	                              output, 	                              &outputLenUpdate,	                              maxOutputLen, 	                              input, 	                              inputLen,	                              (B_ALGORITHM_OBJ)NULL_PTR,	                              (A_SURRENDER_CTX *)NULL_PTR)) != 0) {		PORT_SetError(SEC_ERROR_BAD_DATA);		return SECFailure;	}	if ((status = B_DecryptFinal(cx->algobj, 	                             output + outputLenUpdate, 	                             &outputLenFinal, 	                             maxOutputLen - outputLenUpdate,	                             (B_ALGORITHM_OBJ)NULL_PTR,	                             (A_SURRENDER_CTX *)NULL_PTR)) != 0) {		PORT_SetError(SEC_ERROR_BAD_DATA);		return SECFailure;	}	*outputLen = outputLenUpdate + outputLenFinal;	return SECSuccess;}