In this tutorial, we are going to build a data type that represents a Latin string in FHE while implementing the to_lower
and to_upper
functions.
The allowed characters in a Latin string are:
Uppercase letters: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Lowercase letters: a b c d e f g h i j k l m n o p q r s t u v w x y z
For the code point of the letters, we will use the ascii
codes. In ascii:
The uppercase letters are in the range [65, 90]
The lowercase letters are in the range [97, 122]
lower_case
= upper_case
+ 32 <=> upper_case
= lower_case
- 32
For this type, we will use the FheUint8
type.
Our type will hold the encrypted characters as a Vec<FheUint8>
, as well as the encrypted constant 32
to implement our functions that change the case.
In the FheLatinString::encrypt
function, we have to make a bit of data validation:
The input string can only contain ascii letters (no digit, no special characters)
The input string cannot mix lower and upper case letters
These two points are to work around a limitation of FHE, which is that we cannot create branches, meaning our function cannot use conditional statements. For example, we can not check if the 'char' is a letter and uppercase to modify it to lowercase, like in the example below.
With these preconditions checked, implementing to_lower
and to_upper
is rather simple.
As we will be using the FheUint8
type, the integers
feature must be activated: