108 lines
3.7 KiB
ObjectPascal
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.
|