mirror of
				https://github.com/PurpleI2P/i2pd.git
				synced 2025-11-04 08:30:46 +00:00 
			
		
		
		
	send offline signature in streaming
This commit is contained in:
		
							parent
							
								
									72a239838e
								
							
						
					
					
						commit
						636fc633d4
					
				
					 2 changed files with 12 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -589,7 +589,7 @@ namespace data
 | 
			
		|||
		int num = tunnels.size ();
 | 
			
		||||
		if (num > MAX_NUM_LEASES) num = MAX_NUM_LEASES;
 | 
			
		||||
		m_BufferLen = identity->GetFullLen () + 4/*published*/ + 2/*expires*/ + 2/*flag*/ + 2/*properties len*/ +
 | 
			
		||||
			1/*num keys*/ + 2/*key type*/ + 2/*key len*/ + keyLen/*key*/ + 1/*num leases*/ + num*LEASE2_SIZE + identity->GetSignatureLen ();
 | 
			
		||||
			1/*num keys*/ + 2/*key type*/ + 2/*key len*/ + keyLen/*key*/ + 1/*num leases*/ + num*LEASE2_SIZE + keys.GetSignatureLen ();
 | 
			
		||||
		uint16_t flags = 0;
 | 
			
		||||
		if (keys.IsOfflineSignature ()) 
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -482,19 +482,28 @@ namespace stream
 | 
			
		|||
					uint16_t flags = PACKET_FLAG_SYNCHRONIZE | PACKET_FLAG_FROM_INCLUDED |
 | 
			
		||||
						PACKET_FLAG_SIGNATURE_INCLUDED | PACKET_FLAG_MAX_PACKET_SIZE_INCLUDED;
 | 
			
		||||
					if (isNoAck) flags |= PACKET_FLAG_NO_ACK;
 | 
			
		||||
					bool isOfflineSignature = m_LocalDestination.GetOwner ()->GetPrivateKeys ().IsOfflineSignature ();
 | 
			
		||||
					if (isOfflineSignature) flags |= PACKET_FLAG_OFFLINE_SIGNATURE;
 | 
			
		||||
					htobe16buf (packet + size, flags);
 | 
			
		||||
					size += 2; // flags
 | 
			
		||||
					size_t identityLen = m_LocalDestination.GetOwner ()->GetIdentity ()->GetFullLen ();
 | 
			
		||||
					size_t signatureLen = m_LocalDestination.GetOwner ()->GetIdentity ()->GetSignatureLen ();
 | 
			
		||||
					htobe16buf (packet + size, identityLen + signatureLen + 2); // identity + signature + packet size
 | 
			
		||||
					size_t signatureLen = m_LocalDestination.GetOwner ()->GetPrivateKeys ().GetSignatureLen ();
 | 
			
		||||
					uint8_t * optionsSize = packet + size; // set options size later	
 | 
			
		||||
					size += 2; // options size
 | 
			
		||||
					m_LocalDestination.GetOwner ()->GetIdentity ()->ToBuffer (packet + size, identityLen);
 | 
			
		||||
					size += identityLen; // from
 | 
			
		||||
					htobe16buf (packet + size, STREAMING_MTU);
 | 
			
		||||
					size += 2; // max packet size
 | 
			
		||||
					if (isOfflineSignature)
 | 
			
		||||
					{
 | 
			
		||||
						const auto& offlineSignature = m_LocalDestination.GetOwner ()->GetPrivateKeys ().GetOfflineSignature ();
 | 
			
		||||
						memcpy (packet + size, offlineSignature.data (), offlineSignature.size ());
 | 
			
		||||
						size += offlineSignature.size (); // offline signature
 | 
			
		||||
					}
 | 
			
		||||
					uint8_t * signature = packet + size; // set it later
 | 
			
		||||
					memset (signature, 0, signatureLen); // zeroes for now
 | 
			
		||||
					size += signatureLen; // signature
 | 
			
		||||
					htobe16buf (optionsSize, packet + size - optionsSize); // actual options size
 | 
			
		||||
					size += m_SendBuffer.Get (packet + size, STREAMING_MTU - size); // payload
 | 
			
		||||
					m_LocalDestination.GetOwner ()->Sign (packet, size, signature);
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue