1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
#pragma once
#ifndef _KDF_H_
#define _KDF_H_
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <cmath>
#include <iostream>
#define VERSION "v1.0"
#define BYTES_PER_AES_SEED 32
#define KDF_COUNTER_BYTES 4
#define KDF_INPUT_FID_UNAVAILABLE 0x00000001
#define KDF_INPUT_SEED_UNAVAILABLE 0x00000002
#define KDF_CAVP_TESTFILE_UNAVAILABLE 0x00010001
#define KDF_CAVP_TESTFILE_IMPROPER 0x00010002
#define KDF_CAVP_KI_LENGTH_IMPROPER 0x00010003
#define KDF_CAVP_HEXKEY_IMPROPER 0x00010004
#define KDF_CAVP_VERIFY_KO_FAILED 0x00010005
#define KDF_CAVP_FID_LENGTH_IMPROPER 0x00010006
class Kdf
{
public:
Kdf()
: key_out_length(0)
, key_seed(NULL)
, fixed_input_data_byte_length(0)
, fixed_input_data(NULL)
, verify_ko(NULL)
, key_out(NULL)
, kdf_log_file("")
{ };
~Kdf()
{
if (key_seed != NULL)
{
delete[] key_seed;
}
if (fixed_input_data != NULL)
{
delete[] fixed_input_data;
}
if (verify_ko != NULL)
{
delete[] verify_ko;
}
if(key_out != NULL)
{
delete[] key_out;
}
};
uint32_t CounterModeKDF(uint32_t* k_in, uint32_t* fid, uint32_t fid_byte_length, uint32_t* ko_buf, uint32_t ko_bytes, bool reset_cntr = true);
uint32_t CAVPonCounterModeKDF(std::string filename);
void ResetKdfCounter();
void SetKdfLogFilename(std::string filename);
std::string GetKdfLogFilename(void);
std::string GetVersion(void);
private:
uint8_t* key_out;
uint8_t* key_seed;
uint32_t key_out_length;
uint8_t* verify_ko;
uint8_t* fixed_input_data;
uint32_t fixed_input_data_byte_length;
uint32_t version;
uint8_t kdf_counter[KDF_COUNTER_BYTES];
std::string kdf_log_file;
void KDF(uint32_t ko_bytes, bool reset_cntr = true);
uint32_t ParseKDFTestVectorFile(std::string filename);
bool IsKdfCounterMax();
};
#endif
|