Skip to content

Commit 6128f61

Browse files
committed
adding a demo with sample input data
1 parent 1851762 commit 6128f61

2 files changed

Lines changed: 236 additions & 0 deletions

File tree

test/PKCS7_test.c

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
#include <string.h>
4+
#include <stdint.h>
5+
#include "./../include/PKCS7.h"
6+
#include "PKCS7_test.h"
7+
8+
void demonstrationPaddingOnTestInput(const uint8_t* const testDataExample, const uint16_t dataBitLength, const uint8_t BLOCK_SIZE);
9+
void printDescription(void);
10+
11+
int main (int argc, char* argv[])
12+
{
13+
if (argc != 3)
14+
{
15+
printDescription();
16+
exit(-1);
17+
}
18+
19+
testDataSizeSet testDataSizeInput = atoi(argv[1]);
20+
paddingBlockSize blockSizeInput = atoi(argv[2]) / 8;
21+
22+
if (blockSizeInput != BLOCK_SIZE_128_BIT && blockSizeInput != BLOCK_SIZE_256_BIT)
23+
{
24+
printf(
25+
"\n"
26+
"\033[1m \033[31m"
27+
"\tPadding block size error (check second CLI argument -- arg[2])"
28+
"\033[0m"
29+
"\n"
30+
);
31+
printDescription();
32+
exit(-1);
33+
}
34+
35+
switch (testDataSizeInput)
36+
{
37+
case TEST_24_BIT:
38+
demonstrationPaddingOnTestInput(testDataExample_24bit, testDataSizeInput, blockSizeInput);
39+
break;
40+
41+
case TEST_32_BIT:
42+
demonstrationPaddingOnTestInput(testDataExample_32bit, testDataSizeInput, blockSizeInput);
43+
break;
44+
45+
case TEST_64_BIT:
46+
demonstrationPaddingOnTestInput(testDataExample_64bit, testDataSizeInput, blockSizeInput);
47+
break;
48+
49+
case TEST_128_BIT:
50+
demonstrationPaddingOnTestInput(testDataExample_128bit, testDataSizeInput, blockSizeInput);
51+
break;
52+
53+
case TEST_192_BIT:
54+
demonstrationPaddingOnTestInput(testDataExample_192bit, testDataSizeInput, blockSizeInput);
55+
break;
56+
57+
case TEST_256_BIT:
58+
demonstrationPaddingOnTestInput(testDataExample_256bit, testDataSizeInput, blockSizeInput);
59+
break;
60+
61+
case TEST_384_BIT:
62+
demonstrationPaddingOnTestInput(testDataExample_384bit, testDataSizeInput, blockSizeInput);
63+
break;
64+
65+
case TEST_408_BIT:
66+
demonstrationPaddingOnTestInput(testDataExample_408bit, testDataSizeInput, blockSizeInput);
67+
break;
68+
69+
default:
70+
printf(
71+
"\n"
72+
"\033[1m \033[31m"
73+
"\tInput data size error (check first CLI argument -- arg[1])"
74+
"\033[0m"
75+
"\n"
76+
);
77+
printDescription();
78+
exit(-1);
79+
break;
80+
}
81+
82+
return 0;
83+
}
84+
85+
void demonstrationPaddingOnTestInput(const uint8_t* const testDataExample, const uint16_t dataBitLength, const uint8_t BLOCK_SIZE)
86+
{
87+
uint8_t testDataLength = dataBitLength / 8;
88+
uint8_t* testData = (uint8_t*) malloc(testDataLength);
89+
90+
memcpy(testData, testDataExample, testDataLength);
91+
92+
printf("\n************************************\n");
93+
printf("\nORIGINAL DATA (size is %i bytes):\n\n", testDataLength);
94+
for (uint8_t i = 0; i < testDataLength; i++)
95+
{
96+
printf("%x", testData[i]);
97+
((i + 1) % 4 == 0) ? printf("\n") : printf("\t");
98+
}
99+
printf("\n\n************************************\n");
100+
101+
PKCS7_Padding* structWithPaddingResult = addPadding(testData, testDataLength, BLOCK_SIZE);
102+
uint8_t* ptrToPaddingDataResult = structWithPaddingResult->dataWithPadding;
103+
104+
printf("\nWITH PADDING (now size is %li bytes):\n\n", structWithPaddingResult->dataLengthWithPadding);
105+
for (uint16_t i = 0; i < structWithPaddingResult->dataLengthWithPadding; i++)
106+
{
107+
printf("%x", *ptrToPaddingDataResult);
108+
((i + 1) % 4 == 0) ? printf("\n") : printf("\t");
109+
ptrToPaddingDataResult++;
110+
}
111+
printf("\n************************************\n");
112+
113+
PKCS7_unPadding* structWithUnpaddingResult = removePadding(structWithPaddingResult->dataWithPadding,
114+
structWithPaddingResult->dataLengthWithPadding);
115+
116+
uint8_t* ptrToUnpaddingDataResult = structWithUnpaddingResult->dataWithoutPadding;
117+
118+
printf("\nREMOVE PADDING (size is %li bytes):\n\n", structWithUnpaddingResult->dataLengthWithoutPadding);
119+
for (uint16_t i = 0; i < structWithUnpaddingResult->dataLengthWithoutPadding; i++)
120+
{
121+
printf("%x", *ptrToUnpaddingDataResult);
122+
((i + 1) % 4 == 0) ? printf("\n") : printf("\t");
123+
ptrToUnpaddingDataResult++;
124+
}
125+
printf("\n\n************************************\n\n");
126+
}
127+
128+
void printDescription(void)
129+
{
130+
printf(
131+
"\n"
132+
"\033[1m \033[32m"
133+
"\tFirst CLI argument (argv[1]) is size (in bits) of test data input:\n"
134+
"\t\tUse one of\t{24, 32, 64, 128, 192, 256, 384, 408}\n"
135+
"\n"
136+
"\tSecond CLI argument (argv[2]) is size (in bits) of padding block size:\n"
137+
"\t\tUse one of\t{128, 256}\n"
138+
"\033[0m"
139+
"\n\tFor example: PKCS7_test.out 24 128 or PKCS7_test.out 408 256\n"
140+
"\n"
141+
);
142+
}

