Newly Released - CStack
Posted: Tue Jul 28, 2026 4:45 am
Crypto-Stack by Brain Patchwork DX, LLC.
unit CStack_Base;
interface
uses
SysUtils, Classes;
type
{ Exception classes }
ECStackError = class(Exception);
{ Enums for configuration }
TCSAESMode = (amECB, amCBC, amOFB, amCTR, amCTS, amGCM);
TCSPadding = (pdNone, pdPKCS7);
TCSHashType = (htSHA1, htSHA2_256, htSHA2_384, htSHA2_512, htSHA3_256, htSHA3_384, htSHA3_512, htBlake2B, htArgon2, htTLSH);
TCSRSAKeySize = (rk2048, rk3072, rk4096);
TCSECCurve = (ecEd25519, ecEd448, ecEd511187, ecP521, ecP384, ecP256);
{ Base Component }
TCStackComponent = class(TComponent)
protected
procedure DoError(const Msg: string);
public
constructor Create(AOwner: TComponent); override;
end;
{ AES Component }
TCSAES = class(TCStackComponent)
private
FMode: TCSAESMode;
FPadding: TCSPadding;
FKey: string;
FIV: string;
FAuthData: string; // For GCM
FTag: string; // For GCM/MAC
public
procedure Encrypt(Input, Output: TStream);
procedure Decrypt(Input, Output: TStream);
procedure GenerateMAC(Input: TStream; var MAC: string);
published
property Mode: TCSAESMode read FMode write FMode default amCBC;
property Padding: TCSPadding read FPadding write FPadding default pdPKCS7;
property Key: string read FKey write FKey;
property IV: string read FIV write FIV;
property AuthData: string read FAuthData write FAuthData;
end;
{ SPECK Component }
TCSSPECK = class(TCStackComponent)
private
FKey: string; // 256-bit only
FIV: string;
public
procedure Encrypt(Input, Output: TStream); // CBC + PKCS#7 only
procedure Decrypt(Input, Output: TStream);
published
property Key: string read FKey write FKey;
property IV: string read FIV write FIV;
end;
{ RSA Component }
TCSRSA = class(TCStackComponent)
private
FKeySize: TCSRSAKeySize;
FPublicKey: string;
FPrivateKey: string;
public
procedure GenerateKeyPair;
procedure Sign(const Data: string; var Signature: string);
procedure Verify(const Data, Signature: string): Boolean;
published
property KeySize: TCSRSAKeySize read FKeySize write FKeySize default rk2048;
end;
{ ECC Component (ECDSA, EdDSA, ECIES) }
TCSECC = class(TCStackComponent)
private
FCurve: TCSECCurve;
public
procedure Sign(const Data: string; var Signature: string);
procedure Verify(const Data, Signature: string): Boolean;
procedure ECIESEncrypt(const Data: string; var Encrypted: string); // Ed25519 only
published
property Curve: TCSECCurve read FCurve write FCurve default ecEd25519;
end;
{ Hash Component }
TCSHash = class(TCStackComponent)
private
FHashType: TCSHashType;
public
function HashString(const S: string): string;
function HashStream(Stream: TStream): string;
published
property HashType: TCSHashType read FHashType write FHashType default htSHA2_256;
end;
{ KDF Component }
TCSKDF = class(TCStackComponent)
public
function PBKDF2(const Password, Salt: string; Iterations: Integer; Hash: TCSHashType): string;
function HKDF(const Secret, Salt, Info: string; Length: Integer): string;
function Argon2(const Password, Salt: string): string;
end;
{ Stream Ciphers }
TCSStreamCipher = class(TCStackComponent)
public
procedure Salsa20(Input, Output: TStream; const Key, Nonce: string);
procedure XChaCha20(Input, Output: TStream; const Key, Nonce: string);
end;
{ PKI & Digital Signatures }
TCSPKI = class(TCStackComponent)
public
procedure GenerateX509SelfSigned(const Subject: string; var Cert: string);
procedure GenerateCSR(const Subject: string; var CSR: string); // RSA 2048 / SHA 256
procedure SignXAdES(Input, Output: TStream);
procedure SignCAdES(Input, Output: TStream);
procedure SignPAdES(Input, Output: TStream);
end;
{ ZIP Services }
TCSZipServices = class(TCStackComponent)
public
procedure EncryptZipAE2(const InFile, OutFile, Password: string);
end;
procedure Register;
implementation
{ TCStackComponent }
constructor TCStackComponent.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
end;
procedure TCStackComponent.DoError(const Msg: string);
begin
raise ECStackError.Create(Msg);
end;
{ TCSAES }
procedure TCSAES.Encrypt(Input, Output: TStream);
begin
// Implementation of AES ECB-CBC-OFB-CTR-CTS-GCM
end;
procedure TCSAES.Decrypt(Input, Output: TStream);
begin
// Implementation
end;
procedure TCSAES.GenerateMAC(Input: TStream; var MAC: string);
begin
// Implementation of AES MAC
end;
{ TCSSPECK }
procedure TCSSPECK.Encrypt(Input, Output: TStream);
begin
// Implementation: 256-bit key, CBC mode, PKCS#7 padding only
end;
procedure TCSSPECK.Decrypt(Input, Output: TStream);
begin
// Implementation
end;
{ TCSRSA }
procedure TCSRSA.GenerateKeyPair;
begin
// Support for 2048, 3072, 4096
end;
procedure TCSRSA.Sign(const Data: string; var Signature: string);
begin
// Implementation
end;
procedure TCSRSA.Verify(const Data, Signature: string): Boolean;
begin
Result := False;
end;
{ TCSECC }
procedure TCSECC.Sign(const Data: string; var Signature: string);
begin
// Supports ECDSA and EdDSA (ed25519, ed448, ed511187, P521, P384, P256)
end;
procedure TCSECC.Verify(const Data, Signature: string): Boolean;
begin
Result := False;
end;
procedure TCSECC.ECIESEncrypt(const Data: string; var Encrypted: string);
begin
if FCurve <> ecEd25519 then
DoError('ECIES currently only supported for Ed25519');
// Implementation
end;
{ TCSHash }
function TCSHash.HashString(const S: string): string;
begin
Result := '';
// Supports SHA1, SHA2, SHA3, Blake2B, TLSH
end;
function TCSHash.HashStream(Stream: TStream): string;
begin
Result := '';
end;
{ TCSKDF }
function TCSKDF.PBKDF2(const Password, Salt: string; Iterations: Integer; Hash: TCSHashType): string;
begin
Result := '';
// Support SHA1 for ZIP derivation
end;
function TCSKDF.HKDF(const Secret, Salt, Info: string; Length: Integer): string;
begin
Result := '';
end;
function TCSKDF.Argon2(const Password, Salt: string): string;
begin
Result := '';
end;
{ TCSStreamCipher }
procedure TCSStreamCipher.Salsa20(Input, Output: TStream; const Key, Nonce: string);
begin
// Implementation
end;
procedure TCSStreamCipher.XChaCha20(Input, Output: TStream; const Key, Nonce: string);
begin
// Implementation
end;
{ TCSPKI }
procedure TCSPKI.GenerateX509SelfSigned(const Subject: string; var Cert: string);
begin
// Implementation with improved OID support
end;
procedure TCSPKI.GenerateCSR(const Subject: string; var CSR: string);
begin
// RSA 2048 / SHA 256 only
end;
procedure TCSPKI.SignXAdES(Input, Output: TStream);
begin
// Implementation with national templates
end;
procedure TCSPKI.SignCAdES(Input, Output: TStream);
begin
// Implementation
end;
procedure TCSPKI.SignPAdES(Input, Output: TStream);
begin
// Implementation
end;
{ TCSZipServices }
procedure TCSZipServices.EncryptZipAE2(const InFile, OutFile, Password: string);
begin
// AE-2 requirements implementation
end;
procedure Register;
begin
RegisterComponents('CStack', [TCSAES, TCSSPECK, TCSRSA, TCSECC, TCSHash, TCSKDF, TCSStreamCipher, TCSPKI, TCSZipServices]);
end;
end.
unit CStack_Base;
interface
uses
SysUtils, Classes;
type
{ Exception classes }
ECStackError = class(Exception);
{ Enums for configuration }
TCSAESMode = (amECB, amCBC, amOFB, amCTR, amCTS, amGCM);
TCSPadding = (pdNone, pdPKCS7);
TCSHashType = (htSHA1, htSHA2_256, htSHA2_384, htSHA2_512, htSHA3_256, htSHA3_384, htSHA3_512, htBlake2B, htArgon2, htTLSH);
TCSRSAKeySize = (rk2048, rk3072, rk4096);
TCSECCurve = (ecEd25519, ecEd448, ecEd511187, ecP521, ecP384, ecP256);
{ Base Component }
TCStackComponent = class(TComponent)
protected
procedure DoError(const Msg: string);
public
constructor Create(AOwner: TComponent); override;
end;
{ AES Component }
TCSAES = class(TCStackComponent)
private
FMode: TCSAESMode;
FPadding: TCSPadding;
FKey: string;
FIV: string;
FAuthData: string; // For GCM
FTag: string; // For GCM/MAC
public
procedure Encrypt(Input, Output: TStream);
procedure Decrypt(Input, Output: TStream);
procedure GenerateMAC(Input: TStream; var MAC: string);
published
property Mode: TCSAESMode read FMode write FMode default amCBC;
property Padding: TCSPadding read FPadding write FPadding default pdPKCS7;
property Key: string read FKey write FKey;
property IV: string read FIV write FIV;
property AuthData: string read FAuthData write FAuthData;
end;
{ SPECK Component }
TCSSPECK = class(TCStackComponent)
private
FKey: string; // 256-bit only
FIV: string;
public
procedure Encrypt(Input, Output: TStream); // CBC + PKCS#7 only
procedure Decrypt(Input, Output: TStream);
published
property Key: string read FKey write FKey;
property IV: string read FIV write FIV;
end;
{ RSA Component }
TCSRSA = class(TCStackComponent)
private
FKeySize: TCSRSAKeySize;
FPublicKey: string;
FPrivateKey: string;
public
procedure GenerateKeyPair;
procedure Sign(const Data: string; var Signature: string);
procedure Verify(const Data, Signature: string): Boolean;
published
property KeySize: TCSRSAKeySize read FKeySize write FKeySize default rk2048;
end;
{ ECC Component (ECDSA, EdDSA, ECIES) }
TCSECC = class(TCStackComponent)
private
FCurve: TCSECCurve;
public
procedure Sign(const Data: string; var Signature: string);
procedure Verify(const Data, Signature: string): Boolean;
procedure ECIESEncrypt(const Data: string; var Encrypted: string); // Ed25519 only
published
property Curve: TCSECCurve read FCurve write FCurve default ecEd25519;
end;
{ Hash Component }
TCSHash = class(TCStackComponent)
private
FHashType: TCSHashType;
public
function HashString(const S: string): string;
function HashStream(Stream: TStream): string;
published
property HashType: TCSHashType read FHashType write FHashType default htSHA2_256;
end;
{ KDF Component }
TCSKDF = class(TCStackComponent)
public
function PBKDF2(const Password, Salt: string; Iterations: Integer; Hash: TCSHashType): string;
function HKDF(const Secret, Salt, Info: string; Length: Integer): string;
function Argon2(const Password, Salt: string): string;
end;
{ Stream Ciphers }
TCSStreamCipher = class(TCStackComponent)
public
procedure Salsa20(Input, Output: TStream; const Key, Nonce: string);
procedure XChaCha20(Input, Output: TStream; const Key, Nonce: string);
end;
{ PKI & Digital Signatures }
TCSPKI = class(TCStackComponent)
public
procedure GenerateX509SelfSigned(const Subject: string; var Cert: string);
procedure GenerateCSR(const Subject: string; var CSR: string); // RSA 2048 / SHA 256
procedure SignXAdES(Input, Output: TStream);
procedure SignCAdES(Input, Output: TStream);
procedure SignPAdES(Input, Output: TStream);
end;
{ ZIP Services }
TCSZipServices = class(TCStackComponent)
public
procedure EncryptZipAE2(const InFile, OutFile, Password: string);
end;
procedure Register;
implementation
{ TCStackComponent }
constructor TCStackComponent.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
end;
procedure TCStackComponent.DoError(const Msg: string);
begin
raise ECStackError.Create(Msg);
end;
{ TCSAES }
procedure TCSAES.Encrypt(Input, Output: TStream);
begin
// Implementation of AES ECB-CBC-OFB-CTR-CTS-GCM
end;
procedure TCSAES.Decrypt(Input, Output: TStream);
begin
// Implementation
end;
procedure TCSAES.GenerateMAC(Input: TStream; var MAC: string);
begin
// Implementation of AES MAC
end;
{ TCSSPECK }
procedure TCSSPECK.Encrypt(Input, Output: TStream);
begin
// Implementation: 256-bit key, CBC mode, PKCS#7 padding only
end;
procedure TCSSPECK.Decrypt(Input, Output: TStream);
begin
// Implementation
end;
{ TCSRSA }
procedure TCSRSA.GenerateKeyPair;
begin
// Support for 2048, 3072, 4096
end;
procedure TCSRSA.Sign(const Data: string; var Signature: string);
begin
// Implementation
end;
procedure TCSRSA.Verify(const Data, Signature: string): Boolean;
begin
Result := False;
end;
{ TCSECC }
procedure TCSECC.Sign(const Data: string; var Signature: string);
begin
// Supports ECDSA and EdDSA (ed25519, ed448, ed511187, P521, P384, P256)
end;
procedure TCSECC.Verify(const Data, Signature: string): Boolean;
begin
Result := False;
end;
procedure TCSECC.ECIESEncrypt(const Data: string; var Encrypted: string);
begin
if FCurve <> ecEd25519 then
DoError('ECIES currently only supported for Ed25519');
// Implementation
end;
{ TCSHash }
function TCSHash.HashString(const S: string): string;
begin
Result := '';
// Supports SHA1, SHA2, SHA3, Blake2B, TLSH
end;
function TCSHash.HashStream(Stream: TStream): string;
begin
Result := '';
end;
{ TCSKDF }
function TCSKDF.PBKDF2(const Password, Salt: string; Iterations: Integer; Hash: TCSHashType): string;
begin
Result := '';
// Support SHA1 for ZIP derivation
end;
function TCSKDF.HKDF(const Secret, Salt, Info: string; Length: Integer): string;
begin
Result := '';
end;
function TCSKDF.Argon2(const Password, Salt: string): string;
begin
Result := '';
end;
{ TCSStreamCipher }
procedure TCSStreamCipher.Salsa20(Input, Output: TStream; const Key, Nonce: string);
begin
// Implementation
end;
procedure TCSStreamCipher.XChaCha20(Input, Output: TStream; const Key, Nonce: string);
begin
// Implementation
end;
{ TCSPKI }
procedure TCSPKI.GenerateX509SelfSigned(const Subject: string; var Cert: string);
begin
// Implementation with improved OID support
end;
procedure TCSPKI.GenerateCSR(const Subject: string; var CSR: string);
begin
// RSA 2048 / SHA 256 only
end;
procedure TCSPKI.SignXAdES(Input, Output: TStream);
begin
// Implementation with national templates
end;
procedure TCSPKI.SignCAdES(Input, Output: TStream);
begin
// Implementation
end;
procedure TCSPKI.SignPAdES(Input, Output: TStream);
begin
// Implementation
end;
{ TCSZipServices }
procedure TCSZipServices.EncryptZipAE2(const InFile, OutFile, Password: string);
begin
// AE-2 requirements implementation
end;
procedure Register;
begin
RegisterComponents('CStack', [TCSAES, TCSSPECK, TCSRSA, TCSECC, TCSHash, TCSKDF, TCSStreamCipher, TCSPKI, TCSZipServices]);
end;
end.