× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Hello Everyone,
Apologies for the lenghty email... Good afternoon, I am trying to encrypt data with RSA with public/private key provided by third party... I am using Qc3EncryptData and Qc3DecryptData APIs to do the encryption and decryption. The below code works fine for the for the public/private key created by cryptograhic service provider on the AS400 but not for the ones that are created by third party. I have all kinds of methods but no success... (I wonder why IBM makes it so difficult to use this APIs)...

Just as note: My counterparts in Java world in the my company had same issue with third party keys... They solved it by doing (In java ofcource)

c = Cipher.getInstance("RSA/ECB/PKCS1Padding", "BC");

Instead of

c = Cipher.getInstance("RSA", "BC");


Here is the code on the AS400....

H DEBUG  OPTION(*SRCSTMT:*NODEBUGIO)

‚*===================================================================== ‚*=====================================================================
    ‚*
    ‚*  PROGRAM: TESTPGM
    ‚*
    ‚*  DESCRIPTION: Test Program
    ‚*
    ‚*  CRTRPGMOD TESTPGM
    ‚*  CRTPGM PGM(TESTPGM) BNDSRVPGM(QC3DTAEN QC3DTADE QC3PRNG)
    ‚*
‚*=====================================================================
    ‚*  MODIFICATION LOG:
‚*=====================================================================
    ‚*
    ‚*  ChangeId Who    Date     Reason
‚* -------- ------ -------- ------------------------------------------ ‚*===================================================================== ‚*=====================================================================
    ‚*  program file specifications
‚*=====================================================================
    ‚*
    FKEYFILEP  IF   E           K DISK
    ‚*
‚*******************************************************************
    ‚*Data definitions
‚*******************************************************************
    ‚*ALGD0400 algorithm description structure
    DQC3D0400         DS
    ‚*                                             Qc3 Format ALGD0400
    D QC3PKA                  1      4B 0
    ‚*                                             Public Key Alg
    D QC3PKABF                5      5
    ‚*                                             PKA Block Format
    D QC3ERVED00              6      8             INZ(x'000000')
    ‚*                                             Reserved
    D QC3SHA                  9     12B 0
    ‚*                                             Signing Hash Alg
    ‚*KEYD0200 key description format structure
    DQC3D020000       DS
    ‚*                                             Qc3 Format KEYD0200
    D QC3KT                   1      4B 0
    ‚*                                             Key Type
    D QC3KSL                  5      8B 0
    ‚*                                             Key String Len
    D QC3KF                   9      9
    ‚*                                             Key Format
    D QC3ERVED02             10     12             inz(x'000000')
    ‚*                                             Reserved
    ‚*QC3KS                  13     13
    ‚*
    ‚*                                variable length
‚*******************************************************************

    ‚* API error structure
    D APIERR          DS
    D  ERRPRV                       10I 0 INZ(272)
    D  ERRLEN                       10I 0
    D  EXCPID                        7A
    D  RSRVD2                        1A
    D  EXCPDT                      256A
    D
    ‚*
    ‚*Encrypt Data
    ‚*
    D Qc3EncryptData  Pr                  ExtProc('Qc3EncryptData')
    D clrDta                     32767a
    D clrDtaLen                     10I 0
    D clrDtaFmt                      8
    D algorithm                           like(QC3D0400)
    D algorithmFmt                   8
    D key                                 like(KeyC)
    D keyFmt                         8
    D srvProvider                    1
    D deviceName                    10
    D encryptedData              32767a
    D encryptedBufL                 10I 0
    D encryptedRtnL                 10I 0
    D errcde                              like(APIERR)

    ‚*
    ‚* Decrypt Data
    ‚*
    D Qc3DecryptData  Pr                  ExtProc('Qc3DecryptData')
    D encryptedData              32767a
    D encryptedDtaL                 10I 0
    D algorithm                           like(QC3D0400)
    D algorithmFmt                   8
    D key                                 like(keyC)
    D keyFmt                         8
    D srvProvider                    1
    D deviceName                    10
    D clrDta                     32767a
    D clrDtaBufL                    10I 0
    D clrDtaRtnL                    10I 0
    D errcde                              like(APIERR)

    D ClrDtaRtn       S          32767a
    D clrDta          S          32767a
    D clrDtaLen       S             10I 0
    D clrDtaFmt       S              8    inz('DATA0100')
    D algorithm       S                   like(QC3D0400)
    D algorithmFmt    S              8    inz('ALGD0400')
    D key             S                   like(KeyC)
    D keyFmt          S              8    inz('KEYD0200')
    D srvProvider     S              1
    D deviceName      S             10
    D encryptedData   S          32767a
    D encryptedDtaL   S             10I 0
    D encryptedBufL   S             10I 0
    D encryptedRtnL   S             10I 0
    D clrDtaBufL      S             10I 0
    D clrDtaRtnL      S             10I 0
    D ReturnString    S          10000

    D KeyC            S           1504


    D InputStrinG     C                   'My Test String ABCDEF'

    D Length          S              5  0
