added tests/pipetest.c so I can test pcpstream with armoring with various blocksizes

This commit is contained in:
git@daemon.de
2014-02-26 15:31:45 +01:00
parent fd3edfc728
commit deace4109c
3 changed files with 74 additions and 4 deletions

View File

@@ -20,7 +20,7 @@
# #
AM_CFLAGS = -I../include/pcp -I../src -I../libpcp/scrypt/crypto -Wall -g AM_CFLAGS = -I../include/pcp -I../src -I../libpcp/scrypt/crypto -Wall -g
check_PROGRAMS = col invalidkeys pwhashes gencheader statictest cpptest buffertest sample streamtest check_PROGRAMS = col invalidkeys pwhashes gencheader statictest cpptest buffertest sample streamtest pipetest
gencheader_LDADD = ../libpcp/.libs/libpcp1.a gencheader_LDADD = ../libpcp/.libs/libpcp1.a
gencheader_SOURCES = gencheader.c gencheader_SOURCES = gencheader.c
@@ -37,6 +37,9 @@ sample_SOURCES = sample.c
streamtest_LDADD = ../libpcp/.libs/libpcp1.a streamtest_LDADD = ../libpcp/.libs/libpcp1.a
streamtest_SOURCES = streamtest.c streamtest_SOURCES = streamtest.c
pipetest_LDADD = ../libpcp/.libs/libpcp1.a
pipetest_SOURCES = pipetest.c
col_LDADD = ../libpcp/.libs/libpcp1.a col_LDADD = ../libpcp/.libs/libpcp1.a
col_SOURCES = collisions.c ../src/compat_getopt.c col_SOURCES = collisions.c ../src/compat_getopt.c

62
tests/pipetest.c Normal file
View File

@@ -0,0 +1,62 @@
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <pcp.h>
int main(int argc, char **argv) {
if(argc < 4) {
fprintf(stderr, "Usage: pipetest <read-blocksize> <z85-blocksize> <d|e>\n");
fprintf(stderr, "d - decode\ne - encode\n");
return 1;
}
size_t rblocksize;
size_t zblocksize;
char mode;
if((rblocksize = strtol(argv[1], NULL, 0)) == 0) {
fprintf(stderr, "Error: invalid read blocksize %s\n", argv[1]);
return 1;
}
if((zblocksize = strtol(argv[2], NULL, 0)) == 0) {
fprintf(stderr, "Error: invalid z85 blocksize %s\n", argv[2]);
return 1;
}
if(zblocksize % 4 != 0) {
fprintf(stderr, "Error: z85 blocksize shall be divisible by 4\n");
return 1;
}
mode = argv[3][0];
if(mode != 'd' && mode != 'e') {
fprintf(stderr, "Error: invalid mode %s\n", argv[3]);
return 1;
}
Pcpstream *in = ps_new_file(stdin);
Pcpstream *out = ps_new_file(stdout);
size_t got;
if(mode == 'e')
ps_armor(out, zblocksize);
else
ps_setdetermine(in, zblocksize);
void *buf = ucmalloc(rblocksize);
while(!ps_end(in)) {
got = ps_read(in, buf, rblocksize);
if(got > 0)
ps_write(out, buf, got);
}
ps_finish(out);
ps_close(in);
ps_close(out);
return 0;
}

View File

@@ -10,7 +10,8 @@ int main() {
unsigned char clear[8] = "ABCDEFGH"; unsigned char clear[8] = "ABCDEFGH";
unsigned char key[8] = "IxD8Lq1K"; unsigned char key[8] = "IxD8Lq1K";
unsigned char crypt[8] = {0}; unsigned char crypt[8] = {0};
int blocks = 48; int blocks = 8;
size_t blocksize = 4;
int i = 0; int i = 0;
if((out = fopen("teststream.out", "wb+")) == NULL) { if((out = fopen("teststream.out", "wb+")) == NULL) {
@@ -21,17 +22,19 @@ int main() {
/* out output stream, z85 encoded, use z85 blocksize 8 */ /* out output stream, z85 encoded, use z85 blocksize 8 */
Pcpstream *pout = ps_new_file(out); Pcpstream *pout = ps_new_file(out);
ps_print(pout, "~~~~~ BEGIN ~~~~~\r\n"); ps_print(pout, "~~~~~ BEGIN ~~~~~\r\n");
ps_armor(pout, 8); ps_armor(pout, blocksize);
/* "encrypt" a couple of times into the output stream */ /* "encrypt" a couple of times into the output stream */
for(i=0; i<blocks; i++) { for(i=0; i<blocks; i++) {
memcpy(crypt, clear, 8); memcpy(crypt, clear, 8);
_xorbuf(key, crypt, 8); _xorbuf(key, crypt, 8);
//_dump("crypt", crypt, 8);
ps_write(pout, crypt, 8); ps_write(pout, crypt, 8);
} }
/* done, put cached buffers out and close */ /* done, put cached buffers out and close */
ps_finish(pout); ps_finish(pout);
pout->armor = 0; pout->armor = 0;
ps_print(pout, "\r\n~~~~~ END ~~~~~\r\n"); ps_print(pout, "\r\n~~~~~ END ~~~~~\r\n");
ps_close(pout); ps_close(pout);
@@ -45,7 +48,7 @@ int main() {
Pcpstream *pin = ps_new_file(in); Pcpstream *pin = ps_new_file(in);
/* enable autmatically encoding detection. */ /* enable autmatically encoding detection. */
ps_setdetermine(pin, 8); ps_setdetermine(pin, blocksize);
/* we'll use this stream to put the "decrypted" data in. /* we'll use this stream to put the "decrypted" data in.
note, that this could be a file as well. */ note, that this could be a file as well. */
@@ -55,6 +58,7 @@ int main() {
for(i=0; i<blocks; i++) { for(i=0; i<blocks; i++) {
ps_read(pin, crypt, 8); ps_read(pin, crypt, 8);
_xorbuf(key, crypt, 8); _xorbuf(key, crypt, 8);
//_dump("got", crypt, 8);
ps_write(pclear, crypt, 8); ps_write(pclear, crypt, 8);
memset(crypt,0,8); memset(crypt,0,8);
} }
@@ -67,6 +71,7 @@ int main() {
/* and verify if it's "decrypted" (re-use crypt) */ /* and verify if it's "decrypted" (re-use crypt) */
for(i=0; i<blocks; i++) { for(i=0; i<blocks; i++) {
buffer_get_chunk(result, crypt, 8); buffer_get_chunk(result, crypt, 8);
//_dump("result", crypt, 8);
if(memcmp(crypt, clear, 8) != 0) { if(memcmp(crypt, clear, 8) != 0) {
fprintf(stderr, "Oops, block %d doesn't match\n", i); fprintf(stderr, "Oops, block %d doesn't match\n", i);
goto error; goto error;