I created this function:
Function CreateKeysPair(KeyBits:Integer):Boolean;
var
MyProcess, MyProcess2 : TProcess;
Begin
//Generates the private
MyProcess:= TProcess.Create(nil);
MyProcess.Executable := 'c:\OpenSSL-Win32\bin\openssl.exe';
MyProcess.Parameters.Add('genrsa');
MyProcess.Parameters.Add('-out');
MyProcess.Parameters.Add('DATA/private.pem');
MyProcess.Parameters.Add(IntToStr(KeyBits));
MyProcess.Options := MyProcess.Options + [poWaitOnExit, poUsePipes, poNoConsole];
MyProcess.Execute;
// Extract public key
MyProcess2:= TProcess.Create(nil);
MyProcess2.Executable := 'c:\OpenSSL-Win32\bin\openssl.exe';
MyProcess2.Parameters.Add('rsa');
MyProcess2.Parameters.Add('-in DATA/private.pem');
MyProcess2.Parameters.Add('-pubout');
MyProcess2.Parameters.Add('-out DATA/public.pem');
MyProcess2.Options := MyProcess2.Options + [poWaitOnExit, poUsePipes, poNoConsole];
MyProcess2.Execute;
if ((FileExists('DATA/private.pem')) and (FileExists('DATA/public.pem'))) then result := true
else result := false;
End;
The private key is created as expected, but the public is not extracted. I tried with TProcess.Environment values for OpenSSL but i was unable to figure out a solution. I also tried with AppFolder/data/private.pem but nothing.
EDIT: I added
mainmemo.lines.LoadFromStream(MyProcess2.Stderr);
And got this error:
rsa: Unknown cipher in DATA/private.pem
rsa: Use -help for summary.