projects
/
onak.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add help text for keyd
[onak.git]
/
keyid.c
diff --git
a/keyid.c
b/keyid.c
index 95b5dd4452ce7c400557dee75e9e321629b50b7c..2bec710026f85a92fe4ce6f8547700d6b998f3c1 100644
(file)
--- a/
keyid.c
+++ b/
keyid.c
@@
-4,8
+4,6
@@
* Jonathan McDowell <noodles@earth.li>
*
* Copyright 2002 Project Purple
* Jonathan McDowell <noodles@earth.li>
*
* Copyright 2002 Project Purple
- *
- * $Id: keyid.c,v 1.8 2003/11/01 19:25:15 noodles Exp $
*/
#include <sys/types.h>
*/
#include <sys/types.h>
@@
-14,7
+12,7
@@
#include "keystructs.h"
#include "log.h"
#include "md5.h"
#include "keystructs.h"
#include "log.h"
#include "md5.h"
-#include "sha.h"
+#include "sha
1
.h"
/**
/**
@@
-40,60
+38,55
@@
unsigned char *get_fingerprint(struct openpgp_packet *packet,
unsigned char *fingerprint,
size_t *len)
{
unsigned char *fingerprint,
size_t *len)
{
- SHA1_C
ONTEXT
sha_ctx;
-
MD5_CONTEXT md5_ctx
;
+ SHA1_C
TX
sha_ctx;
+
struct md5_ctx md5_context
;
unsigned char c;
unsigned char c;
- unsigned char *buff = NULL;
size_t modlen, explen;
size_t modlen, explen;
- assert(fingerprint != NULL);
- assert(len != NULL);
+
log_
assert(fingerprint != NULL);
+
log_
assert(len != NULL);
*len = 0;
switch (packet->data[0]) {
case 2:
case 3:
*len = 0;
switch (packet->data[0]) {
case 2:
case 3:
- md5_init
(&md5_ctx
);
+ md5_init
_ctx(&md5_context
);
/*
* MD5 the modulus and exponent.
*/
modlen = ((packet->data[8] << 8) +
packet->data[9] + 7) >> 3;
/*
* MD5 the modulus and exponent.
*/
modlen = ((packet->data[8] << 8) +
packet->data[9] + 7) >> 3;
- md5_
write(&md5_ctx, &packet->data[10], modlen
);
+ md5_
process_bytes(&packet->data[10], modlen, &md5_context
);
explen = ((packet->data[10+modlen] << 8) +
packet->data[11+modlen] + 7) >> 3;
explen = ((packet->data[10+modlen] << 8) +
packet->data[11+modlen] + 7) >> 3;
- md5_write(&md5_ctx, &packet->data[12 + modlen], explen);
-
- md5_final(&md5_ctx);
- buff = md5_read(&md5_ctx);
+ md5_process_bytes(&packet->data[12 + modlen], explen,
+ &md5_context);
+ md5_finish_ctx(&md5_context, fingerprint);
*len = 16;
*len = 16;
- memcpy(fingerprint, buff, *len);
break;
case 4:
break;
case 4:
-
sha1_i
nit(&sha_ctx);
+
SHA1I
nit(&sha_ctx);
/*
* TODO: Can this be 0x99? Are all public key packets old
* format with 2 bytes of length data?
*/
c = 0x99;
/*
* TODO: Can this be 0x99? Are all public key packets old
* format with 2 bytes of length data?
*/
c = 0x99;
-
sha1_wri
te(&sha_ctx, &c, sizeof(c));
+
SHA1Upda
te(&sha_ctx, &c, sizeof(c));
c = packet->length >> 8;
c = packet->length >> 8;
-
sha1_wri
te(&sha_ctx, &c, sizeof(c));
+
SHA1Upda
te(&sha_ctx, &c, sizeof(c));
c = packet->length & 0xFF;
c = packet->length & 0xFF;
-
sha1_wri
te(&sha_ctx, &c, sizeof(c));
-
sha1_wri
te(&sha_ctx, packet->data,
+
SHA1Upda
te(&sha_ctx, &c, sizeof(c));
+
SHA1Upda
te(&sha_ctx, packet->data,
packet->length);
packet->length);
- sha1_final(&sha_ctx);
- buff = sha1_read(&sha_ctx);
-
+ SHA1Final(fingerprint, &sha_ctx);
*len = 20;
*len = 20;
- memcpy(fingerprint, buff, *len);
+
break;
default:
logthing(LOGTHING_ERROR, "Unknown key type: %d",
break;
default:
logthing(LOGTHING_ERROR, "Unknown key type: %d",
@@
-116,7
+109,7
@@
uint64_t get_packetid(struct openpgp_packet *packet)
size_t length = 0;
unsigned char buff[20];
size_t length = 0;
unsigned char buff[20];
- assert(packet != NULL);
+
log_
assert(packet != NULL);
switch (packet->data[0]) {
case 2:
switch (packet->data[0]) {
case 2:
@@
-135,11
+128,12
@@
uint64_t get_packetid(struct openpgp_packet *packet)
keyid += packet->data[offset++];
}
/*
keyid += packet->data[offset++];
}
/*
- * I thought we needed to ensure it's an RSA key, but pks
- * doesn't seem to care and I've seen some type 3 keys.
- * So just log a warning.
+ * Check for an RSA key; if not then log but accept anyway.
+ * 1 == RSA
+ * 2 == RSA Encrypt-Only
+ * 3 == RSA Sign-Only
*/
*/
- if (packet->data[7]
!= 1
) {
+ if (packet->data[7]
< 1 || packet->data[7] > 3
) {
logthing(LOGTHING_NOTICE,
"Type 2 or 3 key, but not RSA: %llx (type %d)",
keyid,
logthing(LOGTHING_NOTICE,
"Type 2 or 3 key, but not RSA: %llx (type %d)",
keyid,