/*
 * Blowfish algorithm
 * Copyright (c) 2012 Samuel Pitoiset
 *
 * loosely based on Paul Kocher's implementation
 *
 * This file is part of FFmpeg.
 *
 * FFmpeg is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * FFmpeg is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with FFmpeg; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */

#include "avutil.h"
#include "common.h"
#include "intreadwrite.h"
#include "mem.h"
#include "blowfish.h"

static const uint32_t orig_p[AV_BF_ROUNDS + 2] = {
    0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344,
    0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89,
    0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,
    0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917,
    0x9216D5D9, 0x8979FB1B
};

static const uint32_t orig_s[4][256] = {
    { 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7,
      0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99,
      0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16,
      0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E,
      0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE,
      0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013,
      0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF,
      0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E,
      0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,
      0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440,
      0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE,
      0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,
      0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E,
      0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677,
      0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193,
      0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032,
      0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88,
      0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,
      0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E,
      0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0,
      0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3,
      0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98,
      0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88,
      0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,
      0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6,
      0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D,
      0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,
      0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7,
      0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA,
      0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463,
      0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F,
      0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09,
      0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3,
      0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB,
      0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279,
      0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,
      0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB,
      0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82,
      0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB,
      0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573,
      0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0,
      0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B,
      0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790,
      0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8,
      0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,
      0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0,
      0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7,
      0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,
      0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD,
      0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1,
      0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299,
      0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9,
      0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477,
      0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,
      0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49,
      0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF,
      0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA,
      0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5,
      0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41,
      0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,
      0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400,
      0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915,
      0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,
      0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A },
    { 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623,
      0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266,
      0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1,
      0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E,
      0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6,
      0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1,
      0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E,
      0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1,
      0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,
      0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8,
      0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF,
      0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,
      0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701,
      0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7,
      0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41,
      0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331,
      0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF,
      0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,
      0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E,
      0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87,
      0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C,
      0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2,
      0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16,
      0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,
      0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B,
      0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509,
      0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,
      0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3,
      0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F,
      0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A,
      0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4,
      0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960,
      0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66,
      0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28,
      0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802,
      0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,
      0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510,
      0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF,
      0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14,
      0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E,
      0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50,
      0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7,
      0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8,
      0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281,
      0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,
      0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696,
      0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128,
      0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,
      0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0,
      0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0,
      0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105,
      0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250,
      0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3,
      0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,
      0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00,
      0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061,
      0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB,
      0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E,
      0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735,
      0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,
      0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9,
      0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340,
      0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,
      0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7 },
    { 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934,
      0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068,
      0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF,
      0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840,
      0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45,
      0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504,
      0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A,
      0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB,
      0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,
      0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6,
      0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42,
      0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,
      0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2,
      0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB,
      0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527,
      0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B,
      0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33,
      0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,
      0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3,
      0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC,
      0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17,
      0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564,
      0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B,
      0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,
      0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922,
      0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728,
      0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,
      0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E,
      0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37,
      0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D,
      0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804,
      0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B,
      0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3,
      0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB,
      0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D,
      0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,
      0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350,
      0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9,
      0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A,
      0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE,
      0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D,
      0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC,
      0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F,
      0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61,
      0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,
      0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9,
      0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2,
      0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,
      0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E,
      0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633,
      0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10,
      0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169,
      0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52,
      0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,
      0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5,
      0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62,
      0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634,
      0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76,
      0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24,
      0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,
      0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4,
      0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C,
      0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,
      0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0 },
    { 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B,
      0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE,
      0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B,
      0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4,
      0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8,
      0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6,
      0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304,
      0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22,
      0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,
      0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6,
      0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9,
      0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,
      0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593,
      0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51,
      0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28,
      0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C,
      0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B,
      0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,
      0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C,
      0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD,
      0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A,
      0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319,
      0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB,
      0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,
      0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991,
      0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32,
      0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,
      0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166,
      0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE,
      0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB,
      0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5,
      0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47,
      0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370,
      0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D,
      0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84,
      0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,
      0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8,
      0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD,
      0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9,
      0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7,
      0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38,
      0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F,
      0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C,
      0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525,
      0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,
      0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442,
      0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964,
      0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,
      0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8,
      0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D,
      0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F,
      0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299,
      0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02,
      0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,
      0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614,
      0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A,
      0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6,
      0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B,
      0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0,
      0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,
      0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E,
      0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9,
      0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,
      0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6 }
};

#define F(Xl, Xr, P) \
    Xr ^=((( ctx->s[0][ Xl >> 24        ] \
           + ctx->s[1][(Xl >> 16) & 0xFF])\
           ^ ctx->s[2][(Xl >>  8) & 0xFF])\
           + ctx->s[3][ Xl        & 0xFF])\
           ^ P;

AVBlowfish *av_blowfish_alloc(void)
{
    return av_mallocz(sizeof(struct AVBlowfish));
}

av_cold void av_blowfish_init(AVBlowfish *ctx, const uint8_t *key, int key_len)
{
    uint32_t data, data_l, data_r;
    int i, j, k;

    memcpy(ctx->s, orig_s, sizeof(orig_s));

    j = 0;
    for (i = 0; i < AV_BF_ROUNDS + 2; ++i) {
        data = 0;
        for (k = 0; k < 4; k++) {
            data = (data << 8) | key[j];
            if (++j >= key_len)
                j = 0;
        }
        ctx->p[i] = orig_p[i] ^ data;
    }

    data_l = data_r = 0;

    for (i = 0; i < AV_BF_ROUNDS + 2; i += 2) {
        av_blowfish_crypt_ecb(ctx, &data_l, &data_r, 0);
        ctx->p[i]     = data_l;
        ctx->p[i + 1] = data_r;
    }

    for (i = 0; i < 4; ++i) {
        for (j = 0; j < 256; j += 2) {
            av_blowfish_crypt_ecb(ctx, &data_l, &data_r, 0);
            ctx->s[i][j]     = data_l;
            ctx->s[i][j + 1] = data_r;
        }
    }
}

void av_blowfish_crypt_ecb(AVBlowfish *ctx, uint32_t *xl, uint32_t *xr,
                           int decrypt)
{
    uint32_t Xl, Xr;
    int i;

    Xl = *xl;
    Xr = *xr;

    if (decrypt) {
        Xl ^= ctx->p[AV_BF_ROUNDS + 1];
        for (i = AV_BF_ROUNDS; i > 0; i-=2) {
            F(Xl, Xr, ctx->p[i  ]);
            F(Xr, Xl, ctx->p[i-1]);
        }

        Xr ^= ctx->p[0];
    } else {
        Xl ^= ctx->p[0];
        for (i = 1; i < AV_BF_ROUNDS+1; i+=2){
            F(Xl, Xr, ctx->p[i  ]);
            F(Xr, Xl, ctx->p[i+1]);
        }

        Xr ^= ctx->p[AV_BF_ROUNDS + 1];
    }

    *xl = Xr;
    *xr = Xl;
}

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;

    if (decrypt) {
        while (count--) {
            v0 = AV_RB32(src);
            v1 = AV_RB32(src + 4);

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

            if (iv) {
                v0 ^= AV_RB32(iv);
                v1 ^= AV_RB32(iv + 4);
                memcpy(iv, src, 8);
            }

            AV_WB32(dst, v0);
            AV_WB32(dst + 4, v1);

            src   += 8;
            dst   += 8;
        }
    } else {
        while (count--) {
            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;
        }
    }
}
