@@ -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)
 | 
				
			|||||||
    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 @@
 | 
				
			|||||||
#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,
 | 
				
			|||||||
        *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,
 | 
				
			|||||||
                                      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,
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    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 {
 | 
				
			|||||||
    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;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user