Adjusting to use the better multihash implementation
This commit is contained in:
parent
4cd4750f6f
commit
81fe9305bf
1 changed files with 38 additions and 8 deletions
|
@ -100,12 +100,41 @@ int ipfs_namesys_routing_resolve_n (char **path, char *name, int depth, struct n
|
||||||
return ipfs_namesys_routing_resolve_once (path, name, depth, "/ipns/", pb);
|
return ipfs_namesys_routing_resolve_once (path, name, depth, "/ipns/", pb);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ipfs_namesys_routing_resolve_once implements resolver. Uses the IPFS
|
/**
|
||||||
// routing system to resolve SFS-like names.
|
* convert bytes to a hex string representation
|
||||||
|
* @param bytes the bytes to convert
|
||||||
|
* @param bytes_size the length of the bytes array
|
||||||
|
* @param buffer where to put the results
|
||||||
|
* @param buffer_length the length of the buffer
|
||||||
|
* @returns 0 on success, otherwise an error code
|
||||||
|
*/
|
||||||
|
int ipfs_namesys_bytes_to_hex_string(unsigned char* bytes, size_t bytes_size, char* buffer, size_t buffer_length) {
|
||||||
|
if (bytes_size * 2 > buffer_length) {
|
||||||
|
return ErrInvalidParam;
|
||||||
|
}
|
||||||
|
for(size_t i = 0; i < bytes_size; i++) {
|
||||||
|
sprintf(buffer[i*2], "%02x", bytes[i]);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***
|
||||||
|
* Implements resolver. Uses the IPFS routing system to resolve SFS-like names.
|
||||||
|
*
|
||||||
|
* @param path the path
|
||||||
|
* @param name the name (b58 encoded)
|
||||||
|
* @param depth
|
||||||
|
* @param depth
|
||||||
|
* @param prefix
|
||||||
|
* @param pb
|
||||||
|
* @returns 0 on success, otherwise error code
|
||||||
|
*/
|
||||||
int ipfs_namesys_routing_resolve_once (char **path, char *name, int depth, char *prefix, struct namesys_pb *pb)
|
int ipfs_namesys_routing_resolve_once (char **path, char *name, int depth, char *prefix, struct namesys_pb *pb)
|
||||||
{
|
{
|
||||||
int err, l, s, ok;
|
int err, l, s, ok;
|
||||||
struct MultiHash hash;
|
struct MultiHash hash;
|
||||||
|
unsigned char* multihash = NULL;
|
||||||
|
size_t multihash_size = 0;
|
||||||
char *h, *string, val[8];
|
char *h, *string, val[8];
|
||||||
char pubkey[60];
|
char pubkey[60];
|
||||||
|
|
||||||
|
@ -122,23 +151,24 @@ int ipfs_namesys_routing_resolve_once (char **path, char *name, int depth, char
|
||||||
name += strlen (prefix); // trim prefix.
|
name += strlen (prefix); // trim prefix.
|
||||||
}
|
}
|
||||||
|
|
||||||
err = libp2p_b58_to_multihash ((unsigned char*)name, strlen(name), &hash);
|
// turn the b58 encoded name into a multihash
|
||||||
if (err) {
|
err = libp2p_crypto_encoding_base58_decode(name, strlen(name), multihash, multihash_size);
|
||||||
|
if (!err) {
|
||||||
// name should be a multihash. if it isn't, error out here.
|
// name should be a multihash. if it isn't, error out here.
|
||||||
//log.Warningf("RoutingResolve: bad input hash: [%s]\n", name)
|
//log.Warningf("RoutingResolve: bad input hash: [%s]\n", name)
|
||||||
return err;
|
return ErrInvalidParam;
|
||||||
}
|
}
|
||||||
|
|
||||||
// use the routing system to get the name.
|
// use the routing system to get the name.
|
||||||
// /ipns/<name>
|
// /ipns/<name>
|
||||||
l = strlen(prefix);
|
l = strlen(prefix);
|
||||||
s = (hash.size * 2) + 1;
|
s = (multihash_size * 2) + 1;
|
||||||
h = malloc(l + s); // alloc to fit prefix + hexhash + null terminator
|
h = malloc(l + s); // alloc to fit prefix + hexhash + null terminator
|
||||||
if (!h) {
|
if (!h) {
|
||||||
return ErrAllocFailed;
|
return ErrAllocFailed;
|
||||||
}
|
}
|
||||||
memcpy(h, prefix, l); // copy prefix
|
memcpy(h, prefix, l); // copy prefix
|
||||||
if (!libp2p_multihash_hex_string(&hash, h+l, s)) { // hexstring just after prefix.
|
if (ipfs_namesys_bytes_to_hex_string(&multihash, multihash_size, h+l, s)) { // hexstring just after prefix.
|
||||||
return ErrUnknow;
|
return ErrUnknow;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,7 +184,7 @@ int ipfs_namesys_routing_resolve_once (char **path, char *name, int depth, char
|
||||||
}
|
}
|
||||||
|
|
||||||
// name should be a public key retrievable from ipfs
|
// name should be a public key retrievable from ipfs
|
||||||
err = ipfs_namesys_routing_getpublic_key (pubkey, &hash);
|
err = ipfs_namesys_routing_getpublic_key (pubkey, multihash, multihash_size);
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue