提交 29fa0a1a 编写于 作者: D Dr. Stephen Henson

Make X509_PUBKEY opaque

Reviewed-by: NMatt Caswell <matt@openssl.org>
上级 91829e45
...@@ -70,10 +70,12 @@ int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki) ...@@ -70,10 +70,12 @@ int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki)
{ {
EVP_PKEY *pkey; EVP_PKEY *pkey;
ASN1_IA5STRING *chal; ASN1_IA5STRING *chal;
ASN1_OBJECT *spkioid;
int i, n; int i, n;
char *s; char *s;
BIO_printf(out, "Netscape SPKI:\n"); BIO_printf(out, "Netscape SPKI:\n");
i = OBJ_obj2nid(spki->spkac->pubkey->algor->algorithm); X509_PUBKEY_get0_param(&spkioid, NULL, NULL, NULL, spki->spkac->pubkey);
i = OBJ_obj2nid(spkioid);
BIO_printf(out, " Public Key Algorithm: %s\n", BIO_printf(out, " Public Key Algorithm: %s\n",
(i == NID_undef) ? "UNKNOWN" : OBJ_nid2ln(i)); (i == NID_undef) ? "UNKNOWN" : OBJ_nid2ln(i));
pkey = X509_PUBKEY_get(spki->spkac->pubkey); pkey = X509_PUBKEY_get(spki->spkac->pubkey);
......
...@@ -318,13 +318,6 @@ EVP_PKEY *X509_get_pubkey(X509 *x) ...@@ -318,13 +318,6 @@ EVP_PKEY *X509_get_pubkey(X509 *x)
return X509_PUBKEY_get(x->cert_info.key); return X509_PUBKEY_get(x->cert_info.key);
} }
ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x)
{
if (!x)
return NULL;
return x->cert_info.key->public_key;
}
int X509_check_private_key(X509 *x, EVP_PKEY *k) int X509_check_private_key(X509 *x, EVP_PKEY *k)
{ {
EVP_PKEY *xk; EVP_PKEY *xk;
......
...@@ -61,9 +61,17 @@ ...@@ -61,9 +61,17 @@
#include <openssl/x509.h> #include <openssl/x509.h>
#include "internal/asn1_int.h" #include "internal/asn1_int.h"
#include "internal/evp_int.h" #include "internal/evp_int.h"
#include "internal/x509_int.h"
#include <openssl/rsa.h> #include <openssl/rsa.h>
#include <openssl/dsa.h> #include <openssl/dsa.h>
struct X509_pubkey_st {
X509_ALGOR *algor;
ASN1_BIT_STRING *public_key;
EVP_PKEY *pkey;
CRYPTO_RWLOCK *lock;
};
/* Minor tweak to operation: free up EVP_PKEY */ /* Minor tweak to operation: free up EVP_PKEY */
static int pubkey_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, static int pubkey_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it,
void *exarg) void *exarg)
...@@ -375,3 +383,10 @@ int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg, ...@@ -375,3 +383,10 @@ int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg,
*pa = pub->algor; *pa = pub->algor;
return 1; return 1;
} }
ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x)
{
if (x == NULL)
return NULL;
return x->cert_info.key->public_key;
}
...@@ -104,7 +104,9 @@ static ASN1_OCTET_STRING *s2i_skey_id(X509V3_EXT_METHOD *method, ...@@ -104,7 +104,9 @@ static ASN1_OCTET_STRING *s2i_skey_id(X509V3_EXT_METHOD *method,
X509V3_CTX *ctx, char *str) X509V3_CTX *ctx, char *str)
{ {
ASN1_OCTET_STRING *oct; ASN1_OCTET_STRING *oct;
ASN1_BIT_STRING *pk; X509_PUBKEY *pubkey;
const unsigned char *pk;
int pklen;
unsigned char pkey_dig[EVP_MAX_MD_SIZE]; unsigned char pkey_dig[EVP_MAX_MD_SIZE];
unsigned int diglen; unsigned int diglen;
...@@ -125,17 +127,18 @@ static ASN1_OCTET_STRING *s2i_skey_id(X509V3_EXT_METHOD *method, ...@@ -125,17 +127,18 @@ static ASN1_OCTET_STRING *s2i_skey_id(X509V3_EXT_METHOD *method,
} }
if (ctx->subject_req) if (ctx->subject_req)
pk = ctx->subject_req->req_info.pubkey->public_key; pubkey = ctx->subject_req->req_info.pubkey;
else else
pk = ctx->subject_cert->cert_info.key->public_key; pubkey = ctx->subject_cert->cert_info.key;
if (!pk) { if (pubkey == NULL) {
X509V3err(X509V3_F_S2I_SKEY_ID, X509V3_R_NO_PUBLIC_KEY); X509V3err(X509V3_F_S2I_SKEY_ID, X509V3_R_NO_PUBLIC_KEY);
goto err; goto err;
} }
if (!EVP_Digest X509_PUBKEY_get0_param(NULL, &pk, &pklen, NULL, pubkey);
(pk->data, pk->length, pkey_dig, &diglen, EVP_sha1(), NULL))
if (!EVP_Digest(pk, pklen, pkey_dig, &diglen, EVP_sha1(), NULL))
goto err; goto err;
if (!ASN1_OCTET_STRING_set(oct, pkey_dig, diglen)) { if (!ASN1_OCTET_STRING_set(oct, pkey_dig, diglen)) {
......
...@@ -120,13 +120,6 @@ typedef struct X509_val_st { ...@@ -120,13 +120,6 @@ typedef struct X509_val_st {
ASN1_TIME *notAfter; ASN1_TIME *notAfter;
} X509_VAL; } X509_VAL;
struct X509_pubkey_st {
X509_ALGOR *algor;
ASN1_BIT_STRING *public_key;
EVP_PKEY *pkey;
CRYPTO_RWLOCK *lock;
};
typedef struct X509_sig_st X509_SIG; typedef struct X509_sig_st X509_SIG;
typedef struct X509_name_entry_st X509_NAME_ENTRY; typedef struct X509_name_entry_st X509_NAME_ENTRY;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册