version 1.7, 2016/09/03 12:59:33 |
version 1.8, 2016/09/03 17:04:13 |
|
|
{ |
{ |
uint8_t *buffer; |
uint8_t *buffer; |
uint8_t *residual; |
uint8_t *residual; |
uint8_t output[SHA384_DIGEST_STRING_LENGTH]; |
uint8_t output[SHA512_256_DIGEST_STRING_LENGTH]; |
|
|
buffer = xmalloc(bufsize); |
buffer = xmalloc(bufsize); |
residual = (uint8_t *)endsha + 1; |
residual = (uint8_t *)endsha + 1; |
|
|
if (more == 0) |
if (more == 0) |
break; |
break; |
} |
} |
SHA384Data(buffer, n, output); |
SHA512_256Data(buffer, n, output); |
if (endsha - sha < SHA384_DIGEST_STRING_LENGTH-1) |
if (endsha - sha < SHA512_256_DIGEST_STRING_LENGTH-1) |
errx(4, "signature truncated"); |
errx(4, "signature truncated"); |
if (memcmp(output, sha, SHA384_DIGEST_STRING_LENGTH-1) != 0) |
if (memcmp(output, sha, SHA512_256_DIGEST_STRING_LENGTH-1) != 0) |
errx(4, "signature mismatch"); |
errx(4, "signature mismatch"); |
if (sha[SHA384_DIGEST_STRING_LENGTH-1] != '\n') |
if (sha[SHA512_256_DIGEST_STRING_LENGTH-1] != '\n') |
errx(4, "signature mismatch"); |
errx(4, "signature mismatch"); |
sha += SHA384_DIGEST_STRING_LENGTH; |
sha += SHA512_256_DIGEST_STRING_LENGTH; |
writeall(fdout, buffer, n, "stdout"); |
writeall(fdout, buffer, n, "stdout"); |
if (n != bufsize) |
if (n != bufsize) |
break; |
break; |
|
|
meta = p; |
meta = p; |
#define BEGINS_WITH(x, y) memcmp((x), (y), sizeof(y)-1) == 0 |
#define BEGINS_WITH(x, y) memcmp((x), (y), sizeof(y)-1) == 0 |
|
|
while (BEGINS_WITH(p, "algorithm=SHA384") || |
while (BEGINS_WITH(p, "algorithm=SHA512/256") || |
BEGINS_WITH(p, "date=") || |
BEGINS_WITH(p, "date=") || |
sscanf(p, "blocksize=%zu\n", &bufsize) > 0) { |
sscanf(p, "blocksize=%zu\n", &bufsize) > 0) { |
while (*(p++) != '\n') |
while (*(p++) != '\n') |
|
|
if (lseek(fdin, h.headerlength, SEEK_SET) == -1) |
if (lseek(fdin, h.headerlength, SEEK_SET) == -1) |
err(1, "seek in %s", msgfile); |
err(1, "seek in %s", msgfile); |
|
|
space = (sb.st_size / MYBUFSIZE+1) * SHA384_DIGEST_STRING_LENGTH + |
space = (sb.st_size / MYBUFSIZE+1) * SHA512_256_DIGEST_STRING_LENGTH + |
1024; /* long enough for extra header information */ |
1024; /* long enough for extra header information */ |
|
|
msg = xmalloc(space); |
msg = xmalloc(space); |
|
|
strftime(date, sizeof date, "%Y-%m-%dT%H:%M:%SZ", gmtime(&clock)); |
strftime(date, sizeof date, "%Y-%m-%dT%H:%M:%SZ", gmtime(&clock)); |
snprintf(msg, space, |
snprintf(msg, space, |
"date=%s\n" |
"date=%s\n" |
"algorithm=SHA384\n" |
"algorithm=SHA512/256\n" |
"blocksize=%zu\n\n", |
"blocksize=%zu\n\n", |
date, bufsize); |
date, bufsize); |
p = strchr(msg, 0); |
p = strchr(msg, 0); |
|
|
err(1, "read from %s", msgfile); |
err(1, "read from %s", msgfile); |
if (n == 0) |
if (n == 0) |
break; |
break; |
SHA384Data(buffer, n, p); |
SHA512_256Data(buffer, n, p); |
p += SHA384_DIGEST_STRING_LENGTH; |
p += SHA512_256_DIGEST_STRING_LENGTH; |
p[-1] = '\n'; |
p[-1] = '\n'; |
if (msg + space < p) |
if (msg + space < p) |
errx(1, "file too long %s", msgfile); |
errx(1, "file too long %s", msgfile); |