ndn_Error ndn_Tlv0_2WireFormat_decodeLpPacket (struct ndn_LpPacket *lpPacket, const uint8_t *input, size_t inputLength) { struct ndn_TlvDecoder decoder; ndn_TlvDecoder_initialize(&decoder, input, inputLength); return ndn_decodeTlvLpPacket(lpPacket, &decoder); }
ndn_Error ndn_Tlv0_2WireFormat_decodeSignatureInfoAndValue (struct ndn_Signature *signature, const uint8_t *signatureInfo, size_t signatureInfoLength, const uint8_t *signatureValue, size_t signatureValueLength) { ndn_Error error; struct ndn_TlvDecoder decoder; ndn_TlvDecoder_initialize(&decoder, signatureInfo, signatureInfoLength); if ((error = ndn_decodeTlvSignatureInfo(signature, &decoder))) return error; ndn_TlvDecoder_initialize(&decoder, signatureValue, signatureValueLength); return ndn_TlvDecoder_readBlobTlv (&decoder, ndn_Tlv_SignatureValue, &signature->signature); }
ndn_Error ndn_Tlv0_2WireFormat_decodeEncryptedContent (struct ndn_EncryptedContent *encryptedContent, const uint8_t *input, size_t inputLength) { struct ndn_TlvDecoder decoder; ndn_TlvDecoder_initialize(&decoder, input, inputLength); return ndn_decodeTlvEncryptedContent(encryptedContent, &decoder); }
ndn_Error ndn_Tlv0_2WireFormat_decodeControlResponse (struct ndn_ControlResponse *controlResponse, const uint8_t *input, size_t inputLength) { struct ndn_TlvDecoder decoder; ndn_TlvDecoder_initialize(&decoder, input, inputLength); return ndn_decodeTlvControlResponse(controlResponse, &decoder); }
ndn_Error ndn_Tlv0_2WireFormat_decodeControlParameters (struct ndn_ControlParameters *controlParameters, const uint8_t *input, size_t inputLength) { struct ndn_TlvDecoder decoder; ndn_TlvDecoder_initialize(&decoder, input, inputLength); return ndn_decodeTlvControlParameters(controlParameters, &decoder); }
ndn_Error ndn_Tlv0_2WireFormat_decodeInterest (struct ndn_Interest *interest, const uint8_t *input, size_t inputLength, size_t *signedPortionBeginOffset, size_t *signedPortionEndOffset) { struct ndn_TlvDecoder decoder; ndn_TlvDecoder_initialize(&decoder, input, inputLength); return ndn_decodeTlvInterest (interest, signedPortionBeginOffset, signedPortionEndOffset, &decoder); }
ndn_Error ndn_Tlv0_2WireFormat_decodeDelegationSet_Delegation (struct ndn_DelegationSet_Delegation *delegation, const uint8_t *input, size_t inputLength, size_t *encodingLength) { struct ndn_TlvDecoder decoder; ndn_Error error; ndn_TlvDecoder_initialize(&decoder, input, inputLength); error = ndn_decodeTlvDelegationSet_Delegation(delegation, &decoder); *encodingLength = decoder.offset; return error; }
void Node::RegisterResponse::operator()(const ptr_lib::shared_ptr<const Interest>& interest, const ptr_lib::shared_ptr<Data>& responseData) { // Decode responseData->getContent() and check for a success code. // TODO: Move this into the TLV code. struct ndn_TlvDecoder decoder; ndn_TlvDecoder_initialize (&decoder, responseData->getContent().buf(), responseData->getContent().size()); ndn_Error error; size_t endOffset; if ((error = ndn_TlvDecoder_readNestedTlvsStart (&decoder, ndn_Tlv_NfdCommand_ControlResponse, &endOffset))) { _LOG_DEBUG ("Register prefix failed: Error decoding the NFD response: " << ndn_getErrorString(error)); info_->onRegisterFailed_(info_->prefix_); return; } uint64_t statusCode; if ((error = ndn_TlvDecoder_readNonNegativeIntegerTlv (&decoder, ndn_Tlv_NfdCommand_StatusCode, &statusCode))) { _LOG_DEBUG ("Register prefix failed: Error decoding the NFD response: " << ndn_getErrorString(error)); info_->onRegisterFailed_(info_->prefix_); return; } // Status code 200 is "OK". if (statusCode != 200) { _LOG_DEBUG ("Register prefix failed: Expected NFD status code 200, got: " << statusCode); info_->onRegisterFailed_(info_->prefix_); return; } _LOG_DEBUG("Register prefix succeeded with the NFD forwarder for prefix " << info_->prefix_->toUri()); }
ndn_Error ndn_encodeTlvSignatureInfo (const struct ndn_Signature *signatureInfo, struct ndn_TlvEncoder *encoder) { if (signatureInfo->type == ndn_SignatureType_Generic) { // Handle a Generic signature separately since it has the entire encoding. const struct ndn_Blob *encoding = &signatureInfo->signatureInfoEncoding; ndn_Error error; size_t endOffset; uint64_t signatureType; // Do a test decoding to sanity check that it is valid TLV. struct ndn_TlvDecoder decoder; ndn_TlvDecoder_initialize(&decoder, encoding->value, encoding->length); error = ndn_TlvDecoder_readNestedTlvsStart (&decoder, ndn_Tlv_SignatureInfo, &endOffset); if (!error) error = ndn_TlvDecoder_readNonNegativeIntegerTlv (&decoder, ndn_Tlv_SignatureType, &signatureType); if (!error) error = ndn_TlvDecoder_finishNestedTlvs(&decoder, endOffset); if (error) return NDN_ERROR_The_Generic_signature_encoding_is_not_a_valid_NDN_TLV_SignatureInfo; return ndn_TlvEncoder_writeArray(encoder, encoding->value, encoding->length); } if (signatureInfo->type == ndn_SignatureType_Sha256WithRsaSignature || signatureInfo->type == ndn_SignatureType_Sha256WithEcdsaSignature || signatureInfo->type == ndn_SignatureType_HmacWithSha256Signature) return ndn_TlvEncoder_writeNestedTlv (encoder, ndn_Tlv_SignatureInfo, encodeSignatureWithKeyLocatorAndValidityPeriodValue, signatureInfo, 0); else if (signatureInfo->type == ndn_SignatureType_DigestSha256Signature) return ndn_TlvEncoder_writeNestedTlv (encoder, ndn_Tlv_SignatureInfo, encodeDigestSha256Value, signatureInfo, 0); else return NDN_ERROR_encodeSignatureInfo_unrecognized_SignatureType; }