Bitcoin
Static Public Member Functions | Static Private Member Functions | Static Private Attributes | List of all members
org.bitcoin.NativeSecp256k1 Class Reference

Static Public Member Functions

static boolean verify (byte[] data, byte[] signature, byte[] pub) throws AssertFailException
 
static byte [] sign (byte[] data, byte[] sec) throws AssertFailException
 
static boolean secKeyVerify (byte[] seckey)
 
static byte [] computePubkey (byte[] seckey) throws AssertFailException
 
static synchronized void cleanup ()
 
static long cloneContext ()
 
static byte [] privKeyTweakMul (byte[] privkey, byte[] tweak) throws AssertFailException
 
static byte [] privKeyTweakAdd (byte[] privkey, byte[] tweak) throws AssertFailException
 
static byte [] pubKeyTweakAdd (byte[] pubkey, byte[] tweak) throws AssertFailException
 
static byte [] pubKeyTweakMul (byte[] pubkey, byte[] tweak) throws AssertFailException
 
static byte [] createECDHSecret (byte[] seckey, byte[] pubkey) throws AssertFailException
 
static synchronized boolean randomize (byte[] seed) throws AssertFailException
 

Static Private Member Functions

static native long secp256k1_ctx_clone (long context)
 
static native int secp256k1_context_randomize (ByteBuffer byteBuff, long context)
 
static native byte [][] secp256k1_privkey_tweak_add (ByteBuffer byteBuff, long context)
 
static native byte [][] secp256k1_privkey_tweak_mul (ByteBuffer byteBuff, long context)
 
static native byte [][] secp256k1_pubkey_tweak_add (ByteBuffer byteBuff, long context, int pubLen)
 
static native byte [][] secp256k1_pubkey_tweak_mul (ByteBuffer byteBuff, long context, int pubLen)
 
static native void secp256k1_destroy_context (long context)
 
static native int secp256k1_ecdsa_verify (ByteBuffer byteBuff, long context, int sigLen, int pubLen)
 
static native byte [][] secp256k1_ecdsa_sign (ByteBuffer byteBuff, long context)
 
static native int secp256k1_ec_seckey_verify (ByteBuffer byteBuff, long context)
 
static native byte [][] secp256k1_ec_pubkey_create (ByteBuffer byteBuff, long context)
 
static native byte [][] secp256k1_ec_pubkey_parse (ByteBuffer byteBuff, long context, int inputLen)
 
static native byte [][] secp256k1_ecdh (ByteBuffer byteBuff, long context, int inputLen)
 

Static Private Attributes

static final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock()
 
static final Lock r = rwl.readLock()
 
static final Lock w = rwl.writeLock()
 
static ThreadLocal< ByteBuffer > nativeECDSABuffer = new ThreadLocal<ByteBuffer>()
 

Detailed Description

This class holds native methods to handle ECDSA verification.

You can find an example library that can be used for this at https://github.com/bitcoin/secp256k1

To build secp256k1 for use with bitcoinj, run ./configure --enable-jni --enable-experimental --enable-module-ecdh and make then copy .libs/libsecp256k1.so to your system library path or point the JVM to the folder containing it with -Djava.library.path

Member Function Documentation

◆ cleanup()

static synchronized void org.bitcoin.NativeSecp256k1.cleanup ( )
inlinestatic

libsecp256k1 Cleanup - This destroys the secp256k1 context object This should be called at the end of the program for proper cleanup of the context.

◆ cloneContext()

static long org.bitcoin.NativeSecp256k1.cloneContext ( )
inlinestatic

◆ computePubkey()

static byte [] org.bitcoin.NativeSecp256k1.computePubkey ( byte []  seckey) throws AssertFailException
inlinestatic

libsecp256k1 Compute Pubkey - computes public key from secret key

Parameters
seckeyECDSA Secret key, 32 bytes

Return values

Parameters
pubkeyECDSA Public key, 33 or 65 bytes

◆ createECDHSecret()

static byte [] org.bitcoin.NativeSecp256k1.createECDHSecret ( byte []  seckey,
byte []  pubkey 
) throws AssertFailException
inlinestatic

libsecp256k1 create ECDH secret - constant time ECDH calculation

Parameters
seckeybyte array of secret key used in exponentiaion
pubkeybyte array of public key used in exponentiaion

◆ privKeyTweakAdd()

static byte [] org.bitcoin.NativeSecp256k1.privKeyTweakAdd ( byte []  privkey,
byte []  tweak 
) throws AssertFailException
inlinestatic

libsecp256k1 PrivKey Tweak-Add - Tweak privkey by adding to it

Parameters
tweaksome bytes to tweak with
seckey32-byte seckey

◆ privKeyTweakMul()

static byte [] org.bitcoin.NativeSecp256k1.privKeyTweakMul ( byte []  privkey,
byte []  tweak 
) throws AssertFailException
inlinestatic

libsecp256k1 PrivKey Tweak-Mul - Tweak privkey by multiplying to it

Parameters
tweaksome bytes to tweak with
seckey32-byte seckey

◆ pubKeyTweakAdd()

static byte [] org.bitcoin.NativeSecp256k1.pubKeyTweakAdd ( byte []  pubkey,
byte []  tweak 
) throws AssertFailException
inlinestatic

libsecp256k1 PubKey Tweak-Add - Tweak pubkey by adding to it

