/*
 * 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 "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;

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

#ifdef TEST
#include <stdio.h>

#define NUM_VARIABLE_KEY_TESTS 34

/* plaintext bytes -- left halves */
static const uint32_t plaintext_l[NUM_VARIABLE_KEY_TESTS] = {
    0x00000000, 0xFFFFFFFF, 0x10000000, 0x11111111, 0x11111111,
    0x01234567, 0x00000000, 0x01234567, 0x01A1D6D0, 0x5CD54CA8,
    0x0248D438, 0x51454B58, 0x42FD4430, 0x059B5E08, 0x0756D8E0,
    0x762514B8, 0x3BDD1190, 0x26955F68, 0x164D5E40, 0x6B056E18,
    0x004BD6EF, 0x480D3900, 0x437540C8, 0x072D43A0, 0x02FE5577,
    0x1D9D5C50, 0x30553228, 0x01234567, 0x01234567, 0x01234567,
    0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF
};

/* plaintext bytes -- right halves */
static const uint32_t plaintext_r[NUM_VARIABLE_KEY_TESTS] = {
    0x00000000, 0xFFFFFFFF, 0x00000001, 0x11111111, 0x11111111,
    0x89ABCDEF, 0x00000000, 0x89ABCDEF, 0x39776742, 0x3DEF57DA,
    0x06F67172, 0x2DDF440A, 0x59577FA2, 0x51CF143A, 0x774761D2,
    0x29BF486A, 0x49372802, 0x35AF609A, 0x4F275232, 0x759F5CCA,
    0x09176062, 0x6EE762F2, 0x698F3CFA, 0x77075292, 0x8117F12A,
    0x18F728C2, 0x6D6F295A, 0x89ABCDEF, 0x89ABCDEF, 0x89ABCDEF,
    0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF
};

