86 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
From eay@mincom.com Fri Oct  4 18:29:06 1996
 | 
						|
Received: by orb.mincom.oz.au id AA29080
 | 
						|
  (5.65c/IDA-1.4.4 for eay); Fri, 4 Oct 1996 08:29:07 +1000
 | 
						|
Date: Fri, 4 Oct 1996 08:29:06 +1000 (EST)
 | 
						|
From: Eric Young <eay@mincom.oz.au>
 | 
						|
X-Sender: eay@orb
 | 
						|
To: wplatzer <wplatzer@iaik.tu-graz.ac.at>
 | 
						|
Cc: Eric Young <eay@mincom.oz.au>, SSL Mailing List <ssl-users@mincom.com>
 | 
						|
Subject: Re: Netscape's Public Key
 | 
						|
In-Reply-To: <19961003134837.NTM0049@iaik.tu-graz.ac.at>
 | 
						|
Message-Id: <Pine.SOL.3.91.961004081346.8018K-100000@orb>
 | 
						|
Mime-Version: 1.0
 | 
						|
Content-Type: TEXT/PLAIN; charset=US-ASCII
 | 
						|
Status: RO
 | 
						|
X-Status: 
 | 
						|
 | 
						|
On Thu, 3 Oct 1996, wplatzer wrote:
 | 
						|
> I get Public Key from Netscape (Gold 3.0b4), but cannot do anything
 | 
						|
> with it... It looks like (asn1parse):
 | 
						|
> 
 | 
						|
> 0:d=0 hl=3 l=180 cons: SEQUENCE
 | 
						|
> 3:d=1 hl=2 l= 96 cons: SEQUENCE
 | 
						|
> 5:d=2 hl=2 l= 92 cons: SEQUENCE
 | 
						|
> 7:d=3 hl=2 l= 13 cons: SEQUENCE
 | 
						|
> 9:d=4 hl=2 l= 9 prim: OBJECT :rsaEncryption
 | 
						|
> 20:d=4 hl=2 l= 0 prim: NULL
 | 
						|
> 22:d=3 hl=2 l= 75 prim: BIT STRING
 | 
						|
> 99:d=2 hl=2 l= 0 prim: IA5STRING :
 | 
						|
> 101:d=1 hl=2 l= 13 cons: SEQUENCE
 | 
						|
> 103:d=2 hl=2 l= 9 prim: OBJECT :md5withRSAEncryption
 | 
						|
> 114:d=2 hl=2 l= 0 prim: NULL
 | 
						|
> 116:d=1 hl=2 l= 65 prim: BIT STRING
 | 
						|
> 
 | 
						|
> The first BIT STRING is the public key and the second BIT STRING is 
 | 
						|
> the signature.
 | 
						|
> But a public key consists of the public exponent and the modulus. Are 
 | 
						|
> both numbers in the first BIT STRING?
 | 
						|
> Is there a document simply describing this coding stuff (checking 
 | 
						|
> signature, get the public key, etc.)?
 | 
						|
 | 
						|
Minimal in SSLeay.  If you want to see what the modulus and exponent are,
 | 
						|
try asn1parse -offset 25 -length 75 <key.pem
 | 
						|
asn1parse will currently stuff up on the 'length 75' part (fixed in next 
 | 
						|
release) but it will print the stuff.  If you are after more 
 | 
						|
documentation on ASN.1, have a look at www.rsa.com and get their PKCS 
 | 
						|
documents, most of my initial work on SSLeay was done using them.
 | 
						|
 | 
						|
As for SSLeay,
 | 
						|
util/crypto.num and util/ssl.num are lists of all exported functions in 
 | 
						|
the library (but not macros :-(.
 | 
						|
 | 
						|
The ones for extracting public keys from certificates and certificate 
 | 
						|
requests are EVP_PKEY *      X509_REQ_extract_key(X509_REQ *req);
 | 
						|
EVP_PKEY *      X509_extract_key(X509 *x509);
 | 
						|
 | 
						|
To verify a signature on a signed ASN.1 object
 | 
						|
int X509_verify(X509 *a,EVP_PKEY *key);
 | 
						|
int X509_REQ_verify(X509_REQ *a,EVP_PKEY *key);
 | 
						|
int X509_CRL_verify(X509_CRL *a,EVP_PKEY *key);
 | 
						|
int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a,EVP_PKEY *key);
 | 
						|
 | 
						|
I should mention that EVP_PKEY can be used to hold a public or a private key,
 | 
						|
since for  things like RSA and DSS, a public key is just a subset of what 
 | 
						|
is stored for the private key.
 | 
						|
 | 
						|
To sign any of the above structures
 | 
						|
 | 
						|
int X509_sign(X509 *a,EVP_PKEY *key,EVP_MD *md);
 | 
						|
int X509_REQ_sign(X509_REQ *a,EVP_PKEY *key,EVP_MD *md);
 | 
						|
int X509_CRL_sign(X509_CRL *a,EVP_PKEY *key,EVP_MD *md);
 | 
						|
int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *a,EVP_PKEY *key,EVP_MD *md);
 | 
						|
 | 
						|
where md is the message digest to sign with.
 | 
						|
 | 
						|
There are all defined in x509.h and all the _sign and _verify functions are
 | 
						|
actually macros to the ASN1_sign() and ASN1_verify() functions.
 | 
						|
These functions will put the correct algorithm identifiers in the correct 
 | 
						|
places in the structures.
 | 
						|
 | 
						|
eric
 | 
						|
--
 | 
						|
Eric Young                  | BOOL is tri-state according to Bill Gates.
 | 
						|
AARNet: eay@mincom.oz.au    | RTFM Win32 GetMessage().
 | 
						|
 | 
						|
 |