diff --git a/pom.xml b/pom.xml index bddd040..38cffd1 100644 --- a/pom.xml +++ b/pom.xml @@ -34,6 +34,11 @@ log4j 1.2.17 + + org.bouncycastle + bcprov-jdk15on + 1.60 + diff --git a/src/main/java/blockchain/user/CAEnrollement.java b/src/main/java/blockchain/user/CAEnrollement.java new file mode 100644 index 0000000..f923bab --- /dev/null +++ b/src/main/java/blockchain/user/CAEnrollement.java @@ -0,0 +1,27 @@ +package blockchain.user; + +import org.hyperledger.fabric.sdk.Enrollment; + +import java.io.Serializable; +import java.security.PrivateKey; + +public class CAEnrollement implements Enrollment, Serializable { + private static final long serialVersionUID = 550416591376968096L; + private PrivateKey privateKey; + private String cert; + + public CAEnrollement(PrivateKey pkey, String signedPem){ + this.privateKey=pkey; + this.cert=signedPem; + } + + @Override + public PrivateKey getKey() { + return privateKey; + } + + @Override + public String getCert() { + return cert; + } +} diff --git a/src/main/java/blockchain/utility/Util.java b/src/main/java/blockchain/utility/Util.java index 464c9b1..621e99f 100644 --- a/src/main/java/blockchain/utility/Util.java +++ b/src/main/java/blockchain/utility/Util.java @@ -1,10 +1,22 @@ package blockchain.utility; +import blockchain.user.CAEnrollement; import blockchain.user.UserContext; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Logger; +import org.bouncycastle.crypto.CryptoException; +import javax.xml.bind.DatatypeConverter; import java.io.*; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.security.KeyFactory; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.Security; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.PKCS8EncodedKeySpec; +import org.bouncycastle.jce.provider.BouncyCastleProvider; public class Util { private static Logger logger = Logger.getLogger(Util.class); @@ -84,4 +96,39 @@ public class Util { return userContext; } } + + public static CAEnrollement getEnrollement(String keyFolderPath, String keyFileName, String certFolderPath, String certFileName) throws IOException, NoSuchAlgorithmException, InvalidKeySpecException, CryptoException { + PrivateKey key = null; + String certificate = null; + InputStream isKey = null; + BufferedReader brKey = null; + + try{ + Security.addProvider(new BouncyCastleProvider()); + String keyPath = keyFolderPath+"/"+keyFileName; + isKey = new FileInputStream(keyPath); + brKey = new BufferedReader(new InputStreamReader(isKey)); + StringBuilder keyBuilder = new StringBuilder(); + + for(String line = brKey.readLine(); line != null; line = brKey.readLine()){ + if(line.indexOf("PRIVATE") == -1){ + keyBuilder.append(line); + } + } + + certificate = new String(Files.readAllBytes(Paths.get(certFolderPath,certFileName))); + + byte[] encoded = DatatypeConverter.parseBase64Binary(keyBuilder.toString()); + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encoded); + KeyFactory kf = KeyFactory.getInstance("ECDSA"); + key = kf.generatePrivate(keySpec); + + }finally { + isKey.close(); + brKey.close(); + } + + CAEnrollement enrollment = new CAEnrollement(key,certificate); + return enrollment; + } } diff --git a/src/test/java/blockchain/query/QueryTest.java b/src/test/java/blockchain/query/QueryTest.java index 7f5ff95..6af5304 100644 --- a/src/test/java/blockchain/query/QueryTest.java +++ b/src/test/java/blockchain/query/QueryTest.java @@ -10,6 +10,7 @@ import org.apache.log4j.Logger; import org.hyperledger.fabric.sdk.*; import org.junit.Test; +import java.io.File; import java.util.Collection; import java.util.Set; @@ -19,8 +20,26 @@ public class QueryTest { @Test public void TestAQueryChannels() { BasicConfigurator.configure(); - UserContext admin = Util.readUserContext(Config.ORG1,Config.ADMIN); + + //UserContext admin = Util.readUserContext(Config.ORG1,Config.ADMIN); + try{ + + //TEST FAILED + + UserContext admin = new UserContext(); + File pkFolder = new File(Config.ADMIN_KEY_PATH); + File[] pkFile = pkFolder.listFiles(); + File certFolder = new File(Config.ADMIN_CERT_PATH); + File[] certFile = certFolder.listFiles(); + admin.setName(Config.ADMIN); + admin.setMspId(Config.ORG1_MSP); + admin.setAffiliation(Config.ORG1); + Enrollment enrollAdmin = Util.getEnrollement(Config.ADMIN_KEY_PATH, pkFile[0].getName(), Config.ADMIN_CERT_PATH, certFile[0].getName()); + admin.setEnrollment(enrollAdmin); + + //END TEST + String chaincode = Config.CHAINCODE_NAME; FabricClientWrapper fabricClientWrapper = new FabricClientWrapper(admin); ChannelClientWrapper channelClientWrapper = fabricClientWrapper.createChannelClient(Config.CHANNEL_NAME); diff --git a/src/test/java/blockchain/utility/UtilEnrollTest.java b/src/test/java/blockchain/utility/UtilEnrollTest.java new file mode 100644 index 0000000..63d812b --- /dev/null +++ b/src/test/java/blockchain/utility/UtilEnrollTest.java @@ -0,0 +1,37 @@ +package blockchain.utility; + +import blockchain.configuration.Config; +import org.apache.log4j.BasicConfigurator; +import org.apache.log4j.Logger; +import org.hyperledger.fabric.sdk.Enrollment; +import org.junit.Test; + +import java.io.File; + +public class UtilEnrollTest { + private static Logger logger = Logger.getLogger(UtilTest.class); + + @Test + public void TestAGetEnrollement(){ + BasicConfigurator.configure(); + + try{ + logger.info("----- START TEST ----"); + File pkFolder = new File(Config.ADMIN_KEY_PATH); + File[] pkFile = pkFolder.listFiles(); + File certFolder = new File(Config.ADMIN_CERT_PATH); + File[] certFile = certFolder.listFiles(); + logger.info("----- GET ENROLLEMENT ----"); + Enrollment enrollAdmin = Util.getEnrollement(Config.ADMIN_KEY_PATH, pkFile[0].getName(), Config.ADMIN_CERT_PATH, certFile[0].getName()); + + logger.info("KEY : "+enrollAdmin.getKey()); + logger.info("CERT : "+enrollAdmin.getCert()); + + + }catch (Exception e){ + e.printStackTrace(); + } + + + } +} diff --git a/target/classes/blockchain/client/FabricClientWrapper.class b/target/classes/blockchain/client/FabricClientWrapper.class index 904b4f6..219bcf4 100644 Binary files a/target/classes/blockchain/client/FabricClientWrapper.class and b/target/classes/blockchain/client/FabricClientWrapper.class differ diff --git a/target/classes/blockchain/configuration/Config.class b/target/classes/blockchain/configuration/Config.class index e556f14..3e21f23 100644 Binary files a/target/classes/blockchain/configuration/Config.class and b/target/classes/blockchain/configuration/Config.class differ diff --git a/target/classes/blockchain/user/CAEnrollement.class b/target/classes/blockchain/user/CAEnrollement.class new file mode 100644 index 0000000..39c636c Binary files /dev/null and b/target/classes/blockchain/user/CAEnrollement.class differ diff --git a/target/classes/blockchain/utility/Util.class b/target/classes/blockchain/utility/Util.class index 3a430d4..b986232 100644 Binary files a/target/classes/blockchain/utility/Util.class and b/target/classes/blockchain/utility/Util.class differ diff --git a/target/test-classes/blockchain/query/QueryTest.class b/target/test-classes/blockchain/query/QueryTest.class index 18780f1..f3af98d 100644 Binary files a/target/test-classes/blockchain/query/QueryTest.class and b/target/test-classes/blockchain/query/QueryTest.class differ diff --git a/target/test-classes/blockchain/utility/UtilEnrollTest.class b/target/test-classes/blockchain/utility/UtilEnrollTest.class new file mode 100644 index 0000000..d94a6a3 Binary files /dev/null and b/target/test-classes/blockchain/utility/UtilEnrollTest.class differ