×

Good News Everybody!

The new search engine is LIVE!

Please report any problems to david (at) midrange.com.




If this can help, the following sample program encrypt with public key and
decrypt with private key:

     H DftActGrp(*No) bnddir('ENCRYPT':'QC2LE')

     D/Copy QSYSINC/QRPGLESRC,QUSEC
     D/Copy QSYSINC/QRPGLESRC,QC3CCI

     DQc3EncryptData   pr                  extproc('Qc3EncryptData')
     D clrData                       64    const
     D clrDataSize                   10i 0 const
     D clrDataFmt                     8    const
     D algDesc                        1    const
     D algDescFmt                     8    const
     D keyDesc                        1    const
     D keyDescFmt                     8    const
     D csp                            1    const
     D cspDevNam                     10A   const
     D EncDta                        64
     D DtaLenPrv                     10i 0 const
     D DtaLenRtn                     10i 0
     D errCod                         1

     DQc3DecryptData   pr                  extproc('Qc3DecryptData')
     D EncDta                        64    const
     D EncDtaLen                     10i 0 const
     D algDesc                        1    const
     D algDescFmt                     8    const
     D keyDesc                        1    const
     D keyDescFmt                     8    const
     D csp                            1    const
     D cspDevNam                     10    const options(*omit)
     D ClrDta                        64
     D DtaLenPrv                     10i 0 const
     D DtaLenRtn                     10i 0
     D errCod                         1

     DClrDta           S             64
     DClrDtaLen        S             10I 0
     DDesDta           S             64
     DDesDtaLen        S             10I 0
     DDtaLenPrv        S             10I 0

     D RSA             Ds                  qualified
     D  KeyType                      10I 0
     D  KeyLen                       10I 0
     D  KeyFormat                     1
     D  KeyRes                        3
     D  KeyString                  2000

     D csp             s              1    inz('0')
     D rtnLen          s             10i 0
     D cipherLen       s             10i 0

      // Variabili per Read() e Close() APIs
     D FileDescI       S             10i 0 Inz(0)
     D bufferI         S          65000a   Inz(*blank)
     D  bufferIp       S               *   Inz(%addr(bufferI))
     D nByteSet        S             10u 0 Inz(%len(bufferI))
     D nByteRead       S             10i 0 Inz(0)
     D inputLng        S             10I 0

     D Cpybla          pr                  ExtProc('cpybla')
     D  Receiver                       *   value
     D  Source                         *   value
     D  Size                         10i 0 value

      // Prototipi API e relative costanti
      /COPY QSOAPY,IFSCOPY

      /Free

       //*******************************************************************
       //* CIFRATURA CON CHIAVE PUBBLICA
       //*******************************************************************

       // Apre la chiave pubblica
       FileDescI = open(%trimr('/home/costagliol/myPubKey') :
                   O_RDONLY);
       if FileDescI = -1;
         return;
       endif;
       Dou nByteRead <= 0;
         nByteRead = read(FileDescI : bufferIp : nByteSet);
         inputLng += nByteRead;
       Enddo;
       callp close(FileDescI);

       ClrDta = '1234567890123456';
       ClrDtaLen  = 16;
       DtaLenPrv  = 256;

       RSA.KeyType = 50;
       RSA.KeyLen = inputLng;
       RSA.KeyFormat = '1';
       RSA.KeyRes = *AllX'00';
       cpybla(%addr(RSA.KeyString):bufferIp:inputLng);

       QC3D0400 = *loval;
       QC3PKA   = 50;
       QC3PKABF = '2';
       QC3ERVED00 = *allx'00';
       QC3SHA = 0;

       Qc3EncryptData (ClrDta    : // Clear data
                       ClrDtaLen : // Length of clear data
                       'DATA0100': // Clear data format name
                       QC3D0400  : // Algorithm description
                       'ALGD0400': // Algorithm desc format name
                       RSA       : // Key description
                       'KEYD0200': // Key desc format name
                       csp       : // Crypto Service Provider
                       *BLANK    : // Crypto Device Name
                       DesDta    : // Encrypted data
                       DtaLenPrv : // Length of encrypted data
                       DesDtaLen : // Len of enc data returned
                       QUSEC);     // Error Code

       If QUsei <> *Blanks;
            DesDta = QUsei;
            DesDtaLen = 0;
       EndIf;

       //*******************************************************************
       //* DECIFRATURA CON CHIAVE PRIVATA
       //*******************************************************************

       // Apre la chiave privata
       FileDescI = open(%trimr('/home/costagliol/myPriKey') :
                   O_RDONLY);
       if FileDescI = -1;
         return;
       endif;
       Dou nByteRead <= 0;
         nByteRead = read(FileDescI : bufferIp : nByteSet);
         inputLng += nByteRead;
       Enddo;
       callp close(FileDescI);

       RSA.KeyType = 51;
       RSA.KeyLen = inputLng;
       RSA.KeyFormat = '1';
       RSA.KeyRes = *AllX'00';
       cpybla(%addr(RSA.KeyString):bufferIp:inputLng);

       Qc3DecryptData (DesDta    :
                       DesDtaLen :
                       QC3D0400  :
                       'ALGD0400':
                       RSA       :
                       'KEYD0200':
                       csp       :
                       *OMIT     :
                       ClrDta    :
                       DtaLenPrv : // Length of encrypted data
                       ClrDtaLen :
                       QUSEC);
       If QUsei <> *Blanks;
            ClrDta = QUsei;
            ClrDtaLen = 0;
       EndIf;

       *InLr = *On;

      /end-free

=======================

The publik key can be extracted from the certificate (without the password)
with this java code (runnng on as400):

import java.io.*;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.PublicKey;


public class ExtPubKey {

    public static void main(String[] args) {

       try {
         KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
         ks.load(new FileInputStream("myKeyStore.jks"),
"myPass".toCharArray());

         String alias = (String)ks.aliases().nextElement();
         Certificate c = ks.getCertificate(alias);
         PublicKey pub = c.getPublicKey();

         FileOutputStream fos = new FileOutputStream("myPubKey");
         byte[] encPubKey = pub.getEncoded();
         fos.write(encPubKey);
         fos.close();

        } catch (Exception de) {
          de.printStackTrace();
          //System.err.println(de.getMessage());
        }
    }
}

====================================

The private key can be extracted from the certificate (with the password):

import java.io.*;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.PrivateKey;


public class ExtPriKey {

    public static void main(String[] args) {

       try {
         KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
         ks.load(new FileInputStream("myKeyStore.jks"),
"myPass".toCharArray());
         String alias = (String)ks.aliases().nextElement();
         PrivateKey priv = (PrivateKey)ks.getKey(alias,
"myPass".toCharArray());
         FileOutputStream fos = new FileOutputStream("myPriKey");
         byte[] encPrivKey = priv.getEncoded();
         fos.write(encPrivKey);
         fos.close();

        } catch (Exception de) {
          de.printStackTrace();
          //System.err.println(de.getMessage());
        }
    }
}


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
Replies:

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

This mailing list archive is Copyright 1997-2026 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.