Can you describe a little bit you algorithm? Why do you use 0x80000000L value? What should be done to use the algorithm for IPv6 addresses?