From Clomosy Docs

TCLCrypto component is a cryptographic library used for encryption, hashing, and token operations. It supports modern algorithms such as AES, SHA-2, SHA-3, and JWT. This component allows developers to configure keys, IVs, output formats, and advanced options for cryptography tasks.


Feature Use of Definition
TCLCrypto Crypto = TCLCrypto.Create; Creates a TCLCrypto object to perform encryption, hashing, and JWT operations.
AType Crypto.AES.AType = atCBC; or Crypto.SHA3Hash.AType = txof; Selects algorithm type or mode.

AES Options: atCBC, atECB, atCFB, atOFB. SHA3 Options: tsha (standard), txof (extendable output).

KeyLength Crypto.AES.KeyLength = kl256; Sets key length in bits. Common options: 128, 192, 256.
IVMode Crypto.AES.IVMode = userdefined; Determines IV usage for AES. Options: userdefined, rand, none.
IV Crypto.AES.IV = 'MyCustomIV'; Sets the initialization vector when IVMode = userdefined.
Key Crypto.AES.Key = 'MySecretKey1234567890'; Defines encryption key for AES operations.
OutputFormat Crypto.AES.OutputFormat = base64; or Crypto.SHA2Hash.OutputFormat = hexa; or Crypto.SHA3Hash.OutputFormat = raw; Sets output format for AES and all hashing algorithms.

Options: base64, hexa, raw.

PaddingMode Crypto.AES.PaddingMode = PKCS7; Determines padding for AES encryption. Options: PKCS7, ISO10126, None.
Unicode Crypto.AES.Unicode = yesUni; Enables Unicode support for AES encryption/decryption.
Encrypt CipherText = Crypto.AES.Encrypt('Text'); Encrypts input text using AES settings.
DecryptStr PlainText = Crypto.AES.DecryptStr(CipherText); Decrypts AES-encrypted text to plain string.
HashSizeBits Crypto.SHA2Hash.HashSizeBits = 512; or Crypto.SHA3Hash.HashSizeBits = 256; Sets bit length of hash output. Commonly 256 or 512 bits.
Version Crypto.SHA3Hash.Version = 512; Defines SHA3 algorithm version, depending on selected mode.
Hash HashResult = Crypto.SHA2Hash.Hash('Text'); or Crypto.SHA3Hash.Hash('Text'); Generates hash of input text using SHA2 or SHA3 algorithms.
JWT.SetClaim Crypto.JWT.SetClaim('role','admin'); Adds a key-value claim to the JWT payload.
JWT.CompactToken Token = Crypto.JWT.CompactToken('secret_key', 256); Generates a signed JWT token. Algorithm bit size adjustable (128, 256, 512).


Example

var
  MyForm: TCLForm;
  Memo1: TclMemo;
  EditInput: TclEdit;
  BtnEncrypt: TclProButton;
  BtnDecrypt: TclProButton;
  Crypto: TCLCrypto;
  AES_CBC: string;
  
  // Encrypt Button click event
  void BtnEncryptOnClick
  {
    Crypto = TCLCrypto.Create;
    try
    
     with Crypto.AES do
      {
       AType = atCBC;
       KeyLength = kl128;
       IVMode = userdefined;
       IV = 'MyCustomIV123456';
       Key = 'MySecretKey12345';
       OutputFormat = base64;
       PaddingMode = PKCS7;
       Unicode = yesUni;
      }

     AES_CBC = Crypto.AES.Encrypt(EditInput.Text);
     Memo1.Lines.Add('Encrypted (CBC Base64):' +#13#10+ AES_CBC);

    finally
      Crypto.Free;
    }
  }

  // Decrypt Button click event
  void BtnDecryptOnClick
  {
    if (AES_CBC == '') 
    {
      ShowMessage('No encrypted text available.');
      exit;
    }

    Crypto = TCLCrypto.Create;
    try

     with Crypto.AES do
      {
       AType = atCBC;
       KeyLength = kl128;
       IVMode = userdefined;
       IV = 'MyCustomIV123456';
       Key = 'MySecretKey12345';
       OutputFormat = base64;
       PaddingMode = PKCS7;
       Unicode = yesUni;
      }

     Memo1.Lines.Add('Decrypted Text:' +#13#10+ Crypto.AES.DecryptStr(AES_CBC));

    finally
      Crypto.Free;
    }
  }

{
  MyForm = TCLForm.Create(Self);

  // Edit for user to type
  EditInput = MyForm.AddNewEdit(MyForm,'EditInput','');
  EditInput.Align = alTop;
  EditInput.Margins.Left = 10;
  EditInput.Margins.Right = 10;
  EditInput.Margins.Top = 10;

  // Memo for show result
  Memo1 = MyForm.AddNewMemo(MyForm,'Memo1','');
  Memo1.Align = alClient;
  Memo1.Margins.Left = 10;
  Memo1.Margins.Right = 10;
  Memo1.Margins.Top = 5;
  Memo1.Margins.Bottom = 10;
  Memo1.ReadOnly = True;

  // Encrypt Button
  BtnEncrypt = MyForm.AddNewProButton(MyForm,'BtnEncrypt','Encrypt');
  BtnEncrypt.Align = AlTop;
  BtnEncrypt.Margins.Left = 10;
  BtnEncrypt.Margins.Right = 10;
  BtnEncrypt.Margins.Top = 5;
  BtnEncrypt.clProSettings.IsRound = True;
  BtnEncrypt.clProSettings.RoundHeight = 2;
  BtnEncrypt.clProSettings.RoundWidth = 2;
  BtnEncrypt.SetclProSettings(BtnEncrypt.clProSettings);

  // Decrypt Button
  BtnDecrypt = MyForm.AddNewProButton(MyForm,'BtnDecrypt','Decrypt');
  BtnDecrypt.Align = AlTop;
  BtnDecrypt.Margins.Left = 10;
  BtnDecrypt.Margins.Right = 10;
  BtnDecrypt.Margins.Top = 5;
  BtnDecrypt.clProSettings.IsRound = True;
  BtnDecrypt.clProSettings.RoundHeight = 2;
  BtnDecrypt.clProSettings.RoundWidth = 2;
  BtnDecrypt.SetclProSettings(BtnDecrypt.clProSettings);

  // Events
  MyForm.AddNewEvent(BtnEncrypt,tbeOnClick,'BtnEncryptOnClick');
  MyForm.AddNewEvent(BtnDecrypt,tbeOnClick,'BtnDecryptOnClick');

  MyForm.Run;
}


Example For SHA3 (tsha mode)

var
  Crypto: TCLCrypto;
  SHA3Result: string;
{
  Crypto = TCLCrypto.Create;
  try
    Crypto.SHA3Hash.AType = tsha;
    Crypto.SHA3Hash.OutputFormat = base64;
    Crypto.SHA3Hash.HashSizeBits = 512;
    SHA3Result = Crypto.SHA3Hash.Hash('Hello World');
    ShowMessage('SHA-3 (tsha): ' + SHA3Result);
  finally
    Crypto.Free;
  }
}


Example For JWT Token

var
  Crypto: TCLCrypto;
  JWTToken: string;
{
  Crypto = TCLCrypto.Create;
  try
    Crypto.JWT.SetClaim('user', 'reader');
    Crypto.JWT.SetClaim('scope', 'reader');
    JWTToken = Crypto.JWT.CompactToken('super_secret_key', 256);
    ShowMessage('JWT: ' + JWTToken);
  finally
    Crypto.Free;
  }
}