Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Encrypt MIME using RSAES-OAEP with SHA256 and AES-128 content encryption

See more MIME Examples

Demonstrates how to encrypt MIME using RSAES-OAEP with SHA256 and AES-128 content encryption.

Note: This example requires Chilkat v9.5.0.67 or greater.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.Mime,
  Chilkat.StringBuilder,
  Chilkat.Cert;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  mime: TMime;
  part0: TMime;
  part1: TMime;
  sbMime: TStringBuilder;
  cert: TCert;

begin
  success := False;

  //  This requires the Chilkat API to have been previously unlocked.
  //  See Global Unlock Sample for sample code.

  mime := TMime.Create;

  //  Create a MIME message to encrypt.
  mime.NewMultipartMixed();
  mime.AddHeaderField('someHeader1','Some value 1');
  mime.AddHeaderField('someHeader2','Some value 2');

  part0 := TMime.Create;
  part0.AddHeaderField('hdrA','Some value A');
  part0.AddHeaderField('hdrB','Some value B');
  part0.ContentType := 'text/plain';
  part0.SetBody('This is the plain-text body.');

  part1 := TMime.Create;
  part1.AddHeaderField('hdrX','Some value X');
  part1.AddHeaderField('hdrY','Some value Y');
  part1.ContentType := 'text/xml';
  part1.SetBody('<a>This is the XML body</a>');

  mime.AppendPart(part0);
  mime.AppendPart(part1);

  //  The MIME to be encrypted:
  sbMime := TStringBuilder.Create;
  mime.GetMimeSb(sbMime);
  WriteLn(sbMime.GetAsString());

  //  	Content-Type: multipart/mixed; boundary="------------080303020600020604010008"
  //  	someHeader1: Some value 1
  //  	someHeader2: Some value 2
  //  
  //  	--------------080303020600020604010008
  //  	hdrA: Some value A
  //  	hdrB: Some value B
  //  	Content-Type: text/plain
  //  
  //  	This is the plain-text body.
  //  	--------------080303020600020604010008
  //  	hdrX: Some value X
  //  	hdrY: Some value Y
  //  	Content-Type: text/xml
  //  
  //  	<a>This is the XML body</a>
  //  	--------------080303020600020604010008--
  //  

  //  Load an RSA-based certificate.
  //  (Encrypting MIME only requires the public key.  Decrypting MIME requires the private key.)
  cert := TCert.Create;
  success := cert.LoadFromFile('qa_data/rsaes-oaep/cert.pem');
  if (success <> True) then
    begin
      WriteLn(cert.LastErrorText);
      Exit;
    end;

  //  Set the email object properties to indicate the desired encryption.
  mime.Pkcs7CryptAlg := 'aes';
  //  If AES-256 is desired, set the following property to 256.
  mime.Pkcs7KeyLength := 128;
  mime.OaepPadding := True;
  //  Other choices for the OAEP hash algorithm are "sha1", "sha384", and "sha512"
  mime.OaepHash := 'sha256';

  //  Encrypt the MIME (to create S/MIME, which stands for "Secure MIME")
  success := mime.Encrypt(cert);
  if (success <> True) then
    begin
      WriteLn(mime.LastErrorText);
      Exit;
    end;

  WriteLn('---------------');
  WriteLn('Encrypted MIME:');
  WriteLn('---------------');
  WriteLn(mime.GetMime());

  WriteLn('Success.');

  //  ---------------------------------------------------
  //  This is sample output for RSAES-OAEP encrypted MIME:
  //  ---------------------------------------------------

  //  Content-Type: application/x-pkcs7-mime; name="smime.p7m"; smime-type="enveloped-data"
  //  someHeader1: Some value 1
  //  someHeader2: Some value 2
  //  Content-Disposition: attachment; filename="smime.p7m"
  //  Content-Transfer-Encoding: base64
  //  
  //  MIIDvAYJKoZIhvcNAQcDoIIDrTCCA6kCAQAxggGgMIIBnAIBADB1MGgxCzAJBgNVBAYTAlVTMQsw
  //  CQYDVQQIDAJJTDEQMA4GA1UEBwwHV2hlYXRvbjEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQ
  //  dHkgTHRkMRcwFQYDVQQDDA5DaGlsa2F0V2lkZ2V0cwIJAMRwugDmvniwMBwGCSqGSIb3DQEBBzAP
  //  oA0wCwYJYIZIAWUDBAIBBIIBAFaUL1ga1bOrdqYKcMm+FHUacBvzfBxk0fnPA0AMBdN8BvTWT3CN
  //  YuqBhjOGyq0FpYD9pVZybUuFMCVsVyIW2O62HnsOK58YaPEUUcdH2sI+yjqX9UAn0P0nVDSsVdeK
  //  W8x9kMfZg+3UP+y1q+lu7VRJO3f2C9oLQpTkc4VW4n7UOcUI0waykLCjCTL8lFDb7/J3GeuMKyhH
  //  5riNz50kpbzqn7m2Ks9yA+QmcTdXclclGFr2vwEUFzSdT2pxh/vaUrogCxkYWbQ2eV7vZg6O4kV0
  //  aqHBqySkPTAzHKiHH8K8GVdlTuJ8350CpICa4T8w7/Ht5I7dyOPPKy4C+rVtrvcwggH+BgkqhkiG
  //  9w0BBwEwHQYJYIZIAWUDBAECBBDTC2WNBN+z2I47/4Feu9YqgIIB0MZvl3nC/q/Wzil6HtfQTr12
  //  Q5moHY+ORzAa1P9XvX2ZUFhW530mV395mQw/A4o4ekmX9eRPEZquYzZPLT8hNeZIuNdhpcSQUmad
  //  rKnKkR0wKJ3jJ3LhOIohVBQSYs8kVDZKq6lJBIznlsurFelZoNEhyRschhteDZx5rb7fCe8c2+/O
  //  DHxaqaHCAzm/Bd7kcg6FFfuTZy3tu0PgP5IsXN4OFA3kkvwjAs4XsVS8jdIcmDNBkYieE8WmJOIm
  //  Mz7mh/CHWLgWfGKa0Dkb9RcbFgLwYNT3GzuXFw9XPbKkEZjEAtJajWbN6P0WQl96YYd9qZxUpGxZ
  //  zjTHEYzViUdUXolfpLufttrRXyxN1RFWhNFMFbv66xYqklMSgpdM/Mbk+EuvX6eXayDPvDBpfYMw
  //  NoRAzv1Ony2c0ez9rBemJICicxAzpuvHbRxdjYs63Dnv+TYgpBK12AxWWpPIjXvw0WQKgTC3Tg8s
  //  EnuGhpENqso/clJBEBSn4+2WhYtYbdI5sVme67lvqQl1Xxy3r18SWaQbyDOwgYi1E+54lMDOxMy0
  //  y0FPHk5pP45DnXWj+XORPp5LhuZr5mf62YOXSSUwR5P0cXy4Rc+pN5lhRQPCf5z2


  mime.Free;
  part0.Free;
  part1.Free;
  sbMime.Free;
  cert.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.