Skip to content

Commit

Permalink
Working e2e tests
Browse files Browse the repository at this point in the history
  • Loading branch information
fireduck64 committed Nov 4, 2020
1 parent 0c07db7 commit 5da7918
Show file tree
Hide file tree
Showing 6 changed files with 80 additions and 31 deletions.
4 changes: 4 additions & 0 deletions BUILD
Expand Up @@ -51,6 +51,8 @@ java_library(
"@maven//:com_fasterxml_jackson_core_jackson_databind",
"@maven//:com_fasterxml_jackson_core_jackson_annotations",
"@maven//:junit_junit",
"@maven//:org_bouncycastle_bcpkix_jdk15on",
"@maven//:org_bouncycastle_bcprov_jdk15on",
],
)

Expand All @@ -74,6 +76,8 @@ java_test(
"@com_google_protobuf//:protobuf_java",
"@snowblossom//lib",
"@snowblossom//protolib:protogrpc",
"@maven//:org_bouncycastle_bcpkix_jdk15on",
"@maven//:org_bouncycastle_bcprov_jdk15on",
],
)

2 changes: 1 addition & 1 deletion cli/test.json
Expand Up @@ -4,7 +4,7 @@
"blockchain": "snowblossom",
"network": "testnet"
},
"data_directory": "/data/snowblossom/cli-testnet_7",
"data_directory": "/data/snowblossom/cli-testnet_8",
"http_timeout": 300,
"max_retries": 5,
"retry_elapsed_time": 0,
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/io/swagger/controllers/Construction.java
Expand Up @@ -71,7 +71,7 @@ public ResponseContext constructionCombine(RequestContext request , JsonNode bod

for(Signature sig : req.getSignatures())
{
ByteString sig_bytes = RoseUtil.checkSignature(sig);
ByteString sig_bytes = RoseUtil.checkSignature(sig, s_tx.getTxHash());
AddressSpec spec = RoseUtil.getSpecForPublicKey(sig.getPublicKey());

int claim_idx = 0;
Expand Down Expand Up @@ -269,8 +269,8 @@ else if (op.getType().equals("OUTPUT"))
AddressSpecHash hash = RoseUtil.getSpecHashForPublicKey(pk);
SigningPayload load = new SigningPayload();

//ByteString hash_data = RoseUtil.hashSha256( tx.getTxHash() );
ByteString hash_data = tx.getTxHash();
ByteString hash_data = RoseUtil.hashSha1( tx.getTxHash() );
//ByteString hash_data = tx.getTxHash();

System.out.println("LORK payload: " + HexUtil.getHexString( hash_data ) );

Expand Down
41 changes: 16 additions & 25 deletions src/main/java/rosesnow/RoseUtil.java
Expand Up @@ -124,7 +124,6 @@ public static AddressSpec getSpecForPublicKey(PublicKey pk)
}
String hex_str = pk.getHexBytes();

System.out.println("LORK pubkey " + hex_str);
ByteString hex = HexUtil.hexStringToBytes(hex_str);

return AddressUtil.getSimpleSpecForKey(hex, SignatureUtil.SIG_TYPE_ECDSA_COMPRESSED);
Expand All @@ -136,33 +135,16 @@ public static AddressSpecHash getSpecHashForPublicKey(PublicKey pk)
return AddressUtil.getHashForSpec(getSpecForPublicKey(pk));
}

public static ByteString checkSignature(Signature sig)
public static ByteString checkSignature(Signature sig, ByteString tx_hash)
throws ValidationException
{
AddressSpec spec = getSpecForPublicKey(sig.getPublicKey());
SigSpec sig_spec = spec.getSigSpecs(0);

ByteString smash_sig = convertSig( HexUtil.hexStringToBytes( sig.getHexBytes() ) );
ByteString data = HexUtil.hexStringToBytes(sig.getSigningPayload().getHexBytes());
//ByteString data = HexUtil.hexStringToBytes(sig.getSigningPayload().getHexBytes());

// TODO - remove
System.out.println("LORK Signature data: " + sig.getHexBytes());
System.out.println("LORK Signature data smash: " + HexUtil.getHexString(smash_sig));
System.out.println("LORK Signed data: " + sig.getSigningPayload().getHexBytes());

try
{
java.security.MessageDigest md = java.security.MessageDigest.getInstance("SHA-256");

ByteString hashed_data = hashSha256(data);

System.out.println("LORK reg " + SignatureUtil.checkSignature(sig_spec, data, smash_sig));
System.out.println("LORK sm " + SignatureUtil.checkSignature(sig_spec, hashed_data, smash_sig));
System.out.println("LORK hex " + SignatureUtil.checkSignature(sig_spec, ByteString.copyFrom( sig.getSigningPayload().getHexBytes().getBytes()), smash_sig));
}
catch(Exception e){throw new ValidationException(e);}

if(!SignatureUtil.checkSignature(sig_spec, data, smash_sig))
if(!SignatureUtil.checkSignature(sig_spec, tx_hash, smash_sig))
{
throw new ValidationException("Signature check failed");
}
Expand All @@ -179,10 +161,22 @@ public static ByteString hashSha256(ByteString in)

}
catch(Exception e){throw new RuntimeException(e);}
}
public static ByteString hashSha1(ByteString in)
{
try
{
java.security.MessageDigest md = java.security.MessageDigest.getInstance("SHA-1");
return ByteString.copyFrom(md.digest(in.toByteArray()));


}
catch(Exception e){throw new RuntimeException(e);}
}


