本文整理汇总了Java中org.ethereum.crypto.ECKey.ECDSASignature方法的典型用法代码示例。如果您正苦于以下问题:Java ECKey.ECDSASignature方法的具体用法?Java ECKey.ECDSASignature怎么用?Java ECKey.ECDSASignature使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类org.ethereum.crypto.ECKey
的用法示例。
在下文中一共展示了ECKey.ECDSASignature方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: eth_sign
import org.ethereum.crypto.ECKey; //导入方法依赖的package包/类
public String eth_sign(String addr,String data) throws Exception {
String s = null;
try {
String ha = JSonHexToHex(addr);
Account account = getAccount(ha);
if (account==null)
throw new Exception("Inexistent account");
// Todo: is not clear from the spec what hash function must be used to sign
byte[] masgHash= HashUtil.sha3(TypeConverter.StringHexToByteArray(data));
ECKey.ECDSASignature signature = account.getEcKey().sign(masgHash);
// Todo: is not clear if result should be RlpEncoded or serialized by other means
byte[] rlpSig = RLP.encode(signature);
return s = TypeConverter.toJsonHex(rlpSig);
} finally {
if (logger.isDebugEnabled()) logger.debug("eth_sign(" + addr + ", " + data + "): " + s);
}
}
示例2: decodeSignature
import org.ethereum.crypto.ECKey; //导入方法依赖的package包/类
private ECKey.ECDSASignature decodeSignature() {
if (signature == null) {
return null;
}
byte[] r = new byte[32];
byte[] s = new byte[32];
byte v = signature[64];
if (v == 1) v = 28;
if (v == 0) v = 27;
System.arraycopy(signature, 0, r, 0, 32);
System.arraycopy(signature, 32, s, 0, 32);
return ECKey.ECDSASignature.fromComponents(r, s, v);
}
示例3: recover
import org.ethereum.crypto.ECKey; //导入方法依赖的package包/类
private ECKey recover() {
ECKey.ECDSASignature signature = decodeSignature();
if (signature == null) return null;
byte[] msgHash = hash();
ECKey outKey = null;
try {
outKey = ECKey.signatureToKey(msgHash, signature);
} catch (SignatureException e) {
logger.warn("Exception recovering signature: ", e);
throw new RuntimeException(e);
}
return outKey;
}
示例4: sign
import org.ethereum.crypto.ECKey; //导入方法依赖的package包/类
private void sign() {
flags |= SIGNATURE_FLAG;
byte[] forSig = hash();
ECKey.ECDSASignature signature = from.sign(forSig);
byte v;
if (signature.v == 27) v = 0;
else if (signature.v == 28) v = 1;
else throw new RuntimeException("Invalid signature: " + signature);
this.signature =
merge(BigIntegers.asUnsignedByteArray(32, signature.r),
BigIntegers.asUnsignedByteArray(32, signature.s), new byte[]{v});
}
示例5: sign
import org.ethereum.crypto.ECKey; //导入方法依赖的package包/类
private String sign(String data, ECKey ecKey) {
byte[] dataHash = TypeConverter.stringHexToByteArray(data);
ECKey.ECDSASignature signature = ecKey.sign(dataHash);
String signatureAsString = signature.r.toString() + signature.s.toString() + signature.v;
return TypeConverter.toJsonHex(signatureAsString);
}
示例6: fallbackSign
import org.ethereum.crypto.ECKey; //导入方法依赖的package包/类
private byte[] fallbackSign(byte[] hash, ECKey privKey) {
ECKey.ECDSASignature signature = privKey.sign(hash);
byte vdata = signature.v;
byte[] rdata = signature.r.toByteArray();
byte[] sdata = signature.s.toByteArray();
byte[] vencoded = RLP.encodeByte(vdata);
byte[] rencoded = RLP.encodeElement(rdata);
byte[] sencoded = RLP.encodeElement(sdata);
return RLP.encodeList(vencoded, rencoded, sencoded);
}
示例7: validFallbackBlockSignature
import org.ethereum.crypto.ECKey; //导入方法依赖的package包/类
public static boolean validFallbackBlockSignature(Constants constants, BlockHeader header, byte[] signatureBytesRLP) {
if (header.getBitcoinMergedMiningCoinbaseTransaction() != null) {
return false;
}
if (header.getBitcoinMergedMiningMerkleProof() != null) {
return false;
}
byte[] fallbackMiningPubKeyBytes;
boolean isEvenBlockNumber = header.getNumber() % 2 == 0;
if (isEvenBlockNumber) {
fallbackMiningPubKeyBytes = constants.getFallbackMiningPubKey0();
} else {
fallbackMiningPubKeyBytes = constants.getFallbackMiningPubKey1();
}
ECKey fallbackMiningPubKey = ECKey.fromPublicOnly(fallbackMiningPubKeyBytes);
List<RLPElement> signatureRLP = (RLPList) RLP.decode2(signatureBytesRLP).get(0);
if (signatureRLP.size() != 3) {
return false;
}
byte[] v = signatureRLP.get(0).getRLPData();
byte[] r = signatureRLP.get(1).getRLPData();
byte[] s = signatureRLP.get(2).getRLPData();
ECKey.ECDSASignature signature = ECKey.ECDSASignature.fromComponents(r, s, v[0]);
return fallbackMiningPubKey.verify(header.getHashForMergedMining(), signature);
}
示例8: encode
import org.ethereum.crypto.ECKey; //导入方法依赖的package包/类
public PeerDiscoveryMessage encode(byte[] type, byte[] data, ECKey privKey) {
/* [1] Calc sha3 - prepare for sig */
byte[] payload = new byte[type.length + data.length];
payload[0] = type[0];
System.arraycopy(data, 0, payload, 1, data.length);
byte[] forSig = sha3(payload);
/* [2] Crate signature*/
ECKey.ECDSASignature ecdsaSignature = privKey.sign(forSig);
ecdsaSignature.v -= 27;
byte[] sigBytes =
merge(BigIntegers.asUnsignedByteArray(32, ecdsaSignature.r),
BigIntegers.asUnsignedByteArray(32, ecdsaSignature.s), new byte[]{ecdsaSignature.v});
// [3] calculate MDC
byte[] forSha = merge(sigBytes, type, data);
// wrap all the data in to the packet
this.mdc = sha3(forSha);
this.signature = sigBytes;
this.type = type;
this.data = data;
this.wire = merge(this.mdc, this.signature, this.type, this.data);
return this;
}
示例9: execute
import org.ethereum.crypto.ECKey; //导入方法依赖的package包/类
@Override
public byte[] execute(byte[] data) {
byte[] h = new byte[32];
byte[] v = new byte[32];
byte[] r = new byte[32];
byte[] s = new byte[32];
DataWord out = null;
try {
System.arraycopy(data, 0, h, 0, 32);
System.arraycopy(data, 32, v, 0, 32);
System.arraycopy(data, 64, r, 0, 32);
int sLength = data.length < 128 ? data.length - 96 : 32;
System.arraycopy(data, 96, s, 0, sLength);
if (isValid(r, s, v)) {
ECKey.ECDSASignature signature = ECKey.ECDSASignature.fromComponents(r, s, v[31]);
ECKey key = ECKey.signatureToKey(h, signature.toBase64());
out = new DataWord(key.getAddress());
}
} catch (Exception any) {
}
if (out == null) {
return new byte[0];
} else {
return out.getData();
}
}
示例10: fallbackSign
import org.ethereum.crypto.ECKey; //导入方法依赖的package包/类
byte[] fallbackSign(byte[] hash, ECKey privKey) {
ECKey.ECDSASignature signature = privKey.sign(hash);
byte vdata = signature.v;
byte[] rdata = signature.r.toByteArray();
byte[] sdata = signature.s.toByteArray();
byte[] vencoded = RLP.encodeByte(vdata);
byte[] rencoded = RLP.encodeElement(rdata);
byte[] sencoded = RLP.encodeElement(sdata);
return RLP.encodeList(vencoded, rencoded, sencoded);
}
示例11: execute
import org.ethereum.crypto.ECKey; //导入方法依赖的package包/类
@Override
public Pair<Boolean, byte[]> execute(byte[] data) {
byte[] h = new byte[32];
byte[] v = new byte[32];
byte[] r = new byte[32];
byte[] s = new byte[32];
DataWord out = null;
try {
System.arraycopy(data, 0, h, 0, 32);
System.arraycopy(data, 32, v, 0, 32);
System.arraycopy(data, 64, r, 0, 32);
int sLength = data.length < 128 ? data.length - 96 : 32;
System.arraycopy(data, 96, s, 0, sLength);
ECKey.ECDSASignature signature = ECKey.ECDSASignature.fromComponents(r, s, v[31]);
if (validateV(v) && signature.validateComponents()) {
out = new DataWord(ECKey.signatureToAddress(h, signature));
}
} catch (Throwable any) {
}
if (out == null) {
return Pair.of(true, EMPTY_BYTE_ARRAY);
} else {
return Pair.of(true, out.getData());
}
}
示例12: encode
import org.ethereum.crypto.ECKey; //导入方法依赖的package包/类
public Message encode(byte[] type, byte[] data, ECKey privKey) {
/* [1] Calc keccak - prepare for sig */
byte[] payload = new byte[type.length + data.length];
payload[0] = type[0];
System.arraycopy(data, 0, payload, 1, data.length);
byte[] forSig = sha3(payload);
/* [2] Crate signature*/
ECKey.ECDSASignature signature = privKey.sign(forSig);
signature.v -= 27;
byte[] sigBytes =
merge(BigIntegers.asUnsignedByteArray(32, signature.r),
BigIntegers.asUnsignedByteArray(32, signature.s), new byte[]{signature.v});
// [3] calculate MDC
byte[] forSha = merge(sigBytes, type, data);
byte[] mdc = sha3(forSha);
// wrap all the data in to the packet
this.mdc = mdc;
this.signature = sigBytes;
this.type = type;
this.data = data;
this.wire = merge(this.mdc, this.signature, this.type, this.data);
return this;
}