#include "JPKIError.h"
#include <Security/cssmerr.h>
JPKIError::JPKIError(uint16_t sw) : SCardError(sw)
{
IFDEBUG(debugDiagnose(this));
}
OSStatus JPKIError::osStatus() const
{
switch (statusWord)
{
case JPKI_BAD_SECURITY_ENV:
case JPKI_BAD_EF_IN_SECURITY_ENV:
return CSSM_ERRCODE_INTERNAL_ERROR;
case JPKI_AUTHENTICATION_BLOCKED:
return CSSM_ERRCODE_OPERATION_AUTH_DENIED;
default:
return SCardError::osStatus();
}
}
const char *JPKIError::what() const throw ()
{ return "JPKI error"; }
void JPKIError::throwMe(uint16_t sw)
{ throw JPKIError(sw); }
#if !defined(NDEBUG)
void JPKIError::debugDiagnose(const void *id) const
{
secdebug("exception", "%p JPKIError %s (%04hX)",
id, errorstr(statusWord), statusWord);
}
const char *JPKIError::errorstr(uint16_t sw)
{
switch (sw)
{
case JPKI_BAD_SECURITY_ENV:
return "Abnormality in Security environment.";
case JPKI_BAD_EF_IN_SECURITY_ENV:
return "Abnormality with IEF specified by Security environment.";
case JPKI_AUTHENTICATION_BLOCKED:
return "Authentication method invalidated (blocked).";
default:
return SCardError::errorstr(sw);
}
}
#endif //NDEBUG