mirror of
				https://github.com/PurpleI2P/i2pd.git
				synced 2025-11-04 08:30:46 +00:00 
			
		
		
		
	AEAD/ChaCha20/Poly1305 test added
This commit is contained in:
		
							parent
							
								
									df60e78766
								
							
						
					
					
						commit
						6b9061515f
					
				
					 3 changed files with 68 additions and 3 deletions
				
			
		| 
						 | 
					@ -1073,10 +1073,23 @@ namespace crypto
 | 
				
			||||||
		memcpy (buf, msg, msgLen);
 | 
							memcpy (buf, msg, msgLen);
 | 
				
			||||||
		chacha20 (buf, msgLen, nonce, key, 1);
 | 
							chacha20 (buf, msgLen, nonce, key, 1);
 | 
				
			||||||
		// create Poly1305 message
 | 
							// create Poly1305 message
 | 
				
			||||||
		std::vector<uint8_t> polyMsg(adLen + msgLen + 16);
 | 
							std::vector<uint8_t> polyMsg(adLen + msgLen + 3*16);
 | 
				
			||||||
		size_t offset = 0;	
 | 
							size_t offset = 0;	
 | 
				
			||||||
		memcpy (polyMsg.data (), ad, adLen); offset += adLen;
 | 
							uint8_t padding[16]; memset (padding, 0, 16);
 | 
				
			||||||
 | 
							memcpy (polyMsg.data (), ad, adLen); offset += adLen; // additional authenticated data
 | 
				
			||||||
 | 
							auto rem = adLen & 0x0F; // %16
 | 
				
			||||||
 | 
							if (rem) 
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								// padding1
 | 
				
			||||||
 | 
								memcpy (polyMsg.data () + offset, padding, rem); offset += rem;	
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		memcpy (polyMsg.data () + offset, buf, msgLen); offset += msgLen; // encrypted data
 | 
							memcpy (polyMsg.data () + offset, buf, msgLen); offset += msgLen; // encrypted data
 | 
				
			||||||
 | 
							rem = msgLen & 0x0F; // %16
 | 
				
			||||||
 | 
							if (rem) 
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								// padding2
 | 
				
			||||||
 | 
								memcpy (polyMsg.data () + offset, padding, rem); offset += rem;	
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		htole64buf (polyMsg.data () + offset, adLen); offset += 8;			
 | 
							htole64buf (polyMsg.data () + offset, adLen); offset += 8;			
 | 
				
			||||||
		htole64buf (polyMsg.data () + offset, msgLen); offset += 8;
 | 
							htole64buf (polyMsg.data () + offset, msgLen); offset += 8;
 | 
				
			||||||
		// calculate Poly1305 tag and write in after encrypted data		
 | 
							// calculate Poly1305 tag and write in after encrypted data		
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
CXXFLAGS += -Wall -Wextra -pedantic -O0 -g -std=c++11 -D_GLIBCXX_USE_NANOSLEEP=1 -I../libi2pd/ -pthread -Wl,--unresolved-symbols=ignore-in-object-files
 | 
					CXXFLAGS += -Wall -Wextra -pedantic -O0 -g -std=c++11 -D_GLIBCXX_USE_NANOSLEEP=1 -I../libi2pd/ -pthread -Wl,--unresolved-symbols=ignore-in-object-files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TESTS = test-gost test-gost-sig test-base-64 test-x25519
 | 
					TESTS = test-gost test-gost-sig test-base-64 test-x25519 test-aeadchacha20poly1305
 | 
				
			||||||
 | 
					
 | 
				
			||||||
all: $(TESTS) run
 | 
					all: $(TESTS) run
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,9 @@ test-gost-sig: ../libi2pd/Gost.cpp ../libi2pd/I2PEndian.cpp ../libi2pd/Crypto.cp
 | 
				
			||||||
