|
@@ -171,7 +171,7 @@ DPFnode CDPF::leaf(value_t input, size_t &aes_ops) const
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
+
|
|
|
std::tuple<RegBS,RegBS,RegBS> CDPF::compare(MPCTIO &tio, yield_t &yield,
|
|
|
RegAS x, size_t &aes_ops)
|
|
|
{
|
|
@@ -202,82 +202,87 @@ std::tuple<RegBS,RegBS,RegBS> CDPF::compare(MPCTIO &tio, yield_t &yield,
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
+
|
|
|
std::tuple<RegBS,RegBS,RegBS> CDPF::compare(value_t S, size_t &aes_ops)
|
|
|
{
|
|
|
RegBS gt, eq;
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
nbits_t curlevel = 0;
|
|
|
const nbits_t depth = VALUE_BITS - 7;
|
|
|
- DPFnode Snode = seed;
|
|
|
- DPFnode Tnode = seed;
|
|
|
+ DPFnode Sparent = seed;
|
|
|
+ DPFnode Tparent = seed;
|
|
|
|
|
|
|
|
|
|
|
|
bool Sdir = !!(S & (value_t(1)<<63));
|
|
|
- Snode = descend(Snode, curlevel, Sdir, aes_ops);
|
|
|
- Tnode = descend(Tnode, curlevel, !Sdir, aes_ops);
|
|
|
+ DPFnode Snode = descend(Sparent, curlevel, Sdir, aes_ops);
|
|
|
+ DPFnode Tnode = descend(Tparent, curlevel, !Sdir, aes_ops);
|
|
|
curlevel = 1;
|
|
|
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
while(curlevel < depth-1) {
|
|
|
Sdir = !!(S & (value_t(1)<<((depth+7)-curlevel-1)));
|
|
|
+ Sparent = Snode;
|
|
|
+ Tparent = Tnode;
|
|
|
+ Snode = descend(Sparent, curlevel, Sdir, aes_ops);
|
|
|
+ Tnode = descend(Tparent, curlevel, Sdir, aes_ops);
|
|
|
+ ++curlevel;
|
|
|
if (Sdir == 0) {
|
|
|
-
|
|
|
-
|
|
|
- DPFnode gtnode = descend(Snode, curlevel, 1, aes_ops);
|
|
|
- gt ^= get_lsb(gtnode);
|
|
|
+
|
|
|
+
|
|
|
+ gt ^= get_lsb(Sparent) ^ get_lsb(Snode);
|
|
|
} else {
|
|
|
-
|
|
|
-
|
|
|
- DPFnode gtnode = descend(Tnode, curlevel, 0, aes_ops);
|
|
|
- gt ^= get_lsb(gtnode);
|
|
|
+
|
|
|
+
|
|
|
+ gt ^= get_lsb(Tparent) ^ get_lsb(Tnode);
|
|
|
}
|
|
|
- Snode = descend(Snode, curlevel, Sdir, aes_ops);
|
|
|
- Tnode = descend(Tnode, curlevel, Sdir, aes_ops);
|
|
|
- ++curlevel;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
Sdir = !!(S & (value_t(1)<<((depth+7)-curlevel-1)));
|
|
|
+ Sparent = Snode;
|
|
|
+ Tparent = Tnode;
|
|
|
+ Snode = descend_to_leaf(Sparent, Sdir, aes_ops);
|
|
|
+ Tnode = descend_to_leaf(Tparent, Sdir, aes_ops);
|
|
|
+ ++curlevel;
|
|
|
if (Sdir == 0) {
|
|
|
-
|
|
|
+
|
|
|
|
|
|
- DPFnode gtnode = descend_to_leaf(Snode, 1, aes_ops);
|
|
|
- gt ^= parity(gtnode);
|
|
|
+ gt ^= get_lsb(Sparent) ^ parity(Snode);
|
|
|
} else {
|
|
|
|
|
|
|
|
|
- DPFnode gtnode = descend_to_leaf(Tnode, 0, aes_ops);
|
|
|
- gt ^= parity(gtnode);
|
|
|
+ gt ^= get_lsb(Tparent) ^ parity(Tnode);
|
|
|
}
|
|
|
- Snode = descend_to_leaf(Snode, Sdir, aes_ops);
|
|
|
- Tnode = descend_to_leaf(Tnode, Sdir, aes_ops);
|
|
|
- ++curlevel;
|
|
|
|
|
|
|
|
|
|