Bitcoin Core  0.15.99
P2P Digital Currency
Static Public Member Functions | Static Private Member Functions | Static Private Attributes | List of all members
org.bitcoin.NativeSecp256k1 Class Reference
Collaboration diagram for org.bitcoin.NativeSecp256k1:
[legend]

Static Public Member Functions

static boolean verify (byte[] data, byte[] signature, byte[] pub) throws AssertFailException
 Verifies the given secp256k1 signature in native code. More...
 
static byte[] sign (byte[] data, byte[] sec) throws AssertFailException
 libsecp256k1 Create an ECDSA signature. More...
 
static boolean secKeyVerify (byte[] seckey)
 libsecp256k1 Seckey Verify - returns 1 if valid, 0 if invalid More...
 
static byte[] computePubkey (byte[] seckey) throws AssertFailException
 libsecp256k1 Compute Pubkey - computes public key from secret key More...
 
static synchronized void cleanup ()
 libsecp256k1 Cleanup - This destroys the secp256k1 context object This should be called at the end of the program for proper cleanup of the context. More...
 
static long cloneContext ()
 
static byte[] privKeyTweakMul (byte[] privkey, byte[] tweak) throws AssertFailException
 libsecp256k1 PrivKey Tweak-Mul - Tweak privkey by multiplying to it More...
 
static byte[] privKeyTweakAdd (byte[] privkey, byte[] tweak) throws AssertFailException
 libsecp256k1 PrivKey Tweak-Add - Tweak privkey by adding to it More...
 
static byte[] pubKeyTweakAdd (byte[] pubkey, byte[] tweak) throws AssertFailException
 libsecp256k1 PubKey Tweak-Add - Tweak pubkey by adding to it More...
 
static byte[] pubKeyTweakMul (byte[] pubkey, byte[] tweak) throws AssertFailException
 libsecp256k1 PubKey Tweak-Mul - Tweak pubkey by multiplying to it More...
 
static byte[] createECDHSecret (byte[] seckey, byte[] pubkey) throws AssertFailException
 libsecp256k1 create ECDH secret - constant time ECDH calculation More...
 
static synchronized boolean randomize (byte[] seed) throws AssertFailException
 libsecp256k1 randomize - updates the context randomization More...
 

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

Definition at line 40 of file NativeSecp256k1.java.

Member Function Documentation

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.

Definition at line 187 of file NativeSecp256k1.java.

Here is the call graph for this function:

Here is the caller graph for this function:

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

Definition at line 196 of file NativeSecp256k1.java.

Here is the call graph for this function:

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

Definition at line 153 of file NativeSecp256k1.java.

Here is the call graph for this function:

Here is the caller graph for this function:

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

Definition at line 365 of file NativeSecp256k1.java.

Here is the call graph for this function:

Here is the caller graph for this function:

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

Definition at line 248 of file NativeSecp256k1.java.

Here is the call graph for this function:

Here is the caller graph for this function:

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

Definition at line 209 of file NativeSecp256k1.java.

Here is the call graph for this function:

Here is the caller graph for this function:

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

Definition at line 287 of file NativeSecp256k1.java.

Here is the call graph for this function:

Here is the caller graph for this function:

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

Definition at line 326 of file NativeSecp256k1.java.

Here is the call graph for this function:

Here is the caller graph for this function:

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

libsecp256k1 randomize - updates the context randomization

Parameters
seed32-byte random seed

Definition at line 400 of file NativeSecp256k1.java.

Here is the call graph for this function:

Here is the caller graph for this function:

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

Definition at line 123 of file NativeSecp256k1.java.

Here is the call graph for this function:

Here is the caller graph for this function:

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

Here is the caller graph for this function:

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

Here is the caller graph for this function:

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

Here is the caller graph for this function:

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

Here is the caller graph for this function:

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

Here is the caller graph for this function:

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

Here is the caller graph for this function:

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

Here is the caller graph for this function:

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

Here is the caller graph for this function:

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

Here is the caller graph for this function:

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

Here is the caller graph for this function:

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

Here is the caller graph for this function:

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

Here is the caller graph for this function:

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

Here is the caller graph for this function:

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

Definition at line 87 of file NativeSecp256k1.java.

Here is the call graph for this function:

Here is the caller graph for this function:

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

Definition at line 54 of file NativeSecp256k1.java.

Here is the call graph for this function:

Here is the caller graph for this function:

Member Data Documentation

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

Definition at line 45 of file NativeSecp256k1.java.

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

Definition at line 43 of file NativeSecp256k1.java.

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

Definition at line 42 of file NativeSecp256k1.java.

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

Definition at line 44 of file NativeSecp256k1.java.


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