:github_url: hide .. DO NOT EDIT THIS FILE!!! .. Generated automatically from Godot engine sources. .. Generator: https://github.com/godotengine/godot/tree/master/doc/tools/make_rst.py. .. XML source: https://github.com/godotengine/godot/tree/master/doc/classes/AESContext.xml. .. _class_AESContext: AESContext ========== **Inherits:** :ref:`RefCounted` **<** :ref:`Object` Provides access to AES encryption/decryption of raw data. .. rst-class:: classref-introduction-group Description ----------- This class holds the context information required for encryption and decryption operations with AES (Advanced Encryption Standard). Both AES-ECB and AES-CBC modes are supported. .. tabs:: .. code-tab:: gdscript extends Node var aes = AESContext.new() func _ready(): var key = "My secret key!!!" # Key must be either 16 or 32 bytes. var data = "My secret text!!" # Data size must be multiple of 16 bytes, apply padding if needed. # Encrypt ECB aes.start(AESContext.MODE_ECB_ENCRYPT, key.to_utf8_buffer()) var encrypted = aes.update(data.to_utf8_buffer()) aes.finish() # Decrypt ECB aes.start(AESContext.MODE_ECB_DECRYPT, key.to_utf8_buffer()) var decrypted = aes.update(encrypted) aes.finish() # Check ECB assert(decrypted == data.to_utf8_buffer()) var iv = "My secret iv!!!!" # IV must be of exactly 16 bytes. # Encrypt CBC aes.start(AESContext.MODE_CBC_ENCRYPT, key.to_utf8_buffer(), iv.to_utf8_buffer()) encrypted = aes.update(data.to_utf8_buffer()) aes.finish() # Decrypt CBC aes.start(AESContext.MODE_CBC_DECRYPT, key.to_utf8_buffer(), iv.to_utf8_buffer()) decrypted = aes.update(encrypted) aes.finish() # Check CBC assert(decrypted == data.to_utf8_buffer()) .. code-tab:: csharp using Godot; using System.Diagnostics; public partial class MyNode : Node { private AesContext _aes = new AesContext(); public override void _Ready() { string key = "My secret key!!!"; // Key must be either 16 or 32 bytes. string data = "My secret text!!"; // Data size must be multiple of 16 bytes, apply padding if needed. // Encrypt ECB _aes.Start(AesContext.Mode.EcbEncrypt, key.ToUtf8Buffer()); byte[] encrypted = _aes.Update(data.ToUtf8Buffer()); _aes.Finish(); // Decrypt ECB _aes.Start(AesContext.Mode.EcbDecrypt, key.ToUtf8Buffer()); byte[] decrypted = _aes.Update(encrypted); _aes.Finish(); // Check ECB Debug.Assert(decrypted == data.ToUtf8Buffer()); string iv = "My secret iv!!!!"; // IV must be of exactly 16 bytes. // Encrypt CBC _aes.Start(AesContext.Mode.EcbEncrypt, key.ToUtf8Buffer(), iv.ToUtf8Buffer()); encrypted = _aes.Update(data.ToUtf8Buffer()); _aes.Finish(); // Decrypt CBC _aes.Start(AesContext.Mode.EcbDecrypt, key.ToUtf8Buffer(), iv.ToUtf8Buffer()); decrypted = _aes.Update(encrypted); _aes.Finish(); // Check CBC Debug.Assert(decrypted == data.ToUtf8Buffer()); } } .. rst-class:: classref-reftable-group Methods ------- .. table:: :widths: auto +-----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`finish`\ (\ ) | +-----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`PackedByteArray` | :ref:`get_iv_state`\ (\ ) | +-----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Error` | :ref:`start`\ (\ mode\: :ref:`Mode`, key\: :ref:`PackedByteArray`, iv\: :ref:`PackedByteArray` = PackedByteArray()\ ) | +-----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`PackedByteArray` | :ref:`update`\ (\ src\: :ref:`PackedByteArray`\ ) | +-----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Enumerations ------------ .. _enum_AESContext_Mode: .. rst-class:: classref-enumeration enum **Mode**: :ref:`🔗` .. _class_AESContext_constant_MODE_ECB_ENCRYPT: .. rst-class:: classref-enumeration-constant :ref:`Mode` **MODE_ECB_ENCRYPT** = ``0`` AES electronic codebook encryption mode. .. _class_AESContext_constant_MODE_ECB_DECRYPT: .. rst-class:: classref-enumeration-constant :ref:`Mode` **MODE_ECB_DECRYPT** = ``1`` AES electronic codebook decryption mode. .. _class_AESContext_constant_MODE_CBC_ENCRYPT: .. rst-class:: classref-enumeration-constant :ref:`Mode` **MODE_CBC_ENCRYPT** = ``2`` AES cipher blocker chaining encryption mode. .. _class_AESContext_constant_MODE_CBC_DECRYPT: .. rst-class:: classref-enumeration-constant :ref:`Mode` **MODE_CBC_DECRYPT** = ``3`` AES cipher blocker chaining decryption mode. .. _class_AESContext_constant_MODE_MAX: .. rst-class:: classref-enumeration-constant :ref:`Mode` **MODE_MAX** = ``4`` Maximum value for the mode enum. .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Method Descriptions ------------------- .. _class_AESContext_method_finish: .. rst-class:: classref-method |void| **finish**\ (\ ) :ref:`🔗` Close this AES context so it can be started again. See :ref:`start()`. .. rst-class:: classref-item-separator ---- .. _class_AESContext_method_get_iv_state: .. rst-class:: classref-method :ref:`PackedByteArray` **get_iv_state**\ (\ ) :ref:`🔗` Get the current IV state for this context (IV gets updated when calling :ref:`update()`). You normally don't need this function. \ **Note:** This function only makes sense when the context is started with :ref:`MODE_CBC_ENCRYPT` or :ref:`MODE_CBC_DECRYPT`. .. rst-class:: classref-item-separator ---- .. _class_AESContext_method_start: .. rst-class:: classref-method :ref:`Error` **start**\ (\ mode\: :ref:`Mode`, key\: :ref:`PackedByteArray`, iv\: :ref:`PackedByteArray` = PackedByteArray()\ ) :ref:`🔗` Start the AES context in the given ``mode``. A ``key`` of either 16 or 32 bytes must always be provided, while an ``iv`` (initialization vector) of exactly 16 bytes, is only needed when ``mode`` is either :ref:`MODE_CBC_ENCRYPT` or :ref:`MODE_CBC_DECRYPT`. .. rst-class:: classref-item-separator ---- .. _class_AESContext_method_update: .. rst-class:: classref-method :ref:`PackedByteArray` **update**\ (\ src\: :ref:`PackedByteArray`\ ) :ref:`🔗` Run the desired operation for this AES context. Will return a :ref:`PackedByteArray` containing the result of encrypting (or decrypting) the given ``src``. See :ref:`start()` for mode of operation. \ **Note:** The size of ``src`` must be a multiple of 16. Apply some padding if needed. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)` .. |required| replace:: :abbr:`required (This method is required to be overridden when extending its base class.)` .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)` .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)` .. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)` .. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)` .. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)` .. |bitfield| replace:: :abbr:`BitField (This value is an integer composed as a bitmask of the following flags.)` .. |void| replace:: :abbr:`void (No return value.)`