mirror of https://github.com/PentHertz/liba53.git
100 lines
3.0 KiB
C++
100 lines
3.0 KiB
C++
#include <iostream>
|
|
#include <iomanip>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
#include <a53.h>
|
|
using namespace std;
|
|
|
|
void printer(int which, const char *label, u8 *vector, int lth)
|
|
{
|
|
cout << " block" << which << " " << label << " = ";
|
|
int i;
|
|
for (i = 0; i < lth; i++) {
|
|
cout << hex << std::setw(2) << setfill('0') << (int)vector[i] << dec;
|
|
}
|
|
}
|
|
|
|
void check(int which, u8 *exp, u8 *got)
|
|
{
|
|
printer(which, "exp", exp, 15);
|
|
printer(which, "got", got, 15);
|
|
int err = 0;
|
|
int i;
|
|
for (i = 0; i < 15; i++) {
|
|
if (exp[i] == got[i]) continue;
|
|
err = 1;
|
|
break;
|
|
}
|
|
if (err) {
|
|
cout << " ERROR" << endl;
|
|
} else {
|
|
cout << " ok" << endl;
|
|
}
|
|
}
|
|
|
|
int unhex(const char c)
|
|
{
|
|
if (c >= '0' && c <= '9') return c - '0';
|
|
if (c >= 'A' && c <= 'F') return c - 'A' + 10;
|
|
cout << "oops" << endl;
|
|
exit(1);
|
|
}
|
|
|
|
int seti(const char *src)
|
|
{
|
|
int r = 0;
|
|
for ( ; *src != 0; src++) {
|
|
r = (r << 4) + unhex(*src);
|
|
}
|
|
return r;
|
|
}
|
|
|
|
void setu8(u8 *dst, const char *src)
|
|
{
|
|
for ( ; *src != 0; src += 2) {
|
|
*dst++ = (unhex(src[0]) << 4) | (unhex(src[1]));
|
|
}
|
|
}
|
|
|
|
int main()
|
|
{
|
|
int i, keylth;
|
|
unsigned int count;
|
|
u8 key[16], exp1[15], exp2[15], got1[15], got2[15];
|
|
const char *data[52] = {
|
|
"2BD6459F82C5BC00", "24F20F", "889EEAAF9ED1BA1ABBD8436232E440", "5CA3406AA244CF69CF047AADA2DF40",
|
|
"952C49104881FF48", "061527", "AB7DB38A573A325DAA76E4CB800A40", "4C4B594FEA9D00FE8978B7B7BC1080",
|
|
"EFA8B2229E720C2A", "33FD3F", "0E4015755A336469C3DD8680E30340", "6F10669E2B4E18B042431A28E47F80",
|
|
"3451F23A43BD2C87", "0E418C", "75F7C4C51560905DFBA05E46FB54C0", "192C95353CDF979E054186DF15BF00",
|
|
"CAA2639BE82435CF", "2FF229", "301437E4D4D6565D4904C631606EC0", "F0A3B8795E264D3E1A82F684353DC0",
|
|
"7AE67E87400B9FA6", "2F24E5", "F794290FEF643D2EA348A7796A2100", "CB6FA6C6B8A705AF9FEFE975818500",
|
|
"58AF69935540698B", "05446B", "749CA4E6B691E5A598C461D5FE4740", "31C9E444CD04677ADAA8A082ADBC40",
|
|
"017F81E5F236FE62", "156B26", "2A6976761E60CC4E8F9F52160276C0", "A544D8475F2C78C35614128F1179C0",
|
|
"1ACA8B448B767B39", "0BC3B5", "A4F70DC5A2C9707F5FA1C60EB10640", "7780B597B328C1400B5C74823E8500",
|
|
// "5ACB1D644C0D512041A5", "1D5157", "8EFAEC49C355CCD995C2BF649FD480", "F3A2910CAEDF587E976171AAF33B80",
|
|
// "9315819243A043BEBE6E", "2E196F", "AA08DB46DD3DED78A612085C529D00", "0250463DA0E3886F9BC2E3BB0D73C0",
|
|
// "3D43C388C9581E337FF1F97EB5C1F85E", "35D2CF", "A2FE3034B6B22CC4E33C7090BEC340", "170D7497432FF897B91BE8AECBA880",
|
|
// "A4496A64DF4F399F3B4506814A3E07A1", "212777", "89CDEE360DF9110281BCF57755A040", "33822C0C779598C9CBFC49183AF7C0",
|
|
};
|
|
for (i = 32; i>=0; i-=4) {
|
|
cout << "test set " << (1+i/4) << endl;
|
|
setu8(key, data[i]);
|
|
keylth = strlen(data[i])*4;
|
|
count = seti(data[i+1]);
|
|
A53_GSM(key, keylth, count, got1, got2);
|
|
setu8(exp1, data[i+2]);
|
|
setu8(exp2, data[i+3]);
|
|
check(1, exp1, got1);
|
|
check(2, exp2, got2);
|
|
}
|
|
cout << "time test" << endl;
|
|
int n = 10000;
|
|
float t = clock();
|
|
for (i = 0; i < n; i++) {
|
|
A53_GSM(key, keylth, count, got1, got2);
|
|
}
|
|
t = (clock() - t) / (CLOCKS_PER_SEC * (float)n);
|
|
cout << "GSM takes " << t << " seconds per iteration" << endl;
|
|
exit(0);
|
|
}
|