text: // Autogenerated from CppHeaderCreator
  // Created by Sc2ad
  // =========================================================================
  #pragma once
  // Begin includes
  #include "extern/beatsaber-hook/shared/utils/typedefs.h"
  #include "extern/beatsaber-hook/shared/utils/byref.hpp"
  // Including type: Org.BouncyCastle.Crypto.IBlockCipher
  #include "Org/BouncyCastle/Crypto/IBlockCipher.hpp"
  #include "extern/beatsaber-hook/shared/utils/il2cpp-utils-methods.hpp"
  #include "extern/beatsaber-hook/shared/utils/il2cpp-utils-properties.hpp"
  #include "extern/beatsaber-hook/shared/utils/il2cpp-utils-fields.hpp"
  #include "extern/beatsaber-hook/shared/utils/utils.h"
  // Completed includes
  // Begin forward declares
  // Forward declaring namespace: Org::BouncyCastle::Crypto
  namespace Org::BouncyCastle::Crypto {
    // Forward declaring type: ICipherParameters
    class ICipherParameters;
  }
  // Completed forward declares
  // Type namespace: Org.BouncyCastle.Crypto.Modes
  namespace Org::BouncyCastle::Crypto::Modes {
    // Size: 0x39
    #pragma pack(push, 1)
    // Autogenerated type: Org.BouncyCastle.Crypto.Modes.CbcBlockCipher
    // [TokenAttribute] Offset: FFFFFFFF
    class CbcBlockCipher : public ::Il2CppObject/*, public Org::BouncyCastle::Crypto::IBlockCipher*/ {
      public:
      // private System.Byte[] IV
      // Size: 0x8
      // Offset: 0x10
      ::Array<uint8_t>* IV;
      // Field size check
      static_assert(sizeof(::Array<uint8_t>*) == 0x8);
      // private System.Byte[] cbcV
      // Size: 0x8
      // Offset: 0x18
      ::Array<uint8_t>* cbcV;
      // Field size check
      static_assert(sizeof(::Array<uint8_t>*) == 0x8);
      // private System.Byte[] cbcNextV
      // Size: 0x8
      // Offset: 0x20
      ::Array<uint8_t>* cbcNextV;
      // Field size check
      static_assert(sizeof(::Array<uint8_t>*) == 0x8);
      // private System.Int32 blockSize
      // Size: 0x4
      // Offset: 0x28
      int blockSize;
      // Field size check
      static_assert(sizeof(int) == 0x4);
      // Padding between fields: blockSize and: cipher
      char __padding3[0x4] = {};
      // private Org.BouncyCastle.Crypto.IBlockCipher cipher
      // Size: 0x8
      // Offset: 0x30
      Org::BouncyCastle::Crypto::IBlockCipher* cipher;
      // Field size check
      static_assert(sizeof(Org::BouncyCastle::Crypto::IBlockCipher*) == 0x8);
      // private System.Boolean encrypting
      // Size: 0x1
      // Offset: 0x38
      bool encrypting;
      // Field size check
      static_assert(sizeof(bool) == 0x1);
      // Creating value type constructor for type: CbcBlockCipher
      CbcBlockCipher(::Array<uint8_t>* IV_ = {}, ::Array<uint8_t>* cbcV_ = {}, ::Array<uint8_t>* cbcNextV_ = {}, int blockSize_ = {}, Org::BouncyCastle::Crypto::IBlockCipher* cipher_ = {}, bool encrypting_ = {}) noexcept : IV{IV_}, cbcV{cbcV_}, cbcNextV{cbcNextV_}, blockSize{blockSize_}, cipher{cipher_}, encrypting{encrypting_} {}
      // Creating interface conversion operator: operator Org::BouncyCastle::Crypto::IBlockCipher
      operator Org::BouncyCastle::Crypto::IBlockCipher() noexcept {
        return *reinterpret_cast<Org::BouncyCastle::Crypto::IBlockCipher*>(this);
      }
      // Get instance field reference: private System.Byte[] IV
      ::Array<uint8_t>*& dyn_IV();
      // Get instance field reference: private System.Byte[] cbcV
      ::Array<uint8_t>*& dyn_cbcV();
      // Get instance field reference: private System.Byte[] cbcNextV
      ::Array<uint8_t>*& dyn_cbcNextV();
      // Get instance field reference: private System.Int32 blockSize
      int& dyn_blockSize();
      // Get instance field reference: private Org.BouncyCastle.Crypto.IBlockCipher cipher
      Org::BouncyCastle::Crypto::IBlockCipher*& dyn_cipher();
      // Get instance field reference: private System.Boolean encrypting
      bool& dyn_encrypting();
      // public System.String get_AlgorithmName()
      // Offset: 0x191AEA0
      ::Il2CppString* get_AlgorithmName();
      // public System.Boolean get_IsPartialBlockOkay()
      // Offset: 0x191AF64
      bool get_IsPartialBlockOkay();
      // public System.Void .ctor(Org.BouncyCastle.Crypto.IBlockCipher cipher)
      // Offset: 0x1913F7C
      template<::il2cpp_utils::CreationType creationType = ::il2cpp_utils::CreationType::Temporary>
      static CbcBlockCipher* New_ctor(Org::BouncyCastle::Crypto::IBlockCipher* cipher) {
        static auto ___internal__logger = ::Logger::get().WithContext("Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::.ctor");
        return THROW_UNLESS((::il2cpp_utils::New<CbcBlockCipher*, creationType>(cipher)));
      }
      // public Org.BouncyCastle.Crypto.IBlockCipher GetUnderlyingCipher()
      // Offset: 0x191ABB8
      Org::BouncyCastle::Crypto::IBlockCipher* GetUnderlyingCipher();
      // public System.Void Init(System.Boolean forEncryption, Org.BouncyCastle.Crypto.ICipherParameters parameters)
      // Offset: 0x191ABC0
      void Init(bool forEncryption, Org::BouncyCastle::Crypto::ICipherParameters* parameters);
      // public System.Int32 GetBlockSize()
      // Offset: 0x191AF6C
      int GetBlockSize();
      // public System.Int32 ProcessBlock(System.Byte[] input, System.Int32 inOff, System.Byte[] output, System.Int32 outOff)
      // Offset: 0x191B020
      int ProcessBlock(::Array<uint8_t>* input, int inOff, ::Array<uint8_t>* output, int outOff);
      // public System.Void Reset()
      // Offset: 0x191ADB4
      void Reset();
      // private System.Int32 EncryptBlock(System.Byte[] input, System.Int32 inOff, System.Byte[] outBytes, System.Int32 outOff)
      // Offset: 0x191B210
      int EncryptBlock(::Array<uint8_t>* input, int inOff, ::Array<uint8_t>* outBytes, int outOff);
      // private System.Int32 DecryptBlock(System.Byte[] input, System.Int32 inOff, System.Byte[] outBytes, System.Int32 outOff)
      // Offset: 0x191B030
      int DecryptBlock(::Array<uint8_t>* input, int inOff, ::Array<uint8_t>* outBytes, int outOff);
    }; // Org.BouncyCastle.Crypto.Modes.CbcBlockCipher
    #pragma pack(pop)
    static check_size<sizeof(CbcBlockCipher), 56 + sizeof(bool)> __Org_BouncyCastle_Crypto_Modes_CbcBlockCipherSizeCheck;
    static_assert(sizeof(CbcBlockCipher) == 0x39);
  }
  DEFINE_IL2CPP_ARG_TYPE(Org::BouncyCastle::Crypto::Modes::CbcBlockCipher*, "Org.BouncyCastle.Crypto.Modes", "CbcBlockCipher");
  #include "extern/beatsaber-hook/shared/utils/il2cpp-utils-methods.hpp"
  // Writing MetadataGetter for method: Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::get_AlgorithmName
  // Il2CppName: get_AlgorithmName
  template<>
  struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<::Il2CppString* (Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::*)()>(&Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::get_AlgorithmName)> {
    static const MethodInfo* get() {
      return ::il2cpp_utils::FindMethod(classof(Org::BouncyCastle::Crypto::Modes::CbcBlockCipher*), "get_AlgorithmName", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{});
    }
  };
  // Writing MetadataGetter for method: Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::get_IsPartialBlockOkay
  // Il2CppName: get_IsPartialBlockOkay
  template<>
  struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<bool (Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::*)()>(&Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::get_IsPartialBlockOkay)> {
    static const MethodInfo* get() {
      return ::il2cpp_utils::FindMethod(classof(Org::BouncyCastle::Crypto::Modes::CbcBlockCipher*), "get_IsPartialBlockOkay", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{});
    }
  };
  // Writing MetadataGetter for method: Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::New_ctor
  // Il2CppName: .ctor
  // Cannot get method pointer of value based method overload from template for constructor!
  // Try using FindMethod instead!
  // Writing MetadataGetter for method: Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::GetUnderlyingCipher
  // Il2CppName: GetUnderlyingCipher
  template<>
  struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<Org::BouncyCastle::Crypto::IBlockCipher* (Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::*)()>(&Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::GetUnderlyingCipher)> {
    static const MethodInfo* get() {
      return ::il2cpp_utils::FindMethod(classof(Org::BouncyCastle::Crypto::Modes::CbcBlockCipher*), "GetUnderlyingCipher", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{});
    }
  };
  // Writing MetadataGetter for method: Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::Init
  // Il2CppName: Init
  template<>
  struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<void (Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::*)(bool, Org::BouncyCastle::Crypto::ICipherParameters*)>(&Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::Init)> {
    static const MethodInfo* get() {
      static auto* forEncryption = &::il2cpp_utils::GetClassFromName("System", "Boolean")->byval_arg;
      static auto* parameters = &::il2cpp_utils::GetClassFromName("Org.BouncyCastle.Crypto", "ICipherParameters")->byval_arg;
      return ::il2cpp_utils::FindMethod(classof(Org::BouncyCastle::Crypto::Modes::CbcBlockCipher*), "Init", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{forEncryption, parameters});
    }
  };
  // Writing MetadataGetter for method: Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::GetBlockSize
  // Il2CppName: GetBlockSize
  template<>
  struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<int (Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::*)()>(&Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::GetBlockSize)> {
    static const MethodInfo* get() {
      return ::il2cpp_utils::FindMethod(classof(Org::BouncyCastle::Crypto::Modes::CbcBlockCipher*), "GetBlockSize", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{});
    }
  };
  // Writing MetadataGetter for method: Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::ProcessBlock
  // Il2CppName: ProcessBlock
  template<>
  struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<int (Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::*)(::Array<uint8_t>*, int, ::Array<uint8_t>*, int)>(&Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::ProcessBlock)> {
    static const MethodInfo* get() {
      static auto* input = &il2cpp_functions::array_class_get(::il2cpp_utils::GetClassFromName("System", "Byte"), 1)->byval_arg;
      static auto* inOff = &::il2cpp_utils::GetClassFromName("System", "Int32")->byval_arg;
      static auto* output = &il2cpp_functions::array_class_get(::il2cpp_utils::GetClassFromName("System", "Byte"), 1)->byval_arg;
      static auto* outOff = &::il2cpp_utils::GetClassFromName("System", "Int32")->byval_arg;
      return ::il2cpp_utils::FindMethod(classof(Org::BouncyCastle::Crypto::Modes::CbcBlockCipher*), "ProcessBlock", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{input, inOff, output, outOff});
    }
  };
  // Writing MetadataGetter for method: Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::Reset
  // Il2CppName: Reset
  template<>
  struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<void (Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::*)()>(&Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::Reset)> {
    static const MethodInfo* get() {
      return ::il2cpp_utils::FindMethod(classof(Org::BouncyCastle::Crypto::Modes::CbcBlockCipher*), "Reset", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{});
    }
  };
  // Writing MetadataGetter for method: Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::EncryptBlock
  // Il2CppName: EncryptBlock
  template<>
  struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<int (Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::*)(::Array<uint8_t>*, int, ::Array<uint8_t>*, int)>(&Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::EncryptBlock)> {
    static const MethodInfo* get() {
      static auto* input = &il2cpp_functions::array_class_get(::il2cpp_utils::GetClassFromName("System", "Byte"), 1)->byval_arg;
      static auto* inOff = &::il2cpp_utils::GetClassFromName("System", "Int32")->byval_arg;
      static auto* outBytes = &il2cpp_functions::array_class_get(::il2cpp_utils::GetClassFromName("System", "Byte"), 1)->byval_arg;
      static auto* outOff = &::il2cpp_utils::GetClassFromName("System", "Int32")->byval_arg;
      return ::il2cpp_utils::FindMethod(classof(Org::BouncyCastle::Crypto::Modes::CbcBlockCipher*), "EncryptBlock", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{input, inOff, outBytes, outOff});
    }
  };
  // Writing MetadataGetter for method: Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::DecryptBlock
  // Il2CppName: DecryptBlock
  template<>
  struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<int (Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::*)(::Array<uint8_t>*, int, ::Array<uint8_t>*, int)>(&Org::BouncyCastle::Crypto::Modes::CbcBlockCipher::DecryptBlock)> {
    static const MethodInfo* get() {
      static auto* input = &il2cpp_functions::array_class_get(::il2cpp_utils::GetClassFromName("System", "Byte"), 1)->byval_arg;
      static auto* inOff = &::il2cpp_utils::GetClassFromName("System", "Int32")->byval_arg;
      static auto* outBytes = &il2cpp_functions::array_class_get(::il2cpp_utils::GetClassFromName("System", "Byte"), 1)->byval_arg;
      static auto* outOff = &::il2cpp_utils::GetClassFromName("System", "Int32")->byval_arg;
      return ::il2cpp_utils::FindMethod(classof(Org::BouncyCastle::Crypto::Modes::CbcBlockCipher*), "DecryptBlock", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{input, inOff, outBytes, outOff});
    }
  };
  