fpc/packages/gnutls/examples/privkey.pp
michael fdff42dd9e * Soem simplification and reformatting
git-svn-id: trunk@40814 -
2019-01-09 10:22:28 +00:00

51 lines
1.1 KiB
ObjectPascal

{
Simple low-level example for how generate a RSA private key (4096 bytes) using
the GnuTLS binding.
Author(s): Silvio Clecio (silvioprog), Michael Van Canneyt
Date: Mon Jan 7 01:36:18 -03 2019
GnuTLS version: 3.4+
}
program privkey;
{$MODE OBJFPC}{$H+}
{$ASSERTIONS ON}
uses
sysutils,
ctypes,
gnutls;
type
EGnuTLS = Exception;
procedure TLSCheckRet(Aret: cint); inline;
begin
if Aret <> GNUTLS_E_SUCCESS then
raise EGnuTLS.Create(gnutls_strerror(Aret));
end;
var
priv_key: AnsiString = '';
priv_key_size: cuint;
key: Tgnutls_x509_privkey_t;
begin
LoadGnuTLS;
Assert(GnuTLSLoaded);
key:=nil;
try
TLSCheckRet(gnutls_x509_privkey_init(@key));
priv_key_size := gnutls_sec_param_to_pk_bits(GNUTLS_PK_RSA,GNUTLS_SEC_PARAM_HIGH);
SetLength(priv_key, Pred(priv_key_size));
TLSCheckRet(gnutls_x509_privkey_generate(key, GNUTLS_PK_RSA, priv_key_size, 0));
TLSCheckRet(gnutls_x509_privkey_export(key, GNUTLS_X509_FMT_PEM, @priv_key[1], @priv_key_size));
SetLength(priv_key, Pred(priv_key_size));
WriteLn(priv_key);
finally
if key<>Nil then
gnutls_x509_privkey_deinit(key);
FreeGnuTLS;
end;
end.