Packet Signing & Key Verification Stage: Start
diff --git a/Makefile b/Makefile
index f9d826c..8eaca94 100644
--- a/Makefile
+++ b/Makefile
@@ -5,7 +5,7 @@
 PROGRAMS = nlsrc nlsr
 INSTALL_PATH=/usr/local/bin/
 
-NLSR_SRCS=nlsr.c nlsr_ndn.c nlsr_npl.c  nlsr_adl.c nlsr_lsdb.c nlsr_route.c nlsr_npt.c nlsr_fib.c nlsr_sync.c  nlsr_face.c utility.c
+NLSR_SRCS=nlsr.c nlsr_ndn.c nlsr_npl.c  nlsr_adl.c nlsr_lsdb.c nlsr_route.c nlsr_npt.c nlsr_fib.c nlsr_sync.c  nlsr_face.c nlsr_km.c nlsr_km_util.c utility.c
 NLSRC_SRCS=nlsrc.c
 
 all: $(PROGRAMS)
diff --git a/nlsr_ndn.c b/nlsr_ndn.c
index 64caae8..e4b1378 100644
--- a/nlsr_ndn.c
+++ b/nlsr_ndn.c
@@ -23,27 +23,10 @@
 #include "nlsr_adl.h"
 #include "nlsr_lsdb.h"
 #include "utility.h"
+#include "nlsr_km.h"
+#include "nlsr_km_util.h"
 
-/**
-* add lifetime in second to a interest template
-*/
-int
-appendLifetime(struct ccn_charbuf *cb, int lifetime) 
-{
-	unsigned char buf[sizeof(int32_t)];
-	int32_t dreck = lifetime << 12;
-	int pos = sizeof(int32_t);
-	int res = 0;
-	while (dreck > 0 && pos > 0) 
-	{
-		pos--;
-		buf[pos] = dreck & 255;
-		dreck = dreck >> 8;
-	}
-	res |= ccnb_append_tagged_blob(cb, CCN_DTAG_InterestLifetime, buf+pos, 
-															sizeof(buf)-pos);
-	return res;
-}
+
 
 /**
 * get neighbor name prefix from interest/content name and put into nbr
@@ -307,20 +290,6 @@
 		struct ccn_signing_params sp=CCN_SIGNING_PARAMS_INIT;
 		sp.template_ccnb=ccn_charbuf_create();		
 				
-		/*ccn_charbuf_append_tt(sp.template_ccnb, CCN_DTAG_SignedInfo, CCN_DTAG);
-		ccn_charbuf_append_tt(sp.template_ccnb, CCN_DTAG_KeyLocator, CCN_DTAG);
-		ccn_charbuf_append_tt(sp.template_ccnb, CCN_DTAG_KeyName, CCN_DTAG);
-		ccn_charbuf_append_charbuf(sp.template_ccnb, name);
-		ccn_charbuf_append_closer(sp.template_ccnb);
-		ccn_charbuf_append_closer(sp.template_ccnb);
-		ccn_charbuf_append_closer(sp.template_ccnb);
-
-		sp.sp_flags |= CCN_SP_TEMPL_KEY_LOCATOR;
-		sp.sp_flags |= CCN_SP_FINAL_BLOCK;
-		sp.type = CCN_CONTENT_KEY;
-		sp.freshness = 10;
-		*/
-		
 		ccn_charbuf_append_tt(sp.template_ccnb,CCN_DTAG_SignedInfo, CCN_DTAG);
 		ccnb_tagged_putf(sp.template_ccnb, CCN_DTAG_FreshnessSeconds, "%ld", 10);
        	 	sp.sp_flags |= CCN_SP_TEMPL_FRESHNESS;
@@ -418,33 +387,41 @@
 
 	    break;
         case CCN_UPCALL_INTEREST_TIMED_OUT:
