Browse Source

renew RSA junitTests to save compiling time

tags/1.0.0
zhanglin33 6 years ago
parent
commit
fa92f40227
9 changed files with 129 additions and 594 deletions
  1. +9
    -38
      source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/paillier/PaillierUtilsTest.java
  2. +49
    -0
      source/crypto/crypto-classic/src/main/java/com/jd/blockchain/crypto/utils/classic/SSHKeyParser.java
  3. +3
    -252
      source/crypto/crypto-classic/src/test/java/test/com/jd/blockchain/crypto/service/classic/RSACryptoFunctionTest.java
  4. +11
    -55
      source/crypto/crypto-classic/src/test/java/test/com/jd/blockchain/crypto/utils/classic/RSAUtilsTest.java
  5. +35
    -16
      source/crypto/crypto-classic/src/test/java/test/com/jd/blockchain/crypto/utils/classic/SSHKeyUtilsTest.java
  6. +1
    -1
      source/crypto/crypto-pki/src/main/java/com/jd/blockchain/crypto/utils/CertParser.java
  7. +11
    -154
      source/crypto/crypto-pki/src/test/java/com/jd/blockchain/crypto/service/pki/SHA1WITHRSA2048SignatureFunctionTest.java
  8. +9
    -77
      source/crypto/crypto-pki/src/test/java/com/jd/blockchain/crypto/service/pki/SHA1WITHRSA4096SignatureFunctionTest.java
  9. +1
    -1
      source/crypto/crypto-pki/src/test/java/com/jd/blockchain/crypto/utils/CSRBuilderTest.java

+ 9
- 38
source/crypto/crypto-adv/src/test/java/test/com/jd/blockchain/crypto/paillier/PaillierUtilsTest.java View File