Parameters
tweaksome bytes to tweak with
pubkey32-byte seckey

◆ pubKeyTweakMul()

static byte [] org.bitcoin.NativeSecp256k1.pubKeyTweakMul ( byte []  pubkey,
byte []  tweak 
) throws AssertFailException
inlinestatic

libsecp256k1 PubKey Tweak-Mul - Tweak pubkey by multiplying to it

Parameters
tweaksome bytes to tweak with
pubkey32-byte seckey

◆ randomize()

static synchronized boolean org.bitcoin.NativeSecp256k1.randomize ( byte []  seed) throws AssertFailException
inlinestatic

libsecp256k1 randomize - updates the context randomization

Parameters
seed32-byte random seed

◆ secKeyVerify()

static boolean org.bitcoin.NativeSecp256k1.secKeyVerify ( byte []  seckey)
inlinestatic

libsecp256k1 Seckey Verify - returns 1 if valid, 0 if invalid

Parameters
seckeyECDSA Secret key, 32 bytes

◆ secp256k1_context_randomize()

static native int org.bitcoin.NativeSecp256k1.secp256k1_context_randomize ( ByteBuffer  byteBuff,
long  context 
)
staticprivate

◆ secp256k1_ctx_clone()

static native long org.bitcoin.NativeSecp256k1.secp256k1_ctx_clone ( long  context)
staticprivate

◆ secp256k1_destroy_context()

static native void org.bitcoin.NativeSecp256k1.secp256k1_destroy_context ( long  context)
staticprivate

◆ secp256k1_ec_pubkey_create()

static native byte [][] org.bitcoin.NativeSecp256k1.secp256k1_ec_pubkey_create ( ByteBuffer  byteBuff,
long  context 
)
staticprivate

◆ secp256k1_ec_pubkey_parse()

static native byte [][] org.bitcoin.NativeSecp256k1.secp256k1_ec_pubkey_parse ( ByteBuffer  byteBuff,
long  context,
int  inputLen 
)
staticprivate

◆ secp256k1_ec_seckey_verify()

static native int org.bitcoin.NativeSecp256k1.secp256k1_ec_seckey_verify ( ByteBuffer  byteBuff,
long  context 
)
staticprivate

◆ secp256k1_ecdh()

static native byte [][] org.bitcoin.NativeSecp256k1.secp256k1_ecdh ( ByteBuffer  byteBuff,
long  context,
int  inputLen 
)
staticprivate

◆ secp256k1_ecdsa_sign()

static native byte [][] org.bitcoin.NativeSecp256k1.secp256k1_ecdsa_sign ( ByteBuffer  byteBuff,
long  context 
)
staticprivate

◆ secp256k1_ecdsa_verify()

static native int org.bitcoin.NativeSecp256k1.secp256k1_ecdsa_verify ( ByteBuffer  byteBuff,
long  context,
int  sigLen,
int  pubLen 
)
staticprivate

◆ secp256k1_privkey_tweak_add()

static native byte [][] org.bitcoin.NativeSecp256k1.secp256k1_privkey_tweak_add ( ByteBuffer  byteBuff,
long  context 
)
staticprivate

◆ secp256k1_privkey_tweak_mul()

static native byte [][] org.bitcoin.NativeSecp256k1.secp256k1_privkey_tweak_mul ( ByteBuffer  byteBuff,
long  context 
)
staticprivate

◆ secp256k1_pubkey_tweak_add()

static native byte [][] org.bitcoin.NativeSecp256k1.secp256k1_pubkey_tweak_add ( ByteBuffer  byteBuff,
long  context,
int  pubLen 
)
staticprivate

◆ secp256k1_pubkey_tweak_mul()

static native byte [][] org.bitcoin.NativeSecp256k1.secp256k1_pubkey_tweak_mul ( ByteBuffer  byteBuff,
long  context,
int  pubLen 
)
staticprivate

◆ sign()

static byte [] org.bitcoin.NativeSecp256k1.sign ( byte []  data,
byte []  sec 
) throws AssertFailException
inlinestatic

libsecp256k1 Create an ECDSA signature.

Parameters
dataMessage hash, 32 bytes
keySecret key, 32 bytes

Return values

Parameters
sigbyte array of signature

◆ verify()

static boolean org.bitcoin.NativeSecp256k1.verify ( byte []  data,
byte []  signature,
byte []  pub 
) throws AssertFailException
inlinestatic

Verifies the given secp256k1 signature in native code. Calling when enabled == false is undefined (probably library not loaded)

Parameters
dataThe data which was signed, must be exactly 32 bytes
signatureThe signature
pubThe public key which did the signing

Member Data Documentation

◆ nativeECDSABuffer

ThreadLocal<ByteBuffer> org.bitcoin.NativeSecp256k1.nativeECDSABuffer = new ThreadLocal<ByteBuffer>()
staticprivate

◆ r

final Lock org.bitcoin.NativeSecp256k1.r = rwl.readLock()
staticprivate

◆ rwl

final ReentrantReadWriteLock org.bitcoin.NativeSecp256k1.rwl = new ReentrantReadWriteLock()
staticprivate

◆ w

final Lock org.bitcoin.NativeSecp256k1.w = rwl.writeLock()
staticprivate

The documentation for this class was generated from the following file: