Hi Christian,

I am getting public modulus as NULL and public exponent a huge number when X509_get_pubkey() and EVP_PKEY_get1_RSA() is used to fetch public exponent and modulus fields. On printing the same certificate using OpenSSL command the public exponent and public modulus values are 65537 and 2048 bit respectively. The code snippet is as follows:

modulus_and_exponent(X509 *cert) {
   
    EVP_PKEY *pkey = X509_get_pubkey(cert);
    RSA *rsa_public_key = NULL;
    rsa_public_key = EVP_PKEY_get1_RSA(pkey);

    printf("PublicExponet->%s\n",BN_bn2dec(rsa_public_key->e));
    printf("Public modulus------>%s\n",BN_bn2dec(rsa_public_key->n));     /* Code crashes here as rsa_public_key->n is NULL */
}

Output: PublicExponent->279964342706543159665257626509989783222311151451322332440661199787945070689635058717755565780056915051263769453969105572897430499929
3745386264339644558683338200791056152198580705931322779689387202606383243164440904522925490656610122331992075987530306432028706884548314192719199948802768
2013935531243223237786019153197327666386125162585064239799789437289544526672152158051987971265743490012610974637622069525558253839966730499510722847180895
2344257684815792657502151663029681418529094171517923191010946320493177361393065606680894807596115830450328067935952849240287649292898772435573305764291222
90932390276617063126287
PublicModulus cannot be printed as Code crashes here as rsa_public_key->n is NULL

Thanks & Best Regards,
Vinay
      

Christian Hohnstaedt wrote:
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                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

  


--

Reply via email to