mirror of
https://codeberg.org/scip/pcp.git
synced 2025-12-17 12:00:56 +01:00
added tests/pipetest.c so I can test pcpstream with armoring with various blocksizes
This commit is contained in:
@@ -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
62
tests/pipetest.c
Normal 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;
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user