Open Search
    AESFile Manual

    About

    The class AESFile provides means to create and work with AES encrypted files. Derived from BaseFile working with AES files works exactly the same as with other files, with the only exception of opening the file. So it is recommended to read BaseFile Manual first.

    Warning
    For encryption using the Maxon API see Stream Conversions Manual.
    // This example demonstrates encrypting a file and comparing the encrypted result with the original file.
    // Let user choose a file to encrypt.
    Filename fnInput;
    if (!fnInput.FileSelect(FILESELECTTYPE::ANYTHING, FILESELECT::LOAD, "Open file to encrypt..."_s))
    return maxon::OK;
    AutoAlloc<BaseFile> fileInput;
    AutoAlloc<AESFile> fileAes;
    if (!fileInput || !fileAes)
    return maxon::OutOfMemoryError(MAXON_SOURCE_LOCATION);
    // Open the input file.
    {
    return maxon::IoError(MAXON_SOURCE_LOCATION, MaxonConvert(fnInput, MAXONCONVERTMODE::NONE), "Error: Failed to open input file."_s);
    }
    Filename fnAes = fnInput;
    fnAes.SetSuffix("aes"_s);
    // Note: Password needs to be either 16, 24, or 32 characters long.
    const char pw[] = { 's', 'p', 'e', 'a', 'k', ',', ' ', 'f', 'r', 'i', 'e', 'n', 'd', ',', ' ', 'a', 'n', 'd', ' ', 'e', 'n', 't', 'e', 'r' };
    const Int32 keylen = sizeof(pw) * 8; // keylen is in bits
    DebugAssert((keylen == 128) || (keylen == 192) || (keylen == 256));
    const Int32 blocksize = 256;
    if (!fileAes->Open(fnAes, pw, keylen, blocksize, 0, FILEOPEN::WRITE))
    {
    return maxon::IoError(MAXON_SOURCE_LOCATION, MaxonConvert(fnAes, MAXONCONVERTMODE::NONE), "Error: Failed to open AES file for writing."_s);
    }
    const Int fileSize = fileInput->GetLength();
    const Int readBytes = fileInput->TryReadBytes(buffer, fileSize);
    if (readBytes != fileSize)
    {
    return maxon::UnexpectedError(MAXON_SOURCE_LOCATION, "Error: Failed to read data from input file."_s);
    }
    if (!fileAes->WriteBytes(buffer, fileSize))
    {
    return maxon::UnexpectedError(MAXON_SOURCE_LOCATION, "Error: Failed to write data to AES file."_s);
    }
    fileAes->Close();
    fileInput->Close();
    // Finally check the encryption result.
    if (AESFile::CheckEncryption(fnAes, fnInput, pw, keylen, blocksize))
    {
    ApplicationOutput("Success: The encrypted file matches the encrypted version."_s);
    return maxon::OK;
    }
    else
    {
    return maxon::UnexpectedError(MAXON_SOURCE_LOCATION, "Error: The encrypted file does not match the encrypted version."_s);
    }
    const char ** buffer
    Definition: abstract.h:327
    NONE
    Definition: asset_browser.h:1
    LOAD
    Load.
    Definition: c4d_filterdata.h:1
    #define NewMemClear(T, cnt)
    Definition: defaultallocator.h:216
    READ
    Problems reading the file.
    Definition: ge_prepass.h:3
    WRITE
    Problems writing the file.
    Definition: ge_prepass.h:4
    V_INTEL
    Intel, little endian.
    Definition: ge_prepass.h:2
    ANYTHING
    Any file.
    Definition: ge_prepass.h:0
    return OK
    Definition: apibase.h:2771
    #define MACCREATOR_CINEMA
    Standard Mac creator code for Cinema 4D.
    Definition: ge_prepass.h:30
    #define MACTYPE_CINEMA
    Standard Mac type code for Cinema 4D.
    Definition: ge_prepass.h:29
    #define MAXON_SOURCE_LOCATION
    Definition: memoryallocationbase.h:69
    #define ApplicationOutput(formatString,...)
    Definition: debugdiagnostics.h:204
    #define DebugAssert(condition,...)
    Definition: debugdiagnostics.h:242
    ANY
    Definition: lib_substance.h:28
    maxon::Char Char
    Definition: ge_sys_math.h:47
    maxon::Int32 Int32
    Definition: ge_sys_math.h:51
    maxon::Int Int
    Definition: ge_sys_math.h:55
    maxon::Url MaxonConvert(const Filename &fn, MAXONCONVERTMODE convertMode)
    #define iferr_return
    Definition: resultbase.h:1531

    Allocation/Deallocation

    AESFile objects are created with the usual tools, see Entity Creation and Destruction Manual (Cinema API).

    • AESFile::Alloc(): Allocates an AESFile.
    • AESFile::Free(): Destructs AESFile previously allocated with Alloc().

    Open

    • AESFile::Open(): Opens an AES encrypted file.
    Warning
    For a plugin to be cross platform then the type and creator parameters must be correctly filled for Mac.

    Miscellaneous

    • AESFile::CheckEncryption(): Checks if the encrypted file is the encrypted version of the decrypted file.

    Further Reading