eric6.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
object
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
-
state to be changed (bytearray)
- roundKey
-
key to be used for the modification (bytearray)
- Returns:
-
modified state (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
-
state to be worked on (bytearray)
- expandedKey
-
expanded key to be used (bytearray)
- nbrRounds
-
number of rounds to be done (integer)
- Returns:
-
modified state (bytearray)
AES.__aes_invRound
__aes_invRound(state, roundKey)
Private method to apply the 4 operations of the inverse round in
sequence.
- state
-
state to be worked on (bytearray)
- roundKey
-
round key to be used (bytearray)
- Returns:
-
modified state (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
-
state to be worked on (bytearray)
- expandedKey
-
expanded key to be used (bytearray)
- nbrRounds
-
number of rounds to be done (integer)
- Returns:
-
modified state (bytearray)
AES.__aes_round
__aes_round(state, roundKey)
Private method to apply the 4 operations of the forward round in
sequence.
- state
-
state to be worked on (bytearray)
- roundKey
-
round key to be used (bytearray)
- Returns:
-
modified state (bytearray)
AES.__core
__core(data, iteration)
Private method performing the key schedule core operation.
- data
-
data to operate on (bytearray)
- iteration
-
iteration counter (integer)
- Returns:
-
modified data (bytearray)
AES.__createRoundKey
__createRoundKey(expandedKey, roundKeyPointer)
Private method to create a round key.
- expandedKey
-
expanded key to be used (bytearray)
- roundKeyPointer
-
position within the expanded key (integer)
- Returns:
-
round key (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
-
key to be expanded (bytes or bytearray)
- size
-
size of the key in bytes (16, 24 or 32)
- expandedKeySize
-
size of the expanded key (integer)
- Returns:
-
expanded key (bytearray)
AES.__galois_multiplication
__galois_multiplication(a, b)
Private method to perform a Galois multiplication of 8 bit characters
a and b.
- a
-
first factor (byte)
- b
-
second factor (byte)
- Returns:
-
result (byte)
AES.__getRconValue
__getRconValue(num)
Private method to retrieve a given Rcon value.
- num
-
position of the value (integer)
- Returns:
-
Rcon value (integer)
AES.__getSBoxInvert
__getSBoxInvert(num)
Private method to retrieve a given Inverted S-Box value.
- num
-
position of the value (integer)
- Returns:
-
value of the Inverted S-Box (integer)
AES.__getSBoxValue
__getSBoxValue(num)
Private method to retrieve a given S-Box value.
- num
-
position of the value (integer)
- Returns:
-
value of the S-Box (integer)
AES.__mixColumn
__mixColumn(column, isInv)
Private method to perform a galois multiplication of 1 column the
4x4 matrix.
- column
-
column to be worked on (bytearray)
- isInv
-
flag indicating an inverse operation (boolean)
- Returns:
-
modified column (bytearray)
AES.__mixColumns
__mixColumns(state, isInv)
Private method to perform a galois multiplication of the 4x4 matrix.
- state
-
state to be worked on (bytearray)
- isInv
-
flag indicating an inverse operation (boolean)
- Returns:
-
modified state (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
-
data of size 4 (bytearray)
- Returns:
-
rotated data (bytearray)
AES.__shiftRow
__shiftRow(state, statePointer, nbr, isInv)
Private method to shift the bytes of a row to the left.
- state
-
state to be worked on (bytearray)
- statePointer
-
index into the state (integer)
- nbr
-
number of positions to shift (integer)
- isInv
-
flag indicating an inverse operation (boolean)
- Returns:
-
modified state (bytearray)
AES.__shiftRows
__shiftRows(state, isInv)
Private method to iterate over the 4 rows and call __shiftRow() with
that row.
- state
-
state to be worked on (bytearray)
- isInv
-
flag indicating an inverse operation (boolean)
- Returns:
-
modified state (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
-
state to be worked on (bytearray)
- isInv
-
flag indicating an inverse operation (boolean)
- Returns:
-
modified state (bytearray)
AES.decrypt
decrypt(iput, key, size)
Public method to decrypt a 128 bit input block against the given key
of size specified.
- iput
-
input data (bytearray)
- key
-
key to be used (bytes or bytearray)
- size
-
key size (16, 24 or 32)
- Returns:
-
decrypted data (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
-
input data (bytearray)
- key
-
key to be used (bytes or bytearray)
- size
-
key size (16, 24 or 32)
- Returns:
-
encrypted data (bytes)
- Raises ValueError:
-
key size is invalid
AESModeOfOperation
Class implementing the different AES mode of operations.
Derived from
object
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
-
input data (bytes)
- start
-
start index (integer)
- end
-
end index (integer)
- mode
-
mode of operation (0, 1, 2)
- Returns:
-
extracted bytes (bytearray)
AESModeOfOperation.decrypt
decrypt(cipherIn, originalsize, mode, key, size, IV)
Public method to perform the decryption operation.
- cipherIn
-
data to be decrypted (bytes)
- originalsize
-
unencrypted string length (required for CBC)
(integer)
- mode
-
mode of operation (0, 1 or 2)
- key
-
key to be used (bytes)
- size
-
length of the key (16, 24 or 32)
- IV
-
initialisation vector (bytearray)
- Returns:
-
decrypted data (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
-
data to be encrypted (bytes)
- mode
-
mode of operation (0, 1 or 2)
- key
-
key to be used (bytes)
- size
-
length of the key (16, 24 or 32)
- IV
-
initialisation vector (bytearray)
- Returns:
-
tuple with mode of operation, length of the input data and
the encrypted data (integer, integer, 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
-
data to be padded (bytes)
- Returns:
-
padded data (bytes)
decryptData
decryptData(key, data, mode=AESModeOfOperation.ModeOfOperation["CBC"])
Module function to decrypt the given data with the given key.
- key
-
key to be used for decryption (bytes)
- data
-
data to be decrypted (with initialization vector prepended)
(bytes)
- mode
-
mode of operations (0, 1 or 2)
- Returns:
-
decrypted data (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
-
key to be used for encryption (bytes)
- data
-
data to be encrypted (bytes)
- mode
-
mode of operations (0, 1 or 2)
- Returns:
-
encrypted data prepended with the initialization vector (bytes)
- Raises ValueError:
-
raised to indicate an invalid key size
strip_PKCS7_padding
strip_PKCS7_padding(b)
Function to strip off PKCS7 padding.
- b
-
data to be stripped (bytes)
- Returns:
-
stripped data (bytes)
- Raises ValueError:
-
data padding is invalid