uint64_t 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];

    uint64_t 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;



    return iterations;

}

uint64_t 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];

    uint64_t 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;



    return iterations;

}

uint64_t FUNC_0(QCryptoHashAlgorithm hash,

                                    const uint8_t *key, size_t nkey,

                                    const uint8_t *salt, size_t nsalt,

                                    Error **errp)

{

    uint8_t out[32];

    uint64_t iterations = (1 << 15);

    unsigned long long VAR_0, VAR_1, VAR_2;



    while (1) {

        if (qcrypto_pbkdf2_get_thread_cpu(&VAR_1, 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(&VAR_2, errp) < 0) {

            return -1;

        }



        VAR_0 = VAR_2 - VAR_1;



        if (VAR_0 > 500) {

            break;

        } else if (VAR_0 < 100) {

            iterations = iterations * 10;

        } else {

            iterations = (iterations * 1000 / VAR_0);

        }

    }



    iterations = iterations * 1000 / VAR_0;



    return iterations;

}

uint64_t FUNC_0(QCryptoHashAlgorithm hash,
const uint8_t *key, size_t nkey,
const uint8_t *salt, size_t nsalt,
Error **errp)
{ uint8_t out[32]; uint64_t iterations = (1 << 15); unsigned long long VAR_0, VAR_1, VAR_2; while (1) { if (qcrypto_pbkdf2_get_thread_cpu(&VAR_1, 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(&VAR_2, errp) < 0) { return -1; } VAR_0 = VAR_2 - VAR_1; if (VAR_0 > 500) { break; } else if (VAR_0 < 100) { iterations = iterations * 10; } else { iterations = (iterations * 1000 / VAR_0); } } iterations = iterations * 1000 / VAR_0; return iterations; }