diff --git a/module/mifare.cpp b/module/mifare.cpp index c6dfb5e..efad23b 100644 --- a/module/mifare.cpp +++ b/module/mifare.cpp @@ -1,5 +1,72 @@ #include "mifare.h" +const Mifare::CardType Mifare::card_mini = +{ + 0, + 5, + 20, + {4, 4, 4, 4, 4}, + {0, 4, 8, 12, 16} +}; +const Mifare::CardType Mifare::card_1k = +{ + 1, + 16, + 64, + {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, + {0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60} +}; +const Mifare::CardType Mifare::card_2k = +{ + 2, + 32, + 128, + {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, + {0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124} +}; +const Mifare::CardType Mifare::card_4k = +{ + 4, + 40, + 256, + {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 16, 16, 16, 16, 16, 16}, + {0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 144, 160, 176, 192, 208, 224, 240} +}; + +const Mifare::AccessType Mifare::dataCondition[8][4] = +{ + {ACC_KEY_AB, ACC_KEY_AB, ACC_KEY_AB, ACC_KEY_AB}, + {ACC_KEY_AB, ACC_NEVER, ACC_NEVER, ACC_NEVER}, + {ACC_KEY_AB, ACC_KEY_B, ACC_NEVER, ACC_NEVER}, + {ACC_KEY_AB, ACC_KEY_B, ACC_KEY_B, ACC_KEY_AB}, + {ACC_KEY_AB, ACC_NEVER, ACC_NEVER, ACC_KEY_AB}, + {ACC_KEY_B, ACC_KEY_B, ACC_NEVER, ACC_NEVER}, + {ACC_KEY_B, ACC_NEVER, ACC_NEVER, ACC_NEVER}, + {ACC_NEVER, ACC_NEVER, ACC_NEVER, ACC_NEVER}, +}; +const Mifare::AccessType Mifare::trailerReadCondition[8][3] = +{ + {ACC_NEVER, ACC_KEY_A, ACC_KEY_A}, + {ACC_NEVER, ACC_KEY_A, ACC_KEY_A}, + {ACC_NEVER, ACC_KEY_AB, ACC_NEVER}, + {ACC_NEVER, ACC_KEY_AB, ACC_NEVER}, + {ACC_NEVER, ACC_KEY_A, ACC_KEY_A}, + {ACC_NEVER, ACC_KEY_AB, ACC_NEVER}, + {ACC_NEVER, ACC_KEY_AB, ACC_NEVER}, + {ACC_NEVER, ACC_KEY_AB, ACC_NEVER}, +}; +const Mifare::AccessType Mifare::trailerWriteCondition[8][3] = +{ + {ACC_KEY_A, ACC_NEVER, ACC_KEY_A}, + {ACC_NEVER, ACC_NEVER, ACC_NEVER}, + {ACC_KEY_B, ACC_NEVER, ACC_KEY_B}, + {ACC_NEVER, ACC_NEVER, ACC_NEVER}, + {ACC_KEY_A, ACC_KEY_A, ACC_KEY_A}, + {ACC_KEY_B, ACC_KEY_B, ACC_KEY_B}, + {ACC_NEVER, ACC_KEY_B, ACC_NEVER}, + {ACC_NEVER, ACC_NEVER, ACC_NEVER}, +}; + Mifare::Mifare(Ui::MainWindow *ui, Util *addr, QWidget *parent): QObject(parent) { this->parent = parent; diff --git a/module/mifare.h b/module/mifare.h index 8d2b9b9..e79829e 100644 --- a/module/mifare.h +++ b/module/mifare.h @@ -53,39 +53,23 @@ public: int blks[40]; }; - const CardType card_mini = + enum AccessType { - 0, - 5, - 20, - {4, 4, 4, 4, 4}, - {0, 4, 8, 12, 16} - }; - const CardType card_1k = - { - 1, - 16, - 64, - {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, - {0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60} - }; - const CardType card_2k = - { - 2, - 32, - 128, - {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, - {0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124} - }; - const CardType card_4k = - { - 4, - 40, - 256, - {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 16, 16, 16, 16, 16, 16}, - {0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 144, 160, 176, 192, 208, 224, 240} + ACC_NEVER = 0, + ACC_KEY_A = 1, + ACC_KEY_B = 2, + ACC_KEY_AB = 3, }; + static const CardType card_mini; + static const CardType card_1k; + static const CardType card_2k; + static const CardType card_4k; + + static const AccessType dataCondition[8][4]; + static const AccessType trailerReadCondition[8][3]; + static const AccessType trailerWriteCondition[8][3]; + void data_clearData(); void data_clearKey(); bool data_isKeyValid(const QString& key); diff --git a/ui/mf_trailerdecoderdialog.cpp b/ui/mf_trailerdecoderdialog.cpp index d9e1697..3dbd173 100644 --- a/ui/mf_trailerdecoderdialog.cpp +++ b/ui/mf_trailerdecoderdialog.cpp @@ -1,40 +1,6 @@ #include "mf_trailerdecoderdialog.h" #include "ui_mf_trailerdecoderdialog.h" -MF_trailerDecoderDialog::AccessType MF_trailerDecoderDialog::dataCondition[8][4] = -{ - {ACC_KEY_AB, ACC_KEY_AB, ACC_KEY_AB, ACC_KEY_AB}, - {ACC_KEY_AB, ACC_NEVER, ACC_NEVER, ACC_NEVER}, - {ACC_KEY_AB, ACC_KEY_B, ACC_NEVER, ACC_NEVER}, - {ACC_KEY_AB, ACC_KEY_B, ACC_KEY_B, ACC_KEY_AB}, - {ACC_KEY_AB, ACC_NEVER, ACC_NEVER, ACC_KEY_AB}, - {ACC_KEY_B, ACC_KEY_B, ACC_NEVER, ACC_NEVER}, - {ACC_KEY_B, ACC_NEVER, ACC_NEVER, ACC_NEVER}, - {ACC_NEVER, ACC_NEVER, ACC_NEVER, ACC_NEVER}, -}; -MF_trailerDecoderDialog::AccessType MF_trailerDecoderDialog::trailerReadCondition[8][3] = -{ - {ACC_NEVER, ACC_KEY_A, ACC_KEY_A}, - {ACC_NEVER, ACC_KEY_A, ACC_KEY_A}, - {ACC_NEVER, ACC_KEY_AB, ACC_NEVER}, - {ACC_NEVER, ACC_KEY_AB, ACC_NEVER}, - {ACC_NEVER, ACC_KEY_A, ACC_KEY_A}, - {ACC_NEVER, ACC_KEY_AB, ACC_NEVER}, - {ACC_NEVER, ACC_KEY_AB, ACC_NEVER}, - {ACC_NEVER, ACC_KEY_AB, ACC_NEVER}, -}; -MF_trailerDecoderDialog::AccessType MF_trailerDecoderDialog::trailerWriteCondition[8][3] = -{ - {ACC_KEY_A, ACC_NEVER, ACC_KEY_A}, - {ACC_NEVER, ACC_NEVER, ACC_NEVER}, - {ACC_KEY_B, ACC_NEVER, ACC_KEY_B}, - {ACC_NEVER, ACC_NEVER, ACC_NEVER}, - {ACC_KEY_A, ACC_KEY_A, ACC_KEY_A}, - {ACC_KEY_B, ACC_KEY_B, ACC_KEY_B}, - {ACC_NEVER, ACC_KEY_B, ACC_NEVER}, - {ACC_NEVER, ACC_NEVER, ACC_NEVER}, -}; - MF_trailerDecoderDialog::MF_trailerDecoderDialog(QWidget *parent) : QDialog(parent), ui(new Ui::MF_trailerDecoderDialog) @@ -94,21 +60,21 @@ void MF_trailerDecoderDialog::on_accessBitsEdit_textEdited(const QString &arg1) bool isKeyBReadable = ACBits[3] == 0 || ACBits[3] == 1 || ACBits[3] == 4; for(int j = 0; j < 3; j++) { - setTableItem(ui->trailerBlockWidget, 0, j, trailerReadCondition[ACBits[3]][j]); - setTableItem(ui->trailerBlockWidget, 1, j, trailerWriteCondition[ACBits[3]][j]); + setTableItem(ui->trailerBlockWidget, 0, j, Mifare::trailerReadCondition[ACBits[3]][j]); + setTableItem(ui->trailerBlockWidget, 1, j, Mifare::trailerWriteCondition[ACBits[3]][j]); } for(int i = 0; i < 3; i++) { for(int j = 0; j < 4; j++) { - AccessType type = dataCondition[ACBits[i]][j]; - if(type == ACC_KEY_B && isKeyBReadable) + Mifare::AccessType type = Mifare::dataCondition[ACBits[i]][j]; + if(type == Mifare::ACC_KEY_B && isKeyBReadable) { - type = ACC_NEVER; + type = Mifare::ACC_NEVER; } - else if(type == ACC_KEY_AB && isKeyBReadable) + else if(type == Mifare::ACC_KEY_AB && isKeyBReadable) { - type = ACC_KEY_A; + type = Mifare::ACC_KEY_A; } setTableItem(ui->dataBlockWidget, i, j, type); } @@ -136,24 +102,24 @@ void MF_trailerDecoderDialog::on_blockSizeChanged(int id, bool st) } } -void MF_trailerDecoderDialog::setTableItem(QTableWidget* widget, int row, int column, AccessType accessType) +void MF_trailerDecoderDialog::setTableItem(QTableWidget* widget, int row, int column, Mifare::AccessType accessType) { if(widget->item(row, column) == nullptr) widget->setItem(row, column, new QTableWidgetItem()); QString text; - if(accessType == ACC_NEVER) + if(accessType == Mifare::ACC_NEVER) { text = "X"; } - else if(accessType == ACC_KEY_A) + else if(accessType == Mifare::ACC_KEY_A) { text = "KeyA"; } - else if(accessType == ACC_KEY_B) + else if(accessType == Mifare::ACC_KEY_B) { text = "KeyB"; } - else if(accessType == ACC_KEY_AB) + else if(accessType == Mifare::ACC_KEY_AB) { text = "KeyA+B"; } diff --git a/ui/mf_trailerdecoderdialog.h b/ui/mf_trailerdecoderdialog.h index 281260a..2629cc1 100644 --- a/ui/mf_trailerdecoderdialog.h +++ b/ui/mf_trailerdecoderdialog.h @@ -6,6 +6,7 @@ #include #include #include +#include "../module/mifare.h" namespace Ui { @@ -19,13 +20,6 @@ class MF_trailerDecoderDialog : public QDialog public: explicit MF_trailerDecoderDialog(QWidget *parent = nullptr); ~MF_trailerDecoderDialog(); - enum AccessType - { - ACC_NEVER = 0, - ACC_KEY_A = 1, - ACC_KEY_B = 2, - ACC_KEY_AB = 3, - }; private slots: @@ -36,12 +30,7 @@ private: Ui::MF_trailerDecoderDialog *ui; QRegularExpressionValidator* validator; QButtonGroup* sizeGroup; - void setTableItem(QTableWidget *widget, int row, int column, AccessType accessType); - - // If I don't make them static, the app will crash(these arrays might take too much space) - static AccessType dataCondition[8][4]; - static AccessType trailerReadCondition[8][3]; - static AccessType trailerWriteCondition[8][3]; + void setTableItem(QTableWidget *widget, int row, int column, Mifare::AccessType accessType); };