Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
This repository was archived by the owner on May 3, 2025. It is now read-only.

mrdcvlsc/Krypt

Open more actions menu
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

187 Commits
187 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Krypt

I'm not maintaining this AES C++ code anymore, all possible future updates will be done in my https://github.com/mrdcvlsc/AES for the same hardware accelerated implementations.

build-test

Forked From : https://github.com/SergeyBel/AES

About this fork

This fork was optimized and used by my file encryption/decryption program.

This header only library provides AES encryption and decryption algorithms.


Compile with C++14 or above for maximum compatibility

-std=c++17

Compilation Note: This is a header only library, you only need to include the "Krypt.hpp", no need to compile the library first, and there's no need to add/link the .cpp files of the library to your compilation flag, see the example below.

Compilation Flags:

  • Portable - by just including the main headerfile (Krypt.hpp), it will use the portable C++ code when compiled, (take note that the portable code is slower than the two alternatives below).

    -O3
    
  • AES-NI - Add the flag below when compiling for x86-64 to gain extream speed-up performance. (commonly for mid ranged PC/Laptops).

    -DUSE_AESNI -maes -O3
    
  • ARM neon - Add the flag below when compiling for aarch64 armv8 to gain extream speed-up performance. (commonly for modern android devices).

    -DUSE_ARM_AES -march=armv8-a+crypto -O3
    

Sample program:

/*    sample.cpp    */
#include <iostream>
#include "src/Krypt.hpp"

using namespace Krypt;

int main()
{
    unsigned char plain[] = {
        0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
        0x88, 0x99, 0xaa, 0xbb
    };

    // if you want to use AES192 or AES256, just increase the size of the key to
    // 24 or 32... the AES class will automatically detect it, it will aslo throw
    // an error if the key size is not 16,24 or 32
    unsigned char aes128key[16] = {
        0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
        0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
    };

    Mode::ECB<BlockCipher::AES,Padding::ANSI_X9_23> krypt(aes128key,sizeof(aes128key));

    ByteArray cipher  = krypt.encrypt(plain,sizeof(plain));
    ByteArray recover = krypt.decrypt(cipher.array,cipher.length);
}

compile with [pure c/c++ code] g++ -o sample.exe sample.cpp -O3

comple with [AES-NI] g++ -o sample.exe sample.cpp -D USE_AESNI -maes -O3

comple with [arm-neon] g++ -o sample.exe sample.cpp -D USE_ARM_AES -march=armv8-a+crypto -O3



Krypt namespace contains the following :

sub-namespace sub-namespace classes
BlockCipher AES
Padding ZeroNulls, ANSI_X9_23, ISO_IEC_7816_4, PKCS_5_7
Mode ECB, CBC, CFB

Methods of the Classes inside the Mode namespace

  • encrypt()
  • decrypt()

Methods of the Classes inside the BlockCipher namespace

  • EncryptBlock()
  • DecryptBlock()

Methods of the Classes inside the Padding namespace

  • AddPadding()
  • RemovePadding()

The ByteArray class is used to hold the output of encrypt()/decrypt() methods of the Mode classes, and the output of AddPadding()/RemovePadding() methods of the Padding classes... ByteArray methods are listed below :

  • length - returns the size of the byte array
  • array - returns the byte array pointer[Krypt::Bytes* or unsigned char*]
  • detach() - returns the byte array pointer[Krypt::Bytes* or unsigned char*], that pointer is then dettached to the instance of the ByteArray
  • operator<< - an overload for the left-shift operator
  • operator>> - an overload for the right-shift operator
  • operator[] - an overload for the bracket operator, use for indexing the array

Make commands

  1. Run tests

    make test_portable
    make test_aesni
    make test_neon
  2. Run benchmarks

    make bench

Others

Morty Proxy This is a proxified and sanitized view of the page, visit original site.