namespace security

// namespaces

namespace xf::security::internal

// classes

template <>
class aesDec <128>

template <>
class aesDec <256>

template <int W>
class aesDec

template <>
class aesDec <192>

template <>
class aesEnc <256>

template <>
class aesEnc <128>

template <int W>
class aesEnc

template <>
class aesEnc <192>

class aesTable

template <
    int L,
    int N,
    int H
    >
class dsa

template <int W>
class ecc

template <int HashW>
class ecdsaSecp256k1

class eddsaEd25519

template <
    int N,
    int L
    >
class rsa

template <int W>
class sm2

class sm4

adler32

#include "xf_security/adler32.hpp"
template <int W>
void adler32 (
    hls::stream <ap_uint <32>>& adlerStrm,
    hls::stream <ap_uint <W*8>>& inStrm,
    hls::stream <ap_uint <32>>& inLenStrm,
    hls::stream <bool>& endInLenStrm,
    hls::stream <ap_uint <32>>& outStrm,
    hls::stream <bool>& endOutStrm
    )

adler32 computes the Adler-32 checksum of an input data.

Parameters:

W byte number of input data, the value of W includes 1, 2, 4, 8, 16.
adlerStrm initialize adler32 value
inStrm messages to be checked
inLenStrm length of messages to be checked.
endInLenStrm end flag of inLenStrm
outStrm checksum result
end flag of outStrm

blake2b

#include "xf_security/blake2b.hpp"
template <unsigned int w>
void blake2b (
    hls::stream <ap_uint <w>>& msg_strm,
    hls::stream <ap_uint <128>>& msg_len_strm,
    hls::stream <ap_uint <w>>& key_strm,
    hls::stream <ap_uint <8>>& key_len_strm,
    hls::stream <ap_uint <8>>& out_len_strm,
    hls::stream <bool>& end_len_strm,
    hls::stream <ap_uint <8*w>>& digest_strm,
    hls::stream <bool>& end_digest_strm
    )

Top function of BLAKE2B.

The algorithm reference is : “The BLAKE2 Cryptographic Hash and Message Authentication Code (MAC)”. The implementation dataflows the sub-modules.

Parameters:

msg_strm The message being hashed.
msg_len_strm Message length in byte (0 <= msg_len <= 2^128).
key_strm The optional key.
key_len_strm Key length in byte (0 <= key_len <= 64).
out_len_strm Result hash value length in byte (0 < out_len < 64).
end_len_strm The flag to signal end of input message stream.
digest_strm The digest (hash value) stream.
end_digest_strm Flag to signal the end of the result.

desCbcEncrypt

