Hi,
Try:
EVP_PKEY *pkey = X509_get_pubkey(cert);
rsa_public_key = EVP_PKEY_get1_RSA(pkey);
Cheers
Christian
On Mon, May 23, 2011 at 06:41:34PM +0530, Vinay Kumar wrote:
> Hi All,
>
> I am trying to print *public modulus* and *public exponent* from a *X509
> certificate*. The code snippet is as follows:
>
> modulus_and_exponent(X509 *cert) {
>
> RSA *rsa_public_key = NULL;
>
> if(cert->cert_info->key->pkey) {
> rsa_public_key = EVP_PKEY_get1_RSA
> (cert->cert_info->key->pkey);
> printf("Public
> exponent------>%s\n",BN_bn2dec(rsa_public_key->e));
> printf("Public
> modulus------>%s\n",BN_bn2dec(rsa_public_key->n));
> }
> else {
> printf("PKEY NOT FOUND\n");
> }
> }
>
>
> Output: *PKEY NOT FOUND*
>
> The key structure contains other valid fields but pkey field is NULL
> when checked through gdb:
>
> *(gdb) p *(cert->cert_info) *
> $1 = {version = 0x8f2ecb8, serialNumber = 0x8f2fa38, signature =
> 0x8f2fa50,
> issuer = 0x8f2fa60, validity = 0x8f25fb8, subject = 0x8f25ff8, key
> = 0x8f26050,
> issuerUID = 0x0, subjectUID = 0x0, extensions = 0x8f2ef58}
> *(gdb) p *(cert->cert_info->key) *
> $2 = {algor = 0x8f26060, public_key = 0x8f26070, *pkey = 0x0*}
> (gdb)
>
>
> The same certificate when printed using OpenSSL command *displays
> exponent and modulus* as follows*:*
>
> Certificate:
> Data:
> Version: 3 (0x2)
> Serial Number: 389 (0x185)
> Signature Algorithm: sha1WithRSAEncryption
> Issuer: C=IN, O=CL, OU=XYZ, CN=PC CA
> Validity
> Not Before: Nov 25 12:40:41 2010 GMT
> Not After : Feb 28 12:40:41 2031 GMT
> Subject: C=IN, O=Global, OU=XYZ, CN=Global CA
> Subject Public Key Info:
> Public Key Algorithm: rsaEncryption
> RSA Public Key: (2048 bit)
> * Modulus (2048 bit): *
> 00:dd:c6:44:3b:c0:39:0d:e8:75:21:89:fa:41:f2:
> ca:b1:46:d1:a2:b8:ea:78:f2:6e:27:84:03:d1:0a:
> 4d:85:4f:f9:5a:56:25:85:7b:1b:01:b2:de:31:df:
> 1a:3d:32:9d:0f:c9:a6:b8:c6:89:7c:87:f3:f9:6d:
> a9:fd:79:df:0e:b3:ad:90:5e:05:fc:26:d5:11:e5:
> 03:73:e5:9b:9e:8f:40:af:a5:a0:09:e1:50:4f:22:
> 06:e5:80:03:77:26:af:d8:62:28:00:c5:bc:a3:fe:
> c2:e7:68:a7:9a:81:6a:07:35:ee:43:0f:eb:04:d6:
> ed:53:92:a8:b2:87:6a:02:5c:43:dd:61:cf:da:64:
> ba:15:13:22:3b:79:b1:83:04:69:0d:25:82:73:f9:
> d2:78:f6:cd:30:20:3e:eb:f2:7d:8e:56:e3:0f:38:
> 06:a2:21:b8:c8:a9:50:a8:4a:7f:3c:a8:d3:85:76:
> ec:53:38:a7:b6:4a:9c:a7:88:a5:b9:06:e0:a5:53:
> b3:fa:ae:97:bb:ab:e5:35:8a:ad:92:9c:55:b1:ac:
> a1:11:3b:d0:b6:4f:f8:da:bc:01:74:67:99:c7:7a:
> d1:d5:14:91:84:76:15:a8:41:34:99:fb:c9:00:92:
> cf:45:d4:db:66:2c:d7:5c:38:49:c9:a9:4b:0f:80:
> 55:0f
> *Exponent: 65537 (0x10001) *
> X509v3 extensions:
> X509v3 Key Usage: critical
> Certificate Sign, CRL Sign
> X509v3 Subject Key Identifier:
>
> 25:05:14:41:88:7F:0A:54:A4:04:92:05:9F:7B:F5:B1:63:D5:34:13
> X509v3 Authority Key Identifier:
>
> keyid:22:31:20:B5:A8:DD:AC:DB:52:28:24:E6:F6:C6:A3:13:F2:94:A0:32
>
> X509v3 Basic Constraints: critical
> CA:TRUE, pathlen:0
> Signature Algorithm: sha1WithRSAEncryption
> 45:39:8c:c9:91:9a:2c:b1:2b:78:18:2e:66:51:1c:29:9a:be:
> c0:37:d5:a8:57:a1:0f:f1:ea:83:3e:fc:5b:bf:2f:b4:b2:eb:
> 5e:7b:ec:7a:15:da:8d:74:15:1e:96:c1:9c:d5:0b:53:ef:0e:
> 2d:5c:55:17:65:60:38:0f:6c:f4:30:2b:f0:cd:fc:01:e8:9c:
> da:40:c5:31:f5:a9:3d:ab:20:69:de:4f:01:70:92:a6:e6:a6:
> 98:5d:ca:1b:d2:14:3d:58:cf:e3:9c:02:c3:82:98:6f:65:3b:
> 5c:20:f5:3e:47:9c:1c:4e:5c:a1:50:ff:a5:f4:45:c3:96:ce:
> af:9d:c8:dd:55:33:a6:d0:e5:5d:fc:c6:8a:07:c4:0d:22:45:
> c6:47:db:90:09:28:06:58:5d:83:1e:0a:35:5d:1a:72:50:d6:
> 37:ae:f3:84:1c:af:8e:f2:55:5a:68:38:dd:c3:2d:63:cc:03:
> c9:04:a8:59:c6:dc:ea:2f:23:0f:86:27:95:e3:f0:ba:9f:44:
> 75:21:80:ad:1b:76:55:fb:70:aa:a1:5b:a0:da:7d:65:61:99:
> 05:ca:ec:b1:2e:99:91:d5:c4:e8:ad:f5:30:e8:9b:39:e9:ae:
> 47:fa:a0:d9:d0:e6:36:ea:9b:8b:02:f1:09:ac:08:08:cb:59:
> bf:3d:bc:57
> -----BEGIN CERTIFICATE-----
> MIID0jCCArqgAwIBAgICAYUwDQYJKoZIhvcNAQEFBQAwbzELMAkGA1UEBhMCVVMx
> EjAQBgNVBAoTCUNhYmxlTGFiczEUMBIGA1UECxMLUGFja2V0Q2FibGUxNjA0BgNV
> BAMTLVBhY2tldENhYmxlIFJvb3QgRGV2aWNlIENlcnRpZmljYXRlIEF1dGhvcml0
> eTAeFw0xMDExMjUxMjQwNDFaFw0zMTAyMjgxMjQwNDFaMIGAMQswCQYDVQQGEwJJ
> TjElMCMGA1UEChMcR2xvYmFsIEVkZ2UgU29mdHdhcmUgTGltaXRlZDEUMBIGA1UE
> CxMLUGFja2V0Q2FibGUxNDAyBgNVBAMTK0dsb2JhbCBFZGdlIFNvZnR3YXJlIExp
> bWl0ZWQgUGFja2V0Q2FibGUgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
> AoIBAQDdxkQ7wDkN6HUhifpB8sqxRtGiuOp48m4nhAPRCk2FT/laViWFexsBst4x
> 3xo9Mp0Pyaa4xol8h/P5ban9ed8Os62QXgX8JtUR5QNz5Zuej0CvpaAJ4VBPIgbl
> gAN3Jq/YYigAxbyj/sLnaKeagWoHNe5DD+sE1u1Tkqiyh2oCXEPdYc/aZLoVEyI7
> ebGDBGkNJYJz+dJ49s0wID7r8n2OVuMPOAaiIbjIqVCoSn88qNOFduxTOKe2Spyn
> iKW5BuClU7P6rpe7q+U1iq2SnFWxrKERO9C2T/javAF0Z5nHetHVFJGEdhWoQTSZ
> +8kAks9F1NtmLNdcOEnJqUsPgFUPAgMBAAGjZjBkMA4GA1UdDwEB/wQEAwIBBjAd
> BgNVHQ4EFgQUJQUUQYh/ClSkBJIFn3v1sWPVNBMwHwYDVR0jBBgwFoAUIjEgtajd
> rNtSKCTm9sajE/KUoDIwEgYDVR0TAQH/BAgwBgEB/wIBADANBgkqhkiG9w0BAQUF
> AAOCAQEARTmMyZGaLLEreBguZlEcKZq+wDfVqFehD/Hqgz78W78vtLLrXnvsehXa
> jXQVHpbBnNULU+8OLVxVF2VgOA9s9DAr8M38Aeic2kDFMfWpPasgad5PAXCSpuam
> mF3KG9IUPVjP45wCw4KYb2U7XCD1PkecHE5coVD/pfRFw5bOr53I3VUzptDlXfzG
> igfEDSJFxkfbkAkoBlhdgx4KNV0aclDWN67zhByvjvJVWmg43cMtY8wDyQSoWcbc
> 6i8jD4YnlePwup9EdSGArRt2VftwqqFboNp9ZWGZBcrssS6ZkdXE6K31MOibOemu
> R/qg2dDmNuqbiwLxCawICMtZvz28Vw==
> -----END CERTIFICATE-----
>
>
> Please let me know the reason for getting *pkey as NULL* parameter and
> changes required to *print public modulus and public exponent.*
>
> Thanks & Best Regards,
> Vinay
>
______________________________________________________________________
OpenSSL Project http://www.openssl.org
User Support Mailing List [email protected]
Automated List Manager [email protected]