Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from System import Int32, Byte, IntPtr
- import System
- from System.IO import *
- from System.Runtime.InteropServices import Marshal
- from ctypes import *
- import sys
- mscoree = windll.mscoree
- def GetLastStrongNameError():
- error = Marshal.GetExceptionForHR(mscoree.StrongNameErrorInfo())
- return error.Message
- def GenerateKeyPair (keyK):
- if keyK < 0 or keyK > 2 :
- raise System.ArgumentOutOfRangeException(
- "keyK", keyK, "Invalid Key Size -- should be 1 or 2")
- # variables that hold the unmanaged key
- keyBlob = c_void_p()
- generatedSize = c_uint(0)
- # create the key
- createdKey = mscoree.StrongNameKeyGenEx(
- None,
- c_uint(0),
- c_uint(1024 * keyK),
- byref(keyBlob),
- byref(generatedSize))
- try:
- # if there was a problem, translate it and report it
- if not createdKey or keyBlob.value == 0:
- raise System.InvalidOperationException(GetLastStrongNameError())
- #make sure the key size makes sense
- generatedSize = generatedSize.value
- if generatedSize <= 0 or generatedSize > Int32.MaxValue:
- raise System.InvalidOperationException("InternalError")
- # get the key into managed memory
- key = System.Array.CreateInstance(Byte, generatedSize)
- Marshal.Copy(IntPtr(keyBlob.value), key, 0, generatedSize)
- return key
- finally:
- # release the unmanaged memory the key resides in
- if keyBlob.value != 0:
- mscoree.StrongNameFreeBuffer(keyBlob)
- # write the key to the specified file if it is not already present
- keypath = sys.argv[1]
- if not (File.Exists(keypath)):
- print 'Generating key at %s' % (keypath)
- key = GenerateKeyPair (1)
- # should do this using a 'with'
- snkStream = FileStream(keypath, FileMode.Create, FileAccess.Write)
- snkWriter = BinaryWriter(snkStream)
- snkWriter.Write(key)
- snkWriter.Close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement