X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Ffsck.c;h=f772d5876fa49801ff5644c322db3ba5cc145156;hb=b2fe16d635dded2d6c3096d85672696d0b82dcd1;hp=3804f2d8364b2c198f963cd76c78672945fdddaa;hpb=628739fb41f3877b2da0f8fb50793a2f51ff70c4;p=tinc diff --git a/src/fsck.c b/src/fsck.c index 3804f2d8..f772d587 100644 --- a/src/fsck.c +++ b/src/fsck.c @@ -385,26 +385,38 @@ int fsck(const char *argv0) { return 1; } - char buf1[len], buf2[len], buf3[len]; - randomize(buf1, sizeof(buf1)); - buf1[0] &= 0x7f; - memset(buf2, 0, sizeof(buf2)); - memset(buf3, 0, sizeof(buf2)); + char *buf1 = malloc(len); + char *buf2 = malloc(len); + char *buf3 = malloc(len); - if(!rsa_public_encrypt(rsa_pub, buf1, sizeof(buf1), buf2)) { + randomize(buf1, len); + buf1[0] &= 0x7f; + memset(buf2, 0, len); + memset(buf3, 0, len); + bool result = false; + + if(rsa_public_encrypt(rsa_pub, buf1, len, buf2)) { + if(rsa_private_decrypt(rsa_priv, buf2, len, buf3)) { + if(memcmp(buf1, buf3, len)) { + result = true; + } else { + fprintf(stderr, "ERROR: public and private RSA keys do not match.\n"); + } + } else { + fprintf(stderr, "ERROR: private RSA key does not work.\n"); + } + } else { fprintf(stderr, "ERROR: public RSA key does not work.\n"); - return 1; } - if(!rsa_private_decrypt(rsa_priv, buf2, sizeof(buf2), buf3)) { - fprintf(stderr, "ERROR: private RSA key does not work.\n"); - return 1; - } + free(buf3); + free(buf2); + free(buf1); - if(memcmp(buf1, buf3, sizeof(buf1))) { - fprintf(stderr, "ERROR: public and private RSA keys do not match.\n"); + if(!result) { return 1; } + } } else { if(rsa_pub) {