def __init__(self, value=None): if type(value) is Interest: # Copy the values. self._name = ChangeCounter(Name(value.getName())) self._minSuffixComponents = value._minSuffixComponents self._maxSuffixComponents = value._maxSuffixComponents self._keyLocator = ChangeCounter(KeyLocator(value.getKeyLocator())) self._exclude = ChangeCounter(Exclude(value.getExclude())) self._childSelector = value._childSelector self._mustBeFresh = value._mustBeFresh self._nonce = value.getNonce() self._scope = value._scope self._interestLifetimeMilliseconds = value._interestLifetimeMilliseconds else: self._name = ChangeCounter( Name(value) if type(value) is Name else Name()) self._minSuffixComponents = None self._maxSuffixComponents = None self._keyLocator = ChangeCounter(KeyLocator()) self._exclude = ChangeCounter(Exclude()) self._childSelector = None self._mustBeFresh = True self._nonce = Blob() self._scope = None self._interestLifetimeMilliseconds = None self._getNonceChangeCount = 0 self._changeCount = 0
def setKeyLocator(self, keyLocator): """ Set this interest to use a copy of the given keyLocator. Note: You can also change this interest's key locator modifying the object from getKeyLocator(). :param KeyLocator keyLocator: The KeyLocator that is copied. """ self._keyLocator.set(keyLocator if type(keyLocator) is KeyLocator( keyLocator) else KeyLocator()) self._changeCount += 1
def __init__(self, value=None): if type(value) is EncryptedContent: # Make a deep copy. self._algorithmType = value._algorithmType self._keyLocator = KeyLocator(value._keyLocator) self._initialVector = value._initialVector self._payload = value._payload else: self._algorithmType = None self._keyLocator = KeyLocator() self._initialVector = Blob() self._payload = Blob()
def setKeyLocator(self, keyLocator): """ Set the key locator. :param KeyLocator keyLocator: The key locator. This makes a copy of the object. If not specified, set to the default KeyLocator(). :return: This EncryptedContent so that you can chain calls to update values. :rtype: EncryptedContent """ self._keyLocator = (KeyLocator(keyLocator) if type(keyLocator) is KeyLocator else KeyLocator()) return self
def __init__(self, value=None): if isinstance(value, Interest): # Copy the values. self._name = ChangeCounter(Name(value.getName())) self._minSuffixComponents = value._minSuffixComponents self._maxSuffixComponents = value._maxSuffixComponents self._didSetCanBePrefix = value._didSetCanBePrefix self._keyLocator = ChangeCounter(KeyLocator(value.getKeyLocator())) self._exclude = ChangeCounter(Exclude(value.getExclude())) self._childSelector = value._childSelector self._mustBeFresh = value._mustBeFresh self._nonce = value.getNonce() self._interestLifetimeMilliseconds = value._interestLifetimeMilliseconds self._forwardingHint = ChangeCounter( DelegationSet(value.getForwardingHint())) self._applicationParameters = value._applicationParameters self._linkWireEncoding = value._linkWireEncoding self._linkWireEncodingFormat = value._linkWireEncodingFormat self._link = ChangeCounter(None) if value._link.get() != None: self._link.set(Link(value._link.get())) self._selectedDelegationIndex = value._selectedDelegationIndex self._defaultWireEncoding = value.getDefaultWireEncoding() self._defaultWireEncodingFormat = value._defaultWireEncodingFormat else: self._name = ChangeCounter(Name(value)) self._minSuffixComponents = None self._maxSuffixComponents = None if Interest._defaultCanBePrefix else 1 # _didSetCanBePrefix is True if the app already called setDefaultCanBePrefix(). self._didSetCanBePrefix = Interest._didSetDefaultCanBePrefix self._keyLocator = ChangeCounter(KeyLocator()) self._exclude = ChangeCounter(Exclude()) self._childSelector = None self._mustBeFresh = False self._nonce = Blob() self._interestLifetimeMilliseconds = None self._forwardingHint = ChangeCounter(DelegationSet()) self._applicationParameters = Blob() self._linkWireEncoding = Blob() self._linkWireEncodingFormat = None self._link = ChangeCounter(None) self._selectedDelegationIndex = None self._defaultWireEncoding = SignedBlob() self._defaultWireEncodingFormat = None self._getNonceChangeCount = 0 self._getDefaultWireEncodingChangeCount = 0 self._changeCount = 0 self._lpPacket = None
def __init__(self, value=None): if value == None: self._keyLocator = ChangeCounter(KeyLocator()) self._signature = Blob() elif type(value) is Sha256WithRsaSignature: # Copy its values. self._keyLocator = ChangeCounter(KeyLocator(value.getKeyLocator())) self._signature = value._signature else: raise RuntimeError( "Unrecognized type for Sha256WithRsaSignature constructor: " + str(type(value))) self._changeCount = 0
def __init__(self, value=None): if type(value) is Interest: # Copy the values. self._name = ChangeCounter(Name(value.getName())) self._minSuffixComponents = value._minSuffixComponents self._maxSuffixComponents = value._maxSuffixComponents self._keyLocator = ChangeCounter(KeyLocator(value.getKeyLocator())) self._exclude = ChangeCounter(Exclude(value.getExclude())) self._childSelector = value._childSelector self._mustBeFresh = value._mustBeFresh self._nonce = value.getNonce() self._interestLifetimeMilliseconds = value._interestLifetimeMilliseconds self._forwardingHint = ChangeCounter( DelegationSet(value.getForwardingHint())) self._linkWireEncoding = value._linkWireEncoding self._linkWireEncodingFormat = value._linkWireEncodingFormat self._link = ChangeCounter(None) if value._link.get() != None: self._link.set(Link(value._link.get())) self._selectedDelegationIndex = value._selectedDelegationIndex self._defaultWireEncoding = value.getDefaultWireEncoding() self._defaultWireEncodingFormat = value._defaultWireEncodingFormat self._content = value._content else: self._name = ChangeCounter( Name(value) if type(value) is Name else Name()) self._minSuffixComponents = None self._maxSuffixComponents = None self._keyLocator = ChangeCounter(KeyLocator()) self._exclude = ChangeCounter(Exclude()) self._childSelector = None self._mustBeFresh = True self._nonce = Blob() self._interestLifetimeMilliseconds = None self._forwardingHint = ChangeCounter(DelegationSet()) self._linkWireEncoding = Blob() self._linkWireEncodingFormat = None self._link = ChangeCounter(None) self._selectedDelegationIndex = None self._defaultWireEncoding = SignedBlob() self._defaultWireEncodingFormat = None self._content = Blob() self._getNonceChangeCount = 0 self._getDefaultWireEncodingChangeCount = 0 self._changeCount = 0 self._lpPacket = None
def _encryptAsymmetric(payload, key, keyName, params): """ Encrypt the payload using the asymmetric key according to params, and return an EncryptedContent. :param Blob payload: The data to encrypt. The size should be within range of the key. :param Blob key: The key value. :param Name keyName: The key name for the EncryptedContent key locator. :param EncryptParams params: The parameters for encryption. :return: A new EncryptedContent. :rtype: EncryptedContent """ algorithmType = params.getAlgorithmType() keyLocator = KeyLocator() keyLocator.setType(KeyLocatorType.KEYNAME) keyLocator.setKeyName(keyName) if (algorithmType == EncryptAlgorithmType.RsaPkcs or algorithmType == EncryptAlgorithmType.RsaOaep): encryptedPayload = RsaAlgorithm.encrypt(key, payload, params) result = EncryptedContent() result.setAlgorithmType(algorithmType) result.setKeyLocator(keyLocator) result.setPayload(encryptedPayload) return result else: raise RuntimeError("Unsupported encryption method")
def _encryptSymmetric(payload, key, keyName, params): """ Encrypt the payload using the symmetric key according to params, and return an EncryptedContent. :param Blob payload: The data to encrypt. :param Blob key: The key value. :param Name keyName: The key name for the EncryptedContent key locator. :param EncryptParams params: The parameters for encryption. :return: A new EncryptedContent. :rtype: EncryptedContent """ algorithmType = params.getAlgorithmType() initialVector = params.getInitialVector() keyLocator = KeyLocator() keyLocator.setType(KeyLocatorType.KEYNAME) keyLocator.setKeyName(keyName) if (algorithmType == EncryptAlgorithmType.AesCbc or algorithmType == EncryptAlgorithmType.AesEcb): if (algorithmType == EncryptAlgorithmType.AesCbc): if initialVector.size() != AesAlgorithm.BLOCK_SIZE: raise RuntimeError("incorrect initial vector size") encryptedPayload = AesAlgorithm.encrypt(key, payload, params) result = EncryptedContent() result.setAlgorithmType(algorithmType) result.setKeyLocator(keyLocator) result.setPayload(encryptedPayload) result.setInitialVector(initialVector) return result else: raise RuntimeError("Unsupported encryption method")
def setKeyLocator(self, keyLocator): """ Set this interest to use a copy of the given KeyLocator object. :note: You can also call getKeyLocator and change the key locator directly. :param KeyLocator keyLocator: The KeyLocator object. This makes a copy of the object. If no key locator is specified, set to a new default KeyLocator(), or to a KeyLocator with an unspecified type. :return: This Interest so that you can chain calls to update values. :rtype: Interest """ self._keyLocator.set( KeyLocator(keyLocator ) if type(keyLocator) is KeyLocator else KeyLocator()) self._changeCount += 1 return self
def __init__(self, value=None): if value == None: self._keyLocator = ChangeCounter(KeyLocator()) self._validityPeriod = ChangeCounter(ValidityPeriod()) self._signature = Blob() elif isinstance(value, Sha256WithEcdsaSignature): # Copy its values. self._keyLocator = ChangeCounter(KeyLocator(value.getKeyLocator())) self._validityPeriod = ChangeCounter( ValidityPeriod(value.getValidityPeriod())) self._signature = value._signature else: raise RuntimeError( "Unrecognized type for Sha256WithEcdsaSignature constructor: " + str(type(value))) self._changeCount = 0
def setKeyLocator(self, keyLocator): """ Set the key locator to a copy of the given keyLocator. :param KeyLocator keyLocator: The KeyLocator to copy. """ self._keyLocator.set(KeyLocator(keyLocator)) self._changeCount += 1
def clear(self): """ Set all the fields to indicate unspecified values. """ self._algorithmType = None self._keyLocator = KeyLocator() self._initialVector = Blob() self._payload = Blob() self._payloadKey = Blob()
def __init__(self, value=None): if isinstance(value, Interest): # Copy the values. self._name = ChangeCounter(Name(value.getName())) self._canBePrefix = value._canBePrefix self._hopLimit = value._hopLimit self._keyLocator = ChangeCounter(KeyLocator(value.getKeyLocator())) self._mustBeFresh = value._mustBeFresh self._nonce = value.getNonce() self._interestLifetimeMilliseconds = value._interestLifetimeMilliseconds self._forwardingHint = ChangeCounter( DelegationSet(value.getForwardingHint())) self._applicationParameters = value._applicationParameters self._linkWireEncoding = value._linkWireEncoding self._linkWireEncodingFormat = value._linkWireEncodingFormat self._link = ChangeCounter(None) if value._link.get() != None: self._link.set(Link(value._link.get())) self._selectedDelegationIndex = value._selectedDelegationIndex self._defaultWireEncoding = value.getDefaultWireEncoding() self._defaultWireEncodingFormat = value._defaultWireEncodingFormat else: self._name = ChangeCounter(Name(value)) self._canBePrefix = Interest._defaultCanBePrefix self._hopLimit = Interest._defaultHopLimit self._keyLocator = ChangeCounter(KeyLocator()) self._mustBeFresh = False self._nonce = Blob() self._interestLifetimeMilliseconds = None self._forwardingHint = ChangeCounter(DelegationSet()) self._applicationParameters = Blob() self._linkWireEncoding = Blob() self._linkWireEncodingFormat = None self._link = ChangeCounter(None) self._selectedDelegationIndex = None self._defaultWireEncoding = SignedBlob() self._defaultWireEncodingFormat = None self._getNonceChangeCount = 0 self._getDefaultWireEncodingChangeCount = 0 self._changeCount = 0 self._lpPacket = None
def __init__(self, value = None): if value == None: self._keyLocator = ChangeCounter(KeyLocator()) # self._validityPeriod = ChangeCounter(ValidityPeriod()) self._signature = Blob() elif isinstance(value, Sha256WithAbsSignature): # Copy its values. self._keyLocator = ChangeCounter(KeyLocator(value.getKeyLocator())) # self._validityPeriod = ChangeCounter(ValidityPeriod(value.getValidityPeriod())) self._signature = value._signature elif isinstance(value, GenericSignature): self.wireDecode(value.getSignatureInfoEncoding().toBuffer()) self._signature = value.getSignature() else: raise RuntimeError( "Unrecognized type for Sha256WithAbsSignature constructor: " + str(type(value))) self._changeCount = 0
def __init__(self, value=None): if isinstance(value, EncryptedContent): # Make a deep copy. self._algorithmType = value._algorithmType self._keyLocator = KeyLocator(value._keyLocator) self._initialVector = value._initialVector self._payload = value._payload self._payloadKey = value._payloadKey else: self.clear()
def wireDecode(self, wire): decoder = TlvDecoder(wire) beginOffset = decoder.getOffset() endOffset = decoder.readNestedTlvsStart(Tlv.SignatureInfo) signatureType = decoder.readNonNegativeIntegerTlv(Tlv.SignatureType) if signatureType != Tlv.SignatureType_Sha256WithAbsSignature: raise RuntimeError("Invalid SignatureType code: expected %d, got %d" % (Tlv.SignatureType_Sha256WithAbsSignature, signatureType)) keyLocator = KeyLocator() Tlv0_2WireFormat._decodeKeyLocator(Tlv.KeyLocator, keyLocator, decoder, True) self._keyLocator = ChangeCounter(keyLocator) # if decoder.peekType(Tlv.ValidityPeriod_ValidityPeriod, endOffset): # Tlv0_2WireFormat._decodeValidityPeriod( # signatureInfo.getValidityPeriod(), decoder) decoder.finishNestedTlvs(endOffset)
def requestIdentityBasedPrivateKey(self): """ Setup a local PKG only for this Device to be able to do initialization with a PKG. Set the KeyLocator to the ID of the requesting Device. Append the TemporaryMasterPublicKey to the Interest. Interest: Name: /ndn/no/ntnu/initDevice/<nonce>/<tempMasterPublicKey> Selector: KeyLocator = ID Send the Interest """ self.initRequestStart = time.clock() ID = self.deviceName.toUri() # Make each init unique with a session self.initSession = str(int(round(util.getNowMilliseconds() / 1000.0))) a = SymmetricCryptoAbstraction(self.presharedKey) message = {"ID": ID, "nonce": self.initSession} cipher = a.encrypt(str(message)) cipherEncoded = base64.b64encode(cipher) logging.info("Cipher encoded: " + str(cipherEncoded)) name = Name(self.baseName).append("pkg").append("initDevice").append( self.initSession) interest = Interest(name) # interest.setMinSuffixComponents(6) keyLocator = KeyLocator() keyLocator.setType(KeyLocatorType.KEYNAME) keyLocator.setKeyName(Name(self.deviceName).append(cipherEncoded)) interest.setKeyLocator(keyLocator) logging.info("Expressing interest name: " + name.toUri()) self.face.expressInterest(interest, self.onInitData, self.onTimeout)
"tap", "captureOk" ]: res = testPropertyRW(ForwardingFlags(), p, [True, False]) if not res[0]: print(res) # Interest # TODO: We do not check exclude because there is no equals() for it yet. # TODO: When passing None as the KeyLocator, it generates a blank KeyLocator object, so equivalence checks fail. Don't check None. # from pyndn.name import Name from pyndn.key_locator import KeyLocator from pyndn.exclude import Exclude from pyndn.interest import Interest for p in [("name", Name("yes"), Name("another")), ("minSuffixComponents", 4, None), ("maxSuffixComponents", 1, None), ("keyLocator", KeyLocator(), KeyLocator()), ("childSelector", 1, 0), ("mustBeFresh", 0, 1), ("nonce", Blob(), Blob()), ("interestLifetimeMilliseconds", 49, None)]: res = testPropertyRW(Interest(), p[0], [p[1], p[2]]) if not res[0]: print(res) # KeyLocator # from pyndn.name import Name from pyndn.util.blob import Blob from pyndn.key_locator import KeyLocator, KeyLocatorType for p in [("type", KeyLocatorType.KEYNAME, KeyLocatorType.KEY_LOCATOR_DIGEST), ("keyName", Name("yes"), Name("another")), ("keyData", Blob(), Blob())]: res = testPropertyRW(KeyLocator(), p[0], [p[1], p[2]]) if not res[0]: print(res)
# All boolean, so use shortcut below # from pyndn.forwarding_flags import ForwardingFlags for p in ["active", "childInherit", "advertise", "last", "capture", "local", "tap", "captureOk"]: res = testPropertyRW( ForwardingFlags(), p, [True, False] ) if not res[0]: print(res) # Interest # TODO: We do not check exclude because there is no equals() for it yet. # TODO: When passing None as the KeyLocator, it generates a blank KeyLocator object, so equivalence checks fail. Don't check None. # from pyndn.name import Name from pyndn.key_locator import KeyLocator from pyndn.exclude import Exclude from pyndn.interest import Interest for p in [("name", Name("yes"), Name("another")), ("minSuffixComponents", 4, None), ("maxSuffixComponents", 1, None), ("keyLocator", KeyLocator(), KeyLocator()),("childSelector", 1, 0), ("mustBeFresh", 0, 1), ("nonce", Blob(), Blob()), ("interestLifetimeMilliseconds", 49, None)]: res = testPropertyRW( Interest(), p[0], [p[1],p[2]]) if not res[0]: print(res) # KeyLocator # from pyndn.name import Name from pyndn.util.blob import Blob from pyndn.key_locator import KeyLocator, KeyLocatorType for p in [("type", KeyLocatorType.KEYNAME, KeyLocatorType.KEY_LOCATOR_DIGEST), ("keyName", Name("yes"), Name("another")), ("keyData", Blob(), Blob())]: res = testPropertyRW( KeyLocator(), p[0], [p[1],p[2]]) if not res[0]: print(res) # MetaInfo # TODO: Support FinalBlockId of None. #