mirror of
				https://github.com/yggdrasil-network/yggdrasil-go.git
				synced 2025-11-04 11:15:07 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			62 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include "yggdrasil-brute.h"
 | 
						|
 | 
						|
int find_where(unsigned char hash[64], unsigned char besthashlist[NUMKEYS][64]) {
 | 
						|
	/* Where to insert hash into sorted hashlist */
 | 
						|
	int j;
 | 
						|
	int where = -1;
 | 
						|
	for (j = 0; j < NUMKEYS; ++j) {
 | 
						|
		if (memcmp(hash, besthashlist[j], 64) > 0) ++where;
 | 
						|
		else break;
 | 
						|
	}
 | 
						|
	return where;
 | 
						|
}
 | 
						|
 | 
						|
void insert_64(unsigned char itemlist[NUMKEYS][64], unsigned char item[64], int where) {
 | 
						|
	int j;
 | 
						|
	for (j = 0; j < where; ++j) {
 | 
						|
		memcpy(itemlist[j], itemlist[j+1], 64);
 | 
						|
	}
 | 
						|
	memcpy(itemlist[where], item, 64);
 | 
						|
}
 | 
						|
 | 
						|
void insert_32(unsigned char itemlist[NUMKEYS][32], unsigned char item[32], int where) {
 | 
						|
	int j;
 | 
						|
	for (j = 0; j < where; ++j) {
 | 
						|
		memcpy(itemlist[j], itemlist[j+1], 32);
 | 
						|
	}
 | 
						|
	memcpy(itemlist[where], item, 32);
 | 
						|
}
 | 
						|
 | 
						|
void make_addr(unsigned char addr[32], unsigned char hash[64]) {
 | 
						|
	/* Public key hash to yggdrasil ipv6 address */
 | 
						|
	int i;
 | 
						|
	int offset;
 | 
						|
	unsigned char mask;
 | 
						|
	unsigned char c;
 | 
						|
	int ones = 0;
 | 
						|
	unsigned char br = 0; /* false */
 | 
						|
	for (i = 0; i < 64 && !br; ++i) {
 | 
						|
		mask = 128;
 | 
						|
		c = hash[i];
 | 
						|
		while (mask) {
 | 
						|
			if (c & mask) {
 | 
						|
				++ones;
 | 
						|
			} else {
 | 
						|
				br = 1; /* true */
 | 
						|
				break;
 | 
						|
			}
 | 
						|
			mask >>= 1;
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	addr[0] = 2;
 | 
						|
	addr[1] = ones;
 | 
						|
 | 
						|
	offset = ones + 1;
 | 
						|
	for (i = 0; i < 14; ++i) {
 | 
						|
		c = hash[offset/8] << (offset%8);
 | 
						|
		c |= hash[offset/8 + 1] >> (8 - offset%8);
 | 
						|
		addr[i + 2] = c;
 | 
						|
		offset += 8;
 | 
						|
	}
 | 
						|
}
 |