@@ -19,7 +19,7 @@ import static org.junit.Assert.assertEquals;
*/ */
public class PaillierUtilsTest { public class PaillierUtilsTest {
@Test @Test
public void generateKeyPairTest() {
public void test() {


AsymmetricCipherKeyPair keyPair = PaillierUtils.generateKeyPair(); AsymmetricCipherKeyPair keyPair = PaillierUtils.generateKeyPair();
PaillierPublicKeyParameters pubKeyParams = (PaillierPublicKeyParameters) keyPair.getPublic(); PaillierPublicKeyParameters pubKeyParams = (PaillierPublicKeyParameters) keyPair.getPublic();
@@ -58,13 +58,6 @@ public class PaillierUtilsTest {
assertEquals(pInverseConverted, pInverse); assertEquals(pInverseConverted, pInverse);
assertEquals(muPConverted, muP); assertEquals(muPConverted, muP);
assertEquals(muQConverted, muQ); assertEquals(muQConverted, muQ);
}

@Test
public void encryptTest() {

AsymmetricCipherKeyPair keyPair = PaillierUtils.generateKeyPair();
PaillierPublicKeyParameters pubKeyParams = (PaillierPublicKeyParameters) keyPair.getPublic();


byte[] pubKeyBytes = PaillierUtils.pubKey2Bytes(pubKeyParams); byte[] pubKeyBytes = PaillierUtils.pubKey2Bytes(pubKeyParams);


@@ -77,23 +70,15 @@ public class PaillierUtilsTest {


assertEquals(512,ciphertextFromParams.length); assertEquals(512,ciphertextFromParams.length);
assertEquals(512,ciphertextFromBytes.length); assertEquals(512,ciphertextFromBytes.length);
}


@Test
public void decryptTest(){


AsymmetricCipherKeyPair keyPair = PaillierUtils.generateKeyPair();
PaillierPublicKeyParameters pubKeyParams = (PaillierPublicKeyParameters) keyPair.getPublic();
PaillierPrivateKeyParameters privKeyParams = (PaillierPrivateKeyParameters) keyPair.getPrivate();

byte[] pubKeyBytes = PaillierUtils.pubKey2Bytes(pubKeyParams);
byte[] privKeyBytes = PaillierUtils.privKey2Bytes(privKeyParams); byte[] privKeyBytes = PaillierUtils.privKey2Bytes(privKeyParams);


int input = 666; int input = 666;
byte[] data = intToByteArray(input);
byte[] inputBytes = intToByteArray(input);


byte[] ciphertextFromParams = PaillierUtils.encrypt(data,pubKeyParams);
byte[] ciphertextFromBytes = PaillierUtils.encrypt(data,pubKeyBytes);
ciphertextFromParams = PaillierUtils.encrypt(inputBytes,pubKeyParams);
ciphertextFromBytes = PaillierUtils.encrypt(inputBytes,pubKeyBytes);


byte[] plaintextFromParams = PaillierUtils.decrypt(ciphertextFromBytes,privKeyParams); byte[] plaintextFromParams = PaillierUtils.decrypt(ciphertextFromBytes,privKeyParams);
byte[] plaintextFromBytes = PaillierUtils.decrypt(ciphertextFromParams,privKeyBytes); byte[] plaintextFromBytes = PaillierUtils.decrypt(ciphertextFromParams,privKeyBytes);
@@ -103,16 +88,9 @@ public class PaillierUtilsTest {


assertEquals(input,outputFromParams); assertEquals(input,outputFromParams);
assertEquals(input,outputFromBytes); assertEquals(input,outputFromBytes);
}


@Test
public void addTest() {


AsymmetricCipherKeyPair keyPair = PaillierUtils.generateKeyPair();
PaillierPublicKeyParameters pubKeyParams = (PaillierPublicKeyParameters) keyPair.getPublic();
PaillierPrivateKeyParameters privKeyParams = (PaillierPrivateKeyParameters) keyPair.getPrivate();

byte[] pubKeyBytes = PaillierUtils.pubKey2Bytes(pubKeyParams);
pubKeyBytes = PaillierUtils.pubKey2Bytes(pubKeyParams);


int input1 = 600; int input1 = 600;
int input2 = 60; int input2 = 60;
@@ -139,26 +117,19 @@ public class PaillierUtilsTest {


output = byteArrayToInt(plaintext); output = byteArrayToInt(plaintext);
assertEquals(sum,output); assertEquals(sum,output);
}


@Test
public void scalarMultiplyTest() {


AsymmetricCipherKeyPair keyPair = PaillierUtils.generateKeyPair();
PaillierPublicKeyParameters pubKeyParams = (PaillierPublicKeyParameters) keyPair.getPublic();
PaillierPrivateKeyParameters privKeyParams = (PaillierPrivateKeyParameters) keyPair.getPrivate();

byte[] pubKeyBytes = PaillierUtils.pubKey2Bytes(pubKeyParams);
pubKeyBytes = PaillierUtils.pubKey2Bytes(pubKeyParams);


int input = 111;
input = 111;
int scalar = 6; int scalar = 6;
byte[] data = intToByteArray(input);
data = intToByteArray(input);


byte[] ciphertext = PaillierUtils.encrypt(data,pubKeyParams); byte[] ciphertext = PaillierUtils.encrypt(data,pubKeyParams);
byte[] ciphertextPowered = PaillierUtils.scalarMultiply(pubKeyBytes,ciphertext,scalar); byte[] ciphertextPowered = PaillierUtils.scalarMultiply(pubKeyBytes,ciphertext,scalar);
byte[] plaintextMultiplied = PaillierUtils.decrypt(ciphertextPowered,privKeyParams); byte[] plaintextMultiplied = PaillierUtils.decrypt(ciphertextPowered,privKeyParams);


int output = byteArrayToInt(plaintextMultiplied);
output = byteArrayToInt(plaintextMultiplied);
assertEquals(input * scalar, output); assertEquals(input * scalar, output);
} }




+ 49
- 0
source/crypto/crypto-classic/src/main/java/com/jd/blockchain/crypto/utils/classic/SSHKeyParser.java View File

@@ -0,0 +1,49 @@
package com.jd.blockchain.crypto.utils.classic;

import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
import org.bouncycastle.crypto.util.OpenSSHPublicKeyUtil;
import org.bouncycastle.jce.spec.OpenSSHPublicKeySpec;
import org.bouncycastle.util.encoders.Base64;

/**
* @author zhanglin33
* @title: SSHKeyParser
* @description: a parser for parsing asymmetric keys in Base64 format
* @date 2019-05-17, 17:52
*/
public class SSHKeyParser {

private String pubKeyFormat;
private String pubKeyType;

public AsymmetricKeyParameter pubKeyParse(String pubKeyStr) {

byte[] pubKeyBytes;

if (pubKeyStr.startsWith("ssh") || pubKeyStr.startsWith("ecdsa")) {
String[] algoAndKeyAndLocal = pubKeyStr.split(" ");
pubKeyBytes = Base64.decode(algoAndKeyAndLocal[1]);
} else {
pubKeyBytes = Base64.decode(pubKeyStr);
}

OpenSSHPublicKeySpec pubKeySpec = new OpenSSHPublicKeySpec(pubKeyBytes);

pubKeyFormat = pubKeySpec.getFormat();
pubKeyType = pubKeySpec.getType();

return OpenSSHPublicKeyUtil.parsePublicKey(pubKeyBytes);
}





public String getPubKeyFormat() {
return pubKeyFormat;
}

public String getPubKeyType() {
return pubKeyType;
}
}

+ 3
- 252
source/crypto/crypto-classic/src/test/java/test/com/jd/blockchain/crypto/service/classic/RSACryptoFunctionTest.java View File

@@ -42,7 +42,7 @@ public class RSACryptoFunctionTest {
} }


@Test @Test
public void generateKeyPairTest() {
public void test() {


CryptoAlgorithm algorithm = Crypto.getAlgorithm("RSA"); CryptoAlgorithm algorithm = Crypto.getAlgorithm("RSA");
assertNotNull(algorithm); assertNotNull(algorithm);
@@ -72,20 +72,7 @@ public class RSACryptoFunctionTest {
byte[] rawPrivKeyBytes = privKey.getRawKeyBytes(); byte[] rawPrivKeyBytes = privKey.getRawKeyBytes();
assertArrayEquals(BytesUtils.concat(algoBytes, pubKeyTypeBytes, rawPubKeyBytes), pubKey.toBytes()); assertArrayEquals(BytesUtils.concat(algoBytes, pubKeyTypeBytes, rawPubKeyBytes), pubKey.toBytes());
assertArrayEquals(BytesUtils.concat(algoBytes, privKeyTypeBytes, rawPrivKeyBytes), privKey.toBytes()); assertArrayEquals(BytesUtils.concat(algoBytes, privKeyTypeBytes, rawPrivKeyBytes), privKey.toBytes());
}

@Test
public void retrievePubKeyTest() {

CryptoAlgorithm algorithm = Crypto.getAlgorithm("RSA");
assertNotNull(algorithm);


SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm);

AsymmetricKeypair keyPair = signatureFunction.generateKeypair();

PubKey pubKey = keyPair.getPubKey();
PrivKey privKey = keyPair.getPrivKey();


PubKey retrievedPubKey = signatureFunction.retrievePubKey(privKey); PubKey retrievedPubKey = signatureFunction.retrievePubKey(privKey);


@@ -93,23 +80,12 @@ public class RSACryptoFunctionTest {
assertEquals(pubKey.getRawKeyBytes().length, retrievedPubKey.getRawKeyBytes().length); assertEquals(pubKey.getRawKeyBytes().length, retrievedPubKey.getRawKeyBytes().length);
assertEquals(pubKey.getAlgorithm(), retrievedPubKey.getAlgorithm()); assertEquals(pubKey.getAlgorithm(), retrievedPubKey.getAlgorithm());
assertArrayEquals(pubKey.toBytes(), retrievedPubKey.toBytes()); assertArrayEquals(pubKey.toBytes(), retrievedPubKey.toBytes());
}


@Test
public void signTest() {


byte[] data = new byte[1024];
byte[] data = new byte[128];
Random random = new Random(); Random random = new Random();
random.nextBytes(data); random.nextBytes(data);


CryptoAlgorithm algorithm = Crypto.getAlgorithm("RSA");
assertNotNull(algorithm);

SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm);

AsymmetricKeypair keyPair = signatureFunction.generateKeypair();

PrivKey privKey = keyPair.getPrivKey();
SignatureDigest signatureDigest = signatureFunction.sign(privKey, data); SignatureDigest signatureDigest = signatureFunction.sign(privKey, data);


byte[] signatureBytes = signatureDigest.toBytes(); byte[] signatureBytes = signatureDigest.toBytes();
@@ -121,48 +97,16 @@ public class RSACryptoFunctionTest {
assertEquals((short) (SIGNATURE_ALGORITHM | ENCRYPTION_ALGORITHM | ASYMMETRIC_KEY | ((byte) 23 & 0x00FF)), assertEquals((short) (SIGNATURE_ALGORITHM | ENCRYPTION_ALGORITHM | ASYMMETRIC_KEY | ((byte) 23 & 0x00FF)),
signatureDigest.getAlgorithm()); signatureDigest.getAlgorithm());


byte[] algoBytes = BytesUtils.toBytes(signatureDigest.getAlgorithm());
byte[] rawSinatureBytes = signatureDigest.getRawDigest(); byte[] rawSinatureBytes = signatureDigest.getRawDigest();
assertArrayEquals(BytesUtils.concat(algoBytes, rawSinatureBytes), signatureBytes); assertArrayEquals(BytesUtils.concat(algoBytes, rawSinatureBytes), signatureBytes);
}


@Test
public void verifyTest() {
byte[] data = new byte[1024];
Random random = new Random();
random.nextBytes(data);

CryptoAlgorithm algorithm = Crypto.getAlgorithm("RSA");
assertNotNull(algorithm);

SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm);

AsymmetricKeypair keyPair = signatureFunction.generateKeypair();

PubKey pubKey = keyPair.getPubKey();
PrivKey privKey = keyPair.getPrivKey();
SignatureDigest signatureDigest = signatureFunction.sign(privKey, data);


assertTrue(signatureFunction.verify(signatureDigest, pubKey, data)); assertTrue(signatureFunction.verify(signatureDigest, pubKey, data));
}

@Test
public void encryptTest() {

byte[] data = new byte[128];
Random random = new Random();
random.nextBytes(data);


CryptoAlgorithm algorithm = Crypto.getAlgorithm("RSA");
assertNotNull(algorithm);


AsymmetricEncryptionFunction asymmetricEncryptionFunction = Crypto AsymmetricEncryptionFunction asymmetricEncryptionFunction = Crypto
.getAsymmetricEncryptionFunction(algorithm); .getAsymmetricEncryptionFunction(algorithm);


AsymmetricKeypair keyPair = asymmetricEncryptionFunction.generateKeypair();

PubKey pubKey = keyPair.getPubKey();

Ciphertext ciphertext = asymmetricEncryptionFunction.encrypt(pubKey, data); Ciphertext ciphertext = asymmetricEncryptionFunction.encrypt(pubKey, data);


byte[] ciphertextBytes = ciphertext.toBytes(); byte[] ciphertextBytes = ciphertext.toBytes();
@@ -172,90 +116,32 @@ public class RSACryptoFunctionTest {
assertEquals((short) (SIGNATURE_ALGORITHM | ENCRYPTION_ALGORITHM | ASYMMETRIC_KEY | ((byte) 23 & 0x00FF)), assertEquals((short) (SIGNATURE_ALGORITHM | ENCRYPTION_ALGORITHM | ASYMMETRIC_KEY | ((byte) 23 & 0x00FF)),
ciphertext.getAlgorithm()); ciphertext.getAlgorithm());


byte[] algoBytes = BytesUtils.toBytes(ciphertext.getAlgorithm());
byte[] rawCiphertextBytes = ciphertext.getRawCiphertext(); byte[] rawCiphertextBytes = ciphertext.getRawCiphertext();
assertArrayEquals(BytesUtils.concat(algoBytes, rawCiphertextBytes), ciphertextBytes); assertArrayEquals(BytesUtils.concat(algoBytes, rawCiphertextBytes), ciphertextBytes);
}


@Test
public void decryptTest() {

byte[] data = new byte[128];
Random random = new Random();
random.nextBytes(data);

CryptoAlgorithm algorithm = Crypto.getAlgorithm("RSA");
assertNotNull(algorithm);

AsymmetricEncryptionFunction asymmetricEncryptionFunction = Crypto
.getAsymmetricEncryptionFunction(algorithm);

AsymmetricKeypair keyPair = asymmetricEncryptionFunction.generateKeypair();

PubKey pubKey = keyPair.getPubKey();
PrivKey privKey = keyPair.getPrivKey();

Ciphertext ciphertext = asymmetricEncryptionFunction.encrypt(pubKey, data);


byte[] decryptedPlaintext = asymmetricEncryptionFunction.decrypt(privKey, ciphertext); byte[] decryptedPlaintext = asymmetricEncryptionFunction.decrypt(privKey, ciphertext);

assertArrayEquals(data, decryptedPlaintext); assertArrayEquals(data, decryptedPlaintext);
}

@Test
public void supportPrivKeyTest() {

CryptoAlgorithm algorithm = Crypto.getAlgorithm("RSA");
assertNotNull(algorithm);


SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm);

AsymmetricKeypair keyPair = signatureFunction.generateKeypair();


PrivKey privKey = keyPair.getPrivKey();
byte[] privKeyBytes = privKey.toBytes(); byte[] privKeyBytes = privKey.toBytes();

assertTrue(signatureFunction.supportPrivKey(privKeyBytes)); assertTrue(signatureFunction.supportPrivKey(privKeyBytes));

algorithm = Crypto.getAlgorithm("ripemd160"); algorithm = Crypto.getAlgorithm("ripemd160");
assertNotNull(algorithm); assertNotNull(algorithm);
byte[] algoBytes = CryptoAlgorithm.getCodeBytes(algorithm);
byte[] pubKeyTypeBytes = new byte[] { PUBLIC.CODE };
byte[] rawKeyBytes = privKey.getRawKeyBytes(); byte[] rawKeyBytes = privKey.getRawKeyBytes();
byte[] ripemd160PubKeyBytes = BytesUtils.concat(algoBytes, pubKeyTypeBytes, rawKeyBytes); byte[] ripemd160PubKeyBytes = BytesUtils.concat(algoBytes, pubKeyTypeBytes, rawKeyBytes);

assertFalse(signatureFunction.supportPrivKey(ripemd160PubKeyBytes)); assertFalse(signatureFunction.supportPrivKey(ripemd160PubKeyBytes));
}


@Test
public void resolvePrivKeyTest() {

CryptoAlgorithm algorithm = Crypto.getAlgorithm("RSA");
assertNotNull(algorithm);

SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm);

AsymmetricKeypair keyPair = signatureFunction.generateKeypair();

PrivKey privKey = keyPair.getPrivKey();
byte[] privKeyBytes = privKey.toBytes();


PrivKey resolvedPrivKey = signatureFunction.resolvePrivKey(privKeyBytes); PrivKey resolvedPrivKey = signatureFunction.resolvePrivKey(privKeyBytes);

assertEquals(PRIVATE.CODE, resolvedPrivKey.getKeyType().CODE); assertEquals(PRIVATE.CODE, resolvedPrivKey.getKeyType().CODE);
assertEquals(1155, resolvedPrivKey.getRawKeyBytes().length); assertEquals(1155, resolvedPrivKey.getRawKeyBytes().length);
assertEquals(ClassicAlgorithm.RSA.code(), resolvedPrivKey.getAlgorithm()); assertEquals(ClassicAlgorithm.RSA.code(), resolvedPrivKey.getAlgorithm());
assertEquals((short) (SIGNATURE_ALGORITHM | ENCRYPTION_ALGORITHM | ASYMMETRIC_KEY | ((byte) 23 & 0x00FF)), assertEquals((short) (SIGNATURE_ALGORITHM | ENCRYPTION_ALGORITHM | ASYMMETRIC_KEY | ((byte) 23 & 0x00FF)),
resolvedPrivKey.getAlgorithm()); resolvedPrivKey.getAlgorithm());
assertArrayEquals(privKeyBytes, resolvedPrivKey.toBytes()); assertArrayEquals(privKeyBytes, resolvedPrivKey.toBytes());

algorithm = Crypto.getAlgorithm("ripemd160"); algorithm = Crypto.getAlgorithm("ripemd160");
assertNotNull(algorithm); assertNotNull(algorithm);
byte[] algoBytes = CryptoAlgorithm.getCodeBytes(algorithm);
byte[] pubKeyTypeBytes = new byte[] { PUBLIC.CODE };
byte[] rawKeyBytes = privKey.getRawKeyBytes();
byte[] ripemd160PubKeyBytes = BytesUtils.concat(algoBytes, pubKeyTypeBytes, rawKeyBytes);

Class<?> expectedException = CryptoException.class; Class<?> expectedException = CryptoException.class;
Exception actualEx = null; Exception actualEx = null;
try { try {
@@ -265,64 +151,26 @@ public class RSACryptoFunctionTest {
} }
assertNotNull(actualEx); assertNotNull(actualEx);
assertTrue(expectedException.isAssignableFrom(actualEx.getClass())); assertTrue(expectedException.isAssignableFrom(actualEx.getClass()));
}

@Test
public void supportPubKeyTest() {


CryptoAlgorithm algorithm = Crypto.getAlgorithm("RSA");
assertNotNull(algorithm);


SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm);


AsymmetricKeypair keyPair = signatureFunction.generateKeypair();

PubKey pubKey = keyPair.getPubKey();
byte[] pubKeyBytes = pubKey.toBytes(); byte[] pubKeyBytes = pubKey.toBytes();

assertTrue(signatureFunction.supportPubKey(pubKeyBytes)); assertTrue(signatureFunction.supportPubKey(pubKeyBytes));

algorithm = Crypto.getAlgorithm("ripemd160"); algorithm = Crypto.getAlgorithm("ripemd160");
assertNotNull(algorithm); assertNotNull(algorithm);
byte[] algoBytes = CryptoAlgorithm.getCodeBytes(algorithm);
byte[] privKeyTypeBytes = new byte[] { PRIVATE.CODE };
byte[] rawKeyBytes = pubKey.getRawKeyBytes();
byte[] ripemd160PrivKeyBytes = BytesUtils.concat(algoBytes, privKeyTypeBytes, rawKeyBytes); byte[] ripemd160PrivKeyBytes = BytesUtils.concat(algoBytes, privKeyTypeBytes, rawKeyBytes);

assertFalse(signatureFunction.supportPubKey(ripemd160PrivKeyBytes)); assertFalse(signatureFunction.supportPubKey(ripemd160PrivKeyBytes));
}

@Test
public void resolvePubKeyTest() {

CryptoAlgorithm algorithm = Crypto.getAlgorithm("RSA");
assertNotNull(algorithm);

SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm);

AsymmetricKeypair keyPair = signatureFunction.generateKeypair();


PubKey pubKey = keyPair.getPubKey();
byte[] pubKeyBytes = pubKey.toBytes();


PubKey resolvedPubKey = signatureFunction.resolvePubKey(pubKeyBytes); PubKey resolvedPubKey = signatureFunction.resolvePubKey(pubKeyBytes);

assertEquals(PUBLIC.CODE, resolvedPubKey.getKeyType().CODE); assertEquals(PUBLIC.CODE, resolvedPubKey.getKeyType().CODE);
assertEquals(259, resolvedPubKey.getRawKeyBytes().length); assertEquals(259, resolvedPubKey.getRawKeyBytes().length);
assertEquals(ClassicAlgorithm.RSA.code(), resolvedPubKey.getAlgorithm()); assertEquals(ClassicAlgorithm.RSA.code(), resolvedPubKey.getAlgorithm());
assertEquals((short) (SIGNATURE_ALGORITHM | ENCRYPTION_ALGORITHM | ASYMMETRIC_KEY | ((byte) 23 & 0x00FF)), assertEquals((short) (SIGNATURE_ALGORITHM | ENCRYPTION_ALGORITHM | ASYMMETRIC_KEY | ((byte) 23 & 0x00FF)),
resolvedPubKey.getAlgorithm()); resolvedPubKey.getAlgorithm());
assertArrayEquals(pubKeyBytes, resolvedPubKey.toBytes()); assertArrayEquals(pubKeyBytes, resolvedPubKey.toBytes());

algorithm = Crypto.getAlgorithm("ripemd160"); algorithm = Crypto.getAlgorithm("ripemd160");
assertNotNull(algorithm); assertNotNull(algorithm);
byte[] algoBytes = CryptoAlgorithm.getCodeBytes(algorithm);
byte[] privKeyTypeBytes = new byte[] { PRIVATE.CODE };
byte[] rawKeyBytes = pubKey.getRawKeyBytes();
byte[] ripemd160PrivKeyBytes = BytesUtils.concat(algoBytes, privKeyTypeBytes, rawKeyBytes);

Class<?> expectedException = CryptoException.class;
Exception actualEx = null;
try { try {
signatureFunction.resolvePrivKey(ripemd160PrivKeyBytes); signatureFunction.resolvePrivKey(ripemd160PrivKeyBytes);
} catch (Exception e) { } catch (Exception e) {
@@ -330,57 +178,18 @@ public class RSACryptoFunctionTest {
} }
assertNotNull(actualEx); assertNotNull(actualEx);
assertTrue(expectedException.isAssignableFrom(actualEx.getClass())); assertTrue(expectedException.isAssignableFrom(actualEx.getClass()));
}

@Test
public void supportDigestTest() {

byte[] data = new byte[1024];
Random random = new Random();
random.nextBytes(data);

CryptoAlgorithm algorithm = Crypto.getAlgorithm("RSA");
assertNotNull(algorithm);

SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm);


AsymmetricKeypair keyPair = signatureFunction.generateKeypair();

PrivKey privKey = keyPair.getPrivKey();

SignatureDigest signatureDigest = signatureFunction.sign(privKey, data);


byte[] signatureDigestBytes = signatureDigest.toBytes(); byte[] signatureDigestBytes = signatureDigest.toBytes();
assertTrue(signatureFunction.supportDigest(signatureDigestBytes)); assertTrue(signatureFunction.supportDigest(signatureDigestBytes));


algorithm = Crypto.getAlgorithm("ripemd160"); algorithm = Crypto.getAlgorithm("ripemd160");
assertNotNull(algorithm); assertNotNull(algorithm);
byte[] algoBytes = CryptoAlgorithm.getCodeBytes(algorithm);
byte[] rawDigestBytes = signatureDigest.toBytes(); byte[] rawDigestBytes = signatureDigest.toBytes();
byte[] ripemd160SignatureBytes = BytesUtils.concat(algoBytes, rawDigestBytes); byte[] ripemd160SignatureBytes = BytesUtils.concat(algoBytes, rawDigestBytes);


assertFalse(signatureFunction.supportDigest(ripemd160SignatureBytes)); assertFalse(signatureFunction.supportDigest(ripemd160SignatureBytes));
}

@Test
public void resolveDigestTest() {

byte[] data = new byte[1024];
Random random = new Random();
random.nextBytes(data);

CryptoAlgorithm algorithm = Crypto.getAlgorithm("RSA");
assertNotNull(algorithm);

SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm);

AsymmetricKeypair keyPair = signatureFunction.generateKeypair();

PrivKey privKey = keyPair.getPrivKey();


SignatureDigest signatureDigest = signatureFunction.sign(privKey, data);

byte[] signatureDigestBytes = signatureDigest.toBytes();


SignatureDigest resolvedSignatureDigest = signatureFunction.resolveDigest(signatureDigestBytes); SignatureDigest resolvedSignatureDigest = signatureFunction.resolveDigest(signatureDigestBytes);


@@ -392,12 +201,8 @@ public class RSACryptoFunctionTest {


algorithm = Crypto.getAlgorithm("ripemd160"); algorithm = Crypto.getAlgorithm("ripemd160");
assertNotNull(algorithm); assertNotNull(algorithm);
byte[] algoBytes = CryptoAlgorithm.getCodeBytes(algorithm);
byte[] rawDigestBytes = signatureDigest.getRawDigest();
byte[] ripemd160SignatureDigestBytes = BytesUtils.concat(algoBytes, rawDigestBytes); byte[] ripemd160SignatureDigestBytes = BytesUtils.concat(algoBytes, rawDigestBytes);


Class<?> expectedException = CryptoException.class;
Exception actualEx = null;
try { try {
signatureFunction.resolveDigest(ripemd160SignatureDigestBytes); signatureFunction.resolveDigest(ripemd160SignatureDigestBytes);
} catch (Exception e) { } catch (Exception e) {
@@ -405,77 +210,24 @@ public class RSACryptoFunctionTest {
} }
assertNotNull(actualEx); assertNotNull(actualEx);
assertTrue(expectedException.isAssignableFrom(actualEx.getClass())); assertTrue(expectedException.isAssignableFrom(actualEx.getClass()));
}

@Test
public void supportCiphertextTest() {

byte[] data = new byte[128];
Random random = new Random();
random.nextBytes(data);

CryptoAlgorithm algorithm = Crypto.getAlgorithm("RSA");
assertNotNull(algorithm);

AsymmetricEncryptionFunction asymmetricEncryptionFunction = Crypto
.getAsymmetricEncryptionFunction(algorithm);

AsymmetricKeypair keyPair = asymmetricEncryptionFunction.generateKeypair();

PubKey pubKey = keyPair.getPubKey();

Ciphertext ciphertext = asymmetricEncryptionFunction.encrypt(pubKey, data);


byte[] ciphertextBytes = ciphertext.toBytes();


assertTrue(asymmetricEncryptionFunction.supportCiphertext(ciphertextBytes)); assertTrue(asymmetricEncryptionFunction.supportCiphertext(ciphertextBytes));

algorithm = Crypto.getAlgorithm("ripemd160"); algorithm = Crypto.getAlgorithm("ripemd160");
assertNotNull(algorithm); assertNotNull(algorithm);
byte[] algoBytes = CryptoAlgorithm.getCodeBytes(algorithm);
byte[] rawCiphertextBytes = ciphertext.toBytes();
algoBytes = CryptoAlgorithm.getCodeBytes(algorithm);
byte[] ripemd160CiphertextBytes = BytesUtils.concat(algoBytes, rawCiphertextBytes); byte[] ripemd160CiphertextBytes = BytesUtils.concat(algoBytes, rawCiphertextBytes);

assertFalse(asymmetricEncryptionFunction.supportCiphertext(ripemd160CiphertextBytes)); assertFalse(asymmetricEncryptionFunction.supportCiphertext(ripemd160CiphertextBytes));
}

@Test
public void resolveCiphertextTest() {

byte[] data = new byte[128];
Random random = new Random();
random.nextBytes(data);

CryptoAlgorithm algorithm = Crypto.getAlgorithm("RSA");
assertNotNull(algorithm);

AsymmetricEncryptionFunction asymmetricEncryptionFunction = Crypto
.getAsymmetricEncryptionFunction(algorithm);

AsymmetricKeypair keyPair = asymmetricEncryptionFunction.generateKeypair();


PubKey pubKey = keyPair.getPubKey();

Ciphertext ciphertext = asymmetricEncryptionFunction.encrypt(pubKey, data);

byte[] ciphertextBytes = ciphertext.toBytes();


Ciphertext resolvedCiphertext = asymmetricEncryptionFunction.resolveCiphertext(ciphertextBytes); Ciphertext resolvedCiphertext = asymmetricEncryptionFunction.resolveCiphertext(ciphertextBytes);

assertEquals(256, resolvedCiphertext.getRawCiphertext().length); assertEquals(256, resolvedCiphertext.getRawCiphertext().length);
assertEquals(ClassicAlgorithm.RSA.code(), resolvedCiphertext.getAlgorithm()); assertEquals(ClassicAlgorithm.RSA.code(), resolvedCiphertext.getAlgorithm());
assertEquals((short) (SIGNATURE_ALGORITHM | ENCRYPTION_ALGORITHM | ASYMMETRIC_KEY | ((byte) 23 & 0x00FF)), assertEquals((short) (SIGNATURE_ALGORITHM | ENCRYPTION_ALGORITHM | ASYMMETRIC_KEY | ((byte) 23 & 0x00FF)),
resolvedCiphertext.getAlgorithm()); resolvedCiphertext.getAlgorithm());
assertArrayEquals(ciphertextBytes, resolvedCiphertext.toBytes()); assertArrayEquals(ciphertextBytes, resolvedCiphertext.toBytes());

algorithm = Crypto.getAlgorithm("ripemd160"); algorithm = Crypto.getAlgorithm("ripemd160");
assertNotNull(algorithm); assertNotNull(algorithm);
byte[] algoBytes = CryptoAlgorithm.getCodeBytes(algorithm);
byte[] rawCiphertextBytes = ciphertext.getRawCiphertext();
byte[] ripemd160CiphertextBytes = BytesUtils.concat(algoBytes, rawCiphertextBytes);

Class<?> expectedException = CryptoException.class;
Exception actualEx = null;
try { try {
asymmetricEncryptionFunction.resolveCiphertext(ripemd160CiphertextBytes); asymmetricEncryptionFunction.resolveCiphertext(ripemd160CiphertextBytes);
} catch (Exception e) { } catch (Exception e) {
@@ -484,5 +236,4 @@ public class RSACryptoFunctionTest {
assertNotNull(actualEx); assertNotNull(actualEx);
assertTrue(expectedException.isAssignableFrom(actualEx.getClass())); assertTrue(expectedException.isAssignableFrom(actualEx.getClass()));
} }

} }

+ 11
- 55
source/crypto/crypto-classic/src/test/java/test/com/jd/blockchain/crypto/utils/classic/RSAUtilsTest.java View File

@@ -80,7 +80,7 @@ public class RSAUtilsTest {
} }


@Test @Test
public void retrievePublicKeyTest(){
public void test(){


AsymmetricCipherKeyPair kp = RSAUtils.generateKeyPair(); AsymmetricCipherKeyPair kp = RSAUtils.generateKeyPair();
RSAKeyParameters pubKey = (RSAKeyParameters) kp.getPublic(); RSAKeyParameters pubKey = (RSAKeyParameters) kp.getPublic();
@@ -91,38 +91,17 @@ public class RSAUtilsTest {
byte[] retrievedPubKeyBytes = RSAUtils.retrievePublicKey(privKeyBytes); byte[] retrievedPubKeyBytes = RSAUtils.retrievePublicKey(privKeyBytes);


assertArrayEquals(pubKeyBytes,retrievedPubKeyBytes); assertArrayEquals(pubKeyBytes,retrievedPubKeyBytes);
}

@Test
public void signTest(){


byte[] data = new byte[1024];
byte[] data = new byte[128];
Random random = new Random(); Random random = new Random();
random.nextBytes(data); random.nextBytes(data);


AsymmetricCipherKeyPair keyPair = RSAUtils.generateKeyPair();
AsymmetricKeyParameter privKey = keyPair.getPrivate();
byte[] privKeyBytes = RSAUtils.privKey2Bytes_RawKey((RSAPrivateCrtKeyParameters) privKey);

byte[] signatureFromPrivKey = RSAUtils.sign(data, privKey); byte[] signatureFromPrivKey = RSAUtils.sign(data, privKey);
byte[] signatureFromPrivKeyBytes = RSAUtils.sign(data, privKeyBytes); byte[] signatureFromPrivKeyBytes = RSAUtils.sign(data, privKeyBytes);


assertNotNull(signatureFromPrivKey); assertNotNull(signatureFromPrivKey);
assertEquals(2048 / 8, signatureFromPrivKey.length); assertEquals(2048 / 8, signatureFromPrivKey.length);
assertArrayEquals(signatureFromPrivKeyBytes,signatureFromPrivKey); assertArrayEquals(signatureFromPrivKeyBytes,signatureFromPrivKey);
}

@Test
public void verifyTest(){

byte[] data = new byte[1024];
Random random = new Random();
random.nextBytes(data);

AsymmetricCipherKeyPair keyPair = RSAUtils.generateKeyPair();
AsymmetricKeyParameter privKey = keyPair.getPrivate();
AsymmetricKeyParameter pubKey = keyPair.getPublic();
byte[] pubKeyBytes = RSAUtils.pubKey2Bytes_RawKey((RSAKeyParameters) pubKey);


byte[] signature = RSAUtils.sign(data,privKey); byte[] signature = RSAUtils.sign(data,privKey);


@@ -131,46 +110,23 @@ public class RSAUtilsTest {


assertTrue(isValidFromPubKey); assertTrue(isValidFromPubKey);
assertTrue(isValidFromPubKeyBytes); assertTrue(isValidFromPubKeyBytes);
}

@Test
public void encryptTest(){

byte[] data = new byte[246];
Random random = new Random();
random.nextBytes(data);

AsymmetricCipherKeyPair keyPair = RSAUtils.generateKeyPair();
AsymmetricKeyParameter pubKey = keyPair.getPublic();
byte[] pubKeyBytes = RSAUtils.pubKey2Bytes_RawKey((RSAKeyParameters) pubKey);


byte[] ciphertextFromPubKey = RSAUtils.encrypt(data,pubKey); byte[] ciphertextFromPubKey = RSAUtils.encrypt(data,pubKey);
byte[] ciphertextFromPubKeyBytes = RSAUtils.encrypt(data,pubKeyBytes); byte[] ciphertextFromPubKeyBytes = RSAUtils.encrypt(data,pubKeyBytes);


assertEquals(512,ciphertextFromPubKey.length);
assertEquals(512,ciphertextFromPubKeyBytes.length);
}

@Test
public void decryptTest(){

AsymmetricCipherKeyPair keyPair = RSAUtils.generateKeyPair();
AsymmetricKeyParameter pubKey = keyPair.getPublic();
AsymmetricKeyParameter privKey = keyPair.getPrivate();
byte[] privKeyBytes = RSAUtils.privKey2Bytes_RawKey((RSAPrivateCrtKeyParameters) privKey);
assertEquals(256,ciphertextFromPubKey.length);
assertEquals(256,ciphertextFromPubKeyBytes.length);


Random random = new Random();


byte[] data;
data = new byte[1024];
random.nextBytes(data);
byte[] ciphertext = RSAUtils.encrypt(data, pubKey);
data = new byte[1024];
random.nextBytes(data);
byte[] ciphertext = RSAUtils.encrypt(data, pubKey);


byte[] plaintextFromPrivKey = RSAUtils.decrypt(ciphertext, privKey);
byte[] plaintextFromPrivKeyBytes = RSAUtils.decrypt(ciphertext, privKeyBytes);
byte[] plaintextFromPrivKey = RSAUtils.decrypt(ciphertext, privKey);
byte[] plaintextFromPrivKeyBytes = RSAUtils.decrypt(ciphertext, privKeyBytes);


assertArrayEquals(data, plaintextFromPrivKey);
assertArrayEquals(data, plaintextFromPrivKeyBytes);
assertArrayEquals(data, plaintextFromPrivKey);
assertArrayEquals(data, plaintextFromPrivKeyBytes);
} }






+ 35
- 16
source/crypto/crypto-classic/src/test/java/test/com/jd/blockchain/crypto/utils/classic/SSHKeyUtilsTest.java View File

@@ -1,5 +1,6 @@
//package test.com.jd.blockchain.crypto.utils.classic; //package test.com.jd.blockchain.crypto.utils.classic;
// //
//import com.jd.blockchain.crypto.utils.classic.SSHKeyParser;
//import org.bouncycastle.asn1.ASN1Sequence; //import org.bouncycastle.asn1.ASN1Sequence;
//import org.bouncycastle.crypto.params.RSAKeyParameters; //import org.bouncycastle.crypto.params.RSAKeyParameters;
//import org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters; //import org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters;
@@ -17,6 +18,8 @@
//import java.io.StringReader; //import java.io.StringReader;
//import java.math.BigInteger; //import java.math.BigInteger;
// //
//import static org.junit.Assert.assertEquals;
//
///** ///**
// * @author zhanglin33 // * @author zhanglin33
// * @title: SSHKeyUtilsTest // * @title: SSHKeyUtilsTest
@@ -34,26 +37,40 @@
// "e/9gMujAtDoolJ181a9P06bvEpIw5cLtUnsm5CtvBuiL7WBXxDJ/IASJrKNGBdK8xib1+Kb8tNLAT6" + // "e/9gMujAtDoolJ181a9P06bvEpIw5cLtUnsm5CtvBuiL7WBXxDJ/IASJrKNGBdK8xib1+Kb8tNLAT6" +
// "Dj25BwylqiRNhb5l1Ni4aKrE2FqSEc5Nx5+csQMEl9MBJ3pEsLHBNbohDL+jbwLguRVD6CJ"; // "Dj25BwylqiRNhb5l1Ni4aKrE2FqSEc5Nx5+csQMEl9MBJ3pEsLHBNbohDL+jbwLguRVD6CJ";
// //
// byte[] pubKeyBytes = Base64.decode(pubKeyStr);
// System.out.println(Hex.toHexString(pubKeyBytes));
// OpenSSHPublicKeySpec pubKeySpec = new OpenSSHPublicKeySpec(pubKeyBytes);
// BigInteger exponent = new BigInteger("010001",16);
// BigInteger modulus = new BigInteger("0098c0b378117cbb8345ee82fe2541fa2e8db0118b8f2" +
// "03d2c55ba9b46b12a06aac4b4d1ef6b03bbf4ab314a6bd6619f0d569230a711745800c88200962" +
// "433f98623c99bdea91c74d84659998f9e8a55f83e3a093141d78c9e47d9a3a0e3d7b38a635f7cc" +
// "6bde2b1e4dc7c8ef76815ec1b4c2b5d374c755d64e3353e5b5ea3ffe205e42c4344539b4bb1654" +
// "03aed0c13f35effd80cba302d0e8a25275f356bd3f4e9bbc4a48c3970bb549ec9b90adbc1ba22f" +
// "b5815f10c9fc801226b28d18174af3189bd7e29bf2d34b013e838f6e41c3296a8913616f997536" +
// "2e1a2ab13616a484739371e7e72c40c125f4c049de912c2c704d6e88432fe8dbc0b82e4550fa089",16);
// String pubKeyFormat = "OpenSSH";
// String pubKeyType = "ssh-rsa";
// //
// String pubKeyFormat = pubKeySpec.getFormat();
// String pubKeyType = pubKeySpec.getType();
// System.out.println(pubKeyFormat);
// System.out.println(pubKeyType);
// SSHKeyParser parser = new SSHKeyParser();
// //
// RSAKeyParameters pubKey = (RSAKeyParameters) OpenSSHPublicKeyUtil.parsePublicKey(pubKeyBytes);
// RSAKeyParameters pubKey = (RSAKeyParameters) parser.pubKeyParse(pubKeyStr);
// BigInteger e = pubKey.getExponent(); // BigInteger e = pubKey.getExponent();
// BigInteger n = pubKey.getModulus(); // BigInteger n = pubKey.getModulus();
// System.out.println(Hex.toHexString(e.toByteArray()));
// System.out.println(Hex.toHexString(n.toByteArray()));
//
// System.out.println();
// System.out.println("-------------------------------------------------------");
// System.out.println();
//
//
// assertEquals(exponent,e);
// assertEquals(modulus,n);
// assertEquals(pubKeyFormat,parser.getPubKeyFormat());
// assertEquals(pubKeyType,parser.getPubKeyType());
//
// String pubKeyStrWithHead = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCYwLN4EXy7g0Xugv4lQfou" +
// "jbARi48gPSxVuptGsSoGqsS00e9rA7v0qzFKa9Zhnw1WkjCnEXRYAMiCAJYkM/mGI8mb3qkcdNhGWZm" +
// "PnopV+D46CTFB14yeR9mjoOPXs4pjX3zGveKx5Nx8jvdoFewbTCtdN0x1XWTjNT5bXqP/4gXkLENEU5" +
// "tLsWVAOu0ME/Ne/9gMujAtDoolJ181a9P06bvEpIw5cLtUnsm5CtvBuiL7WBXxDJ/IASJrKNGBdK8xi" +
// "b1+Kb8tNLAT6Dj25BwylqiRNhb5l1Ni4aKrE2FqSEc5Nx5+csQMEl9MBJ3pEsLHBNbohDL+jbwLguRV" +
// "D6CJ zhanglin33@zhanglin33.local\n";
// pubKey = (RSAKeyParameters) parser.pubKeyParse(pubKeyStrWithHead);
// e = pubKey.getExponent();
// n = pubKey.getModulus();
// assertEquals(exponent,e);
// assertEquals(modulus,n);
// assertEquals(pubKeyFormat,parser.getPubKeyFormat());
// assertEquals(pubKeyType,parser.getPubKeyType());
// } // }
// //
// @Test // @Test
@@ -93,6 +110,7 @@
// } catch (IOException e1) { // } catch (IOException e1) {
// e1.printStackTrace(); // e1.printStackTrace();
// } // }
// assert Bytes2 != null;
// System.out.println(Hex.toHexString(Bytes2)); // System.out.println(Hex.toHexString(Bytes2));
// //
// String str3 = "-----BEGIN OPENSSH PRIVATE KEY-----\n" + // String str3 = "-----BEGIN OPENSSH PRIVATE KEY-----\n" +
@@ -129,6 +147,7 @@
// } catch (IOException e1) { // } catch (IOException e1) {
// e1.printStackTrace(); // e1.printStackTrace();
// } // }
// assert Bytes3 != null;
// System.out.println(Hex.toHexString(Bytes3)); // System.out.println(Hex.toHexString(Bytes3));
//// System.out.println(Hex.toHexString(Base64.decode("oNE9iA4ZyuZLbpEL7B29NaxGi4puT2Y5RDaMoEkoAKI"))); //// System.out.println(Hex.toHexString(Base64.decode("oNE9iA4ZyuZLbpEL7B29NaxGi4puT2Y5RDaMoEkoAKI")));
//// String test = "1ac477fa"; //// String test = "1ac477fa";


+ 1
- 1
source/crypto/crypto-pki/src/main/java/com/jd/blockchain/crypto/utils/CertParser.java View File

@@ -37,7 +37,7 @@ public class CertParser {
try { try {
issuerCert.checkValidity(); issuerCert.checkValidity();
} catch (CertificateExpiredException | CertificateNotYetValidException e) { } catch (CertificateExpiredException | CertificateNotYetValidException e) {
e.printStackTrace();
throw new CryptoException(e.getMessage(), e);
} }
PublicKey issuerPubKey = issuerCert.getPublicKey(); PublicKey issuerPubKey = issuerCert.getPublicKey();
X500Principal issuerPrincipal = issuerCert.getSubjectX500Principal(); X500Principal issuerPrincipal = issuerCert.getSubjectX500Principal();


+ 11
- 154
source/crypto/crypto-pki/src/test/java/com/jd/blockchain/crypto/service/pki/SHA1WITHRSA2048SignatureFunctionTest.java View File

@@ -41,26 +41,21 @@ public class SHA1WITHRSA2048SignatureFunctionTest {
} }


@Test @Test
public void generateKeyPairTest() {
public void test() {


// generateKeyPairTest
CryptoAlgorithm algorithm = Crypto.getAlgorithm("SHA1WITHRSA2048"); CryptoAlgorithm algorithm = Crypto.getAlgorithm("SHA1WITHRSA2048");
assertNotNull(algorithm); assertNotNull(algorithm);

SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm); SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm);

AsymmetricKeypair keyPair = signatureFunction.generateKeypair(); AsymmetricKeypair keyPair = signatureFunction.generateKeypair();

PubKey pubKey = keyPair.getPubKey(); PubKey pubKey = keyPair.getPubKey();
PrivKey privKey = keyPair.getPrivKey(); PrivKey privKey = keyPair.getPrivKey();

assertEquals(PUBLIC.CODE, pubKey.getKeyType().CODE); assertEquals(PUBLIC.CODE, pubKey.getKeyType().CODE);
assertTrue(pubKey.getRawKeyBytes().length > 259); assertTrue(pubKey.getRawKeyBytes().length > 259);
assertEquals(PRIVATE.CODE, privKey.getKeyType().CODE); assertEquals(PRIVATE.CODE, privKey.getKeyType().CODE);
assertTrue(privKey.getRawKeyBytes().length > 1155); assertTrue(privKey.getRawKeyBytes().length > 1155);

assertEquals(algorithm.code(), pubKey.getAlgorithm()); assertEquals(algorithm.code(), pubKey.getAlgorithm());
assertEquals(algorithm.code(), privKey.getAlgorithm()); assertEquals(algorithm.code(), privKey.getAlgorithm());

byte[] algoBytes = CryptoAlgorithm.getCodeBytes(algorithm); byte[] algoBytes = CryptoAlgorithm.getCodeBytes(algorithm);
byte[] pubKeyTypeBytes = new byte[] { PUBLIC.CODE }; byte[] pubKeyTypeBytes = new byte[] { PUBLIC.CODE };
byte[] privKeyTypeBytes = new byte[] { PRIVATE.CODE }; byte[] privKeyTypeBytes = new byte[] { PRIVATE.CODE };
@@ -68,200 +63,62 @@ public class SHA1WITHRSA2048SignatureFunctionTest {
byte[] rawPrivKeyBytes = privKey.getRawKeyBytes(); byte[] rawPrivKeyBytes = privKey.getRawKeyBytes();
assertArrayEquals(BytesUtils.concat(algoBytes, pubKeyTypeBytes, rawPubKeyBytes), pubKey.toBytes()); assertArrayEquals(BytesUtils.concat(algoBytes, pubKeyTypeBytes, rawPubKeyBytes), pubKey.toBytes());
assertArrayEquals(BytesUtils.concat(algoBytes, privKeyTypeBytes, rawPrivKeyBytes), privKey.toBytes()); assertArrayEquals(BytesUtils.concat(algoBytes, privKeyTypeBytes, rawPrivKeyBytes), privKey.toBytes());
}

@Test
public void retrievePubKeyTest() {

CryptoAlgorithm algorithm = Crypto.getAlgorithm("SHA1WITHRSA2048");
assertNotNull(algorithm);

SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm);

AsymmetricKeypair keyPair = signatureFunction.generateKeypair();

PubKey pubKey = keyPair.getPubKey();
PrivKey privKey = keyPair.getPrivKey();


// retrievePubKeyTest
PubKey retrievedPubKey = signatureFunction.retrievePubKey(privKey); PubKey retrievedPubKey = signatureFunction.retrievePubKey(privKey);

assertEquals(pubKey.getKeyType(), retrievedPubKey.getKeyType()); assertEquals(pubKey.getKeyType(), retrievedPubKey.getKeyType());
assertEquals(pubKey.getRawKeyBytes().length, retrievedPubKey.getRawKeyBytes().length); assertEquals(pubKey.getRawKeyBytes().length, retrievedPubKey.getRawKeyBytes().length);
assertEquals(pubKey.getAlgorithm(), retrievedPubKey.getAlgorithm()); assertEquals(pubKey.getAlgorithm(), retrievedPubKey.getAlgorithm());
assertArrayEquals(pubKey.toBytes(), retrievedPubKey.toBytes()); assertArrayEquals(pubKey.toBytes(), retrievedPubKey.toBytes());
}

@Test
public void signTest() {


// signTest
byte[] data = new byte[1024]; byte[] data = new byte[1024];
Random random = new Random(); Random random = new Random();
random.nextBytes(data); random.nextBytes(data);

CryptoAlgorithm algorithm = Crypto.getAlgorithm("SHA1WITHRSA2048");
assertNotNull(algorithm);

SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm);

AsymmetricKeypair keyPair = signatureFunction.generateKeypair();

PrivKey privKey = keyPair.getPrivKey();
SignatureDigest signatureDigest = signatureFunction.sign(privKey, data); SignatureDigest signatureDigest = signatureFunction.sign(privKey, data);

byte[] signatureBytes = signatureDigest.toBytes(); byte[] signatureBytes = signatureDigest.toBytes();

assertEquals(2 + 256, signatureBytes.length); assertEquals(2 + 256, signatureBytes.length);
assertEquals(algorithm.code(), signatureDigest.getAlgorithm()); assertEquals(algorithm.code(), signatureDigest.getAlgorithm());

assertEquals(PKIAlgorithm.SHA1WITHRSA2048.code(), signatureDigest.getAlgorithm()); assertEquals(PKIAlgorithm.SHA1WITHRSA2048.code(), signatureDigest.getAlgorithm());
assertEquals((short) (SIGNATURE_ALGORITHM | ASYMMETRIC_KEY | ((byte) 31 & 0x00FF)), assertEquals((short) (SIGNATURE_ALGORITHM | ASYMMETRIC_KEY | ((byte) 31 & 0x00FF)),
signatureDigest.getAlgorithm()); signatureDigest.getAlgorithm());


byte[] algoBytes = BytesUtils.toBytes(signatureDigest.getAlgorithm());
byte[] rawSinatureBytes = signatureDigest.getRawDigest(); byte[] rawSinatureBytes = signatureDigest.getRawDigest();
assertArrayEquals(BytesUtils.concat(algoBytes, rawSinatureBytes), signatureBytes); assertArrayEquals(BytesUtils.concat(algoBytes, rawSinatureBytes), signatureBytes);
}

@Test
public void verifyTest() {
byte[] data = new byte[1024];
Random random = new Random();
random.nextBytes(data);

CryptoAlgorithm algorithm = Crypto.getAlgorithm("SHA1WITHRSA2048");
assertNotNull(algorithm);

SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm);

AsymmetricKeypair keyPair = signatureFunction.generateKeypair();

PubKey pubKey = keyPair.getPubKey();
PrivKey privKey = keyPair.getPrivKey();
SignatureDigest signatureDigest = signatureFunction.sign(privKey, data);


// verifyTest
assertTrue(signatureFunction.verify(signatureDigest, pubKey, data)); assertTrue(signatureFunction.verify(signatureDigest, pubKey, data));
}

@Test
public void supportPrivKeyTest() {


CryptoAlgorithm algorithm = Crypto.getAlgorithm("SHA1WITHRSA2048");
assertNotNull(algorithm);

SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm);

AsymmetricKeypair keyPair = signatureFunction.generateKeypair();

PrivKey privKey = keyPair.getPrivKey();
// supportPrivKeyTest
byte[] privKeyBytes = privKey.toBytes(); byte[] privKeyBytes = privKey.toBytes();

assertTrue(signatureFunction.supportPrivKey(privKeyBytes)); assertTrue(signatureFunction.supportPrivKey(privKeyBytes));
}

@Test
public void resolvePrivKeyTest() {

CryptoAlgorithm algorithm = Crypto.getAlgorithm("SHA1WITHRSA2048");
assertNotNull(algorithm);

SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm);

AsymmetricKeypair keyPair = signatureFunction.generateKeypair();

PrivKey privKey = keyPair.getPrivKey();
byte[] privKeyBytes = privKey.toBytes();


// resolvePrivKeyTest
PrivKey resolvedPrivKey = signatureFunction.resolvePrivKey(privKeyBytes); PrivKey resolvedPrivKey = signatureFunction.resolvePrivKey(privKeyBytes);

assertEquals(PRIVATE.CODE, resolvedPrivKey.getKeyType().CODE); assertEquals(PRIVATE.CODE, resolvedPrivKey.getKeyType().CODE);
assertEquals(PKIAlgorithm.SHA1WITHRSA2048.code(), resolvedPrivKey.getAlgorithm()); assertEquals(PKIAlgorithm.SHA1WITHRSA2048.code(), resolvedPrivKey.getAlgorithm());
assertEquals((short) (SIGNATURE_ALGORITHM | ASYMMETRIC_KEY | ((byte) 31 & 0x00FF)), assertEquals((short) (SIGNATURE_ALGORITHM | ASYMMETRIC_KEY | ((byte) 31 & 0x00FF)),
resolvedPrivKey.getAlgorithm()); resolvedPrivKey.getAlgorithm());
assertArrayEquals(privKeyBytes, resolvedPrivKey.toBytes()); assertArrayEquals(privKeyBytes, resolvedPrivKey.toBytes());
}

@Test
public void supportPubKeyTest() {


CryptoAlgorithm algorithm = Crypto.getAlgorithm("SHA1WITHRSA2048");
assertNotNull(algorithm);

SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm);

AsymmetricKeypair keyPair = signatureFunction.generateKeypair();

PubKey pubKey = keyPair.getPubKey();
// supportPubKeyTest
byte[] pubKeyBytes = pubKey.toBytes(); byte[] pubKeyBytes = pubKey.toBytes();

assertTrue(signatureFunction.supportPubKey(pubKeyBytes)); assertTrue(signatureFunction.supportPubKey(pubKeyBytes));
}

