Updated: October 28, 2024 |
The qcrypto library API includes cryptographic digest (hashing) functions.
See the library reference for detailed information on the following functions:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <qcrypto/qcrypto.h> int main(int argc, char* argv[]) { const char *sha256 = "sha256"; int ret; qcrypto_ctx_t *ctx = NULL; size_t dsize; const char *input_buffer = "hello world"; size_t input_size = strlen(input_buffer); uint8_t *output_buffer = NULL; /* Initializing the qcrypto library */ ret = qcrypto_init(QCRYPTO_INIT_LAZY, NULL); if (ret != QCRYPTO_R_EOK) { fprintf(stderr, "qcrypto_init() failed (%d:%s)\n", ret, qcrypto_strerror(ret)); goto done; } /* Checking if a digest is supported */ ret = qcrypto_digest_supported(sha256, NULL, 0); if (ret != QCRYPTO_R_EOK) { fprintf(stderr, "qcrypto_digest_supported() failed (%d:%s)\n", ret, qcrypto_strerror(ret)); goto done; } /* Requesting the digest */ ret = qcrypto_digest_request(sha256, NULL, 0, &ctx); if (ret != QCRYPTO_R_EOK) { fprintf(stderr, "qcrypto_digest_request() failed (%d:%s)\n", ret, qcrypto_strerror(ret)); goto done; } /* Querying the digest size */ dsize = qcrypto_digestsize(ctx); printf("digest size = %ld\n", dsize); output_buffer = malloc(dsize); if (output_buffer == NULL) { fprintf(stderr,"output size not defined (%d:%s)\n", ret, qcrypto_strerror(ret)); goto done; } /* Initializing, updating, and finalizing the digest */ ret = qcrypto_digest(ctx, (const uint8_t*)input_buffer, input_size, output_buffer, &dsize); if (ret != QCRYPTO_R_EOK) { fprintf(stderr, "qcrypto_digest() failed (%d:%s)\n", ret, qcrypto_strerror(ret)); goto done; } printf("sha256(\"hello world\") = "); for (int i=0; i < dsize; i++) { printf("%02x", output_buffer[i]); } printf("\n"); done: /* free the allocated memory */ free(output_buffer); /* Releasing the context */ qcrypto_release_ctx(ctx); /* Uninitializing the qcrypto library */ qcrypto_uninit(); return ret; } #if defined(__QNXNTO__) && defined(__USESRCVERSION) #include <sys/srcversion.h> __SRCVERSION("$URL:$ $Rev:$") #endif