dpdk/examples/fips_validation/fips_validation_sha.c
<<
>>
Prefs
   1/* SPDX-License-Identifier: BSD-3-Clause
   2 * Copyright(c) 2019 Intel Corporation
   3 */
   4
   5#include <string.h>
   6#include <time.h>
   7#include <stdio.h>
   8
   9#include <rte_cryptodev.h>
  10
  11#include "fips_validation.h"
  12
  13#define ALGO_PREFIX     "[L = "
  14#define MSGLEN_STR      "Len = "
  15#define MSG_STR         "Msg = "
  16#define MD_STR          "MD = "
  17#define SEED_STR        "Seed = "
  18#define MCT_STR         "Monte"
  19
  20struct plain_hash_size_conversion {
  21        const char *str;
  22        enum rte_crypto_auth_algorithm algo;
  23} phsc[] = {
  24                {"20", RTE_CRYPTO_AUTH_SHA1},
  25                {"28", RTE_CRYPTO_AUTH_SHA224},
  26                {"32", RTE_CRYPTO_AUTH_SHA256},
  27                {"48", RTE_CRYPTO_AUTH_SHA384},
  28                {"64", RTE_CRYPTO_AUTH_SHA512},
  29};
  30
  31static int
  32parse_interim_algo(__rte_unused const char *key,
  33                char *text,
  34                __rte_unused struct fips_val *val)
  35{
  36        uint32_t i;
  37
  38        for (i = 0; i < RTE_DIM(phsc); i++) {
  39                if (strstr(text, phsc[i].str)) {
  40                        info.interim_info.sha_data.algo = phsc[i].algo;
  41                        parser_read_uint32_val(ALGO_PREFIX,
  42                                text, &vec.cipher_auth.digest);
  43                        break;
  44                }
  45        }
  46
  47        if (i == RTE_DIM(phsc))
  48                return -1;
  49
  50        return 0;
  51}
  52
  53struct fips_test_callback sha_tests_vectors[] = {
  54                {MSGLEN_STR, parser_read_uint32_bit_val, &vec.pt},
  55                {MSG_STR, parse_uint8_known_len_hex_str, &vec.pt},
  56                {SEED_STR, parse_uint8_hex_str, &vec.cipher_auth.digest},
  57                {NULL, NULL, NULL} /**< end pointer */
  58};
  59
  60struct fips_test_callback sha_tests_interim_vectors[] = {
  61                {ALGO_PREFIX, parse_interim_algo, NULL},
  62                {NULL, NULL, NULL} /**< end pointer */
  63};
  64
  65static int
  66parse_test_sha_writeback(struct fips_val *val) // !
  67{
  68        struct fips_val val_local;
  69
  70        fprintf(info.fp_wr, "%s", MD_STR);
  71
  72        val_local.val = val->val + vec.pt.len;
  73        val_local.len = vec.cipher_auth.digest.len;
  74
  75        parse_write_hex_str(&val_local);
  76        return 0;
  77}
  78
  79static int
  80rsp_test_sha_check(struct fips_val *val)
  81{
  82        if (memcmp(val->val + vec.pt.len, vec.cipher_auth.digest.val,
  83                        vec.cipher_auth.digest.len) == 0)
  84                fprintf(info.fp_wr, "Success\n");
  85        else
  86                fprintf(info.fp_wr, "Failed\n");
  87
  88        return 0;
  89}
  90
  91int
  92parse_test_sha_init(void)
  93{
  94        uint32_t i;
  95
  96        info.interim_info.sha_data.test_type = SHA_KAT;
  97        for (i = 0; i < info.nb_vec_lines; i++) {
  98                char *line = info.vec[i];
  99                if (strstr(line, MCT_STR))
 100                        info.interim_info.sha_data.test_type = SHA_MCT;
 101        }
 102
 103        info.op = FIPS_TEST_ENC_AUTH_GEN;
 104        info.parse_writeback = parse_test_sha_writeback;
 105        info.callbacks = sha_tests_vectors;
 106        info.interim_callbacks = sha_tests_interim_vectors;
 107        info.writeback_callbacks = NULL;
 108        info.kat_check = rsp_test_sha_check;
 109        return 0;
 110}
 111