Removal of old implementation of multihash
This commit is contained in:
parent
466bfe3fa4
commit
7b218a620a
2 changed files with 0 additions and 240 deletions
|
@ -1,61 +0,0 @@
|
||||||
/**
|
|
||||||
* An implementation of the multihash protocol in C
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __LIBP2P_MULTIHASH_H
|
|
||||||
#define __LIBP2P_MULTIHASH_H
|
|
||||||
|
|
||||||
#define MULTIHASH_SHA1 0x11
|
|
||||||
#define MULTIHASH_SHA2_256 0x12
|
|
||||||
#define MULTIHASH_SHA2_512 0x13
|
|
||||||
#define MULTIHASH_SHA3_512 0x14
|
|
||||||
#define MULTIHASH_SHA3_384 0x15
|
|
||||||
#define MULTIHASH_SHA3_256 0x16
|
|
||||||
#define MULTIHASH_SHA3_224 0x17
|
|
||||||
#define MULTIHASH_SHAKE_128 0x18
|
|
||||||
#define MULTIHASH_SHAKE_256 0x19
|
|
||||||
#define MULTIHASH_BLAKE2B 0x20
|
|
||||||
#define MULTIHASH_BLAKE2S 0x21
|
|
||||||
|
|
||||||
struct MultiHash {
|
|
||||||
char fn_code;
|
|
||||||
char size;
|
|
||||||
unsigned char* data;
|
|
||||||
};
|
|
||||||
|
|
||||||
char* libp2p_multihash_get_fn_name(char fn_code);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* encodes the multihash into a hex string
|
|
||||||
*/
|
|
||||||
int libp2p_multihash_hex_string(struct MultiHash* hash, char* string, int max_length);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* decodes a hex string into a multihash
|
|
||||||
*/
|
|
||||||
int libp2p_multihash_from_hex_string(char* string, int length, struct MultiHash* hash);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* turns a multihash into a b58 string
|
|
||||||
* @param hash the Multihash to encode
|
|
||||||
* @param binary_buffer the buffer to fill
|
|
||||||
* @param max_length the size of the buffer
|
|
||||||
* @returns true(1) on success
|
|
||||||
*/
|
|
||||||
int libp2p_multihash_to_b58(struct MultiHash* hash, unsigned char* binary_buffer, size_t max_length);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* turns a base58 encoded string into a MultiHash
|
|
||||||
* @param b58_string the base58 encoded string
|
|
||||||
* @param b58_string_length the length of the encoded string
|
|
||||||
* @param hash the MultiHash to fill
|
|
||||||
* @returns true(1) on success
|
|
||||||
*/
|
|
||||||
int libp2p_b58_to_multihash(unsigned char* b58_string, size_t b58_string_length, struct MultiHash* hash);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* retrieve the size required for the multihash that is embedded in the base58 encoded string
|
|
||||||
*/
|
|
||||||
size_t libp2p_multihash_b58_size(unsigned char* b58_string);
|
|
||||||
|
|
||||||
#endif /* multihash_h */
|
|
|
@ -1,179 +0,0 @@
|
||||||
#include "../include/libp2p/multihash_old/multihash.h"
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "libp2p/crypto/encoding/base58.h"
|
|
||||||
|
|
||||||
|
|
||||||
char* libp2p_multihash_get_fn_name(char fn_code) {
|
|
||||||
switch(fn_code) {
|
|
||||||
case (0x11):
|
|
||||||
return "sha1";
|
|
||||||
case(0x12):
|
|
||||||
return "sha2-256";
|
|
||||||
case(0x13):
|
|
||||||
return "sha2-512";
|
|
||||||
case(0x14):
|
|
||||||
return "sha3-512";
|
|
||||||
case(0x15):
|
|
||||||
return "sha3-384";
|
|
||||||
case(0x16):
|
|
||||||
return "sha3-256";
|
|
||||||
case(0x17):
|
|
||||||
return "sha3-224";
|
|
||||||
case(0x18):
|
|
||||||
return "shake-128";
|
|
||||||
case(0x19):
|
|
||||||
return "shake-256";
|
|
||||||
case(0x20):
|
|
||||||
return "blake2b";
|
|
||||||
case(0x21):
|
|
||||||
return "blake2s";
|
|
||||||
}
|
|
||||||
return 0x00;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* helper function to convert a char string to a byte
|
|
||||||
* @param s the string (only grabs the first character)
|
|
||||||
* @returns the value of the char
|
|
||||||
*/
|
|
||||||
unsigned char from_hex_to_char(const char* s) {
|
|
||||||
// make sure there is a null in position 3
|
|
||||||
char buff[3];
|
|
||||||
buff[0] = s[0];
|
|
||||||
buff[1] = s[1];
|
|
||||||
buff[2] = 0;
|
|
||||||
char* ptr = &buff[2];
|
|
||||||
return strtoul(buff, &ptr, 16);
|
|
||||||
}
|
|
||||||
|
|
||||||
/***
|
|
||||||
* convert a MultiHash into a byte array
|
|
||||||
* @param hash the MultiHash to convert
|
|
||||||
* @param results the resultant byte array
|
|
||||||
* @param max_length the maximum length of the byte array
|
|
||||||
* @returns true(1) on success
|
|
||||||
*/
|
|
||||||
int from_multihash_to_byte_array(struct MultiHash* hash, unsigned char* results, size_t max_length) {
|
|
||||||
// what size is needed?
|
|
||||||
int required_size = hash->size + 2;
|
|
||||||
|
|
||||||
if (required_size < max_length)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
results[0] = hash->fn_code;
|
|
||||||
results[1] = hash->size;
|
|
||||||
|
|
||||||
// now copy in the data
|
|
||||||
for(int i = 0; i < hash->size; i++)
|
|
||||||
results[i+2] = hash->data[i];
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/***
|
|
||||||
* public methods
|
|
||||||
**/
|
|
||||||
|
|
||||||
/***
|
|
||||||
* retrieve the size element of the multihash object that is embedded in the base58 string
|
|
||||||
* @param b58_string the base58 encoded string
|
|
||||||
* @returns the size element of the MultiHash object
|
|
||||||
*/
|
|
||||||
size_t libp2p_multihash_b58_size(unsigned char* b58_string) {
|
|
||||||
size_t byte_length = libp2p_crypto_encoding_base58_decode_max_size(b58_string);
|
|
||||||
unsigned char bytes[byte_length];
|
|
||||||
unsigned char* ptr = bytes;
|
|
||||||
|
|
||||||
int retVal = libp2p_crypto_encoding_base58_decode(b58_string, strlen((char*)b58_string), &ptr, &byte_length);
|
|
||||||
if (retVal == 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return ptr[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* turns a multihash into a string of hex
|
|
||||||
*/
|
|
||||||
int libp2p_multihash_hex_string(struct MultiHash* hash, char* string, int max_length) {
|
|
||||||
// calculate the size of the struct
|
|
||||||
size_t struct_size = sizeof(char) * (hash->size + 2);
|
|
||||||
|
|
||||||
// make sure we have enough space (2 bytes for each byte, plus terminating null
|
|
||||||
if (max_length < (struct_size * 2))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
// put in the hex values
|
|
||||||
char temp[3];
|
|
||||||
sprintf(temp, "%02x", hash->fn_code);
|
|
||||||
string[0] = temp[0];
|
|
||||||
string[1] = temp[1];
|
|
||||||
sprintf(temp, "%02x", hash->size);
|
|
||||||
string[2] = temp[0];
|
|
||||||
string[3] = temp[1];
|
|
||||||
for(int i = 0; i < struct_size - 2; i++) {
|
|
||||||
sprintf(temp, "%02x", hash->data[i]);
|
|
||||||
string[(i*2) + 4] = temp[0];
|
|
||||||
string[(i*2) + 5] = temp[1];
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* decodes a hex string into a multihash
|
|
||||||
*/
|
|
||||||
int libp2p_multihash_from_hex_string(char* string, int length, struct MultiHash* hash) {
|
|
||||||
hash->fn_code = from_hex_to_char(&string[0]);
|
|
||||||
hash->size = from_hex_to_char(&string[2]);
|
|
||||||
for(int i = 0; i < hash->size; i++) {
|
|
||||||
int pos = (i * 2) + 4;
|
|
||||||
if (pos > length - 1)
|
|
||||||
return 0;
|
|
||||||
hash->data[i] = from_hex_to_char(&string[(i*2) + 4]);
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* turns a multihash into a b58 string
|
|
||||||
* @param hash the Multihash to encode
|
|
||||||
* @param binary_buffer the buffer to fill
|
|
||||||
* @param max_length the size of the buffer
|
|
||||||
* @returns true(1) on success
|
|
||||||
*/
|
|
||||||
int libp2p_multihash_to_b58(struct MultiHash* hash, unsigned char* binary_buffer, size_t max_length) {
|
|
||||||
int bytes_length = hash->size + 2;
|
|
||||||
unsigned char bytes[bytes_length];
|
|
||||||
unsigned char* ptr = bytes;
|
|
||||||
|
|
||||||
int retVal = from_multihash_to_byte_array(hash, bytes, bytes_length);
|
|
||||||
if (retVal == 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
// finally encode the array into base64
|
|
||||||
return libp2p_crypto_encoding_base58_encode(ptr, bytes_length, &binary_buffer, &max_length);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* turns a base58 encoded string into a MultiHash
|
|
||||||
* @param b58_string the base58 encoded string
|
|
||||||
* @param b58_string_length the length of the encoded string
|
|
||||||
* @param hash the MultiHash to fill
|
|
||||||
* @returns true(1) on success
|
|
||||||
*/
|
|
||||||
int libp2p_b58_to_multihash(unsigned char* b58_string, size_t b58_string_length, struct MultiHash* hash) {
|
|
||||||
size_t buffer_size = libp2p_crypto_encoding_base58_decode_max_size(b58_string);
|
|
||||||
unsigned char buffer[buffer_size];
|
|
||||||
unsigned char* b = buffer;
|
|
||||||
|
|
||||||
libp2p_crypto_encoding_base58_decode(b58_string, b58_string_length, &b, &buffer_size);
|
|
||||||
|
|
||||||
// now build the hash
|
|
||||||
hash->fn_code = b[0];
|
|
||||||
hash->size = b[1];
|
|
||||||
memcpy(hash->data, &b[2], hash->size);
|
|
||||||
return 0;
|
|
||||||
}
|
|
Loading…
Reference in a new issue