-		//printf("Interest Timed Out Received for Name: ");
-		if ( nlsr->debugging )
-			printf("Interest Timed Out Received for Name:  "); 
-		if ( nlsr->detailed_logging )
-			writeLogg(__FILE__,__FUNCTION__,__LINE__,"Interest Timed Out Receiv"
+			//printf("Interest Timed Out Received for Name: ");
+			if ( nlsr->debugging )
+				printf("Interest Timed Out Received for Name:  "); 
+			if ( nlsr->detailed_logging )
+				writeLogg(__FILE__,__FUNCTION__,__LINE__,"Interest Timed Out Receiv"
 															"ed for Name: ");
 		
-		struct ccn_charbuf*ito;
-		ito=ccn_charbuf_create();
-		ccn_uri_append(ito,info->interest_ccnb,info->pi->offset[CCN_PI_E],0);
-		if ( nlsr->debugging )
-			printf("%s\n",ccn_charbuf_as_string(ito));
-		if ( nlsr->detailed_logging )
-			writeLogg(__FILE__,__FUNCTION__,__LINE__,"%s\n",ccn_charbuf_as_string(ito));
-		ccn_charbuf_destroy(&ito);
+			struct ccn_charbuf*ito;
+			ito=ccn_charbuf_create();
+			ccn_uri_append(ito,info->interest_ccnb,info->pi->offset[CCN_PI_E],0);
+			if ( nlsr->debugging )
+				printf("%s\n",ccn_charbuf_as_string(ito));
+			if ( nlsr->detailed_logging )
+				writeLogg(__FILE__,__FUNCTION__,__LINE__,"%s\n",ccn_charbuf_as_string(ito));
+			ccn_charbuf_destroy(&ito);
 
-		
-
-		process_incoming_timed_out_interest(selfp,info);
+			process_incoming_timed_out_interest(selfp,info);
 
 	    break;
+
+		case CCN_UPCALL_CONTENT_UNVERIFIED:
+			if ( nlsr->debugging )
+				printf("Unverified Content Received ..Waiting for verification\n");
+			if ( nlsr->detailed_logging )
+				writeLogg(__FILE__,__FUNCTION__,__LINE__,"Unverified Content"
+										" Received ..Waiting for verification\n");
+			return CCN_UPCALL_RESULT_VERIFY;
+	    break;
+
         default:
             fprintf(stderr, "Unexpected response of kind %d\n", kind);
-	    if ( nlsr->debugging )
-			printf("Unexpected response of kind %d\n", kind);
-	    if ( nlsr->detailed_logging )
-			writeLogg(__FILE__,__FUNCTION__,__LINE__,"Unexpected response of "
+	    		if ( nlsr->debugging )
+				printf("Unexpected response of kind %d\n", kind);
+	    		if ( nlsr->detailed_logging )
+				writeLogg(__FILE__,__FUNCTION__,__LINE__,"Unexpected response of "
 															"kind %d\n", kind);
 	    break;
     }
@@ -518,20 +495,6 @@
 								"ghbor: %s Length:%d\n",nbr->name,nbr->length);
 
 
-	if ( contain_key_name(info->content_ccnb, info->pco) == 1)
-	{
-		struct ccn_charbuf *key_name=get_key_name(info->content_ccnb, info->pco);
-		struct ccn_charbuf *key_uri = ccn_charbuf_create();
-		ccn_uri_append(key_uri, key_name->buf, key_name->length, 1);
-
-		if(nlsr->debugging)
-			printf("Key Name: %s\n",ccn_charbuf_as_string(key_uri));
-
-		ccn_charbuf_destroy(&key_uri);
-		ccn_charbuf_destroy(&key_name);
-
-
-	}
 
 	update_adjacent_timed_out_zero_to_adl(nbr);	
 	update_adjacent_status_to_adl(nbr,NBR_ACTIVE);
@@ -801,40 +764,3 @@
 	ccn_charbuf_destroy(&name);
 	free(int_name);
 }
-
-/**
-* Check whether content name contains a key name. Return 1 for containing
-*/
-
-int
-contain_key_name(const unsigned char *ccnb, struct ccn_parsed_ContentObject *pco) 
-{
-	if (pco->offset[CCN_PCO_B_KeyLocator] == pco->offset[CCN_PCO_E_KeyLocator])
-		return -1;
-
-	struct ccn_buf_decoder decoder;
-	struct ccn_buf_decoder *d;
-	d = ccn_buf_decoder_start(&decoder, ccnb + 
-		pco->offset[CCN_PCO_B_Key_Certificate_KeyName], 
-		pco->offset[CCN_PCO_E_Key_Certificate_KeyName] - 
-		pco->offset[CCN_PCO_B_Key_Certificate_KeyName]);
-	if (ccn_buf_match_dtag(d, CCN_DTAG_KeyName))
-		return 1;
-
-	return -1;
-}
-
-/**
-* Extract Key Name from Content Name and return the Key Name
-*
-*/
-
-struct ccn_charbuf *
-get_key_name(const unsigned char *ccnb, struct ccn_parsed_ContentObject *pco) 
-{
-	struct ccn_charbuf *key_name = ccn_charbuf_create();
-	ccn_charbuf_append(key_name, ccnb + pco->offset[CCN_PCO_B_KeyName_Name], 
-	pco->offset[CCN_PCO_E_KeyName_Name] - pco->offset[CCN_PCO_B_KeyName_Name]);
-
-	return key_name;
-}
diff --git a/nlsr_ndn.h b/nlsr_ndn.h
index b7b7725..c254793 100644
--- a/nlsr_ndn.h
+++ b/nlsr_ndn.h
@@ -21,8 +21,5 @@
 int send_info_interest(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags);
 void send_info_interest_to_neighbor(struct name_prefix *nbr);
 
