Exemple #1
0
static int aes_crypt_cfb128_wrap( void *ctx, mbedtls_operation_t operation,
        size_t length, size_t *iv_off, unsigned char *iv,
        const unsigned char *input, unsigned char *output )
{
    return mbedtls_aes_crypt_cfb128( (mbedtls_aes_context *) ctx, operation, length, iv_off, iv,
                             input, output );
}
Exemple #2
0
int blufi_aes_decrypt(uint8_t iv8, uint8_t *crypt_data, int crypt_len)
{
    int ret;
    size_t iv_offset = 0;
    uint8_t iv0[16];

    memcpy(iv0, blufi_sec->iv, sizeof(blufi_sec->iv));
    iv0[0] = iv8;   /* set iv8 as the iv0[0] */

    ret = mbedtls_aes_crypt_cfb128(&blufi_sec->aes, MBEDTLS_AES_DECRYPT, crypt_len, &iv_offset, iv0, crypt_data, crypt_data);
    if (ret) {
        return -1;
    }

    return crypt_len;
}
Exemple #3
0
	int AESContext::cryptCFB128(State & state, mbedtls_aes_context * context){
		Stack * stack = state.stack;
		if (stack->is<LUA_TNUMBER>(1) && stack->is<LUA_TNUMBER>(2) && stack->is<LUA_TSTRING>(3) && stack->is<LUA_TSTRING>(4)){
			std::string ivStr = stack->toLString(3);
			std::string input = stack->toLString(4);
			int length = input.length();

			if (((length % 16) == 0) && (ivStr.length() == 16)){
				int mode = stack->to<int>(1);
				size_t ivOff = stack->to<int>(2);

				unsigned char iv[16];
				unsigned char * output = new unsigned char[length];
				memcpy(iv, ivStr.c_str(), 16);

				int result = mbedtls_aes_crypt_cfb128(context, mode, length, &ivOff, iv, reinterpret_cast<const unsigned char *>(input.c_str()), output);
				if (result == 0){
					stack->push<int>(ivOff);
					stack->pushLString(std::string(reinterpret_cast<char*>(iv), 16));
					stack->pushLString(std::string(reinterpret_cast<char*>(output), length));
					delete[] output;
					return 3;
				}
				else{
					stack->push<int>(result);
					delete[] output;
					return 1;
				}
			}
			else{
				stack->push<bool>(false);
				return 1;
			}
		}
		return 0;
	}