incubator-tashi-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Michael Shaye-Wen Wang" <msw...@andrew.cmu.edu>
Subject Resubmission of patch
Date Mon, 06 Jul 2009 22:27:58 GMT
Here is a resubmission of a patch for the maui checksum algorithm
implemented without seeing the actual code.

Index: src/tashi/agents/pseudoDes.py
===================================================================
--- src/tashi/agents/pseudoDes.py   (revision 0)
+++ src/tashi/agents/pseudoDes.py   (revision 0)
@@ -0,0 +1,75 @@
+#! /usr/bin/env python
+
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+values = {1:(0xcba4e531, 0x12be4590),
+           2:(0x537158eb, 0xab54ce58),
+           3:(0x145cdc3c, 0x6954c7a6),
+           4:(0x0d3fdeb2, 0x15a2ca46)}
+
+def crc(short, char):
+   short = short & 0xffff
+   char = char & 0xff
+   value = short ^ (char << 8)
+   for i in range(0, 8):
+       if value & 0x8000:
+           value = (value << 1) ^ 4129
+       else:
+           value = value << 1
+   return value & 0xffff
+
+def pseudoDes(in1, in2):
+   for i in range(1, 5):
+       in1 = in1 & 0xffffffff
+       in2 = in2 & 0xffffffff
+       (value1, value2) = values[i]
+
+       out1 = in2
+       tmp2 = in2 ^ value1
+       tmp1 = ((tmp2 & 0xffff)*(tmp2 & 0xffff)) + ((~((tmp2 >> 16)*(tmp2
>> 16))) & 0xffffffff)
+       tmp1 = tmp1 & 0xffffffff
+       out2 = in1 ^ ((((tmp1 >> 16) | ((tmp1 & 0xffff) << 16)) ^ value2)
+ ((tmp2 & 0xffff) * (tmp2 >> 16)))
+
+       in1, in2 = out1, out2
+   out1 = 0xffffffff & out1
+   out2 = 0xffffffff & out2
+   return out1, out2
+
+def generateKey(msg, key):
+   crcValue = 0
+   for char in msg:
+       crcValue = crc(crcValue, ord(char))
+   left, right = pseudoDes(crcValue, key)
+   return (left << 32) | right
+
+if __name__ == '__main__':
+   msg = 'I am not a crook'
+   key = 35005211
+   print 'Actual = %x, Expected = %x' % (generateKey(msg, key),
0x52268fb4322709f3)
+   msg = 'Hello World!'
+   key = 521595368
+   print 'Actual = %x, Expected = %x' % (generateKey(msg, key),
0xa3b5866eb29a78b6)
+   msg = 'pseudo des'
+   key = 294702567
+   print 'Actual = %x, Expected = %x' % (generateKey(msg, key),
0xa35e82ad71b4549d)
+   msg = 'copyright infringement'
+   key = 1726956429
+   print 'Actual = %x, Expected = %x' % (generateKey(msg, key),
0x0dbf6879e721f7b9)
+   msg = 'whiteboard cowboy'
+   key = 336465782
+   print 'Actual = %x, Expected = %x' % (generateKey(msg, key),
0x92d36b3848a5f3a2)

Property changes on: src/tashi/agents/pseudoDes.py
___________________________________________________________________
Name: svn:executable
   + *



Mime
View raw message