Ejemplo n.º 1
0
 def sendClientNewLicenseRequest(self, licenseRequest):
     """
     @summary: Create new license request in response to server license request
     @param licenseRequest: {ServerLicenseRequest}
     @see: http://msdn.microsoft.com/en-us/library/cc241989.aspx
     @see: http://msdn.microsoft.com/en-us/library/cc241918.aspx
     """
     #get server information
     serverRandom = licenseRequest.serverRandom.value
     if self._transport.getGCCServerSettings().SC_SECURITY.serverCertificate._is_readed:
         serverCertificate = self._transport.getGCCServerSettings().SC_SECURITY.serverCertificate
     else:
         s = Stream(licenseRequest.serverCertificate.blobData.value)
         serverCertificate = gcc.ServerCertificate()
         s.readType(serverCertificate)
     
     #generate crypto values
     clientRandom = rsa.random(256)
     preMasterSecret = rsa.random(384)
     masterSecret = sec.masterSecret(preMasterSecret, clientRandom, serverRandom)
     sessionKeyBlob = sec.masterSecret(masterSecret, serverRandom, clientRandom)
     self._macSalt = sessionKeyBlob[:16]
     self._licenseKey = sec.finalHash(sessionKeyBlob[16:32], clientRandom, serverRandom)
     
     #format message
     message = ClientNewLicenseRequest()
     message.clientRandom.value = clientRandom
     message.encryptedPreMasterSecret.blobData.value = rsa.encrypt(preMasterSecret[::-1], serverCertificate.certData.getPublicKey())[::-1] + "\x00" * 8
     message.ClientMachineName.blobData.value = self._hostname + "\x00"
     message.ClientUserName.blobData.value = self._username + "\x00"
     self._transport.sendFlagged(sec.SecurityFlag.SEC_LICENSE_PKT, LicPacket(message))
Ejemplo n.º 2
0
 def getCertificate(self):
     """
     @summary: generate proprietary certificate from rsa public key
     """
     certificate = gcc.ProprietaryServerCertificate()
     certificate.PublicKeyBlob.modulus.value = rsa.int2bytes(self._rsaPublicKey.n)[::-1]
     certificate.PublicKeyBlob.pubExp.value = self._rsaPublicKey.e
     certificate.sign()
     return gcc.ServerCertificate(certificate)