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.IMac
  #include "Org/BouncyCastle/Crypto/IMac.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::Macs
  namespace Org::BouncyCastle::Crypto::Macs {
    // Forward declaring type: MacCFBBlockCipher
    class MacCFBBlockCipher;
  }
  // Forward declaring namespace: Org::BouncyCastle::Crypto::Paddings
  namespace Org::BouncyCastle::Crypto::Paddings {
    // Forward declaring type: IBlockCipherPadding
    class IBlockCipherPadding;
  }
  // Forward declaring namespace: Org::BouncyCastle::Crypto
  namespace Org::BouncyCastle::Crypto {
    // Forward declaring type: IBlockCipher
    class IBlockCipher;
    // Forward declaring type: ICipherParameters
    class ICipherParameters;
  }
  // Completed forward declares
  // Type namespace: Org.BouncyCastle.Crypto.Macs
  namespace Org::BouncyCastle::Crypto::Macs {
    // Size: 0x3C
    #pragma pack(push, 1)
    // Autogenerated type: Org.BouncyCastle.Crypto.Macs.CfbBlockCipherMac
    // [TokenAttribute] Offset: FFFFFFFF
    class CfbBlockCipherMac : public ::Il2CppObject/*, public Org::BouncyCastle::Crypto::IMac*/ {
      public:
      // private System.Byte[] mac
      // Size: 0x8
      // Offset: 0x10
      ::Array<uint8_t>* mac;
      // Field size check
      static_assert(sizeof(::Array<uint8_t>*) == 0x8);
      // private System.Byte[] Buffer
      // Size: 0x8
      // Offset: 0x18
      ::Array<uint8_t>* Buffer;
      // Field size check
      static_assert(sizeof(::Array<uint8_t>*) == 0x8);
      // private System.Int32 bufOff
      // Size: 0x4
      // Offset: 0x20
      int bufOff;
      // Field size check
      static_assert(sizeof(int) == 0x4);
      // Padding between fields: bufOff and: cipher
      char __padding2[0x4] = {};
      // private Org.BouncyCastle.Crypto.Macs.MacCFBBlockCipher cipher
      // Size: 0x8
      // Offset: 0x28
      Org::BouncyCastle::Crypto::Macs::MacCFBBlockCipher* cipher;
      // Field size check
      static_assert(sizeof(Org::BouncyCastle::Crypto::Macs::MacCFBBlockCipher*) == 0x8);
      // private Org.BouncyCastle.Crypto.Paddings.IBlockCipherPadding padding
      // Size: 0x8
      // Offset: 0x30
      Org::BouncyCastle::Crypto::Paddings::IBlockCipherPadding* padding;
      // Field size check
      static_assert(sizeof(Org::BouncyCastle::Crypto::Paddings::IBlockCipherPadding*) == 0x8);
      // private System.Int32 macSize
      // Size: 0x4
      // Offset: 0x38
      int macSize;
      // Field size check
      static_assert(sizeof(int) == 0x4);
      // Creating value type constructor for type: CfbBlockCipherMac
      CfbBlockCipherMac(::Array<uint8_t>* mac_ = {}, ::Array<uint8_t>* Buffer_ = {}, int bufOff_ = {}, Org::BouncyCastle::Crypto::Macs::MacCFBBlockCipher* cipher_ = {}, Org::BouncyCastle::Crypto::Paddings::IBlockCipherPadding* padding_ = {}, int macSize_ = {}) noexcept : mac{mac_}, Buffer{Buffer_}, bufOff{bufOff_}, cipher{cipher_}, padding{padding_}, macSize{macSize_} {}
      // Creating interface conversion operator: operator Org::BouncyCastle::Crypto::IMac
      operator Org::BouncyCastle::Crypto::IMac() noexcept {
        return *reinterpret_cast<Org::BouncyCastle::Crypto::IMac*>(this);
      }
      // Get instance field reference: private System.Byte[] mac
      ::Array<uint8_t>*& dyn_mac();
      // Get instance field reference: private System.Byte[] Buffer
      ::Array<uint8_t>*& dyn_Buffer();
      // Get instance field reference: private System.Int32 bufOff
      int& dyn_bufOff();
      // Get instance field reference: private Org.BouncyCastle.Crypto.Macs.MacCFBBlockCipher cipher
      Org::BouncyCastle::Crypto::Macs::MacCFBBlockCipher*& dyn_cipher();
      // Get instance field reference: private Org.BouncyCastle.Crypto.Paddings.IBlockCipherPadding padding
      Org::BouncyCastle::Crypto::Paddings::IBlockCipherPadding*& dyn_padding();
      // Get instance field reference: private System.Int32 macSize
      int& dyn_macSize();
      // public System.Void .ctor(Org.BouncyCastle.Crypto.IBlockCipher cipher)
      // Offset: 0x19155A4
      template<::il2cpp_utils::CreationType creationType = ::il2cpp_utils::CreationType::Temporary>
      static CfbBlockCipherMac* New_ctor(Org::BouncyCastle::Crypto::IBlockCipher* cipher) {
        static auto ___internal__logger = ::Logger::get().WithContext("Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac::.ctor");
        return THROW_UNLESS((::il2cpp_utils::New<CfbBlockCipherMac*, creationType>(cipher)));
      }
      // public System.Void .ctor(Org.BouncyCastle.Crypto.IBlockCipher cipher, System.Int32 cfbBitSize, System.Int32 macSizeInBits, Org.BouncyCastle.Crypto.Paddings.IBlockCipherPadding padding)
      // Offset: 0x191568C
      template<::il2cpp_utils::CreationType creationType = ::il2cpp_utils::CreationType::Temporary>
      static CfbBlockCipherMac* New_ctor(Org::BouncyCastle::Crypto::IBlockCipher* cipher, int cfbBitSize, int macSizeInBits, Org::BouncyCastle::Crypto::Paddings::IBlockCipherPadding* padding) {
        static auto ___internal__logger = ::Logger::get().WithContext("Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac::.ctor");
        return THROW_UNLESS((::il2cpp_utils::New<CfbBlockCipherMac*, creationType>(cipher, cfbBitSize, macSizeInBits, padding)));
      }
      // public System.Void Init(Org.BouncyCastle.Crypto.ICipherParameters parameters)
      // Offset: 0x1915A18
      void Init(Org::BouncyCastle::Crypto::ICipherParameters* parameters);
      // public System.Int32 GetMacSize()
      // Offset: 0x1915BDC
      int GetMacSize();
      // public System.Void Update(System.Byte input)
      // Offset: 0x1915BE4
      void Update(uint8_t input);
      // public System.Void BlockUpdate(System.Byte[] input, System.Int32 inOff, System.Int32 len)
      // Offset: 0x1915ED4
      void BlockUpdate(::Array<uint8_t>* input, int inOff, int len);
      // public System.Int32 DoFinal(System.Byte[] output, System.Int32 outOff)
      // Offset: 0x1916030
      int DoFinal(::Array<uint8_t>* output, int outOff);
      // public System.Void Reset()
      // Offset: 0x1915A50
      void Reset();
    }; // Org.BouncyCastle.Crypto.Macs.CfbBlockCipherMac
    #pragma pack(pop)
    static check_size<sizeof(CfbBlockCipherMac), 56 + sizeof(int)> __Org_BouncyCastle_Crypto_Macs_CfbBlockCipherMacSizeCheck;
    static_assert(sizeof(CfbBlockCipherMac) == 0x3C);
  }
  DEFINE_IL2CPP_ARG_TYPE(Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac*, "Org.BouncyCastle.Crypto.Macs", "CfbBlockCipherMac");
  #include "extern/beatsaber-hook/shared/utils/il2cpp-utils-methods.hpp"
  // Writing MetadataGetter for method: Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac::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::Macs::CfbBlockCipherMac::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::Macs::CfbBlockCipherMac::Init
  // Il2CppName: Init
  template<>
  struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<void (Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac::*)(Org::BouncyCastle::Crypto::ICipherParameters*)>(&Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac::Init)> {
    static const MethodInfo* get() {
      static auto* parameters = &::il2cpp_utils::GetClassFromName("Org.BouncyCastle.Crypto", "ICipherParameters")->byval_arg;
      return ::il2cpp_utils::FindMethod(classof(Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac*), "Init", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{parameters});
    }
  };
  // Writing MetadataGetter for method: Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac::GetMacSize
  // Il2CppName: GetMacSize
  template<>
  struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<int (Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac::*)()>(&Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac::GetMacSize)> {
    static const MethodInfo* get() {
      return ::il2cpp_utils::FindMethod(classof(Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac*), "GetMacSize", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{});
    }
  };
  // Writing MetadataGetter for method: Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac::Update
  // Il2CppName: Update
  template<>
  struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<void (Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac::*)(uint8_t)>(&Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac::Update)> {
    static const MethodInfo* get() {
      static auto* input = &::il2cpp_utils::GetClassFromName("System", "Byte")->byval_arg;
      return ::il2cpp_utils::FindMethod(classof(Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac*), "Update", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{input});
    }
  };
  // Writing MetadataGetter for method: Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac::BlockUpdate
  // Il2CppName: BlockUpdate
  template<>
  struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<void (Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac::*)(::Array<uint8_t>*, int, int)>(&Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac::BlockUpdate)> {
    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* len = &::il2cpp_utils::GetClassFromName("System", "Int32")->byval_arg;
      return ::il2cpp_utils::FindMethod(classof(Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac*), "BlockUpdate", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{input, inOff, len});
    }
  };
  // Writing MetadataGetter for method: Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac::DoFinal
  // Il2CppName: DoFinal
  template<>
  struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<int (Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac::*)(::Array<uint8_t>*, int)>(&Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac::DoFinal)> {
    static const MethodInfo* get() {
      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::Macs::CfbBlockCipherMac*), "DoFinal", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{output, outOff});
    }
  };
  // Writing MetadataGetter for method: Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac::Reset
  // Il2CppName: Reset
  template<>
  struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<void (Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac::*)()>(&Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac::Reset)> {
    static const MethodInfo* get() {
      return ::il2cpp_utils::FindMethod(classof(Org::BouncyCastle::Crypto::Macs::CfbBlockCipherMac*), "Reset", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{});
    }
  };
  