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))
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)