xtool/contrib/mORMot/SQLite3/Samples/33 - ECC/ECC.dpr

108 lines
3.7 KiB
ObjectPascal

program ECC;
{$APPTYPE CONSOLE}
(*
Synopse mORMot framework
Sample 33 - ECC command line tool
Manage certificate-based public-key cryptography using ECC-secp256r1,
i.e. public/private key pairs, ECDSA digital signatures and ECIES encryption,
as implemented in SynECC.
Symetric encryption is also available from aeadcrypt/aeaddecrypt commands.
Version 1.18
- Initial Release
first line of uses clause below must be {$I SynDprUses.inc} to enable FastMM4
*)
uses
{$I SynDprUses.inc}
SysUtils,
SynCommons,
SynTable,
SynCrypto,
SynEcc,
ECCProcess;
{$R *.res}
function ProcessCommandLine: TECCCommandError;
var cmd: RawUTF8;
main: TECCCommand;
sw: ICommandLine;
begin
cmd := StringToUTF8(ParamStr(1));
main := TECCCommand(GetEnumNameValueTrimmed(TypeInfo(TECCCommand),pointer(cmd),length(cmd)));
if main=ecChain then
sw := TCommandLine.CreateAsArray({firstparam=}2) else
sw := TCommandLine.Create;
result := ECCCommand(main,sw);
if result=eccUnknownCommand then begin
TextColor(ccLightGreen);
writeln(#13#10'Synopse ECC certificate-based public-key cryptography'+
#13#10'-----------------------------------------------------');
TextColor(ccGreen);
writeln('Using mORMot''s SynECC rev. ' + {$I SynopseCommit.inc} + #13#10);
TextColor(ccLightGray);
writeln(ExeVersion.ProgramName,
' help');
writeln(ExeVersion.ProgramName,
' new -auth key.private -authpass authP@ssW0rd -authrounds 60000'#13#10+
' -issuer toto@toto.com -start 2016-10-30 -days 30'#13#10+
' -newpass P@ssw0RD@ -newrounds 60000'); // -splitfiles 1');
writeln(ExeVersion.ProgramName,
' rekey -auth key.private -authpass P@ssW0rd -authrounds 60000'#13#10+
' -newpass newP@ssw0RD@ -newrounds 60000');
writeln(ExeVersion.ProgramName,
' sign -file some.doc -auth key.private -pass P@ssW0rd -rounds 60000');
writeln(ExeVersion.ProgramName,
' verify -file some.doc -auth key.public');
writeln(ExeVersion.ProgramName,
' source -auth key.private -pass P@ssW0rd -rounds 60000'#13#10+
' -const MY_PRIVKEY -comment "My Private Key"');
writeln(ExeVersion.ProgramName,
' infopriv -auth key.private -pass P@ssW0rd -rounds 60000 [-json key.json]');
writeln(ExeVersion.ProgramName,
' chain file1.public file2.public file3.public ...');
writeln(ExeVersion.ProgramName,
' chainall');
writeln(ExeVersion.ProgramName,
' crypt -file some.doc -out some.doc.synecc -auth key.public'#13#10+
' -saltpass salt -saltrounds 60000 [-algo 0]');
writeln(ExeVersion.ProgramName,
' decrypt -file some.doc.synecc -out some.doc -auth key.private'#13#10+
' -authpass P@ssW0rd -authrounds 60000 -saltpass salt -saltrounds 60000');
writeln(ExeVersion.ProgramName,
' infocrypt -file some.doc.synecc [-rawfile some.raw][-json some.json]');
writeln(ExeVersion.ProgramName,
' aeadcrypt -file some.doc -out some.doc.synaead -pass P@ssW0rd -salt salt'#13#10+
' -rounds 60000');
writeln(ExeVersion.ProgramName,
' aeaddecrypt -file some.doc -out some.doc.synaead -pass P@ssW0rd -salt salt'#13#10+
' -rounds 60000');
writeln(ExeVersion.ProgramName,
' cheatinit -newpass MasterP@ssw0RD@ -newrounds 100000');
writeln(ExeVersion.ProgramName,
' cheat -auth key.private -authpass MasterP@ssw0RD@ -authrounds 100000');
writeln(#10'Note that you can add the -noprompt switch for no console interactivity.');
end;
end;
begin
ExitCode := ord(ProcessCommandLine);
{$ifndef FPC}
{$WARNINGS OFF}
{$ifdef MSWINDOWS}
if DebugHook<>0 then
readln;
{$endif}
{$WARNINGS ON}
{$endif}
end.