@Test
public void resolvePubKeyTest() {

CryptoAlgorithm algorithm = Crypto.getAlgorithm("SHA1WITHRSA2048");
assertNotNull(algorithm);

SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm);

AsymmetricKeypair keyPair = signatureFunction.generateKeypair();

PubKey pubKey = keyPair.getPubKey();
byte[] pubKeyBytes = pubKey.toBytes();


// resolvedPubKeyTest
PubKey resolvedPubKey = signatureFunction.resolvePubKey(pubKeyBytes); PubKey resolvedPubKey = signatureFunction.resolvePubKey(pubKeyBytes);

assertEquals(PUBLIC.CODE, resolvedPubKey.getKeyType().CODE); assertEquals(PUBLIC.CODE, resolvedPubKey.getKeyType().CODE);
assertEquals(PKIAlgorithm.SHA1WITHRSA2048.code(), resolvedPubKey.getAlgorithm()); assertEquals(PKIAlgorithm.SHA1WITHRSA2048.code(), resolvedPubKey.getAlgorithm());
assertEquals((short) (SIGNATURE_ALGORITHM | ASYMMETRIC_KEY | ((byte) 31 & 0x00FF)), assertEquals((short) (SIGNATURE_ALGORITHM | ASYMMETRIC_KEY | ((byte) 31 & 0x00FF)),
resolvedPubKey.getAlgorithm()); resolvedPubKey.getAlgorithm());
assertArrayEquals(pubKeyBytes, resolvedPubKey.toBytes()); assertArrayEquals(pubKeyBytes, resolvedPubKey.toBytes());
}

