eric7.Utilities.crypto.py3AES
Module implementing classes for encryption according
Advanced Encryption Standard.
Global Attributes
Classes
AES |
Class implementing the Advanced Encryption Standard algorithm. |
AESModeOfOperation |
Class implementing the different AES mode of operations. |
Functions
AES
Class implementing the Advanced Encryption Standard algorithm.
Derived from
None
Class Attributes
Class Methods
Methods
__addRoundKey |
Private method to add (XORs) the round key to the state. |
__aes_invMain |
Private method to do the inverse AES encryption for one round. |
__aes_invRound |
Private method to apply the 4 operations of the inverse round in sequence. |
__aes_main |
Private method to do the AES encryption for one round. |
__aes_round |
Private method to apply the 4 operations of the forward round in sequence. |
__core |
Private method performing the key schedule core operation. |
__createRoundKey |
Private method to create a round key. |
__expandKey |
Private method performing Rijndael's key expansion. |
__galois_multiplication |
Private method to perform a Galois multiplication of 8 bit characters a and b. |
__getRconValue |
Private method to retrieve a given Rcon value. |
__getSBoxInvert |
Private method to retrieve a given Inverted S-Box value. |
__getSBoxValue |
Private method to retrieve a given S-Box value. |
__mixColumn |
Private method to perform a galois multiplication of 1 column the 4x4 matrix. |
__mixColumns |
Private method to perform a galois multiplication of the 4x4 matrix. |
__rotate |
Private method performing Rijndael's key schedule rotate operation. |
__shiftRow |
Private method to shift the bytes of a row to the left. |
__shiftRows |
Private method to iterate over the 4 rows and call __shiftRow() with that row. |
__subBytes |
Private method to substitute all the values from the state with the value in the SBox using the state value as index for the SBox. |
decrypt |
Public method to decrypt a 128 bit input block against the given key of size specified. |
encrypt |
Public method to encrypt a 128 bit input block against the given key of size specified. |
Static Methods
AES.__addRoundKey
__addRoundKey(state, roundKey)
Private method to add (XORs) the round key to the state.
- state (bytearray)
-
state to be changed
- roundKey (bytearray)
-
key to be used for the modification
- Return:
-
modified state
- Return Type:
-
bytearray
AES.__aes_invMain
__aes_invMain(state, expandedKey, nbrRounds)
Private method to do the inverse AES encryption for one round.
Perform the initial operations, the standard round, and the
final operations of the inverse AES, creating a round key for
each round.
- state (bytearray)
-
state to be worked on
- expandedKey (bytearray)
-
expanded key to be used
- nbrRounds (int)
-
number of rounds to be done
- Return:
-
modified state
- Return Type:
-
bytearray
AES.__aes_invRound
__aes_invRound(state, roundKey)
Private method to apply the 4 operations of the inverse round in
sequence.
- state (bytearray)
-
state to be worked on
- roundKey (bytearray)
-
round key to be used
- Return:
-
modified state
- Return Type:
-
bytearray
AES.__aes_main
__aes_main(state, expandedKey, nbrRounds)
Private method to do the AES encryption for one round.
Perform the initial operations, the standard round, and the
final operations of the forward AES, creating a round key for
each round.
- state (bytearray)
-
state to be worked on
- expandedKey (bytearray)
-
expanded key to be used
- nbrRounds (int)
-
number of rounds to be done
- Return:
-
modified state
- Return Type:
-
bytearray
AES.__aes_round
__aes_round(state, roundKey)
Private method to apply the 4 operations of the forward round in
sequence.
- state (bytearray)
-
state to be worked on
- roundKey (bytearray)
-
round key to be used
- Return:
-
modified state
- Return Type:
-
bytearray
AES.__core
__core(data, iteration)
Private method performing the key schedule core operation.
- data (bytearray)
-
data to operate on
- iteration (int)
-
iteration counter
- Return:
-
modified data
- Return Type:
-
bytearray
AES.__createRoundKey
__createRoundKey(expandedKey, roundKeyPointer)
Private method to create a round key.
- expandedKey (bytearray)
-
expanded key to be used
- roundKeyPointer (int)
-
position within the expanded key
- Return:
-
round key
- Return Type:
-
bytearray
AES.__expandKey
__expandKey(key, size, expandedKeySize)
Private method performing Rijndael's key expansion.
Expands a 128, 192 or 256 bit key into a 176, 208 or 240 bit key.
- key (bytes or bytearray)
-
key to be expanded
- size (int)
-
size of the key in bytes (16, 24 or 32)
- expandedKeySize (int)
-
size of the expanded key
- Return:
-
expanded key
- Return Type:
-
bytearray
AES.__galois_multiplication
__galois_multiplication(a, b)
Private method to perform a Galois multiplication of 8 bit characters
a and b.
- a (bytes)
-
first factor
- b (bytes)
-
second factor
- Return:
-
result
- Return Type:
-
bytes
AES.__getRconValue
__getRconValue(num)
Private method to retrieve a given Rcon value.
- num (int)
-
position of the value
- Return:
-
Rcon value
- Return Type:
-
int
AES.__getSBoxInvert
__getSBoxInvert(num)
Private method to retrieve a given Inverted S-Box value.
- num (int)
-
position of the value
- Return:
-
value of the Inverted S-Box
- Return Type:
-
int
AES.__getSBoxValue
__getSBoxValue(num)
Private method to retrieve a given S-Box value.
- num (int)
-
position of the value
- Return:
-
value of the S-Box
- Return Type:
-
int
AES.__mixColumn
__mixColumn(column, isInv)
Private method to perform a galois multiplication of 1 column the
4x4 matrix.
- column (bytearray)
-
column to be worked on
- isInv (bool)
-
flag indicating an inverse operation
- Return:
-
modified column
- Return Type:
-
bytearray
AES.__mixColumns
__mixColumns(state, isInv)
Private method to perform a galois multiplication of the 4x4 matrix.
- state (bytearray)
-
state to be worked on
- isInv (bool)
-
flag indicating an inverse operation
- Return:
-
modified state
- Return Type:
-
bytearray
AES.__rotate
__rotate(data)
Private method performing Rijndael's key schedule rotate operation.
Rotate the data word eight bits to the left: eg,
rotate(1d2c3a4f) == 2c3a4f1d.
- data (bytearray)
-
data of size 4
- Return:
-
rotated data
- Return Type:
-
bytearray
AES.__shiftRow
__shiftRow(state, statePointer, nbr, isInv)
Private method to shift the bytes of a row to the left.
- state (bytearray)
-
state to be worked on
- statePointer (int)
-
index into the state
- nbr (int)
-
number of positions to shift
- isInv (bool)
-
flag indicating an inverse operation
- Return:
-
modified state
- Return Type:
-
bytearray
AES.__shiftRows
__shiftRows(state, isInv)
Private method to iterate over the 4 rows and call __shiftRow() with
that row.
- state (bytearray)
-
state to be worked on
- isInv (bool)
-
flag indicating an inverse operation
- Return:
-
modified state
- Return Type:
-
bytearray
AES.__subBytes
__subBytes(state, isInv)
Private method to substitute all the values from the state with the
value in the SBox using the state value as index for the SBox.
- state (bytearray)
-
state to be worked on
- isInv (bool)
-
flag indicating an inverse operation
- Return:
-
modified state
- Return Type:
-
bytearray
AES.decrypt
decrypt(iput, key, size)
Public method to decrypt a 128 bit input block against the given key
of size specified.
- iput (bytearray)
-
input data
- key (bytes or bytearray)
-
key to be used
- size (int)
-
key size (16, 24 or 32)
- Return:
-
decrypted data
- Return Type:
-
bytes
- Raises ValueError:
-
key size is invalid
AES.encrypt
encrypt(iput, key, size)
Public method to encrypt a 128 bit input block against the given key
of size specified.
- iput (bytearray)
-
input data
- key (bytes or bytearray)
-
key to be used
- size (int)
-
key size (16, 24 or 32)
- Return:
-
encrypted data
- Return Type:
-
bytes
- Raises ValueError:
-
key size is invalid
AESModeOfOperation
Class implementing the different AES mode of operations.
Derived from
None
Class Attributes
Class Methods
Methods
__extractBytes |
Private method to extract a range of bytes from the input. |
decrypt |
Public method to perform the decryption operation. |
encrypt |
Public method to perform the encryption operation. |
Static Methods
AESModeOfOperation.__extractBytes
__extractBytes(inputData, start, end, mode)
Private method to extract a range of bytes from the input.
- inputData (bytes)
-
input data
- start (int)
-
start index
- end (int)
-
end index
- mode (int)
-
mode of operation (0, 1, 2)
- Return:
-
extracted bytes
- Return Type:
-
bytearray
AESModeOfOperation.decrypt
decrypt(cipherIn, originalsize, mode, key, size, IV)
Public method to perform the decryption operation.
- cipherIn (bytes)
-
data to be decrypted
- originalsize (int)
-
unencrypted string length (required for CBC)
- mode (int)
-
mode of operation (0, 1 or 2)
- key (bytes)
-
key to be used
- size (int)
-
length of the key (16, 24 or 32)
- IV (bytearray)
-
initialisation vector
- Return:
-
decrypted data
- Return Type:
-
bytes
- Raises ValueError:
-
key size is invalid or decrypted data is invalid
AESModeOfOperation.encrypt
encrypt(inputData, mode, key, size, IV)
Public method to perform the encryption operation.
- inputData (bytes)
-
data to be encrypted
- mode (int)
-
mode of operation (0, 1 or 2)
- key (bytes)
-
key to be used
- size (int)
-
length of the key (16, 24 or 32)
- IV (bytearray)
-
initialisation vector
- Return:
-
tuple with mode of operation, length of the input data and
the encrypted data
- Return Type:
-
tuple of (int, int, bytes)
- Raises ValueError:
-
key size is invalid or decrypted data is invalid
append_PKCS7_padding
append_PKCS7_padding(b)
Function to pad the given data to a multiple of 16-bytes by PKCS7 padding.
- b (bytes)
-
data to be padded
- Return:
-
padded data
- Return Type:
-
bytes
decryptData
decryptData(key, data, mode=AESModeOfOperation.ModeOfOperation["CBC"])
Module function to decrypt the given data with the given key.
- key (bytes)
-
key to be used for decryption
- data (bytes)
-
data to be decrypted (with initialization vector prepended)
- mode (int)
-
mode of operations (0, 1 or 2)
- Return:
-
decrypted data
- Return Type:
-
bytes
- Raises ValueError:
-
raised to indicate an invalid key size
encryptData
encryptData(key, data, mode=AESModeOfOperation.ModeOfOperation["CBC"])
Module function to encrypt the given data with the given key.
- key (bytes)
-
key to be used for encryption
- data (bytes)
-
data to be encrypted
- mode (int)
-
mode of operations (0, 1 or 2)
- Return:
-
encrypted data prepended with the initialization vector
- Return Type:
-
bytes
- Raises ValueError:
-
raised to indicate an invalid key size
strip_PKCS7_padding
strip_PKCS7_padding(b)
Function to strip off PKCS7 padding.
- b (bytes)
-
data to be stripped
- Return:
-
stripped data
- Return Type:
-
bytes
- Raises ValueError:
-
data padding is invalid