Compare commits

...

3 Commits

1 changed files with 10 additions and 39 deletions

View File

@ -104,11 +104,9 @@ pub struct Response {
// The fields for the new Lox credential // The fields for the new Lox credential
P: RistrettoPoint, P: RistrettoPoint,
EncQ: (RistrettoPoint, RistrettoPoint), EncQ: (RistrettoPoint, RistrettoPoint),
EncInvRemain: (RistrettoPoint, RistrettoPoint),
id_server: Scalar, id_server: Scalar,
TId: RistrettoPoint, TId: RistrettoPoint,
TBucket: RistrettoPoint, TBucket: RistrettoPoint,
TInvRemain: RistrettoPoint,
TBlockages: RistrettoPoint, TBlockages: RistrettoPoint,
// The lox_zkp // The lox_zkp
@ -155,11 +153,10 @@ define_proof! {
blindissue, blindissue,
"Blockage Migration Blind Issuing", "Blockage Migration Blind Issuing",
(x0, x0tilde, xid, xbucket, xlevel, xsince, xinvremain, xblockages, (x0, x0tilde, xid, xbucket, xlevel, xsince, xinvremain, xblockages,
s, b, tid, tbucket, tinvremain, tblockages), s, b, tid, tbucket, tblockages),
(P, EncQ0, EncQ1, X0, Xid, Xbucket, Xlevel, Xsince, Xinvremain, (P, EncQ0, EncQ1, X0, Xid, Xbucket, Xlevel, Xsince, Xinvremain,
Xblockages, Plevel, Psince, TId, TBucket, TInvRemain, TBlockages, Xblockages, Plevel, Psince, Pinvremain, TId, TBucket, TBlockages,
D, EncId0, EncId1, EncBucket0, EncBucket1, EncInvRemain0, D, EncId0, EncId1, EncBucket0, EncBucket1, EncBlockages0, EncBlockages1),
EncInvRemain1, EncBlockages0, EncBlockages1),
(A, B): (A, B):
Xid = (xid*A), Xid = (xid*A),
Xlevel = (xlevel*A), Xlevel = (xlevel*A),
@ -173,17 +170,13 @@ define_proof! {
TId = (tid*A), TId = (tid*A),
TBucket = (b*Xbucket), TBucket = (b*Xbucket),
TBucket = (tbucket*A), TBucket = (tbucket*A),
TInvRemain = (b*Xinvremain),
TInvRemain = (tinvremain*A),
TBlockages = (b*Xblockages), TBlockages = (b*Xblockages),
TBlockages = (tblockages*A), TBlockages = (tblockages*A),
EncQ0 = (s*B + tid*EncId0 + tbucket*EncBucket0 EncQ0 = (s*B + tid*EncId0 + tbucket*EncBucket0
+ tinvremain*EncInvRemain0
+ tblockages*EncBlockages0), + tblockages*EncBlockages0),
EncQ1 = (s*D + tid*EncId1 + tbucket*EncBucket1 EncQ1 = (s*D + tid*EncId1 + tbucket*EncBucket1
+ tinvremain*EncInvRemain1
+ tblockages*EncBlockages1 + tblockages*EncBlockages1
+ x0*P + xlevel*Plevel + xsince*Psince) + x0*P + xlevel*Plevel + xsince*Psince + xinvremain*Pinvremain)
} }
pub fn request( pub fn request(
@ -494,18 +487,13 @@ impl BridgeAuth {
// invitations for moving from level i to level i+1) // invitations for moving from level i to level i+1)
let invremain: Scalar = LEVEL_INVITATIONS[(level - 3) as usize].into(); let invremain: Scalar = LEVEL_INVITATIONS[(level - 3) as usize].into();
let sinvremain = Scalar::random(&mut rng);
let EncInvRemain = (
&sinvremain * Btable,
&invremain * Btable + sinvremain * req.D,
);
// Compute the MAC on the visible attributes // Compute the MAC on the visible attributes
let b = Scalar::random(&mut rng); let b = Scalar::random(&mut rng);
let P = &b * Btable; let P = &b * Btable;
let QHc = (self.lox_priv.x[0] let QHc = (self.lox_priv.x[0]
+ self.lox_priv.x[3] * trust_level + self.lox_priv.x[3] * trust_level
+ self.lox_priv.x[4] * level_since) + self.lox_priv.x[4] * level_since
+ self.lox_priv.x[5] * invremain)
* P; * P;
// El Gamal encrypt it to the public key req.D // El Gamal encrypt it to the public key req.D
@ -520,9 +508,6 @@ impl BridgeAuth {
let tbucket = self.lox_priv.x[2] * b; let tbucket = self.lox_priv.x[2] * b;
let TBucket = &tbucket * Atable; let TBucket = &tbucket * Atable;
let EncQBucket = (tbucket * req.EncBucket.0, tbucket * req.EncBucket.1); let EncQBucket = (tbucket * req.EncBucket.0, tbucket * req.EncBucket.1);
let tinvremain = self.lox_priv.x[5] * b;
let TInvRemain = &tinvremain * Atable;
let EncQInvRemain = (tinvremain * EncInvRemain.0, tinvremain * EncInvRemain.1);
let tblockages = self.lox_priv.x[6] * b; let tblockages = self.lox_priv.x[6] * b;
let TBlockages = &tblockages * Atable; let TBlockages = &tblockages * Atable;
let EncQBlockages = ( let EncQBlockages = (
@ -531,8 +516,8 @@ impl BridgeAuth {
); );
let EncQ = ( let EncQ = (
EncQHc.0 + EncQId.0 + EncQBucket.0 + EncQInvRemain.0 + EncQBlockages.0, EncQHc.0 + EncQId.0 + EncQBucket.0 + EncQBlockages.0,
EncQHc.1 + EncQId.1 + EncQBucket.1 + EncQInvRemain.1 + EncQBlockages.1, EncQHc.1 + EncQId.1 + EncQBucket.1 + EncQBlockages.1,
); );
let mut transcript = Transcript::new(b"blockage migration issuing"); let mut transcript = Transcript::new(b"blockage migration issuing");
@ -553,17 +538,15 @@ impl BridgeAuth {
Xblockages: &self.lox_pub.X[6], Xblockages: &self.lox_pub.X[6],
Plevel: &(trust_level * P), Plevel: &(trust_level * P),
Psince: &(level_since * P), Psince: &(level_since * P),
Pinvremain: &(invremain * P),
TId: &TId, TId: &TId,
TBucket: &TBucket, TBucket: &TBucket,
TInvRemain: &TInvRemain,
TBlockages: &TBlockages, TBlockages: &TBlockages,
D: &req.D, D: &req.D,
EncId0: &EncId.0, EncId0: &EncId.0,
EncId1: &EncId.1, EncId1: &EncId.1,
EncBucket0: &req.EncBucket.0, EncBucket0: &req.EncBucket.0,
EncBucket1: &req.EncBucket.1, EncBucket1: &req.EncBucket.1,
EncInvRemain0: &EncInvRemain.0,
EncInvRemain1: &EncInvRemain.1,
EncBlockages0: &req.EncBlockages.0, EncBlockages0: &req.EncBlockages.0,
EncBlockages1: &req.EncBlockages.1, EncBlockages1: &req.EncBlockages.1,
x0: &self.lox_priv.x[0], x0: &self.lox_priv.x[0],
@ -578,7 +561,6 @@ impl BridgeAuth {
b: &b, b: &b,
tid: &tid, tid: &tid,
tbucket: &tbucket, tbucket: &tbucket,
tinvremain: &tinvremain,
tblockages: &tblockages, tblockages: &tblockages,
}, },
) )
@ -588,11 +570,9 @@ impl BridgeAuth {
level_since, level_since,
P, P,
EncQ, EncQ,
EncInvRemain,
id_server, id_server,
TId, TId,
TBucket, TBucket,
TInvRemain,
TBlockages, TBlockages,
piBlindIssue, piBlindIssue,
}) })
@ -634,13 +614,6 @@ pub fn handle_response(
// moving from level i to level i+1) // moving from level i to level i+1)
let invremain: Scalar = LEVEL_INVITATIONS[(new_level - 1) as usize].into(); let invremain: Scalar = LEVEL_INVITATIONS[(new_level - 1) as usize].into();
// Decrypt EncInvRemain
let recv_invremain = resp.EncInvRemain.1 - (state.d * resp.EncInvRemain.0);
if recv_invremain != &invremain * Btable {
return Err(ProofError::VerificationFailure);
}
// Verify the proof // Verify the proof
let mut transcript = Transcript::new(b"blockage migration issuing"); let mut transcript = Transcript::new(b"blockage migration issuing");
blindissue::verify_compact( blindissue::verify_compact(
@ -661,17 +634,15 @@ pub fn handle_response(
Xblockages: &lox_pub.X[6].compress(), Xblockages: &lox_pub.X[6].compress(),
Plevel: &(state.trust_level * resp.P).compress(), Plevel: &(state.trust_level * resp.P).compress(),
Psince: &(resp.level_since * resp.P).compress(), Psince: &(resp.level_since * resp.P).compress(),
Pinvremain: &(invremain * resp.P).compress(),
TId: &resp.TId.compress(), TId: &resp.TId.compress(),
TBucket: &resp.TBucket.compress(), TBucket: &resp.TBucket.compress(),
TInvRemain: &resp.TInvRemain.compress(),
TBlockages: &resp.TBlockages.compress(), TBlockages: &resp.TBlockages.compress(),
D: &state.D.compress(), D: &state.D.compress(),
EncId0: &EncId.0.compress(), EncId0: &EncId.0.compress(),
EncId1: &EncId.1.compress(), EncId1: &EncId.1.compress(),
EncBucket0: &state.EncBucket.0.compress(), EncBucket0: &state.EncBucket.0.compress(),
EncBucket1: &state.EncBucket.1.compress(), EncBucket1: &state.EncBucket.1.compress(),
EncInvRemain0: &resp.EncInvRemain.0.compress(),
EncInvRemain1: &resp.EncInvRemain.1.compress(),
EncBlockages0: &state.EncBlockages.0.compress(), EncBlockages0: &state.EncBlockages.0.compress(),
EncBlockages1: &state.EncBlockages.1.compress(), EncBlockages1: &state.EncBlockages.1.compress(),
}, },