× 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.



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-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.