/* key bytes for variable key tests */
static const uint8_t variable_key[NUM_VARIABLE_KEY_TESTS][8] = {
    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
    { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
    { 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
    { 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11 },
    { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF },
    { 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11 },
    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
    { 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10 },
    { 0x7C, 0xA1, 0x10, 0x45, 0x4A, 0x1A, 0x6E, 0x57 },
    { 0x01, 0x31, 0xD9, 0x61, 0x9D, 0xC1, 0x37, 0x6E },
    { 0x07, 0xA1, 0x13, 0x3E, 0x4A, 0x0B, 0x26, 0x86 },
    { 0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E },
    { 0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6 },
    { 0x01, 0x13, 0xB9, 0x70, 0xFD, 0x34, 0xF2, 0xCE },
    { 0x01, 0x70, 0xF1, 0x75, 0x46, 0x8F, 0xB5, 0xE6 },
    { 0x43, 0x29, 0x7F, 0xAD, 0x38, 0xE3, 0x73, 0xFE },
    { 0x07, 0xA7, 0x13, 0x70, 0x45, 0xDA, 0x2A, 0x16 },
    { 0x04, 0x68, 0x91, 0x04, 0xC2, 0xFD, 0x3B, 0x2F },
    { 0x37, 0xD0, 0x6B, 0xB5, 0x16, 0xCB, 0x75, 0x46 },
    { 0x1F, 0x08, 0x26, 0x0D, 0x1A, 0xC2, 0x46, 0x5E },
    { 0x58, 0x40, 0x23, 0x64, 0x1A, 0xBA, 0x61, 0x76 },
    { 0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xB0, 0x07 },
    { 0x49, 0x79, 0x3E, 0xBC, 0x79, 0xB3, 0x25, 0x8F },
    { 0x4F, 0xB0, 0x5E, 0x15, 0x15, 0xAB, 0x73, 0xA7 },
    { 0x49, 0xE9, 0x5D, 0x6D, 0x4C, 0xA2, 0x29, 0xBF },
    { 0x01, 0x83, 0x10, 0xDC, 0x40, 0x9B, 0x26, 0xD6 },
    { 0x1C, 0x58, 0x7F, 0x1C, 0x13, 0x92, 0x4F, 0xEF },
    { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 },
    { 0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E },
    { 0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE },
    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
    { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
    { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF },
    { 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10 }
};

/* ciphertext bytes -- left halves */
static const uint32_t ciphertext_l[NUM_VARIABLE_KEY_TESTS] = {
    0x4EF99745, 0x51866FD5, 0x7D856F9A, 0x2466DD87, 0x61F9C380,
    0x7D0CC630, 0x4EF99745, 0x0ACEAB0F, 0x59C68245, 0xB1B8CC0B,
    0x1730E577, 0xA25E7856, 0x353882B1, 0x48F4D088, 0x432193B7,
    0x13F04154, 0x2EEDDA93, 0xD887E039, 0x5F99D04F, 0x4A057A3B,
    0x452031C1, 0x7555AE39, 0x53C55F9C, 0x7A8E7BFA, 0xCF9C5D7A,
    0xD1ABB290, 0x55CB3774, 0xFA34EC48, 0xA7907951, 0xC39E072D,
    0x014933E0, 0xF21E9A77, 0x24594688, 0x6B5C5A9C
};

/* ciphertext bytes -- right halves */
static const uint32_t ciphertext_r[NUM_VARIABLE_KEY_TESTS] = {
    0x6198DD78, 0xB85ECB8A, 0x613063F2, 0x8B963C9D, 0x2281B096,
    0xAFDA1EC7, 0x6198DD78, 0xC6A0A28D, 0xEB05282B, 0x250F09A0,
    0x8BEA1DA4, 0xCF2651EB, 0x09CE8F1A, 0x4C379918, 0x8951FC98,
    0xD69D1AE5, 0xFFD39C79, 0x3C2DA6E3, 0x5B163969, 0x24D3977B,
    0xE4FADA8E, 0xF59B87BD, 0xB49FC019, 0x937E89A3, 0x4986ADB5,
    0x658BC778, 0xD13EF201, 0x47B268B2, 0x08EA3CAE, 0x9FAC631D,
    0xCDAFF6E4, 0xB71C49BC, 0x5754369A, 0x5D9E0A5A
};

/* plaintext bytes */
static const uint8_t plaintext[8] = "BLOWFISH";

static const uint8_t plaintext2[16] = "BLOWFISHBLOWFISH";

/* ciphertext bytes */
static const uint8_t ciphertext[8] = {
    0x32, 0x4E, 0xD0, 0xFE, 0xF4, 0x13, 0xA2, 0x03
};

static const uint8_t ciphertext2[16] = {
    0x53, 0x00, 0x40, 0x06, 0x63, 0xf2, 0x1d, 0x99,
    0x3b, 0x9b, 0x27, 0x64, 0x46, 0xfd, 0x20, 0xc1,
};

#define IV "blowfish"

static void test_blowfish(AVBlowfish *ctx, uint8_t *dst, const uint8_t *src,
                          const uint8_t *ref, int len, uint8_t *iv, int dir,
                          const char *test)
{
    av_blowfish_crypt(ctx, dst, src, len, iv, dir);
    if (memcmp(dst, ref, 8*len)) {
        int i;
        printf("%s failed\ngot      ", test);
        for (i = 0; i < 8*len; i++)
            printf("%02x ", dst[i]);
        printf("\nexpected ");
        for (i = 0; i < 8*len; i++)
            printf("%02x ", ref[i]);
        printf("\n");
        exit(1);
    }
}

int main(void)
{
    AVBlowfish ctx;
    uint32_t tmptext_l[NUM_VARIABLE_KEY_TESTS];
    uint32_t tmptext_r[NUM_VARIABLE_KEY_TESTS];
    uint8_t tmp[16], iv[8];
    int i;

    av_blowfish_init(&ctx, "abcdefghijklmnopqrstuvwxyz", 26);

    test_blowfish(&ctx, tmp, plaintext, ciphertext, 1, NULL, 0, "encryption");
    test_blowfish(&ctx, tmp, ciphertext, plaintext, 1, NULL, 1, "decryption");
    test_blowfish(&ctx, tmp, tmp, ciphertext, 1, NULL, 0, "Inplace encryption");
    test_blowfish(&ctx, tmp, tmp, plaintext,  1, NULL, 1, "Inplace decryption");
    memcpy(iv, IV, 8);
    test_blowfish(&ctx, tmp, plaintext2, ciphertext2, 2, iv, 0, "CBC encryption");
    memcpy(iv, IV, 8);
    test_blowfish(&ctx, tmp, ciphertext2, plaintext2, 2, iv, 1, "CBC decryption");
    memcpy(iv, IV, 8);
    test_blowfish(&ctx, tmp, tmp, ciphertext2, 2, iv, 0, "Inplace CBC encryption");
    memcpy(iv, IV, 8);
    test_blowfish(&ctx, tmp, tmp, plaintext2,  2, iv, 1, "Inplace CBC decryption");

    memcpy(tmptext_l, plaintext_l, sizeof(*plaintext_l) * NUM_VARIABLE_KEY_TESTS);
    memcpy(tmptext_r, plaintext_r, sizeof(*plaintext_r) * NUM_VARIABLE_KEY_TESTS);

    for (i = 0; i < NUM_VARIABLE_KEY_TESTS; i++) {
        av_blowfish_init(&ctx, variable_key[i], 8);

        av_blowfish_crypt_ecb(&ctx, &tmptext_l[i], &tmptext_r[i], 0);
        if (tmptext_l[i] != ciphertext_l[i] || tmptext_r[i] != ciphertext_r[i]) {
            printf("Test encryption failed.\n");
            return 1;
        }

        av_blowfish_crypt_ecb(&ctx, &tmptext_l[i], &tmptext_r[i], 1);
        if (tmptext_l[i] != plaintext_l[i] || tmptext_r[i] != plaintext_r[i]) {
            printf("Test decryption failed.\n");
            return 1;
        }
    }
    printf("Test encryption/decryption success.\n");

    return 0;
}

#endif
