Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include <stdio.h>
  2. #include "../params.h"
  3. #include "../xmss.h"
  4. #ifdef XMSSMT
  5. #define XMSS_PARSE_OID xmssmt_parse_oid
  6. #define XMSS_SIGN_OPEN xmssmt_sign_open
  7. #else
  8. #define XMSS_PARSE_OID xmss_parse_oid
  9. #define XMSS_SIGN_OPEN xmss_sign_open
  10. #endif
  11. int main(int argc, char **argv) {
  12. FILE *keypair_file;
  13. FILE *sm_file;
  14. xmss_params params;
  15. uint32_t oid;
  16. unsigned long long smlen;
  17. int ret;
  18. if (argc != 3) {
  19. fprintf(stderr, "Expected keypair and signature + message filenames "
  20. "as two parameters.\n"
  21. "Keypair file needs only to contain the public key.\n"
  22. "The return code 0 indicates verification success.\n");
  23. return -1;
  24. }
  25. keypair_file = fopen(argv[1], "rb");
  26. if (keypair_file == NULL) {
  27. fprintf(stderr, "Could not open keypair file.\n");
  28. return -1;
  29. }
  30. sm_file = fopen(argv[2], "rb");
  31. if (sm_file == NULL) {
  32. fprintf(stderr, "Could not open signature + message file.\n");
  33. return -1;
  34. }
  35. /* Find out the message length. */
  36. fseek(sm_file, 0, SEEK_END);
  37. smlen = ftell(sm_file);
  38. fread(&oid, 1, XMSS_OID_LEN, keypair_file);
  39. XMSS_PARSE_OID(&params, oid);
  40. unsigned char pk[XMSS_OID_LEN + params.pk_bytes];
  41. unsigned char sm[smlen];
  42. unsigned char m[smlen];
  43. unsigned long long mlen;
  44. fseek(keypair_file, 0, SEEK_SET);
  45. fseek(sm_file, 0, SEEK_SET);
  46. fread(pk, 1, XMSS_OID_LEN + params.pk_bytes, keypair_file);
  47. fread(sm, 1, smlen, sm_file);
  48. ret = XMSS_SIGN_OPEN(m, &mlen, sm, smlen, pk);
  49. if (ret) {
  50. printf("Verification failed!\n");
  51. }
  52. else {
  53. printf("Verification succeeded.\n");
  54. }
  55. fclose(keypair_file);
  56. fclose(sm_file);
  57. return ret;
  58. }