test-x25519: ../libi2pd/Ed25519.cpp ../libi2pd/I2PEndian.cpp ../libi2pd/Log.cpp ../libi2pd/Crypto.cpp  test-x25519.cpp
 | 
					test-x25519: ../libi2pd/Ed25519.cpp ../libi2pd/I2PEndian.cpp ../libi2pd/Log.cpp ../libi2pd/Crypto.cpp  test-x25519.cpp
 | 
				
			||||||
	$(CXX) $(CXXFLAGS) $(NEEDED_CXXFLAGS) $(INCFLAGS) -o $@ $^ -lcrypto -lssl -lboost_system
 | 
						$(CXX) $(CXXFLAGS) $(NEEDED_CXXFLAGS) $(INCFLAGS) -o $@ $^ -lcrypto -lssl -lboost_system
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test-aeadchacha20poly1305: ../libi2pd/Crypto.cpp ../libi2pd/ChaCha20.cpp ../libi2pd/Poly1305.cpp test-aeadchacha20poly1305.cpp
 | 
				
			||||||
 | 
						 $(CXX) $(CXXFLAGS) $(NEEDED_CXXFLAGS) $(INCFLAGS) -o $@ $^ -lcrypto -lssl -lboost_system
 | 
				
			||||||
 | 
					
 | 
				
			||||||
run: $(TESTS)
 | 
					run: $(TESTS)
 | 
				
			||||||
	@for TEST in $(TESTS); do ./$$TEST ; done
 | 
						@for TEST in $(TESTS); do ./$$TEST ; done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										49
									
								
								tests/test-aeadchacha20poly1305.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								tests/test-aeadchacha20poly1305.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,49 @@
 | 
				
			||||||
 | 
					#include <cassert>
 | 
				
			||||||
 | 
					#include <inttypes.h>
 | 
				
			||||||
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "Crypto.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					char text[] = "Ladies and Gentlemen of the class of '99: If I could offer you "
 | 
				
			||||||
 | 
					"only one tip for the future, sunscreen would be it."; // 114 bytes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint8_t key[32] = 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
 | 
				
			||||||
 | 
					    0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint8_t ad[12] = 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    0x50, 0x51, 0x52, 0x53, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint8_t nonce[12] = 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						0x07, 0x00, 0x00, 0x00, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint8_t tag[16] = 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						0x1a, 0xe1, 0x0b, 0x59, 0x4f, 0x09, 0xe2, 0x6a, 0x7e, 0x90, 0x2e, 0xcb, 0xd0, 0x60, 0x06, 0x91
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint8_t encrypted[114] = 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    0xd3, 0x1a, 0x8d, 0x34, 0x64, 0x8e, 0x60, 0xdb, 0x7b, 0x86, 0xaf, 0xbc, 0x53, 0xef, 0x7e, 0xc2,
 | 
				
			||||||
 | 
					    0xa4, 0xad, 0xed, 0x51, 0x29, 0x6e, 0x08, 0xfe, 0xa9, 0xe2, 0xb5, 0xa7, 0x36, 0xee, 0x62, 0xd6,
 | 
				
			||||||
 | 
					    0x3d, 0xbe, 0xa4, 0x5e, 0x8c, 0xa9, 0x67, 0x12, 0x82, 0xfa, 0xfb, 0x69, 0xda, 0x92, 0x72, 0x8b,
 | 
				
			||||||
 | 
					    0x1a, 0x71, 0xde, 0x0a, 0x9e, 0x06, 0x0b, 0x29, 0x05, 0xd6, 0xa5, 0xb6, 0x7e, 0xcd, 0x3b, 0x36,
 | 
				
			||||||
 | 
					    0x92, 0xdd, 0xbd, 0x7f, 0x2d, 0x77, 0x8b, 0x8c, 0x98, 0x03, 0xae, 0xe3, 0x28, 0x09, 0x1b, 0x58,
 | 
				
			||||||
 | 
					    0xfa, 0xb3, 0x24, 0xe4, 0xfa, 0xd6, 0x75, 0x94, 0x55, 0x85, 0x80, 0x8b, 0x48, 0x31, 0xd7, 0xbc,
 | 
				
			||||||
 | 
					    0x3f, 0xf4, 0xde, 0xf0, 0x8e, 0x4b, 0x7a, 0x9d, 0xe5, 0x76, 0xd2, 0x65, 0x86, 0xce, 0xc6, 0x4b,
 | 
				
			||||||
 | 
					    0x61, 0x16
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main ()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						uint8_t buf[114+16];
 | 
				
			||||||
 | 
						i2p::crypto::AEADChaCha20Poly1305Encrypt ((uint8_t *)text, 114, ad, 12, key, nonce, buf, 114 + 16);
 | 
				
			||||||
 | 
						assert (memcmp (buf, encrypted, 114) == 0);
 | 
				
			||||||
 | 
						assert(memcmp (buf + 114, tag, 16) == 0);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue