Okay. So I have looked at the code in depth and have come to a confusing problem. It will be hard for me to compile my thoughts to be understood, but here it goes.
I see how all of the pieces fit together, mostly, the only thing I don't understand is the length of the HexStrings and BigNumbers. For example: databaseV is a 64-character hexString, that is taken from the database. You take that string and run v.SetHexStr(databaseV), which basically turns that hexString into a 64-digit BigNumber and makes v equal to it. Now, say you have that value, you then take it, multiply it by 3 add gmod(which is g^b % N) and take that mod N and set that whole value equal to B (B = ((v * 3) + gmod) % N;). So somehow, you take a 64-digit BigNumber and convert it into a 32-element byte array and append it to the packet (pkt.append(B.AsByteArray(32), 32).
This is frustrating to me because I see many ways this could work, and still I believe all of them could be incorrect. Perhaps it takes all the digits as twos and puts them into hex values like consecutive digits of 15 would be turned into the byte 0x15. X_X
Someone shed some light on this. If no one helps me I am going to have to setup a server, compile it with extended output, telling me all the variables at any one time and I still believe that will bring me to alot of dead ends.