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