/**
* Converts signature from raw R|S style (64 bytes) to DER encoded (72 to 70 bytes or so)
*/
public static ByteString convertSig(ByteString raw_sig)
{
ByteString r = raw_sig.substring(0,32);
Expand All @@ -205,9 +199,6 @@ public static ByteString convertSig(ByteString raw_sig)
b[0]=(byte)s.size(); der_sig = der_sig.concat(ByteString.copyFrom(b));
der_sig = der_sig.concat(s);

System.out.println("LORK r " + HexUtil.getHexString(r));
System.out.println("LORK s " + HexUtil.getHexString(s));

return der_sig;
}

Expand Down
8 changes: 6 additions & 2 deletions test/integration/ConstructionE2E.java
Expand Up @@ -155,9 +155,13 @@ public ConstructionE2E()

ByteString sign_data = HexUtil.hexStringToBytes( payload.getHexBytes() );

ByteString s = SignatureUtil.sign(wkp, sign_data);
java.security.PrivateKey priv_key = KeyUtil.decodePrivateKey(wkp.getPrivateKey(), "ECDSA");

s = RoseUtil.convertSigDerToRaw(s);
java.security.Signature sig_engine = java.security.Signature.getInstance("NONEwithECDSA","BC");
sig_engine.initSign(priv_key);
sig_engine.update( sign_data.toByteArray() );

ByteString s = RoseUtil.convertSigDerToRaw(ByteString.copyFrom(sig_engine.sign()));

sig.setHexBytes( HexUtil.getHexString(s));

Expand Down
50 changes: 50 additions & 0 deletions test/unit/TestSigCoding.java
Expand Up @@ -7,10 +7,17 @@
import snowblossom.lib.KeyUtil;
import snowblossom.lib.SignatureUtil;
import snowblossom.proto.WalletKeyPair;
import snowblossom.proto.AddressSpec;
import snowblossom.proto.SigSpec;
import snowblossom.lib.Globals;
import snowblossom.lib.AddressUtil;
import snowblossom.lib.HexUtil;
import org.snowblossom.rosesnow.RoseUtil;

import org.bouncycastle.asn1.DERObjectIdentifier;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.asn1.x509.DigestInfo;

public class TestSigCoding
{

Expand Down Expand Up @@ -49,4 +56,47 @@ public void testConvert()

}


/**
* Sign something with ECDSA/NONE and verify with ECDSA/SHA1
*/
@Test
public void testSigNoneSha1() throws Exception
{
WalletKeyPair wkp = KeyUtil.generateWalletStandardECKey();

AddressSpec addr_spec = AddressUtil.getSimpleSpecForKey( wkp );
SigSpec sig_spec = addr_spec.getSigSpecs(0);

java.security.PrivateKey priv_key = KeyUtil.decodePrivateKey(wkp.getPrivateKey(), "ECDSA");
java.security.PublicKey pub_key = SignatureUtil.decodePublicKey(sig_spec);

ByteString tx_hash = null;
{
byte[] b = new byte[32];
Random rnd = new Random();
rnd.nextBytes(b);
tx_hash = ByteString.copyFrom(b);
}

java.security.Signature sig_engine = java.security.Signature.getInstance("NONEwithECDSA","BC");
sig_engine.initSign(priv_key);
ByteString sha1_tx_hash = RoseUtil.hashSha1(tx_hash);

/*
DigestInfo di = new DigestInfo(new AlgorithmIdentifier(new DERObjectIdentifier("1.3.14.3.2.26")), sha1_tx_hash.toByteArray());
byte[] plain_sig = di.getEncoded("DER");
//sig_engine.update( plain_sig );*/
sig_engine.update( sha1_tx_hash.toByteArray() );

ByteString signature = ByteString.copyFrom(sig_engine.sign());

Assert.assertTrue(SignatureUtil.checkSignature(sig_spec, tx_hash, signature));



}


}

0 comments on commit 5da7918

Please sign in to comment.