Подписать с помощью libgcrypt, вылетает
Я пытаюсь создать одноранговую сеть, которая управляется одноранговым узлом с главным закрытым ключом, часть которого утверждает одноранговые узлы для подключения
в следующем коде предполагается взять открытый ключ, подписать его и отправить его одноранговому узлу, чтобы он мог проверить его действительность и в своем списке утвержденных одноранговых узлов
gcry_sexp_t signature, keydata;
char *blob = malloc(size + 64);
sprintf(blob, "(data\n (flags pkcs1)\n (hash sha1 #%.*s#))\n", (int)size, buf);
printf("%s\n", blob);
free(buf);
gcry_sexp_sscan(&keydata, &size, blob, strlen(blob));
printf("offset %d\n", (int)size);
size = gcry_sexp_sprint(keydata, GCRYSEXP_FMT_ADVANCED, NULL, 0);
printf("size %d\n", (int)size);
buf = gcry_xmalloc(size);
gcry_sexp_sprint(keydata, GCRYSEXP_FMT_ADVANCED, buf, size);
printf("keydata: %.*s\n", size, buf);
free(buf);
gcry_pk_sign(&signature, keydata, skey);
size = gcry_sexp_sprint(signature, GCRYSEXP_FMT_ADVANCED, NULL, 0);
buf = gcry_xmalloc(size);
gcry_sexp_sprint(signature, GCRYSEXP_FMT_ADVANCED, buf, size);
//add signature buf to msg and send to peer
Но это терпит крах. Есть идеи почему?
1 ответ
Решение
printf
аргументы вокруг неправильного пути. Должно быть:
printf("keydata: %.*s\n", size, buf);