diff options
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/hash.c | 69 | ||||
| -rw-r--r-- | src/lib/ipcp_config.proto | 2 | ||||
| -rw-r--r-- | src/lib/irm.c | 3 | 
3 files changed, 64 insertions, 10 deletions
| diff --git a/src/lib/hash.c b/src/lib/hash.c index f4fd75ea..e7806d94 100644 --- a/src/lib/hash.c +++ b/src/lib/hash.c @@ -28,16 +28,69 @@  #include <ouroboros/hash.h>  #include <string.h> +#include <assert.h> +#include <stdbool.h> -void get_hash(uint8_t      buf[], -              const char * name) +uint16_t hash_len(enum hash_algo algo)  { -        /* currently we only support 256 bit SHA-3 */ -        struct sha3_ctx ctx; - -        rhash_sha3_256_init(&ctx); +        switch (algo) { +        case HASH_CRC32: +                return CRC32_HASH_LEN; +        case HASH_MD5: +                return MD5_HASH_LEN; +        case HASH_SHA3_224: +                return SHA3_224_HASH_LEN; +        case HASH_SHA3_256: +                return SHA3_256_HASH_LEN; +        case HASH_SHA3_384: +                return SHA3_384_HASH_LEN; +        case HASH_SHA3_512: +                return SHA3_512_HASH_LEN; +        default: +                assert(false); +                break; +        } +} -        rhash_sha3_update(&ctx, name, strlen(name)); +void str_hash(enum hash_algo algo, +              void *         buf, +              const char *   str) +{ +        struct sha3_ctx sha3_ctx; +        struct md5_ctx md5_ctx; -        rhash_sha3_final(&ctx, buf); +        switch (algo) { +        case HASH_CRC32: +                memset(buf, 0, CRC32_HASH_LEN); +                crc32((uint32_t *) buf, str, strlen(str)); +                break; +        case HASH_MD5: +                rhash_md5_init(&md5_ctx); +                rhash_md5_update(&md5_ctx, str, strlen(str)); +                rhash_md5_final(&md5_ctx, (uint8_t *) buf); +                break; +        case HASH_SHA3_224: +                rhash_sha3_224_init(&sha3_ctx); +                rhash_sha3_update(&sha3_ctx, str, strlen(str)); +                rhash_sha3_final(&sha3_ctx, (uint8_t *) buf); +                break; +        case HASH_SHA3_256: +                rhash_sha3_256_init(&sha3_ctx); +                rhash_sha3_update(&sha3_ctx, str, strlen(str)); +                rhash_sha3_final(&sha3_ctx, (uint8_t *) buf); +                break; +        case HASH_SHA3_384: +                rhash_sha3_384_init(&sha3_ctx); +                rhash_sha3_update(&sha3_ctx, str, strlen(str)); +                rhash_sha3_final(&sha3_ctx, (uint8_t *) buf); +                break; +        case HASH_SHA3_512: +                rhash_sha3_512_init(&sha3_ctx); +                rhash_sha3_update(&sha3_ctx, str, strlen(str)); +                rhash_sha3_final(&sha3_ctx, (uint8_t *) buf); +                break; +        default: +                assert(false); +                break; +        }  } diff --git a/src/lib/ipcp_config.proto b/src/lib/ipcp_config.proto index a0c14c41..d5ff75d6 100644 --- a/src/lib/ipcp_config.proto +++ b/src/lib/ipcp_config.proto @@ -25,7 +25,7 @@ syntax = "proto2";  message ipcp_config_msg {          required string dif_name        =  1; -        required uint32 dir_hash_len    =  2; +        required uint32 dir_hash_algo   =  2;          required int32 ipcp_type        =  3;          // Config for normal IPCP          optional uint32 addr_size       =  4; diff --git a/src/lib/irm.c b/src/lib/irm.c index a2fd5d0b..12d8e8f7 100644 --- a/src/lib/irm.c +++ b/src/lib/irm.c @@ -23,6 +23,7 @@  #include <ouroboros/config.h>  #include <ouroboros/errno.h> +#include <ouroboros/hash.h>  #include <ouroboros/irm.h>  #include <ouroboros/utils.h>  #include <ouroboros/sockets.h> @@ -105,7 +106,7 @@ int irm_bootstrap_ipcp(pid_t                      api,          msg.conf = &config;          config.dif_name = conf->dif_name;          config.ipcp_type = conf->type; -        config.dir_hash_len = (uint16_t) conf->dir_hash_len; +        config.dir_hash_algo = (enum hash_algo) conf->dir_hash_algo;          switch (conf->type) {          case IPCP_NORMAL: | 
