/* * encrypt(keySize,password,original_message,encrypted_message, mode, padding, * initialVector) - encrypts a message using AES Algorithm * * Parameters: * keySize : Size of key to use in AES Algorithm * password: Key to encrypt plaintext message. * original_message: Plaintext message before calculating AES Algorithm * encrypted_message: Ciphertext message after calculating AES Algorithm * mode: cipher mode, CBC * padding: padding mode to fill blocks, tree ways PKCS5, ZEROS, X923 * initialVector: * * Examples: * AES.encrypt(128,"libelium","Libelium",encrypted_message,CBC,PKCS5,IV) * */ uint8_t WaspAES::encrypt(uint16_t keySize,char* password,char original_message[],uint8_t* encrypted_message,uint8_t mode,uint8_t padding,uint8_t* initialVector){ // Variables declaration uint16_t size; size = sizeOfBlocks(original_message); uint8_t original_data[size]; if (init(password,keySize)){ // Convert original message to uint8_t format for (uint16_t i = 0; i < strlen(original_message); i++){ original_data[i] = original_message[i]; } if (strlen(original_message) < size ) { // Se necesita rellenar el bloque paddingEncrypt(original_data,size,strlen(original_message),padding); } if (mode == CBC){ CBCEncrypt(original_data,size,initialVector,keySize); } // Convert original_data to char format for (uint16_t i=0; i < size+1;i++){ encrypted_message[i] = original_data[i]; } return 1; }else{ return 0; } }
/* * encrypt(keySize,password,original_message,encrypted_message, mode, padding) * - encrypts a message using AES Algorithm * * Parameters: * keySize : Size of key to use in AES Algorithm * password: Key to encrypt plaintext message. * original_message: Plaintext message before calculating AES Algorithm * encrypted_message: Ciphertext message after calculating AES Algorithm * mode: cipher mode, two ways: ECB * padding: padding mode to fill blocks, tree ways PKCS5, ZEROS, X923 * * Examples: * AES.encrypt(128,"libelium","Libelium",encrypted_message,ECB,PKCS5) * */ uint8_t WaspAES::encrypt(uint16_t KeySize,char* Password,char original_message[],uint8_t* encrypted_message,uint8_t mode,uint8_t padding){ // Varibales Declaration uint16_t size; size = sizeOfBlocks(original_message); uint8_t original_data[size]; if (init(Password,KeySize)){ // convert to uint8_t for (uint16_t i = 0; i < strlen(original_message); i++){ original_data[i] = original_message[i]; } // Padding the block?? if (strlen(original_message) < size ) { paddingEncrypt(original_data,size,strlen(original_message),padding); } if (mode == ECB){ ECBEncrypt(original_data,size,KeySize); } // convert to char for (uint16_t i=0; i < size+1;i++){ encrypted_message[i] = original_data[i]; } return 1; }else{ return 0; } }
/* * encrypt(keySize,password,original_message,encrypted_message, mode, padding) * - encrypts a message using AES Algorithm * * Parameters: * keySize : Size of key to use in AES Algorithm * password: Key to encrypt plaintext message. * original_message: Plaintext message before calculating AES Algorithm * encrypted_message: Ciphertext message after calculating AES Algorithm * mode: cipher mode, two ways: ECB * padding: padding mode to fill blocks, tree ways PKCS5, ZEROS, X923 * * Examples: * AES.encrypt(128,"libelium","Libelium",encrypted_message,ECB,PKCS5) * */ uint8_t WaspAES::encrypt( uint16_t keySize, char* password, uint8_t* original_message, uint16_t length, uint8_t* encrypted_message, uint8_t mode, uint8_t padding) { // Calculate length in Bytes of the encrypted message // depending on the size of the original message uint16_t size; size = sizeOfBlocks(length); uint8_t original_data[size]; // init the password and create the round keys which are // stored in the proper context attribute if (init(password,keySize)) { // convert to uint8_t for (uint16_t i = 0; i < length; i++) { original_data[i] = original_message[i]; } // Padding the block if the length is less than the proper size if ( length < size ) { paddingEncrypt( original_data, size, length, padding); } if (mode == ECB) { ECBEncrypt( original_data, size, keySize); } // copy result for (uint16_t i=0; i < size;i++) { encrypted_message[i] = original_data[i]; } return 1; } else { return 0; } }
/* * encrypt(keySize,password,original_message,encrypted_message, mode, padding, * initialVector) - encrypts a message using AES Algorithm * * Parameters: * keySize : Size of key to use in AES Algorithm * password: Key to encrypt plaintext message. * original_message: Plaintext message before calculating AES Algorithm * encrypted_message: Ciphertext message after calculating AES Algorithm * mode: cipher mode, CBC * padding: padding mode to fill blocks, tree ways PKCS5, ZEROS, X923 * initialVector: * */ uint8_t WaspAES::encrypt( uint16_t keySize, char* password, uint8_t* original_message, uint16_t length, uint8_t* encrypted_message, uint8_t mode, uint8_t padding, uint8_t* initialVector) { // Calculate length in Bytes of the encrypted message // depending on the size of the original message uint16_t size; size = sizeOfBlocks(length); uint8_t original_data[size]; if ( init(password,keySize) ) { // Convert original message to uint8_t format for (uint16_t i = 0; i < length; i++) { original_data[i] = original_message[i]; } if ( length < size ) { // Se necesita rellenar el bloque paddingEncrypt( original_data, size, length, padding); } if (mode == CBC) { CBCEncrypt(original_data,size,initialVector,keySize); } // Copy result for (uint16_t i=0; i < size;i++) { encrypted_message[i] = original_data[i]; } return 1; } else { return 0; } }
/* sizeOfBlocks * * Calculate length in Bytes of the encrypted message. This is calculated thanks * to the original message in 'message'. * */ uint8_t WaspAES::sizeOfBlocks(char* message) { uint16_t length; length = strlen(message); return sizeOfBlocks(length); }