public class Sign
extends java.lang.Object
Adapted from the BitcoinJ ECKey implementation.
Modifier and Type | Class and Description |
---|---|
static class |
Sign.SignatureData |
Modifier and Type | Field and Description |
---|---|
static org.bouncycastle.asn1.x9.X9ECParameters |
CURVE_PARAMS |
Constructor and Description |
---|
Sign() |
Modifier and Type | Method and Description |
---|---|
static byte[] |
getEthereumMessageHash(byte[] message) |
static int |
getRecId(Sign.SignatureData signatureData,
long chainId)
Returns recovery ID.
|
static byte[] |
getVFromRecId(int recId)
Returns the header 'v'.
|
static java.math.BigInteger |
publicFromPoint(byte[] bits)
Returns public key point from the given curve.
|
static java.math.BigInteger |
publicKeyFromPrivate(java.math.BigInteger privKey)
Returns public key from the given private key.
|
static org.bouncycastle.math.ec.ECPoint |
publicPointFromPrivate(java.math.BigInteger privKey)
Returns public key point from the given private key.
|
static java.math.BigInteger |
recoverFromSignature(int recId,
ECDSASignature sig,
byte[] message)
Given the components of a signature and a selector value, recover and return the public key
that generated the signature according to the algorithm in SEC1v2 section 4.1.6.
|
static java.math.BigInteger |
signedMessageHashToKey(byte[] messageHash,
Sign.SignatureData signatureData)
Given an arbitrary message hash and an Ethereum message signature encoded in bytes, returns
the public key that was used to sign it.
|
static java.math.BigInteger |
signedMessageToKey(byte[] message,
Sign.SignatureData signatureData)
Given an arbitrary piece of text and an Ethereum message signature encoded in bytes, returns
the public key that was used to sign it.
|
static java.math.BigInteger |
signedPrefixedMessageToKey(byte[] message,
Sign.SignatureData signatureData)
Given an arbitrary message and an Ethereum message signature encoded in bytes, returns the
public key that was used to sign it.
|
static Sign.SignatureData |
signMessage(byte[] message,
ECKeyPair keyPair) |
static Sign.SignatureData |
signMessage(byte[] message,
ECKeyPair keyPair,
boolean needToHash) |
static Sign.SignatureData |
signPrefixedMessage(byte[] message,
ECKeyPair keyPair) |
public static byte[] getEthereumMessageHash(byte[] message)
public static Sign.SignatureData signPrefixedMessage(byte[] message, ECKeyPair keyPair)
public static Sign.SignatureData signMessage(byte[] message, ECKeyPair keyPair)
public static Sign.SignatureData signMessage(byte[] message, ECKeyPair keyPair, boolean needToHash)
public static java.math.BigInteger recoverFromSignature(int recId, ECDSASignature sig, byte[] message)
The recId is an index from 0 to 3 which indicates which of the 4 possible keys is the correct one. Because the key recovery operation yields multiple potential keys, the correct key must either be stored alongside the signature, or you must be willing to try each recId in turn until you find one that outputs the key you are expecting.
If this method returns null it means recovery was not possible and recId should be iterated.
Given the above two points, a correct usage of this method is inside a for loop from 0 to 3, and if the output is null OR a key that is not the one you expect, you try again with the next recId.
recId
- Which possible key to recover.sig
- the R and S components of the signature, wrapped.message
- Hash of the data that was signed.public static java.math.BigInteger signedMessageToKey(byte[] message, Sign.SignatureData signatureData) throws java.security.SignatureException
message
- RLP encoded message.signatureData
- The message signature componentsjava.security.SignatureException
- If the public key could not be recovered or if there was a
signature format error.public static java.math.BigInteger signedPrefixedMessageToKey(byte[] message, Sign.SignatureData signatureData) throws java.security.SignatureException
message
- The message.signatureData
- The message signature componentsjava.security.SignatureException
- If the public key could not be recovered or if there was a
signature format error.public static java.math.BigInteger signedMessageHashToKey(byte[] messageHash, Sign.SignatureData signatureData) throws java.security.SignatureException
messageHash
- The message hash.signatureData
- The message signature componentsjava.security.SignatureException
- If the public key could not be recovered or if there was a
signature format error.public static int getRecId(Sign.SignatureData signatureData, long chainId)
signatureData
- The message signature componentschainId
- of the networkpublic static byte[] getVFromRecId(int recId)
recId
- The recovery id.public static java.math.BigInteger publicKeyFromPrivate(java.math.BigInteger privKey)
privKey
- the private key to derive the public key frompublic static org.bouncycastle.math.ec.ECPoint publicPointFromPrivate(java.math.BigInteger privKey)
privKey
- the private key to derive the public key frompublic static java.math.BigInteger publicFromPoint(byte[] bits)
bits
- representing the point on the curve