test/PKCS7_test.h

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
#ifndef PKCS7_TEST_H
2+
#define PKCS7_TEST_H
3+
4+
typedef enum {
5+
TEST_24_BIT = 24,
6+
TEST_32_BIT = 32,
7+
TEST_64_BIT = 64,
8+
TEST_128_BIT = 128,
9+
TEST_192_BIT = 192,
10+
TEST_256_BIT = 256,
11+
TEST_384_BIT = 384,
12+
TEST_408_BIT = 408
13+
} testDataSizeSet;
14+
15+
16+
const uint8_t testDataExample_24bit[3] = {
17+
0xff, 0xfe, 0xfd
18+
};
19+
20+
const uint8_t testDataExample_32bit[4] = {
21+
0xff, 0xfe, 0xfd, 0xfc
22+
};
23+
24+
const uint8_t testDataExample_64bit[8] = {
25+
0xff, 0xfe, 0xfd, 0xfc,
26+
0xfb, 0xfa, 0xf9, 0xf8
27+
};
28+
29+
const uint8_t testDataExample_128bit[16] = {
30+
0xff, 0xfe, 0xfd, 0xfc,
31+
0xfb, 0xfa, 0xf9, 0xf8,
32+
0xf7, 0xf6, 0xf5, 0xf4,
33+
0xf3, 0xf2, 0xf1, 0xf0
34+
};
35+
36+
const uint8_t testDataExample_192bit[24] = {
37+
0xff, 0xfe, 0xfd, 0xfc,
38+
0xfb, 0xfa, 0xf9, 0xf8,
39+
0xf7, 0xf6, 0xf5, 0xf4,
40+
0xf3, 0xf2, 0xf1, 0xf0,
41+
42+
0xef, 0xee, 0xed, 0xec,
43+
0xeb, 0xea, 0xe9, 0xe8
44+
};
45+
46+
const uint8_t testDataExample_256bit[32] = {
47+
0xff, 0xfe, 0xfd, 0xfc,
48+
0xfb, 0xfa, 0xf9, 0xf8,
49+
0xf7, 0xf6, 0xf5, 0xf4,
50+
0xf3, 0xf2, 0xf1, 0xf0,
51+
52+
0xef, 0xee, 0xed, 0xec,
53+
0xeb, 0xea, 0xe9, 0xe8,
54+
0xe7, 0xe6, 0xe5, 0xe4,
55+
0xe3, 0xe2, 0xe1, 0xe0
56+
};
57+
58+
const uint8_t testDataExample_384bit[48] = {
59+
0xff, 0xfe, 0xfd, 0xfc,
60+
0xfb, 0xfa, 0xf9, 0xf8,
61+
0xf7, 0xf6, 0xf5, 0xf4,
62+
0xf3, 0xf2, 0xf1, 0xf0,
63+
64+
0xef, 0xee, 0xed, 0xec,
65+
0xeb, 0xea, 0xe9, 0xe8,
66+
0xe7, 0xe6, 0xe5, 0xe4,
67+
0xe3, 0xe2, 0xe1, 0xe0,
68+
69+
0xdf, 0xde, 0xdd, 0xdc,
70+
0xdb, 0xda, 0xd9, 0xd8,
71+
0xd7, 0xd6, 0xd5, 0xd4,
72+
0xd3, 0xd2, 0xd1, 0xd0
73+
};
74+
75+
const uint8_t testDataExample_408bit[51] = {
76+
0xff, 0xfe, 0xfd, 0xfc,
77+
0xfb, 0xfa, 0xf9, 0xf8,
78+
0xf7, 0xf6, 0xf5, 0xf4,
79+
0xf3, 0xf2, 0xf1, 0xf0,
80+
81+
0xef, 0xee, 0xed, 0xec,
82+
0xeb, 0xea, 0xe9, 0xe8,
83+
0xe7, 0xe6, 0xe5, 0xe4,
84+
0xe3, 0xe2, 0xe1, 0xe0,
85+
86+
0xdf, 0xde, 0xdd, 0xdc,
87+
0xdb, 0xda, 0xd9, 0xd8,
88+
0xd7, 0xd6, 0xd5, 0xd4,
89+
0xd3, 0xd2, 0xd1, 0xd0,
90+
91+
0xcf, 0xce, 0xcd
92+
};
93+
94+
#endif // PKCS7_TEST_H

0 commit comments

Comments
 (0)