This application claims priority to European Application No. 17187751.7 dated Aug. 24, 2017, the disclosure of which is incorporated herein by reference in its entirety.
The present disclosure relates generally to data communication and storage. More specifically, this disclosure relates to cryptographic methods and systems that allow for encoding and decoding of data, the encryption being performed so as to prevent unauthorized access to, or modification of the encoded data.
Data encryption is known that uses streaming ciphers, block ciphers or one time pads. Streaming and block ciphers are widely used even though they are not mathematically provable to be 100% secure. These can use asymmetric (or public key) cryptography. The keys are typically of a fixed size and may be static. A calculation is done one each side to encrypt or decrypt the data. In a typical public key scenario, a sender uses the public key of a public-key and private-key pair to encrypt a message. The receiver uses the corresponding private key to decrypt the message. Security is provided because it is generally computationally infeasible to derive the private key from the public key.
One-time pad (OTP) is a symmetric encryption using a key having the same size as a plaintext message to encrypt. The encryption of the message is performed by combining each plaintext symbol with a respective key symbol, a key symbol being never used twice. Because the key is the same size as the plaintext, every possible plaintext is equally likely and it is difficult for an attacker to tell when the correct decryption has been derived. Some streaming ciphers attempt to approximate a pseudo One Time Pad operation. In such scenarios, the transmitter and receiver independently but synchronously generate the same key. Because the keys are calculated and therefore not truly random, they are insecure and they can sometimes be cracked but may provide adequate security depending on the context and cryptographic algorithms used.
Even in systems that are still considered as secure now, history has shown exploits will be found over time. Accordingly further improvements are desirable.
A method is disclosed for encoding data, comprising generating a data structure defining a Boolean circuit comprising a memory storing original data, circuit inputs, circuit outputs, logic gates, and wires interconnecting the circuit inputs, the logic gates and the circuit outputs, the memory comprising for each bit of the original data, a memory cell comprising a logic gate performing a logic operation depending on a value of the bit, the Boolean circuit being configured to receive input data for selecting and reading a memory cell in the memory, and to provide a binary data defining a value of a bit read in the selected memory cell and address data defining a position of the bit in the original data, the generation of the data structure comprising: generating a valid data representing each binary state of each of the wires of the Boolean circuit, and computing for each logic gate of the Boolean circuit, truth table values as a function of the valid data of the wires connected to the inputs of the logic gate, the valid data of the wire connected to the output of the logic gate and the logic operation performed by the logic gate.
Another method is disclosed for decoding data comprising: reading a data structure defining a Boolean circuit comprising a memory storing original data, circuit inputs, circuit outputs, logic gates, and wires interconnecting the circuit inputs, the logic gates and the circuit outputs, the memory comprising for each bit of the original data, a memory cell comprising a logic gate performing a logic operation depending on a value of the bit, the data structure comprising a valid data representing each binary state of each of the inputs of the Boolean circuit, and for each logic gate of the Boolean circuit, truth table values depending on the operation performed by the logic gate, and executing the Boolean circuit for combinations of valid data of the inputs of the Boolean circuit, each execution of the Boolean circuit comprising applying valid input data to the circuit inputs to select and read one of the memory cells in the memory, and computing output values of each gate of the Boolean circuit from the truth table values of the logic gate and the values of the wires connected to the inputs of the logic gate, each execution of the Boolean circuit providing a binary data defining a value of a bit read in the selected memory cell and address data defining a position of the bit in the original data.
According to an embodiment, each bit of the original data is computed from binary data stored in several of the memory cells.
According to an embodiment, each of the memory cells of the software component comprises a logic gate having an input inverted or not, depending on the bit value stored by the memory cell.
According to an embodiment, the Boolean circuit comprises an address converting circuit configured to provide the address data of the bit as a function of circuit inputs provided to the Boolean circuit.
According to an embodiment, the Boolean circuit is configured to select and read several memory cells simultaneously, and to provide binary data defining values of bits read in the selected memory cells and one address data.
According to an embodiment, the circuit inputs comprise: selection signal inputs, each memory cell being connected to a single selection signal input, or address signals inputs, the Boolean circuit comprising an address decoding circuit providing selection signals as a function of signals applied to the address signals inputs, each memory cell receiving a single selection signal.
According to an embodiment, the Boolean circuit comprises an interconnection matrix randomly defined, the interconnection matrix connecting: inputs of the Boolean circuit to memory cells of the Boolean circuit such that the bit values stored in the memory are randomly distributed in the memory, the number of read signal inputs being randomly defined, and/or two gate layers of the Boolean circuit.
According to an embodiment, the encoding or decoding method further comprises applying a computation to the data and to the address data, provided by one execution of the Boolean circuit, to obtain a bit value of the original data and the position of the bit value in the original data.
According to an embodiment, computing output values of each logic gate of the Boolean circuit involves a secret key.
Embodiments may also relate to a computing device for encoding data, configured to generate a data structure defining a Boolean circuit comprising a memory storing original data, circuit inputs, circuit outputs, logic gates, and wires interconnecting the circuit inputs, the logic gates and the circuit outputs, the memory comprising for each bit of the original data, a memory cell comprising a logic gate performing a logic operation depending on a value of the bit, the Boolean circuit being configured to receive input data for selecting and reading a memory cell in the memory, and to provide a binary data defining a value of a bit read in the selected memory cell and address data defining a position of the bit in the original data, the generation of the data structure comprising: generating a valid data representing each binary state of each of the wires of the Boolean circuit, and computing for each logic gate of the Boolean circuit, truth table values as a function of the valid data of the wires connected to the inputs of the logic gate, the valid data of the wire connected to the output of the logic gate and the logic operation performed by the logic gate.
According to an embodiment, the computing device is configured to encode data by implementing the previously defined encoding method.
Embodiments may also relate to a computing device for decoding data, configured to: read a data structure defining a Boolean circuit comprising a memory storing original data, circuit inputs, circuit outputs, logic gates, and wires interconnecting the circuit inputs, the logic gates and the circuit outputs, the memory comprising for each bit of the original data, a memory cell comprising a logic gate performing a logic operation depending on a value of the bit, the data structure comprising a valid data representing each binary state of each of the inputs of the Boolean circuit, and for each logic gate of the Boolean circuit, truth table values depending on the operation performed by the logic gate, and execute the Boolean circuit for combinations of valid data of the inputs of the Boolean circuit, each execution of the Boolean circuit comprising applying valid input data to the circuit inputs to select and read one of the memory cells in the memory, and computing output values of each gate of the Boolean circuit from the truth table values of the logic gate and the values of the wires connected to the inputs of the logic gate, each execution of the Boolean circuit providing a binary data defining a value of a bit read in the selected memory cell and address data defining a position of the bit in the original data.
According to an embodiment, the computing device is configured to decode data by implementing the previously defined decoding method.
Embodiments may also relate to a computer program product loadable into a computer memory and comprising code portions which, when carried out by a computer, configure the computer to carry out the previously defined encoding or decoding method.
Examples of the method and/or device may be better understood with reference to the following drawings and description, presented for illustration purposes only. Non-limiting and non-exhaustive descriptions are described with the following drawings.
In the figures, like referenced signs may refer to like parts throughout the different figures unless otherwise specified.
In view of the drawbacks of current approaches noted above, there is a need for data encoding approaches that do not rely only on an encryption key, and that can have an easily adjustable security level.
The terminal UT can further comprise a secure element SE, such as a secure processor that can be standalone or embedded into a smartcard UICC. The secure processor SE can be for example a SIM (“Subscriber Identity Module”) card, providing an access to a cellular network. The secure processor SE can include an NFC (“Near Field Communication”) circuit to communicate with a contactless reader. The NFC circuit can be embedded into a SIM card (SIM-NFC) or UICC, or in a SoC (“System on Chip”) circuit, or in an external memory card, for example an “SD card”. The circuits NIT can include a mobile telecommunication circuit giving access to a mobile cellular network and/or to the Internet network, through the cellular network, and/or a wireless communication circuit (Wi-Fi™, Bluetooth™, . . . ), and/or any other wired or wireless connection circuit that can be linked to a data transmission network such as Internet.
According to an embodiment, original data are encoded in the form of a data structure describing a Boolean circuit and input data thereof. The Boolean circuit is encrypted as a garbled circuit. The Boolean circuit has a topology in the form of a finite directed acyclic graph. Accordingly, it comprises logic gates arranged in layers that can be executed sequentially, the inputs of the gates in one of the layers of the Boolean circuit being connected to outputs of gates of a previous layer or to inputs of the Boolean circuit, and the outputs of the Boolean circuit being connected to outputs of logic gates of the Boolean circuit. The gates in one layer can be executed sequentially or in parallel.
The memory MEM can further include an interconnection matrix XM1 connected between the inputs SLi, RDj of the memory MEM and the memory plane MP. The interconnection matrix XM1 randomly distributes the selection signals SLi and the read signals RDj to the memory cells MCi, such that each selection signal SLi is provided to a single memory cell MCi, but that some of the read signals RDj can be provided to several memory cells of the memory plane MP. Thanks to the use of the interconnection matrix XM1, the selection signal SLi is not necessarily input to a memory cell MCi of a same rank i, but can be provided to any memory cell MCk with k different from i. Each of the read signals RDj can be provided to one or more of the memory cells MCi in the memory plane MP of any ranks i. Therefore the number s of read signals RDj provided to the memory plane MP is comprised between 2 (for the two binary states) and 2n. As a result, the data pieces of the original data stored in the memory MEM can be randomly distributed in the memory cells MCi.
According to another example, the read signal inputs RDj of the Boolean circuit GC can be combined together by logic gates which output read signals applied to the memory cells MCi. Therefore, the number s of read signals RDj provided to the Boolean circuit can be greater than the number of memory cells MCi in the memory plane MP.
Other types of logic gates can be used instead of AND gates for the memory cells MCi. In one example, the memory cells can include a logic NAND gate with the input of the read signal RD inverted or not depending on the binary data stored by the memory cell. In another example, the memory cells can also include a logic OR or NOR gate with the input of the read signal RD inverted or not depending on the binary data stored by the memory cell. The output value of a memory MC cell can be also at 0 for storing a 1, provided that the output of the memory cell is connected to an inverted input of the or gate OG. The memory cells can also have their selection signal input SL inverted.
In addition, all the memory cells of the memory plane MP do not have necessarily the same types such as the ones disclosed in
According to an example, the circuit ACV can be implemented as a garbled circuit realizing one or more rounds of an AES encryption (Advanced Encryption Standard).
According to another example, the circuit ACV can be implemented as the memory MEM1 of
According to another example, the circuit GC can be configured to provide for one address EADx points of a Gaussian curve or values EV that are used to compute a histogram, the data piece value corresponding to the highest computed value the Gaussian curve or to the value having the highest occurrence number in the histogram.
According to an embodiment, the input values SLi/ADi, RDj, and the output values of each logic gate of the circuit GC, each representing a binary state 0 or 1, are defined by numbers of several bits, for example 16, 32, 64 or 128 bits. In this way, each input and output of a gate within the circuit GC has only two valid values, and all the other possible values, when considering the size in bits of these values, are invalid. When the circuit GC is generated, the two valid values of each input SLi, ADi, RDj, of the circuit GC are randomly chosen, provided that the least significant bit of the two valid values are different, these least significant bits being used, when computing the output value of each of the logic gates of the circuit GC, to select one value in the truth GTT[k] table of the logic gate.
The table NBGL defines a number of gates in each layer.
The truth table GTT[k] of each logic gate k, comprises four values TT00, TT01, TT10, TT11, each corresponding to a combination (0, 0), (0, 1), (1, 0), (1, 1) of binary states of the input values of the logic gate. The topology of the circuit GC may be defined in the table GTW, by numbering each wire of the circuit, i.e. each input wire of the circuit GC from 1 to (n+s) and each output of the logic gates from (n+s+1) to (n+s+g), and by associating to each logic gate one record in the table GTW comprising two wire numbers IN1, IN2 of the two inputs of the gate and one wire number ON to the output of the gate. The wire numbers of the outputs of the circuit GC are numbered from (n+s+g−p+1) to (n+s+g).
According to an embodiment, the table RDLB contains both valid values RDV1, RSV2 of each of the input signals RDi, corresponding to the binary states 0 and 1. Each value RDV1, RDV2 can be equal with a same probability to either one or the other of the two valid values of the input signals RDi corresponding respectively to the binary states 0 and 1. In a same way, the table ADLB contains both valid values ADV1, ADV2 of each of the input values ADi (or SLi), corresponding to the logical states 0 and 1. The presence of the two valid values RDV1, RDV2 or ADV1, ADV2, of the inputs RDj, ADi does not reduce the security related to the confidentiality of the encoded data, since the correspondence between each random input value RDV1, RDV2 or ADV1, ADV2, and a binary value 0 or 1 thereof is randomly selected and thus cannot be determined easily.
According to an embodiment, each value in the tables RDLB, ADLB, GTT is encoded by a 128-bit word, and each record of the table GTW is encoded on a 64-bit word, the wire numbers IN1, IN2, ON being encoded on 21-bit words. The table GTW can be stored and transmitted in a compressed form, for example using the gzip compression scheme.
According to an embodiment, the order of the logic gates in the gate tables GTW, and GTT can be defined randomly, provided that the table records GTW[k] and GTT[k] at the index k refer to the same gate.
It can be observed that the wire values do not have necessarily the same size (same number of bits). Thus the values TT00, TT01, TT10 and TT11 in the table GTT do not have necessarily the same size as the input values used for selecting one of the values in the table GTT. Since both valid values corresponding to the binary values of the input values (provided in the tables RDLB and ADLB) are stored in the data structure GCD, these valid values can be generated with a reduced size such as 8 bits or less.
The structure of the circuit GC arranged in successive gate layers enables parallel processing, since all logic gates in a same gate layer can be processed at the same time. The circuit GC can further include an interconnection matrix between two gate layers of the circuit GC. Each of the logic gates of a second layer of the circuit receives two input values selected by one interconnection matrix among the inputs of the circuit GC and the outputs of gates of one of the previous gate layers of the circuit GC.
The application EAP and/or the application DAP can be installed in the terminals UT and/or in the servers SRV. According to an example, one of the servers SRV can implement a data bank of encoded data in the form of the data structure GCD, that are accessible to authorized users from a terminal UT having the application DAP. According to another example, an encoded data in the form of the data structure GCD is transmitted from a user terminal UT having the application EAP to another user terminal UT having the application DAP.
According to an embodiment, the switching module SWC performs switching operations SW1j, SW2i to select one or the other of the two valid values RDiV1, RDiV2 of each input value RDi, and one or the other of the two valid values ADiV1, ADiV2 of each input value ADi. Each switching function SW1j, SW2i is controlled by a respective bit NB1j, NB2i of numbers NB1, NB2 provided by counters CNT, the number NB1 having s bits, and the number NB2 having n bits when the memory receives the address signal ADi (or 2n bit when the memory receives the selection signal SLi). Each switching operation SW1j, SW2i provides for each of the values RDj, ADi a value RDjVq1, ADiVq2 which is stored in the structure GODI provided in input of the.
The module GCI is a dedicated interpreting module configured to successively execute the logic gates of each gate layer of the circuit GC, starting with the first gate layer as defined by the data in the input data structure GODI. To this purpose, the interpreting module GCI can use a wire table receiving the value of each wire of the circuit GC, which is written in the wire table at an index corresponding to the wire number of the wire value. The wire table is first loaded from the data structure GODI with the input values RDjVq1, ADiVq2 of the circuit GC, written in the table at indexes between 1 and n+s, corresponding to wire numbers assigned to the input values. Then the computed output value of each executed logic gate is written in the wire table at an index corresponding to the wire number of the output value. At the end of the execution of the circuit GC, the wire table comprises the values of the outputs of the circuit GC at indexes from (n+s+g−m+1) to (n+s+g). This process is repeated for each of the input values of the circuit GC by incrementing the counters CNT to load new input values in the data structure GODI, each execution of the circuit GC providing one data piece EV of the resulting decoded data and address data EADx of the data piece EV in the decoded data.
The output value of each logic gate (value of the output wire of the logic gate) can be computed by applying a non-reversible function applied to both input values of the gate and to one value selected in the truth table of the gate, as a function of the least significant bit of each of the two input values:
OV=PF1(IV1,IV2,GIN) (1)
where GIN=GTT[IV1{0}//IV2{0}], PF1 represents the non-reversible function, GTT represents the four-element truth table of the gate, IV1 and IV2 represent the input values of the gate, IV1{0} and IV2{0} represent the least significant bit of the input values IV1, IV2, and “//” represents the bit concatenation operator.
According to an embodiment, the function PF1 can use an encryption function such as AES (Advanced Encryption Standard) using an encryption key assigned to the circuit GC. In this case, the encryption key GCK can be stored in the structure and content data GCD of the circuit GC or provided separately to users authorized to access the encoded data. For example, the output value OV of a logic gate can be computed as follows:
OV=AES(GCK,K)⊕K⊕GIN (2)
with K=CF(IV1,IV2)⊕T, “⊕” represents the Exclusive OR (XOR) operator, T represents a number assigned to logic gate, for example the number of the logic gate, and can also depend on the values of the inputs IV1, IV2, CF represents a combination function, and AES(GCK, K) represents an encrypted value of K by the AES encryption algorithm using the encryption key GCK. The combination function can be an XOR operation or an operation in the form:
CF(IV1,IV2)=SH(IV1,a)⊕SH(IV2,b), (3)
SH(X,a) representing a left shift operation of X by a number a of bits.
As a result of the selection of one of the two valid values RDjV1, RDjV2 of the read signals RDj, and one of the two values ADiV1, ADiV2 of the address signal ADi, one memory cell MCi (MEM, MEM2) or m memory cells MCi1, . . . , MCim (MEM1, MEM3) are selected and read, and the input address values ADi are converted into bits of address data EADx by the module GCI which provides the values EVi read in the memory and the address data EADx.
The least significant bit of each output data EADx, EVi of the circuit GC provided by the module GCI is considered as one address bit for the data EADx, and one bit of the decoded data for the data EVi. The module OGD combines each output data EADx, EVi (least significant bit of each output data provided by the execution of the circuit GC) with a respective mask bit value DCTi belonging to a decoding table DCT which can be provided with the structure and content data GCD. The combination operation used can be an XOR operation. The respective least significant bits of the output values EADx, EVi of the circuit GC represents white noise since the output values of the circuit GC including the least significant bit thereof are randomly chosen, and thus, the correspondence between the least significant bit of the output data and the bit value of the corresponding binary data is randomly chosen. Thus the data EADx, EVi provided by one execution of the circuit GC are in an encoded form, and are decoded using the table DCT, the decoding operation performed by the module OGD providing an address ADx resulting from decoding the address output data EADx. Then the corresponding decoded value V is stored in an output data DDT at an address defined by the address bits ADx.
The data piece EV read in the memory MEM or MEM2 by one execution of the circuit GC is one bit. Since the execution of the circuit GC requires to execute a large number of operations, the decoding of one bit can take a long time. This time is multiplied by the number of bits of the data to decode. When the data pieces are randomly selected and read in the memory MEM, the data to decode is generally not intelligible before a large proportion of the data pieces of the data to decode are read. For example, when the data to decode represent a color image, the image does not become intelligible before at least 90% of the data pieces are read in the memory MEM. Therefore, even if the key GCK and final mask DCT are known from an unauthorized user, the latter cannot have access to the data in a short time and/or must mobilize a large computing power to decode the data.
The encoding process of data performed by the application EAP includes the generation of a garbled circuit GC, which comprises generating random values representing the binary states 0 and 1 of the input bits and of the output bits of each of the logic gates of the circuit, some of the logic gate outputs corresponding to outputs of the circuit GC. The generation of the circuit can further include randomly selecting one more interconnection matrices XM1, i.e. randomly selecting the links between the inputs of the circuit and the inputs of the logic gates of the circuit, and, for another interconnection matrix, between the outputs of logic gates of one gate layer and the inputs of logic gates of a following gate layer.
The generation of the garbled circuit can further include randomly selecting a type of logic gate for each memory cell MCi of the circuit GC.
The generation of the garbled circuit further includes computing the values in the truth tables GTT of the logic gates of the software component, the logic gates of the memory plane MP depending on the data piece values to encode. The values in the truth tables can be encrypted, using the encryption key GCK. According to an example, each four values TT00, TT01, TT10, TT11 (=GTT[IV1{0}//IV2{0}]) of the truth table of a logic gate of the circuit GC can be computed as follows:
TT=PF2(IV1,IV2,OV) (4)
for each possible combination of the valid values of the input values IV1, IV2 and the output value OV, when considering the binary states corresponding to the valid values of IV1, IV2 and OV, and the logic operation performed by the logic gate, PF2 representing a non-reversible function. According to the example defined by equation (2), each four values TT of the truth table of a logic gate can be computed as follows:
TT=AES(GCK,K)⊕K⊕OV (5)
with K=CF(IV1,IV2)⊕T.
As a consequence, it is very difficult to determine the binary states of the input and output values and the function of the logic gates of the circuit GC. Thus the functioning of the circuit GC cannot be easily determined. For more details on garbled circuits, reference may be made to the document “Foundations of Garbled Circuits”, Mihir Bellare, Viet Tung Hoang, Phillip Rogaway, dated Oct. 1, 2012.
When the circuit GC is generated for encoding data, it can be decided to use another bit rank in the values of the wires of the circuit for defining the corresponding binary state of these values. Thus, the bits at the selected bit rank in the input values of a logic gate of the circuit GC are used to select a data in the truth table GTT of the logic gate, and the bits at the selected bit rank in the output values EADx, EV of the circuit GC are extracted and applied to the module OGD. It can be observed that the bit rank defining the binary state of a value of a wire of the circuit GC is not necessarily the same for each gate layer of the circuit GC.
According to one embodiment, encoded data in the form of the circuit data GCD are stored and/or transmitted without the key GCK and/or the decoding mask DCT which are securely stored and/or transmitted to authorized users empowered to access to the data DDT protected by such an encoding.
According to another embodiment, respective parts of the tables RDLB, ADLB, GTW and GTT are transmitted to different users. Thanks to the structure of the encoded data GCD, no partial decoding is possible and the decoding requires a complete content of the data structure GCD. Therefore, the decoding of the encoded data can be performed only when all the users having a part of it pool their respective part to build a complete version of the data structure GCD.
The methods disclosed herein may be implemented by software programs executable by one processor of the user terminal UT, such as the main processor HP (CPU) or at least partially the graphic processor GP.
The methods disclosed herein can be applied to any type of data, such as compressed or uncompressed data such as black and white or color images, video files, audio files, program binary code or interpreted code files, text files, data base files, etc.
Further, the methods disclosed herein are not limited to the use of a secret key GCK for executing the logic gates of the garbled circuit GC, such a secret key being exposed to key theft. For example, in an application where the data have a short validity time, the time required to decode the encoded data in the structure GCD using common data processing devices can be set to a value higher than the validity time of the encoded data. When the encoded data in the structure GCD are shared by several devices having respective parts of the encoded data, each data part can be defined such that none of the devices can decode the data without the other parts of the encoded data. For example, each device can have a respective part of the input data and/or a respective part of the gate layers. A gate layer cannot be executed without the input data thereof even if the execution of the gates does not use a secret key. The input data are unusable without at least the first gate layer. According to another example, all involved devices can have the tables NBGL, GTW and GTT but only a respective part of the alternative values of the input data RDLB, ADLB, such that each device can decode a part of the encoded data.
Further, the methods disclosed herein are not limited to the use of the decoding table DCT. The logic gates providing the output values of the circuit GC can be configured to directly provide the binary values of the gates.
Further, the methods disclosed herein are not limited to garbled circuits comprising gates having only two inputs and one output. Other types of gates with three or more inputs and one or more outputs or receiving data having more than two valid states may be implemented using truth tables having 21 lines, I being the number of inputs of the logic gate.
More generally, the conception of a garbled circuit can be performed by translating a program written in language such as C or C++ into a circuit design language such as VHDL or Verilog to obtain a Boolean circuit formed with logic gates.
The methods disclosed herein provide an encoding process which is fully adjustable in terms of security and decoding time. The security of the encoding is adjustable by using or not a secret key GCK for the execution of the logic gates, and by using or not a decoding table DCT for decoding the output binary data of the Boolean circuit. The decoding time is adjustable by adjusting the number of bits stored in the memory with respect to the number of bits of the data to encode. It may be also observed that the number of different Boolean circuits GC that can encode the same data is almost infinite without the use of different secret keys.
The previously disclosed encoding process can be used to compute a digital signature of data, the signature computations being applied to the structure GCD.
The illustrations described herein are intended to provide a general understanding of the structure of various embodiments. These illustrations are not intended to serve as a complete description of all of the elements and features of apparatus, processors and systems that utilizes the structures or methods described therein. Many other embodiments or combinations thereof may be apparent to those of ordinary skills in the art upon reviewing the disclosure by combining the disclosed embodiments. Other embodiments may be utilized and derived from the disclosure, such that structural and logical substitutions and changes may be made without departing from the scope of the disclosure.
Further, the disclosure and the illustrations are to be considered as illustrative rather than restrictive, and the appended claims are intended to cover all such modifications, enhancements and other embodiments, or combinations thereof, which fall within the true spirit and scope of the description. Therefore, the scope of the following claims is to be determined by the broadest permissible interpretation of the claims and their equivalents, and shall not be restricted or limited by the foregoing description.
Number | Date | Country | Kind |
---|---|---|---|
17187751.7 | Aug 2017 | EP | regional |