| Algorithm 5: |
| // Params: ciphertext , attribute permission parameters , data storage address Address() // Returns: plaintext message function DecryptMessage ( Address_) → 01: // Retrieve encrypted data using the storage address from IPFS 02: IPFS.retrieve (Address_) 03: // Step (i): Compute μ using the attribute permission parameters 04: computeCRTSolution (, ) 05: // Reverse compute from 06: 07: // Step (ii): Decrypt using C from CT and β 08: publicParameters.u // u is obtained from the system’s public parameters 09: publicParameters. // is a generator of 10: 11: // Decrypt the message using symmetric decryption with 12: symmetricDecrypt () 13: return endfunction // Helper function to compute using Chinese Remainder Theorem and attribute permission parameters function computeCRTSolution (,) → int 01: product () // is the product of 02: 03: // Compute the sum for using the CRT formula 04: for to .length do 05: = modInverse () // Compute the modular inverse 06: 07: return endfunction |