int qcrypto_pbkdf2_count_iters(QCryptoHashAlgorithm hash,

                               const uint8_t *key, size_t nkey,

                               const uint8_t *salt, size_t nsalt,

                               Error **errp)

{

    uint8_t out[32];

    long long int iterations = (1 << 15);

    unsigned long long delta_ms, start_ms, end_ms;



    while (1) {

        if (qcrypto_pbkdf2_get_thread_cpu(&start_ms, errp) < 0) {

            return -1;

        }

        if (qcrypto_pbkdf2(hash,

                           key, nkey,

                           salt, nsalt,

                           iterations,

                           out, sizeof(out),

                           errp) < 0) {

            return -1;

        }

        if (qcrypto_pbkdf2_get_thread_cpu(&end_ms, errp) < 0) {

            return -1;

        }



        delta_ms = end_ms - start_ms;



        if (delta_ms > 500) {

            break;

        } else if (delta_ms < 100) {

            iterations = iterations * 10;

        } else {

            iterations = (iterations * 1000 / delta_ms);

        }

    }



    iterations = iterations * 1000 / delta_ms;



    if (iterations > INT32_MAX) {

        error_setg(errp, "Iterations %lld too large for a 32-bit int",

                   iterations);

        return -1;

    }



    return iterations;

}

int qcrypto_pbkdf2_count_iters(QCryptoHashAlgorithm hash,

                               const uint8_t *key, size_t nkey,

                               const uint8_t *salt, size_t nsalt,

                               Error **errp)

{

    uint8_t out[32];

    long long int iterations = (1 << 15);

    unsigned long long delta_ms, start_ms, end_ms;



    while (1) {

        if (qcrypto_pbkdf2_get_thread_cpu(&start_ms, errp) < 0) {

            return -1;

        }

        if (qcrypto_pbkdf2(hash,

                           key, nkey,

                           salt, nsalt,

                           iterations,

                           out, sizeof(out),

                           errp) < 0) {

            return -1;

        }

        if (qcrypto_pbkdf2_get_thread_cpu(&end_ms, errp) < 0) {

            return -1;

        }



        delta_ms = end_ms - start_ms;



        if (delta_ms > 500) {

            break;

        } else if (delta_ms < 100) {

            iterations = iterations * 10;

        } else {

            iterations = (iterations * 1000 / delta_ms);

        }

    }



    iterations = iterations * 1000 / delta_ms;



    if (iterations > INT32_MAX) {

        error_setg(errp, "Iterations %lld too large for a 32-bit int",

                   iterations);

        return -1;

    }



    return iterations;

}

int FUNC_0(QCryptoHashAlgorithm VAR_0,

                               const uint8_t *VAR_1, size_t VAR_2,

                               const uint8_t *VAR_3, size_t VAR_4,

                               Error **VAR_5)

{

    uint8_t out[32];

    long long int VAR_6 = (1 << 15);

    unsigned long long VAR_7, VAR_8, VAR_9;



    while (1) {

        if (qcrypto_pbkdf2_get_thread_cpu(&VAR_8, VAR_5) < 0) {

            return -1;

        }

        if (qcrypto_pbkdf2(VAR_0,

                           VAR_1, VAR_2,

                           VAR_3, VAR_4,

                           VAR_6,

                           out, sizeof(out),

                           VAR_5) < 0) {

            return -1;

        }

        if (qcrypto_pbkdf2_get_thread_cpu(&VAR_9, VAR_5) < 0) {

            return -1;

        }



        VAR_7 = VAR_9 - VAR_8;



        if (VAR_7 > 500) {

            break;

        } else if (VAR_7 < 100) {

            VAR_6 = VAR_6 * 10;

        } else {

            VAR_6 = (VAR_6 * 1000 / VAR_7);

        }

    }



    VAR_6 = VAR_6 * 1000 / VAR_7;



    if (VAR_6 > INT32_MAX) {

        error_setg(VAR_5, "Iterations %lld too large for a 32-bit int",

                   VAR_6);

        return -1;

    }



    return VAR_6;

}

int FUNC_0(QCryptoHashAlgorithm VAR_0,
const uint8_t *VAR_1, size_t VAR_2,
const uint8_t *VAR_3, size_t VAR_4,
Error **VAR_5)
{ uint8_t out[32]; long long int VAR_6 = (1 << 15); unsigned long long VAR_7, VAR_8, VAR_9; while (1) { if (qcrypto_pbkdf2_get_thread_cpu(&VAR_8, VAR_5) < 0) { return -1; } if (qcrypto_pbkdf2(VAR_0,
VAR_1, VAR_2,
VAR_3, VAR_4,
VAR_6,
out, sizeof(out),
VAR_5) < 0) { return -1; } if (qcrypto_pbkdf2_get_thread_cpu(&VAR_9, VAR_5) < 0) { return -1; } VAR_7 = VAR_9 - VAR_8; if (VAR_7 > 500) { break; } else if (VAR_7 < 100) { VAR_6 = VAR_6 * 10; } else { VAR_6 = (VAR_6 * 1000 / VAR_7); } } VAR_6 = VAR_6 * 1000 / VAR_7; if (VAR_6 > INT32_MAX) { error_setg(VAR_5, "Iterations %lld too large for a 32-bit int",
VAR_6); return -1; } return VAR_6; }