X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=tfc_conf.c;h=15a79ed77059f3f13046626de0589e7aeba14f2f;hb=f98c367a4cf1ed9f0c6d7620e3f1988596945495;hp=c583b860fc8117160fd8071dc697c2af5cae5657;hpb=133fa38f39501ef4c2d9ad442b50eb79caf79f59;p=tfcrypt.git diff --git a/tfc_conf.c b/tfc_conf.c index c583b86..15a79ed 100644 --- a/tfc_conf.c +++ b/tfc_conf.c @@ -2,7 +2,7 @@ * tfcrypt -- high security Threefish encryption tool. * * tfcrypt is copyrighted: - * Copyright (C) 2012-2018 Andrey Rys. All rights reserved. + * Copyright (C) 2012-2019 Andrey Rys. All rights reserved. * * tfcrypt is licensed to you under the terms of std. MIT/X11 license: * @@ -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); +}