X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=tfc_conf.c;h=da4523151b5a070be91d0d48300d9d2612f8040a;hb=72672c5cb76597fdc07cbc9bc190394d1c1d3ee1;hp=c583b860fc8117160fd8071dc697c2af5cae5657;hpb=335d0464d6ea90d5f30e6846e3142c287e0d582c;p=tfcrypt.git diff --git a/tfc_conf.c b/tfc_conf.c index c583b86..da45231 100644 --- a/tfc_conf.c +++ b/tfc_conf.c @@ -104,3 +104,35 @@ _nspc: memset(ln, 0, sizeof(ln)); fclose(f); } + +void hash_defaults(char *uhash, size_t szuhash) +{ + struct skein sk; + char shash[56]; + const char *mode; + tfc_byte hash[TF_FROM_BITS(256)]; + + skein_init(&sk, 256); + + skein_update(&sk, tfc_salt, tfc_saltsz); + + memset(shash, 0, sizeof(shash)); + sprintf(shash, "%zu", nr_turns); + skein_update(&sk, shash, strlen(shash)); + + mode = tfc_modename(ctr_mode); + skein_update(&sk, mode, strlen(mode)); + + memset(shash, 0, sizeof(shash)); + sprintf(shash, "%zu", macbits); + skein_update(&sk, shash, strlen(shash)); + + skein_update(&sk, do_full_key ? "1" : "0", 1); + + skein_final(hash, &sk); + memset(shash, 0, sizeof(shash)); + base64_encode(shash, (const char *)hash, sizeof(hash)); + memset(hash, 0, sizeof(hash)); + + xstrlcpy(uhash, shash, szuhash); +}