[prev in list] [next in list] [prev in thread] [next in thread]
List: pgp-keyserver-folk
Subject: [schoepf@proteosys.de: patch_pgputil.c_take3]
From: Christoph Martin <martin () uni-mainz ! de>
Date: 2001-07-20 17:03:38
[Download RAW message or body]
Hi folks,
some time ago a friend of mine wrote a patch for pgputil.c to include
x509 certificates in pksd. Perhaps we can include it in pksd.
Christoph
Return-Path: <schoepf@proteosys.de>
Received: via tmail-4.1(11) (invoked by user martin) for martin; Thu, 26 Oct 2000 17:12:03 +0200 (MEST)
Received: from mailgate1.zdv.Uni-Mainz.DE (mailgate1.zdv.Uni-Mainz.DE [134.93.8.56])
by mail.Uni-Mainz.DE (8.9.3/8.9.3) with ESMTP id RAA27615
for <martin@mail.uni-mainz.de>; Thu, 26 Oct 2000 17:12:03 +0200 (MEST)
Received: from webgate.proteosys.de (mail.proteosys-ag.com [62.225.9.49])
by mailgate1.zdv.Uni-Mainz.DE (8.11.0/8.10.2) with ESMTP id e9QFBvR13175
for <martin@uni-mainz.de>; Thu, 26 Oct 2000 17:12:02 +0200 (MET DST)
Received: by webgate.proteosys.de (8.11.0/8.11.0) with ESMTP id e9QFA7v31791 .
for <martin@uni-mainz.de>; Thu, 26 Oct 2000 17:10:08 +0200
Message-Id: <200010261511.e9QFBuk00387@lucy.proteosys>
Date: Thu, 26 Oct 2000 17:11:56 +0200
From: schoepf@proteosys.de
To: martin@uni-mainz.de
Subject: patch_pgputil.c_take3
X-Status:
X-Keywords:
X-UID: 3929
*** pgputil.c.~1~ Wed May 26 05:35:28 1999
--- pgputil.c Thu Oct 26 15:45:00 2000
***************
*** 16,21 ****
--- 16,25 ----
#include "armor.h"
#include "shs.h"
+ #ifdef HANDLE_X509
+ #include <openssl/x509.h>
+ #endif
+
int generate_dsa_keyid(ddesc *data, unsigned char *keyid)
{
unsigned char hash[20];
***************
*** 142,147 ****
--- 146,202 ----
return(1);
}
+ #ifdef HANDLE_X509
+ int decode_x509(ddesc *data, long len, ddesc *keyid)
+ {
+ X509 *cert = NULL;
+ EVP_PKEY *pkey;
+ int ret = 0;
+ char *keyid_hex;
+ BIGNUM *b;
+ unsigned char *data_start = data->data+data->offset;
+
+ if (d2i_X509(&cert, &data_start, len) != NULL) {
+ /* X.509 certificate has been parsed,
+ now get keyid = last 4 bytes of modulus */
+ pkey = X509_get_pubkey(cert);
+ if (pkey != NULL && pkey->type == EVP_PKEY_RSA) {
+ /* pkey->pkey.rsa->n is the modulus */
+ b = BN_dup(pkey->pkey.rsa->n);
+ BN_mask_bits(b,32);
+ keyid_hex = BN_bn2hex(b);
+ if (keyid_hex != NULL) {
+ /* left pad with zeroes if necessary */
+ if ((keyid->data = malloc(8)) != NULL) {
+ memset(keyid->data,'0',8);
+ memcpy(keyid->data+8-strlen(keyid_hex),keyid_hex,strlen(keyid_hex));
+ free(keyid_hex);
+ keyid->size = 8;
+ ret = 1;
+ }
+ }
+ }
+ }
+ data->offset += len;
+ return(ret);
+ }
+
+ int decode_nai(ddesc *data, long len, ddesc *keyid)
+ {
+ len -= 3; /* skip header */
+ if (len < 0 || data->data[data->offset++] != 1 ||
+ data->data[data->offset++] != 1 ||
+ data->data[data->offset++] != 4) {
+ /* don't know how to handle this case */
+ data->offset += len;
+ return(0);
+ }
+
+ /* here follows an asn.1 coded X.509 certificate */
+ return(decode_x509(data, len, keyid));
+ }
+ #endif
+
int decode_subpacket(ddesc *data, time_t *sig_time, ddesc *keyid)
{
long OverallSPlen;
***************
*** 165,170 ****
--- 220,229 ----
decode_time(data, sig_time);
else if (SPtype == 16) /* keyid of signer */
decode_bytestr(data, SPlen - 1, keyid);
+ #ifdef HANDLE_X509
+ else if (SPtype == 100) /* NAI private */
+ decode_nai(data, SPlen - 1, keyid);
+ #endif
else
data->offset += SPlen - 1;
***************
*** 275,280 ****
--- 334,341 ----
char msg[100];
#endif
+ keyid->size = 0;
+
if (!decode_num(data, 1, &version))
return(0);
***************
*** 372,377 ****
--- 433,444 ----
if (!decode_mpi(data, &sig) || !decode_mpi(data, &sig))
return(0);
break;
+ #if 0
+ case 100: /* X.509 */
+ if (!decode_x509(data, &sig)
+ return(0);
+ break;
+ #endif
default:
/* this is kind of ugly. There can be any number of MPI's here
(although 2 is the largest and most likely number. */
***************
*** 395,401 ****
}
}
! return(1);
}
int decode_packet(ddesc *data, packet_handler h, void *c)
--- 462,468 ----
}
}
! return(keyid->size > 0);
}
int decode_packet(ddesc *data, packet_handler h, void *c)
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic