in Python/Encrypt credentials/Encryption sample/helper/asymmetric1024keyencryptionhelper.py [0:0]
def encrypt(self, plain_text_bytes, modulus_bytes, exponent_bytes):
''' Encrypts the message with RSA, MGF and SHA hashes
Args:
plain_text_bytes (bytes): Message to be encrypted
modulus_bytes (bytes): Modulus bytes returned from GET gateway API
exponent_bytes (bytes): Exponent bytes returned from GET gateway API
Returns:
String: Encrypted credentials
'''
# Split the message into different segments, each segment's length is 60. So the result may be 60, 60, 60, ...
has_incomplete_segment = len(
plain_text_bytes) % self.SEGMENT_LENGTH != 0
# Number of segments plain text bytes is sliced into
segment_number = (len(plain_text_bytes) / self.SEGMENT_LENGTH) if not has_incomplete_segment else (
(len(plain_text_bytes) / self.SEGMENT_LENGTH) + 1)
# Convert to integer
segment_number = int(segment_number)
# Create a byte array for encrypted bytes
encrypted_bytes = bytearray(
[0] * (segment_number * self.ENCRYPTED_LENGTH))
# For loop to run the encryption
for i in range(0, segment_number):
length_to_copy = None
if i == segment_number - 1 and has_incomplete_segment:
length_to_copy = len(plain_text_bytes) % self.SEGMENT_LENGTH
else:
length_to_copy = self.SEGMENT_LENGTH
# Initialize segment byte array
segment = bytearray([0] * length_to_copy)
# Copy the array from src to dest array
for k in range(length_to_copy):
segment[k] = plain_text_bytes[k + (i * self.SEGMENT_LENGTH)]
# Result of encryption
segment_encrypted_result = self.encrypt_segment(
modulus_bytes, exponent_bytes, segment)
for j in range(0, len(segment_encrypted_result)):
encrypted_bytes[(i * self.ENCRYPTED_LENGTH) +
j] = segment_encrypted_result[j]
# Returns the decoded string message
return base64.b64encode(encrypted_bytes).decode()