コード例 #1
0
ファイル: cfb.c プロジェクト: TomCrypto/Ordo
int cfb_init(struct CFB_STATE *state,
             struct BLOCK_STATE *cipher_state,
             const void *iv, size_t iv_len,
             int dir,
             const void *params)
{
    int err;

    struct BLOCK_MODE_LIMITS limits;
    struct BLOCK_LIMITS block_lims;

    if ((err = cfb_limits(cipher_state->primitive, &limits)))
        return err;
    if ((err = block_limits(cipher_state->primitive, &block_lims)))
        return err;

    state->block_size = block_lims.block_size;

    if (!limit_check(iv_len, limits.iv_min, limits.iv_max, limits.iv_mul))
        return ORDO_ARG;

    state->direction = dir;

    memset(state->iv, 0x00, state->block_size);
    memcpy(state->iv, iv, iv_len);

    block_forward(cipher_state, state->iv);
    state->remaining = state->block_size;

    return ORDO_SUCCESS;
}
コード例 #2
0
ファイル: aes.c プロジェクト: TomCrypto/Ordo
int aes_init(struct AES_STATE *state,
             const void *key, size_t key_len,
             const struct AES_PARAMS *params)
{
    if (!limit_check(key_len, bits(128), bits(256), bits(64)))
        return ORDO_KEY_LEN;

    if (params)
    {
        if (params->rounds == 0) return ORDO_ARG;
        if (params->rounds > 20) return ORDO_ARG;
        state->rounds = params->rounds;
    }
    else
    {
        /* Set the default round numbers. */
        if (key_len == 16) state->rounds = 10;
        else if (key_len == 24) state->rounds = 12;
        else if (key_len == 32) state->rounds = 14;
    }

    ExpandKey((uint8_t *)key, state->key, key_len / 4, state->rounds);

    return ORDO_SUCCESS;
}
コード例 #3
0
ファイル: threefish256.c プロジェクト: TomCrypto/Ordo
int threefish256_init(struct THREEFISH256_STATE *state,
                      const void *key, size_t key_len,
                      const struct THREEFISH256_PARAMS *params)
{
    uint64_t data[4];

    if (!limit_check(key_len, bits(256), bits(256), 1))
        return ORDO_KEY_LEN;

    memcpy(data, key, sizeof(data));
    threefish256_key_schedule(data, (params == 0) ? 0 : params->tweak,
                              state->subkey);

    return ORDO_SUCCESS;
}
コード例 #4
0
ファイル: internal.c プロジェクト: TomCrypto/Ordo
int test_limit_check(void)
{
    ASSERT_EQ(limit_check(6, 8, 16, 4), 0);
    ASSERT_EQ(limit_check(20, 8, 16, 4), 0);
    ASSERT_EQ(limit_check(9, 8, 16, 4), 0);

    ASSERT_EQ(limit_check(10, 13, 13, 1), 0);
    ASSERT_EQ(limit_check(19, 13, 13, 1), 0);
    ASSERT_EQ(limit_check(13, 13, 13, 1), 1);

    ASSERT_EQ(limit_check(15, 20, 40, 1), 0);
    ASSERT_EQ(limit_check(45, 20, 40, 1), 0);
    ASSERT_EQ(limit_check(25, 20, 40, 1), 1);
    ASSERT_EQ(limit_check(31, 20, 40, 1), 1);

    ASSERT_EQ(limit_check(15, 20, 40, 2), 0);
    ASSERT_EQ(limit_check(45, 20, 40, 2), 0);
    ASSERT_EQ(limit_check(25, 20, 40, 2), 0);
    ASSERT_EQ(limit_check(31, 20, 40, 2), 0);

    ASSERT_EQ(limit_check(0, 0, 6, 3), 1);
    ASSERT_EQ(limit_check(2, 0, 6, 3), 0);
    ASSERT_EQ(limit_check(4, 0, 6, 3), 0);
    ASSERT_EQ(limit_check(6, 0, 6, 3), 1);
    ASSERT_EQ(limit_check(8, 0, 6, 3), 0);

    return 1;
}
コード例 #5
0
void step_state()
{
    static int count = 0;
    static int max_current_error_count = 0;
    static int max_amp_temperature_count = 0;

    if (limit_check(ABS(get_max_current_ma()), max_current_ma,
            &max_current_error_count, max_current_error_count_max) )
        dsp = DSP_ERROR;

    if (limit_check(get_temperature_cC(ADC_AMP_TEMP), max_amp_temperature_cC,
            &max_amp_temperature_count, max_amp_temperature_count_max) )
        dsp = DSP_ERROR;
    

    if (count<1000) {
        count++;
        dsp = DSP_STARTUP;
    } else if (dsp != DSP_ERROR) { // latch in the error mode
        switch (ec_cmd.command[0].mode) {
            case 0:
                dsp = DSP_OFF;
                break;
            case 1:
                dsp = DSP_PWM;
                break;
            case 2:
                dsp = DSP_OFF;
                break;
            case 3:
                dsp = DSP_CURRENT;
                break;
            case 4:
            default:
                dsp = DSP_BRAKE;
                break;
        }
    }

    switch (dsp) {
        case DSP_OFF:
            set_current_command_ma(0);
            set_pwm_desired(0);
            set_bldc_open();
            break;
        case DSP_STARTUP:
            set_current_command_ma(0);
            set_pwm_desired(0);
            set_bldc_open();
            set_adc_zeros();
            break;
        case DSP_PWM:
            set_current_command_ma(0);
            set_pwm_desired(ec_cmd.command[0].pwm_desired);
            set_bldc_commutation();
            break;
        case DSP_CURRENT:
            set_current_command_ma(ec_cmd.command[0].current_desired);
            set_pwm_desired(0);
            set_bldc_commutation();
            break;
        case DSP_BRAKE:
            set_current_command_ma(0);
            set_pwm_desired(0);
            set_bldc_brake();
            break;
        case DSP_ERROR:
        default:
            set_current_command_ma(0);
            set_pwm_desired(0);
            set_bldc_open();
            break;
    }
}