![]() |
TSDuck v3.46-4930
MPEG Transport Stream Toolkit
|
#include <tsIDSA.h>


Public Member Functions | |
| IDSA () | |
| Default constructor. | |
| virtual | ~IDSA () override |
| Destructor. | |
| size_t | blockSize () const |
| int | cipherId () const |
| const ByteBlock & | currentIV () const |
| const ByteBlock & | currentKey () const |
| bool | decrypt (const void *cipher, size_t cipher_length, void *plain, size_t plain_maxsize, size_t *plain_length=nullptr) |
| size_t | decryptionCount () const |
| size_t | decryptionMax () const |
| bool | encrypt (const void *plain, size_t plain_length, void *cipher, size_t cipher_maxsize, size_t *cipher_length=nullptr) |
| size_t | encryptionCount () const |
| size_t | encryptionMax () const |
| bool | hasChainingMode () const |
| bool | hasKey () const |
| virtual bool | isValidIVSize (size_t size) const |
| virtual bool | isValidKeySize (size_t size) const |
| size_t | maxIVSize () const |
| size_t | maxKeySize () const |
| size_t | minIVSize () const |
| size_t | minKeySize () const |
| size_t | minMessageSize () const |
| UString | name () const |
| bool | residueAllowed () const |
| void | setAlertHandler (BlockCipherAlertInterface *handler) |
| void | setCipherId (int id) |
| void | setDecryptionMax (size_t count) |
| void | setEncryptionMax (size_t count) |
| bool | setIV (const ByteBlock &iv) |
| bool | setIV (const void *iv, size_t iv_length) |
| bool | setKey (const ByteBlock &key) |
| bool | setKey (const ByteBlock &key, const ByteBlock &iv) |
| bool | setKey (const void *key, size_t key_length, const void *iv=nullptr, size_t iv_length=0) |
| bool | setShortIV (const void *iv_data, size_t iv_length) |
Static Public Attributes | |
| static constexpr size_t | BLOCK_SIZE = 16 |
| AES-128 block size in bytes. | |
| static constexpr size_t | KEY_SIZE = 16 |
| AES-128 key size in bytes. | |
| static constexpr size_t | UNLIMITED = std::numeric_limits<size_t>::max() |
Protected Member Functions | |
| void | canProcessInPlace (bool can_do) |
| virtual bool | decryptImpl (const void *cipher, size_t cipher_length, void *plain, size_t plain_maxsize, size_t *plain_length) |
| virtual bool | encryptImpl (const void *plain, size_t plain_length, void *cipher, size_t cipher_maxsize, size_t *cipher_length) |
| virtual void | getAlgorithm (::BCRYPT_ALG_HANDLE &algo, size_t &length, bool &ignore_iv) const override |
| virtual const EVP_CIPHER * | getAlgorithm () const |
| virtual bool | setKeyImpl () |
Static Protected Member Functions | |
| static const BlockCipherProperties & | Properties () |
Protected Attributes | |
| const BlockCipherProperties & | properties |
| ByteBlock | work {} |
| Temporary working buffer. | |
ATIS-0800006 AES-based TS packet encryption (ATIS-IDSA).
|
staticprotected |
Properties of this algorithm.
|
inherited |
Set a new initialization vector for short blocks. The method setIV() sets the IV for long blocks (longer than the block size) and short blocks (shorter than the block size). The latter can then be overwritten using setShortIV().
| [in] | iv_data | Address of initialization vector for short blocks. |
| [in] | iv_length | IV length in bytes. |
|
overrideprotectedvirtualinherited |
Get the algorithm handle and subobject size, when the subclass uses Microsoft BCrypt library.
| [out] | algo | Handle to hash algorithm. |
| [out] | length | Length in bytes of the subobject to allocate. |
| [out] | ignore_iv | The IV shall not be passed to BCrypt. |
Reimplemented from ts::BlockCipher.
|
protectedvirtualinherited |
Get the EVP for the cipher algorithm, when the subclass uses OpenSSL.
|
inherited |
Algorithm name (informational only).
|
inlineinherited |
Size in bytes of the block used by the algorithm.
|
inlineinherited |
Minimum key sizes in bytes.
|
inlineinherited |
Maximum key sizes in bytes.
|
virtualinherited |
Check if a size in bytes is a valid key size.
| [in] | size | Suggested key size in bytes. |
|
virtualinherited |
Check if a size in bytes is a valid initialization vector size.
| [in] | size | Suggested IV size in bytes. |
|
inlineinherited |
Check if this object is a base encryption algorithm (one block) or includes a chaining mode.
|
inlineinherited |
Get the minimum initialization vector sizes in bytes.
|
inlineinherited |
Get the maximum initialization vector sizes in bytes.
|
inlineinherited |
Get the minimum message size. Shorter data cannot be ciphered in this mode.
|
inlineinherited |
Check if the chaining mode can process residue after the last multiple of the block size.
|
inherited |
Schedule a new key and optional initialization vector.
| [in] | key | Address of key value. |
| [in] | key_length | Key length in bytes. |
| [in] | iv | Address of IV value (for chaining mode only). If null and an IV is already set, continue to use it. |
| [in] | iv_length | IV length in bytes (for chaining mode only). |
|
inlineinherited |
Schedule a new key.
| [in] | key | Key value. |
Schedule a new key and initialization vector.
| [in] | key | Key value. |
| [in] | iv | IV value (for chaining mode only). |
|
inherited |
Set a new initialization vector without changing the key, or before setting the key. Note that if you need to set the key and IV, it is usually much more efficient to do it in one call instead of two (and not only because of te two calls).
| [in] | iv | Address of IV value (for chaining mode only). |
| [in] | iv_length | IV length in bytes (for chaining mode only). |
|
inlineinherited |
Set a new initialization vector without changing the key, or before setting the key. Note that if you need to set the key and IV, it is usually much more efficient to do it in one call instead of two (and not only because of te two calls).
| [in] | iv | IV value (for chaining mode only). |
|
inlineinherited |
Check if a current key is present and valid.
|
inlineinherited |
Get the current key.
|
inlineinherited |
Get the current initialization vector.
|
inherited |
Encrypt data.
For pure block ciphers such as AES or DES, the plain text and cipher text must have the block size of the algorithm. For cipher chainings, the acceptable message sizes depend on the chaining mode.
Plain and cipher buffers may be identical (start at the same location). If they don't start at the same address, they may not overlap.
| [in] | plain | Address of plain text. |
| [in] | plain_length | Plain text length in bytes. |
| [out] | cipher | Address of buffer for cipher text. |
| [in] | cipher_maxsize | Size of cipher buffer. |
| [out] | cipher_length | Returned actual size of cipher text. Ignored if zero. |
|
inherited |
Decrypt data.
For pure block ciphers such as AES or DES, the plain text and cipher text must have the block size of the algorithm. For cipher chainings, the acceptable message sizes depend on the chaining mode.
Plain and cipher buffers may be identical (start at the same location). If they don't start at the same address, they may not overlap.
| [in] | cipher | Address of cipher text. |
| [in] | cipher_length | Cipher text length in bytes. |
| [out] | plain | Address of buffer for plain text. |
| [in] | plain_maxsize | Size of plain buffer. |
| [out] | plain_length | Returned actual size of plain text. Ignored if zero. |
|
inlineinherited |
Get the number of times the current key was used for encryption.
|
inlineinherited |
Get the number of times the current key was used for decryption.
|
inlineinherited |
Set the maximum number of times a key should be used for encryption. The default initial value is UNLIMITED.
| [in] | count | The maximum number of times a key should be used for encryption. |
|
inlineinherited |
Set the maximum number of times a key should be used for decryption. The default initial value is UNLIMITED.
| [in] | count | The maximum number of times a key should be used for decryption. |
|
inlineinherited |
Get the maximum number of times a key should be used for encryption.
|
inlineinherited |
Get the maximum number of times a key should be used for decryption.
|
inlineinherited |
Set the handler to be notified on alert. Only one handler can be set at a time.
| [in] | handler | Handler to set. Use a null pointer to remove the handler. |
|
inlineinherited |
Set some arbitrary "cipher id" value. This value is chosen and set by the application and can be retrieved later. The cipher id is not interpreted by the block cipher engine, it is only stored for the application. The initial value of a cipher id is zero.
| [in] | id | Application-defined cipher id to assign. |
|
inlineinherited |
Get the "cipher id" value, as previously stored by the application.
|
protectedvirtualinherited |
Schedule a new key and optional initialization vector (implementation of algorithm-specific part). Must be implemented by the subclass if it does not use the system-provided cryptographic library.
Reimplemented in ts::DVBCSA2.
|
protectedvirtualinherited |
Encrypt one block of data (implementation of algorithm-specific part). Must be implemented by the subclass if it does not use the system-provided cryptographic library.
| [in] | plain | Address of plain text. |
| [in] | plain_length | Plain text length in bytes. |
| [out] | cipher | Address of buffer for cipher text. |
| [in] | cipher_maxsize | Size of cipher buffer. |
| [out] | cipher_length | Returned actual size of cipher text. Ignored if zero. |
Reimplemented in ts::DVBCSA2.
|
protectedvirtualinherited |
Decrypt one block of data (implementation of algorithm-specific part). Must be implemented by the subclass if it does not use the system-provided cryptographic library.
| [in] | cipher | Address of cipher text. |
| [in] | cipher_length | Cipher text length in bytes. |
| [out] | plain | Address of buffer for plain text. |
| [in] | plain_maxsize | Size of plain buffer. |
| [out] | plain_length | Returned actual size of plain text. Ignored if zero. |
Reimplemented in ts::DVBCSA2.
|
inlineprotectedinherited |
Inform the superclass that the subclass can encrypt and decrypt in place (identical in/out buffers). Typically called by a subclass in constructor.
| [in] | can_do | If true, encrypt and decrypt in place is possible. |
|
staticconstexprinherited |
A constant meaning "may use a key an unlimited number of times".
|
protectedinherited |
Properties for this block cipher object instance. Accessible to subclasses, but constant.