midrange.com code scratchpad
Name:
Jack Tucky
Scriptlanguage:
Plain Text
Tabwidth:
4
Date:
12/30/2015 08:44:55 pm
IP:
Logged
Description:
Use Qc3CalculateHMAC to calculate an SHA1 hash
Code:
  1.      H dftactgrp(*no) actgrp('QILE')
  2.      H option(*srcstmt:*nodebugio)
  3.       /copy QSYSINC/QRPGLESRC,QTQICONV
  4.      d binaryHMAC      s             20a
  5.      d SHA_1           c                   const(2)
  6.      D DataLen         s             10i 0
  7.      d dataToHash      s            500a
  8.      d $hex            s             34a
  9.      d Nullfield       s            100a
  10.       *---------------------------------------------------------------------
  11.       * Stand Alone Fields - BOTTOM
  12.       *---------------------------------------------------------------------
  13.      D ErrorCode       DS                  qualified
  14.      D    bytesProv                  10i 0 inz(0)
  15.      D    bytesAvail                 10i 0 inz(0)
  16.  
  17.      D WsErrorCode     DS                  qualified
  18.      D    bytesProv                  10i 0 inz(0)
  19.      D    bytesAvail                 10i 0 inz(0)
  20.  
  21.      D my_key          DS                  qualified
  22.      D    Type                       10i 0 inz(SHA_1)
  23.      D    Len                        10i 0
  24.      D    Fmt                         1a   inz('0')
  25.      D                                3a
  26.      D    Value                      64a
  27.  
  28.      d cvthc           PR                  ExtProc('cvthc')
  29.      d   target                   65534A   options(*varsize)
  30.      d   src_bits                 32767A   options(*varsize) const
  31.      d   tgt_length                  10I 0 value
  32.  
  33.      D Qc3CalculateHMAC...
  34.      D                 PR                  ExtProc('Qc3CalculateHMAC')
  35.      d   InData                   32767a   const options(*varSize)
  36.      d   IndataL                     10i 0 const
  37.      d   InDataF                      8a   const
  38.      d   AlgoDes                     10i 0 const
  39.      d   AlgoFmt                      8a   const
  40.      d   KeyDescr                 32767a   const options(*varSize)
  41.      d   KeyDescrFmt                  8a   const
  42.      d   CryptoSP                     1a   const
  43.      d   CryptoDev                   10a   const
  44.      d   Hash                        64a   options(*varsize)
  45.      d   ErrorCode                32767a   options(*varsize)
  46.  
  47.  
  48.      C     *ENTRY        Plist
  49.      C                   Parm                    MyText           41
  50.      C                   Parm                    MySalt           20
  51.  
  52.       /free
  53.        //---------------------------------------------------------
  54.        //            Calculate the SHA-1 HMAC hash
  55.        //---------------------------------------------------------
  56.  
  57.        Nullfield = *allx'00';
  58.        DataToHash   = MyText;
  59.        my_key.value = %TRIMR(MySalt) + Nullfield;
  60.  
  61.        DataLen      =  %len(%trim(DataToHash));
  62.        my_key.len   =  %len(%trim(MYSALT));
  63.  
  64.            datatoHash = convertToCcsid(myText    : 437);
  65.            my_Key.value = convertToCcsid(my_key.value: 437);
  66.  
  67.          my_key.len   = %size(my_key.value);
  68.          DataLen      = %size(DataToHash) ;
  69.  
  70.        monitor;
  71.          Qc3CalculateHMAC( DataToHash
  72.                          : DataLen
  73.                          : 'DATA0100'
  74.                          : SHA_1
  75.                          : 'ALGD0500'
  76.                          :  my_key
  77.                          : 'KEYD0200'
  78.                          : '0'
  79.                          : *blanks
  80.                          : binaryHMAC
  81.                          : ErrorCode );
  82.        on-error;
  83.          WsErrorCode = ErrorCode;
  84.          Dsply 'Error in Conversion';
  85.        endmon;
  86.  
  87.        cvthc( $hex: binaryHMAC: %len(binaryHMAC)*2);
  88.        dsply $hex;
  89.        *inlr = '1';
  90.         return;
  91.       /end-free
  92.  
  93.      PconvertToCcsid...
  94.      P                 B                   export
  95.      D                 PI         32767    varying
  96.      D pInput                     32767    varying const
  97.      D pToCCSID                       5  0 const
  98.  
  99.      D ibmIConvOpen    Pr            52a   extproc('QtqIconvOpen')
  100.      D  fromcode                       *   value
  101.      D  tocode                         *   value
  102.  
  103.      D ibmIConv        Pr            10i 0 extproc('iconv')
  104.      D  cd                           52a   value
  105.      D  inbuf                          *
  106.      D  inbytesleft                  10i 0
  107.      D  outbuf                         *
  108.      D  outbytesleft                 10i 0
  109.  
  110.      D ibmIconvClose   Pr            10i 0 extproc('iconv_close')
  111.      D  cd                           52a   value
  112.  
  113.      D iconv_t         Ds
  114.      D  t_rtnval                     10i 0
  115.      D  t_cd
  116.      D  t_cdi                        10i 0 Dim(12) Overlay(t_cd)
  117.  
  118.      D fromcode        DS                  likeds(QTQCODE) inz
  119.      D tocode          DS                  likeds(QTQCODE) inz
  120.  
  121.      D inputPtr        S               *
  122.      D inputLen        S             10I 0
  123.  
  124.      D outputPtr       S               *
  125.      D outputLen       S             10I 0
  126.  
  127.      D input           S          32767
  128.      D output          S          32767
  129.  
  130.      Drc               S             10I 0
  131.  
  132.       /free
  133.        fromcode.QTQCCSID = 37;
  134.        tocode.QTQCCSID = pToCCSID;
  135.        fromcode.QTQERVED02 = *allx'00';
  136.        tocode.QTQERVED02 = *allx'00';
  137.        iconv_t = ibmIconvOpen(%addr(tocode) : %addr(fromcode));
  138.        input = pInput;
  139.        inputPtr = %addr(input);
  140.        inputLen = %len(%trimr(input));
  141.        outputPtr = %addr(output);
  142.        outputLen = inputLen;
  143.  
  144.        rc = ibmIConv(iconv_t :
  145.           inputPtr  : inputLen:
  146.           outputPtr : outputLen);
  147.  
  148.        rc = ibmIconvClose( iconv_t );
  149.  
  150.        return %TRIMR(output);
  151.  
  152.       /end-free
  153.      P                 E
  154.  
© 2004-2019 by midrange.com generated in 0.006s valid xhtml & css