BoTTom |
     H DFTACTGRP(*NO)
      * description d'un paramètre
     DsqlfpParameterDescription_t...
     D                 DS                  QUALIFIED TEMPLATE
     DsqlfpSqlType                    5I 0
     DsqlfpByteLength                10U 0
     DsqlfpLength                    10U 0
     DsqlfpPrecision                  5I 0
     DsqlfpScale                      5I 0
     DsqlfpCcsid                      5U 0
     DsqlfpAllocatedLength...
     D                                5U 0
     Dreserved1                      14
     D
      * un paramètre
     DsqlfpOptionalParameterValueD_t...
     D                 DS                  QUALIFIED TEMPLATE
     D sqlfpOptDescLength...
     D                               10I 0
     D sqlfpParmDesc                       likeds(sqlfpParameterDescription_t)
     D reserved2                     12
     D sqlfpParmData              32767
     D
      * liste des paramètres
     Dfppvl            DS                  QUALIFIED TEMPLATE
     D sqlfpOptParmValueListLength...
     D                               10I 0
     D sqlfpNumberOfOptionalParms...
     D                               10I 0
     D sqlfpParmList                       likeds(
     D                                     sqlfpOptionalParameterValueD_t)
     D                                     dim(10)
     D
 
      * paramètres en entrée pour cette procédure
     Dfieldproc01      PR                  EXTPGM('FIELDPROC1')
     D fonction                       5I 0
     D parameter_list                      likeds(fppvl)
     D decoded_attr                        likeds(sqlfpParameterDescription_t)
     D decoded_data               32767
     D encoded_attr                        likeds(sqlfpParameterDescription_t)
     D encoded_data               32767
     D sqlstate                       5
     D message                     1000    varying


|
     Dfieldproc01      PI
     D fonction                       5I 0
      * pas de liste de paramètres utilisée dans ce pgm
     D parameter_list                      likeds(fppvl)
      * données en clair
     D decoded_attr                        likeds(sqlfpParameterDescription_t)
     D decoded_data               32767
      * données cryptées
     D encoded_attr                        likeds(sqlfpParameterDescription_t)
     D encoded_data               32767
      * erreur SQL
     D sqlstate                       5
     D message                     1000    varying
 
     D lg              S              5I 0
     D profil          S             10    inz(*user)
     D transforme      PR
     D                            32767
     D                            32767
     D                                5I 0
      /free
        select;
          when fonction = 8;  // création
           // le type retourné est le même, donc copie de la définition
           encoded_attr= decoded_attr;
          when fonction = 0;  // INSERT => encodage
            lg = decoded_attr.sqlfpLength;
            transforme(decoded_Data : encoded_Data : lg);
          when fonction = 4 ; // SELECT => decodage
            lg = encoded_attr.sqlfpLength;
            if profil = 'QSECOFR';
              transforme(encoded_Data : decoded_Data : lg);
            else;
              %subst(decoded_Data:1:lg) = %subst(encoded_Data:1:lg);
            endif;
          other   ;
            SQLSTATE = '38001';
            message = 'demande inconnue';
        ENDSL;
        *inlr = *on;
      /end-free
      * procédure de codage, inverse tous les bits,x'00 devient x'FF', etc ...
      * (algorithme trop simple pour utiliser en production)
     Ptransforme       B

 

|
     D                 PI
     D data1                      32767
     D data2                      32767
     D lg                             5I 0
     D i               S              5I 0
      /free
       for i = 1 to lg;
         // la doc déconseille de crypter les espaces
         if %subst(data1 : i : 1)  = ' ';
            %subst(data2:i:1) = %subst(data1:i:1);
         else;
            %subst(data2:i:1) = %bitnot(%subst(data1:i:1));
         endif;
       ENDFOR;
      /end-free
     ptransforme       E




©AF400