@Test
public void supportDigestTest() {

byte[] data = new byte[1024];
Random random = new Random();
random.nextBytes(data);

CryptoAlgorithm algorithm = Crypto.getAlgorithm("SHA1WITHRSA2048");
assertNotNull(algorithm);

SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm);

AsymmetricKeypair keyPair = signatureFunction.generateKeypair();

PrivKey privKey = keyPair.getPrivKey();

SignatureDigest signatureDigest = signatureFunction.sign(privKey, data);


//supportDigestTest
byte[] signatureDigestBytes = signatureDigest.toBytes(); byte[] signatureDigestBytes = signatureDigest.toBytes();
assertTrue(signatureFunction.supportDigest(signatureDigestBytes)); assertTrue(signatureFunction.supportDigest(signatureDigestBytes));
}

@Test
public void resolveDigestTest() {

byte[] data = new byte[1024];
Random random = new Random();
random.nextBytes(data);

CryptoAlgorithm algorithm = Crypto.getAlgorithm("SHA1WITHRSA2048");
assertNotNull(algorithm);

SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm);

AsymmetricKeypair keyPair = signatureFunction.generateKeypair();

PrivKey privKey = keyPair.getPrivKey();

SignatureDigest signatureDigest = signatureFunction.sign(privKey, data);

