def _handleCoveringKey(self, interest, data, timeSlot, onEncryptedKeys, onError): """ This is called from an expressInterest OnData to check that the encryption key contained in data fits the timeSlot. This sends a refined interest if required. :param Interest interest: The interest given to expressInterest. :param Data data: The fetched Data packet. :param float timeSlot: The time slot as milliseconds since Jan 1, 1970 UTC. :param onEncryptedKeys: When there are no more interests to process, this calls onEncryptedKeys(keys) where keys is a list of encrypted content key Data packets. If onEncryptedKeys is None, this does not use it. :type onEncryptedKeys: function object :param onError: This calls onError(errorCode, message) for an error. :type onError: function object """ timeCount = round(timeSlot) keyRequest = self._keyRequests[timeCount] interestName = interest.getName() keyName = data.getName() begin = Schedule.fromIsoString( str(keyName.get(Producer.START_TIME_STAMP_INDEX).getValue())) end = Schedule.fromIsoString( str(keyName.get(Producer.END_TIME_STAMP_INDEX).getValue())) if timeSlot >= end: # If the received E-KEY covers some earlier period, try to retrieve # an E-KEY covering a later one. timeRange = Exclude(interest.getExclude()) Producer.excludeBefore( timeRange, keyName.get(Producer.START_TIME_STAMP_INDEX)) keyRequest.repeatAttempts[interestName] = 0 self._sendKeyInterest( Interest(interestName).setExclude(timeRange).setChildSelector( 1), timeSlot, onEncryptedKeys, onError) else: # If the received E-KEY covers the content key, encrypt the content. encryptionKey = data.getContent() # If everything is correct, save the E-KEY as the current key. if self._encryptContentKey(encryptionKey, keyName, timeSlot, onEncryptedKeys, onError): keyInfo = self._eKeyInfo[interestName] keyInfo.beginTimeSlot = begin keyInfo.endTimeSlot = end keyInfo.keyBits = encryptionKey
def _handleCoveringKey( self, interest, data, timeSlot, onEncryptedKeys, onError): """ This is called from an expressInterest OnData to check that the encryption key contained in data fits the timeSlot. This sends a refined interest if required. :param Interest interest: The interest given to expressInterest. :param Data data: The fetched Data packet. :param float timeSlot: The time slot as milliseconds since Jan 1, 1970 UTC. :param onEncryptedKeys: When there are no more interests to process, this calls onEncryptedKeys(keys) where keys is a list of encrypted content key Data packets. If onEncryptedKeys is None, this does not use it. :type onEncryptedKeys: function object :param onError: This calls onError(errorCode, message) for an error. :type onError: function object """ timeCount = round(timeSlot) keyRequest = self._keyRequests[timeCount] interestName = interest.getName() keyName = data.getName() begin = Schedule.fromIsoString( str(keyName.get(Producer.START_TIME_STAMP_INDEX).getValue())) end = Schedule.fromIsoString( str(keyName.get(Producer.END_TIME_STAMP_INDEX).getValue())) if timeSlot >= end: # If the received E-KEY covers some earlier period, try to retrieve # an E-KEY covering a later one. timeRange = Exclude(interest.getExclude()) Producer.excludeBefore(timeRange, keyName.get(Producer.START_TIME_STAMP_INDEX)) keyRequest.repeatAttempts[interestName] = 0 self._sendKeyInterest( Interest(interestName).setExclude(timeRange).setChildSelector(1), timeSlot, onEncryptedKeys, onError) else: # If the received E-KEY covers the content key, encrypt the content. encryptionKey = data.getContent() # If everything is correct, save the E-KEY as the current key. if self._encryptContentKey( encryptionKey, keyName, timeSlot, onEncryptedKeys, onError): keyInfo = self._eKeyInfo[interestName] keyInfo.beginTimeSlot = begin keyInfo.endTimeSlot = end keyInfo.keyBits = encryptionKey