Advertisement
Guest User

Untitled

a guest
May 29th, 2015
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.02 KB | None | 0 0
  1. from System import Int32, Byte, IntPtr
  2. import System
  3. from System.IO import *
  4. from System.Runtime.InteropServices import Marshal
  5. from ctypes import *
  6. import sys
  7.  
  8. mscoree = windll.mscoree
  9.  
  10. def GetLastStrongNameError():
  11. error = Marshal.GetExceptionForHR(mscoree.StrongNameErrorInfo())
  12. return error.Message
  13.  
  14. def GenerateKeyPair (keyK):
  15. if keyK < 0 or keyK > 2 :
  16. raise System.ArgumentOutOfRangeException(
  17. "keyK", keyK, "Invalid Key Size -- should be 1 or 2")
  18.  
  19. # variables that hold the unmanaged key
  20. keyBlob = c_void_p()
  21. generatedSize = c_uint(0)
  22.  
  23. # create the key
  24. createdKey = mscoree.StrongNameKeyGenEx(
  25. None,
  26. c_uint(0),
  27. c_uint(1024 * keyK),
  28. byref(keyBlob),
  29. byref(generatedSize))
  30.  
  31. try:
  32. # if there was a problem, translate it and report it
  33. if not createdKey or keyBlob.value == 0:
  34. raise System.InvalidOperationException(GetLastStrongNameError())
  35.  
  36. #make sure the key size makes sense
  37. generatedSize = generatedSize.value
  38. if generatedSize <= 0 or generatedSize > Int32.MaxValue:
  39. raise System.InvalidOperationException("InternalError")
  40.  
  41. # get the key into managed memory
  42. key = System.Array.CreateInstance(Byte, generatedSize)
  43. Marshal.Copy(IntPtr(keyBlob.value), key, 0, generatedSize)
  44. return key
  45. finally:
  46. # release the unmanaged memory the key resides in
  47. if keyBlob.value != 0:
  48. mscoree.StrongNameFreeBuffer(keyBlob)
  49.  
  50. # write the key to the specified file if it is not already present
  51. keypath = sys.argv[1]
  52. if not (File.Exists(keypath)):
  53. print 'Generating key at %s' % (keypath)
  54. key = GenerateKeyPair (1)
  55. # should do this using a 'with'
  56. snkStream = FileStream(keypath, FileMode.Create, FileAccess.Write)
  57. snkWriter = BinaryWriter(snkStream)
  58. snkWriter.Write(key)
  59. snkWriter.Close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement