// ======================================================================================================== // ======================================================================================================== // ******************************************** token_common.h ******************************************** // ======================================================================================================== // ======================================================================================================== #include #include #include /******************************** DEFINES ***********************************/ #define OUT_CP_RESET 31 #define OUT_CP_PUF_START 30 #define OUT_CP_NUM_SAM1 29 #define OUT_CP_NUM_SAM0 28 #define OUT_CP_DUAL_BG_LOAD_DONE 27 // #define OUT_CP_MARGIN0 26 //#define OUT_CP_KEYGEN_ENROLL 25 #define OUT_CP_HANDSHAKE 24 //#define OUT_CP_FIRST_HASH 23 //#define OUT_CP_START_HASH 22 //#define OUT_CP_MODE_REGENS_REGEND 21 // "00" token authentication, "01" server authentication, "10" encryption key generation #define OUT_CP_MODE1 23 #define OUT_CP_MODE0 22 #define OUT_CP_DTO_DATA_READY 20 #define OUT_CP_DTO_RESTART 19 #define OUT_CP_DTO_VEC_LOADED 18 #define OUT_CP_DTI_DONE_READING 17 #define OUT_CP_DTI_RESTART 16 #define IN_SM_READY 31 #define IN_SM_DTI_DATA_READY 30 #define IN_SM_DTO_DONE_READING 29 #define IN_SM_HANDSHAKE 28 #define IN_SM_HELPER_DATA_DONE 27 #define IN_SM_BIT_GEN_DONE 26 #define IN_TVCOMP_ERR 25 #define IN_PNDIFF_OVERFLOW_ERR 24 #define IN_SM_LOAD_VEC_PAIR 23 #define IN_SM_DONE_ALL_VECS 22 #define IN_SM_DHBG_SBS_DONE 21 // GPIO 0 #define GPIO_0_BASE_ADDR 0x41200000 #define CTRL_DIRECTION_MASK 0x00 #define DATA_DIRECTION_MASK 0xFFFFFFFF // **************************** LABVIEW ********************************** // CoreSM is the Agilent B2910A #define InstrCoreSM "CoreSrcMeter" #define InstrTC "TempChamber" #define CommandPwrUp "PUP" #define CommandPwrDwn "PWN" #define CommandReadCurrentAmplitude "ReadCurrConfigAmpl" #define CommandSetCurrentAmplitude "SetCurrConfigAmpl" #define CommandReadTemperature "ReadTemperature" #define CommandSetTemperature "SetTemperature" void SetTVCorner(int str_length, int TV_num, int max_TVs, int temperatures[max_TVs], float currents_uAs[max_TVs], int socket_desc); void LoadVecPairMask(int str_length, volatile unsigned int *CtrlRegA, volatile unsigned int *DataRegA, int max_vecs, int vec_num, unsigned char *first_vecs_b[max_vecs], unsigned char *second_vecs_b[max_vecs], int ctrl_mask, int vec_len_bits, int vec_chunk_size, int has_masks, int mask_len_bits, unsigned char *masks[max_vecs]); int GenGetTimingVals(volatile unsigned int *CtrlRegA, volatile unsigned int *DataRegA, int max_outputs, int max_vecs_outputs, int max_sams, int start_index, unsigned short timing_val_arr[max_vecs_outputs][max_sams], unsigned short output_pos[max_vecs_outputs][max_sams], int sam_num, int ctrl_mask); int ApplyVecGetTimingVals(int str_length, volatile unsigned int *CtrlRegA, volatile unsigned int *DataRegA, int ctrl_mask, int max_outputs, int max_vecs_outputs, int max_sams, int vec_num, int start_index, unsigned short timing_val_arr[max_vecs_outputs][max_sams], unsigned short output_pos[max_vecs_outputs][max_sams], int num_sams, int compute_ave, float PNs[max_vecs_outputs]); int GenTimingVals(int str_length, volatile unsigned int *CtrlRegA, volatile unsigned int *DataRegA, int num_vecs, int ctrl_mask, int max_vecs_outputs, int max_outputs, int max_sams, int num_sams, unsigned short timing_val_arr[max_vecs_outputs][max_sams], unsigned short output_pos[max_vecs_outputs][max_sams], float PNs[max_vecs_outputs], int num_rise_vecs, int *start_fall_PN_index_ptr); int ReceiveVectors(int str_length, int verifier_socket_desc, int max_vecs, unsigned char *first_vecs_b[max_vecs], unsigned char *second_vecs_b[max_vecs], int vec_len_bits, int *num_rise_vecs_ptr, int *has_masks_ptr, int mask_len_bits, unsigned char *masks[max_vecs]); // Binary version of the hash void LoadHashInputBinStr(int str_length, volatile unsigned int *CtrlRegA, volatile unsigned int *DataRegA, unsigned char *hash_in_bin_str, int ctrl_mask, int hash_in_len_bytes); void ComputeHashBinStr(int str_length, volatile unsigned int *CtrlRegA, volatile unsigned int *DataRegA, int ctrl_mask, int hash_out_len_bytes, unsigned char hash_out_bin_str[hash_out_len_bytes]); // ASCII string version of the hash void LoadHashInputStr(int str_length, volatile unsigned int *CtrlRegA, volatile unsigned int *DataRegA, char *hash_in_str, int ctrl_mask, int hash_in_len_bits, int hash_in_chunk_size); void ComputeHashStr(int str_length, volatile unsigned int *CtrlRegA, volatile unsigned int *DataRegA, int ctrl_mask, int hash_out_len_bits, int hash_out_chunk_size, char hash_out_str[hash_out_len_bits]);