void av_blowfish_crypt(AVBlowfish *ctx, uint8_t *dst, const uint8_t *src,

                       int count, uint8_t *iv, int decrypt)

{

    uint32_t v0, v1;

    int i;



    while (count > 0) {

        if (decrypt) {

            v0 = AV_RB32(src);

            v1 = AV_RB32(src + 4);



            av_blowfish_crypt_ecb(ctx, &v0, &v1, decrypt);



            AV_WB32(dst, v0);

            AV_WB32(dst + 4, v1);



            if (iv) {

                for (i = 0; i < 8; i++)

                    dst[i] = dst[i] ^ iv[i];

                memcpy(iv, src, 8);

            }

        } else {

            if (iv) {

                for (i = 0; i < 8; i++)

                    dst[i] = src[i] ^ iv[i];

                v0 = AV_RB32(dst);

                v1 = AV_RB32(dst + 4);

            } else {

                v0 = AV_RB32(src);

                v1 = AV_RB32(src + 4);

            }



            av_blowfish_crypt_ecb(ctx, &v0, &v1, decrypt);



            AV_WB32(dst, v0);

            AV_WB32(dst + 4, v1);



            if (iv)

                memcpy(iv, dst, 8);

        }



        src   += 8;

        dst   += 8;

        count -= 8;

    }

}

void av_blowfish_crypt(AVBlowfish *ctx, uint8_t *dst, const uint8_t *src,

                       int count, uint8_t *iv, int decrypt)

{

    uint32_t v0, v1;

    int i;



    while (count > 0) {

        if (decrypt) {

            v0 = AV_RB32(src);

            v1 = AV_RB32(src + 4);



            av_blowfish_crypt_ecb(ctx, &v0, &v1, decrypt);



            AV_WB32(dst, v0);

            AV_WB32(dst + 4, v1);



            if (iv) {

                for (i = 0; i < 8; i++)

                    dst[i] = dst[i] ^ iv[i];

                memcpy(iv, src, 8);

            }

        } else {

            if (iv) {

                for (i = 0; i < 8; i++)

                    dst[i] = src[i] ^ iv[i];

                v0 = AV_RB32(dst);

                v1 = AV_RB32(dst + 4);

            } else {

                v0 = AV_RB32(src);

                v1 = AV_RB32(src + 4);

            }



            av_blowfish_crypt_ecb(ctx, &v0, &v1, decrypt);



            AV_WB32(dst, v0);

            AV_WB32(dst + 4, v1);



            if (iv)

                memcpy(iv, dst, 8);

        }



        src   += 8;

        dst   += 8;

        count -= 8;

    }

}

void FUNC_0(AVBlowfish *VAR_0, uint8_t *VAR_1, const uint8_t *VAR_2,

                       int VAR_3, uint8_t *VAR_4, int VAR_5)

{

    uint32_t v0, v1;

    int VAR_6;



    while (VAR_3 > 0) {

        if (VAR_5) {

            v0 = AV_RB32(VAR_2);

            v1 = AV_RB32(VAR_2 + 4);



            av_blowfish_crypt_ecb(VAR_0, &v0, &v1, VAR_5);



            AV_WB32(VAR_1, v0);

            AV_WB32(VAR_1 + 4, v1);



            if (VAR_4) {

                for (VAR_6 = 0; VAR_6 < 8; VAR_6++)

                    VAR_1[VAR_6] = VAR_1[VAR_6] ^ VAR_4[VAR_6];

                memcpy(VAR_4, VAR_2, 8);

            }

        } else {

            if (VAR_4) {

                for (VAR_6 = 0; VAR_6 < 8; VAR_6++)

                    VAR_1[VAR_6] = VAR_2[VAR_6] ^ VAR_4[VAR_6];

                v0 = AV_RB32(VAR_1);

                v1 = AV_RB32(VAR_1 + 4);

            } else {

                v0 = AV_RB32(VAR_2);

                v1 = AV_RB32(VAR_2 + 4);

            }



            av_blowfish_crypt_ecb(VAR_0, &v0, &v1, VAR_5);



            AV_WB32(VAR_1, v0);

            AV_WB32(VAR_1 + 4, v1);



            if (VAR_4)

                memcpy(VAR_4, VAR_1, 8);

        }



        VAR_2   += 8;

        VAR_1   += 8;

        VAR_3 -= 8;

    }

}

void FUNC_0(AVBlowfish *VAR_0, uint8_t *VAR_1, const uint8_t *VAR_2,
int VAR_3, uint8_t *VAR_4, int VAR_5)
{ uint32_t v0, v1; int VAR_6; while (VAR_3 > 0) { if (VAR_5) { v0 = AV_RB32(VAR_2); v1 = AV_RB32(VAR_2 + 4); av_blowfish_crypt_ecb(VAR_0, &v0, &v1, VAR_5); AV_WB32(VAR_1, v0); AV_WB32(VAR_1 + 4, v1); if (VAR_4) { for (VAR_6 = 0; VAR_6 < 8; VAR_6++) VAR_1[VAR_6] = VAR_1[VAR_6] ^ VAR_4[VAR_6]; memcpy(VAR_4, VAR_2, 8); } } else { if (VAR_4) { for (VAR_6 = 0; VAR_6 < 8; VAR_6++) VAR_1[VAR_6] = VAR_2[VAR_6] ^ VAR_4[VAR_6]; v0 = AV_RB32(VAR_1); v1 = AV_RB32(VAR_1 + 4); } else { v0 = AV_RB32(VAR_2); v1 = AV_RB32(VAR_2 + 4); } av_blowfish_crypt_ecb(VAR_0, &v0, &v1, VAR_5); AV_WB32(VAR_1, v0); AV_WB32(VAR_1 + 4, v1); if (VAR_4)
memcpy(VAR_4, VAR_1, 8); } VAR_2   += 8; VAR_1   += 8; VAR_3 -= 8; } }