示例#1
0
void
ARMul_CPSRAltered (ARMul_State * state)
{
    ARMword oldmode;

    if (state->prog32Sig == LOW)
        state->Cpsr &= (CCBITS | INTBITS | R15MODEBITS);

    oldmode = state->Mode;

    if (state->Mode != (state->Cpsr & MODEBITS))
    {
        state->Mode =
            ARMul_SwitchMode (state, state->Mode, state->Cpsr & MODEBITS);

        state->NtransSig = (state->Mode & 3) ? HIGH : LOW;
    }
    state->Cpsr &= ~MODEBITS;

    ASSIGNINT (state->Cpsr & INTBITS);
    state->Cpsr &= ~INTBITS;
    ASSIGNN ((state->Cpsr & NBIT) != 0);
    state->Cpsr &= ~NBIT;
    ASSIGNZ ((state->Cpsr & ZBIT) != 0);
    state->Cpsr &= ~ZBIT;
    ASSIGNC ((state->Cpsr & CBIT) != 0);
    state->Cpsr &= ~CBIT;
    ASSIGNV ((state->Cpsr & VBIT) != 0);
    state->Cpsr &= ~VBIT;
    ASSIGNS ((state->Cpsr & SBIT) != 0);
    state->Cpsr &= ~SBIT;
#ifdef MODET
    ASSIGNT ((state->Cpsr & TBIT) != 0);
    state->Cpsr &= ~TBIT;
#endif

    if (oldmode > SVC26MODE)
    {
        if (state->Mode <= SVC26MODE)
        {
            state->Emulate = CHANGEMODE;
            state->Reg[15] = ECC | ER15INT | EMODE | R15PC;
        }
    }
    else
    {
        if (state->Mode > SVC26MODE)
        {
            state->Emulate = CHANGEMODE;
            state->Reg[15] = R15PC;
        }
        else
            state->Reg[15] = ECC | ER15INT | EMODE | R15PC;
    }
}
示例#2
0
void eb_param_set(int param) {
    int super = 0;
    int ordin = 0;
    int kbltz = 0;
    char str[2 * FB_BYTES + 1];
    fb_t a, b, c;
    eb_t g;
    bn_t r;
    bn_t h;

    fb_null(a);
    fb_null(b);
    fb_null(c);
    eb_null(g);
    bn_null(r);
    bn_null(h);

    TRY {
        fb_new(a);
        fb_new(b);
        fb_new(c);
        eb_new(g);
        bn_new(r);
        bn_new(h);

        core_get()->eb_id = 0;

        switch (param) {
#if defined(EB_ORDIN) && FB_POLYN == 163
        case NIST_B163:
            ASSIGN(NIST_B163, NIST_163);
            ordin = 1;
            break;
#endif
#if defined(EB_KBLTZ) && FB_POLYN == 163
        case NIST_K163:
            ASSIGN(NIST_K163, NIST_163);
            kbltz = 1;
            break;
#endif
#if defined(EB_ORDIN) && FB_POLYN == 233
        case NIST_B233:
            ASSIGN(NIST_B233, NIST_233);
            ordin = 1;
            break;
#endif
#if defined(EB_KBLTZ) && FB_POLYN == 233
        case NIST_K233:
            ASSIGN(NIST_K233, NIST_233);
            kbltz = 1;
            break;
#endif
#if defined(EB_ORDIN) && FB_POLYN == 251
        case EBACS_B251:
            ASSIGN(EBACS_B251, PENTA_251);
            ordin = 1;
            break;
#endif
#if defined(EB_ORDIN) && FB_POLYN == 257
        case HALVE_B257:
            ASSIGN(HALVE_B257, TRINO_257);
            ordin = 1;
            break;
#endif
#if defined(EB_ORDIN) && FB_POLYN == 283
        case NIST_B283:
            ASSIGN(NIST_B283, NIST_283);
            ordin = 1;
            break;
#endif
#if defined(EB_KBLTZ) && FB_POLYN == 283
        case NIST_K283:
            ASSIGN(NIST_K283, NIST_283);
            kbltz = 1;
            break;
#endif
#if defined(EB_KBLTZ) && FB_POLYN == 239
        case SECG_K239:
            ASSIGN(SECG_K239, SECG_239);
            kbltz = 1;
            break;
#endif
#if defined(EB_ORDIN) && FB_POLYN == 409
        case NIST_B409:
            ASSIGN(NIST_B409, NIST_409);
            ordin = 1;
            break;
#endif
#if defined(EB_KBLTZ) && FB_POLYN == 409
        case NIST_K409:
            ASSIGN(NIST_K409, NIST_409);
            kbltz = 1;
            break;
#endif
#if defined(EB_ORDIN) && FB_POLYN == 571
        case NIST_B571:
            ASSIGN(NIST_B571, NIST_571);
            ordin = 1;
            break;
#endif
#if defined(EB_KBLTZ) && FB_POLYN == 571
        case NIST_K571:
            ASSIGN(NIST_K571, NIST_571);
            kbltz = 1;
            break;
#endif
#if defined(EB_SUPER) && FB_POLYN == 271
        case ETAT_P271:
            ASSIGNS(ETAT_P271, PENTA_271);
            super = 1;
            break;
        case ETAT_T271:
            ASSIGNS(ETAT_T271, TRINO_271);
            super = 1;
            break;
#endif
#if defined(EB_SUPER) && FB_POLYN == 353
        case ETAT_S353:
            ASSIGNS(ETAT_S353, TRINO_353);
            super = 1;
            break;
#endif
#if defined(EB_SUPER) && FB_POLYN == 1223
        case ETAT_S1223:
            ASSIGNS(ETAT_S1223, TRINO_1223);
            super = 1;
            break;
#endif
        default:
            (void)str;
            THROW(ERR_NO_VALID);
            break;
        }

        /* Do not generate warnings. */
        (void)kbltz;
        (void)ordin;
        (void)super;
        (void)c;

        fb_zero(g->z);
        fb_set_bit(g->z, 0, 1);
        g->norm = 1;

#if defined(EB_ORDIN)
        if (ordin) {
            eb_curve_set_ordin(a, b, g, r, h);
            core_get()->eb_id = param;
        }
#endif

#if defined(EB_KBLTZ)
        if (kbltz) {
            eb_curve_set_kbltz(a, g, r, h);
            core_get()->eb_id = param;
        }
#elif defined(EB_ORDIN)
        if (kbltz) {
            eb_curve_set_ordin(a, b, g, r, h);
            core_get()->eb_id = param;
        }
#endif

#if defined(EB_SUPER)
        if (super) {
            eb_curve_set_super(a, b, c, g, r, h);
            core_get()->eb_id = param;
        }
#endif
    }
    CATCH_ANY {
        THROW(ERR_CAUGHT);
    }
    FINALLY {
        fb_free(a);
        fb_free(b);
        fb_free(c);
        eb_free(g);
        bn_free(r);
        bn_free(h);
    }
}