Compute a hash value from a BDL string
How to compute a hash value of a BDL string using the security.Digest API.
Program Example
This retrieves the hash value from the signature and returns it. The computed hash value is encoded in Base64, so you may have additional conversion to do.
Program example ComputeHash.4gl
:
IMPORT SECURITY
MAIN
  DEFINE result STRING
  IF num_args() != 2 THEN
    DISPLAY "Usage: ComputeHash <string> <hashcode>"
    DISPLAY "  string: the string to digest"
    DISPLAY "  hashcode: SHA1, SHA512, SHA384, SHA256, SHA224, MD5"
  ELSE
    LET result = ComputeHash(arg_val(1), arg_val(2))
    IF result IS NOT NULL THEN
      DISPLAY "Hash value is: ",result
    ELSE
      DISPLAY "Error"
    END IF
  END IF
END MAIN
FUNCTION ComputeHash(toDigest, algo)
  DEFINE toDigest, algo, result STRING
  DEFINE dgst security.Digest
  TRY
    LET dgst = security.Digest.CreateDigest(algo)
    CALL dgst.AddStringData(toDigest)
    LET result = dgst.DoBase64Digest()
  CATCH
    DISPLAY "ERROR : ", status, " - ", sqlca.sqlerrm
    EXIT PROGRAM(-1)
  END TRY
  RETURN result
END FUNCTION Example execution:
$ fglrun ComputeHash "Hello World" SHA1
$ Hash value is: Ck1VqNd45QIvq3AZd8XYQLvEhtA=