Velocity Reviews > Reverse biwise operation and xor?

# Reverse biwise operation and xor?

Guest
Posts: n/a

 01-31-2008
I have a rather interesting code with 3 input variables that produce
result (this is a decoder and written by unknown author).

I have to get cd variable by konwing cl, fm and result of the
function...
is this possible?

Code:
#define MAKE_TAG_ID( cl, fm, cd)\
((((UL)(cl)) << ((TB -1) * ) | (((UL)(fm)) << ((TB -1) * ) |
(MAKE_TAG_ID_CODE (((UL)(cd)))))

And this is related code:

#define MAKE_TAG_ID_CODE(cd)\
( (cd < 31) ? (MAKE_TAG_ID_CODE1 (cd)):\
((cd < 12? (MAKE_TAG_ID_CODE2 (cd)):\
((cd < 16384)? (MAKE_TAG_ID_CODE3 (cd)):\
(MAKE_TAG_ID_CODE4 (cd)))))

#define MAKE_TAG_ID_CODE1(cd) (cd << ((TB -1) * )

#define MAKE_TAG_ID_CODE2(cd) ((31 << ((TB -1) * ) | (cd << ((TB-2)
* ))

#define MAKE_TAG_ID_CODE3(cd) ((31 << ((TB -1) * )\
| ((cd & 0x3f80) << 9)\
| ( 0x0080 << ((TB-2) * )\
| ((cd & 0x007F) << ((TB-3)* ))

#define MAKE_TAG_ID_CODE4(cd) ((31 << ((TB -1) * )\
| ((cd & 0x1fc000) << 2)\
| ( 0x0080 << ((TB-2) * )\
| ((cd & 0x3f80) << 1)\
| ( 0x0080 << ((TB-3) * )\
| ((cd & 0x007F) << ((TB-4)*))

Thanx for any help

Walter Roberson
Guest
Posts: n/a

 01-31-2008
In article <(E-Mail Removed)>,
>I have a rather interesting code with 3 input variables that produce
>result (this is a decoder and written by unknown author).

>I have to get cd variable by konwing cl, fm and result of the
>function...
>is this possible?

Not with that code, no.

xor operations in the code you show, only bitwise or.

>Code:
>#define MAKE_TAG_ID( cl, fm, cd)\
>((((UL)(cl)) << ((TB -1) * ) | (((UL)(fm)) << ((TB -1) * ) |
>(MAKE_TAG_ID_CODE (((UL)(cd)))))

>And this is related code:

>#define MAKE_TAG_ID_CODE(cd)\
>( (cd < 31) ? (MAKE_TAG_ID_CODE1 (cd)):\
>((cd < 12? (MAKE_TAG_ID_CODE2 (cd)):\
>((cd < 16384)? (MAKE_TAG_ID_CODE3 (cd)):\
>(MAKE_TAG_ID_CODE4 (cd)))))

>#define MAKE_TAG_ID_CODE1(cd) (cd << ((TB -1) * )

Consider the case of cd < 31. In that case, MAKE_TAG_ID_CODE1
is used, the result of which will be (cd << ((TB -1) * ) .
That will be inclusive-or'd with (((UL)(cl)) << ((TB -1) * )
and with (((UL)(fm)) << ((TB -1) * ) . Notice that
all three parts are left-shifted by the same amount, so the
"interesting" part of the value will be cl | fm | cd
Now in any bit position where cl | fm is 1, you cannot tell
the difference between cl | fm and cl | fm | cd
because 1 bitwise or'd with anything else is still 1 .

Thus, you cannot uniquely calculate cd knowing cl, fm, and
the result of the function -- not unless you have further information
to know that the bottom five bits of cl and fm are always 0.
--
"I was very young in those days, but I was also rather dim."
-- Christopher Priest