-struct ccn_charbuf * get_key_name(const unsigned char *ccnb, struct ccn_parsed_ContentObject *pco);
-int contain_key_name(const unsigned char *ccnb, struct ccn_parsed_ContentObject *pco);
-
 
 #endif
diff --git a/nlsr_sync.c b/nlsr_sync.c
index f2d390b..53652b5 100644
--- a/nlsr_sync.c
+++ b/nlsr_sync.c
@@ -29,9 +29,10 @@
 #include "nlsr_sync.h"
 #include "nlsr_lsdb.h"
 #include "utility.h"
+#include "nlsr_km.h"
 
 
-	char *
+char *
 hex_string(unsigned char *s, size_t l)
 {
 	const char *hex_digits = "0123456789abcdef";
@@ -45,7 +46,7 @@
 	return(r);
 }
 
-	int
+int
 sync_cb(struct ccns_name_closure *nc,
 		struct ccn_charbuf *lhash,
 		struct ccn_charbuf *rhash,
@@ -116,16 +117,12 @@
 
 
 
-	void
+void
 get_name_part(struct name_prefix *name_part,struct ccn_charbuf * interest_ccnb, 
 		struct ccn_indexbuf *interest_comps, int offset)
 {
-	//int i;
 	int lsa_position=0;
-	//int len=0;
-
-	//struct ccn_indexbuf cid={0};
-	//struct ccn_indexbuf *components=&cid;
+	
 	struct ccn_indexbuf *components=ccn_indexbuf_create();
 	struct ccn_charbuf *name=ccn_charbuf_create();
 	ccn_name_from_uri(name,nlsr->slice_prefix);
@@ -153,40 +150,6 @@
 	if ( nlsr->debugging )
 		printf("Name Part: %s \n",name_part->name);
 	
-
-	/*
-	const unsigned char *comp_ptr1;
-	size_t comp_size;
-	for(i=lsa_position+1+offset;i<interest_comps->n-1;i++)
-	{
-		ccn_name_comp_get(interest_ccnb->buf, interest_comps,i,&comp_ptr1, 
-				&comp_size);
-		len+=1;
-		len+=(int)comp_size;	
-	}
-	len++;
-
-	char *neighbor=(char *)malloc(len);
-	memset(neighbor,0,len);
-
-	for(i=lsa_position+1+offset; i<interest_comps->n-1;i++)
-	{
-		ccn_name_comp_get(interest_ccnb->buf, interest_comps,i,&comp_ptr1, 
-				&comp_size);
-		memcpy(neighbor+strlen(neighbor),"/",1);
-		memcpy(neighbor+strlen(neighbor),(char *)comp_ptr1,
-				strlen((char *)comp_ptr1));
-
-	}
-
-	name_part->name=(char *)malloc(strlen(neighbor)+1);
-	memset(name_part->name,0,strlen(neighbor)+1);
-	memcpy(name_part->name,neighbor,strlen(neighbor)+1);
-	name_part->length=strlen(neighbor)+1;
-
-	// Add 01/31/2013
-	free(neighbor);
-	*/
 }
 
 
@@ -272,7 +235,7 @@
 	ccn_charbuf_destroy(&name);   
 }
 
-	void 
+void 
 process_incoming_sync_content_lsa( unsigned char *content_data)
 {
 
diff --git a/utility.c b/utility.c
index 6a7cb0c..ece8dea 100644
--- a/utility.c
+++ b/utility.c
@@ -297,4 +297,27 @@
 }
 
 
+int 
+add_ccn_uri_name(struct ccn_charbuf *res_name, struct ccn_charbuf *add){
+
+	int i, res;
+	struct ccn_indexbuf *idx=ccn_indexbuf_create();
+	res=ccn_name_split(add,idx);	
+	if ( res < 0 ){
+		ccn_indexbuf_destroy(&idx);
+		return -1;
+	}
+
+	const unsigned char *comp_ptr1;
+	size_t comp_size;
+	for(i=0;i<idx->n-1;i++){
+		ccn_name_comp_get(add->buf,idx,i,&comp_ptr1, &comp_size);
+		ccn_name_append_str(res_name,(char *)comp_ptr1);
+	}
+	ccn_indexbuf_destroy(&idx);
+
+	return 0;
+
+}
+
 
diff --git a/utility.h b/utility.h
index bbca9f6..e681a0e 100644
--- a/utility.h
+++ b/utility.h
@@ -12,4 +12,7 @@
 struct sockaddr_in * get_ip_from_hostname(char *hostname);
 int get_ip_from_hostname_02(char * hostname , char* ip);
 char * get_current_timestamp_micro_v2();
+
+int add_ccn_uri_name(struct ccn_charbuf *res_name, struct ccn_charbuf *add);
+
 #endif