# Privacy-Preserving Solution for European Union Digital Vaccine Certificates
## 6 Security Analysis
### Data Structures  
Both applications use several data classes. These classes define the structure of communication messages, certificates, and keys, and are defined in the DataElements.kt file. The data structures used in our implementation are detailed below:  
* attributes: This is a value of type HashMap<Int, String> holding attributes in plain text form. Attributes are indexed based on their position (i.e., \(1,2,\ldots,20\)), not their name.
- attributesSigma: Similarly to the attributes, attributesSigma is also of type HashMap<Int, String>, where in this case, the values are the \(\sigma_{x_{i}}\) signatures of all issued attributes.
- sigma: This value represents the main signature of \(\sigma\).
* Pubkey: This structure represents the issuer's public key. The class holds the value of HashMap<Int, String>, which is indexed in the same way as the attributes and attributesSigma structures.
* NonceRequest: This is the first data structure used within communication between the user's application and the verifier terminal. Its purpose is to transmit the verifier's challenge to the user.
* issuer_name: The name of the I/RA. It is a variable of type String.
- verifier_name: The name of the verifier. It is set when the certificate is issued. It is directly linked to the name of the entity that verifies digital certificates as part of the operation of services. attributes: A list of attributes that the verifier is entitled to query. This is a list of type List<String>.
- signature: The digital signature of all values listed above.
* VerifyRequest: This data structure represents the user's response to the previous verifier's request NonceRequest and contains the following values: sigma_roof, disclosedValues, t_verify, sm, and sv. These values are used as cryptographic proof.
* JsonResponse: This data structure is used to process user digital vaccine certificates downloaded from the web server. The JSON containing this certificate has a slightly different form than the Certificate data structure, which is why this structure was created. A significant difference between the objects holding the certificates within the user application is the indexing method. Certificates downloaded from the web server  
Figure 6: Structure of the CryptoCore class.  
are indexed by attribute name, while the application indexes the attributes using their position. The data structure contains the following information:  
- creation_time: Date of certificate issuance, data type String.  
- email: User email, data type String.  
- status: This information indicates whether the certificate is valid, data type Boolean.  
- certificate. Attributes of the digital vaccine certificate, data type Map.  
- sigma: Signatures of \(\sigma\), data type Map.  
* Device: The structure created to display selected information about discovered BLE devices and their subsequent display. This structure holds the following information:  
- name: Advertised device name of type String.  
- address: MAC address of the Bluetooth interface of the device type String.  
power: Signal power of the discovered device String.