#include "xf_security/cbc.hpp"
static void desCbcEncrypt (
    hls::stream <ap_uint <64>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <64>>& cipherkeyStrm,
    hls::stream <ap_uint <64>>& IVStrm,
    hls::stream <ap_uint <64>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

desCbcEncrypt is CBC encryption mode with DES single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each block is 64 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 64 bits for each key.
IVStrm Initialization vector for the fisrt iteration of DES encrypition, 64 bits.
ciphertextStrm Output encrypted block stream text, each block is 64 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

desCbcDecrypt

#include "xf_security/cbc.hpp"
static void desCbcDecrypt (
    hls::stream <ap_uint <64>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <64>>& cipherkeyStrm,
    hls::stream <ap_uint <64>>& IVStrm,
    hls::stream <ap_uint <64>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

desCbcDecrypt is CBC decryption mode with DES single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream text to be decrypted, each block is 64 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 64 bits for each key.
IVStrm Initialization vector for the fisrt iteration of DES decrypition, 64 bits.
plaintextStrm Output decrypted block stream text, each block is 64 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.

aes128CbcEncrypt

#include "xf_security/cbc.hpp"
static void aes128CbcEncrypt (
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <128>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

aes128CbcEncrypt is CBC encryption mode with AES-128 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each text block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 128 bits.
IVStrm Initialization vector for the fisrt iteration of AES encrypition, 128 bits.
ciphertextStrm Output encrypted block stream text, each cipher block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

aes128CbcDecrypt

#include "xf_security/cbc.hpp"
static void aes128CbcDecrypt (
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <128>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

aes128CbcDecrypt is CBC decryption mode with AES-128 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream text to be decrypted, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 128 bits.
IVStrm Initialization vector for the fisrt iteration of AES decrypition, 128 bits.
plaintextStrm Output decrypted block stream text, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.

aes192CbcEncrypt

#include "xf_security/cbc.hpp"
static void aes192CbcEncrypt (
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <192>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

aes192CbcEncrypt is CBC encryption mode with AES-192 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each text block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 192 bits.
IVStrm Initialization vector for the fisrt iteration of AES encrypition, 128 bits.
ciphertextStrm Output encrypted block stream text, each cipher block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

aes192CbcDecrypt

#include "xf_security/cbc.hpp"
static void aes192CbcDecrypt (
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <192>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

aes192CbcDecrypt is CBC decryption mode with AES-192 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream text to be decrypted, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 192 bits.
IVStrm Initialization vector for the fisrt iteration of AES decrypition, 128 bits.
plaintextStrm Output decrypted block stream text, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.

aes256CbcEncrypt

#include "xf_security/cbc.hpp"
static void aes256CbcEncrypt (
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <256>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

aes256CbcEncrypt is CBC encryption mode with AES-256 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each text block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 256 bits.
IVStrm Initialization vector for the fisrt iteration of AES encrypition, 128 bits.
ciphertextStrm Output encrypted block stream text, each cipher block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

aes256CbcDecrypt

#include "xf_security/cbc.hpp"
static void aes256CbcDecrypt (
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <256>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

aes256CbcDecrypt is CBC decryption mode with AES-256 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream text to be decrypted, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 256 bits.
IVStrm Initialization vector for the fisrt iteration of AES decrypition, 128 bits.
plaintextStrm Output decrypted block stream text, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.

aes128CcmEncrypt

#include "xf_security/ccm.hpp"
template <
    unsigned int _t = 16,
    unsigned int _q = 8
    >
void aes128CcmEncrypt (
    hls::stream <ap_uint <128>>& payloadStrm,
    hls::stream <ap_uint <128>>& cipherkeyStrm,
    hls::stream <ap_uint <8* (15-_q)>>& nonceStrm,
    hls::stream <ap_uint <128>>& ADStrm,
    hls::stream <ap_uint <64>>& lenADStrm,
    hls::stream <ap_uint <64>>& lenPldStrm,
    hls::stream <bool>& endLenStrm,
    hls::stream <ap_uint <128>>& cipherStrm,
    hls::stream <ap_uint <64>>& lenCphStrm,
    hls::stream <ap_uint <8*_t>>& tagStrm,
    hls::stream <bool>& endTagStrm
    )

aes128CcmEncrypt is CCM encryption mode with AES-128 single block cipher.

The algorithm reference is: “Recommendation for Block Cipher Modes of Operation: The CCM Mode for Authentication and Confidentiality” The implementation is modified for better performance.

Parameters:

_t Length of the MAC in byte, t is an element of {4, 6, 8, 10, 12, 14, 16}.
_q Length in byte of the binary representation of the length of the payload in byte, q is an element of {2, 3, 4, 5, 6, 7, 8}.
payloadStrm Input block stream text to be encrypted.
cipherkeyStrm Input cipher key used in encryption.
nonceStrm The nonce stream.
ADStrm Associated data stream.
lenADStrm Length of associated data in byte.
lenPldStrm Length of payload in byte.
endLenStrm Flag to signal the end of the length streams.
cipherStrm Output encrypted block stream text.
lenCphStrm Length of cipher in byte.
tagStrm The MAC stream.
endTagStrm Flag to signal the end of the MAC stream.

aes128CcmDecrypt

#include "xf_security/ccm.hpp"
template <
    unsigned int _t = 16,
    unsigned int _q = 8
    >
void aes128CcmDecrypt (
    hls::stream <ap_uint <128>>& payloadStrm,
    hls::stream <ap_uint <128>>& cipherkeyStrm,
    hls::stream <ap_uint <8* (15-_q)>>& nonceStrm,
    hls::stream <ap_uint <128>>& ADStrm,
    hls::stream <ap_uint <64>>& lenADStrm,
    hls::stream <ap_uint <64>>& lenPldStrm,
    hls::stream <bool>& endLenStrm,
    hls::stream <ap_uint <128>>& cipherStrm,
    hls::stream <ap_uint <64>>& lenCphStrm,
    hls::stream <ap_uint <8*_t>>& tagStrm,
    hls::stream <bool>& endTagStrm
    )

aes128CcmDecrypt is CCM decryption mode with AES-128 single block cipher.

The algorithm reference is: “Recommendation for Block Cipher Modes of Operation: The CCM Mode for Authentication and Confidentiality” The implementation is modified for better performance.

Parameters:

_t Length of the MAC in byte, t is an element of {4, 6, 8, 10, 12, 14, 16}.
_q Length in byte of the binary representation of the length of the payload in byte, q is an element of {2, 3, 4, 5, 6, 7, 8}.
payloadStrm Input block stream text to be decrypted.
cipherkeyStrm Input cipher key used in decryption.
nonceStrm The nonce stream.
ADStrm Associated data stream.
lenADStrm Length of associated data in byte.
lenPldStrm Length of payload in byte.
endLenStrm Flag to signal the end of the length streams.
cipherStrm Output decrypted block stream text.
lenCphStrm Length of cipher in byte.
tagStrm The MAC stream.
endTagStrm Flag to signal the end of the MAC stream.

aes192CcmEncrypt

#include "xf_security/ccm.hpp"
template <
    unsigned int _t = 16,
    unsigned int _q = 8
    >
void aes192CcmEncrypt (
    hls::stream <ap_uint <128>>& payloadStrm,
    hls::stream <ap_uint <192>>& cipherkeyStrm,
    hls::stream <ap_uint <8* (15-_q)>>& nonceStrm,
    hls::stream <ap_uint <128>>& ADStrm,
    hls::stream <ap_uint <64>>& lenADStrm,
    hls::stream <ap_uint <64>>& lenPldStrm,
    hls::stream <bool>& endLenStrm,
    hls::stream <ap_uint <128>>& cipherStrm,
    hls::stream <ap_uint <64>>& lenCphStrm,
    hls::stream <ap_uint <8*_t>>& tagStrm,
    hls::stream <bool>& endTagStrm
    )

aes192CcmEncrypt is CCM encryption mode with AES-192 single block cipher.

The algorithm reference is: “Recommendation for Block Cipher Modes of Operation: The CCM Mode for Authentication and Confidentiality” The implementation is modified for better performance.

Parameters:

_t Length of the MAC in byte, t is an element of {4, 6, 8, 10, 12, 14, 16}.
_q Length in byte of the binary representation of the length of the payload in byte, q is an element of {2, 3, 4, 5, 6, 7, 8}.
payloadStrm Input block stream text to be encrypted.
cipherkeyStrm Input cipher key used in encryption.
nonceStrm The nonce stream.
ADStrm Associated data stream.
lenADStrm Length of associated data in byte.
lenPldStrm Length of payload in byte.
endLenStrm Flag to signal the end of the length streams.
cipherStrm Output encrypted block stream text.
lenCphStrm Length of cipher in byte.
tagStrm The MAC stream.
endTagStrm Flag to signal the end of the MAC stream.

aes192CcmDecrypt

#include "xf_security/ccm.hpp"
template <
    unsigned int _t = 16,
    unsigned int _q = 8
    >
void aes192CcmDecrypt (
    hls::stream <ap_uint <128>>& payloadStrm,
    hls::stream <ap_uint <192>>& cipherkeyStrm,
    hls::stream <ap_uint <8* (15-_q)>>& nonceStrm,
    hls::stream <ap_uint <128>>& ADStrm,
    hls::stream <ap_uint <64>>& lenADStrm,
    hls::stream <ap_uint <64>>& lenPldStrm,
    hls::stream <bool>& endLenStrm,
    hls::stream <ap_uint <128>>& cipherStrm,
    hls::stream <ap_uint <64>>& lenCphStrm,
    hls::stream <ap_uint <8*_t>>& tagStrm,
    hls::stream <bool>& endTagStrm
    )

aes192CcmDecrypt is CCM decryption mode with AES-192 single block cipher.

The algorithm reference is: “Recommendation for Block Cipher Modes of Operation: The CCM Mode for Authentication and Confidentiality” The implementation is modified for better performance.

Parameters:

_t Length of the MAC in byte, t is an element of {4, 6, 8, 10, 12, 14, 16}.
_q Length in byte of the binary representation of the length of the payload in byte, q is an element of {2, 3, 4, 5, 6, 7, 8}.
payloadStrm Input block stream text to be decrypted.
cipherkeyStrm Input cipher key used in decryption.
nonceStrm The nonce stream.
ADStrm Associated data stream.
lenADStrm Length of associated data in byte.
lenPldStrm Length of payload in byte.
endLenStrm Flag to signal the end of the length streams.
cipherStrm Output decrypted block stream text.
lenCphStrm Length of cipher in byte.
tagStrm The MAC stream.
endTagStrm Flag to signal the end of the MAC stream.

aes256CcmEncrypt

#include "xf_security/ccm.hpp"
template <
    unsigned int _t = 16,
    unsigned int _q = 8
    >
void aes256CcmEncrypt (
    hls::stream <ap_uint <128>>& payloadStrm,
    hls::stream <ap_uint <256>>& cipherkeyStrm,
    hls::stream <ap_uint <8* (15-_q)>>& nonceStrm,
    hls::stream <ap_uint <128>>& ADStrm,
    hls::stream <ap_uint <64>>& lenADStrm,
    hls::stream <ap_uint <64>>& lenPldStrm,
    hls::stream <bool>& endLenStrm,
    hls::stream <ap_uint <128>>& cipherStrm,
    hls::stream <ap_uint <64>>& lenCphStrm,
    hls::stream <ap_uint <8*_t>>& tagStrm,
    hls::stream <bool>& endTagStrm
    )

aes256CcmEncrypt is CCM encryption mode with AES-256 single block cipher.

The algorithm reference is: “Recommendation for Block Cipher Modes of Operation: The CCM Mode for Authentication and Confidentiality” The implementation is modified for better performance.

Parameters:

_t Length of the MAC in byte, t is an element of {4, 6, 8, 10, 12, 14, 16}.
_q Length in byte of the binary representation of the length of the payload in byte, q is an element of {2, 3, 4, 5, 6, 7, 8}.
payloadStrm Input block stream text to be encrypted.
cipherkeyStrm Input cipher key used in encryption.
nonceStrm The nonce stream.
ADStrm Associated data stream.
lenADStrm Length of associated data in byte.
lenPldStrm Length of payload in byte.
endLenStrm Flag to signal the end of the length streams.
cipherStrm Output encrypted block stream text.
lenCphStrm Length of cipher in byte.
tagStrm The MAC stream.
endTagStrm Flag to signal the end of the MAC stream.

aes256CcmDecrypt

#include "xf_security/ccm.hpp"
template <
    unsigned int _t = 16,
    unsigned int _q = 8
    >
void aes256CcmDecrypt (
    hls::stream <ap_uint <128>>& payloadStrm,
    hls::stream <ap_uint <256>>& cipherkeyStrm,
    hls::stream <ap_uint <8* (15-_q)>>& nonceStrm,
    hls::stream <ap_uint <128>>& ADStrm,
    hls::stream <ap_uint <64>>& lenADStrm,
    hls::stream <ap_uint <64>>& lenPldStrm,
    hls::stream <bool>& endLenStrm,
    hls::stream <ap_uint <128>>& cipherStrm,
    hls::stream <ap_uint <64>>& lenCphStrm,
    hls::stream <ap_uint <8*_t>>& tagStrm,
    hls::stream <bool>& endTagStrm
    )

aes256CcmDecrypt is CCM decryption mode with AES-256 single block cipher.

The algorithm reference is: “Recommendation for Block Cipher Modes of Operation: The CCM Mode for Authentication and Confidentiality” The implementation is modified for better performance.

Parameters:

_t Length of the MAC in byte, t is an element of {4, 6, 8, 10, 12, 14, 16}.
_q Length in byte of the binary representation of the length of the payload in byte, q is an element of {2, 3, 4, 5, 6, 7, 8}.
payloadStrm Input block stream text to be decrypted.
cipherkeyStrm Input cipher key used in decryption.
nonceStrm The nonce stream.
ADStrm Associated data stream.
lenADStrm Length of associated data in byte.
lenPldStrm Length of payload in byte.
endLenStrm Flag to signal the end of the length streams.
cipherStrm Output decrypted block stream text.
lenCphStrm Length of cipher in byte.
tagStrm The MAC stream.
endTagStrm Flag to signal the end of the MAC stream.

desCfb1Encrypt

#include "xf_security/cfb.hpp"
static void desCfb1Encrypt (
    hls::stream <ap_uint <64>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <64>>& cipherkeyStrm,
    hls::stream <ap_uint <64>>& IVStrm,
    hls::stream <ap_uint <64>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

desCfb1Encrypt is CFB1 encryption mode with DES single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each block is 64 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 64 bits for each key.
IVStrm Initialization vector for the fisrt iteration of DES encrypition, 64 bits.
ciphertextStrm Output encrypted block stream text, each block is 64 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

desCfb1Decrypt

#include "xf_security/cfb.hpp"
static void desCfb1Decrypt (
    hls::stream <ap_uint <64>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <64>>& cipherkeyStrm,
    hls::stream <ap_uint <64>>& IVStrm,
    hls::stream <ap_uint <64>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

desCfb1Decrypt is CFB1 decryption mode with DES single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream text to be decrypted, each block is 64 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 64 bits for each key.
IVStrm Initialization vector for the fisrt iteration of DES decrypition, 64 bits.
plaintextStrm Output decrypted block stream text, each block is 64 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.

aes128Cfb1Encrypt

#include "xf_security/cfb.hpp"
static void aes128Cfb1Encrypt (
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <128>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

aes128Cfb1Encrypt is CFB1 encryption mode with AES-128 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each text block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 128 bits.
IVStrm Initialization vector for the fisrt iteration of AES encrypition, 128 bits.
ciphertextStrm Output encrypted block stream text, each cipher block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

aes128Cfb1Decrypt

#include "xf_security/cfb.hpp"
static void aes128Cfb1Decrypt (
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <128>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

aes128Cfb1Decrypt is CFB1 decryption mode with AES-128 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream text to be decrypted, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 128 bits.
IVStrm Initialization vector for the fisrt iteration of AES decrypition, 128 bits.
plaintextStrm Output decrypted block stream text, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.

aes192Cfb1Encrypt

#include "xf_security/cfb.hpp"
static void aes192Cfb1Encrypt (
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <192>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

aes192Cfb1Encrypt is CFB1 encryption mode with AES-192 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each text block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 192 bits.
IVStrm Initialization vector for the fisrt iteration of AES encrypition, 128 bits.
ciphertextStrm Output encrypted block stream text, each cipher block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

aes192Cfb1Decrypt

#include "xf_security/cfb.hpp"
static void aes192Cfb1Decrypt (
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <192>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

aes192Cfb1Decrypt is CFB1 decryption mode with AES-192 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream text to be decrypted, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 192 bits.
IVStrm Initialization vector for the fisrt iteration of AES decrypition, 128 bits.
plaintextStrm Output decrypted block stream text, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.

aes256Cfb1Encrypt

#include "xf_security/cfb.hpp"
static void aes256Cfb1Encrypt (
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <256>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

aes256Cfb1Encrypt is CFB1 encryption mode with AES-256 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each text block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 256 bits.
IVStrm Initialization vector for the fisrt iteration of AES encrypition, 128 bits.
ciphertextStrm Output encrypted block stream text, each cipher block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

aes256Cfb1Decrypt

#include "xf_security/cfb.hpp"
static void aes256Cfb1Decrypt (
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <256>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

aes256Cfb1Decrypt is CFB1 decryption mode with AES-256 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream text to be decrypted, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 256 bits.
IVStrm Initialization vector for the fisrt iteration of AES decrypition, 128 bits.
plaintextStrm Output decrypted block stream text, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.

desCfb8Encrypt

#include "xf_security/cfb.hpp"
static void desCfb8Encrypt (
    hls::stream <ap_uint <64>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <64>>& cipherkeyStrm,
    hls::stream <ap_uint <64>>& IVStrm,
    hls::stream <ap_uint <64>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

desCfb8Encrypt is CFB8 encryption mode with DES single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each block is 64 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 64 bits for each key.
IVStrm Initialization vector for the fisrt iteration of DES encrypition, 64 bits.
ciphertextStrm Output encrypted block stream text, each block is 64 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

desCfb8Decrypt

#include "xf_security/cfb.hpp"
static void desCfb8Decrypt (
    hls::stream <ap_uint <64>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <64>>& cipherkeyStrm,
    hls::stream <ap_uint <64>>& IVStrm,
    hls::stream <ap_uint <64>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

desCfb8Decrypt is CFB8 decryption mode with DES single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream text to be decrypted, each block is 64 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 64 bits for each key.
IVStrm Initialization vector for the fisrt iteration of DES decrypition, 64 bits.
plaintextStrm Output decrypted block stream text, each block is 64 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.

aes128Cfb8Encrypt

#include "xf_security/cfb.hpp"
static void aes128Cfb8Encrypt (
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <128>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

aes128Cfb8Encrypt is CFB8 encryption mode with AES-128 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each text block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 128 bits.
IVStrm Initialization vector for the fisrt iteration of AES encrypition, 128 bits.
ciphertextStrm Output encrypted block stream text, each cipher block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

aes128Cfb8Decrypt

#include "xf_security/cfb.hpp"
static void aes128Cfb8Decrypt (
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <128>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

aes128Cfb8Decrypt is CFB8 decryption mode with AES-128 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream text to be decrypted, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 128 bits.
IVStrm Initialization vector for the fisrt iteration of AES decrypition, 128 bits.
plaintextStrm Output decrypted block stream text, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.

aes192Cfb8Encrypt

#include "xf_security/cfb.hpp"
static void aes192Cfb8Encrypt (
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <192>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

aes192Cfb8Encrypt is CFB8 encryption mode with AES-192 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each text block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 192 bits.
IVStrm Initialization vector for the fisrt iteration of AES encrypition, 128 bits.
ciphertextStrm Output encrypted block stream text, each cipher block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

aes192Cfb8Decrypt

#include "xf_security/cfb.hpp"
static void aes192Cfb8Decrypt (
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <192>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

aes192Cfb8Decrypt is CFB8 decryption mode with AES-192 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream text to be decrypted, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 192 bits.
IVStrm Initialization vector for the fisrt iteration of AES decrypition, 128 bits.
plaintextStrm Output decrypted block stream text, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.

aes256Cfb8Encrypt

#include "xf_security/cfb.hpp"
static void aes256Cfb8Encrypt (
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <256>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

aes256Cfb8Encrypt is CFB8 encryption mode with AES-256 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each text block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 256 bits.
IVStrm Initialization vector for the fisrt iteration of AES encrypition, 128 bits.
ciphertextStrm Output encrypted block stream text, each cipher block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

aes256Cfb8Decrypt

#include "xf_security/cfb.hpp"
static void aes256Cfb8Decrypt (
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <256>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

aes256Cfb8Decrypt is CFB8 decryption mode with AES-256 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream text to be decrypted, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 256 bits.
IVStrm Initialization vector for the fisrt iteration of AES decrypition, 128 bits.
plaintextStrm Output decrypted block stream text, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.

desCfb128Encrypt

#include "xf_security/cfb.hpp"
static void desCfb128Encrypt (
    hls::stream <ap_uint <64>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <64>>& cipherkeyStrm,
    hls::stream <ap_uint <64>>& IVStrm,
    hls::stream <ap_uint <64>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

desCfb128Encrypt is CFB128 encryption mode with DES single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each block is 64 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 64 bits for each key.
IVStrm Initialization vector for the fisrt iteration of DES encrypition, 64 bits.
ciphertextStrm Output encrypted block stream text, each block is 64 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

desCfb128Decrypt

#include "xf_security/cfb.hpp"
static void desCfb128Decrypt (
    hls::stream <ap_uint <64>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <64>>& cipherkeyStrm,
    hls::stream <ap_uint <64>>& IVStrm,
    hls::stream <ap_uint <64>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

desCfb128Decrypt is CFB128 decryption mode with DES single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream text to be decrypted, each block is 64 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 64 bits for each key.
IVStrm Initialization vector for the fisrt iteration of DES decrypition, 64 bits.
plaintextStrm Output decrypted block stream text, each block is 64 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.

aes128Cfb128Encrypt

#include "xf_security/cfb.hpp"
static void aes128Cfb128Encrypt (
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <128>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

aes128Cfb128Encrypt is CFB128 encryption mode with AES-128 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each text block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 128 bits.
IVStrm Initialization vector for the fisrt iteration of AES encrypition, 128 bits.
ciphertextStrm Output encrypted block stream text, each cipher block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

aes128Cfb128Decrypt

#include "xf_security/cfb.hpp"
static void aes128Cfb128Decrypt (
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <128>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

aes128Cfb128Decrypt is CFB128 decryption mode with AES-128 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream text to be decrypted, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 128 bits.
IVStrm Initialization vector for the fisrt iteration of AES decrypition, 128 bits.
plaintextStrm Output decrypted block stream text, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.

aes192Cfb128Encrypt

#include "xf_security/cfb.hpp"
static void aes192Cfb128Encrypt (
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <192>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

aes192Cfb128Encrypt is CFB128 encryption mode with AES-192 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each text block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 192 bits.
IVStrm Initialization vector for the fisrt iteration of AES encrypition, 128 bits.
ciphertextStrm Output encrypted block stream text, each cipher block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

aes192Cfb128Decrypt

#include "xf_security/cfb.hpp"
static void aes192Cfb128Decrypt (
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <192>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

aes192Cfb128Decrypt is CFB128 decryption mode with AES-192 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream text to be decrypted, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 192 bits.
IVStrm Initialization vector for the fisrt iteration of AES decrypition, 128 bits.
plaintextStrm Output decrypted block stream text, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.

aes256Cfb128Encrypt

#include "xf_security/cfb.hpp"
static void aes256Cfb128Encrypt (
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <256>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

aes256Cfb128Encrypt is CFB128 encryption mode with AES-256 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each text block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 256 bits.
IVStrm Initialization vector for the fisrt iteration of AES encrypition, 128 bits.
ciphertextStrm Output encrypted block stream text, each cipher block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

aes256Cfb128Decrypt

#include "xf_security/cfb.hpp"
static void aes256Cfb128Decrypt (
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <256>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

aes256Cfb128Decrypt is CFB128 decryption mode with AES-256 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream text to be decrypted, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 256 bits.
IVStrm Initialization vector for the fisrt iteration of AES decrypition, 128 bits.
plaintextStrm Output decrypted block stream text, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.

chacha20

#include "xf_security/chacha20.hpp"
void chacha20 (
    hls::stream <ap_uint <256>>& keyStrm,
    hls::stream <ap_uint <128>>& counterNonceStrm,
    hls::stream <ap_uint <512>>& plainStrm,
    hls::stream <bool>& ePlainStrm,
    hls::stream <ap_uint <512>>& cipherStrm,
    hls::stream <bool>& eCipherStrm
    )

chahcha20 is a basic function for stream ciphering when key is “keylayout-chacha”, its layout in a 256-bit ap_uint<> likes this,

0 - 7 bit: ‘k’ 8 - 15 bit: ‘e’ 16 - 23 bit: ‘y’ 24 - 31 bit: ‘l’ … 232- 239 bit: ‘c’ 240- 247 bit: ‘h’ 248- 255 bit: ‘a’

state matrix: s[0] s[1] s[2] s[3] s[4] s[5] s[6] s[7] s[8] s[9] s[10] s[11] s[12] s[13] s[14] s[15]

128bits counterNonceStrm = counter 32 bits + nonce 96 bits the layout of the data from counteStrm 0-31 bit: counter s[12] 32-63 bit: nonce1 s[13] 64-95 bit: nonce2 s[14] 96-127 bit: nonce3 s[15]

Parameters:

keyStrm initail key
counterNonceStm initial counter and nonce
plainStrm input plain text to be encrypted
ePlainStrm the end flag of plainStrm
cipherStrm output encrypted text
eCipherStrm the end flag of cipherStrm

xchacha20

#include "xf_security/chacha20.hpp"
void xchacha20 (
    hls::stream <ap_uint <256>>& keyStrm,
    hls::stream <ap_uint <192>>& nonceStrm,
    hls::stream <ap_uint <512>>& plainStrm,
    hls::stream <bool>& ePlainStrm,
    hls::stream <ap_uint <512>>& cipherStrm,
    hls::stream <bool>& eCipherStrm
    )

xchahcha20 is variant of original chacha20 to support longer nonce of 192bits.

Parameters:

keyStrm initail key
nonceStm initial nonce
plainStrm input plain text to be encrypted
ePlainStrm the end flag of plainStrm
cipherStrm output encrypted text
eCipherStrm the end flag of cipherStrm

crc32

#include "xf_security/crc32.hpp"
template <int W>
void crc32 (
    hls::stream <ap_uint <32>>& crcInitStrm,
    hls::stream <ap_uint <8*W>>& inStrm,
    hls::stream <ap_uint <32>>& inLenStrm,
    hls::stream <bool>& endInStrm,
    hls::stream <ap_uint <32>>& outStrm,
    hls::stream <bool>& endOutStrm
    )

crc32 computes the CRC32 check value of an input data.

Parameters:

W byte number of input data, the value of W includes 1, 2, 4, 8, 16.
crcInitStrm initialize crc32 value
inStrm input messages to be checked
inLenStrm lengths of input message
endInStrm end flag of inLenStrm
outStrm crc32 result to output
endOutStrm end flag of outStrm

aes128CtrEncrypt

#include "xf_security/ctr.hpp"
static void aes128CtrEncrypt (
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <128>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

aes128CtrEncrypt is CTR encryption mode with AES-128 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 128 bits.
IVStrm Initialization vector for the fisrt iteration of AES encrypition, 128 bits.
ciphertextStrm Output encrypted block stream text, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

aes128CtrDecrypt

#include "xf_security/ctr.hpp"
static void aes128CtrDecrypt (
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <128>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

aes128CtrDecrypt is CTR decryption mode with AES-128 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream text to be decrypted, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 128 bits.
IVStrm Initialization vector for the fisrt iteration of AES decrypition, 128 bits.
plaintextStrm Output decrypted block stream text, each block is 128 bits.
endPlaintextStrm End flag of stream plaintext, 1 bit.

aes192CtrEncrypt

#include "xf_security/ctr.hpp"
static void aes192CtrEncrypt (
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <192>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

aes192CtrEncrypt is CTR encryption mode with AES-192 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 192 bits.
IVStrm Initialization vector for the fisrt iteration of AES encrypition, 128 bits.
ciphertextStrm Output encrypted block stream text, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

aes192CtrDecrypt

#include "xf_security/ctr.hpp"
static void aes192CtrDecrypt (
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <192>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

aes192CtrDecrypt is CTR decryption mode with AES-192 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream text to be decrypted, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 192 bits.
IVStrm Initialization vector for the fisrt iteration of AES decrypition, 128 bits.
plaintextStrm Output decrypted block stream text, each block is 128 bits.
endPlaintextStrm End flag of stream plaintext, 1 bit.

aes256CtrEncrypt

#include "xf_security/ctr.hpp"
static void aes256CtrEncrypt (
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <256>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

aes256CtrEncrypt is CTR encryption mode with AES-256 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 256 bits.
IVStrm Initialization vector for the fisrt iteration of AES encrypition, 128 bits.
ciphertextStrm Output encrypted block stream text, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

aes256CtrDecrypt

#include "xf_security/ctr.hpp"
static void aes256CtrDecrypt (
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <256>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

aes256CtrDecrypt is CTR decryption mode with AES-256 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream text to be decrypted, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 256 bits.
IVStrm Initialization vector for the fisrt iteration of AES decrypition, 128 bits.
plaintextStrm Output decrypted block stream text, each block is 128 bits.
endPlaintextStrm End flag of stream plaintext, 1 bit.

desEncrypt

#include "xf_security/des.hpp"
static void desEncrypt (
    ap_uint <64> in,
    ap_uint <64> key,
    ap_uint <64>& out
    )

desEncrypt is the basic function for ciphering one block with one cipher key using DES

Parameters:

in input one plain text to be encrypted, 64 bits.
key input cipher key, 64 bits.
out output encrypted text, 64 bits.

desDecrypt

#include "xf_security/des.hpp"
static void desDecrypt (
    ap_uint <64> in,
    ap_uint <64> cipherKey,
    ap_uint <64>& out
    )

desDecrypt is the basic function for decrypt one block with one cipher key using DES

Parameters:

in input one encrypted text to be decrypted, 64 bits.
cipherKey input cipher key, 64 bits.
out output decrypted text, 64 bits.

des3Encrypt

#include "xf_security/des.hpp"
static void des3Encrypt (
    ap_uint <64> in,
    ap_uint <64> key1,
    ap_uint <64> key2,
    ap_uint <64> key3,
    ap_uint <64>& out
    )

des3Encrypt is the basic function for ciphering one block with three cipher keys using 3DES

Parameters:

in input one plain text to be encrypted, 64 bits.
key1 input cipher key, 64 bits.
key2 input cipher key, 64 bits.
key3 input cipher key, 64 bits.
out output encrypted text, 64 bits.

des3Decrypt

#include "xf_security/des.hpp"
static void des3Decrypt (
    ap_uint <64> in,
    ap_uint <64> key1,
    ap_uint <64> key2,
    ap_uint <64> key3,
    ap_uint <64>& out
    )

des3Decrypt is the basic function for decrypt one block with three cipher keys using 3DES

Parameters:

in input one encrypted text to be decrypted, 64 bits.
key1 input cipher key, 64 bits.
key2 input cipher key, 64 bits.
key3 input cipher key, 64 bits.
out output decrypted text, 64 bits.

desEcbEncrypt

#include "xf_security/ecb.hpp"
static void desEcbEncrypt (
    hls::stream <ap_uint <64>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <64>>& cipherkeyStrm,
    hls::stream <ap_uint <64>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

desEcbEncrypt is ECB encryption mode with DES single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each block is 64 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 64 bits for each key.
ciphertextStrm Output encrypted block stream text, each block is 64 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

desEcbDecrypt

#include "xf_security/ecb.hpp"
static void desEcbDecrypt (
    hls::stream <ap_uint <64>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <64>>& cipherkeyStrm,
    hls::stream <ap_uint <64>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

desEcbDecrypt is ECB decryption mode with DES single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream to be decrypted, each block is 64 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 64 bits for each key.
plaintextStrm Output decrypted block stream text, each block is 64 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.

aes128EcbEncrypt

#include "xf_security/ecb.hpp"
static void aes128EcbEncrypt (
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <128>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

aes128EcbEncrypt is ECB encryption mode with AES-128 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 128 bits.
ciphertextStrm Output encrypted block stream text, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

aes128EcbDecrypt

#include "xf_security/ecb.hpp"
static void aes128EcbDecrypt (
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <128>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

aes128EcbDecrypt is ECB decryption mode with AES-128 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream to be decrypted, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 128 bits.
plaintextStrm Output decrypted block stream text, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.

aes192EcbEncrypt

#include "xf_security/ecb.hpp"
static void aes192EcbEncrypt (
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <192>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

aes192EcbEncrypt is ECB encryption mode with AES-192 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 192 bits.
ciphertextStrm Output encrypted block stream text, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

aes192EcbDecrypt

#include "xf_security/ecb.hpp"
static void aes192EcbDecrypt (
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <192>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

aes192EcbDecrypt is ECB decryption mode with AES-192 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream to be decrypted, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 192 bits.
plaintextStrm Output decrypted block stream text, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.

aes256EcbEncrypt

#include "xf_security/ecb.hpp"
static void aes256EcbEncrypt (
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <256>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

aes256EcbEncrypt is ECB encryption mode with AES-256 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 256 bits.
ciphertextStrm Output encrypted block stream text, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

aes256EcbDecrypt

#include "xf_security/ecb.hpp"
static void aes256EcbDecrypt (
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <256>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

aes256EcbDecrypt is ECB decryption mode with AES-256 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream to be decrypted, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 256 bits.
plaintextStrm Output decrypted block stream text, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.

aes128GcmEncrypt

#include "xf_security/gcm.hpp"
static void aes128GcmEncrypt (
    hls::stream <ap_uint <128>>& payloadStrm,
    hls::stream <ap_uint <128>>& cipherkeyStrm,
    hls::stream <ap_uint <96>>& IVStrm,
    hls::stream <ap_uint <128>>& AADStrm,
    hls::stream <ap_uint <64>>& lenAADStrm,
    hls::stream <ap_uint <64>>& lenPldStrm,
    hls::stream <bool>& endLenStrm,
    hls::stream <ap_uint <128>>& cipherStrm,
    hls::stream <ap_uint <64>>& lenCphStrm,
    hls::stream <ap_uint <128>>& tagStrm,
    hls::stream <bool>& endTagStrm
    )

aes128GcmEncrypt is GCM encryption mode with AES-128 single block cipher.

The algorithm reference is : “IEEE Standard for Authenticated Encryption with Length Expansion for Storage Devices” The implementation is modified for better performance.

Parameters:

payloadStrm Input block stream text to be encrypted.
cipherkeyStrm Input cipher key used in encryption.
IVStrm Initialization vector stream.
AADStrm Additional authenticated data stream.
lenAADStrm Length of additional authenticated data in bits.
lenPldStrm Length of payload in bits.
endLenStrm Flag to signal the end of the length streams.
cipherStrm Output encrypted block stream text.
lenCphStrm Length of cipher in bits.
tagStrm The MAC stream.
endTagStrm Flag to signal the end of the MAC stream.

aes128GcmDecrypt

#include "xf_security/gcm.hpp"
static void aes128GcmDecrypt (
    hls::stream <ap_uint <128>>& payloadStrm,
    hls::stream <ap_uint <128>>& cipherkeyStrm,
    hls::stream <ap_uint <96>>& IVStrm,
    hls::stream <ap_uint <128>>& AADStrm,
    hls::stream <ap_uint <64>>& lenAADStrm,
    hls::stream <ap_uint <64>>& lenPldStrm,
    hls::stream <bool>& endLenStrm,
    hls::stream <ap_uint <128>>& cipherStrm,
    hls::stream <ap_uint <64>>& lenCphStrm,
    hls::stream <ap_uint <128>>& tagStrm,
    hls::stream <bool>& endTagStrm
    )

aes128GcmDecrypt is GCM decryption mode with AES-128 single block cipher.

The algorithm reference is : “IEEE Standard for Authenticated Encryption with Length Expansion for Storage Devices” The implementation is modified for better performance.

Parameters:

payloadStrm Input block stream text to be decrypted.
cipherkeyStrm Input cipher key used in decryption.
IVStrm Initialization vector stream.
AADStrm Additional authenticated data stream.
lenAADStrm Length of additional authenticated data in bits.
lenPldStrm Length of payload in bits.
endLenStrm Flag to signal the end of the length streams.
cipherStrm Output decrypted block stream text.
lenCphStrm Length of cipher in bits.
tagStrm The MAC stream.
endTagStrm Flag to signal the end of the MAC stream.

aes192GcmEncrypt

#include "xf_security/gcm.hpp"
static void aes192GcmEncrypt (
    hls::stream <ap_uint <128>>& payloadStrm,
    hls::stream <ap_uint <192>>& cipherkeyStrm,
    hls::stream <ap_uint <96>>& IVStrm,
    hls::stream <ap_uint <128>>& AADStrm,
    hls::stream <ap_uint <64>>& lenAADStrm,
    hls::stream <ap_uint <64>>& lenPldStrm,
    hls::stream <bool>& endLenStrm,
    hls::stream <ap_uint <128>>& cipherStrm,
    hls::stream <ap_uint <64>>& lenCphStrm,
    hls::stream <ap_uint <128>>& tagStrm,
    hls::stream <bool>& endTagStrm
    )

aes192GcmEncrypt is GCM encryption mode with AES-192 single block cipher.

The algorithm reference is : “IEEE Standard for Authenticated Encryption with Length Expansion for Storage Devices” The implementation is modified for better performance.

Parameters:

payloadStrm Input block stream text to be encrypted.
cipherkeyStrm Input cipher key used in encryption.
IVStrm Initialization vector stream.
AADStrm Additional authenticated data stream.
lenAADStrm Length of additional authenticated data in bits.
lenPldStrm Length of payload in bits.
endLenStrm Flag to signal the end of the length streams.
cipherStrm Output encrypted block stream text.
lenCphStrm Length of cipher in bits.
tagStrm The MAC stream.
endTagStrm Flag to signal the end of the MAC stream.

aes192GcmDecrypt

#include "xf_security/gcm.hpp"
static void aes192GcmDecrypt (
    hls::stream <ap_uint <128>>& payloadStrm,
    hls::stream <ap_uint <192>>& cipherkeyStrm,
    hls::stream <ap_uint <96>>& IVStrm,
    hls::stream <ap_uint <128>>& AADStrm,
    hls::stream <ap_uint <64>>& lenAADStrm,
    hls::stream <ap_uint <64>>& lenPldStrm,
    hls::stream <bool>& endLenStrm,
    hls::stream <ap_uint <128>>& cipherStrm,
    hls::stream <ap_uint <64>>& lenCphStrm,
    hls::stream <ap_uint <128>>& tagStrm,
    hls::stream <bool>& endTagStrm
    )

aes192GcmDecrypt is GCM decryption mode with AES-192 single block cipher.

The algorithm reference is : “IEEE Standard for Authenticated Encryption with Length Expansion for Storage Devices” The implementation is modified for better performance.

Parameters:

payloadStrm Input block stream text to be decrypted.
cipherkeyStrm Input cipher key used in decryption.
IVStrm Initialization vector stream.
AADStrm Additional authenticated data stream.
lenAADStrm Length of additional authenticated data in bits.
lenPldStrm Length of payload in bits.
endLenStrm Flag to signal the end of the length streams.
cipherStrm Output decrypted block stream text.
lenCphStrm Length of cipher in bits.
tagStrm The MAC stream.
endTagStrm Flag to signal the end of the MAC stream.

aes256GcmEncrypt

#include "xf_security/gcm.hpp"
static void aes256GcmEncrypt (
    hls::stream <ap_uint <128>>& payloadStrm,
    hls::stream <ap_uint <256>>& cipherkeyStrm,
    hls::stream <ap_uint <96>>& IVStrm,
    hls::stream <ap_uint <128>>& AADStrm,
    hls::stream <ap_uint <64>>& lenAADStrm,
    hls::stream <ap_uint <64>>& lenPldStrm,
    hls::stream <bool>& endLenStrm,
    hls::stream <ap_uint <128>>& cipherStrm,
    hls::stream <ap_uint <64>>& lenCphStrm,
    hls::stream <ap_uint <128>>& tagStrm,
    hls::stream <bool>& endTagStrm
    )

aes256GcmEncrypt is GCM encryption mode with AES-256 single block cipher.

The algorithm reference is : “IEEE Standard for Authenticated Encryption with Length Expansion for Storage Devices” The implementation is modified for better performance.

Parameters:

payloadStrm Input block stream text to be encrypted.
cipherkeyStrm Input cipher key used in encryption.
IVStrm Initialization vector stream.
AADStrm Additional authenticated data stream.
lenAADStrm Length of additional authenticated data in bits.
lenPldStrm Length of payload in bits.
endLenStrm Flag to signal the end of the length streams.
cipherStrm Output encrypted block stream text.
lenCphStrm Length of cipher in bits.
tagStrm The MAC stream.
endTagStrm Flag to signal the end of the MAC stream.

aes256GcmDecrypt

#include "xf_security/gcm.hpp"
static void aes256GcmDecrypt (
    hls::stream <ap_uint <128>>& payloadStrm,
    hls::stream <ap_uint <256>>& cipherkeyStrm,
    hls::stream <ap_uint <96>>& IVStrm,
    hls::stream <ap_uint <128>>& AADStrm,
    hls::stream <ap_uint <64>>& lenAADStrm,
    hls::stream <ap_uint <64>>& lenPldStrm,
    hls::stream <bool>& endLenStrm,
    hls::stream <ap_uint <128>>& cipherStrm,
    hls::stream <ap_uint <64>>& lenCphStrm,
    hls::stream <ap_uint <128>>& tagStrm,
    hls::stream <bool>& endTagStrm
    )

aes256GcmDecrypt is GCM decryption mode with AES-2562 single block cipher.

The algorithm reference is : “IEEE Standard for Authenticated Encryption with Length Expansion for Storage Devices” The implementation is modified for better performance.

Parameters:

payloadStrm Input block stream text to be decrypted.
cipherkeyStrm Input cipher key used in decryption.
IVStrm Initialization vector stream.
AADStrm Additional authenticated data stream.
lenAADStrm Length of additional authenticated data in bits.
lenPldStrm Length of payload in bits.
endLenStrm Flag to signal the end of the length streams.
cipherStrm Output decrypted block stream text.
lenCphStrm Length of cipher in bits.
tagStrm The MAC stream.
endTagStrm Flag to signal the end of the MAC stream.

aes128Gmac

#include "xf_security/gmac.hpp"
void aes128Gmac (
    hls::stream <ap_uint <128>>& dataStrm,
    hls::stream <ap_uint <64>>& lenDataStrm,
    hls::stream <ap_uint <128>>& cipherkeyStrm,
    hls::stream <ap_uint <96>>& IVStrm,
    hls::stream <ap_uint <128>>& tagStrm
    )

GMAC using AES-128 block cipher.

Galois Message Authentication Code (GMAC) is a mechanism to provide data origin authentication.

Parameters:

dataStrm Input text stream to be authenticated.
lenDataStrm The length of the data in bits.
cipherkeyStrm Input cihperkey to calculate the hash subkey and E(K,Y0).
IVStrm Initialization vector.
tagStrm The MAC stream.

aes192Gmac

#include "xf_security/gmac.hpp"
void aes192Gmac (
    hls::stream <ap_uint <128>>& dataStrm,
    hls::stream <ap_uint <64>>& lenDataStrm,
    hls::stream <ap_uint <192>>& cipherkeyStrm,
    hls::stream <ap_uint <96>>& IVStrm,
    hls::stream <ap_uint <128>>& tagStrm
    )

GMAC using AES-192 block cipher.

Galois Message Authentication Code (GMAC) is a mechanism to provide data origin authentication.

Parameters:

dataStrm Input text stream to be authenticated.
lenDataStrm The length of the data in bits.
cipherkeyStrm Input cihperkey to calculate the hash subkey and E(K,Y0).
IVStrm Initialization vector.
tagStrm The MAC stream.

aes256Gmac

#include "xf_security/gmac.hpp"
void aes256Gmac (
    hls::stream <ap_uint <128>>& dataStrm,
    hls::stream <ap_uint <64>>& lenDataStrm,
    hls::stream <ap_uint <256>>& cipherkeyStrm,
    hls::stream <ap_uint <96>>& IVStrm,
    hls::stream <ap_uint <128>>& tagStrm
    )

GMAC using AES-256 block cipher.

Galois Message Authentication Code (GMAC) is a mechanism to provide data origin authentication.

Parameters:

dataStrm Input text stream to be authenticated.
lenDataStrm The length of the data in bits.
cipherkeyStrm Input cihperkey to calculate the hash subkey and E(K,Y0).
IVStrm Initialization vector.
tagStrm The MAC stream.

hmac

#include "xf_security/hmac.hpp"
template <
    int dataW,
    int lW,
    int hshW,
    int keyLen,
    int blockSize,
    template< int iW, int ilW, int oW > class F
    >
void hmac (
    hls::stream <ap_uint <dataW>>& keyStrm,
    hls::stream <ap_uint <dataW>>& msgStrm,
    hls::stream <ap_uint <lW>>& msgLenStrm,
    hls::stream <bool>& eLenStrm,
    hls::stream <ap_uint <hshW>>& hshStrm,
    hls::stream <bool>& eHshStrm
    )

Compute HMAC value according to specified hash function and input data.

keyW, keyStrm, keyLenStrm, msgW, msgStrm, and msgLenStrm would be used as parameters or input for the hash function, so they need to align with the API of the hash function.

Hash function is wrapped to a template struct which must have a static function named hash .

Take md5 for example:

template <int msgW, int lW, int hshW> struct md5_wrapper { static void hash(hls::stream<ap_uint<msgW> >& msgStrm, hls::stream<lW>& lenStrm, hls::stream<bool>& eLenStrm, hls::stream<ap_uint<hshW> >& hshStrm, hls::stream<bool>& eHshStrm) { xf::security::md5(msgStrm, lenStrm, eLenStrm, hshStrm, eHshStrm); } };

then use hmac like this,

xf::security::hmac<32, 32, 64, 128, 64, md5_wrapper> (…);

Parameters:

dataW the width of input stream keyStrm and msgStrm.
lW the with of input msgLenstrm.
blockSize the block size (in bytes) of the underlying hash function (e.g. 64 bytes for md5 and SHA-1).
hshW the width of output stream hshStrm.
keyLen lenght of key (in bytes)
F a wrapper of hash function which must have a static fucntion named hash .
keyStrm input key stream.
msgStrm input meassge stream.
msgLenStrm the length stream of input message stream.
eLenStrm the end flag of length stream.
hshStrm output stream.
eHshStrm end flag of output stream hshStrm.

md4

#include "xf_security/md4.hpp"
static void md4 (
    hls::stream <ap_uint <32>>& msg_strm,
    hls::stream <ap_uint <64>>& len_strm,
    hls::stream <bool>& end_len_strm,
    hls::stream <ap_uint <128>>& digest_strm,
    hls::stream <bool>& end_digest_strm
    )

Top function of MD4.

The algorithm reference is: “The MD4 Message-Digest Algorithm”.

Parameters:

msg_strm The message being hashed.
len_strm The message length in byte.
end_len_strm The flag to signal end of input message stream.
digest_strm The digest (fingerprint) stream.
end_digest_strm Flag to signal the end of the result.

md5

#include "xf_security/md5.hpp"
static void md5 (
    hls::stream <ap_uint <32>>& msg_strm,
    hls::stream <ap_uint <64>>& len_strm,
    hls::stream <bool>& end_len_strm,
    hls::stream <ap_uint <128>>& digest_strm,
    hls::stream <bool>& end_digest_strm
    )

Top function of MD5.

The algorithm reference is : “The MD5 Message-Digest Algorithm”.

Parameters:

msg_strm The message being hashed.
len_strm The message length in byte.
end_len_strm The flag to signal end of input message stream.
digest_strm The digest (fingerprint) stream.
end_digest_strm Flag to signal the end of the result.

desOfbEncrypt

#include "xf_security/ofb.hpp"
static void desOfbEncrypt (
    hls::stream <ap_uint <64>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <64>>& cipherkeyStrm,
    hls::stream <ap_uint <64>>& IVStrm,
    hls::stream <ap_uint <64>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

desOfbEncrypt is OFB encryption mode with DES single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each block is 64 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 64 bits for each key.
IVStrm Initialization vector for the fisrt iteration of DES encrypition, 64 bits.
ciphertextStrm Output encrypted block stream text, each block is 64 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

desOfbDecrypt

#include "xf_security/ofb.hpp"
static void desOfbDecrypt (
    hls::stream <ap_uint <64>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <64>>& cipherkeyStrm,
    hls::stream <ap_uint <64>>& IVStrm,
    hls::stream <ap_uint <64>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

desOfbDecrypt is OFB decryption mode with DES single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream to be decrypted, each block is 64 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 64 bits for each key.
IVStrm Initialization vector for the fisrt iteration of DES decrypition, 64 bits.
plaintextStrm Output decrypted block stream text, each block is 64 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.

aes128OfbEncrypt

#include "xf_security/ofb.hpp"
static void aes128OfbEncrypt (
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <128>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

aes128OfbEncrypt is OFB encryption mode with AES-128 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 128 bits.
IVStrm Initialization vector for the fisrt iteration of AES encrypition, 128 bits.
ciphertextStrm Output encrypted block stream text, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

aes128OfbDecrypt

#include "xf_security/ofb.hpp"
static void aes128OfbDecrypt (
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <128>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

aes128OfbDecrypt is OFB decryption mode with AES-128 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream to be decrypted, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 128 bits.
IVStrm Initialization vector for the fisrt iteration of AES decrypition, 128 bits.
plaintextStrm Output decrypted block stream text, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.

aes192OfbEncrypt

#include "xf_security/ofb.hpp"
static void aes192OfbEncrypt (
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <192>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

aes192OfbEncrypt is OFB encryption mode with AES-192 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 192 bits.
IVStrm Initialization vector for the fisrt iteration of AES encrypition, 128 bits.
ciphertextStrm Output encrypted block stream text, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

aes192OfbDecrypt

#include "xf_security/ofb.hpp"
static void aes192OfbDecrypt (
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <192>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

aes192OfbDecrypt is OFB decryption mode with AES-192 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream to be decrypted, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 192 bits.
IVStrm Initialization vector for the fisrt iteration of AES decrypition, 128 bits.
plaintextStrm Output decrypted block stream text, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.

aes256OfbEncrypt

#include "xf_security/ofb.hpp"
static void aes256OfbEncrypt (
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <256>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

aes256OfbEncrypt is OFB encryption mode with AES-256 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

plaintextStrm Input block stream text to be encrypted, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
cipherkeyStrm Input cipher key used in encryption, 256 bits.
IVStrm Initialization vector for the fisrt iteration of AES encrypition, 128 bits.
ciphertextStrm Output encrypted block stream text, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.

aes256OfbDecrypt

#include "xf_security/ofb.hpp"
static void aes256OfbDecrypt (
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <256>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

aes256OfbDecrypt is OFB decryption mode with AES-256 single block cipher.

The algorithm reference is : “Recommendation for Block Cipher Modes of Operation - Methods and Techniques” The implementation is modified for better performance.

Parameters:

ciphertextStrm Input block stream to be decrypted, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
cipherkeyStrm Input cipher key used in decryption, 256 bits.
IVStrm Initialization vector for the fisrt iteration of AES decrypition, 128 bits.
plaintextStrm Output decrypted block stream text, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.

poly1305

#include "xf_security/poly1305.hpp"
void poly1305 (
    hls::stream <ap_uint <256>>& keyStrm,
    hls::stream <ap_uint <128>>& payloadStrm,
    hls::stream <ap_uint <64>>& lenPldStrm,
    hls::stream <bool>& endLenStrm,
    hls::stream <ap_uint <128>>& tagStrm
    )

The poly1305 takes a 32-byte one-time key and a message and produces a 16-byte tag. This tag is used to authenticate the message.

Parameters:

keyStrm Corresponding message key
payloadStrm For a massage, input block stream text, 128 bits per block, less than 128 bits, high padding 0
lenPldStrm Length of a massage in byte.
endLenStrm Flag to signal the end of the length streams.
tagStrm Return a 16-byte tag to to authenticate the message.

poly1305MultiChan

#include "xf_security/poly1305.hpp"
template <int N>
void poly1305MultiChan (
    hls::stream <ap_uint <256>>& keyStrm,
    hls::stream <ap_uint <128>>& payloadStrm,
    hls::stream <ap_uint <64>>& lenPldStrm,
    hls::stream <bool>& endLenStrm,
    hls::stream <ap_uint <128>>& tagStrm
    )

The poly1305MultiChan takes N 32-byte one-time keys and N messages and produces N 16-byte tags. These tags are used to authenticate the corresponding messages.

Parameters:

N Channel number
keyStrm Corresponding message key
payloadStrm For a massage, input block stream text, 128 bits per block, less than 128 bits, high padding 0
lenPldStrm Length of a massage in byte.
endLenStrm Flag to signal the end of the length streams.
tagStrm Return a 16-byte tag to to authenticate the message.

rc4

#include "xf_security/rc4.hpp"
static void rc4 (
    hls::stream <ap_uint <8>>& keyStrm,
    hls::stream <bool>& eKeyStrm,
    hls::stream <ap_uint <8>>& plainStream,
    hls::stream <bool>& ePlainStream,
    hls::stream <ap_uint <8>>& cipherStream,
    hls::stream <bool>& eCipherStream
    )

Rc_4 is the basic function for stream ciphering keyLength defined as the number of bytes in the key and can be in the range 1<= keylength <=256, typically between 5 and 16, corresponding to a key length of 40-128 bits.

Parameters:

keyStrm initail key
eKeyStrm end flag of keyStrm
plaintStrm input plain text to be encrypted
ePlaintStrm the end flag of plaintStrm
cipherStrm output encrypted text
eCipherStrm the end flag of cipherStrm

sha1

#include "xf_security/sha1.hpp"
template <unsigned int w>
void sha1 (
    hls::stream <ap_uint <w>>& msg_strm,
    hls::stream <ap_uint <64>>& len_strm,
    hls::stream <bool>& end_len_strm,
    hls::stream <ap_uint <5*w>>& digest_strm,
    hls::stream <bool>& end_digest_strm
    )

Top function of SHA-1.

The algorithm reference is : “Secure Hash Standard”, which published by NIST in February 2012. The implementation dataflows the pre-processing part and message digest part.

Parameters:

w The bit width of each input message word, default value is 32.
msg_strm The message being hashed.
len_strm The message length in byte.
end_len_strm The flag to signal end of input message stream.
digest_strm Output digest stream.
end_digest_strm End flag for output digest stream.

sha224

#include "xf_security/sha224_256.hpp"
template <int m_width>
void sha224 (
    hls::stream <ap_uint <m_width>>& msg_strm,
    hls::stream <ap_uint <64>>& len_strm,
    hls::stream <bool>& end_len_strm,
    hls::stream <ap_uint <224>>& hash_strm,
    hls::stream <bool>& end_hash_strm
    )

SHA-224 algorithm with ap_uint stream input and output.

Parameters:

m_width the input message stream width, currently only 32 allowed.
msg_strm the message being hashed.
len_strm the length message being hashed.
end_len_strm the flag for end of message length input.
hash_strm the result.
end_hash_strm the flag for end of hash output.

sha256

#include "xf_security/sha224_256.hpp"
template <int m_width>
void sha256 (
    hls::stream <ap_uint <m_width>>& msg_strm,
    hls::stream <ap_uint <64>>& len_strm,
    hls::stream <bool>& end_len_strm,
    hls::stream <ap_uint <256>>& hash_strm,
    hls::stream <bool>& end_hash_strm
    )

SHA-256 algorithm with ap_uint stream input and output.

Parameters:

m_width the input message stream width, currently only 32 allowed.
msg_strm the message being hashed.
len_strm the length message being hashed.
end_len_strm the flag for end of message length input.
hash_strm the result.
end_hash_strm the flag for end of hash output.

sha3_224

#include "xf_security/sha3.hpp"
static void sha3_224 (
    hls::stream <ap_uint <64>>& msgStrm,
    hls::stream <ap_uint <128>>& msgLenStrm,
    hls::stream <bool>& endMsgLenStrm,
    hls::stream <ap_uint <224>>& digestStrm,
    hls::stream <bool>& endDigestStrm
    )

Top function of SHA3-224.

The algorithm reference is : “SHA-3 Standard : Permutation-Based Hash and Extendable-Output Functions”.

Parameters:

msgStrm The message being hashed.
msgLenStrm Message length in byte.
endMsgLenStrm The flag to signal end of input message stream.
digestStrm Output digest stream.
endDigestStrm End flag for output digest stream.

sha3_256

#include "xf_security/sha3.hpp"
static void sha3_256 (
    hls::stream <ap_uint <64>>& msgStrm,
    hls::stream <ap_uint <128>>& msgLenStrm,
    hls::stream <bool>& endMsgLenStrm,
    hls::stream <ap_uint <256>>& digestStrm,
    hls::stream <bool>& endDigestStrm
    )

Top function of SHA3-256.

The algorithm reference is : “SHA-3 Standard : Permutation-Based Hash and Extendable-Output Functions”.

Parameters:

msgStrm The message being hashed.
msgLenStrm Message length in byte.
endMsgLenStrm The flag to signal end of input message stream.
digestStrm Output digest stream.
endDigestStrm End flag for output digest stream.

sha3_384

#include "xf_security/sha3.hpp"
static void sha3_384 (
    hls::stream <ap_uint <64>>& msgStrm,
    hls::stream <ap_uint <128>>& msgLenStrm,
    hls::stream <bool>& endMsgLenStrm,
    hls::stream <ap_uint <384>>& digestStrm,
    hls::stream <bool>& endDigestStrm
    )

Top function of SHA3-384.

The algorithm reference is : “SHA-3 Standard : Permutation-Based Hash and Extendable-Output Functions”.

Parameters:

msgStrm The message being hashed.
msgLenStrm Message length in byte.
endMsgLenStrm The flag to signal end of input message stream.
digestStrm Output digest stream.
endDigestStrm End flag for output digest stream.

sha3_512

#include "xf_security/sha3.hpp"
static void sha3_512 (
    hls::stream <ap_uint <64>>& msgStrm,
    hls::stream <ap_uint <128>>& msgLenStrm,
    hls::stream <bool>& endMsgLenStrm,
    hls::stream <ap_uint <512>>& digestStrm,
    hls::stream <bool>& endDigestStrm
    )

Top function of SHA3-512.

The algorithm reference is : “SHA-3 Standard : Permutation-Based Hash and Extendable-Output Functions”.

Parameters:

msgStrm The message being hashed.
msgLenStrm Message length in byte.
endMsgLenStrm The flag to signal end of input message stream.
digestStrm Output digest stream.
endDigestStrm End flag for output digest stream.

shake128

#include "xf_security/sha3.hpp"
static void shake128 (
    hls::stream <ap_uint <64>>& msgStrm,
    hls::stream <ap_uint <128>>& msgLenStrm,
    hls::stream <bool>& endMsgLenStrm,
    hls::stream <ap_uint <128>>& digestStrm,
    hls::stream <bool>& endDigestStrm
    )

Top function of SHAKE-128.

The algorithm reference is : “SHA-3 Standard : Permutation-Based Hash and Extendable-Output Functions”.

Parameters:

msgStrm The message being hashed.
msgLenStrm Message length in byte.
endMsgLenStrm The flag to signal end of input message stream.
digestStrm Output digest stream.
endDigestStrm End flag for output digest stream.

shake256

#include "xf_security/sha3.hpp"
static void shake256 (
    hls::stream <ap_uint <64>>& msgStrm,
    hls::stream <ap_uint <128>>& msgLenStrm,
    hls::stream <bool>& endMsgLenStrm,
    hls::stream <ap_uint <256>>& digestStrm,
    hls::stream <bool>& endDigestStrm
    )

Top function of SHAKE-256.

The algorithm reference is : “SHA-3 Standard : Permutation-Based Hash and Extendable-Output Functions”.

Parameters:

msgStrm The message being hashed.
msgLenStrm Message length in byte.
endMsgLenStrm The flag to signal end of input message stream.
digestStrm Output digest stream.
endDigestStrm End flag for output digest stream.

sha384

#include "xf_security/sha512_t.hpp"
template <unsigned int w>
void sha384 (
    hls::stream <ap_uint <w>>& msg_strm,
    hls::stream <ap_uint <128>>& len_strm,
    hls::stream <bool>& end_len_strm,
    hls::stream <ap_uint <384>>& digest_strm,
    hls::stream <bool>& end_digest_strm
    )

SHA-384 algorithm with stream input and output.

The algorithm reference is : “Secure Hash Standard”, which published by NIST in February 2012. The implementation dataflows the pre-processing part and message digest part.

Parameters:

w The bit width of each input message word, default value is 64.
msg_strm The message being hashed.
len_strm The message length in byte.
end_len_strm The flag to signal end of input message stream.
digest_strm Output digest stream.
end_digest_strm End flag for output digest stream.

sha512

#include "xf_security/sha512_t.hpp"
template <unsigned int w>
void sha512 (
    hls::stream <ap_uint <w>>& msg_strm,
    hls::stream <ap_uint <128>>& len_strm,
    hls::stream <bool>& end_len_strm,
    hls::stream <ap_uint <512>>& digest_strm,
    hls::stream <bool>& end_digest_strm
    )

SHA-512 algorithm with stream input and output.

The algorithm reference is : “Secure Hash Standard”, which published by NIST in February 2012. The implementation dataflows the pre-processing part and message digest part.

Parameters:

w The bit width of each input message word, default value is 64.
msg_strm The message being hashed.
len_strm The message length in byte.
end_len_strm The flag to signal end of input message stream.
digest_strm Output digest stream.
end_digest_strm End flag for output digest stream.

sha512_t

#include "xf_security/sha512_t.hpp"
template <
    unsigned int w,
    unsigned int t
    >
void sha512_t (
    hls::stream <ap_uint <w>>& msg_strm,
    hls::stream <ap_uint <128>>& len_strm,
    hls::stream <bool>& end_len_strm,
    hls::stream <ap_uint <t>>& digest_strm,
    hls::stream <bool>& end_digest_strm
    )

SHA-512/t algorithm with stream input and output.

The algorithm reference is : “Secure Hash Standard”, which published by NIST in February 2012. The implementation dataflows the pre-processing part and message digest part.

Parameters:

w The bit width of each input message word, default value is 64.
t The bit width of the digest which depends on specific algorithm, typically is 224 or 256.
msg_strm The message being hashed.
len_strm The message length in byte.
end_len_strm The flag to signal end of input message stream.
digest_strm Output digest stream.
end_digest_strm End flag for output digest stream.

sm3

#include "xf_security/sm234.hpp"
void sm3 (
    hls::stream <ap_uint <64>>& msgStrm,
    hls::stream <ap_uint <64>>& lenStrm,
    hls::stream <bool>& endLenStrm,
    hls::stream <ap_uint <256>>& hashStrm,
    hls::stream <bool>& endHashStrm
    )

SM3 function to genrate digest value for input messages.

Parameters:

msgStrm Stream to input messages to be signed.
lenStrm Stream to input length of input messages.
endLenStrm Stream of end flag of lenStrm.
hashStrm Stream to output digests of messges.
endHashStrm Stream of end flag of hashStrm.

evaluate

#include "xf_security/vdf.hpp"
template <
    int L,
    int N
    >
void evaluate (
    ap_uint <L> g,
    ap_uint <L> l,
    ap_uint <L> modulus,
    ap_uint <L> r2Mod,
    ap_uint <N> t,
    ap_uint <L>& y,
    ap_uint <L>& pi
    )

evaluate evalute function of verifiable delay function

Parameters:

L bit width
N bit width
g is the base element given as input to the VDF evaluator
l is a random prime
modulus is a security parameter
r2Mod Pre-calculated Montgomery parameter
t is a time bound
y is output of evaluate
pi is a proof

verifyWesolowski

#include "xf_security/vdf.hpp"
template <
    int L,
    int N
    >
bool verifyWesolowski (
    ap_uint <L> g,
    ap_uint <L> l,
    ap_uint <L> modulus,
    ap_uint <L> r2Mod,
    ap_uint <L> tMod,
    ap_uint <N> t,
    ap_uint <L> y,
    ap_uint <L>& pi
    )

verifyWesolowski verify function of verifiable delay function

Parameters:

L bit width
N bit width
g is the base element given as input to the VDF evaluator
l is a random prime
modulus is a security parameter
r2Mod Pre-calculated Montgomery parameter
tMod is a time bound’s Pre-calculation value
t is a time bound
y is output of evaluate
pi is a proof

verifyPietrzak

#include "xf_security/vdf.hpp"
template <
    int L,
    int N
    >
bool verifyPietrzak (
    ap_uint <L> g,
    ap_uint <L> modulus,
    ap_uint <L> r2Mod,
    ap_uint <N> T,
    ap_uint <L> y
    )

verifyPietrzak verify function of verifiable delay function, its algorithm: if T is even, return (N, x, T/2, y) = (N, x^(r+2^(T/2)), T/2, x^(r*2^(T/2)+2^T)), if T is odd, return (N, x, (T+1)/2, y) = (N, x^(r+2^((T-1)/2)), T/2, x^(r*2^((T+1)/2)+2^T))

Parameters:

L bit width
N bit width
g is the base element given as input to the VDF evaluator
modulus is a security parameter
r2Mod Pre-calculated Montgomery parameter
T is a time bound
y is output of evaluate

aes128XtsEncrypt

#include "xf_security/xts.hpp"
static void aes128XtsEncrypt (
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <64>>& lenStrm,
    hls::stream <ap_uint <128>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

aes128XtsEncrypt is XTS encryption mode with AES-128 single block cipher.

The algorithm reference is : “IEEE Standard for Cryptographic Protection of Data on Block-Oriented Storage Devices” The implementation is optimized for better performance in FPGA.

Parameters:

plaintextStrm Input block stream text to be encrypted, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
lenStrm Total length of plaintext in bit, 64 bits.
cipherkeyStrm Input two cipher key used in encryption, 128 bits.
IVStrm Initialization vector for the fisrt iteration of AES encrypition, 128 bits.
ciphertextStrm Output encrypted block stream text, 128 bits.
endCiphertextStrm End flag of stream ciphertext, 1 bit.

aes128XtsDecrypt

#include "xf_security/xts.hpp"
static void aes128XtsDecrypt (
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <64>>& lenStrm,
    hls::stream <ap_uint <128>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

aes128XtsDecrypt is XTS decryption mode with AES-128 single block cipher.

The algorithm reference is : “IEEE Standard for Cryptographic Protection of Data on Block-Oriented Storage Devices” The implementation is optimized for better performance in FPGA.

Parameters:

ciphertextStrm Input block stream text to be decrypted, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
lenStrm Total length of plaintext in bit, 64 bits.
cipherkeyStrm Input two cipher key used in decryption, 128 bits.
IVStrm Initialization vector for the fisrt iteration of AES encrypition, 128 bits.
plaintextStrm Output decrypted block stream text, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.

aes256XtsEncrypt

#include "xf_security/xts.hpp"
static void aes256XtsEncrypt (
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm,
    hls::stream <ap_uint <64>>& lenStrm,
    hls::stream <ap_uint <256>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm
    )

aes256XtsEncrypt is XTS encryption mode with AES-256 single block cipher.

The algorithm reference is : “IEEE Standard for Cryptographic Protection of Data on Block-Oriented Storage Devices” The implementation is optimized for better performance in FPGA.

Parameters:

plaintextStrm Input block stream text to be encrypted, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.
lenStrm Total length of plaintext in bit, 64 bits.
cipherkeyStrm Input two cipher key used in encryption, 256 bits.
IVStrm Initialization vector for the fisrt iteration of AES encrypition, 128 bits.
ciphertextStrm Output encrypted block stream text, 128 bits.
endCiphertextStrm End flag of stream ciphertext, 1 bit.

aes256XtsDecrypt

#include "xf_security/xts.hpp"
static void aes256XtsDecrypt (
    hls::stream <ap_uint <128>>& ciphertextStrm,
    hls::stream <bool>& endCiphertextStrm,
    hls::stream <ap_uint <64>>& lenStrm,
    hls::stream <ap_uint <256>>& cipherkeyStrm,
    hls::stream <ap_uint <128>>& IVStrm,
    hls::stream <ap_uint <128>>& plaintextStrm,
    hls::stream <bool>& endPlaintextStrm
    )

aes256XtsDecrypt is XTS decryption mode with AES-256 single block cipher.

The algorithm reference is : “IEEE Standard for Cryptographic Protection of Data on Block-Oriented Storage Devices” The implementation is optimized for better performance in FPGA.

Parameters:

ciphertextStrm Input block stream text to be decrypted, each block is 128 bits.
endCiphertextStrm End flag of block stream ciphertext, 1 bit.
lenStrm Total length of plaintext in bit, 64 bits.
cipherkeyStrm Input two cipher key used in decryption, 256 bits.
IVStrm Initialization vector for the fisrt iteration of AES encrypition, 128 bits.
plaintextStrm Output decrypted block stream text, each block is 128 bits.
endPlaintextStrm End flag of block stream plaintext, 1 bit.