Sample code for 30+ languages & platforms
Delphi DLL

secp256k1 Key Generation and Keccak-256

See more ECC Examples

Starting in v11.0.0, Chilkat supports both secp256k1 key generation and Keccak-256 directly. These algorithms are typically used for Bitcoin and Ethereum.

Chilkat Delphi DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, BinData, StringBuilder, PrivateKey, Prng, Ecc;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
fortuna: HCkPrng;
entropy: PWideChar;
ecc: HCkEcc;
privKey: HCkPrivateKey;
sb: HCkStringBuilder;
bd: HCkBinData;

begin
success := False;

// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

// Create a Fortuna PRNG and seed it with system entropy.
// This will be our source of random data for generating the ECDSA private key.
fortuna := CkPrng_Create();
entropy := CkPrng__getEntropy(fortuna,32,'base64');
success := CkPrng_AddEntropy(fortuna,entropy,'base64');

ecc := CkEcc_Create();

// Generate a random ECDSA private key on the secp256k1 curve.
privKey := CkPrivateKey_Create();
success := CkEcc_GenKey(ecc,'secp256k1',fortuna,privKey);
if (success = False) then
  begin
    Memo1.Lines.Add(CkEcc__lastErrorText(ecc));
    Exit;
  end;

Memo1.Lines.Add('Successfully generated a sec256k1 key.');

// Show how to compute the Keccak-256 hash in a few ways.
sb := CkStringBuilder_Create();
CkStringBuilder_Append(sb,'hello');

Memo1.Lines.Add('keccak-256: ' + CkStringBuilder__getHash(sb,'keccak-256','hex_lower','utf-8'));

// Output:
// keccak-256: 1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8

// To keccak-256 hash binary data
bd := CkBinData_Create();
CkBinData_AppendEncoded(bd,'00010203040506','hex');

Memo1.Lines.Add('keccak-256: ' + CkBinData__getHash(bd,'keccak-256','hex_lower'));

// Output:
// keccak-256: 801560412425120fa609be232d6fa71c7f64f42aee7977267687dcc0a2f5aa63

CkPrng_Dispose(fortuna);
CkEcc_Dispose(ecc);
CkPrivateKey_Dispose(privKey);
CkStringBuilder_Dispose(sb);
CkBinData_Dispose(bd);

end;