byte[] signatureDigestBytes = signatureDigest.toBytes();


// resolveDigestTest
SignatureDigest resolvedSignatureDigest = signatureFunction.resolveDigest(signatureDigestBytes); SignatureDigest resolvedSignatureDigest = signatureFunction.resolveDigest(signatureDigestBytes);

assertEquals(256, resolvedSignatureDigest.getRawDigest().length); assertEquals(256, resolvedSignatureDigest.getRawDigest().length);
assertEquals(PKIAlgorithm.SHA1WITHRSA2048.code(), resolvedSignatureDigest.getAlgorithm()); assertEquals(PKIAlgorithm.SHA1WITHRSA2048.code(), resolvedSignatureDigest.getAlgorithm());
assertEquals((short) (SIGNATURE_ALGORITHM | ASYMMETRIC_KEY | ((byte) 31 & 0x00FF)), assertEquals((short) (SIGNATURE_ALGORITHM | ASYMMETRIC_KEY | ((byte) 31 & 0x00FF)),


+ 9
- 77
source/crypto/crypto-pki/src/test/java/com/jd/blockchain/crypto/service/pki/SHA1WITHRSA4096SignatureFunctionTest.java View File

@@ -20,9 +20,6 @@ import static org.junit.Assert.*;
*/ */
public class SHA1WITHRSA4096SignatureFunctionTest { public class SHA1WITHRSA4096SignatureFunctionTest {


private AsymmetricKeypair keyPair = Crypto.getSignatureFunction(Crypto.getAlgorithm("SHA1WITHRSA4096")).
generateKeypair();

@Test @Test
public void getAlgorithmTest() { public void getAlgorithmTest() {


@@ -44,12 +41,14 @@ public class SHA1WITHRSA4096SignatureFunctionTest {
assertNull(algorithm); assertNull(algorithm);
} }


@Test
//@Test
public void generateKeyPairTest() { public void generateKeyPairTest() {


CryptoAlgorithm algorithm = Crypto.getAlgorithm("SHA1WITHRSA4096"); CryptoAlgorithm algorithm = Crypto.getAlgorithm("SHA1WITHRSA4096");
assertNotNull(algorithm); assertNotNull(algorithm);


AsymmetricKeypair keyPair = Crypto.getSignatureFunction(algorithm).generateKeypair();

PubKey pubKey = keyPair.getPubKey(); PubKey pubKey = keyPair.getPubKey();
PrivKey privKey = keyPair.getPrivKey(); PrivKey privKey = keyPair.getPrivKey();


@@ -68,125 +67,58 @@ public class SHA1WITHRSA4096SignatureFunctionTest {
byte[] rawPrivKeyBytes = privKey.getRawKeyBytes(); byte[] rawPrivKeyBytes = privKey.getRawKeyBytes();
assertArrayEquals(BytesUtils.concat(algoBytes, pubKeyTypeBytes, rawPubKeyBytes), pubKey.toBytes()); assertArrayEquals(BytesUtils.concat(algoBytes, pubKeyTypeBytes, rawPubKeyBytes), pubKey.toBytes());
assertArrayEquals(BytesUtils.concat(algoBytes, privKeyTypeBytes, rawPrivKeyBytes), privKey.toBytes()); assertArrayEquals(BytesUtils.concat(algoBytes, privKeyTypeBytes, rawPrivKeyBytes), privKey.toBytes());
}

@Test
public void retrievePubKeyTest() {

CryptoAlgorithm algorithm = Crypto.getAlgorithm("SHA1WITHRSA4096");
assertNotNull(algorithm);


// retrievePubKeyTest
SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm); SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm);

PubKey pubKey = keyPair.getPubKey();
PrivKey privKey = keyPair.getPrivKey();

PubKey retrievedPubKey = signatureFunction.retrievePubKey(privKey); PubKey retrievedPubKey = signatureFunction.retrievePubKey(privKey);

assertEquals(pubKey.getKeyType(), retrievedPubKey.getKeyType()); assertEquals(pubKey.getKeyType(), retrievedPubKey.getKeyType());
assertEquals(pubKey.getRawKeyBytes().length, retrievedPubKey.getRawKeyBytes().length); assertEquals(pubKey.getRawKeyBytes().length, retrievedPubKey.getRawKeyBytes().length);
assertEquals(pubKey.getAlgorithm(), retrievedPubKey.getAlgorithm()); assertEquals(pubKey.getAlgorithm(), retrievedPubKey.getAlgorithm());
assertArrayEquals(pubKey.toBytes(), retrievedPubKey.toBytes()); assertArrayEquals(pubKey.toBytes(), retrievedPubKey.toBytes());
}


@Test
public void signAndVerifyTest() {


// signAndVerifyTest
byte[] data = new byte[1024]; byte[] data = new byte[1024];
Random random = new Random(); Random random = new Random();
random.nextBytes(data); random.nextBytes(data);


CryptoAlgorithm algorithm = Crypto.getAlgorithm("SHA1WITHRSA4096");
assertNotNull(algorithm);

SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm);

PrivKey privKey = keyPair.getPrivKey();
PubKey pubKey = keyPair.getPubKey();

SignatureDigest signatureDigest = signatureFunction.sign(privKey, data); SignatureDigest signatureDigest = signatureFunction.sign(privKey, data);

byte[] signatureBytes = signatureDigest.toBytes(); byte[] signatureBytes = signatureDigest.toBytes();

assertEquals(2 + 512, signatureBytes.length); assertEquals(2 + 512, signatureBytes.length);
assertEquals(algorithm.code(), signatureDigest.getAlgorithm()); assertEquals(algorithm.code(), signatureDigest.getAlgorithm());

assertEquals(PKIAlgorithm.SHA1WITHRSA4096.code(), signatureDigest.getAlgorithm()); assertEquals(PKIAlgorithm.SHA1WITHRSA4096.code(), signatureDigest.getAlgorithm());
assertEquals((short) (SIGNATURE_ALGORITHM | ASYMMETRIC_KEY | ((byte) 32 & 0x00FF)), assertEquals((short) (SIGNATURE_ALGORITHM | ASYMMETRIC_KEY | ((byte) 32 & 0x00FF)),
signatureDigest.getAlgorithm()); signatureDigest.getAlgorithm());

byte[] algoBytes = BytesUtils.toBytes(signatureDigest.getAlgorithm());
algoBytes = BytesUtils.toBytes(signatureDigest.getAlgorithm());
byte[] rawSinatureBytes = signatureDigest.getRawDigest(); byte[] rawSinatureBytes = signatureDigest.getRawDigest();
assertArrayEquals(BytesUtils.concat(algoBytes, rawSinatureBytes), signatureBytes); assertArrayEquals(BytesUtils.concat(algoBytes, rawSinatureBytes), signatureBytes);

assertTrue(signatureFunction.verify(signatureDigest, pubKey, data)); assertTrue(signatureFunction.verify(signatureDigest, pubKey, data));
}

@Test
public void supportAndResolvePrivKeyTest() {

CryptoAlgorithm algorithm = Crypto.getAlgorithm("SHA1WITHRSA4096");
assertNotNull(algorithm);


SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm);

PrivKey privKey = keyPair.getPrivKey();
// supportAndResolvePrivKeyTest
byte[] privKeyBytes = privKey.toBytes(); byte[] privKeyBytes = privKey.toBytes();

assertTrue(signatureFunction.supportPrivKey(privKeyBytes)); assertTrue(signatureFunction.supportPrivKey(privKeyBytes));

PrivKey resolvedPrivKey = signatureFunction.resolvePrivKey(privKeyBytes); PrivKey resolvedPrivKey = signatureFunction.resolvePrivKey(privKeyBytes);

assertEquals(PRIVATE.CODE, resolvedPrivKey.getKeyType().CODE); assertEquals(PRIVATE.CODE, resolvedPrivKey.getKeyType().CODE);
assertEquals(PKIAlgorithm.SHA1WITHRSA4096.code(), resolvedPrivKey.getAlgorithm()); assertEquals(PKIAlgorithm.SHA1WITHRSA4096.code(), resolvedPrivKey.getAlgorithm());
assertEquals((short) (SIGNATURE_ALGORITHM | ASYMMETRIC_KEY | ((byte) 32 & 0x00FF)), assertEquals((short) (SIGNATURE_ALGORITHM | ASYMMETRIC_KEY | ((byte) 32 & 0x00FF)),
resolvedPrivKey.getAlgorithm()); resolvedPrivKey.getAlgorithm());
assertArrayEquals(privKeyBytes, resolvedPrivKey.toBytes()); assertArrayEquals(privKeyBytes, resolvedPrivKey.toBytes());
}

@Test
public void supportAndResolvePubKeyTest() {


CryptoAlgorithm algorithm = Crypto.getAlgorithm("SHA1WITHRSA4096");
assertNotNull(algorithm);

SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm);

PubKey pubKey = keyPair.getPubKey();
// supportAndResolvePubKeyTest
byte[] pubKeyBytes = pubKey.toBytes(); byte[] pubKeyBytes = pubKey.toBytes();

assertTrue(signatureFunction.supportPubKey(pubKeyBytes)); assertTrue(signatureFunction.supportPubKey(pubKeyBytes));

PubKey resolvedPubKey = signatureFunction.resolvePubKey(pubKeyBytes); PubKey resolvedPubKey = signatureFunction.resolvePubKey(pubKeyBytes);

assertEquals(PUBLIC.CODE, resolvedPubKey.getKeyType().CODE); assertEquals(PUBLIC.CODE, resolvedPubKey.getKeyType().CODE);
assertEquals(PKIAlgorithm.SHA1WITHRSA4096.code(), resolvedPubKey.getAlgorithm()); assertEquals(PKIAlgorithm.SHA1WITHRSA4096.code(), resolvedPubKey.getAlgorithm());
assertEquals((short) (SIGNATURE_ALGORITHM | ASYMMETRIC_KEY | ((byte) 32 & 0x00FF)), assertEquals((short) (SIGNATURE_ALGORITHM | ASYMMETRIC_KEY | ((byte) 32 & 0x00FF)),
resolvedPubKey.getAlgorithm()); resolvedPubKey.getAlgorithm());
assertArrayEquals(pubKeyBytes, resolvedPubKey.toBytes()); assertArrayEquals(pubKeyBytes, resolvedPubKey.toBytes());
}

@Test
public void supportAndResolveDigestTest() {


byte[] data = new byte[1024];
Random random = new Random();
random.nextBytes(data);

CryptoAlgorithm algorithm = Crypto.getAlgorithm("SHA1WITHRSA4096");
assertNotNull(algorithm);

SignatureFunction signatureFunction = Crypto.getSignatureFunction(algorithm);

PrivKey privKey = keyPair.getPrivKey();

SignatureDigest signatureDigest = signatureFunction.sign(privKey, data);


// supportAndResolveDigestTest
byte[] signatureDigestBytes = signatureDigest.toBytes(); byte[] signatureDigestBytes = signatureDigest.toBytes();
assertTrue(signatureFunction.supportDigest(signatureDigestBytes)); assertTrue(signatureFunction.supportDigest(signatureDigestBytes));

SignatureDigest resolvedSignatureDigest = signatureFunction.resolveDigest(signatureDigestBytes); SignatureDigest resolvedSignatureDigest = signatureFunction.resolveDigest(signatureDigestBytes);

assertEquals(512, resolvedSignatureDigest.getRawDigest().length); assertEquals(512, resolvedSignatureDigest.getRawDigest().length);
assertEquals(PKIAlgorithm.SHA1WITHRSA4096.code(), resolvedSignatureDigest.getAlgorithm()); assertEquals(PKIAlgorithm.SHA1WITHRSA4096.code(), resolvedSignatureDigest.getAlgorithm());
assertEquals((short) (SIGNATURE_ALGORITHM | ASYMMETRIC_KEY | ((byte) 32 & 0x00FF)), assertEquals((short) (SIGNATURE_ALGORITHM | ASYMMETRIC_KEY | ((byte) 32 & 0x00FF)),


+ 1
- 1
source/crypto/crypto-pki/src/test/java/com/jd/blockchain/crypto/utils/CSRBuilderTest.java View File

@@ -203,7 +203,7 @@ public class CSRBuilderTest {
} }




@Test
// @Test
public void SHA1withRSA4096CSRTest(){ public void SHA1withRSA4096CSRTest(){


String countryName = "CN"; String countryName = "CN";


Loading…
Cancel
Save