Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
157 commits
Select commit Hold shift + click to select a range
56e6229
Initial commit
sergworks Oct 4, 2012
80af931
TBigNumber.AddLimb bug fixed
sergworks Oct 4, 2012
cafe5cd
TBigNumber.ToCardinal implemented
sergworks Oct 4, 2012
5a19025
TBigNumber.DivModNumbers fixed
sergworks Oct 5, 2012
850d5d8
Project structure changed; tfImport.pas added
sergworks Oct 6, 2012
b6cb01d
ToStringU/AsStringU/ToWideStringU staff removed
sergworks Oct 7, 2012
0d4cccd
Big Number comparison added
sergworks Oct 9, 2012
d2da35e
BinomCoff Demo fixed
sergworks Oct 9, 2012
41d2f77
TBigNumber.SubLimb fixed
sergworks Oct 11, 2012
c741df6
TBigNumber.SubLimbU fixed
sergworks Oct 11, 2012
f98d3e0
TBigNumber.SubIntLimb fixed
sergworks Oct 12, 2012
89db011
TBigNumber.AddIntLimbU AV bug fixed
sergworks Oct 12, 2012
110fe74
TBigNumber.SubIntLimbU fixed
sergworks Oct 12, 2012
5b8d4fb
TBigNumber.MulLimb, MulLimbU
sergworks Oct 13, 2012
7e2f804
PiBench Demo added
sergworks Oct 14, 2012
c46784d
PiBench typo bug fixed (still leaking)
sergworks Oct 14, 2012
b9adc55
TBigNumber.DivModNumbersU memory leak fixed
sergworks Oct 15, 2012
95e2a9d
TBigNumber.DivModNumbersU RefCounting bug fixed
sergworks Oct 15, 2012
30a4e76
Memory leak issue should be fixed now
sergworks Oct 16, 2012
b2afad9
BigCardinal.Power renamed Pow
sergworks Oct 17, 2012
cd7c238
BigCardinal >=, <= operators fixed
sergworks Oct 18, 2012
c6b4a8e
Numerics: class function Compare added
sergworks Oct 18, 2012
e091be5
property BigInteger.Sign added
sergworks Oct 18, 2012
68bc2ed
class function BigInteger.Abs added
sergworks Oct 18, 2012
278145c
TBigNumber.LeftShift added
sergworks Oct 21, 2012
ed72c42
TBigNumber.FromPChar added
sergworks Oct 30, 2012
eff3d83
TBigNumber.FromPCharHex added
sergworks Nov 1, 2012
7a8446a
Serialization (ToBytes, FromBytes) added
sergworks Nov 5, 2012
36bbb49
TBigNumber.AndNumbers
sergworks Nov 6, 2012
36ebbcb
TBigNumber.AndNumbers fixed
sergworks Nov 7, 2012
0100b69
ToHexString, AsString -> ToString
sergworks Nov 8, 2012
0677546
DivModNumbers(U) - Remainder size fixed (Used = arrShrShort)
sergworks Nov 11, 2012
3420388
TBigNumber.DivModNumbers(U) fixed for byte & word limbs
sergworks Dec 2, 2012
56bc9e3
TBigNumber.OrNumbers(U) added
sergworks Dec 9, 2012
5f25888
TBigNumber.XorNumbers
sergworks Dec 9, 2012
3a35c82
TBigNumber.AndNumbersU fixed
sergworks Dec 9, 2012
5eb0a08
BigCardinal compare overloads for 32-bit limb
sergworks Dec 12, 2012
623fe6f
TBigNumber.CompareToIntLimb fixed
sergworks Dec 12, 2012
d097de1
class function DivRem added
sergworks Dec 15, 2012
e4ebfeb
Demos folder structured (Lazarus Demos)
sergworks Dec 17, 2012
5df68c3
BigInteger compare overloads added
sergworks Dec 17, 2012
00a1a00
tfImport.pas rewritten
sergworks Dec 19, 2012
c50f864
PiBench code improved
sergworks Dec 20, 2012
45665ef
forgot to save updated PiBench.dpr in prev commit, done
sergworks Dec 20, 2012
c6b20d8
string -> big number code rewritten
sergworks Dec 27, 2012
796512a
TBigNumber.ToHexString rewritten (Digits arg added)
sergworks Dec 28, 2012
e070f08
TBigNumber.ShrNumber fixed
sergworks Jan 3, 2013
bc0de3c
arrNormSqrtRem added, not tested
sergworks Feb 22, 2013
23379dd
buggy Sqrt code before cleanup
sergworks Mar 8, 2013
3e4f7e6
arrInc, arrSelfInc added
sergworks Mar 10, 2013
7fea2c9
TBigNumber.SqrtNumber passes tests
sergworks Mar 13, 2013
0241a30
arrDec, arrSelfDec added
sergworks Mar 17, 2013
01c942d
Delphi DLL project added
sergworks Apr 6, 2013
d704850
TBigNumber.DivRemLimbU, TBigNumber.DivRemIntLimb added
sergworks Apr 6, 2013
a710d92
Lazarus DLL project added
sergworks Apr 6, 2013
115bf4d
AddIntLimbU, SubIntLimbU, MulIntLimbU staff commented; to be removed.
sergworks Apr 6, 2013
ff47d10
Numerics.pas (dll wrapper for Pascal) added
sergworks May 5, 2013
d8c7543
TBigNumber.SubLimbU2 added
sergworks May 6, 2013
1e1b957
TBigNumber.DivRemLimbU2, DivRemIntLimb2 added
sergworks May 9, 2013
5d3a6fc
TbigNumber.SubLimb2, SubIntLimb2 added
sergworks May 12, 2013
a48876b
BigNumberFromCardinal, BigNumberFromInteger functions commented out
sergworks Jun 4, 2013
c8839f6
(U)DblLimb conversion operators added [(U)Int64 support]
sergworks Jun 10, 2013
b0727ac
CompareToDblXXX functions added
sergworks Jun 14, 2013
f01dfe9
Comparison operators' overloads (for [U]Int64) added
sergworks Jun 19, 2013
4234c79
IBigNumber.NegateNumber added; some bugs fixed.
sergworks Jun 29, 2013
a76c4a5
Conversion to strings rewritten (IBigNumber.ToDec, ToHex)
sergworks Jul 23, 2013
530e64e
Numerics32(64).dll first beta built with Lazarus/FPC
sergworks Aug 3, 2013
0bfb343
Hex string -> BigNumber conversion sign bug fixed
sergworks Aug 9, 2013
7a66828
Project restructured into packages; Hashes package added; some code b…
sergworks Nov 6, 2013
7396d94
Numerics.dll projects fixed
sergworks Nov 9, 2013
725328b
C++ support added, early beta
sergworks Nov 23, 2013
8940f5d
Ver 0.55 commit
sergworks Dec 20, 2013
fe87e38
added tfBytes.pas
sergworks May 11, 2014
32c5460
IForge interface added; projects are broken
sergworks May 19, 2014
646a178
Jenkins One Hash, TBigNumber.GetHashCode
sergworks May 19, 2014
3d34f1b
ModPow memory bug fixed; working on generic dictionaries.
sergworks Jun 10, 2014
87f5261
tfGNumerics.pas cleanup
sergworks Jun 10, 2014
6e53bfa
DLL's projects & pascal import fixed; need to fix C++ import now
sergworks Jun 14, 2014
569650d
Version 0.57
sergworks Jun 14, 2014
fd97cdb
ByteArray type implemented
sergworks Jun 23, 2014
56b0a0e
BigNumberFromDblLimb, BigNumberFromDblIntLimb bug fixed
sergworks Jul 2, 2014
45656d8
Version 0.58
sergworks Jul 2, 2014
09cbb23
HMAC (RFC2104) added
sergworks Aug 3, 2014
cc88cf1
Added SHA1 hash alg, ByteArray.Reverse method
sergworks Sep 8, 2014
dfef0b9
tforge 0.60 commit
sergworks Sep 15, 2014
5276d9b
THash.DeriveKey (PBKDF1) passed tests
sergworks Sep 30, 2014
9da6081
Folder structure changed; tforge 0.65 commit
sergworks Oct 12, 2014
0c67e50
MD5 compression in Win32 BASM; > 4 times faster.
sergworks Oct 16, 2014
0f4e225
SHA1 compression in Win32 BASM
sergworks Oct 19, 2014
fd09cac
SHA384 and SHA512 algoritms added
sergworks Oct 20, 2014
3f813da
SHA224 algorithm added
sergworks Oct 20, 2014
55af635
THMACAlg.Release bug fixed, TMD5Alg.Compress in 64-bit FPC BASM
sergworks Oct 22, 2014
ef1cc97
SHA1 in CPUX64_WIN64 FPC BASM
sergworks Oct 22, 2014
b718c4e
SHA256 fully unrolled
sergworks Oct 26, 2014
c6a8cd8
SHA256 compression in Win32 BASM
sergworks Oct 28, 2014
86bbc0a
SHA256 in CPUx64-Win64 BASM; tforge 0.67
sergworks Nov 3, 2014
bf39ab7
HMAC memory leak, endianness change; ver 0.68 commit
sergworks Dec 27, 2014
7bc4749
CipherDemo project added
sergworks Jan 1, 2015
56387f8
HashCalc project added
sergworks Jan 4, 2015
a3e1aa4
RC5 alg added
sergworks Jan 8, 2015
8840541
Rc4 & Salsa20 added; TBigEndian namespace type added.
sergworks Feb 25, 2015
0779da9
Stream cipher API changed (RandBlock, etc)
sergworks Jul 19, 2015
94a1cff
ThreadDemo project added; ver70 commit
sergworks Jul 29, 2015
1375637
README.md edited online with Bitbucket
sergworks Aug 7, 2015
cf3ed76
ByteArray.FromData, ByteArray.ToData added
sergworks Aug 10, 2015
e4073a5
_LE suffix removed
sergworks Aug 10, 2015
889b5a9
TCipher.Salsa20.SetNonce bugfix
sergworks Aug 16, 2015
13f4aa7
Readme merge
sergworks Aug 16, 2015
30e2541
ChaCha20, 3DES added; ver 0.71 commit
sergworks Aug 24, 2015
a5c1cd0
ByteArray.ToInt bugfix
sergworks Aug 25, 2015
55f0747
ByteArray with FBigEndian state - to be rolled back
sergworks Sep 5, 2015
40f0fbd
ver 0.72 commit
sergworks Sep 10, 2015
73dfa74
Unary -,+ operators for BigInteger; arrAdd, arrAddLimb optimized (BAS…
sergworks Sep 19, 2015
b58357f
BigInteger.Next, Prev; arrInc in BASM
sergworks Sep 22, 2015
2e88398
tfKeyStreams.pas unit added (TKeyStreamEngine, not tested)
sergworks Oct 24, 2015
8d32047
TCRC class added (one-bit-at-a-time implementation)
sergworks Nov 24, 2015
d0d2dc4
Working on TKeyStream class
sergworks Dec 19, 2015
fcbe6a1
arrMulLimb in BASM(32/64)
sergworks Dec 31, 2015
5dcf857
arrMul in BASM32; Challenge project added
sergworks Jan 3, 2016
4a9e0f9
arrMul in BASM64
sergworks Jan 5, 2016
a4848a6
BigInteger.IsPowerOfTwo, BigInteger.PowerOfTwo added
sergworks Jan 26, 2016
6aa474d
BigInteger.GCD fixed
sergworks Feb 9, 2016
3c099c4
BigInteger.ModPow memory leak fixed
sergworks Feb 13, 2016
c2531f1
BigInteger.LCM added
sergworks Feb 15, 2016
281b476
Conversion from BigInteger to short integer types redesigned (now wor…
sergworks Feb 16, 2016
cf239d2
Last commit before project structure change
sergworks Feb 28, 2016
ef9c1d2
ver 0.75 commit
sergworks Apr 10, 2016
08ba52b
Montgomery modular exponentiation (tests passed)
sergworks May 17, 2016
4d14ea1
ICipherAlgorithm.GetKeyParam added
sergworks Jul 13, 2016
d334d51
TKeyStream renamed TStreamCipher
sergworks Aug 21, 2016
3e49110
ByteArray.AllocateRand added
sergworks Aug 26, 2016
6cdc335
TStreamCipher.Skip rewritten
sergworks Aug 29, 2016
896e3fa
ICipherAlgorithm changed and renamed ICipher
sergworks Sep 1, 2016
64e16b1
TCipher.IsBlockCipher added
sergworks Sep 4, 2016
c2a413e
DECNO SetParam for Salsa20/ChaCha20
sergworks Sep 7, 2016
5cd4992
TMont.Release bug fixed (double free memory)
sergworks Sep 23, 2016
1bacdda
Last commit before TCipher API change
sergworks Oct 20, 2016
309c5f3
Beginning OpenSSL support; TCipher.GetInstance and TCipher.ExpandKey …
sergworks Jan 26, 2017
8c2c8e3
Cipher flag constants changed; CipherDemo project updated
sergworks Jan 27, 2017
6374882
ICipher.ExpandKeyNonce added
sergworks Feb 19, 2017
8589fdf
TBaseBlockCipher alignment issue fixed
sergworks Feb 19, 2017
d1d1ee6
Issue #5 fixed (BigNumberFromPChar bug); SSLEncrypt project added (Op…
sergworks Jan 2, 2018
a1516f4
Moved to new laptop; tfEvpAES.pas unit added.
Jun 12, 2018
63924e7
some bugs in tfEvpAES.pas fixed
Jun 12, 2018
dd89a15
TCipher.EncryptByteArray bug fixed (wrong array length)
Jun 14, 2018
37ca591
Padding support removed from CTR mode of operation
Jun 14, 2018
602b0e3
Before ICipher.Decrypt change
Jun 18, 2018
db58b64
before ICipher.Encrypt change
Jun 19, 2018
79b0ae4
New ICipher.Encrypt/Decrypt ABI
Jun 30, 2018
0ec1d06
Redesigning TCipher class; all TCipher code broken
Jul 30, 2018
4026018
Final TCipher ABI; AES fixed, other ciphers broken.
Aug 6, 2018
b476ba9
before adding EncryptFinal/DecryptFinal
Aug 14, 2018
5358d39
refused to add XXXFinal staff; tfBytes renamed to tfArrays.
Aug 29, 2018
da5ebe4
Changed to Delphi 10.2.3 CE
Aug 30, 2018
3d3b2ab
Changed to relative path to Include folder
Aug 30, 2018
d199343
CFB mode fixed
Sep 10, 2018
3c24752
Merge commit 'd1993436944c99f14cc3868f20c28a16c98eea8d'
ElminsterAU Dec 29, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions .hgignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
syntax: glob
# This line is a comment, and will be skipped.
# Empty lines are skipped too.

# Backup files left behind by the editor.
*.~*~
*.dcu
*.exe
*.dll
*.local
*.identcache
*.2007
*.aqt
dunit.ini
*.tvsconfig
*.log
*.compiled
*.obj
*.o
*.ppu
*.bak
*.err
*.out
*.lps
*.layout
*.depend
*.rst
*.save
*.aes
*.rc4
*.stat
*.otares
*_MemoryManager_EventLog.txt
19 changes: 19 additions & 0 deletions Demos/ByteArray/DXE/ByteArrDemo.dpr
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
program ByteArrDemo;

{$APPTYPE CONSOLE}

uses
SysUtils,
tfBytes,
demo in '..\Source\demo.pas';

begin
ReportMemoryLeaksOnShutdown:= True;
try
RunDemo;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
end.
110 changes: 110 additions & 0 deletions Demos/ByteArray/DXE/ByteArrDemo.dproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{D8500CCF-75EC-4F2A-8647-36503B5B1852}</ProjectGuid>
<MainSource>ByteArrDemo.dpr</MainSource>
<ProjectVersion>12.3</ProjectVersion>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<Platform>Win32</Platform>
<AppType>Console</AppType>
<FrameworkType>None</FrameworkType>
<DCC_DCCCompiler>DCC32</DCC_DCCCompiler>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DCC_ImageBase>00400000</DCC_ImageBase>
<DCC_DcuOutput>.\$(Config)\$(Platform)</DCC_DcuOutput>
<DCC_UnitSearchPath>$(BDSCOMMONDIR)\TForge\$(Config)\$(Platform);$(DCC_UnitSearchPath)</DCC_UnitSearchPath>
<DCC_UnitAlias>WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;$(DCC_UnitAlias)</DCC_UnitAlias>
<DCC_ExeOutput>.\$(Config)\$(Platform)</DCC_ExeOutput>
<DCC_N>false</DCC_N>
<DCC_S>false</DCC_S>
<DCC_K>false</DCC_K>
<DCC_E>false</DCC_E>
<DCC_F>false</DCC_F>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_Optimize>false</DCC_Optimize>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_DebugInformation>false</DCC_DebugInformation>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="ByteArrDemo.dpr">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="..\Source\demo.pas"/>
<BuildConfiguration Include="Release">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Debug">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<Import Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')" Project="$(BDS)\Bin\CodeGear.Delphi.Targets"/>
<Import Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')" Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj"/>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType/>
<BorlandProject>
<Delphi.Personality>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1049</VersionInfo>
<VersionInfo Name="CodePage">1251</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName"/>
<VersionInfoKeys Name="FileDescription"/>
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName"/>
<VersionInfoKeys Name="LegalCopyright"/>
<VersionInfoKeys Name="LegalTrademarks"/>
<VersionInfoKeys Name="OriginalFilename"/>
<VersionInfoKeys Name="ProductName"/>
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments"/>
</VersionInfoKeys>
<Source>
<Source Name="MainSource">ByteArrDemo.dpr</Source>
</Source>
</Delphi.Personality>
<Platforms>
<Platform value="Win32">True</Platform>
</Platforms>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
</Project>
80 changes: 80 additions & 0 deletions Demos/ByteArray/FPC/ByteArrDemo.lpi
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
<?xml version="1.0"?>
<CONFIG>
<ProjectOptions>
<Version Value="9"/>
<PathDelim Value="\"/>
<General>
<Flags>
<MainUnitHasCreateFormStatements Value="False"/>
<MainUnitHasTitleStatement Value="False"/>
</Flags>
<SessionStorage Value="InProjectDir"/>
<MainUnit Value="0"/>
<Title Value="ByteArrDemo"/>
<UseAppBundle Value="False"/>
<ResourceType Value="res"/>
</General>
<i18n>
<EnableI18N LFM="False"/>
</i18n>
<VersionInfo>
<StringTable ProductVersion=""/>
</VersionInfo>
<BuildModes Count="1">
<Item1 Name="Default" Default="True"/>
</BuildModes>
<PublishOptions>
<Version Value="2"/>
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
<ExcludeFileFilter Value="*.(bak|ppu|o|so);*~;backup"/>
</PublishOptions>
<RunParams>
<local>
<FormatVersion Value="1"/>
</local>
</RunParams>
<Units Count="2">
<Unit0>
<Filename Value="ByteArrDemo.lpr"/>
<IsPartOfProject Value="True"/>
<UnitName Value="ByteArrDemo"/>
</Unit0>
<Unit1>
<Filename Value="..\Source\demo.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="Demo"/>
</Unit1>
</Units>
</ProjectOptions>
<CompilerOptions>
<Version Value="11"/>
<PathDelim Value="\"/>
<Target>
<Filename Value="ByteArrDemo"/>
</Target>
<SearchPaths>
<IncludeFiles Value="$(ProjOutDir)"/>
<OtherUnitFiles Value="..\Source;C:\bin\FPC\TForge\$(TargetCPU)-$(TargetOS)\"/>
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<Other>
<CompilerMessages>
<MsgFileName Value=""/>
</CompilerMessages>
<CompilerPath Value="$(CompPath)"/>
</Other>
</CompilerOptions>
<Debugging>
<Exceptions Count="3">
<Item1>
<Name Value="EAbort"/>
</Item1>
<Item2>
<Name Value="ECodetoolError"/>
</Item2>
<Item3>
<Name Value="EFOpenError"/>
</Item3>
</Exceptions>
</Debugging>
</CONFIG>
21 changes: 21 additions & 0 deletions Demos/ByteArray/FPC/ByteArrDemo.lpr
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
program ByteArrDemo;

{$mode objfpc}{$H+}

uses
// {$IFDEF UNIX}{$IFDEF UseCThreads}
// cthreads,
// {$ENDIF}{$ENDIF}
SysUtils, Classes, Demo
{ you can add units after this };

begin
try
RunDemo;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
end.

81 changes: 81 additions & 0 deletions Demos/ByteArray/Source/demo.pas
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
unit Demo;

{$IFDEF FPC}
{$mode delphi}
{$ENDIF}

interface

uses
Classes, SysUtils, tfBytes;

procedure RunDemo;

implementation

procedure RunDemo;
var
A1, A2, A3: ByteArray;
P: PByte;
I, L: Integer;
Sum: Integer;
B: Byte;

begin
// initialization examples
A1:= ByteArray(1);
A2:= ByteArray.FromBytes([2, 3, 4]);

{ also possible
A2:= ByteArray.Allocate(3);
A2[0]:= 2;
A2[1]:= 3;
A2[2]:= 4;

or else (Delphi only; FPC 2.6 does not support array constructors):
A2:= TBytes.Create(2, 3, 4);
}

Writeln('A1 = ', A1.ToString, '; Hash: ', IntToHex(A1.HashCode, 8), '; Len: ', A1.Len);
Writeln('A2 = ', A2.ToString, '; Hash: ', IntToHex(A2.HashCode, 8), '; Len: ', A2.Len);

// concatenation
A3:= A1 + A2;
Writeln('A3 = A1 + A2 = ', A3.ToString);

// indexed access to array elements:
Sum:= 0;
for I:= 0 to A3.Len - 1 do begin
Inc(Sum, A3[I]);
end;
Writeln('Sum of elements = ', Sum);

// for .. in iteration:
Sum:= 0;
for B in A3 do begin
Inc(Sum, B);
end;
Writeln('Sum of elements = ', Sum);

// fast access to array elements:
P:= A3.RawData;
L:= A3.Len;
Sum:= 0;
while (L > 0) do begin
Inc(Sum, P^);
Inc(P);
Dec(L);
end;
Writeln('Sum of elements = ', Sum);

// bitwise 'xor':
Writeln('A2 xor A3 = ', (A2 xor A3).ToString);

// fluent coding
Writeln(ByteArray.FromText('ABCDEFGHIJ').Insert(3,
ByteArray.FromText(' 123 ')).Reverse.ToText);

end;

end.

41 changes: 41 additions & 0 deletions Demos/Ciphers/CipherDemo/DXE/CipherDemo.dpr
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
program CipherDemo;

{$APPTYPE CONSOLE}

uses
SysUtils,
tfBytes,
Demos in '..\Source\Demos.pas';

begin
try
ECBTest;
CBCTest;
CTRTest;
CBCDemo(ByteArray.ParseHex(PlainText1),
ByteArray.ParseHex(HexIV),
ByteArray.ParseHex(HexKey));
CTRDemo(ByteArray.ParseHex(PlainText1),
ByteArray.ParseHex(HexIV),
ByteArray.ParseHex(HexKey));
CBCFileDemo(ParamStr(0),
ByteArray.ParseHex(HexIV),
ByteArray.ParseHex(HexKey));
CBCFileDemo2(ParamStr(0),
ByteArray.ParseHex(HexIV),
ByteArray.ParseHex(HexKey));
BlockDemo(ByteArray.ParseHex(PlainText1).Copy(1, 8),
ByteArray.ParseHex(HexKey).Copy(1, 8));
RC5BlockDemo(ByteArray.ParseHex(PlainText1),
ByteArray.ParseHex(HexKey));
RandDemo(ByteArray.ParseHex(HexKey));
RC4FileDemo(ParamStr(0),
ByteArray.ParseHex(HexKey));
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Writeln;
Write('Press Enter ..');
Readln;
end.
Loading