‚*=====================================================================
    ‚* Main Line
‚*=====================================================================

    C                   Read      KeyFileP
    C                   Eval      Algorithm = QC3D0400

    C                   Exsr      $Encryption

    C                   Exsr      $Decryption


    C                   Seton                                        LR
    C                   Return
‚*=====================================================================
    ‚* $Encryption
‚*=====================================================================
    C     $Encryption   BegSR

    C                   Eval      QC3PKA = 50

    C                   Eval      QC3PKABF = '0'

    C                   Eval      QC3SHA  = X'00000000'

    C                   Eval      algorithm = QC3D0400

    ‚* Set up the key now.
    ‚* ===========================
    ‚* Key Type
    C                   Eval      QC3KT = 50
    ‚* Key Length

    C                   Eval      QC3KSL = KyLen
    ‚* Key Format
    C                   Eval      QC3KF = '1'
    ‚* Key String

    C                   Eval      KeyC = QC3D020000 + %Subst(Key1:1:KyLen)
    C                   Eval      Key  = KeyC

    C                   Eval      clrDta = InputString
    C                   Eval      clrDtaLen = %len(%trim(clrDta))
    C                   Eval      encryptedBufL = %size(encryptedData)
    C                   Reset                   EncryptedData

    C                   CallP     Qc3EncryptData(
    C                                clrDta        :
    C                                clrDtaLen     :
    C                                clrDtaFmt     :
    C                                algorithm     :
    C                                algorithmFmt  :
    C                                key           :
    C                                keyFmt        :
    C                                srvProvider   :
    C                                deviceName    :
    C                                encryptedData :
    C                                encryptedBufL :
    C                                encryptedRtnL :
    C                                APIERR
    C                             )
    C                   ExSr      ChkErrCde

    C                   Eval      ReturnString = %Subst(EncryptedData:1:
    C                                         EncryptedRtnL)


    C                   EndSR
‚*=====================================================================
    ‚* $Decryption
‚*=====================================================================
    C     $Decryption   BegSR

    C                   Eval      QC3PKA = 50

    C                   Eval      QC3PKABF = '0'

    C                   Eval      QC3SHA  = X'00000000'

    C                   Eval      algorithm = QC3D0400

    ‚* Set up the key now.
    ‚* ===========================
    ‚* Key Type
    C                   Eval      QC3KT = 51
    ‚* Key Length
     C                   Eval      QC3KSL = KyLen2
    ‚* Key Format
    C                   Eval      QC3KF = '1'
    ‚* Key String

    C                   Eval      KeyC = QC3D020000 + %Subst(Key2:1:KyLen2)
    C                   Eval      Key  = KeyC

    C                   Clear                   clrDta
    C                   Eval      clrDtaBufL = %size(clrDta)
    C                   Eval      encryptedDtaL = encryptedRtnL
    C                   CallP     Qc3DecryptData(
    C                                encryptedData :
    C                                encryptedDtaL :
    C                                algorithm     :
    C                                algorithmFmt  :
    C                                key           :
    C                                keyFmt        :
    C                                srvProvider   :
    C                                deviceName    :
    C                                ClrDta        :
    C                                clrDtaBufL    :
    C                                clrDtaRtnL    :
    C                                APIERR
    C                             )
    C                   ExSr      ChkErrCde

    C                   Eval      ReturnString= %Subst(ClrDta:1:clrDtaRtnL)


    C                   EndSR
‚*=====================================================================
    ‚* *INZSR
‚*=====================================================================
    C     *INZSR        BegSr
     C                   Eval      SrvProvider = '1'
    C                   Eval      DeviceName  = *BLANKS
    C                   EndSr
‚*=====================================================================
    ‚* ChkErrCde
‚*=====================================================================
    C     ChkErrCde     BegSr
    C                   If        ERRLEN > 0
    C     EXCPID        DSPLY
    C                   Dump
    C                   EndIf
    C                   EndSr
‚*=====================================================================




VENKAT REDDY



As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.