object JsonDemoForm: TJsonDemoForm Left = 96 Top = 180 Caption = 'ICS SSL Json Object Signing and Encryption Demos - https://www.o' + 'verbyte.eu - 24th March 2026' ClientHeight = 835 ClientWidth = 1100 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Segoe UI' Font.Style = [] OnCreate = FormCreate OnDestroy = FormDestroy OnShow = FormShow TextHeight = 13 object Label18: TLabel Left = 439 Top = 174 Width = 113 Height = 13 Caption = 'Raw Key (fixed length)' end object LogWin: TMemo Left = 0 Top = 436 Width = 1100 Height = 399 Align = alClient ScrollBars = ssBoth TabOrder = 0 end object PageControl: TPageControl Left = 0 Top = 0 Width = 1100 Height = 436 ActivePage = TabSheetCrypto Align = alTop TabOrder = 1 object TabSheetJson: TTabSheet Caption = 'JSON/XML' ImageIndex = 1 object JsonGrid: TListView Left = 0 Top = 171 Width = 1092 Height = 237 Align = alClient Columns = < item Caption = 'Name' Width = 100 end item Caption = 'Type' Width = 70 end item Caption = 'Value' Width = 1000 end item Width = 100 end> GridLines = True ReadOnly = True RowSelect = True TabOrder = 0 ViewStyle = vsReport OnDblClick = JsonGridDblClick end object JsonInput: TMemo Left = 0 Top = 0 Width = 1092 Height = 116 Align = alTop Lines.Strings = ( '{"LimitInfo": {"Used": 30.0,"Limit": 10000.0 },"success": true}') ScrollBars = ssBoth TabOrder = 1 end object PanelButtons: TPanel Left = 0 Top = 116 Width = 1092 Height = 55 Align = alTop TabOrder = 2 object Label33: TLabel Left = 517 Top = 13 Width = 137 Height = 39 Caption = 'Double click on a Json stObject or stArray item to expand. ' WordWrap = True end object doParseJson: TButton Left = 30 Top = 15 Width = 75 Height = 25 Caption = 'Parse JSON' TabOrder = 0 OnClick = doParseClick end object doLoadFile: TButton Left = 428 Top = 15 Width = 75 Height = 25 Caption = 'Load File' TabOrder = 1 OnClick = doLoadFileClick end object doParseXML: TButton Left = 120 Top = 15 Width = 75 Height = 25 Caption = 'Parse XML' TabOrder = 2 OnClick = doParseClick end object CompactXML: TCheckBox Left = 215 Top = 20 Width = 97 Height = 17 Caption = 'Compact XML' Checked = True State = cbChecked TabOrder = 3 end object LogJson: TCheckBox Left = 318 Top = 20 Width = 97 Height = 17 Caption = 'Log JSON' TabOrder = 4 end end end object TabSheetJose: TTabSheet Caption = 'JOSE' object Label25: TLabel Left = 5 Top = 140 Width = 124 Height = 26 Caption = 'Shared secret HMAC Key (32, 48 or 64 long)' WordWrap = True end object Label26: TLabel Left = 5 Top = 174 Width = 75 Height = 13 Caption = 'Private Key File' end object Label27: TLabel Left = 552 Top = 98 Width = 234 Height = 26 Caption = 'Key and Signing Hash Algorithm (must match key)' WordWrap = True end object Label1: TLabel Left = 10 Top = 5 Width = 77 Height = 13 Caption = 'Clear Text Lines' end object Label2: TLabel Left = 452 Top = 5 Width = 137 Height = 13 Caption = 'Json Web Key or Signature' end object LabelPKey: TLabel Left = 6 Top = 195 Width = 141 Height = 54 AutoSize = False Caption = 'Private Key: ' Color = 12582911 ParentColor = False Transparent = False WordWrap = True end object Label5: TLabel Left = 809 Top = 5 Width = 105 Height = 13 Caption = 'New Private Key Type' WordWrap = True end object JoseTextLines: TMemo Left = 5 Top = 21 Width = 417 Height = 104 Lines.Strings = ( '{"LimitInfo": {"Used": 30.0,"Limit": 10000.0 },"success": true}') ScrollBars = ssBoth TabOrder = 0 OnDblClick = JoseTextLinesDblClick end object TestHmacKey: TEdit Left = 154 Top = 140 Width = 358 Height = 21 MaxLength = 64 TabOrder = 2 Text = 'mysecretkeyneedstobe32byteslong.' end object doTestSign: TButton Left = 154 Top = 325 Width = 111 Height = 25 Caption = 'Sign/Verify Data' TabOrder = 16 OnClick = doTestSignClick end object doJWSCreate: TButton Left = 291 Top = 289 Width = 150 Height = 25 Caption = 'Create Json Web Signature' TabOrder = 12 OnClick = doJWSCreateClick end object doSignHmac: TButton Left = 10 Top = 325 Width = 121 Height = 25 Caption = 'Test HMAC Digests' TabOrder = 15 OnClick = doSignHmacClick end object TestPrivKeyFile: TComboBox Left = 155 Top = 175 Width = 358 Height = 21 TabOrder = 3 Text = 'jose-rsa-prvkey.pem' OnChange = TestPrivKeyFileChange Items.Strings = ( 'jose-rsa-prvkey.pem' 'jose-ec-prvkey.pem' 'jose-rsapss-prvkey.pem' 'jose-ed25519-prvkey.pem') end object doJWKCreate: TButton Left = 10 Top = 289 Width = 121 Height = 25 Caption = 'Create Json Web Key' TabOrder = 10 OnClick = doJWKCreateClick end object RawJWK: TMemo Left = 454 Top = 24 Width = 337 Height = 67 Lines.Strings = ( 'RawJWK') ScrollBars = ssHorizontal TabOrder = 1 end object doJKWRead: TButton Left = 156 Top = 289 Width = 111 Height = 25 Caption = 'Read Json Web Key' TabOrder = 11 OnClick = doJKWReadClick end object ShowRawKey: TCheckBox Left = 359 Top = 258 Width = 108 Height = 17 Caption = 'Show Raw Key' TabOrder = 8 end object doNewPrivKey: TButton Left = 158 Top = 202 Width = 101 Height = 25 Caption = 'New Private Key' TabOrder = 6 OnClick = doNewPrivKeyClick end object doClear: TButton Left = 491 Top = 358 Width = 101 Height = 25 Caption = 'Clear Screen' TabOrder = 14 OnClick = doClearClick end object SelFile: TBitBtn Left = 525 Top = 175 Width = 31 Height = 25 Glyph.Data = { 76010000424D7601000000000000760000002800000020000000100000000100 04000000000000010000120B0000120B00001000000000000000000000000000 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00303333333333 333337F3333333333333303333333333333337F33FFFFF3FF3FF303300000300 300337FF77777F77377330000BBB0333333337777F337F33333330330BB00333 333337F373F773333333303330033333333337F3377333333333303333333333 333337F33FFFFF3FF3FF303300000300300337FF77777F77377330000BBB0333 333337777F337F33333330330BB00333333337F373F773333333303330033333 333337F3377333333333303333333333333337FFFF3FF3FFF333000003003000 333377777F77377733330BBB0333333333337F337F33333333330BB003333333 333373F773333333333330033333333333333773333333333333} NumGlyphs = 2 TabOrder = 4 OnClick = SelFileClick end object doJWSRead: TButton Left = 454 Top = 289 Width = 150 Height = 25 Caption = 'Read Json Web Signature' TabOrder = 13 OnClick = doJWSReadClick end object JwkPrivate: TCheckBox Left = 28 Top = 258 Width = 122 Height = 17 Caption = 'JWK Private Key' TabOrder = 9 end object doLoadKeyFile: TButton Left = 276 Top = 202 Width = 101 Height = 25 Caption = 'Load Key File' TabOrder = 5 OnClick = doLoadKeyFileClick end object doKeyParams: TButton Left = 402 Top = 202 Width = 126 Height = 25 Caption = 'Getable PKey Params' TabOrder = 7 OnClick = doKeyParamsClick end object SignECDSAIEEE: TCheckBox Left = 175 Top = 255 Width = 157 Height = 17 Caption = 'Sign ECDSA IEEE Digest' TabOrder = 17 end object NewprivKey: TListBox Left = 809 Top = 21 Width = 252 Height = 379 ItemHeight = 13 TabOrder = 18 OnClick = NewprivKeyClick end object TestJWSAlg: TListBox Left = 614 Top = 117 Width = 185 Height = 283 ItemHeight = 13 TabOrder = 19 OnClick = TestJWSAlgoldChange end object doEncryptPkeyExt: TButton Left = 292 Top = 325 Width = 144 Height = 25 Caption = 'RSA Encrypt Private Key' TabOrder = 20 OnClick = doEncryptPkeyExtClick end end object TabSheet1: TTabSheet Caption = 'Transcode' ImageIndex = 2 object Label6: TLabel Left = 10 Top = 5 Width = 77 Height = 13 Caption = 'Clear Text Lines' end object Label7: TLabel Left = 8 Top = 115 Width = 106 Height = 13 Caption = 'Base64 Encoded Text' end object Label8: TLabel Left = 10 Top = 155 Width = 89 Height = 13 Caption = 'Hex Encoded Text' end object Label9: TLabel Left = 8 Top = 195 Width = 90 Height = 13 Caption = 'URL Encoded Text' end object Label4: TLabel Left = 30 Top = 271 Width = 446 Height = 65 Caption = 'This demo illustrates and tests many of the low level encoding a' + 'nd decoding functions'#13#10'used in REST and JOSE HTTPS applications.' + ' Hash digests are a short string calculated '#13#10'from an inpiut, us' + 'ed to sign an input either with a shared secret HMAC key, or wit' + 'h a '#13#10'secret private key, where only a public key is needed to v' + 'erify the input is not altered. '#13#10' ' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clBlue Font.Height = -11 Font.Name = 'Segoe UI' Font.Style = [] ParentColor = False ParentFont = False end object CodeTextLines: TMemo Left = 8 Top = 20 Width = 583 Height = 89 Lines.Strings = ( '{"LimitInfo": {"Used": 30.0,"Limit": 10000.0 },"success": true}') ScrollBars = ssBoth TabOrder = 0 OnDblClick = CodeTextLinesDblClick end object doBase64Enc: TButton Left = 609 Top = 25 Width = 84 Height = 25 Caption = 'Base64 Encode' TabOrder = 1 OnClick = doBase64EncClick end object doB64URLEn: TButton Left = 610 Top = 56 Width = 84 Height = 25 Caption = 'B64Url Encode' TabOrder = 2 OnClick = doB64URLEnClick end object doTestUrlEnc: TButton Left = 610 Top = 87 Width = 84 Height = 25 Caption = 'Test Base64Url' TabOrder = 3 OnClick = doTestUrlEncClick end object doHexEncode: TButton Left = 609 Top = 118 Width = 84 Height = 25 Caption = 'Hex Encode' TabOrder = 4 OnClick = doHexEncodeClick end object doEncodeURL: TButton Left = 610 Top = 149 Width = 84 Height = 25 Caption = 'Encode URL' TabOrder = 5 OnClick = doEncodeURLClick end object doBase64Dec: TButton Left = 705 Top = 25 Width = 84 Height = 25 Caption = 'Base64 Decode' TabOrder = 6 OnClick = doBase64DecClick end object doB64URLDec: TButton Left = 705 Top = 56 Width = 84 Height = 25 Caption = 'B64Url Decode' TabOrder = 7 OnClick = doB64URLDecClick end object doHashDigest: TButton Left = 705 Top = 87 Width = 84 Height = 25 Caption = 'Hash Digests' TabOrder = 8 OnClick = doHashDigestClick end object doHexDec: TButton Left = 705 Top = 118 Width = 84 Height = 25 Caption = 'Hex Decode' TabOrder = 9 OnClick = doHexDecClick end object doDecodeURL: TButton Left = 705 Top = 149 Width = 84 Height = 25 Caption = 'Decode URL' TabOrder = 10 OnClick = doDecodeURLClick end object HexText: TEdit Left = 8 Top = 170 Width = 583 Height = 21 TabOrder = 11 Text = '7b224c696d6974496e666f223a207b2255736564223a2033302e302c224c696d' + '6974223a2031303030302e30207d2c2273756363657373223a20747275657d' end object URLText: TEdit Left = 8 Top = 210 Width = 583 Height = 21 TabOrder = 12 Text = '%7B%22LimitInfo%22%3A%20%7B%22Used%22%3A%2030%2E0%2C%22Limit%22%' + '3A%2010000%2E0%20%7D%2C%22success%22%3A%20true%7D' end object Base64Text: TEdit Left = 8 Top = 130 Width = 583 Height = 21 TabOrder = 13 Text = 'eyJMaW1pdEluZm8iOiB7IlVzZWQiOiAzMC4wLCJMaW1pdCI6IDEwMDAwLjAgfSwi' + 'c3VjY2VzcyI6IHRydWV9' end end object TabSheetCrypto: TTabSheet Caption = 'Cryptography' ImageIndex = 3 object Label3: TLabel Left = 761 Top = 5 Width = 99 Height = 13 Caption = 'Base64 Encrypt Text' end object Label10: TLabel Left = 432 Top = 180 Width = 113 Height = 13 Caption = 'Raw Key (fixed length)' end object LabelCipher: TLabel Left = 170 Top = 196 Width = 243 Height = 172 AutoSize = False Caption = 'Cipher Info' Color = 12582911 ParentColor = False Transparent = False WordWrap = True end object Label11: TLabel Left = 430 Top = 210 Width = 123 Height = 13 Caption = 'Init Vector (fixed length)' end object Label12: TLabel Left = 431 Top = 240 Width = 116 Height = 13 Caption = 'Password for Key Deriv' end object Label13: TLabel Left = 434 Top = 10 Width = 103 Height = 13 Caption = 'Text Lines to Encrypt' end object Label14: TLabel Left = 5 Top = 5 Width = 132 Height = 13 Caption = 'OpenSSL Availalble (most)' end object Label15: TLabel Left = 740 Top = 210 Width = 89 Height = 13 Caption = 'Password SALT (8)' end object Label16: TLabel Left = 170 Top = 170 Width = 66 Height = 13 Caption = 'Cipher Name' end object Label17: TLabel Left = 160 Top = 5 Width = 78 Height = 13 Caption = 'ICS Type Names' end object Label19: TLabel Left = 430 Top = 150 Width = 105 Height = 13 Caption = 'File Name To Encrypt' end object Label20: TLabel Left = 323 Top = 113 Width = 57 Height = 26 Caption = 'CBC Mode Preferred' WordWrap = True end object Label21: TLabel Left = 951 Top = 186 Width = 48 Height = 13 Caption = 'AEAD Tag' end object doEncryprPWText: TButton Left = 849 Top = 279 Width = 189 Height = 25 Caption = 'Legacy Encrypt Text With Password' TabOrder = 0 OnClick = doEncryprPWTextClick end object doEncryptPkeyNew: TButton Left = 848 Top = 341 Width = 144 Height = 25 Caption = 'RSA Encrypt Private Key' TabOrder = 1 OnClick = doEncryptPkeyClick end object doEncryprPWFile: TButton Left = 846 Top = 310 Width = 192 Height = 25 Caption = 'Legacy Encrypt Stream With PW' TabOrder = 2 OnClick = doEncryprPWFileClick end object ListCiphers: TListBox Left = 5 Top = 24 Width = 138 Height = 377 ItemHeight = 13 TabOrder = 3 OnClick = ListCiphersClick end object CryptTextIn: TMemo Left = 430 Top = 25 Width = 313 Height = 104 Lines.Strings = ( '{"LimitInfo": {"Used": 30.0,"Limit": 10000.0 },"success": true}') ScrollBars = ssBoth TabOrder = 4 OnDblClick = JoseTextLinesDblClick end object CipherRawKey: TEdit Left = 570 Top = 175 Width = 358 Height = 21 MaxLength = 64 TabOrder = 5 Text = 'a raw key length depends on cipher' end object EncKeyType: TRadioGroup Left = 430 Top = 263 Width = 185 Height = 110 Caption = 'Key Derivation Method' ItemIndex = 0 Items.Strings = ( 'PKCS5-v15 from Password' 'PBKDF2-HMAC Password' 'Aragon2 from Password' 'Raw Key and IV ' 'Quick Hash Password') TabOrder = 6 end object CipherRawIV: TEdit Left = 570 Top = 205 Width = 77 Height = 21 MaxLength = 64 TabOrder = 7 Text = '12345678' end object CipherPassword: TEdit Left = 570 Top = 235 Width = 358 Height = 21 MaxLength = 64 TabOrder = 8 Text = 'variable-password' end object doCheckCrypt: TButton Left = 172 Top = 380 Width = 105 Height = 25 Caption = 'Check Encryption' TabOrder = 9 OnClick = doCheckCryptClick end object doEncryptText: TButton Left = 286 Top = 380 Width = 105 Height = 25 Caption = 'Encrypt Text' TabOrder = 10 OnClick = doEncryptTextClick end object doDecryptText: TButton Left = 402 Top = 380 Width = 105 Height = 25 Caption = 'Decrypt Text' TabOrder = 11 OnClick = doDecryptTextClick end object CryptTextOut: TMemo Left = 760 Top = 27 Width = 313 Height = 104 Lines.Strings = ( '') ScrollBars = ssBoth TabOrder = 12 OnDblClick = JoseTextLinesDblClick end object CipherName: TEdit Left = 264 Top = 165 Width = 138 Height = 21 MaxLength = 64 TabOrder = 13 Text = 'AES-256-CBC' OnClick = CipherNameClick end object CipherPwSalt: TEdit Left = 850 Top = 205 Width = 77 Height = 21 MaxLength = 64 TabOrder = 14 Text = '12345678' end object CipherBFBits: TRadioGroup Left = 318 Top = 10 Width = 101 Height = 96 Caption = 'Blowfish Bits' ItemIndex = 0 Items.Strings = ( 'Default' '64-bits' '128-bits' '256-bits') TabOrder = 15 OnClick = CipherBFBitsClick end object CipherICsTypes: TListBox Left = 160 Top = 27 Width = 147 Height = 127 ItemHeight = 13 TabOrder = 16 OnClick = CipherICsTypesClick end object SelCiphFile: TBitBtn Left = 948 Top = 144 Width = 31 Height = 25 Glyph.Data = { 76010000424D7601000000000000760000002800000020000000100000000100 04000000000000010000120B0000120B00001000000000000000000000000000 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00303333333333 333337F3333333333333303333333333333337F33FFFFF3FF3FF303300000300 300337FF77777F77377330000BBB0333333337777F337F33333330330BB00333 333337F373F773333333303330033333333337F3377333333333303333333333 333337F33FFFFF3FF3FF303300000300300337FF77777F77377330000BBB0333 333337777F337F33333330330BB00333333337F373F773333333303330033333 333337F3377333333333303333333333333337FFFF3FF3FFF333000003003000 333377777F77377733330BBB0333333333337F337F33333333330BB003333333 333373F773333333333330033333333333333773333333333333} NumGlyphs = 2 TabOrder = 17 OnClick = SelCiphFileClick end object CipherAEAD: TEdit Left = 952 Top = 206 Width = 115 Height = 21 MaxLength = 64 TabOrder = 18 end object doQuickEncrypt: TButton Left = 848 Top = 374 Width = 144 Height = 25 Caption = 'Quick Encrypt String' TabOrder = 19 OnClick = doQuickEncryptClick end object doEncryptStream: TButton Left = 516 Top = 380 Width = 107 Height = 25 Caption = 'Encrypt Text Stream' TabOrder = 20 OnClick = doEncryptStreamClick end object doEncryptFile: TButton Left = 636 Top = 380 Width = 95 Height = 25 Caption = 'Encrypt File' TabOrder = 21 OnClick = doEncryptFileClick end end end object CipherFileName: TEdit Left = 570 Top = 170 Width = 358 Height = 21 TabOrder = 2 end object CipherRandomSalt: TCheckBox Left = 627 Top = 297 Width = 190 Height = 17 Caption = 'Random Salt added to Output' TabOrder = 3 end object OpenDlg: TOpenDialog Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing] Left = 231 Top = 592 end end