Digests
QNX SDP8.0QNX Cryptography LibraryAPIDeveloperProgramming
  The qcrypto library API includes cryptographic digest (hashing) functions.
See the library reference for detailed information on the following functions:
Digest examples
#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;
}
      Page updated: 
