## 4 CLAP-PRE Scheme  
### Definition  
In this paper, we use \(\lambda\) to denote the security parameter. A CLAP-PRE scheme is a tuple of algorithms as follows.  
* \(Setup(1^{\lambda})\rightarrow(par,msk)\): The algorithm's input is the system's security parameter \(\lambda\), and the algorithm's output are the public parameters _par_ of the cryptosystem and the master secret key \(msk\) of the cryptosystem;
* \(PPKE(par,msk,ID_{i})\to d_{ID_{i}}\): The algorithm's inputs are the public parameters _par_ of the cryptosystem, the master secret key \(msk\) of the cryptosystem and a user's identity \(ID_{i}\), the key generation center (KGC) outputs the partial private key \(d_{ID_{i}}\) for the user \(ID_{i}\);\(UKG(par,d_{ID_{i}})\rightarrow(PK_{ID_{i}},SK_{ID_{i}})\): The algorithm's inputs are the public parameters \(par\) of the cryptosystem and the partial private key \(d_{ID_{i}}\) generated by KGC, the user outputs the public key \(PK_{ID_{i}}\) and private key \(SK_{ID_{i}}\);
* \(Proof(par,SK_{ID_{i}})\to proof\): The algorithm's inputs are the public parameters \(par\) of the cryptosystem and the private key \(SK_{ID_{i}}\). The user outputs the \(proof\) to guarantee the authenticity of public key;
* \(Verify(par,proof)\rightarrow\{0,1\}\): The algorithm's inputs are the public parameters \(par\) of the cryptosystem and the \(proof\), as well as the algorithm outputs 0 or 1. With output value 1, we say that \(proof\) is a valid proof. Additionally, this means that the identity \(ID_{i}\) and the corresponding public key \(PK_{ID_{i}}\) belong to the same user;
* \(CreatePath(par,ID_{i})\rightarrow(Pa_{ID_{i}},l_{ID_{i}})\): The algorithm's inputs are the public parameters \(par\) of the cryptosystem and the identity \(ID_{i}\) of the delegator, and the algorithm's output are an autonomous delegation path \(Pa_{ID_{i}}\) of length \(l_{ID_{i}}\). The autonomous delegation path \(Pa_{ID_{i}}=\{ID_{0}=ID_{i},ID_{1},\)..., \(ID_{l_{ID_{i}}}\}\) designated by the delegator is a list of ordered \(l_{ID_{i}}\) different public keys. All of the keys in the sequence must be unique;
* \(RKGen(par,Pa_{ID_{i}})\to RK_{ID_{i}}\): The algorithm's inputs are the public parameters \(par\) of the cryptosystem and the delegation path \(Pa_{ID_{i}}\) designated by the delegator; the algorithm outputs \(l_{ID_{i}}\) re-encryption keys (\(rk_{ID_{i}}^{0\to 1},\)..., \(rk_{ID_{i}}^{l_{ID_{i}}-1\to l_{ID_{i}}}\)) and sends them to the proxy in a secure way;
* \(Enc(par,ID_{i},m)\to C_{ID_{i}}^{0}=(c_{00},c_{01},c_{02},c_{03})\): The algorithm's inputs are the public parameters \(par\) of the cryptosystem, the delegator's identity \(ID_{i}\) and a message \(m\) from the message space \(M\), and the algorithm outputs the ciphertext \(C_{ID_{i}}^{0}=(c_{00},c_{01},c_{02},c_{03})\) encrypted with the delegator's public key \(ID_{i}\).
* \(ReEnc(par,Pa_{ID_{i}},rk_{ID_{i}}^{j\to j+1},C_{ID_{i}}^{j})\to C_{ID_{i}}^{j +1}=(c_{(j+1)0},c_{(j+1)1},c_{(j+1)2},c_{(j+1)3})\): The algorithm's inputs are the public parameters \(par\) of the cryptosystem, the delegation path \(Pa_{ID_{i}}=(ID_{0}=ID_{i},ID_{1},\)..., \(ID_{l_{ID_{i}}})\), the re-encryption key \(rk_{ID_{i}}^{j\to j+1}\) from the delegate \(j\) to the delegate \(j+1\) and the ciphertext \(C_{ID_{i}}^{j}\) sent to the delegatee \(j\). It outputs the ciphertext \(C_{ID_{i}}^{j+1}\) sent to the delegatee \(j+1\) who is in the delegation path \(Pa_{ID_{i}}\).
* \(Dec(par,SK_{ID_{i}},C_{ID_{i}}^{j})\to m\): The algorithm's inputs are the public parameters \(par\) of the cryptosystem, a ciphertext \(C_{ID_{i}}^{j}\) and the corresponding secret key \(SK_{ID_{i}}\); it outputs the plaintext \(m\) in the message space \(M\).