@@ -1125,6 +1125,46 @@ static bool Unpack_CasiRusco40(wiegand_message_t *packed, wiegand_card_t *card)
11251125 return true;
11261126}
11271127
1128+ static bool Pack_Verkada40 (int format_idx , wiegand_card_t * card , wiegand_message_t * packed , bool preamble ) {
1129+ memset (packed , 0 , sizeof (wiegand_message_t ));
1130+
1131+ if (!validate_card_limit (format_idx , card )) return false;
1132+
1133+ packed -> Length = 40 ; // Set number of bits
1134+
1135+ set_linear_field (packed , card -> FacilityCode , 1 , 10 );
1136+
1137+ set_linear_field (packed , card -> CardNumber , 11 , 28 );
1138+
1139+ set_bit_by_position (packed ,
1140+ evenparity32 (get_linear_field (packed , 1 , 10 ))
1141+ , 0 );
1142+
1143+ set_bit_by_position (packed ,
1144+ evenparity32 (get_linear_field (packed , 11 , 28 ))
1145+ , 39 );
1146+
1147+ if (preamble )
1148+ return add_HID_header (packed );
1149+ return true;
1150+ }
1151+
1152+ static bool Unpack_Verkada40 (wiegand_message_t * packed , wiegand_card_t * card ) {
1153+ if (packed -> Length != 40 ) return false; // Wrong length? Stop here.
1154+
1155+ memset (card , 0 , sizeof (wiegand_card_t ));
1156+
1157+ card -> FacilityCode = get_linear_field (packed , 1 , 10 );
1158+
1159+ card -> CardNumber = get_linear_field (packed , 11 , 28 );
1160+
1161+ card -> ParityValid =
1162+ (get_bit_by_position (packed , 0 ) == evenparity32 (get_linear_field (packed , 1 , 10 ))) &&
1163+ (get_bit_by_position (packed , 39 ) == evenparity32 (get_linear_field (packed , 11 , 28 )));
1164+
1165+ return true;
1166+ }
1167+
11281168static bool Pack_Optus (int format_idx , wiegand_card_t * card , wiegand_message_t * packed , bool preamble ) {
11291169
11301170 if (!validate_card_limit (format_idx , card )) return false;
@@ -1542,6 +1582,7 @@ static const cardformat_t FormatTable[] = {
15421582 {"PW39" , Pack_pw39 , Unpack_pw39 , "Pyramid 39-bit wiegand format" , 39 , {1 , 1 , 0 , 0 , 1 , 0x0000FFFFu , 0x00000000000FFFFFu , 0x00000000u , 0x00000000u }}, // from cardinfo.barkweb.com.au
15431583 {"P10001" , Pack_P10001 , Unpack_P10001 , "HID P10001 Honeywell 40-bit" , 40 , {1 , 1 , 0 , 0 , 0 , 0x00000FFFu , 0x000000000000FFFFu , 0x00000000u , 0x00000000u }}, // from cardinfo.barkweb.com.au
15441584 {"Casi40" , Pack_CasiRusco40 , Unpack_CasiRusco40 , "Casi-Rusco 40-bit" , 40 , {1 , 0 , 0 , 0 , 0 , 0x00000000u , 0x000000FFFFFFFFFFu , 0x00000000u , 0x00000000u }}, // from cardinfo.barkweb.com.au
1585+ {"Verkada40" , Pack_Verkada40 , Unpack_Verkada40 , "Verkada 40-bit" , 40 , {1 , 1 , 0 , 0 , 1 , 0x000003FFu , 0x000000000FFFFFFFu , 0x00000000u , 0x00000000u }}, // Verkada 40-bit format
15451586 {"BC40" , Pack_bc40 , Unpack_bc40 , "Bundy TimeClock 40-bit" , 40 , {1 , 1 , 0 , 1 , 1 , 0x00000FFFu , 0x00000000000FFFFFu , 0x00000000u , 0x0000007Fu }}, // from
15461587 {"Defcon32" , Pack_Defcon32 , Unpack_Defcon32 , "Custom Defcon RFCTF 42-bit" , 42 , {1 , 1 , 1 , 0 , 1 , 0x0000FFFFu , 0x00000000000FFFFFu , 0x0000000Fu , 0x00000000u }}, // Created by (@micsen) for the CTF
15471588 {"H800002" , Pack_H800002 , Unpack_H800002 , "HID H800002 46-bit" , 46 , {1 , 1 , 0 , 0 , 1 , 0x00003FFFu , 0x000000003FFFFFFFu , 0x00000000u , 0x00000000u }},
0 commit comments