feat: paper key use module log system
This commit is contained in:
parent
8d7546ad5b
commit
5b5e450b8f
@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
|
|
||||||
|
#include "GFModuleCommonUtils.hpp"
|
||||||
#include "output.h"
|
#include "output.h"
|
||||||
#include "packets.h"
|
#include "packets.h"
|
||||||
#include "parse.h"
|
#include "parse.h"
|
||||||
@ -34,14 +35,14 @@ int extract(FILE *input, FILE *output, enum data_type output_type) {
|
|||||||
|
|
||||||
packet = parse(input, 5, 0);
|
packet = parse(input, 5, 0);
|
||||||
if (!packet) {
|
if (!packet) {
|
||||||
fprintf(stderr, "Unable to find secret key packet\n");
|
LOG_ERROR("Unable to find secret key packet");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
offset = extract_secrets(packet);
|
offset = extract_secrets(packet);
|
||||||
if (offset == -1) return 1;
|
if (offset == -1) return 1;
|
||||||
|
|
||||||
if (verbose > 1) fprintf(stderr, "Secret offset is %d\n", offset);
|
if (verbose > 1) FLOG_DEBUG("Secret offset is %d", offset);
|
||||||
|
|
||||||
calculate_fingerprint(packet, offset, fingerprint);
|
calculate_fingerprint(packet, offset, fingerprint);
|
||||||
|
|
||||||
@ -64,7 +65,7 @@ int extract(FILE *input, FILE *output, enum data_type output_type) {
|
|||||||
offset = extract_secrets(packet);
|
offset = extract_secrets(packet);
|
||||||
if (offset == -1) return 1;
|
if (offset == -1) return 1;
|
||||||
|
|
||||||
if (verbose > 1) fprintf(stderr, "Secret subkey offset is %d\n", offset);
|
if (verbose > 1) FLOG_DEBUG("Secret subkey offset is %d\n", offset);
|
||||||
|
|
||||||
calculate_fingerprint(packet, offset, fingerprint);
|
calculate_fingerprint(packet, offset, fingerprint);
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
|
#include "GFModuleCommonUtils.hpp"
|
||||||
#include "GFSDKBasic.h"
|
#include "GFSDKBasic.h"
|
||||||
#include "output.h"
|
#include "output.h"
|
||||||
#include "packets.h"
|
#include "packets.h"
|
||||||
@ -74,7 +75,7 @@ struct packet *parse(FILE *input, unsigned char want, unsigned char stop) {
|
|||||||
} else if (byte >= 224) {
|
} else if (byte >= 224) {
|
||||||
/* Partial body length, so fail (keys can't use
|
/* Partial body length, so fail (keys can't use
|
||||||
partial body) */
|
partial body) */
|
||||||
fprintf(stderr, "Invalid partial packet encoding\n");
|
LOG_ERROR("Invalid partial packet encoding");
|
||||||
goto fail;
|
goto fail;
|
||||||
} else if (byte >= 192) {
|
} else if (byte >= 192) {
|
||||||
/* 2-byte length */
|
/* 2-byte length */
|
||||||
@ -120,17 +121,16 @@ struct packet *parse(FILE *input, unsigned char want, unsigned char stop) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "Error: unable to parse old-style length\n");
|
LOG_ERROR("unable to parse old-style length");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (verbose > 1)
|
if (verbose > 1) {
|
||||||
fprintf(stderr, "Found packet of type %d, length %d\n", type, length);
|
FLOG_DEBUG("Found packet of type %d, length %d", type, length);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr,
|
LOG_ERROR("unable to parse OpenPGP packets (is this armored data?)");
|
||||||
"Error: unable to parse OpenPGP packets"
|
|
||||||
" (is this armored data?)\n");
|
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,7 +142,7 @@ struct packet *parse(FILE *input, unsigned char want, unsigned char stop) {
|
|||||||
packet->len = length;
|
packet->len = length;
|
||||||
packet->size = length;
|
packet->size = length;
|
||||||
if (fread(packet->buf, 1, packet->len, input) < packet->len) {
|
if (fread(packet->buf, 1, packet->len, input) < packet->len) {
|
||||||
fprintf(stderr, "Short read on packet type %d\n", type);
|
FLOG_ERROR("Short read on packet type %d", type);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -201,7 +201,7 @@ ssize_t extract_secrets(struct packet *packet) {
|
|||||||
public stuff. */
|
public stuff. */
|
||||||
|
|
||||||
if (packet->buf[0] == 3) {
|
if (packet->buf[0] == 3) {
|
||||||
fprintf(stderr, "Version 3 (PGP 2.x style) keys are not supported.\n");
|
LOG_ERROR("Version 3 (PGP 2.x style) keys are not supported.");
|
||||||
return -1;
|
return -1;
|
||||||
} else if (packet->buf[0] == 4) {
|
} else if (packet->buf[0] == 4) {
|
||||||
/* Jump 5 bytes in. That gets us past 1 byte of version, and 4
|
/* Jump 5 bytes in. That gets us past 1 byte of version, and 4
|
||||||
@ -268,8 +268,7 @@ ssize_t extract_secrets(struct packet *packet) {
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
/* What algorithm? */
|
/* What algorithm? */
|
||||||
fprintf(stderr, "Unable to parse algorithm %u\n",
|
FLOG_ERROR("Unable to parse algorithm %u", packet->buf[offset - 1]);
|
||||||
packet->buf[offset - 1]);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -289,7 +288,7 @@ struct packet *read_secrets_file(FILE *secrets, enum data_type input_type) {
|
|||||||
packet = append_packet(packet, buffer, got);
|
packet = append_packet(packet, buffer, got);
|
||||||
|
|
||||||
if (got == 0 && !feof(secrets)) {
|
if (got == 0 && !feof(secrets)) {
|
||||||
fprintf(stderr, "Error: unable to read secrets file\n");
|
LOG_ERROR("unable to read secrets file");
|
||||||
free_packet(packet);
|
free_packet(packet);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -315,8 +314,8 @@ struct packet *read_secrets_file(FILE *secrets, enum data_type input_type) {
|
|||||||
|
|
||||||
linenum = atoi(line);
|
linenum = atoi(line);
|
||||||
if (linenum != next_linenum) {
|
if (linenum != next_linenum) {
|
||||||
fprintf(stderr, "Error: missing line number %u (saw %u)\n",
|
FLOG_ERROR("missing line number %u (saw %u)", next_linenum,
|
||||||
next_linenum, linenum);
|
linenum);
|
||||||
free_packet(packet);
|
free_packet(packet);
|
||||||
return NULL;
|
return NULL;
|
||||||
} else
|
} else
|
||||||
@ -340,10 +339,9 @@ struct packet *read_secrets_file(FILE *secrets, enum data_type input_type) {
|
|||||||
if (sscanf(tok, "%06lX", &new_crc)) {
|
if (sscanf(tok, "%06lX", &new_crc)) {
|
||||||
if (did_digit) {
|
if (did_digit) {
|
||||||
if ((new_crc & 0xFFFFFFL) != (line_crc & 0xFFFFFFL)) {
|
if ((new_crc & 0xFFFFFFL) != (line_crc & 0xFFFFFFL)) {
|
||||||
fprintf(stderr,
|
FLOG_ERROR("CRC on line %d does not match (%06lX!=%06lX)",
|
||||||
"CRC on line %d does not"
|
linenum, new_crc & 0xFFFFFFL,
|
||||||
" match (%06lX!=%06lX)\n",
|
line_crc & 0xFFFFFFL);
|
||||||
linenum, new_crc & 0xFFFFFFL, line_crc & 0xFFFFFFL);
|
|
||||||
if (!ignore_crc_error) {
|
if (!ignore_crc_error) {
|
||||||
free_packet(packet);
|
free_packet(packet);
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -368,7 +366,7 @@ struct packet *read_secrets_file(FILE *secrets, enum data_type input_type) {
|
|||||||
tok = next;
|
tok = next;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "No colon ':' found in line %u\n", linenum);
|
FLOG_ERROR("No colon ':' found in line %u", linenum);
|
||||||
free_packet(packet);
|
free_packet(packet);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -381,15 +379,15 @@ struct packet *read_secrets_file(FILE *secrets, enum data_type input_type) {
|
|||||||
do_crc24(&all_crc, packet->buf, packet->len);
|
do_crc24(&all_crc, packet->buf, packet->len);
|
||||||
|
|
||||||
if ((my_crc & 0xFFFFFFL) != (all_crc & 0xFFFFFFL)) {
|
if ((my_crc & 0xFFFFFFL) != (all_crc & 0xFFFFFFL)) {
|
||||||
fprintf(stderr, "CRC of secret does not match (%06lX!=%06lX)\n",
|
FLOG_ERROR("CRC of secret does not match (%06lX!=%06lX)",
|
||||||
my_crc & 0xFFFFFFL, all_crc & 0xFFFFFFL);
|
my_crc & 0xFFFFFFL, all_crc & 0xFFFFFFL);
|
||||||
if (!ignore_crc_error) {
|
if (!ignore_crc_error) {
|
||||||
free_packet(packet);
|
free_packet(packet);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "CRC of secret is missing\n");
|
LOG_ERROR("CRC of secret is missing");
|
||||||
if (!ignore_crc_error) {
|
if (!ignore_crc_error) {
|
||||||
free_packet(packet);
|
free_packet(packet);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
|
#include "GFModuleCommonUtils.hpp"
|
||||||
#include "GFSDKBasic.h"
|
#include "GFSDKBasic.h"
|
||||||
#include "output.h"
|
#include "output.h"
|
||||||
#include "packets.h"
|
#include "packets.h"
|
||||||
@ -41,7 +42,7 @@ static auto extract_keys(struct packet *packet) -> struct key * {
|
|||||||
|
|
||||||
/* Check the version */
|
/* Check the version */
|
||||||
if (packet->len && packet->buf[0] != 0) {
|
if (packet->len && packet->buf[0] != 0) {
|
||||||
fprintf(stderr, "Cannot handle secrets file version %d\n", packet->buf[0]);
|
FLOG_ERROR("Cannot handle secrets file version %d", packet->buf[0]);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,7 +69,7 @@ static auto extract_keys(struct packet *packet) -> struct key * {
|
|||||||
newkey->packet = append_packet(NULL, &packet->buf[idx], len);
|
newkey->packet = append_packet(NULL, &packet->buf[idx], len);
|
||||||
idx += len;
|
idx += len;
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "Warning: Short data in secret image\n");
|
LOG_WARN("Short data in secret image");
|
||||||
free(newkey);
|
free(newkey);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -76,11 +77,11 @@ static auto extract_keys(struct packet *packet) -> struct key * {
|
|||||||
newkey->next = key;
|
newkey->next = key;
|
||||||
key = newkey;
|
key = newkey;
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "Warning: Corrupt data in secret image\n");
|
LOG_WARN("Corrupt data in secret image");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "Warning: Short header in secret image\n");
|
LOG_WARN("Short header in secret image");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -105,7 +106,7 @@ auto restore(FILE *pubring, FILE *secrets, enum data_type input_type,
|
|||||||
int test = fgetc(secrets);
|
int test = fgetc(secrets);
|
||||||
|
|
||||||
if (test == EOF) {
|
if (test == EOF) {
|
||||||
fprintf(stderr, "Unable to check type of secrets file\n");
|
LOG_ERROR("Unable to check type of secrets file");
|
||||||
return 1;
|
return 1;
|
||||||
} else if (isascii(test) && isprint(test))
|
} else if (isascii(test) && isprint(test))
|
||||||
input_type = BASE16;
|
input_type = BASE16;
|
||||||
@ -170,11 +171,11 @@ auto restore(FILE *pubring, FILE *secrets, enum data_type input_type,
|
|||||||
free_keys(keys);
|
free_keys(keys);
|
||||||
output_end();
|
output_end();
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "Unable to parse secret data\n");
|
LOG_ERROR("Unable to parse secret data");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "Unable to read secrets file\n");
|
LOG_ERROR("Unable to read secrets file");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user