BoTTom |
**free
ctl-opt BNDDIR('QC2LE')
        DFTACTGRP(*NO)
        OPTION(*NODEBUGIO:*SRCSTMT);
 
Dcl-PR EncryptData  ExtProc('Qc3EncryptData');
  pdatatocrypt    Char(256)  const options(*varsize);
  pDataLen        Int(10)    const;
  pdataFormat     Char(8)    const;
  palgoDesc       likeds(myalgo);
  palgoDescFmt    Char(8)    const;
  pkeyDesc        Char(32767) const options(*varsize);
  pkeyDescFmt     Char(8)    const;
  pcryptoProv     Char(1)    const;
  pcryptoDev      Char(10)   const;
  pdataEncrypt    Char(256)  const options(*varsize);
  pLenFournie     Int(10)    const;
  pLenBEsoin      Int(10)    const;
  pErrorCode      Char(32767) options(*varsize);
End-PR;
Dcl-PR DecryptData  ExtProc('Qc3DecryptData');
  pdataEncrypt    Char(256)  const options(*varsize);
  pDataLen        Int(10)    const;
  palgoDesc       likeds(myalgo);
  palgoDescFmt    Char(8)    const;
  pkeyDesc        Char(32767) const options(*varsize);
  pkeyDescFmt     Char(8)    const;
  pcryptoProv     Char(1)    const;
  pcryptoDev      Char(10)   const;
  pdataretour     Char(256)  const options(*varsize);
  pLenFournie     Int(10)    const;
  pLenBEsoin      Int(10)    const;
  pErrorCode      Char(32767) options(*varsize);
End-PR;
Dcl-DS ErrorCode  qualified;
  bytesProv      Int(10)    inz(0);
  bytesAvail     Int(10)    inz(0);
End-DS;
dcl-ds myAlgo qualified; //ALGD0200
  Algorithm int(10) ;
  BlockLen int(10);
  mode char(1);
  padOption char(1);
  padchar char(1);


|

  reserved char(1);    Maclen int(10);    keySize int(10);   inzVector char(32); End-Ds; dcl-ds mykey qualified; // KEYD0200   type int(10);   length int(10);   Format char(1);   reserved  char(3);   value char(32); End-Ds; /copy cryptosrc,constantes dcl-s  CRYPTO_SRV   char(10)   Inz(*BLANKS); Dcl-s encData  Like(szData); Dcl-s nRtnLen int(10); Dcl-s nDataLen int(10); Dcl-s szData  char(500)  Inz('VOLUBIS, formation sur IBM i') ; Dcl-s keyValue char(256) INZ('Carquefou'); Dcl-s nKeyLength  int(10);

myAlgo.Algorithm = ALGO_AES; // 22 myAlgo.blocklen  = 16; //8 pour DES,TDES - 16,24,32 pour AES myAlgo.mode      = mode_ECB; // 0 myAlgo.PadChar   = X'00'; myAlgo.PadOption = pad_PadChar; myAlgo.reserved  = X'00'; myAlgo.macLen    = 0; myAlgo.keySize   = 0; myalgo.inzVector = *ALLX'00'; myKey.type   = ALGO_AES; nKeyLength = %Len(%TrimR(keyValue)); if     (nKeyLength <= 16);   myKey.length = 16; elseif (nKeyLength <= 24);   myKey.length = 24; elseif (nKeyLength <=32);   myKey.length = 32; else; // lg invalide   return; endif;


|

myKey.Format = key_BIN; //0=Binaire,1=BER
myKey.value  = %TrimR(keyValue);
nDataLen = %len(%TrimR(szData));
EncryptData(szData: nDataLen :'DATA0100':
            myAlgo  : 'ALGD0200' :
            myKey   : 'KEYD0200' :
            ANY_CRYPTO_SRV       : CRYPTO_SRV :
            encData : %size(encData) :

            nRtnLen :
            ErrorCode );

dsply  (%subst(encdata : 1 : 50)); szData = *BLANKS;  

DecryptData(encData    :  nRtnLen   :
            myAlgo  : 'ALGD0200' :
            myKey   : 'KEYD0200' :
            ANY_CRYPTO_SRV       :  CRYPTO_SRV :
            szData  : %size(szData) :
            nRtnLen :
            ErrorCode );

dsply  (%subst(szdata : 1 : 50));

*INLR = *On;




©AF400