diff options
Diffstat (limited to 'src/m_paper_key/parse.cpp')
-rw-r--r-- | src/m_paper_key/parse.cpp | 137 |
1 files changed, 0 insertions, 137 deletions
diff --git a/src/m_paper_key/parse.cpp b/src/m_paper_key/parse.cpp index 32cb704..f3c924e 100644 --- a/src/m_paper_key/parse.cpp +++ b/src/m_paper_key/parse.cpp @@ -19,7 +19,6 @@ #include "parse.h" #include <qcryptographichash.h> -#include <qdatastream.h> #include <cstdio> #include <cstdlib> @@ -32,142 +31,6 @@ extern int verbose; extern int ignore_crc_error; -struct packet *parse2(QDataStream &stream, unsigned char want, - unsigned char stop) { - int byte; - struct packet *packet = NULL; - - while (!stream.atEnd()) { - stream >> byte; - - unsigned char type; - unsigned int length; - - if ((byte & 0x80) != 0) { - int tmp; - - type = byte & 0x3F; - - /* Old-style packet type */ - if (!(byte & 0x40)) type >>= 2; - - if (type == stop) { - stream << byte; - break; - } - - if (byte & 0x40) { - /* New-style packets */ - stream >> byte; - if (byte == EOF) goto fail; - - if (byte == 255) { - /* 4-byte length */ - stream >> tmp; - if (tmp == EOF) goto fail; - length = tmp << 24; - stream >> tmp; - if (tmp == EOF) goto fail; - length |= tmp << 16; - stream >> tmp; - if (tmp == EOF) goto fail; - length |= tmp << 8; - stream >> tmp; - if (tmp == EOF) goto fail; - length |= tmp; - } else if (byte >= 224) { - /* Partial body length, so fail (keys can't use - partial body) */ - fprintf(stderr, "Invalid partial packet encoding\n"); - goto fail; - } else if (byte >= 192) { - /* 2-byte length */ - stream >> tmp; - if (tmp == EOF) goto fail; - length = ((byte - 192) << 8) + tmp + 192; - } else - length = byte; - } else { - /* Old-style packets */ - switch (byte & 0x03) { - case 0: - /* 1-byte length */ - stream >> byte; - if (byte == EOF) goto fail; - length = byte; - break; - - case 1: - /* 2-byte length */ - stream >> byte; - if (byte == EOF) goto fail; - stream >> tmp; - if (tmp == EOF) goto fail; - length = byte << 8; - length |= tmp; - break; - - case 2: - /* 4-byte length */ - stream >> tmp; - if (tmp == EOF) goto fail; - length = tmp << 24; - stream >> tmp; - if (tmp == EOF) goto fail; - length |= tmp << 16; - stream >> tmp; - if (tmp == EOF) goto fail; - length |= tmp << 8; - stream >> tmp; - if (tmp == EOF) goto fail; - length |= tmp; - break; - - default: - fprintf(stderr, "Error: unable to parse old-style length\n"); - goto fail; - } - } - - if (verbose > 1) - fprintf(stderr, "Found packet of type %d, length %d\n", type, length); - } else { - fprintf(stderr, - "Error: unable to parse OpenPGP packets" - " (is this armored data?)\n"); - goto fail; - } - - if (want == 0 || type == want) { - packet = - static_cast<struct packet *>(GFAllocateMemory(sizeof(struct packet))); - packet->type = type; - packet->buf = static_cast<unsigned char *>(GFAllocateMemory(length)); - packet->len = length; - packet->size = length; - if (stream.readRawData(reinterpret_cast<char *>(packet->buf), - packet->len) < packet->len) { - fprintf(stderr, "Short read on packet type %d\n", type); - goto fail; - } - break; - } else { - /* We don't want it, so skip the packet. We don't use fseek - here since the input might be on stdin and that isn't - seekable. */ - - size_t i; - - for (i = 0; i < length; i++) stream >> byte; - } - } - - return packet; - -fail: - return nullptr; -} - struct packet *parse(FILE *input, unsigned char want, unsigned char stop) { int byte; struct packet *packet = NULL; |