├── README.md ├── code ├── chaincode │ ├── command_cli.txt │ ├── deployMyCC.sh │ ├── src │ │ ├── medical.go │ │ ├── secondgo.go │ │ └── t.go │ └── test_network │ │ ├── createChannel.sh │ │ ├── deployCC.sh │ │ ├── envVar.sh │ │ ├── fabcar.go │ │ └── network.sh ├── medical │ ├── .classpath │ ├── .gitignore │ ├── .project │ ├── .settings │ │ ├── .jsdtscope │ │ ├── org.eclipse.core.resources.prefs │ │ ├── org.eclipse.jdt.core.prefs │ │ ├── org.eclipse.m2e.core.prefs │ │ ├── org.eclipse.wst.common.component │ │ ├── org.eclipse.wst.common.project.facet.core.xml │ │ ├── org.eclipse.wst.jsdt.ui.superType.container │ │ ├── org.eclipse.wst.jsdt.ui.superType.name │ │ └── org.eclipse.wst.validation.prefs │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── wow │ │ │ ├── controller │ │ │ ├── AdminController.java │ │ │ ├── DoctorController.java │ │ │ ├── PatientController.java │ │ │ └── UserController.java │ │ │ ├── entity │ │ │ ├── Authorize.java │ │ │ ├── BackJSON.java │ │ │ ├── CreateMedical.java │ │ │ ├── Doctor.java │ │ │ ├── Hospital.java │ │ │ ├── IIS.java │ │ │ ├── MedicalRecord.java │ │ │ ├── Patient.java │ │ │ ├── UserIN.java │ │ │ └── UserInfo.java │ │ │ ├── mapper │ │ │ ├── AdminMapper.java │ │ │ ├── DoctorMapper.java │ │ │ ├── PatientMapper.java │ │ │ └── UserMapper.java │ │ │ ├── service │ │ │ ├── AdminService.java │ │ │ ├── AdminServiceImpl.java │ │ │ ├── DoctorService.java │ │ │ ├── DoctorServiceImpl.java │ │ │ ├── PatientService.java │ │ │ ├── PatientServiceImpl.java │ │ │ ├── UserService.java │ │ │ └── UserServiceImpl.java │ │ │ └── util │ │ │ └── Value.java │ │ ├── resources │ │ ├── applicationContext.xml │ │ ├── connection.json │ │ ├── crypto-config │ │ │ ├── ordererOrganizations │ │ │ │ └── example.com │ │ │ │ │ ├── ca │ │ │ │ │ ├── ca.example.com-cert.pem │ │ │ │ │ └── priv_sk │ │ │ │ │ ├── msp │ │ │ │ │ ├── cacerts │ │ │ │ │ │ └── ca.example.com-cert.pem │ │ │ │ │ ├── config.yaml │ │ │ │ │ └── tlscacerts │ │ │ │ │ │ └── tlsca.example.com-cert.pem │ │ │ │ │ ├── orderers │ │ │ │ │ └── orderer.example.com │ │ │ │ │ │ ├── msp │ │ │ │ │ │ ├── cacerts │ │ │ │ │ │ │ └── ca.example.com-cert.pem │ │ │ │ │ │ ├── config.yaml │ │ │ │ │ │ ├── keystore │ │ │ │ │ │ │ └── priv_sk │ │ │ │ │ │ ├── signcerts │ │ │ │ │ │ │ └── orderer.example.com-cert.pem │ │ │ │ │ │ └── tlscacerts │ │ │ │ │ │ │ └── tlsca.example.com-cert.pem │ │ │ │ │ │ └── tls │ │ │ │ │ │ ├── ca.crt │ │ │ │ │ │ ├── server.crt │ │ │ │ │ │ └── server.key │ │ │ │ │ ├── tlsca │ │ │ │ │ ├── priv_sk │ │ │ │ │ └── tlsca.example.com-cert.pem │ │ │ │ │ └── users │ │ │ │ │ └── Admin@example.com │ │ │ │ │ ├── msp │ │ │ │ │ ├── cacerts │ │ │ │ │ │ └── ca.example.com-cert.pem │ │ │ │ │ ├── config.yaml │ │ │ │ │ ├── keystore │ │ │ │ │ │ └── priv_sk │ │ │ │ │ ├── signcerts │ │ │ │ │ │ └── Admin@example.com-cert.pem │ │ │ │ │ └── tlscacerts │ │ │ │ │ │ └── tlsca.example.com-cert.pem │ │ │ │ │ └── tls │ │ │ │ │ ├── ca.crt │ │ │ │ │ ├── client.crt │ │ │ │ │ └── client.key │ │ │ └── peerOrganizations │ │ │ │ ├── org1.example.com │ │ │ │ ├── ca │ │ │ │ │ ├── ca.org1.example.com-cert.pem │ │ │ │ │ └── priv_sk │ │ │ │ ├── msp │ │ │ │ │ ├── cacerts │ │ │ │ │ │ └── ca.org1.example.com-cert.pem │ │ │ │ │ ├── config.yaml │ │ │ │ │ └── tlscacerts │ │ │ │ │ │ └── tlsca.org1.example.com-cert.pem │ │ │ │ ├── peers │ │ │ │ │ └── peer0.org1.example.com │ │ │ │ │ │ ├── msp │ │ │ │ │ │ ├── cacerts │ │ │ │ │ │ │ └── ca.org1.example.com-cert.pem │ │ │ │ │ │ ├── config.yaml │ │ │ │ │ │ ├── keystore │ │ │ │ │ │ │ └── priv_sk │ │ │ │ │ │ ├── signcerts │ │ │ │ │ │ │ └── peer0.org1.example.com-cert.pem │ │ │ │ │ │ └── tlscacerts │ │ │ │ │ │ │ └── tlsca.org1.example.com-cert.pem │ │ │ │ │ │ └── tls │ │ │ │ │ │ ├── ca.crt │ │ │ │ │ │ ├── server.crt │ │ │ │ │ │ └── server.key │ │ │ │ ├── tlsca │ │ │ │ │ ├── priv_sk │ │ │ │ │ └── tlsca.org1.example.com-cert.pem │ │ │ │ └── users │ │ │ │ │ ├── Admin@org1.example.com │ │ │ │ │ ├── msp │ │ │ │ │ │ ├── cacerts │ │ │ │ │ │ │ └── ca.org1.example.com-cert.pem │ │ │ │ │ │ ├── config.yaml │ │ │ │ │ │ ├── keystore │ │ │ │ │ │ │ └── priv_sk │ │ │ │ │ │ ├── signcerts │ │ │ │ │ │ │ └── Admin@org1.example.com-cert.pem │ │ │ │ │ │ └── tlscacerts │ │ │ │ │ │ │ └── tlsca.org1.example.com-cert.pem │ │ │ │ │ └── tls │ │ │ │ │ │ ├── ca.crt │ │ │ │ │ │ ├── client.crt │ │ │ │ │ │ └── client.key │ │ │ │ │ └── User1@org1.example.com │ │ │ │ │ ├── msp │ │ │ │ │ ├── cacerts │ │ │ │ │ │ └── ca.org1.example.com-cert.pem │ │ │ │ │ ├── config.yaml │ │ │ │ │ ├── keystore │ │ │ │ │ │ └── priv_sk │ │ │ │ │ ├── signcerts │ │ │ │ │ │ └── User1@org1.example.com-cert.pem │ │ │ │ │ └── tlscacerts │ │ │ │ │ │ └── tlsca.org1.example.com-cert.pem │ │ │ │ │ └── tls │ │ │ │ │ ├── ca.crt │ │ │ │ │ ├── client.crt │ │ │ │ │ └── client.key │ │ │ │ └── org2.example.com │ │ │ │ ├── ca │ │ │ │ ├── ca.org2.example.com-cert.pem │ │ │ │ └── priv_sk │ │ │ │ ├── connection-org2.json │ │ │ │ ├── connection-org2.yaml │ │ │ │ ├── msp │ │ │ │ ├── cacerts │ │ │ │ │ └── ca.org2.example.com-cert.pem │ │ │ │ ├── config.yaml │ │ │ │ └── tlscacerts │ │ │ │ │ └── tlsca.org2.example.com-cert.pem │ │ │ │ ├── peers │ │ │ │ └── peer0.org2.example.com │ │ │ │ │ ├── msp │ │ │ │ │ ├── cacerts │ │ │ │ │ │ └── ca.org2.example.com-cert.pem │ │ │ │ │ ├── config.yaml │ │ │ │ │ ├── keystore │ │ │ │ │ │ └── priv_sk │ │ │ │ │ ├── signcerts │ │ │ │ │ │ └── peer0.org2.example.com-cert.pem │ │ │ │ │ └── tlscacerts │ │ │ │ │ │ └── tlsca.org2.example.com-cert.pem │ │ │ │ │ └── tls │ │ │ │ │ ├── ca.crt │ │ │ │ │ ├── server.crt │ │ │ │ │ └── server.key │ │ │ │ ├── tlsca │ │ │ │ ├── priv_sk │ │ │ │ └── tlsca.org2.example.com-cert.pem │ │ │ │ └── users │ │ │ │ ├── Admin@org2.example.com │ │ │ │ ├── msp │ │ │ │ │ ├── cacerts │ │ │ │ │ │ └── ca.org2.example.com-cert.pem │ │ │ │ │ ├── config.yaml │ │ │ │ │ ├── keystore │ │ │ │ │ │ └── priv_sk │ │ │ │ │ ├── signcerts │ │ │ │ │ │ └── Admin@org2.example.com-cert.pem │ │ │ │ │ └── tlscacerts │ │ │ │ │ │ └── tlsca.org2.example.com-cert.pem │ │ │ │ └── tls │ │ │ │ │ ├── ca.crt │ │ │ │ │ ├── client.crt │ │ │ │ │ └── client.key │ │ │ │ └── User1@org2.example.com │ │ │ │ ├── msp │ │ │ │ ├── cacerts │ │ │ │ │ └── ca.org2.example.com-cert.pem │ │ │ │ ├── config.yaml │ │ │ │ ├── keystore │ │ │ │ │ └── priv_sk │ │ │ │ ├── signcerts │ │ │ │ │ └── User1@org2.example.com-cert.pem │ │ │ │ └── tlscacerts │ │ │ │ │ └── tlsca.org2.example.com-cert.pem │ │ │ │ └── tls │ │ │ │ ├── ca.crt │ │ │ │ ├── client.crt │ │ │ │ └── client.key │ │ ├── db.properties │ │ ├── medical.sql │ │ ├── springmvc.xml │ │ └── spy.properties │ │ └── webapp │ │ ├── WEB-INF │ │ └── web.xml │ │ └── index.jsp ├── picture │ └── medical │ │ ├── 1591462996138test.JPG │ │ ├── 1591463212767test.JPG │ │ └── 1591468204842test.JPG └── server_api.json ├── picture ├── 1.1.PNG ├── 1.2.PNG ├── 2.1.PNG ├── 2.2.PNG ├── 2.3.PNG ├── 2.4.PNG ├── 2.5.PNG ├── 2.6.PNG ├── 3.1.PNG ├── 3.2.PNG ├── 3.3.PNG ├── 3.4.PNG ├── 3.5.PNG ├── 3.6.PNG ├── 4.1.PNG ├── 4.10.PNG ├── 4.2.PNG ├── 4.3.PNG ├── 4.4.PNG ├── 4.5.PNG ├── 4.6.PNG ├── 4.7.PNG ├── 4.8.PNG ├── 4.9.PNG ├── network_createchannel1.PNG ├── network_createchannel2.PNG ├── network_up.PNG ├── p-医生新建病历.png ├── p-医生查看已授权详细病历.png ├── p-患者同意授权.png ├── p-患者查询病历.png ├── p-签名.PNG ├── p-网络拓扑.PNG ├── p_校徽.jpg ├── 医生新建病历.PNG ├── 医生查看已授权列表.PNG ├── 医生查看已授权详细病历.PNG ├── 医生申请授权.PNG ├── 患者上传病历.PNG ├── 患者同意授权.PNG ├── 患者查询待授权列表.PNG ├── 患者查询待确认提交病历.PNG ├── 患者查询病历.PNG └── 用户注册测试.PNG ├── t.txt ├── wen.txt ├── 中期报告.doc ├── 任务书.doc ├── 基于区块链的医疗记录存储系统研究与开发-文本复制检测报告单(全文对照).htm ├── 外文翻译原文.pdf ├── 外文翻译译文.doc ├── 开题报告.doc ├── 数据结构.docx ├── 毕业论文-基于区块链的医疗记录存储系统研究与开发.doc ├── 电计1604-徐富-201645030.zip ├── 答辩.docx └── 答辩.pptx /README.md: -------------------------------------------------------------------------------- 1 | # graduate 2 | 毕业设计--基于区块链的医疗记录存储系统研究与开发 3 | 4 | If the business model is bad, it's still bad on the Internet. 5 | -------------------------------------------------------------------------------- /code/chaincode/command_cli.txt: -------------------------------------------------------------------------------- 1 | 2 | 在test-network目录下: 3 | export PATH=${PWD}/../bin:$PATH 4 | export FABRIC_CFG_PATH=$PWD/../config/ 5 | export CORE_PEER_TLS_ENABLED=true 6 | export CORE_PEER_LOCALMSPID="Org1MSP" 7 | export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt 8 | export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp 9 | export CORE_PEER_ADDRESS=localhost:7051 10 | 11 | peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls true --cafile /usr/file/gopath/test/hyperledger/fabric/scripts/fabric-samples/test-network/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n medical --peerAddresses localhost:7051 --tlsRootCertFiles /usr/file/gopath/test/hyperledger/fabric/scripts/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles /usr/file/gopath/test/hyperledger/fabric/scripts/fabric-samples/test-network/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"Args":["testInput","secondKey","secondValue"]}' 12 | 13 | peer chaincode query -C mychannel -n medical -c '{"Args":["testGet", "secondKey"]}' 14 | 15 | 上传病历:invoke: -c '{"Args": ["uploadMedicalRecord", "patientID1", "patientName1", "doctorName1", "createTime1", "medicalPicture1", "description1"]}' 16 | 查询病历:query: -c '{"Args": ["getRecordbyID", "patientID1"]}' 17 | 查询历史病历:query: -c '{"Args": ["getAllHistoryRecordbyID", "patientID1"]}' 18 | 19 | -------------------------------------------------------------------------------- /code/chaincode/src/medical.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import( 4 | "fmt" 5 | "encoding/json" 6 | 7 | "github.com/hyperledger/fabric-chaincode-go/shim" 8 | "github.com/hyperledger/fabric-protos-go/peer" 9 | ) 10 | 11 | type MedicalChainCode struct { 12 | } 13 | 14 | type MedicalRecord struct { 15 | PatientName string `json:"patientname"` 16 | DoctorName string `json:"doctorname"` 17 | CreateTime string `json:"createtime"` 18 | MedicalPicture string `json:"medicalpicture"` 19 | Description string `json:"description"` 20 | } 21 | 22 | func (m *MedicalChainCode) Init(stub shim.ChaincodeStubInterface) peer.Response { 23 | err := stub.PutState("firstKey", []byte("FirstValue")) 24 | if err != nil { 25 | return shim.Error(err.Error()) 26 | } 27 | fmt.Println("=========== success init ===============") 28 | return shim.Success(nil) 29 | } 30 | 31 | func (m *MedicalChainCode) Invoke(stub shim.ChaincodeStubInterface) peer.Response { 32 | // fmt.Println("=========== in invoke ==============") 33 | mFun, args := stub.GetFunctionAndParameters() 34 | switch { 35 | case "testInput" == mFun : 36 | return m.testInput(stub, args) 37 | case "testGet" == mFun : 38 | return m.testGet(stub, args[0]) 39 | case "uploadMedicalRecord" == mFun : 40 | return m.uploadMedicalRecord(stub, args) 41 | case "getRecordbyID" == mFun : 42 | return m.getRecordbyID(stub, args) 43 | case "getAllHistoryRecordbyID" == mFun : 44 | return m.getAllHistoryRecordbyID(stub, args) 45 | default : 46 | return shim.Error("no fun invoke") 47 | } 48 | // return shim.Success([]byte("success invoke")) 49 | } 50 | 51 | func (m *MedicalChainCode) testInput(stub shim.ChaincodeStubInterface, args []string) peer.Response { 52 | err := stub.PutState(args[0], []byte(args[1])) 53 | if err != nil { 54 | return shim.Error(err.Error()) 55 | } 56 | return shim.Success([]byte("test input success")) 57 | } 58 | 59 | func (m *MedicalChainCode) testGet(stub shim.ChaincodeStubInterface, arg string) peer.Response { 60 | value, err := stub.GetState(arg) 61 | if(err != nil) { 62 | return shim.Error(err.Error()) 63 | } 64 | return shim.Success(value) 65 | } 66 | 67 | func (m *MedicalChainCode) uploadMedicalRecord(stub shim.ChaincodeStubInterface, args []string) peer.Response { 68 | var newMedicalRecord = MedicalRecord { 69 | PatientName: args[1], 70 | DoctorName: args[2], 71 | CreateTime: args[3], 72 | MedicalPicture: args[4], 73 | Description: args[5], 74 | } 75 | // fmt.Printf("%s-%s-%s\n", args[0], newMedicalRecord.PatientName, newMedicalRecord.DoctorName) 76 | medicalRecordBytes, _ := json.Marshal(newMedicalRecord) 77 | // fmt.Println("=====>", medicalRecordBytes) 78 | err := stub.PutState(args[0], medicalRecordBytes) 79 | if err != nil { 80 | return shim.Error(err.Error()) 81 | } 82 | // fmt.Println("=========== uploadMedicalRecord success ==============") 83 | return shim.Success([]byte("success")) 84 | } 85 | 86 | func (m *MedicalChainCode) getRecordbyID(stub shim.ChaincodeStubInterface, args []string) peer.Response { 87 | if len(args) != 1 { 88 | return shim.Error("only one parameter required") 89 | } 90 | // fmt.Printf("id: %s\n", args[0]) 91 | medicalRecordBytes, err := stub.GetState(args[0]) 92 | // fmt.Println("=====>", medicalRecordBytes) 93 | if err != nil { 94 | fmt.Println("=========== error... ==============") 95 | return shim.Error(err.Error()) 96 | } 97 | tRecord := new(MedicalRecord) 98 | json.Unmarshal(medicalRecordBytes, tRecord) 99 | // fmt.Printf("%s-%s\n", tRecord.PatientName, tRecord.DoctorName) 100 | return shim.Success(medicalRecordBytes) 101 | } 102 | 103 | func (m *MedicalChainCode) getAllHistoryRecordbyID(stub shim.ChaincodeStubInterface, args []string) peer.Response { 104 | if len(args) != 1 { 105 | return shim.Error("only one parameter required") 106 | } 107 | // fmt.Printf("id: %s\n", args[0]) 108 | recordIterator, err := stub.GetHistoryForKey(args[0]) 109 | recordList := []MedicalRecord{} 110 | defer recordIterator.Close() 111 | if err != nil { 112 | return shim.Error(err.Error()) 113 | } 114 | for recordIterator.HasNext() { 115 | recordResponse, err := recordIterator.Next() 116 | if err != nil { 117 | return shim.Error(err.Error()) 118 | } 119 | tRecord := new(MedicalRecord) 120 | json.Unmarshal(recordResponse.Value, tRecord) 121 | recordList = append(recordList, *tRecord) 122 | } 123 | // fmt.Println(recordList) 124 | listBytes, _ := json.Marshal(recordList) 125 | return shim.Success(listBytes) 126 | } 127 | 128 | 129 | 130 | func main() { 131 | err := shim.Start(new(MedicalChainCode)) 132 | if err != nil { 133 | fmt.Printf("error start chaincode : %s", err) 134 | } 135 | } 136 | 137 | -------------------------------------------------------------------------------- /code/chaincode/src/secondgo.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import( 4 | "fmt" 5 | 6 | "github.com/hyperledger/fabric-chaincode-go/shim" 7 | "github.com/hyperledger/fabric-protos-go/peer" 8 | ) 9 | 10 | type MedicalChainCode struct { 11 | } 12 | 13 | func (m *MedicalChainCode) Init(stub shim.ChaincodeStubInterface) peer.Response { 14 | err := stub.PutState("firstKey", []byte("FirstValue")) 15 | if err != nil { 16 | return shim.Error(err.Error()) 17 | } 18 | fmt.Println("=========== success init ===============") 19 | return shim.Success(nil) 20 | } 21 | 22 | func (m *MedicalChainCode) Invoke(stub shim.ChaincodeStubInterface) peer.Response { 23 | fmt.Println("=========== in invoke ==============") 24 | mFun, args := stub.GetFunctionAndParameters() 25 | switch { 26 | case "testInput" == mFun : 27 | return m.testInput(stub, args) 28 | case "testGet" == mFun : 29 | return m.testGet(stub, args[0]) 30 | default : 31 | return shim.Error("no fun invoke") 32 | } 33 | // return shim.Success([]byte("success invoke")) 34 | } 35 | 36 | func (m *MedicalChainCode) testInput(stub shim.ChaincodeStubInterface, args []string) peer.Response { 37 | err := stub.PutState(args[0], []byte(args[1])) 38 | if err != nil { 39 | return shim.Error(err.Error()) 40 | } 41 | return shim.Success([]byte("test input success")) 42 | } 43 | 44 | func (m *MedicalChainCode) testGet(stub shim.ChaincodeStubInterface, arg string) peer.Response { 45 | value, err := stub.GetState(arg) 46 | if(err != nil) { 47 | return shim.Error(err.Error()) 48 | } 49 | return shim.Success(value) 50 | } 51 | 52 | func main() { 53 | err := shim.Start(new(MedicalChainCode)) 54 | if err != nil { 55 | fmt.Printf("error start chaincode : %s", err) 56 | } 57 | } 58 | 59 | -------------------------------------------------------------------------------- /code/chaincode/src/t.go: -------------------------------------------------------------------------------- 1 | func (m *MedicalChainCode) getAllHistoryRecordbyID(stub shim.ChaincodeStubInterface, args []string) peer.Response { 2 | if len(args) != 1 { 3 | return shim.Error("only one parameter required") 4 | } 5 | recordIterator, err := stub.GetHistoryForKey(args[0]) 6 | defer recordIterator.Close() 7 | if err != nil { 8 | return shim.Error(err.Error()) 9 | } 10 | var resultBuffer bytes.Buffer 11 | resultBuffer.WriteString("[") 12 | if recordIterator.HasNext() { 13 | record, err := recordIterator.Next() 14 | if err != nil { 15 | return shim.Error(err.Error()) 16 | } 17 | resultBuffer.WriteString("{") 18 | resultBuffer.WriteString("\"key\":") 19 | resultBuffer.WriteString(record.Key) 20 | resultBuffer.WriteString(", \"record\":") 21 | resultBuffer.WriteString(string(record.Value)) 22 | resultBuffer.WriteString("}") 23 | for recordIterator.HasNext() { 24 | record, err = recordIterator.Next() 25 | if err != nil { 26 | return shim.Error(err.Error()) 27 | } 28 | resultBuffer.WriteString(", {\"key\":") 29 | resultBuffer.WriteString(record.Key) 30 | resultBuffer.WriteString(", \"record\":") 31 | resultBuffer.WriteString(string(record.Value)) 32 | resultBuffer.WriteString("}") 33 | } 34 | } 35 | resultBuffer.WriteString("]") 36 | return shim.Success(resultBuffer.Bytes()) 37 | } -------------------------------------------------------------------------------- /code/chaincode/test_network/createChannel.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | 4 | CHANNEL_NAME="$1" 5 | DELAY="$2" 6 | MAX_RETRY="$3" 7 | VERBOSE="$4" 8 | : ${CHANNEL_NAME:="mychannel"} 9 | : ${DELAY:="3"} 10 | : ${MAX_RETRY:="5"} 11 | : ${VERBOSE:="false"} 12 | 13 | # import utils 14 | . scripts/envVar.sh 15 | 16 | if [ ! -d "channel-artifacts" ]; then 17 | mkdir channel-artifacts 18 | fi 19 | 20 | createChannelTx() { 21 | 22 | set -x 23 | configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/${CHANNEL_NAME}.tx -channelID $CHANNEL_NAME 24 | res=$? 25 | set +x 26 | if [ $res -ne 0 ]; then 27 | echo "Failed to generate channel configuration transaction..." 28 | exit 1 29 | fi 30 | echo 31 | 32 | } 33 | 34 | createAncorPeerTx() { 35 | 36 | for orgmsp in Org1MSP Org2MSP; do 37 | 38 | echo "####### Generating anchor peer update for ${orgmsp} ##########" 39 | set -x 40 | configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/${orgmsp}anchors.tx -channelID $CHANNEL_NAME -asOrg ${orgmsp} 41 | res=$? 42 | set +x 43 | if [ $res -ne 0 ]; then 44 | echo "Failed to generate anchor peer update for ${orgmsp}..." 45 | exit 1 46 | fi 47 | echo 48 | done 49 | } 50 | 51 | createChannel() { 52 | setGlobals 1 53 | # Poll in case the raft leader is not set yet 54 | local rc=1 55 | local COUNTER=1 56 | while [ $rc -ne 0 -a $COUNTER -lt $MAX_RETRY ] ; do 57 | sleep $DELAY 58 | set -x 59 | peer channel create -o localhost:7050 -c $CHANNEL_NAME --ordererTLSHostnameOverride orderer.example.com -f ./channel-artifacts/${CHANNEL_NAME}.tx --outputBlock ./channel-artifacts/${CHANNEL_NAME}.block --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA >&log.txt 60 | res=$? 61 | set +x 62 | let rc=$res 63 | COUNTER=$(expr $COUNTER + 1) 64 | done 65 | cat log.txt 66 | verifyResult $res "Channel creation failed" 67 | echo 68 | echo "===================== Channel '$CHANNEL_NAME' created ===================== " 69 | echo 70 | } 71 | 72 | # queryCommitted ORG 73 | joinChannel() { 74 | ORG=$1 75 | setGlobals $ORG 76 | local rc=1 77 | local COUNTER=1 78 | ## Sometimes Join takes time, hence retry 79 | while [ $rc -ne 0 -a $COUNTER -lt $MAX_RETRY ] ; do 80 | sleep $DELAY 81 | set -x 82 | peer channel join -b ./channel-artifacts/$CHANNEL_NAME.block >&log.txt 83 | res=$? 84 | set +x 85 | let rc=$res 86 | COUNTER=$(expr $COUNTER + 1) 87 | done 88 | cat log.txt 89 | echo 90 | verifyResult $res "After $MAX_RETRY attempts, peer0.org${ORG} has failed to join channel '$CHANNEL_NAME' " 91 | } 92 | 93 | updateAnchorPeers() { 94 | ORG=$1 95 | setGlobals $ORG 96 | local rc=1 97 | local COUNTER=1 98 | ## Sometimes Join takes time, hence retry 99 | while [ $rc -ne 0 -a $COUNTER -lt $MAX_RETRY ] ; do 100 | sleep $DELAY 101 | set -x 102 | peer channel update -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com -c $CHANNEL_NAME -f ./channel-artifacts/${CORE_PEER_LOCALMSPID}anchors.tx --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA >&log.txt 103 | res=$? 104 | set +x 105 | let rc=$res 106 | COUNTER=$(expr $COUNTER + 1) 107 | done 108 | cat log.txt 109 | verifyResult $res "Anchor peer update failed" 110 | echo "===================== Anchor peers updated for org '$CORE_PEER_LOCALMSPID' on channel '$CHANNEL_NAME' ===================== " 111 | sleep $DELAY 112 | echo 113 | } 114 | 115 | verifyResult() { 116 | if [ $1 -ne 0 ]; then 117 | echo "!!!!!!!!!!!!!!! "$2" !!!!!!!!!!!!!!!!" 118 | echo 119 | exit 1 120 | fi 121 | } 122 | 123 | FABRIC_CFG_PATH=${PWD}/configtx 124 | 125 | ## Create channeltx 126 | echo "### Generating channel configuration transaction '${CHANNEL_NAME}.tx' ###" 127 | createChannelTx 128 | 129 | ## Create anchorpeertx 130 | echo "### Generating channel configuration transaction '${CHANNEL_NAME}.tx' ###" 131 | createAncorPeerTx 132 | 133 | FABRIC_CFG_PATH=$PWD/../config/ 134 | 135 | ## Create channel 136 | echo "Creating channel "$CHANNEL_NAME 137 | createChannel 138 | 139 | ## Join all the peers to the channel 140 | echo "Join Org1 peers to the channel..." 141 | joinChannel 1 142 | echo "Join Org2 peers to the channel..." 143 | joinChannel 2 144 | 145 | ## Set the anchor peers for each org in the channel 146 | echo "Updating anchor peers for org1..." 147 | updateAnchorPeers 1 148 | echo "Updating anchor peers for org2..." 149 | updateAnchorPeers 2 150 | 151 | echo 152 | echo "========= Channel successfully joined =========== " 153 | echo 154 | 155 | exit 0 156 | -------------------------------------------------------------------------------- /code/chaincode/test_network/envVar.sh: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright IBM Corp All Rights Reserved 3 | # 4 | # SPDX-License-Identifier: Apache-2.0 5 | # 6 | 7 | # This is a collection of bash functions used by different scripts 8 | 9 | export CORE_PEER_TLS_ENABLED=true 10 | export ORDERER_CA=${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem 11 | export PEER0_ORG1_CA=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt 12 | export PEER0_ORG2_CA=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt 13 | export PEER0_ORG3_CA=${PWD}/organizations/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/ca.crt 14 | 15 | # Set OrdererOrg.Admin globals 16 | setOrdererGlobals() { 17 | export CORE_PEER_LOCALMSPID="OrdererMSP" 18 | export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem 19 | export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/ordererOrganizations/example.com/users/Admin@example.com/msp 20 | } 21 | 22 | # Set environment variables for the peer org 23 | setGlobals() { 24 | local USING_ORG="" 25 | if [ -z "$OVERRIDE_ORG" ]; then 26 | USING_ORG=$1 27 | else 28 | USING_ORG="${OVERRIDE_ORG}" 29 | fi 30 | echo "Using organization ${USING_ORG}" 31 | if [ $USING_ORG -eq 1 ]; then 32 | export CORE_PEER_LOCALMSPID="Org1MSP" 33 | export CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG1_CA 34 | export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp 35 | export CORE_PEER_ADDRESS=localhost:7051 36 | elif [ $USING_ORG -eq 2 ]; then 37 | export CORE_PEER_LOCALMSPID="Org2MSP" 38 | export CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG2_CA 39 | export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp 40 | export CORE_PEER_ADDRESS=localhost:9051 41 | 42 | elif [ $USING_ORG -eq 3 ]; then 43 | export CORE_PEER_LOCALMSPID="Org3MSP" 44 | export CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG3_CA 45 | export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org3.example.com/users/Admin@org3.example.com/msp 46 | export CORE_PEER_ADDRESS=localhost:11051 47 | else 48 | echo "================== ERROR !!! ORG Unknown ==================" 49 | fi 50 | 51 | if [ "$VERBOSE" == "true" ]; then 52 | env | grep CORE 53 | fi 54 | } 55 | 56 | # parsePeerConnectionParameters $@ 57 | # Helper function that sets the peer connection parameters for a chaincode 58 | # operation 59 | parsePeerConnectionParameters() { 60 | 61 | PEER_CONN_PARMS="" 62 | PEERS="" 63 | while [ "$#" -gt 0 ]; do 64 | setGlobals $1 65 | PEER="peer0.org$1" 66 | ## Set peer adresses 67 | PEERS="$PEERS $PEER" 68 | PEER_CONN_PARMS="$PEER_CONN_PARMS --peerAddresses $CORE_PEER_ADDRESS" 69 | ## Set path to TLS certificate 70 | TLSINFO=$(eval echo "--tlsRootCertFiles \$PEER0_ORG$1_CA") 71 | PEER_CONN_PARMS="$PEER_CONN_PARMS $TLSINFO" 72 | # shift by one to get to the next organization 73 | shift 74 | done 75 | # remove leading space for output 76 | PEERS="$(echo -e "$PEERS" | sed -e 's/^[[:space:]]*//')" 77 | } 78 | 79 | verifyResult() { 80 | if [ $1 -ne 0 ]; then 81 | echo "!!!!!!!!!!!!!!! "$2" !!!!!!!!!!!!!!!!" 82 | echo 83 | exit 1 84 | fi 85 | } 86 | -------------------------------------------------------------------------------- /code/chaincode/test_network/fabcar.go: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one 3 | * or more contributor license agreements. See the NOTICE file 4 | * distributed with this work for additional information 5 | * regarding copyright ownership. The ASF licenses this file 6 | * to you under the Apache License, Version 2.0 (the 7 | * "License"); you may not use this file except in compliance 8 | * with the License. You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, 13 | * software distributed under the License is distributed on an 14 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 | * KIND, either express or implied. See the License for the 16 | * specific language governing permissions and limitations 17 | * under the License. 18 | */ 19 | 20 | package main 21 | 22 | import ( 23 | "encoding/json" 24 | "fmt" 25 | "strconv" 26 | 27 | "github.com/hyperledger/fabric-contract-api-go/contractapi" 28 | ) 29 | 30 | // SmartContract provides functions for managing a car 31 | type SmartContract struct { 32 | contractapi.Contract 33 | } 34 | 35 | // Car describes basic details of what makes up a car 36 | type Car struct { 37 | Make string `json:"make"` 38 | Model string `json:"model"` 39 | Colour string `json:"colour"` 40 | Owner string `json:"owner"` 41 | } 42 | 43 | // QueryResult structure used for handling result of query 44 | type QueryResult struct { 45 | Key string `json:"Key"` 46 | Record *Car 47 | } 48 | 49 | // InitLedger adds a base set of cars to the ledger 50 | func (s *SmartContract) InitLedger(ctx contractapi.TransactionContextInterface) error { 51 | cars := []Car{ 52 | Car{Make: "Toyota", Model: "Prius", Colour: "blue", Owner: "Tomoko"}, 53 | Car{Make: "Ford", Model: "Mustang", Colour: "red", Owner: "Brad"}, 54 | Car{Make: "Hyundai", Model: "Tucson", Colour: "green", Owner: "Jin Soo"}, 55 | Car{Make: "Volkswagen", Model: "Passat", Colour: "yellow", Owner: "Max"}, 56 | Car{Make: "Tesla", Model: "S", Colour: "black", Owner: "Adriana"}, 57 | Car{Make: "Peugeot", Model: "205", Colour: "purple", Owner: "Michel"}, 58 | Car{Make: "Chery", Model: "S22L", Colour: "white", Owner: "Aarav"}, 59 | Car{Make: "Fiat", Model: "Punto", Colour: "violet", Owner: "Pari"}, 60 | Car{Make: "Tata", Model: "Nano", Colour: "indigo", Owner: "Valeria"}, 61 | Car{Make: "Holden", Model: "Barina", Colour: "brown", Owner: "Shotaro"}, 62 | } 63 | 64 | for i, car := range cars { 65 | carAsBytes, _ := json.Marshal(car) 66 | err := ctx.GetStub().PutState("CAR"+strconv.Itoa(i), carAsBytes) 67 | 68 | if err != nil { 69 | return fmt.Errorf("Failed to put to world state. %s", err.Error()) 70 | } 71 | } 72 | 73 | return nil 74 | } 75 | 76 | // CreateCar adds a new car to the world state with given details 77 | func (s *SmartContract) CreateCar(ctx contractapi.TransactionContextInterface, carNumber string, make string, model string, colour string, owner string) error { 78 | car := Car{ 79 | Make: make, 80 | Model: model, 81 | Colour: colour, 82 | Owner: owner, 83 | } 84 | 85 | carAsBytes, _ := json.Marshal(car) 86 | 87 | return ctx.GetStub().PutState(carNumber, carAsBytes) 88 | } 89 | 90 | // QueryCar returns the car stored in the world state with given id 91 | func (s *SmartContract) QueryCar(ctx contractapi.TransactionContextInterface, carNumber string) (*Car, error) { 92 | carAsBytes, err := ctx.GetStub().GetState(carNumber) 93 | 94 | if err != nil { 95 | return nil, fmt.Errorf("Failed to read from world state. %s", err.Error()) 96 | } 97 | 98 | if carAsBytes == nil { 99 | return nil, fmt.Errorf("%s does not exist", carNumber) 100 | } 101 | 102 | car := new(Car) 103 | _ = json.Unmarshal(carAsBytes, car) 104 | 105 | return car, nil 106 | } 107 | 108 | // QueryAllCars returns all cars found in world state 109 | func (s *SmartContract) QueryAllCars(ctx contractapi.TransactionContextInterface) ([]QueryResult, error) { 110 | startKey := "CAR0" 111 | endKey := "CAR99" 112 | 113 | resultsIterator, err := ctx.GetStub().GetStateByRange(startKey, endKey) 114 | 115 | if err != nil { 116 | return nil, err 117 | } 118 | defer resultsIterator.Close() 119 | 120 | results := []QueryResult{} 121 | 122 | for resultsIterator.HasNext() { 123 | queryResponse, err := resultsIterator.Next() 124 | 125 | if err != nil { 126 | return nil, err 127 | } 128 | 129 | car := new(Car) 130 | _ = json.Unmarshal(queryResponse.Value, car) 131 | 132 | queryResult := QueryResult{Key: queryResponse.Key, Record: car} 133 | results = append(results, queryResult) 134 | } 135 | 136 | return results, nil 137 | } 138 | 139 | // ChangeCarOwner updates the owner field of car with given id in world state 140 | func (s *SmartContract) ChangeCarOwner(ctx contractapi.TransactionContextInterface, carNumber string, newOwner string) error { 141 | car, err := s.QueryCar(ctx, carNumber) 142 | 143 | if err != nil { 144 | return err 145 | } 146 | 147 | car.Owner = newOwner 148 | 149 | carAsBytes, _ := json.Marshal(car) 150 | 151 | return ctx.GetStub().PutState(carNumber, carAsBytes) 152 | } 153 | 154 | func main() { 155 | 156 | chaincode, err := contractapi.NewChaincode(new(SmartContract)) 157 | 158 | if err != nil { 159 | fmt.Printf("Error create fabcar chaincode: %s", err.Error()) 160 | return 161 | } 162 | 163 | if err := chaincode.Start(); err != nil { 164 | fmt.Printf("Error starting fabcar chaincode: %s", err.Error()) 165 | } 166 | } 167 | -------------------------------------------------------------------------------- /code/medical/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /code/medical/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | -------------------------------------------------------------------------------- /code/medical/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | medical 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.wst.common.project.facet.core.builder 15 | 16 | 17 | 18 | 19 | org.eclipse.wst.validation.validationbuilder 20 | 21 | 22 | 23 | 24 | org.eclipse.m2e.core.maven2Builder 25 | 26 | 27 | 28 | 29 | 30 | org.eclipse.jem.workbench.JavaEMFNature 31 | org.eclipse.wst.common.modulecore.ModuleCoreNature 32 | org.eclipse.jdt.core.javanature 33 | org.eclipse.m2e.core.maven2Nature 34 | org.eclipse.wst.common.project.facet.core.nature 35 | org.eclipse.wst.jsdt.core.jsNature 36 | 37 | 38 | -------------------------------------------------------------------------------- /code/medical/.settings/.jsdtscope: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /code/medical/.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding//src/main/java=utf8 3 | encoding//src/main/resources=utf8 4 | encoding//src/test/java=utf8 5 | encoding/=utf8 6 | -------------------------------------------------------------------------------- /code/medical/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.compliance=1.8 5 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 6 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 7 | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning 8 | org.eclipse.jdt.core.compiler.source=1.8 9 | -------------------------------------------------------------------------------- /code/medical/.settings/org.eclipse.m2e.core.prefs: -------------------------------------------------------------------------------- 1 | activeProfiles= 2 | eclipse.preferences.version=1 3 | resolveWorkspaceProjects=true 4 | version=1 5 | -------------------------------------------------------------------------------- /code/medical/.settings/org.eclipse.wst.common.component: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /code/medical/.settings/org.eclipse.wst.common.project.facet.core.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /code/medical/.settings/org.eclipse.wst.jsdt.ui.superType.container: -------------------------------------------------------------------------------- 1 | org.eclipse.wst.jsdt.launching.baseBrowserLibrary -------------------------------------------------------------------------------- /code/medical/.settings/org.eclipse.wst.jsdt.ui.superType.name: -------------------------------------------------------------------------------- 1 | Window -------------------------------------------------------------------------------- /code/medical/.settings/org.eclipse.wst.validation.prefs: -------------------------------------------------------------------------------- 1 | disabled=06target 2 | eclipse.preferences.version=1 3 | -------------------------------------------------------------------------------- /code/medical/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | wow 5 | medical 6 | war 7 | 0.0.1-SNAPSHOT 8 | medical Maven Webapp 9 | http://maven.apache.org 10 | 11 | 12 | utf8 13 | utf8 14 | 4.3.20.RELEASE 15 | 2.9.6 16 | 17 | 18 | 19 | 20 | junit 21 | junit 22 | 3.8.1 23 | test 24 | 25 | 26 | org.springframework 27 | spring-context 28 | ${spring.version} 29 | 30 | 31 | 32 | commons-logging 33 | commons-logging 34 | 35 | 36 | 37 | 38 | org.springframework 39 | spring-web 40 | ${spring.version} 41 | 42 | 43 | org.springframework 44 | spring-webmvc 45 | ${spring.version} 46 | 47 | 48 | org.springframework 49 | spring-aop 50 | ${spring.version} 51 | 52 | 53 | org.springframework 54 | spring-beans 55 | ${spring.version} 56 | 57 | 58 | org.springframework 59 | spring-core 60 | ${spring.version} 61 | 62 | 63 | org.springframework 64 | spring-jdbc 65 | ${spring.version} 66 | 67 | 68 | org.springframework 69 | spring-tx 70 | ${spring.version} 71 | 72 | 73 | org.springframework 74 | spring-orm 75 | ${spring.version} 76 | 77 | 78 | org.springframework 79 | spring-context-support 80 | ${spring.version} 81 | 82 | 83 | org.springframework 84 | spring-aspects 85 | ${spring.version} 86 | 87 | 88 | commons-fileupload 89 | commons-fileupload 90 | 1.3.1 91 | 92 | 93 | commons-logging 94 | commons-logging 95 | 1.2 96 | 97 | 98 | commons-collections 99 | commons-collections 100 | 3.2.2 101 | 102 | 103 | commons-io 104 | commons-io 105 | 2.4 106 | 107 | 108 | commons-dbcp 109 | commons-dbcp 110 | 1.4 111 | 112 | 113 | commons-pool 114 | commons-pool 115 | 1.6 116 | 117 | 118 | commons-lang 119 | commons-lang 120 | 2.6 121 | 122 | 123 | org.jboss.logging 124 | jboss-logging 125 | 3.3.2.Final 126 | 127 | 128 | mysql 129 | mysql-connector-java 130 | 5.1.38 131 | 132 | 133 | org.mybatis 134 | mybatis-spring 135 | 1.3.1 136 | 137 | 138 | org.mybatis 139 | mybatis 140 | 3.4.5 141 | 142 | 143 | com.fasterxml.jackson.core 144 | jackson-databind 145 | 2.9.6 146 | 147 | 148 | com.fasterxml.jackson.core 149 | jackson-core 150 | 2.9.6 151 | 152 | 153 | com.fasterxml.jackson.core 154 | jackson-annotations 155 | 2.9.6 156 | 157 | 158 | org.codehaus.jackson 159 | jackson-core-asl 160 | 1.9.13 161 | 162 | 163 | org.codehaus.jackson 164 | jackson-mapper-asl 165 | 1.9.13 166 | 167 | 168 | 173 | 174 | javax.servlet 175 | javax.servlet-api 176 | 3.0.1 177 | provided 178 | 179 | 180 | jstl 181 | jstl 182 | 1.2 183 | 184 | 185 | p6spy 186 | p6spy 187 | 3.6.0 188 | 189 | 190 | org.hibernate 191 | hibernate-validator 192 | 5.4.1.Final 193 | 194 | 195 | com.alibaba 196 | fastjson 197 | 1.2.47 198 | 199 | 200 | 201 | org.hyperledger.fabric 202 | fabric-gateway-java 203 | 2.0.0 204 | 205 | 206 | 207 | 208 | medical 209 | 210 | 211 | 212 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/controller/AdminController.java: -------------------------------------------------------------------------------- 1 | package wow.controller; 2 | 3 | import java.io.PrintWriter; 4 | import java.nio.charset.StandardCharsets; 5 | 6 | import javax.servlet.http.HttpServletResponse; 7 | 8 | import org.hyperledger.fabric.gateway.Contract; 9 | import org.springframework.beans.factory.annotation.Autowired; 10 | import org.springframework.web.bind.annotation.GetMapping; 11 | import org.springframework.web.bind.annotation.RequestMapping; 12 | import org.springframework.web.bind.annotation.RestController; 13 | 14 | import com.alibaba.fastjson.JSONObject; 15 | 16 | import wow.entity.BackJSON; 17 | import wow.entity.MedicalRecord; 18 | import wow.service.AdminService; 19 | import wow.util.Value; 20 | 21 | /** 22 | * 管理员功能实现 23 | * @author wow 24 | * @date 2020年6月5日 25 | */ 26 | 27 | @RestController 28 | @RequestMapping("/admin/") 29 | public class AdminController { 30 | 31 | @Autowired 32 | private AdminService as; 33 | 34 | /* 第一次测试 */ 35 | @RequestMapping("test") 36 | public void test() { 37 | System.out.println("进入测试!"); 38 | } 39 | /* 查询区块链测试 */ 40 | @RequestMapping("testQueryFabric") 41 | public void testQueryFabric(HttpServletResponse response) { 42 | Contract contract = Value.getContract(); 43 | try { 44 | byte[] queryResult = contract.evaluateTransaction("testGet","firstKey"); 45 | String queryStr = new String(queryResult, StandardCharsets.UTF_8); 46 | System.out.println("===>>>value:"+queryStr); 47 | PrintWriter out = response.getWriter(); 48 | out.write("{\"firstValue\":\""+queryStr+"\"}"); 49 | out.close(); 50 | } catch (Exception e) { 51 | e.printStackTrace(); 52 | } 53 | } 54 | /* 数据存储上链测试 */ 55 | @RequestMapping("testInputFabric") 56 | public BackJSON testInputFabric() { 57 | Contract contract = Value.getContract(); 58 | BackJSON result = new BackJSON(0); 59 | try { 60 | byte[] queryResult = contract.createTransaction("uploadMedicalRecord").submit("patientID0", "patientName0", "doctorName0", "createTime0", "medicalPicture0", "description0"); 61 | String queryStr = new String(queryResult, StandardCharsets.UTF_8); 62 | System.out.println("create result:"+queryStr); 63 | if(queryStr.equals("success")) { 64 | result.setCode(200); 65 | } 66 | 67 | queryResult = contract.evaluateTransaction("getRecordbyID", "patientID0"); 68 | queryStr = new String(queryResult, StandardCharsets.UTF_8); 69 | JSONObject jsonResult = JSONObject.parseObject(queryStr); 70 | MedicalRecord medicalRecord = new MedicalRecord(); 71 | medicalRecord.setPatientID(01); 72 | medicalRecord.setPatientName(jsonResult.getString("patientname")); 73 | medicalRecord.setDoctorName(jsonResult.getString("doctorname")); 74 | medicalRecord.setCreateTime(jsonResult.getString("createtime")); 75 | medicalRecord.setMedicalPicture(jsonResult.getString("medicalpicture")); 76 | medicalRecord.setDescription(jsonResult.getString("description")); 77 | result.setData(medicalRecord); 78 | } catch (Exception e) { 79 | e.printStackTrace(); 80 | } 81 | return result; 82 | } 83 | 84 | /* 获取用户总数 */ 85 | @GetMapping("getUserCount") 86 | public BackJSON getUserCount() { 87 | return as.getUserCount(); 88 | } 89 | 90 | } 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/controller/DoctorController.java: -------------------------------------------------------------------------------- 1 | package wow.controller; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.web.bind.annotation.GetMapping; 5 | import org.springframework.web.bind.annotation.ModelAttribute; 6 | import org.springframework.web.bind.annotation.PostMapping; 7 | import org.springframework.web.bind.annotation.RequestMapping; 8 | import org.springframework.web.bind.annotation.RestController; 9 | 10 | import wow.entity.BackJSON; 11 | import wow.entity.CreateMedical; 12 | import wow.entity.IIS; 13 | import wow.service.DoctorService; 14 | 15 | 16 | /** 17 | * 医生功能模块 18 | * @author wow 19 | * @date 2020年6月6日 20 | */ 21 | 22 | @RestController 23 | @RequestMapping("/doctor/") 24 | public class DoctorController { 25 | 26 | @Autowired 27 | private DoctorService ds; 28 | 29 | /* 医生为患者建立病历 */ 30 | @PostMapping("createMedical") 31 | public BackJSON createMedical(@ModelAttribute CreateMedical medical) { 32 | return ds.createMedical(medical); 33 | } 34 | 35 | /* 医生申请授权 */ 36 | @PostMapping("applyAuthorize") 37 | public BackJSON applyAuthorze(Integer doctorID, String patientPhone) { 38 | return ds.applyAuthority(doctorID, patientPhone); 39 | } 40 | 41 | /* 医生查看已获得授权列表 */ 42 | @GetMapping("authorizedList") 43 | public BackJSON authorizedList(Integer doctorID) { 44 | return ds.authorizedList(doctorID); 45 | } 46 | 47 | /* 医生查看详细病历 48 | * is: Integer applyID, String doctorPrivateKey 49 | * */ 50 | @PostMapping("medicalDescription") 51 | public BackJSON getMedicalDescription(@ModelAttribute IIS is) { 52 | return ds.getMedicalDescription(is.getI1(), is.getS()); 53 | } 54 | 55 | 56 | 57 | 58 | 59 | } 60 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/controller/PatientController.java: -------------------------------------------------------------------------------- 1 | package wow.controller; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.web.bind.annotation.ModelAttribute; 5 | import org.springframework.web.bind.annotation.PostMapping; 6 | import org.springframework.web.bind.annotation.RequestMapping; 7 | import org.springframework.web.bind.annotation.RestController; 8 | 9 | import wow.entity.BackJSON; 10 | import wow.entity.IIS; 11 | import wow.service.PatientService; 12 | 13 | /** 14 | * 患者功能模块 15 | * @author wow 16 | * @date 2020年6月6日 17 | */ 18 | 19 | @RestController 20 | @RequestMapping("/patient/") 21 | public class PatientController { 22 | 23 | @Autowired 24 | private PatientService ps; 25 | 26 | /* 确认要提交到区块链上的病历 27 | * is: patientID, patientPrivateKey 28 | * */ 29 | @PostMapping("needConfirmMedical") 30 | public BackJSON needConfirmMedical(@ModelAttribute IIS is) { 31 | return ps.needConfirmMedical(is.getI1(), is.getS()); 32 | } 33 | 34 | /* 上传病历 35 | * iis: Integer applyID, Integer patientID, String patientPrvateKey 36 | * */ 37 | @PostMapping("uploadMedical") 38 | public BackJSON uploadMedical(@ModelAttribute IIS iis) { 39 | return ps.uploadMedical(iis.getI1(), iis.getI2(), iis.getS()); 40 | } 41 | 42 | /* 查询病历 43 | * iis :Integer type, Integer patientID, String patientPrivateKey 44 | * */ 45 | @PostMapping("inquireMedical") 46 | public BackJSON inquireMedical(@ModelAttribute IIS iis) { 47 | return ps.inquireMedical(iis.getI1(), iis.getI2(), iis.getS()); 48 | } 49 | 50 | /* 查看待授权列表 51 | * is: Integer patientID, String patientPrivateKey 52 | * */ 53 | @PostMapping("authorizeList") 54 | public BackJSON authorizeList(@ModelAttribute IIS is) { 55 | return ps.authorizeList(is.getI1(), is.getS()); 56 | } 57 | 58 | /* 处理授权 59 | * iis: Integer applyID, String patientPrivateKey, Integer dealType 60 | * */ 61 | @PostMapping("dealAuthorize") 62 | public BackJSON dealAuthorize(@ModelAttribute IIS iis) { 63 | return ps.dealAuthorize(iis.getI1(), iis.getS(), iis.getI2()); 64 | } 65 | 66 | 67 | 68 | 69 | } 70 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/controller/UserController.java: -------------------------------------------------------------------------------- 1 | package wow.controller; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.web.bind.annotation.GetMapping; 5 | import org.springframework.web.bind.annotation.ModelAttribute; 6 | import org.springframework.web.bind.annotation.PostMapping; 7 | import org.springframework.web.bind.annotation.RequestMapping; 8 | import org.springframework.web.bind.annotation.RestController; 9 | 10 | import wow.entity.BackJSON; 11 | import wow.entity.UserInfo; 12 | import wow.service.UserService; 13 | 14 | 15 | /** 16 | * 通用用户功能模块 17 | * @author wow 18 | * @date 2020年6月6日 19 | */ 20 | 21 | @RestController 22 | @RequestMapping("/user/") 23 | public class UserController { 24 | 25 | @Autowired 26 | private UserService us; 27 | 28 | /* 新用户注册 */ 29 | @PostMapping("register") 30 | // public BackJSON register(@RequestBody UserInfo userInfo) { 31 | public BackJSON register(@ModelAttribute UserInfo userInfo) { 32 | return us.userRegister(userInfo); 33 | } 34 | 35 | /* 根据名称获取医疗机构ID */ 36 | @GetMapping("getHospitalID") 37 | public BackJSON getHospitalID(String hospitalName) { 38 | return us.getHospitalID(hospitalName); 39 | } 40 | 41 | /* 用户登录 */ 42 | @PostMapping("login") 43 | public BackJSON login(@ModelAttribute UserInfo userInfo) { 44 | return us.userLogin(userInfo); 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/entity/Authorize.java: -------------------------------------------------------------------------------- 1 | package wow.entity; 2 | 3 | import java.sql.Timestamp; 4 | 5 | import com.fasterxml.jackson.annotation.JsonFormat; 6 | 7 | public class Authorize { 8 | 9 | private Integer applyID; 10 | private UserIN userID; 11 | private UserIN toUserID; 12 | @JsonFormat(pattern="yyyy/MM/dd HH:mm:ss", timezone="GMT+8") 13 | private Timestamp applyDate; 14 | private String description; 15 | private MedicalRecord record; 16 | private String signText; 17 | public String getDescription() { 18 | return description; 19 | } 20 | public void setDescription(String description) { 21 | this.description = description; 22 | } 23 | public String getSignText() { 24 | return signText; 25 | } 26 | public void setSignText(String signText) { 27 | this.signText = signText; 28 | } 29 | public MedicalRecord getRecord() { 30 | return record; 31 | } 32 | public void setRecord(MedicalRecord record) { 33 | this.record = record; 34 | } 35 | public Integer getApplyID() { 36 | return applyID; 37 | } 38 | public void setApplyID(Integer applyID) { 39 | this.applyID = applyID; 40 | } 41 | public UserIN getUserID() { 42 | return userID; 43 | } 44 | public void setUserID(UserIN userID) { 45 | this.userID = userID; 46 | } 47 | public UserIN getToUserID() { 48 | return toUserID; 49 | } 50 | public void setToUserID(UserIN toUserID) { 51 | this.toUserID = toUserID; 52 | } 53 | public Timestamp getApplyDate() { 54 | return applyDate; 55 | } 56 | public void setApplyDate(Timestamp applyDate) { 57 | this.applyDate = applyDate; 58 | } 59 | public Authorize() { 60 | super(); 61 | 62 | } 63 | public Authorize(Integer applyID, UserIN userID, UserIN toUserID, Timestamp applyDate, String description, 64 | MedicalRecord record, String signText) { 65 | super(); 66 | this.applyID = applyID; 67 | this.userID = userID; 68 | this.toUserID = toUserID; 69 | this.applyDate = applyDate; 70 | this.description = description; 71 | this.record = record; 72 | this.signText = signText; 73 | } 74 | 75 | } 76 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/entity/BackJSON.java: -------------------------------------------------------------------------------- 1 | package wow.entity; 2 | 3 | public class BackJSON { 4 | 5 | private int code; 6 | private Object data; 7 | public BackJSON() {} 8 | public BackJSON(int code, Object data) { 9 | super(); 10 | this.code = code; 11 | this.data = data; 12 | } 13 | public BackJSON(int code) { 14 | this.code = code; 15 | } 16 | public int getCode() { 17 | return code; 18 | } 19 | public void setCode(int code) { 20 | this.code = code; 21 | } 22 | public Object getData() { 23 | return data; 24 | } 25 | public void setData(Object data) { 26 | this.data = data; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/entity/CreateMedical.java: -------------------------------------------------------------------------------- 1 | package wow.entity; 2 | 3 | import org.springframework.web.multipart.MultipartFile; 4 | 5 | public class CreateMedical { 6 | 7 | private Integer doctorID; 8 | private String patientPhone; 9 | private MedicalRecord medical; 10 | private MultipartFile medicalFile; 11 | private String doctorPrivateKey; 12 | public CreateMedical() { 13 | super(); 14 | 15 | } 16 | public CreateMedical(Integer doctorID, String patientPhone, MedicalRecord medical, MultipartFile medicalFile, 17 | String doctorPrivateKey) { 18 | super(); 19 | this.doctorID = doctorID; 20 | this.patientPhone = patientPhone; 21 | this.medical = medical; 22 | this.medicalFile = medicalFile; 23 | this.doctorPrivateKey = doctorPrivateKey; 24 | } 25 | public Integer getDoctorID() { 26 | return doctorID; 27 | } 28 | public void setDoctorID(Integer doctorID) { 29 | this.doctorID = doctorID; 30 | } 31 | public String getPatientPhone() { 32 | return patientPhone; 33 | } 34 | public void setPatientPhone(String patientPhone) { 35 | this.patientPhone = patientPhone; 36 | } 37 | public MedicalRecord getMedical() { 38 | return medical; 39 | } 40 | public void setMedical(MedicalRecord medical) { 41 | this.medical = medical; 42 | } 43 | public MultipartFile getMedicalFile() { 44 | return medicalFile; 45 | } 46 | public void setMedicalFile(MultipartFile medicalFile) { 47 | this.medicalFile = medicalFile; 48 | } 49 | public String getDoctorPrivateKey() { 50 | return doctorPrivateKey; 51 | } 52 | public void setDoctorPrivateKey(String doctorPrivateKey) { 53 | this.doctorPrivateKey = doctorPrivateKey; 54 | } 55 | 56 | } 57 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/entity/Doctor.java: -------------------------------------------------------------------------------- 1 | package wow.entity; 2 | 3 | public class Doctor { 4 | 5 | private Integer doctorID; 6 | private String doctorName; 7 | private String doctorPhone; 8 | private String doctorPassword; 9 | private String doctorPicture; 10 | private Hospital doctorHospital; 11 | private Integer doctorState; 12 | public Doctor() { 13 | super(); 14 | 15 | } 16 | public Doctor(Integer doctorID, String doctorName, String doctorPhone, String doctorPassword, String doctorPicture, 17 | Hospital doctorHospital, Integer doctorState) { 18 | super(); 19 | this.doctorID = doctorID; 20 | this.doctorName = doctorName; 21 | this.doctorPhone = doctorPhone; 22 | this.doctorPassword = doctorPassword; 23 | this.doctorPicture = doctorPicture; 24 | this.doctorHospital = doctorHospital; 25 | this.doctorState = doctorState; 26 | } 27 | public Integer getDoctorID() { 28 | return doctorID; 29 | } 30 | public void setDoctorID(Integer doctorID) { 31 | this.doctorID = doctorID; 32 | } 33 | public String getDoctorName() { 34 | return doctorName; 35 | } 36 | public void setDoctorName(String doctorName) { 37 | this.doctorName = doctorName; 38 | } 39 | public String getDoctorPhone() { 40 | return doctorPhone; 41 | } 42 | public void setDoctorPhone(String doctorPhone) { 43 | this.doctorPhone = doctorPhone; 44 | } 45 | public String getDoctorPassword() { 46 | return doctorPassword; 47 | } 48 | public void setDoctorPassword(String doctorPassword) { 49 | this.doctorPassword = doctorPassword; 50 | } 51 | public String getDoctorPicture() { 52 | return doctorPicture; 53 | } 54 | public void setDoctorPicture(String doctorPicture) { 55 | this.doctorPicture = doctorPicture; 56 | } 57 | public Hospital getDoctorHospital() { 58 | return doctorHospital; 59 | } 60 | public void setDoctorHospital(Hospital doctorHospital) { 61 | this.doctorHospital = doctorHospital; 62 | } 63 | public Integer getDoctorState() { 64 | return doctorState; 65 | } 66 | public void setDoctorState(Integer doctorState) { 67 | this.doctorState = doctorState; 68 | } 69 | 70 | } 71 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/entity/Hospital.java: -------------------------------------------------------------------------------- 1 | package wow.entity; 2 | 3 | import java.util.Date; 4 | 5 | import com.fasterxml.jackson.annotation.JsonFormat; 6 | 7 | public class Hospital { 8 | 9 | private Integer hospitalID; 10 | private String hospitalName; 11 | private Integer hospitalState; 12 | private String businessLicense; 13 | @JsonFormat(pattern="yyyy-MM-dd", timezone="GMT+8") 14 | private Date inDate; 15 | public Hospital() { 16 | super(); 17 | 18 | } 19 | public Hospital(Integer hospitalID, String hospitalName, Integer hospitalState, String businessLicense, 20 | Date inDate) { 21 | super(); 22 | this.hospitalID = hospitalID; 23 | this.hospitalName = hospitalName; 24 | this.hospitalState = hospitalState; 25 | this.businessLicense = businessLicense; 26 | this.inDate = inDate; 27 | } 28 | public Integer getHospitalID() { 29 | return hospitalID; 30 | } 31 | public void setHospitalID(Integer hospitalID) { 32 | this.hospitalID = hospitalID; 33 | } 34 | public String getHospitalName() { 35 | return hospitalName; 36 | } 37 | public void setHospitalName(String hospitalName) { 38 | this.hospitalName = hospitalName; 39 | } 40 | public Integer getHospitalState() { 41 | return hospitalState; 42 | } 43 | public void setHospitalState(Integer hospitalState) { 44 | this.hospitalState = hospitalState; 45 | } 46 | public String getBusinessLicense() { 47 | return businessLicense; 48 | } 49 | public void setBusinessLicense(String businessLicense) { 50 | this.businessLicense = businessLicense; 51 | } 52 | public Date getInDate() { 53 | return inDate; 54 | } 55 | public void setInDate(Date inDate) { 56 | this.inDate = inDate; 57 | } 58 | 59 | } 60 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/entity/IIS.java: -------------------------------------------------------------------------------- 1 | package wow.entity; 2 | 3 | public class IIS { 4 | 5 | private Integer i1; 6 | private Integer i2; 7 | private String s; 8 | public IIS(Integer i1, Integer i2, String s) { 9 | super(); 10 | this.i1 = i1; 11 | this.i2 = i2; 12 | this.s = s; 13 | } 14 | public IIS() { 15 | super(); 16 | 17 | } 18 | public Integer getI1() { 19 | return i1; 20 | } 21 | public void setI1(Integer i1) { 22 | this.i1 = i1; 23 | } 24 | public Integer getI2() { 25 | return i2; 26 | } 27 | public void setI2(Integer i2) { 28 | this.i2 = i2; 29 | } 30 | public String getS() { 31 | return s; 32 | } 33 | public void setS(String s) { 34 | this.s = s; 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/entity/MedicalRecord.java: -------------------------------------------------------------------------------- 1 | package wow.entity; 2 | 3 | public class MedicalRecord { 4 | 5 | private Integer patientID; 6 | private String patientName; 7 | private String doctorName; 8 | private String createTime; 9 | private String medicalPicture; 10 | private String description; 11 | public MedicalRecord() { 12 | super(); 13 | } 14 | 15 | public String getPatientName() { 16 | return patientName; 17 | } 18 | 19 | public Integer getPatientID() { 20 | return patientID; 21 | } 22 | 23 | public void setPatientID(Integer patientID) { 24 | this.patientID = patientID; 25 | } 26 | 27 | public void setPatientName(String patientName) { 28 | this.patientName = patientName; 29 | } 30 | public String getDoctorName() { 31 | return doctorName; 32 | } 33 | public void setDoctorName(String doctorName) { 34 | this.doctorName = doctorName; 35 | } 36 | public String getCreateTime() { 37 | return createTime; 38 | } 39 | public void setCreateTime(String createTime) { 40 | this.createTime = createTime; 41 | } 42 | public String getMedicalPicture() { 43 | return medicalPicture; 44 | } 45 | public void setMedicalPicture(String medicalPicture) { 46 | this.medicalPicture = medicalPicture; 47 | } 48 | 49 | public String getDescription() { 50 | return description; 51 | } 52 | 53 | public void setDescription(String description) { 54 | this.description = description; 55 | } 56 | 57 | public MedicalRecord(Integer patientID, String patientName, String doctorName, String createTime, 58 | String medicalPicture, String description) { 59 | super(); 60 | this.patientID = patientID; 61 | this.patientName = patientName; 62 | this.doctorName = doctorName; 63 | this.createTime = createTime; 64 | this.medicalPicture = medicalPicture; 65 | this.description = description; 66 | } 67 | 68 | } 69 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/entity/Patient.java: -------------------------------------------------------------------------------- 1 | package wow.entity; 2 | 3 | public class Patient { 4 | 5 | private Integer patientID; 6 | private String patientName; 7 | private String patientPhone; 8 | private String patientPassword; 9 | private String patientPicture; 10 | private Integer patientState; 11 | public Patient() { 12 | super(); 13 | 14 | } 15 | public Patient(Integer patientID, String patientName, String patientPhone, String patientPassword, 16 | String patientPicture, Integer patientState) { 17 | super(); 18 | this.patientID = patientID; 19 | this.patientName = patientName; 20 | this.patientPhone = patientPhone; 21 | this.patientPassword = patientPassword; 22 | this.patientPicture = patientPicture; 23 | this.patientState = patientState; 24 | } 25 | public Integer getPatientID() { 26 | return patientID; 27 | } 28 | public void setPatientID(Integer patientID) { 29 | this.patientID = patientID; 30 | } 31 | public String getPatientName() { 32 | return patientName; 33 | } 34 | public void setPatientName(String patientName) { 35 | this.patientName = patientName; 36 | } 37 | public String getPatientPhone() { 38 | return patientPhone; 39 | } 40 | public void setPatientPhone(String patientPhone) { 41 | this.patientPhone = patientPhone; 42 | } 43 | public String getPatientPassword() { 44 | return patientPassword; 45 | } 46 | public void setPatientPassword(String patientPassword) { 47 | this.patientPassword = patientPassword; 48 | } 49 | public String getPatientPicture() { 50 | return patientPicture; 51 | } 52 | public void setPatientPicture(String patientPicture) { 53 | this.patientPicture = patientPicture; 54 | } 55 | public Integer getPatientState() { 56 | return patientState; 57 | } 58 | public void setPatientState(Integer patientState) { 59 | this.patientState = patientState; 60 | } 61 | 62 | } 63 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/entity/UserIN.java: -------------------------------------------------------------------------------- 1 | package wow.entity; 2 | 3 | public class UserIN { 4 | 5 | private Integer userID; 6 | private String userName; 7 | public UserIN(Integer userID, String userName) { 8 | super(); 9 | this.userID = userID; 10 | this.userName = userName; 11 | } 12 | public UserIN(Integer userID) { 13 | this.userID = userID; 14 | } 15 | 16 | public UserIN() { 17 | super(); 18 | 19 | } 20 | public Integer getUserID() { 21 | return userID; 22 | } 23 | public void setUserID(Integer userID) { 24 | this.userID = userID; 25 | } 26 | public String getUserName() { 27 | return userName; 28 | } 29 | public void setUserName(String userName) { 30 | this.userName = userName; 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/entity/UserInfo.java: -------------------------------------------------------------------------------- 1 | package wow.entity; 2 | 3 | public class UserInfo { 4 | 5 | 6 | private Integer userID; 7 | private Integer userType; 8 | private String userName; 9 | private String userPhone; 10 | private String password; 11 | private Integer hospitalID; 12 | public UserInfo(Integer userID, Integer userType, String userName, String userPhone, String password, 13 | Integer hospitalID) { 14 | super(); 15 | this.userID = userID; 16 | this.userType = userType; 17 | this.userName = userName; 18 | this.userPhone = userPhone; 19 | this.password = password; 20 | this.hospitalID = hospitalID; 21 | } 22 | public Integer getUserID() { 23 | return userID; 24 | } 25 | public void setUserID(Integer userID) { 26 | this.userID = userID; 27 | } 28 | public Integer getUserType() { 29 | return userType; 30 | } 31 | public void setUserType(Integer userType) { 32 | this.userType = userType; 33 | } 34 | public String getUserName() { 35 | return userName; 36 | } 37 | public void setUserName(String userName) { 38 | this.userName = userName; 39 | } 40 | public String getUserPhone() { 41 | return userPhone; 42 | } 43 | public void setUserPhone(String userPhone) { 44 | this.userPhone = userPhone; 45 | } 46 | public String getPassword() { 47 | return password; 48 | } 49 | public void setPassword(String password) { 50 | this.password = password; 51 | } 52 | public Integer getHospitalID() { 53 | return hospitalID; 54 | } 55 | public void setHospitalID(Integer hospitalID) { 56 | this.hospitalID = hospitalID; 57 | } 58 | public UserInfo(Integer userType, String userName, String userPhone, String password, Integer hospitalID) { 59 | super(); 60 | this.userType = userType; 61 | this.userName = userName; 62 | this.userPhone = userPhone; 63 | this.password = password; 64 | this.hospitalID = hospitalID; 65 | } 66 | public UserInfo() { 67 | super(); 68 | } 69 | 70 | 71 | } 72 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/mapper/AdminMapper.java: -------------------------------------------------------------------------------- 1 | package wow.mapper; 2 | 3 | import org.apache.ibatis.annotations.Select; 4 | import org.springframework.stereotype.Repository; 5 | 6 | @Repository 7 | public interface AdminMapper { 8 | 9 | @Select("select user_count from t_usercount") 10 | Integer getUserCount(); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/mapper/DoctorMapper.java: -------------------------------------------------------------------------------- 1 | package wow.mapper; 2 | 3 | import java.util.List; 4 | 5 | import org.apache.ibatis.annotations.Insert; 6 | import org.apache.ibatis.annotations.One; 7 | import org.apache.ibatis.annotations.Result; 8 | import org.apache.ibatis.annotations.Results; 9 | import org.apache.ibatis.annotations.Select; 10 | import org.apache.ibatis.mapping.FetchType; 11 | import org.springframework.stereotype.Repository; 12 | 13 | import wow.entity.Authorize; 14 | import wow.entity.Doctor; 15 | import wow.entity.UserIN; 16 | import wow.entity.UserInfo; 17 | 18 | @Repository 19 | public interface DoctorMapper { 20 | 21 | @Insert("insert into t_doctor(doctor_id, doctor_name, doctor_phone, doctor_password, doctor_hospital, doctor_state) values(" 22 | + "#{userID, jdbcType=INTEGER}, #{userName, jdbcType=VARCHAR}, #{userPhone, jdbcType=VARCHAR}, #{password, jdbcType=VARCHAR}, #{hospitalID, jdbcType=INTEGER}, 0)") 23 | int newDoctor(UserInfo userInfo); 24 | 25 | @Select("select count(1) from t_doctor where doctor_phone=#{phone}") 26 | int ifPhone(String phone); 27 | 28 | @Select("select doctor_id as doctorID, doctor_password as doctorPassword, doctor_state as doctorState " 29 | + "from t_doctor where doctor_phone=#{phone}") 30 | Doctor doctorLogin(String phone); 31 | 32 | @Insert("insert into t_authorize(user_id, to_user_id, apply_state, apply_date, description, sign_text) " 33 | + "values(#{userID.userID, jdbcType=INTEGER}, #{toUserID.userID, jdbcType=INTEGER}, 0, #{applyDate, jdbcType=TIMESTAMP}, #{description}, #{signText, jdbcType=VARCHAR})") 34 | int newAuthorize(Authorize authorize); 35 | 36 | @Select("select user_publickey from t_publickey where user_id=${_parameter}") 37 | String getPublicKey(Integer userID); 38 | 39 | @Select("select apply_id as applyID, user_id, apply_date as applyDate from t_authorize where to_user_id=${_parameter} and apply_state=1") 40 | @Results({ 41 | @Result(property="userID", column="user_id", javaType=UserIN.class, 42 | one=@One(select="getUserIN", fetchType=FetchType.EAGER)) 43 | }) 44 | List getAuthorizeList(Integer userID); 45 | 46 | @Select("select patient_id as userID, patient_name as userName from t_patient where patient_id=${_parameter}") 47 | UserIN getUserIN(Integer userID); 48 | 49 | @Select("select description from t_authorize where apply_id=${_parameter}") 50 | String getAuthorizeDescription(Integer applyID); 51 | 52 | 53 | 54 | 55 | } 56 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/mapper/PatientMapper.java: -------------------------------------------------------------------------------- 1 | package wow.mapper; 2 | 3 | import java.util.List; 4 | import java.util.Map; 5 | 6 | import org.apache.ibatis.annotations.Delete; 7 | import org.apache.ibatis.annotations.Insert; 8 | import org.apache.ibatis.annotations.One; 9 | import org.apache.ibatis.annotations.Result; 10 | import org.apache.ibatis.annotations.Results; 11 | import org.apache.ibatis.annotations.Select; 12 | import org.apache.ibatis.annotations.Update; 13 | import org.apache.ibatis.mapping.FetchType; 14 | import org.springframework.stereotype.Repository; 15 | 16 | import wow.entity.Authorize; 17 | import wow.entity.Patient; 18 | import wow.entity.UserIN; 19 | import wow.entity.UserInfo; 20 | 21 | @Repository 22 | public interface PatientMapper { 23 | 24 | @Insert("insert into t_patient(patient_id, patient_name, patient_phone, patient_password, patient_state) values(" 25 | + "#{userID, jdbcType=INTEGER}, #{userName, jdbcType=VARCHAR}, #{userPhone, jdbcType=VARCHAR}, #{password, jdbcType=VARCHAR}, 0)") 26 | int newPatient(UserInfo userInfo); 27 | 28 | @Select("select count(1) from t_patient where patient_phone=#{phone}") 29 | int ifPhone(String phone); 30 | 31 | @Select("select patient_id as patientID, patient_password as patientPassword, patient_state as patientState " 32 | + "from t_patient where patient_phone=#{phone}") 33 | Patient patientLogin(String phone); 34 | 35 | @Select("select p.patient_id as patientID, k.user_publickey as patientPublicKey from t_patient p, t_publickey k where p.patient_phone=#{phone} and k.user_id=p.patient_id") 36 | Map getPatientIDAndPublicKey(String phone); 37 | 38 | @Select("select apply_id as applyID, user_id, apply_date as applyDate, description, sign_text as signText from t_authorize where to_user_id=${_parameter} and apply_state=0") 39 | @Results({ 40 | @Result(property="userID", column="user_id", javaType=UserIN.class, 41 | one=@One(select="getUserIN", fetchType=FetchType.EAGER)) 42 | }) 43 | List getNeedUploadMedicalList(int userID); 44 | 45 | @Select("select doctor_id as userID, doctor_name as userName from t_doctor where doctor_id=${_parameter}") 46 | UserIN getUserIN(int userID); 47 | 48 | @Select("select description from t_authorize where apply_id=${_parameter}") 49 | String getMedicalDescription(int applyID); 50 | 51 | @Select("select user_publickey from t_publickey where uesr_id=${_parameter}") 52 | String getPublicKey(int patientID); 53 | 54 | @Delete("delete from t_authorize where apply_id=${_parameter}") 55 | int delNeedUploadMedical(int applyID); 56 | 57 | @Select("select patient_id from t_patient where patient_phone=#{phone}") 58 | Integer getPatientID(String phone); 59 | 60 | @Select("select apply_id as applyID, to_user_id, apply_date as applyDate, description from t_authorize where user_id=${_parameter} and apply_state=0") 61 | @Results({ 62 | @Result(property="toUserID", column="to_user_id", javaType=UserIN.class, 63 | one=@One(select="getUserIN", fetchType=FetchType.EAGER)) 64 | }) 65 | List getNeedAuthorizeList(int userID); 66 | 67 | @Select("select a.to_user_id, a.description, k.user_publickey from t_authorize a, t_publickey k where a.apply_id=${_parameter} and k.user_id=a.to_user_id") 68 | Map getAuthDescription(int applyID); 69 | 70 | @Update("update t_authorize set description=#{param2}, apply_state=1, apply_date=now() where apply_id=#{param1}") 71 | int confirmAuthorize(Integer applyID, String description); 72 | 73 | @Update("update t_authorize set apply_state=2, apply_date=now() where apply_id=${_parameter}") 74 | int rejectAuthorize(int applyID); 75 | 76 | 77 | 78 | 79 | 80 | } 81 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/mapper/UserMapper.java: -------------------------------------------------------------------------------- 1 | package wow.mapper; 2 | 3 | import org.apache.ibatis.annotations.Insert; 4 | import org.apache.ibatis.annotations.Select; 5 | import org.apache.ibatis.annotations.Update; 6 | import org.springframework.stereotype.Repository; 7 | 8 | @Repository 9 | public interface UserMapper { 10 | 11 | @Select("select hospital_id from t_hospital where hospital_name=#{hospitalName}") 12 | Integer getHospitalID(String hospitalName); 13 | 14 | @Select("select user_count from t_usercount") 15 | int getUserCount(); 16 | 17 | @Update("update t_usercount set user_count=user_count+1") 18 | int updateUserCount(); 19 | 20 | @Insert("insert into t_publickey values(#{param1}, #{param2})") 21 | int newUserPublicKey(Integer userID, String userPublicKey); 22 | 23 | } 24 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/service/AdminService.java: -------------------------------------------------------------------------------- 1 | package wow.service; 2 | 3 | import wow.entity.BackJSON; 4 | 5 | public interface AdminService { 6 | 7 | public BackJSON getUserCount(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/service/AdminServiceImpl.java: -------------------------------------------------------------------------------- 1 | package wow.service; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.stereotype.Service; 5 | import org.springframework.transaction.annotation.Isolation; 6 | import org.springframework.transaction.annotation.Propagation; 7 | import org.springframework.transaction.annotation.Transactional; 8 | 9 | import com.alibaba.fastjson.JSONObject; 10 | 11 | import wow.entity.BackJSON; 12 | import wow.mapper.AdminMapper; 13 | 14 | @Service 15 | @Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.DEFAULT) 16 | public class AdminServiceImpl implements AdminService { 17 | 18 | @Autowired 19 | private AdminMapper am; 20 | 21 | @Override 22 | @Transactional(readOnly=true) 23 | public BackJSON getUserCount() { 24 | BackJSON json = new BackJSON(200); 25 | String count = "{\"count\":"+am.getUserCount()+"}"; 26 | json.setData(JSONObject.parse(count)); 27 | return json; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/service/DoctorService.java: -------------------------------------------------------------------------------- 1 | package wow.service; 2 | 3 | import wow.entity.BackJSON; 4 | import wow.entity.CreateMedical; 5 | 6 | public interface DoctorService { 7 | 8 | public BackJSON createMedical(CreateMedical medical); 9 | 10 | public BackJSON applyAuthority(Integer doctorID, String patientPhone); 11 | 12 | public BackJSON authorizedList(Integer doctorID); 13 | 14 | public BackJSON getMedicalDescription(Integer applyID, String doctorPrivateKey); 15 | 16 | 17 | } 18 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/service/DoctorServiceImpl.java: -------------------------------------------------------------------------------- 1 | package wow.service; 2 | 3 | import java.io.File; 4 | import java.io.IOException; 5 | import java.nio.charset.StandardCharsets; 6 | import java.sql.Timestamp; 7 | import java.text.SimpleDateFormat; 8 | import java.util.Date; 9 | import java.util.HashMap; 10 | import java.util.List; 11 | import java.util.Map; 12 | 13 | import org.hyperledger.fabric.gateway.Contract; 14 | import org.hyperledger.fabric.gateway.ContractException; 15 | import org.springframework.beans.factory.annotation.Autowired; 16 | import org.springframework.stereotype.Service; 17 | import org.springframework.transaction.annotation.Isolation; 18 | import org.springframework.transaction.annotation.Propagation; 19 | import org.springframework.transaction.annotation.Transactional; 20 | import org.springframework.web.multipart.MultipartFile; 21 | 22 | import com.alibaba.fastjson.JSONObject; 23 | 24 | import wow.entity.Authorize; 25 | import wow.entity.BackJSON; 26 | import wow.entity.CreateMedical; 27 | import wow.entity.MedicalRecord; 28 | import wow.entity.UserIN; 29 | import wow.mapper.DoctorMapper; 30 | import wow.mapper.PatientMapper; 31 | import wow.util.Value; 32 | 33 | 34 | @Service 35 | @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT) 36 | public class DoctorServiceImpl implements DoctorService { 37 | 38 | @Autowired 39 | private PatientMapper pm; 40 | 41 | @Autowired 42 | private DoctorMapper dm; 43 | 44 | @Override 45 | @Transactional 46 | public BackJSON createMedical(CreateMedical cmedical) { 47 | BackJSON json = new BackJSON(200); 48 | Map data = new HashMap<>(); 49 | data.put("result", 1); 50 | // 封装权限信息 51 | Authorize authorize = new Authorize(); 52 | long nowTime = System.currentTimeMillis(); 53 | authorize.setApplyDate(new Timestamp(nowTime)); 54 | Integer doctorID = cmedical.getDoctorID(); 55 | authorize.setUserID(new UserIN(doctorID)); 56 | Map ikMap = pm.getPatientIDAndPublicKey(cmedical.getPatientPhone()); 57 | Integer patientID = ((Number)ikMap.get("patientID")).intValue(); 58 | authorize.setToUserID(new UserIN(patientID)); 59 | String patientPublicKey = (String)ikMap.get("patientPublicKey"); 60 | // 处理病历图片 61 | MultipartFile medicalFile = cmedical.getMedicalFile(); 62 | // 文件名字 patientID+timestamp+filename 63 | String fileName = patientID+nowTime+medicalFile.getOriginalFilename(); 64 | String filePath = Value.getMedicalPicturePath(); 65 | File file = new File(filePath+fileName); 66 | try { 67 | medicalFile.transferTo(file); 68 | } catch (IllegalStateException | IOException e) { 69 | System.out.println("文件传输错误 file:"+file.getName()); 70 | e.printStackTrace(); 71 | } 72 | MedicalRecord record = cmedical.getMedical(); 73 | record.setMedicalPicture(fileName); 74 | SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); 75 | record.setCreateTime(sdf.format(new Date())); 76 | // 患者公钥加密 77 | String encryptDescription = Value.RSAEncrypt(record.getDescription(), patientPublicKey); 78 | record.setDescription(encryptDescription); 79 | // 授权信息描述,这里指病情信息 80 | String description = JSONObject.toJSONString(record); 81 | // System.out.println(description); 82 | // 医生签名 83 | String signDescription = Value.RSASign(description, cmedical.getDoctorPrivateKey()); 84 | authorize.setDescription(description); 85 | authorize.setSignText(signDescription); 86 | if(1==dm.newAuthorize(authorize)) { 87 | data.replace("result", 0); 88 | } 89 | json.setData(data); 90 | return json; 91 | } 92 | 93 | @Override 94 | @Transactional 95 | public BackJSON applyAuthority(Integer doctorID, String patientPhone) { 96 | BackJSON json = new BackJSON(200); 97 | Map data = new HashMap<>(); 98 | Integer patientID = pm.getPatientID(patientPhone); 99 | if(null==patientID) { 100 | //患者不存在 101 | data.put("result", 1); 102 | } else { 103 | Contract contract = Value.getContract(); 104 | try { 105 | byte[] queryResult = contract.evaluateTransaction("getRecordbyID", String.valueOf(patientID)); 106 | if(0==queryResult.length) { 107 | // 患者不存在病历数据 108 | data.put("result", 2); 109 | } else { 110 | JSONObject jsonResult = JSONObject.parseObject(new String(queryResult, StandardCharsets.UTF_8)); 111 | MedicalRecord medicalRecord = new MedicalRecord(); 112 | medicalRecord.setPatientName(jsonResult.getString("patientname")); 113 | medicalRecord.setDoctorName(jsonResult.getString("doctorname")); 114 | medicalRecord.setCreateTime(jsonResult.getString("createtime")); 115 | medicalRecord.setMedicalPicture(jsonResult.getString("medicalpicture")); 116 | medicalRecord.setDescription(jsonResult.getString("description")); 117 | // 封装要存入数据库的数据 118 | Authorize authorize = new Authorize(); 119 | authorize.setUserID(new UserIN(patientID)); 120 | authorize.setToUserID(new UserIN(doctorID)); 121 | authorize.setApplyDate(new Timestamp(System.currentTimeMillis())); 122 | authorize.setDescription(JSONObject.toJSONString(medicalRecord)); 123 | if(1==dm.newAuthorize(authorize)) { 124 | data.put("result", 0); 125 | } 126 | } 127 | } catch (ContractException e) { 128 | e.printStackTrace(); 129 | } 130 | } 131 | json.setData(data); 132 | return json; 133 | } 134 | 135 | @Override 136 | @Transactional(readOnly=true) 137 | public BackJSON authorizedList(Integer doctorID) { 138 | BackJSON json = new BackJSON(200); 139 | JSONObject data = new JSONObject(); 140 | List authList = dm.getAuthorizeList(doctorID); 141 | data.put("list", authList); 142 | json.setData(data); 143 | return json; 144 | } 145 | 146 | @Override 147 | @Transactional(readOnly=true) 148 | public BackJSON getMedicalDescription(Integer applyID, String doctorPrivateKey) { 149 | BackJSON json = new BackJSON(200); 150 | JSONObject data = new JSONObject(); 151 | String desciption = dm.getAuthorizeDescription(applyID); 152 | if(desciption!=null) { 153 | MedicalRecord record = JSONObject.parseObject(desciption, MedicalRecord.class); 154 | String picturePath = Value.getMedicalPicturePath(); 155 | record.setMedicalPicture(picturePath+record.getMedicalPicture()); 156 | String descriptDescription = record.getDescription(); 157 | record.setDescription(Value.RSADecrypt(descriptDescription, doctorPrivateKey)); 158 | data.put("record", record); 159 | } else { 160 | data.put("record", null); 161 | } 162 | json.setData(data); 163 | return json; 164 | } 165 | 166 | 167 | 168 | 169 | } 170 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/service/PatientService.java: -------------------------------------------------------------------------------- 1 | package wow.service; 2 | 3 | import wow.entity.BackJSON; 4 | 5 | public interface PatientService { 6 | 7 | public BackJSON needConfirmMedical(Integer patientID, String patientPrivateKey); 8 | 9 | public BackJSON uploadMedical(Integer applyID, Integer patientID, String patientPrvateKey); 10 | 11 | public BackJSON inquireMedical(Integer type, Integer patientID, String patientPrivateKey); 12 | 13 | public BackJSON authorizeList(Integer patientID, String patientPrivateKey); 14 | 15 | public BackJSON dealAuthorize(Integer applyID, String patientPrivateKey, Integer dealType); 16 | 17 | 18 | } 19 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/service/PatientServiceImpl.java: -------------------------------------------------------------------------------- 1 | package wow.service; 2 | 3 | import java.nio.charset.StandardCharsets; 4 | import java.util.HashMap; 5 | import java.util.List; 6 | import java.util.Map; 7 | import java.util.concurrent.TimeoutException; 8 | 9 | import org.hyperledger.fabric.gateway.Contract; 10 | import org.hyperledger.fabric.gateway.ContractException; 11 | import org.springframework.beans.factory.annotation.Autowired; 12 | import org.springframework.stereotype.Service; 13 | import org.springframework.transaction.annotation.Isolation; 14 | import org.springframework.transaction.annotation.Propagation; 15 | import org.springframework.transaction.annotation.Transactional; 16 | 17 | import com.alibaba.fastjson.JSONObject; 18 | 19 | import wow.entity.Authorize; 20 | import wow.entity.BackJSON; 21 | import wow.entity.MedicalRecord; 22 | import wow.mapper.DoctorMapper; 23 | import wow.mapper.PatientMapper; 24 | import wow.util.Value; 25 | 26 | 27 | @Service 28 | @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT) 29 | public class PatientServiceImpl implements PatientService { 30 | 31 | @Autowired 32 | private PatientMapper pm; 33 | 34 | @Autowired 35 | private DoctorMapper dm; 36 | 37 | @Override 38 | @Transactional 39 | public BackJSON needConfirmMedical(Integer patientID, String patientPrivateKey) { 40 | BackJSON json = new BackJSON(200); 41 | Map data = new HashMap<>(); 42 | List authorizeList = pm.getNeedUploadMedicalList(patientID); 43 | for(Authorize auth : authorizeList) { 44 | // 获取病历 45 | String medicalDescription = auth.getDescription(); 46 | // 验证医生签名 47 | String doctorPublicKey = dm.getPublicKey(auth.getUserID().getUserID()); 48 | boolean verifyResult = Value.RSACheckSign(medicalDescription, auth.getSignText(), doctorPublicKey); 49 | if(verifyResult) { 50 | auth.setSignText(null); 51 | // 患者私钥解密 52 | MedicalRecord record = JSONObject.parseObject(medicalDescription, MedicalRecord.class); 53 | // System.out.println(patientPrivateKey); 54 | String DescryptMedicalDescription = Value.RSADecrypt(record.getDescription(), patientPrivateKey); 55 | record.setDescription(DescryptMedicalDescription); 56 | String picturePath = Value.getMedicalPicturePath(); 57 | record.setMedicalPicture(picturePath+record.getMedicalPicture()); 58 | auth.setRecord(record); 59 | auth.setDescription(null); 60 | } else { 61 | //验证签名失败 62 | auth.setRecord(null); 63 | } 64 | } 65 | data.put("list", authorizeList); 66 | json.setData(data); 67 | return json; 68 | } 69 | 70 | @Override 71 | @Transactional 72 | public BackJSON uploadMedical(Integer applyID, Integer patientID, String patientPrvateKey) { 73 | BackJSON json = new BackJSON(200); 74 | Map data = new HashMap<>(); 75 | data.put("result", 3); 76 | String medicalDescription = pm.getMedicalDescription(applyID); 77 | if(medicalDescription!=null) { 78 | MedicalRecord record = JSONObject.parseObject(medicalDescription, MedicalRecord.class); 79 | // 加密病历描述 80 | Contract contract = Value.getContract(); 81 | try { 82 | byte[] queryResult = contract.createTransaction("uploadMedicalRecord") 83 | .submit(String.valueOf(patientID), record.getPatientName(), record.getDoctorName(), record.getCreateTime(), record.getMedicalPicture(), record.getDescription()); 84 | String queryStr = new String(queryResult, StandardCharsets.UTF_8); 85 | if(queryStr.equals("success")) { 86 | data.replace("result", 0); 87 | pm.delNeedUploadMedical(applyID); 88 | } else { 89 | data.replace("result", 2); 90 | } 91 | } catch (ContractException | TimeoutException | InterruptedException e) { 92 | e.printStackTrace(); 93 | } 94 | } 95 | json.setData(data); 96 | return json; 97 | } 98 | 99 | @Override 100 | public BackJSON inquireMedical(Integer type, Integer patientID, String patientPrivateKey) { 101 | BackJSON json = new BackJSON(200); 102 | Map data = new HashMap<>(); 103 | if(1==type) { 104 | Contract contract = Value.getContract(); 105 | try { 106 | byte[] queryResult = contract.evaluateTransaction("getRecordbyID", String.valueOf(patientID)); 107 | JSONObject jsonResult = JSONObject.parseObject(new String(queryResult, StandardCharsets.UTF_8)); 108 | MedicalRecord medicalRecord = new MedicalRecord(); 109 | medicalRecord.setPatientName(jsonResult.getString("patientname")); 110 | medicalRecord.setDoctorName(jsonResult.getString("doctorname")); 111 | medicalRecord.setCreateTime(jsonResult.getString("createtime")); 112 | medicalRecord.setMedicalPicture(Value.getMedicalPicturePath()+jsonResult.getString("medicalpicture")); 113 | medicalRecord.setDescription(Value.RSADecrypt(jsonResult.getString("description"),patientPrivateKey)); 114 | data.put("result", 0); 115 | data.put("record", medicalRecord); 116 | } catch (ContractException e) { 117 | data.put("result", 2); 118 | e.printStackTrace(); 119 | } 120 | } else { 121 | // TODO:历史病历 122 | } 123 | json.setData(data); 124 | return json; 125 | } 126 | 127 | @Override 128 | @Transactional(readOnly=true) 129 | public BackJSON authorizeList(Integer patientID, String patientPrivateKey) { 130 | BackJSON json = new BackJSON(200); 131 | JSONObject data = new JSONObject(); 132 | List authList = pm.getNeedAuthorizeList(patientID); 133 | for(Authorize auth : authList) { 134 | String description = auth.getDescription(); 135 | MedicalRecord record = JSONObject.parseObject(description, MedicalRecord.class); 136 | record.setMedicalPicture(Value.getMedicalPicturePath()+record.getMedicalPicture()); 137 | record.setDescription(Value.RSADecrypt(record.getDescription(), patientPrivateKey)); 138 | auth.setRecord(record); 139 | auth.setDescription(null); 140 | } 141 | data.put("list", authList); 142 | json.setData(data); 143 | return json; 144 | } 145 | 146 | @Override 147 | @Transactional 148 | public BackJSON dealAuthorize(Integer applyID, String patientPrivateKey, Integer dealType) { 149 | BackJSON json = new BackJSON(200); 150 | JSONObject data = new JSONObject(); 151 | data.put("result", 1); 152 | if(1==dealType) { 153 | // 同意 154 | Map dkMap = pm.getAuthDescription(applyID); 155 | MedicalRecord record = JSONObject.parseObject((String)dkMap.get("description"), MedicalRecord.class); 156 | // 患者私钥解密后,医生公钥加密 157 | String decryptDescription = Value.RSADecrypt(record.getDescription(), patientPrivateKey); 158 | record.setDescription(Value.RSAEncrypt(decryptDescription, (String)dkMap.get("user_publickey"))); 159 | String description = JSONObject.toJSONString(record); 160 | if(1==pm.confirmAuthorize(applyID, description)) { 161 | data.replace("result", 0); 162 | } 163 | } else if(2==dealType) { 164 | // 拒绝 165 | if(1==pm.rejectAuthorize(applyID)) { 166 | data.replace("result", 0); 167 | } 168 | } else if(3==dealType) { 169 | // 删除 170 | if(1==pm.delNeedUploadMedical(applyID)) { 171 | data.replace("result", 0); 172 | } 173 | } else { 174 | // 未知处理 175 | data.replace("result", 2); 176 | } 177 | json.setData(data); 178 | return json; 179 | } 180 | 181 | 182 | 183 | 184 | } 185 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/service/UserService.java: -------------------------------------------------------------------------------- 1 | package wow.service; 2 | 3 | import wow.entity.BackJSON; 4 | import wow.entity.UserInfo; 5 | 6 | public interface UserService { 7 | 8 | public BackJSON userRegister(UserInfo userInfo); 9 | 10 | public BackJSON getHospitalID(String hospitalName); 11 | 12 | public BackJSON userLogin(UserInfo userInfo); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /code/medical/src/main/java/wow/service/UserServiceImpl.java: -------------------------------------------------------------------------------- 1 | package wow.service; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.stereotype.Service; 8 | import org.springframework.transaction.annotation.Isolation; 9 | import org.springframework.transaction.annotation.Propagation; 10 | import org.springframework.transaction.annotation.Transactional; 11 | 12 | import wow.entity.BackJSON; 13 | import wow.entity.Doctor; 14 | import wow.entity.Patient; 15 | import wow.entity.UserInfo; 16 | import wow.mapper.DoctorMapper; 17 | import wow.mapper.PatientMapper; 18 | import wow.mapper.UserMapper; 19 | import wow.util.Value; 20 | 21 | @Service 22 | @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT) 23 | public class UserServiceImpl implements UserService { 24 | 25 | @Autowired 26 | private UserMapper um; 27 | 28 | @Autowired 29 | private PatientMapper pm; 30 | 31 | @Autowired 32 | private DoctorMapper dm; 33 | 34 | @Override 35 | @Transactional 36 | public BackJSON userRegister(UserInfo userInfo) { 37 | BackJSON json = new BackJSON(200); 38 | Map data = new HashMap<>(); 39 | int userType = userInfo.getUserType(); 40 | int userID = um.getUserCount(); 41 | userInfo.setUserID(userID); 42 | int insertResult = 0; 43 | // 密码经过 MD5 hash 44 | userInfo.setPassword(Value.MD5Hash(userInfo.getPassword())); 45 | if(1 == userType) { 46 | // 患者 47 | if (pm.ifPhone(userInfo.getUserPhone()) > 0) { 48 | // 手机号注册过 49 | data.put("result", "1"); 50 | } else { 51 | insertResult = pm.newPatient(userInfo); 52 | if (insertResult != 1) { 53 | data.put("result", "2"); 54 | } 55 | } 56 | } else if(2 == userType) { 57 | // 医生 58 | if(dm.ifPhone(userInfo.getUserPhone()) > 0) { 59 | // 手机号注册过 60 | data.put("result", "1"); 61 | } else { 62 | insertResult = dm.newDoctor(userInfo); 63 | if(insertResult != 1 ) { 64 | data.put("result", "2"); 65 | } 66 | } 67 | } else { 68 | json.setData(201); 69 | return json; 70 | } 71 | if(1 == insertResult) { 72 | data.put("result", "0"); 73 | um.updateUserCount(); 74 | // 注册成功,生成密钥对 75 | Map keyMap = Value.generateRSAKeyPair(); 76 | String publicKey = keyMap.get("publicKey"); 77 | String privateKey = keyMap.get("privateKey"); 78 | if(um.newUserPublicKey(userID, publicKey)==1) { 79 | data.put("privateKey", privateKey); 80 | } else { 81 | data.put("result", "2"); 82 | } 83 | } 84 | json.setData(data); 85 | return json; 86 | } 87 | 88 | @Override 89 | @Transactional(readOnly = true) 90 | public BackJSON getHospitalID(String hospitalName) { 91 | BackJSON json = new BackJSON(200); 92 | Map data = new HashMap<>(); 93 | Integer hospitalID = um.getHospitalID(hospitalName); 94 | if(hospitalID!=null) { 95 | data.put("hospitalID", hospitalID); 96 | } else { 97 | // 不存在,返回 0 98 | data.put("hospitalID", 0); 99 | } 100 | json.setData(data); 101 | return json; 102 | } 103 | 104 | @Override 105 | @Transactional(readOnly = true) 106 | public BackJSON userLogin(UserInfo userInfo) { 107 | BackJSON json = new BackJSON(200); 108 | Map data = new HashMap<>(); 109 | int userType = userInfo.getUserType(); 110 | String phone = userInfo.getUserPhone(); 111 | String password = userInfo.getPassword(); 112 | if(1==userType) { 113 | // 患者 114 | Patient patient = pm.patientLogin(phone); 115 | if(null==patient) { 116 | // 手机号不存在 117 | data.put("result", 2); 118 | } else { 119 | if(patient.getPatientState()!=0) { 120 | // 患者处于非法状态 121 | data.put("result", 3); 122 | } else { 123 | if(!Value.MD5Verify(password, patient.getPatientPassword())) { 124 | // 用户名或密码错误 125 | data.put("result", 1); 126 | } else { 127 | data.put("result", 0); 128 | data.put("userID", patient.getPatientID()); 129 | } 130 | } 131 | } 132 | } else if(2==userType) { 133 | // 医生 134 | Doctor doctor = dm.doctorLogin(phone); 135 | if(null==doctor) { 136 | // 手机号不存在 137 | data.put("result", 2); 138 | } else { 139 | if(doctor.getDoctorState()!=0) { 140 | // 患者处于非法状态 141 | data.put("result", 3); 142 | } else { 143 | if(!Value.MD5Verify(password, doctor.getDoctorPassword())) { 144 | // 用户名或密码错误 145 | data.put("result", 1); 146 | } else { 147 | data.put("result", 0); 148 | data.put("userID", doctor.getDoctorID()); 149 | } 150 | } 151 | } 152 | } else { 153 | data.put("result", 4); 154 | } 155 | json.setData(data); 156 | return json; 157 | } 158 | 159 | 160 | } 161 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/applicationContext.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | 16 | 17 | 18 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 42 | 43 | 44 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/connection.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test-network", 3 | "version": "1.0.0", 4 | "client": { 5 | "organization": "Org1", 6 | "connection": { 7 | "timeout": { 8 | "peer": { 9 | "endorser": "300" 10 | }, 11 | "orderer": "300" 12 | } 13 | } 14 | }, 15 | "channels": { 16 | "mychannel": { 17 | "orderers": [ 18 | "orderer.example.com" 19 | ], 20 | "peers": { 21 | "peer0.org1.example.com": { 22 | "endorsingPeer": true, 23 | "chaincodeQuery": true, 24 | "ledgerQuery": true, 25 | "eventSource": true 26 | }, 27 | "peer0.org2.example.com": { 28 | "endorsingPeer": true, 29 | "chaincodeQuery": true, 30 | "ledgerQuery": true, 31 | "eventSource": true 32 | } 33 | } 34 | } 35 | }, 36 | "organizations": { 37 | "Org1": { 38 | "mspid": "Org1MSP", 39 | "peers": [ 40 | "peer0.org1.example.com" 41 | ], 42 | "certificateAuthorities": [ 43 | "ca.org1.example.com" 44 | ], 45 | "adminPrivateKeyPEM": { 46 | "path": "src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/priv_sk" 47 | }, 48 | "signedCertPEM": { 49 | "path": "src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem" 50 | } 51 | }, 52 | "Org2": { 53 | "mspid": "Org2MSP", 54 | "peers": [ 55 | "peer0.org2.example.com" 56 | ], 57 | "certificateAuthorities": [ 58 | "ca.org2.example.com" 59 | ], 60 | "adminPrivateKeyPEM": { 61 | "path": "src/main/resources/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/priv_sk" 62 | }, 63 | "signedCertPEM": { 64 | "path": "src/main/resources/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts/Admin@org2.example.com-cert.pem" 65 | } 66 | } 67 | }, 68 | "orderers": { 69 | "orderer.example.com": { 70 | "url": "grpcs://39.96.85.23:7050", 71 | "mspid": "OrdererMSP", 72 | "grpcOptions": { 73 | "ssl-target-name-override": "orderer.example.com", 74 | "hostnameOverride": "orderer.example.com" 75 | }, 76 | "tlsCACerts": { 77 | "pem": "-----BEGIN CERTIFICATE-----\nMIICRDCCAemgAwIBAgIQdSFJHtlnPRZwPn+PUH9IIDAKBggqhkjOPQQDAjBsMQsw\nCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy\nYW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4\nYW1wbGUuY29tMB4XDTIwMDYwNDE2MTcwMFoXDTMwMDYwMjE2MTcwMFowbDELMAkG\nA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu\nY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5leGFt\ncGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABPomrN3fRcRRwARwkGdp\nG0qHtNXhRwjOXuyVQQIJiQh+3fLYTD7MUiek8UQHtKDfbvASG0teysb6IEEqA9oe\n4xajbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYB\nBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgEL9+T1jzWnzTHv+plFGt\nMbLdh9rLBt2Z4SoWhhjV/k4wCgYIKoZIzj0EAwIDSQAwRgIhAKf36jILe4eTbELg\ns1gEu2pybFaST8nv07QjQ15PbllEAiEAs3f978TuYhH0HpMSKTT+PcYin5RT7JC9\nkrN3DgFwRK4=\n-----END CERTIFICATE-----\n" 78 | }, 79 | "adminPrivateKeyPEM": { 80 | "path": "src/main/resources/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/keystore/priv_sk" 81 | }, 82 | "signedCertPEM": { 83 | "path": "src/main/resources/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/signcerts/Admin@example.com-cert.pem" 84 | } 85 | } 86 | }, 87 | "peers": { 88 | "peer0.org1.example.com": { 89 | "url": "grpcs://39.96.85.23:7051", 90 | "grpcOptions": { 91 | "ssl-target-name-override": "peer0.org1.example.com", 92 | "hostnameOverride": "peer0.org1.example.com", 93 | "request-timeout": 120001 94 | }, 95 | "tlsCACerts": { 96 | "pem": "-----BEGIN CERTIFICATE-----\nMIICVzCCAf6gAwIBAgIRALmkTukX8EIR1uIAK+q7H/cwCgYIKoZIzj0EAwIwdjEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs\nc2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMjAwNjA0MTYxNzAwWhcNMzAwNjAyMTYx\nNzAwWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE\nBxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G\nA1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49\nAwEHA0IABCez9HO1ZDloGksDy6Ha1pdoDJwCFC3jmPzgdvyVj678pJZmxJjSowRM\n7xu+Ya6KFYPUbF/3moyx5nZUQBBXazijbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNV\nHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNV\nHQ4EIgQg3XL5OQfChTW08e9WwLfoFTc8f/bfpEN6kj1DFWeldIAwCgYIKoZIzj0E\nAwIDRwAwRAIgJySPqJCws5tblLNtfMbUWavycD8lLt0WodzhBSkRCIMCICbN0Z2D\ncZ+Tcu+jF5yotPpi8czskZqYHtdvcvOUonAJ\n-----END CERTIFICATE-----\n" 97 | } 98 | }, 99 | "peer0.org2.example.com": { 100 | "url": "grpcs://39.96.85.23:9051", 101 | "grpcOptions": { 102 | "ssl-target-name-override": "peer0.org2.example.com", 103 | "hostnameOverride": "peer0.org2.example.com", 104 | "request-timeout": 120001 105 | }, 106 | "tlsCACerts": { 107 | "pem": "-----BEGIN CERTIFICATE-----\nMIICVzCCAf2gAwIBAgIQH++1FAW6krBPM3ne4oYI4TAKBggqhkjOPQQDAjB2MQsw\nCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy\nYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz\nY2Eub3JnMi5leGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3\nMDBaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH\nEw1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMR8wHQYD\nVQQDExZ0bHNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D\nAQcDQgAEIqYeS0M5hhiv1mTSlqGqoaR0ElD4l/kttEYnPVRDXHtX6myG9Gt/U+oW\n4+1+R3mFV0qL1pFZapjnbxEzprhLE6NtMGswDgYDVR0PAQH/BAQDAgGmMB0GA1Ud\nJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1Ud\nDgQiBCD5Q/wC2yEI95fsnnqp9DCf8EfHRTajBgkchASPtF3EUTAKBggqhkjOPQQD\nAgNIADBFAiA6J0EKpfPbnciF9cXNy5j5ziXrn3r1UK4Dv+jcsKsggwIhAIPnXQVX\n3wPQnJyDJOwN3x5zjj4BSuZDCEFSWgbSjG9v\n-----END CERTIFICATE-----\n" 108 | } 109 | } 110 | }, 111 | "certificateAuthorities": { 112 | "ca.org1.example.com": { 113 | "url": "https://39.96.85.23:7054", 114 | "caName": "ca-org1", 115 | "tlsCACerts": { 116 | "pem": "-----BEGIN CERTIFICATE-----\nMIICUTCCAfigAwIBAgIRAMZqnRjmoUgVSWAF3KKq1KIwCgYIKoZIzj0EAwIwczEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzEuZXhhbXBsZS5jb20wHhcNMjAwNjA0MTYxNzAwWhcNMzAwNjAyMTYxNzAw\nWjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN\nU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UE\nAxMTY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA\nBG9aZTXQ2E4o+Ey2e4LUikHGG7KBIbOoCf7Jo9lGL2BR2NDZh7nL4jdvSdMvPH8l\nlsc7Esaymr+wpmv8S8gIUXyjbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNVHSUEFjAU\nBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQg\nxU0LS2Qc3uf0HOIwqTEpdzyA0iCYx5fiLnMfaUAn3FMwCgYIKoZIzj0EAwIDRwAw\nRAIgTIkVeisNEXnmKbHoprQA96I/Fo4S+JeXb/sod1ETgOACIAq52FKdBfpi16jp\nXeLZ0QNQblGJqG7bjm2qhw7Bt5MA\n-----END CERTIFICATE-----\n" 117 | }, 118 | "httpOptions": { 119 | "verify": false 120 | } 121 | }, 122 | "ca.org2.example.com": { 123 | "url": "https://39.96.85.23:8054", 124 | "caName": "ca-org2", 125 | "tlsCACerts": { 126 | "pem": "-----BEGIN CERTIFICATE-----\nMIICUTCCAfegAwIBAgIQaCr79FmvLmX/gUqKsF7K3zAKBggqhkjOPQQDAjBzMQsw\nCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy\nYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu\nb3JnMi5leGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3MDBa\nMHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T\nYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMRwwGgYDVQQD\nExNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE\n28aZE16+aloruIoDYtr57Sbpz1rwbgHdpOLKFiHFmUSHbUBSt9mVyEkeWkD29vAq\n4xlG7lKo47+YqghOqehB2qNtMGswDgYDVR0PAQH/BAQDAgGmMB0GA1UdJQQWMBQG\nCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1UdDgQiBCC2\n94YSClknmPkwWJbNE4naTRkTCzrhcbFKdGtwz/WhzjAKBggqhkjOPQQDAgNIADBF\nAiEAwN3gVIEMuDcF8eK+vNqqYeBFQ3S5zP2vx7Tdvx+LqooCIGmhtShargBL8CGx\nSm4lHKVU3lcgCcui7zSs+oHxnll8\n-----END CERTIFICATE-----\n" 127 | }, 128 | "httpOptions": { 129 | "verify": false 130 | } 131 | } 132 | } 133 | } 134 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/ordererOrganizations/example.com/ca/ca.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICPjCCAeSgAwIBAgIRAM6HE2jUg9WIHKsyKJJ4mMcwCgYIKoZIzj0EAwIwaTEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt 5 | cGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3MDBaMGkxCzAJBgNV 6 | BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp 7 | c2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEXMBUGA1UEAxMOY2EuZXhhbXBsZS5j 8 | b20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQshvFgZhg0TNd39mZH0ZohJO7u 9 | oDYGBz1zlx/M1YANi5WIWGEw36DOoYUNURhzmGwAmsBA8Y6rv44kz5WSg7lEo20w 10 | azAOBgNVHQ8BAf8EBAMCAaYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB 11 | MA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIMQGU1IjxAUhgHE+iH+EGQFyVqq5 12 | yDxxFV10g1dwBARTMAoGCCqGSM49BAMCA0gAMEUCIQDqEBauDeaXNnrud6ydshZ+ 13 | N8V79QA5ibz7iRhYQlh7ZgIgCnYk/9hvo+1/ImnF6i8nX1Gc9B2OzzGJrVW2SDXZ 14 | GDs= 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/ordererOrganizations/example.com/ca/priv_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQghBG1onEXlznH0SWe 3 | HGvrPbWPqyyzqE657GBfPANL5sWhRANCAAQshvFgZhg0TNd39mZH0ZohJO7uoDYG 4 | Bz1zlx/M1YANi5WIWGEw36DOoYUNURhzmGwAmsBA8Y6rv44kz5WSg7lE 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/ordererOrganizations/example.com/msp/cacerts/ca.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICPjCCAeSgAwIBAgIRAM6HE2jUg9WIHKsyKJJ4mMcwCgYIKoZIzj0EAwIwaTEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt 5 | cGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3MDBaMGkxCzAJBgNV 6 | BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp 7 | c2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEXMBUGA1UEAxMOY2EuZXhhbXBsZS5j 8 | b20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQshvFgZhg0TNd39mZH0ZohJO7u 9 | oDYGBz1zlx/M1YANi5WIWGEw36DOoYUNURhzmGwAmsBA8Y6rv44kz5WSg7lEo20w 10 | azAOBgNVHQ8BAf8EBAMCAaYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB 11 | MA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIMQGU1IjxAUhgHE+iH+EGQFyVqq5 12 | yDxxFV10g1dwBARTMAoGCCqGSM49BAMCA0gAMEUCIQDqEBauDeaXNnrud6ydshZ+ 13 | N8V79QA5ibz7iRhYQlh7ZgIgCnYk/9hvo+1/ImnF6i8nX1Gc9B2OzzGJrVW2SDXZ 14 | GDs= 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/ordererOrganizations/example.com/msp/config.yaml: -------------------------------------------------------------------------------- 1 | NodeOUs: 2 | Enable: true 3 | ClientOUIdentifier: 4 | Certificate: cacerts/ca.example.com-cert.pem 5 | OrganizationalUnitIdentifier: client 6 | PeerOUIdentifier: 7 | Certificate: cacerts/ca.example.com-cert.pem 8 | OrganizationalUnitIdentifier: peer 9 | AdminOUIdentifier: 10 | Certificate: cacerts/ca.example.com-cert.pem 11 | OrganizationalUnitIdentifier: admin 12 | OrdererOUIdentifier: 13 | Certificate: cacerts/ca.example.com-cert.pem 14 | OrganizationalUnitIdentifier: orderer 15 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICRDCCAemgAwIBAgIQdSFJHtlnPRZwPn+PUH9IIDAKBggqhkjOPQQDAjBsMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4 5 | YW1wbGUuY29tMB4XDTIwMDYwNDE2MTcwMFoXDTMwMDYwMjE2MTcwMFowbDELMAkG 6 | A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu 7 | Y2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5leGFt 8 | cGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABPomrN3fRcRRwARwkGdp 9 | G0qHtNXhRwjOXuyVQQIJiQh+3fLYTD7MUiek8UQHtKDfbvASG0teysb6IEEqA9oe 10 | 4xajbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYB 11 | BQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgEL9+T1jzWnzTHv+plFGt 12 | MbLdh9rLBt2Z4SoWhhjV/k4wCgYIKoZIzj0EAwIDSQAwRgIhAKf36jILe4eTbELg 13 | s1gEu2pybFaST8nv07QjQ15PbllEAiEAs3f978TuYhH0HpMSKTT+PcYin5RT7JC9 14 | krN3DgFwRK4= 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICPjCCAeSgAwIBAgIRAM6HE2jUg9WIHKsyKJJ4mMcwCgYIKoZIzj0EAwIwaTEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt 5 | cGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3MDBaMGkxCzAJBgNV 6 | BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp 7 | c2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEXMBUGA1UEAxMOY2EuZXhhbXBsZS5j 8 | b20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQshvFgZhg0TNd39mZH0ZohJO7u 9 | oDYGBz1zlx/M1YANi5WIWGEw36DOoYUNURhzmGwAmsBA8Y6rv44kz5WSg7lEo20w 10 | azAOBgNVHQ8BAf8EBAMCAaYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB 11 | MA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIMQGU1IjxAUhgHE+iH+EGQFyVqq5 12 | yDxxFV10g1dwBARTMAoGCCqGSM49BAMCA0gAMEUCIQDqEBauDeaXNnrud6ydshZ+ 13 | N8V79QA5ibz7iRhYQlh7ZgIgCnYk/9hvo+1/ImnF6i8nX1Gc9B2OzzGJrVW2SDXZ 14 | GDs= 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/config.yaml: -------------------------------------------------------------------------------- 1 | NodeOUs: 2 | Enable: true 3 | ClientOUIdentifier: 4 | Certificate: cacerts/ca.example.com-cert.pem 5 | OrganizationalUnitIdentifier: client 6 | PeerOUIdentifier: 7 | Certificate: cacerts/ca.example.com-cert.pem 8 | OrganizationalUnitIdentifier: peer 9 | AdminOUIdentifier: 10 | Certificate: cacerts/ca.example.com-cert.pem 11 | OrganizationalUnitIdentifier: admin 12 | OrdererOUIdentifier: 13 | Certificate: cacerts/ca.example.com-cert.pem 14 | OrganizationalUnitIdentifier: orderer 15 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/keystore/priv_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg7G5pEjuM4mVkHkeD 3 | 9MCSM2TRdeMgJxKO1Xlv98+SnOehRANCAASbCFBndRTWrKwbQI7An7kIF9n3swN3 4 | gIylztKH9jmt0FDh0bGYCp7RSYwRZ9yyX14qFncJoybFDDsoVwLmkmNI 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/signcerts/orderer.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICHjCCAcWgAwIBAgIRAOTyw8FUrHITlWZZlYiY380wCgYIKoZIzj0EAwIwaTEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt 5 | cGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3MDBaMGoxCzAJBgNV 6 | BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp 7 | c2NvMRAwDgYDVQQLEwdvcmRlcmVyMRwwGgYDVQQDExNvcmRlcmVyLmV4YW1wbGUu 8 | Y29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmwhQZ3UU1qysG0COwJ+5CBfZ 9 | 97MDd4CMpc7Sh/Y5rdBQ4dGxmAqe0UmMEWfcsl9eKhZ3CaMmxQw7KFcC5pJjSKNN 10 | MEswDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgxAZT 11 | UiPEBSGAcT6If4QZAXJWqrnIPHEVXXSDV3AEBFMwCgYIKoZIzj0EAwIDRwAwRAIg 12 | A41hLbUBgZ7dCYxuxYcrMeFfuX/CqqDTZ8LMhGVOcZsCID8c+5QR8xlwGbnMpF3x 13 | io1mPEO1aJ3JftKqJCf2EDhl 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICRDCCAemgAwIBAgIQdSFJHtlnPRZwPn+PUH9IIDAKBggqhkjOPQQDAjBsMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4 5 | YW1wbGUuY29tMB4XDTIwMDYwNDE2MTcwMFoXDTMwMDYwMjE2MTcwMFowbDELMAkG 6 | A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu 7 | Y2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5leGFt 8 | cGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABPomrN3fRcRRwARwkGdp 9 | G0qHtNXhRwjOXuyVQQIJiQh+3fLYTD7MUiek8UQHtKDfbvASG0teysb6IEEqA9oe 10 | 4xajbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYB 11 | BQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgEL9+T1jzWnzTHv+plFGt 12 | MbLdh9rLBt2Z4SoWhhjV/k4wCgYIKoZIzj0EAwIDSQAwRgIhAKf36jILe4eTbELg 13 | s1gEu2pybFaST8nv07QjQ15PbllEAiEAs3f978TuYhH0HpMSKTT+PcYin5RT7JC9 14 | krN3DgFwRK4= 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICRDCCAemgAwIBAgIQdSFJHtlnPRZwPn+PUH9IIDAKBggqhkjOPQQDAjBsMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4 5 | YW1wbGUuY29tMB4XDTIwMDYwNDE2MTcwMFoXDTMwMDYwMjE2MTcwMFowbDELMAkG 6 | A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu 7 | Y2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5leGFt 8 | cGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABPomrN3fRcRRwARwkGdp 9 | G0qHtNXhRwjOXuyVQQIJiQh+3fLYTD7MUiek8UQHtKDfbvASG0teysb6IEEqA9oe 10 | 4xajbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYB 11 | BQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgEL9+T1jzWnzTHv+plFGt 12 | MbLdh9rLBt2Z4SoWhhjV/k4wCgYIKoZIzj0EAwIDSQAwRgIhAKf36jILe4eTbELg 13 | s1gEu2pybFaST8nv07QjQ15PbllEAiEAs3f978TuYhH0HpMSKTT+PcYin5RT7JC9 14 | krN3DgFwRK4= 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICtzCCAl6gAwIBAgIRANwigwykyp5qgiDbnvBKasIwCgYIKoZIzj0EAwIwbDEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l 5 | eGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3MDBaMFgxCzAJ 6 | BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh 7 | bmNpc2NvMRwwGgYDVQQDExNvcmRlcmVyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0C 8 | AQYIKoZIzj0DAQcDQgAEk5lJ//9shCZVfxaGcqlLz1MxCHELh2gmZAz+W20R+Qk+ 9 | jfpAwlxGJ/rhqEweA71PAygxaUnhxmH+XOL6PzH4o6OB9DCB8TAOBgNVHQ8BAf8E 10 | BAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQC 11 | MAAwKwYDVR0jBCQwIoAgEL9+T1jzWnzTHv+plFGtMbLdh9rLBt2Z4SoWhhjV/k4w 12 | gYQGA1UdEQR9MHuCE29yZGVyZXIuZXhhbXBsZS5jb22CB29yZGVyZXKCCWxvY2Fs 13 | aG9zdIITb3JkZXJlci5leGFtcGxlLmNvbYIHb3JkZXJlcoIJbG9jYWxob3N0ghNv 14 | cmRlcmVyLmV4YW1wbGUuY29tggdvcmRlcmVygglsb2NhbGhvc3QwCgYIKoZIzj0E 15 | AwIDRwAwRAIgNKvoPfM9qThkkZI7tpMzWUqgpZEpk6xd/9A2K69UD1wCICnUiqMb 16 | gOR+s0Az4/HZxGS4YA4dK5x5FL7QHXAyf9NX 17 | -----END CERTIFICATE----- 18 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgFFdCdfqVPcKI+p7i 3 | AQzBNS9pPUeamp/9vdylbQMii7ChRANCAASTmUn//2yEJlV/FoZyqUvPUzEIcQuH 4 | aCZkDP5bbRH5CT6N+kDCXEYn+uGoTB4DvU8DKDFpSeHGYf5c4vo/Mfij 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/ordererOrganizations/example.com/tlsca/priv_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgSE5IEou561fsIbRo 3 | rwQdf9WVaSRRfcpxW3126emzZ1GhRANCAAT6Jqzd30XEUcAEcJBnaRtKh7TV4UcI 4 | zl7slUECCYkIft3y2Ew+zFInpPFEB7Sg327wEhtLXsrG+iBBKgPaHuMW 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICRDCCAemgAwIBAgIQdSFJHtlnPRZwPn+PUH9IIDAKBggqhkjOPQQDAjBsMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4 5 | YW1wbGUuY29tMB4XDTIwMDYwNDE2MTcwMFoXDTMwMDYwMjE2MTcwMFowbDELMAkG 6 | A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu 7 | Y2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5leGFt 8 | cGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABPomrN3fRcRRwARwkGdp 9 | G0qHtNXhRwjOXuyVQQIJiQh+3fLYTD7MUiek8UQHtKDfbvASG0teysb6IEEqA9oe 10 | 4xajbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYB 11 | BQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgEL9+T1jzWnzTHv+plFGt 12 | MbLdh9rLBt2Z4SoWhhjV/k4wCgYIKoZIzj0EAwIDSQAwRgIhAKf36jILe4eTbELg 13 | s1gEu2pybFaST8nv07QjQ15PbllEAiEAs3f978TuYhH0HpMSKTT+PcYin5RT7JC9 14 | krN3DgFwRK4= 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/cacerts/ca.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICPjCCAeSgAwIBAgIRAM6HE2jUg9WIHKsyKJJ4mMcwCgYIKoZIzj0EAwIwaTEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt 5 | cGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3MDBaMGkxCzAJBgNV 6 | BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp 7 | c2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEXMBUGA1UEAxMOY2EuZXhhbXBsZS5j 8 | b20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQshvFgZhg0TNd39mZH0ZohJO7u 9 | oDYGBz1zlx/M1YANi5WIWGEw36DOoYUNURhzmGwAmsBA8Y6rv44kz5WSg7lEo20w 10 | azAOBgNVHQ8BAf8EBAMCAaYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB 11 | MA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIMQGU1IjxAUhgHE+iH+EGQFyVqq5 12 | yDxxFV10g1dwBARTMAoGCCqGSM49BAMCA0gAMEUCIQDqEBauDeaXNnrud6ydshZ+ 13 | N8V79QA5ibz7iRhYQlh7ZgIgCnYk/9hvo+1/ImnF6i8nX1Gc9B2OzzGJrVW2SDXZ 14 | GDs= 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/config.yaml: -------------------------------------------------------------------------------- 1 | NodeOUs: 2 | Enable: true 3 | ClientOUIdentifier: 4 | Certificate: cacerts/ca.example.com-cert.pem 5 | OrganizationalUnitIdentifier: client 6 | PeerOUIdentifier: 7 | Certificate: cacerts/ca.example.com-cert.pem 8 | OrganizationalUnitIdentifier: peer 9 | AdminOUIdentifier: 10 | Certificate: cacerts/ca.example.com-cert.pem 11 | OrganizationalUnitIdentifier: admin 12 | OrdererOUIdentifier: 13 | Certificate: cacerts/ca.example.com-cert.pem 14 | OrganizationalUnitIdentifier: orderer 15 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/keystore/priv_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg0Jc+/QpoZHFehwgo 3 | TMj2rtqPoLYYO9Fz2SAS/JvIxGmhRANCAARdCbDJeVt2mX0WVtwsVY8ywePxm26S 4 | Bt1216dYwaoisHpY+ZY1Y4+L36bfwSPjKN+hvxx9bi7oSwXkHQmy2VyJ 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/signcerts/Admin@example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICGTCCAcCgAwIBAgIQPAoe/tj0ZweqYcer8wmnSTAKBggqhkjOPQQDAjBpMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w 5 | bGUuY29tMB4XDTIwMDYwNDE2MTcwMFoXDTMwMDYwMjE2MTcwMFowZjELMAkGA1UE 6 | BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz 7 | Y28xDjAMBgNVBAsTBWFkbWluMRowGAYDVQQDDBFBZG1pbkBleGFtcGxlLmNvbTBZ 8 | MBMGByqGSM49AgEGCCqGSM49AwEHA0IABF0JsMl5W3aZfRZW3CxVjzLB4/GbbpIG 9 | 3XbXp1jBqiKwelj5ljVjj4vfpt/BI+Mo36G/HH1uLuhLBeQdCbLZXImjTTBLMA4G 10 | A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIMQGU1IjxAUh 11 | gHE+iH+EGQFyVqq5yDxxFV10g1dwBARTMAoGCCqGSM49BAMCA0cAMEQCICDX9DQQ 12 | JIXEcliehohe5THeM9waBYkqzexSPgXJ8056AiA0LT8WIwQ7phYHzyiVnvmPoU+q 13 | 9nV7FSQIgn1hufBOtQ== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/tlscacerts/tlsca.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICRDCCAemgAwIBAgIQdSFJHtlnPRZwPn+PUH9IIDAKBggqhkjOPQQDAjBsMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4 5 | YW1wbGUuY29tMB4XDTIwMDYwNDE2MTcwMFoXDTMwMDYwMjE2MTcwMFowbDELMAkG 6 | A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu 7 | Y2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5leGFt 8 | cGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABPomrN3fRcRRwARwkGdp 9 | G0qHtNXhRwjOXuyVQQIJiQh+3fLYTD7MUiek8UQHtKDfbvASG0teysb6IEEqA9oe 10 | 4xajbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYB 11 | BQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgEL9+T1jzWnzTHv+plFGt 12 | MbLdh9rLBt2Z4SoWhhjV/k4wCgYIKoZIzj0EAwIDSQAwRgIhAKf36jILe4eTbELg 13 | s1gEu2pybFaST8nv07QjQ15PbllEAiEAs3f978TuYhH0HpMSKTT+PcYin5RT7JC9 14 | krN3DgFwRK4= 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICRDCCAemgAwIBAgIQdSFJHtlnPRZwPn+PUH9IIDAKBggqhkjOPQQDAjBsMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4 5 | YW1wbGUuY29tMB4XDTIwMDYwNDE2MTcwMFoXDTMwMDYwMjE2MTcwMFowbDELMAkG 6 | A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu 7 | Y2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5leGFt 8 | cGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABPomrN3fRcRRwARwkGdp 9 | G0qHtNXhRwjOXuyVQQIJiQh+3fLYTD7MUiek8UQHtKDfbvASG0teysb6IEEqA9oe 10 | 4xajbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYB 11 | BQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgEL9+T1jzWnzTHv+plFGt 12 | MbLdh9rLBt2Z4SoWhhjV/k4wCgYIKoZIzj0EAwIDSQAwRgIhAKf36jILe4eTbELg 13 | s1gEu2pybFaST8nv07QjQ15PbllEAiEAs3f978TuYhH0HpMSKTT+PcYin5RT7JC9 14 | krN3DgFwRK4= 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/client.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICKzCCAdKgAwIBAgIQE92eaY0r5hmy0MhtfY0eKjAKBggqhkjOPQQDAjBsMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4 5 | YW1wbGUuY29tMB4XDTIwMDYwNDE2MTcwMFoXDTMwMDYwMjE2MTcwMFowVjELMAkG 6 | A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu 7 | Y2lzY28xGjAYBgNVBAMMEUFkbWluQGV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYI 8 | KoZIzj0DAQcDQgAE/f/iqr7luIoygl+cYlPzo2hMQclQ1u6IGphTpt/olwnfF3hf 9 | pu05YAROKXOV27vSZg7msQ0dQ+k7zVR8Un1Hh6NsMGowDgYDVR0PAQH/BAQDAgWg 10 | MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMCsG 11 | A1UdIwQkMCKAIBC/fk9Y81p80x7/qZRRrTGy3YfaywbdmeEqFoYY1f5OMAoGCCqG 12 | SM49BAMCA0cAMEQCICLsSfcYI+kgyzUX/m6bMdkXURK0W/VqeHJX5HIxsxs4AiBi 13 | WiV4k3pNywQWsvmDvikGafMc9Ol7bMzheR5Ckw1e6w== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/client.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg+6jhGFbWheu0esiE 3 | DDy8lYIL8Y1yKd1pj65slgxfIcahRANCAAT9/+KqvuW4ijKCX5xiU/OjaExByVDW 4 | 7ogamFOm3+iXCd8XeF+m7TlgBE4pc5Xbu9JmDuaxDR1D6TvNVHxSfUeH 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICUTCCAfigAwIBAgIRAMZqnRjmoUgVSWAF3KKq1KIwCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzEuZXhhbXBsZS5jb20wHhcNMjAwNjA0MTYxNzAwWhcNMzAwNjAyMTYxNzAw 6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UE 8 | AxMTY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA 9 | BG9aZTXQ2E4o+Ey2e4LUikHGG7KBIbOoCf7Jo9lGL2BR2NDZh7nL4jdvSdMvPH8l 10 | lsc7Esaymr+wpmv8S8gIUXyjbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNVHSUEFjAU 11 | BggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQg 12 | xU0LS2Qc3uf0HOIwqTEpdzyA0iCYx5fiLnMfaUAn3FMwCgYIKoZIzj0EAwIDRwAw 13 | RAIgTIkVeisNEXnmKbHoprQA96I/Fo4S+JeXb/sod1ETgOACIAq52FKdBfpi16jp 14 | XeLZ0QNQblGJqG7bjm2qhw7Bt5MA 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/ca/priv_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgX7eusaoDigMclVi7 3 | ETZTYjjNWaDXZOGlzhXnMa0gMNWhRANCAARvWmU10NhOKPhMtnuC1IpBxhuygSGz 4 | qAn+yaPZRi9gUdjQ2Ye5y+I3b0nTLzx/JZbHOxLGspq/sKZr/EvICFF8 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICUTCCAfigAwIBAgIRAMZqnRjmoUgVSWAF3KKq1KIwCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzEuZXhhbXBsZS5jb20wHhcNMjAwNjA0MTYxNzAwWhcNMzAwNjAyMTYxNzAw 6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UE 8 | AxMTY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA 9 | BG9aZTXQ2E4o+Ey2e4LUikHGG7KBIbOoCf7Jo9lGL2BR2NDZh7nL4jdvSdMvPH8l 10 | lsc7Esaymr+wpmv8S8gIUXyjbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNVHSUEFjAU 11 | BggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQg 12 | xU0LS2Qc3uf0HOIwqTEpdzyA0iCYx5fiLnMfaUAn3FMwCgYIKoZIzj0EAwIDRwAw 13 | RAIgTIkVeisNEXnmKbHoprQA96I/Fo4S+JeXb/sod1ETgOACIAq52FKdBfpi16jp 14 | XeLZ0QNQblGJqG7bjm2qhw7Bt5MA 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/msp/config.yaml: -------------------------------------------------------------------------------- 1 | NodeOUs: 2 | Enable: true 3 | ClientOUIdentifier: 4 | Certificate: cacerts/ca.org1.example.com-cert.pem 5 | OrganizationalUnitIdentifier: client 6 | PeerOUIdentifier: 7 | Certificate: cacerts/ca.org1.example.com-cert.pem 8 | OrganizationalUnitIdentifier: peer 9 | AdminOUIdentifier: 10 | Certificate: cacerts/ca.org1.example.com-cert.pem 11 | OrganizationalUnitIdentifier: admin 12 | OrdererOUIdentifier: 13 | Certificate: cacerts/ca.org1.example.com-cert.pem 14 | OrganizationalUnitIdentifier: orderer 15 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICVzCCAf6gAwIBAgIRALmkTukX8EIR1uIAK+q7H/cwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMjAwNjA0MTYxNzAwWhcNMzAwNjAyMTYx 6 | NzAwWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABCez9HO1ZDloGksDy6Ha1pdoDJwCFC3jmPzgdvyVj678pJZmxJjSowRM 10 | 7xu+Ya6KFYPUbF/3moyx5nZUQBBXazijbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNV 11 | HSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNV 12 | HQ4EIgQg3XL5OQfChTW08e9WwLfoFTc8f/bfpEN6kj1DFWeldIAwCgYIKoZIzj0E 13 | AwIDRwAwRAIgJySPqJCws5tblLNtfMbUWavycD8lLt0WodzhBSkRCIMCICbN0Z2D 14 | cZ+Tcu+jF5yotPpi8czskZqYHtdvcvOUonAJ 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICUTCCAfigAwIBAgIRAMZqnRjmoUgVSWAF3KKq1KIwCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzEuZXhhbXBsZS5jb20wHhcNMjAwNjA0MTYxNzAwWhcNMzAwNjAyMTYxNzAw 6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UE 8 | AxMTY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA 9 | BG9aZTXQ2E4o+Ey2e4LUikHGG7KBIbOoCf7Jo9lGL2BR2NDZh7nL4jdvSdMvPH8l 10 | lsc7Esaymr+wpmv8S8gIUXyjbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNVHSUEFjAU 11 | BggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQg 12 | xU0LS2Qc3uf0HOIwqTEpdzyA0iCYx5fiLnMfaUAn3FMwCgYIKoZIzj0EAwIDRwAw 13 | RAIgTIkVeisNEXnmKbHoprQA96I/Fo4S+JeXb/sod1ETgOACIAq52FKdBfpi16jp 14 | XeLZ0QNQblGJqG7bjm2qhw7Bt5MA 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/config.yaml: -------------------------------------------------------------------------------- 1 | NodeOUs: 2 | Enable: true 3 | ClientOUIdentifier: 4 | Certificate: cacerts/ca.org1.example.com-cert.pem 5 | OrganizationalUnitIdentifier: client 6 | PeerOUIdentifier: 7 | Certificate: cacerts/ca.org1.example.com-cert.pem 8 | OrganizationalUnitIdentifier: peer 9 | AdminOUIdentifier: 10 | Certificate: cacerts/ca.org1.example.com-cert.pem 11 | OrganizationalUnitIdentifier: admin 12 | OrdererOUIdentifier: 13 | Certificate: cacerts/ca.org1.example.com-cert.pem 14 | OrganizationalUnitIdentifier: orderer 15 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/keystore/priv_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgxSpAZBVYZQsUctPe 3 | bojUIuScC+yxpFDl0uhcAsfjjDKhRANCAATQxNHVK9uNjBzkp3r8ogoXnofD6C3N 4 | erQLWJrl2sqUBKnhvEF+uUYtKGRV+2oJKDRwPpttvFUPkaRvHPTJlC2w 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/signcerts/peer0.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICKDCCAc6gAwIBAgIQd+bnM+TY/+1NhwxwBEL6AzAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMS5leGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3MDBa 6 | MGoxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMQ0wCwYDVQQLEwRwZWVyMR8wHQYDVQQDExZwZWVyMC5vcmcx 8 | LmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0MTR1SvbjYwc 9 | 5Kd6/KIKF56Hw+gtzXq0C1ia5drKlASp4bxBfrlGLShkVftqCSg0cD6bbbxVD5Gk 10 | bxz0yZQtsKNNMEswDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0j 11 | BCQwIoAgxU0LS2Qc3uf0HOIwqTEpdzyA0iCYx5fiLnMfaUAn3FMwCgYIKoZIzj0E 12 | AwIDSAAwRQIhAI8a2RChcufJOwwymxk4pchTMjuzsrN5xQjiPWOPpATPAiAlio90 13 | 9tuom20wbOdvoK/FoZA9gda16e9PpJGF83guFA== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICVzCCAf6gAwIBAgIRALmkTukX8EIR1uIAK+q7H/cwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMjAwNjA0MTYxNzAwWhcNMzAwNjAyMTYx 6 | NzAwWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABCez9HO1ZDloGksDy6Ha1pdoDJwCFC3jmPzgdvyVj678pJZmxJjSowRM 10 | 7xu+Ya6KFYPUbF/3moyx5nZUQBBXazijbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNV 11 | HSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNV 12 | HQ4EIgQg3XL5OQfChTW08e9WwLfoFTc8f/bfpEN6kj1DFWeldIAwCgYIKoZIzj0E 13 | AwIDRwAwRAIgJySPqJCws5tblLNtfMbUWavycD8lLt0WodzhBSkRCIMCICbN0Z2D 14 | cZ+Tcu+jF5yotPpi8czskZqYHtdvcvOUonAJ 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICVzCCAf6gAwIBAgIRALmkTukX8EIR1uIAK+q7H/cwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMjAwNjA0MTYxNzAwWhcNMzAwNjAyMTYx 6 | NzAwWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABCez9HO1ZDloGksDy6Ha1pdoDJwCFC3jmPzgdvyVj678pJZmxJjSowRM 10 | 7xu+Ya6KFYPUbF/3moyx5nZUQBBXazijbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNV 11 | HSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNV 12 | HQ4EIgQg3XL5OQfChTW08e9WwLfoFTc8f/bfpEN6kj1DFWeldIAwCgYIKoZIzj0E 13 | AwIDRwAwRAIgJySPqJCws5tblLNtfMbUWavycD8lLt0WodzhBSkRCIMCICbN0Z2D 14 | cZ+Tcu+jF5yotPpi8czskZqYHtdvcvOUonAJ 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICyDCCAm6gAwIBAgIQOorAcdOJNzhH4MeXXpy+vDAKBggqhkjOPQQDAjB2MQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3 6 | MDBaMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 7 | Ew1TYW4gRnJhbmNpc2NvMR8wHQYDVQQDExZwZWVyMC5vcmcxLmV4YW1wbGUuY29t 8 | MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEf3k30Im6b3GL4UWhi1PSmuhfhTp8 9 | kqs0hvOmu3JSQb+49dCi769RYPyvq6kWjIxOxdC9RsYmxJ1/L/vAP8QvhKOB+DCB 10 | 9TAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC 11 | MAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAg3XL5OQfChTW08e9WwLfoFTc8f/bf 12 | pEN6kj1DFWeldIAwgYgGA1UdEQSBgDB+ghZwZWVyMC5vcmcxLmV4YW1wbGUuY29t 13 | ggVwZWVyMIIJbG9jYWxob3N0ghZwZWVyMC5vcmcxLmV4YW1wbGUuY29tggVwZWVy 14 | MIIJbG9jYWxob3N0ghZwZWVyMC5vcmcxLmV4YW1wbGUuY29tggVwZWVyMIIJbG9j 15 | YWxob3N0MAoGCCqGSM49BAMCA0gAMEUCIQCK4+Obesr4MJ8dNIhkc6hCy59/61Pn 16 | /sWI1oLkoFMdzQIgKk6PgqZFVUwcnFe1uPQIBV+2Bl02nXNJrL/Hq/niBcU= 17 | -----END CERTIFICATE----- 18 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgW7nJXMrG5cxb6wD4 3 | 5h3mgt1YWYaed5bprkLVpgjIuaahRANCAAR/eTfQibpvcYvhRaGLU9Ka6F+FOnyS 4 | qzSG86a7clJBv7j10KLvr1Fg/K+rqRaMjE7F0L1GxibEnX8v+8A/xC+E 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/tlsca/priv_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgwxOdaOrwoDXR8lU7 3 | tZ1j0rmMipbgVNuvNDJNvm4gIeyhRANCAAQns/RztWQ5aBpLA8uh2taXaAycAhQt 4 | 45j84Hb8lY+u/KSWZsSY0qMETO8bvmGuihWD1Gxf95qMseZ2VEAQV2s4 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICVzCCAf6gAwIBAgIRALmkTukX8EIR1uIAK+q7H/cwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMjAwNjA0MTYxNzAwWhcNMzAwNjAyMTYx 6 | NzAwWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABCez9HO1ZDloGksDy6Ha1pdoDJwCFC3jmPzgdvyVj678pJZmxJjSowRM 10 | 7xu+Ya6KFYPUbF/3moyx5nZUQBBXazijbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNV 11 | HSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNV 12 | HQ4EIgQg3XL5OQfChTW08e9WwLfoFTc8f/bfpEN6kj1DFWeldIAwCgYIKoZIzj0E 13 | AwIDRwAwRAIgJySPqJCws5tblLNtfMbUWavycD8lLt0WodzhBSkRCIMCICbN0Z2D 14 | cZ+Tcu+jF5yotPpi8czskZqYHtdvcvOUonAJ 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICUTCCAfigAwIBAgIRAMZqnRjmoUgVSWAF3KKq1KIwCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzEuZXhhbXBsZS5jb20wHhcNMjAwNjA0MTYxNzAwWhcNMzAwNjAyMTYxNzAw 6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UE 8 | AxMTY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA 9 | BG9aZTXQ2E4o+Ey2e4LUikHGG7KBIbOoCf7Jo9lGL2BR2NDZh7nL4jdvSdMvPH8l 10 | lsc7Esaymr+wpmv8S8gIUXyjbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNVHSUEFjAU 11 | BggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQg 12 | xU0LS2Qc3uf0HOIwqTEpdzyA0iCYx5fiLnMfaUAn3FMwCgYIKoZIzj0EAwIDRwAw 13 | RAIgTIkVeisNEXnmKbHoprQA96I/Fo4S+JeXb/sod1ETgOACIAq52FKdBfpi16jp 14 | XeLZ0QNQblGJqG7bjm2qhw7Bt5MA 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/config.yaml: -------------------------------------------------------------------------------- 1 | NodeOUs: 2 | Enable: true 3 | ClientOUIdentifier: 4 | Certificate: cacerts/ca.org1.example.com-cert.pem 5 | OrganizationalUnitIdentifier: client 6 | PeerOUIdentifier: 7 | Certificate: cacerts/ca.org1.example.com-cert.pem 8 | OrganizationalUnitIdentifier: peer 9 | AdminOUIdentifier: 10 | Certificate: cacerts/ca.org1.example.com-cert.pem 11 | OrganizationalUnitIdentifier: admin 12 | OrdererOUIdentifier: 13 | Certificate: cacerts/ca.org1.example.com-cert.pem 14 | OrganizationalUnitIdentifier: orderer 15 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/priv_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgJP1CPv6EFmhWGKzq 3 | EzJ8fXVWtRKeoM+9Mz5PipOzTsGhRANCAAS9PalbvlcXhjRw8WF/oUUqF2OCtke9 4 | pC817PDZNcKwlmTBSqot7iGtwmQx1II8iH47mC0m7DWEvqU0E2yJjYzB 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICKDCCAdCgAwIBAgIRAIzNq1qpQ3vM0Upg4J0OOK4wCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzEuZXhhbXBsZS5jb20wHhcNMjAwNjA0MTYxNzAwWhcNMzAwNjAyMTYxNzAw 6 | WjBrMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEOMAwGA1UECxMFYWRtaW4xHzAdBgNVBAMMFkFkbWluQG9y 8 | ZzEuZXhhbXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAS9PalbvlcX 9 | hjRw8WF/oUUqF2OCtke9pC817PDZNcKwlmTBSqot7iGtwmQx1II8iH47mC0m7DWE 10 | vqU0E2yJjYzBo00wSzAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADArBgNV 11 | HSMEJDAigCDFTQtLZBze5/Qc4jCpMSl3PIDSIJjHl+Iucx9pQCfcUzAKBggqhkjO 12 | PQQDAgNGADBDAiACHiuJWEaqBh4lF/TaGRdlgqv5DDiLyzkuRJOcJp3JMwIfBd5i 13 | vYZ/lYKOVXJIJrB2udTu+erUZwNYn/RqTDiFKQ== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICVzCCAf6gAwIBAgIRALmkTukX8EIR1uIAK+q7H/cwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMjAwNjA0MTYxNzAwWhcNMzAwNjAyMTYx 6 | NzAwWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABCez9HO1ZDloGksDy6Ha1pdoDJwCFC3jmPzgdvyVj678pJZmxJjSowRM 10 | 7xu+Ya6KFYPUbF/3moyx5nZUQBBXazijbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNV 11 | HSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNV 12 | HQ4EIgQg3XL5OQfChTW08e9WwLfoFTc8f/bfpEN6kj1DFWeldIAwCgYIKoZIzj0E 13 | AwIDRwAwRAIgJySPqJCws5tblLNtfMbUWavycD8lLt0WodzhBSkRCIMCICbN0Z2D 14 | cZ+Tcu+jF5yotPpi8czskZqYHtdvcvOUonAJ 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICVzCCAf6gAwIBAgIRALmkTukX8EIR1uIAK+q7H/cwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMjAwNjA0MTYxNzAwWhcNMzAwNjAyMTYx 6 | NzAwWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABCez9HO1ZDloGksDy6Ha1pdoDJwCFC3jmPzgdvyVj678pJZmxJjSowRM 10 | 7xu+Ya6KFYPUbF/3moyx5nZUQBBXazijbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNV 11 | HSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNV 12 | HQ4EIgQg3XL5OQfChTW08e9WwLfoFTc8f/bfpEN6kj1DFWeldIAwCgYIKoZIzj0E 13 | AwIDRwAwRAIgJySPqJCws5tblLNtfMbUWavycD8lLt0WodzhBSkRCIMCICbN0Z2D 14 | cZ+Tcu+jF5yotPpi8czskZqYHtdvcvOUonAJ 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/client.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICOzCCAeKgAwIBAgIRAIsmDWc/p1Lsb5MreCfZHwAwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMjAwNjA0MTYxNzAwWhcNMzAwNjAyMTYx 6 | NzAwWjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMS5leGFtcGxlLmNv 8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDRfK2nON4BJFtjw9hwSVrfQPkkh 9 | vF+KppNOzuYtMI+lhX4NhygabyBA3fwKhbX1dGNgS1ZSzVoE8KcH0Q8ng8ejbDBq 10 | MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw 11 | DAYDVR0TAQH/BAIwADArBgNVHSMEJDAigCDdcvk5B8KFNbTx71bAt+gVNzx/9t+k 12 | Q3qSPUMVZ6V0gDAKBggqhkjOPQQDAgNHADBEAiAdB2QBBvVYpsLRXPrwXTH+tsHh 13 | ZU12oRrxJVlWuxS0sgIgG3osP746rWmStl5O1Ec8LWojyt3ZtlnXQmoHYK0WqEc= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/client.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgIV22MQqy9ie3OOKk 3 | tYjI0EwM0a/jEqkUOYUsQ/J/VB6hRANCAAQ0XytpzjeASRbY8PYcEla30D5JIbxf 4 | iqaTTs7mLTCPpYV+DYcoGm8gQN38CoW19XRjYEtWUs1aBPCnB9EPJ4PH 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICUTCCAfigAwIBAgIRAMZqnRjmoUgVSWAF3KKq1KIwCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzEuZXhhbXBsZS5jb20wHhcNMjAwNjA0MTYxNzAwWhcNMzAwNjAyMTYxNzAw 6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UE 8 | AxMTY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA 9 | BG9aZTXQ2E4o+Ey2e4LUikHGG7KBIbOoCf7Jo9lGL2BR2NDZh7nL4jdvSdMvPH8l 10 | lsc7Esaymr+wpmv8S8gIUXyjbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNVHSUEFjAU 11 | BggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQg 12 | xU0LS2Qc3uf0HOIwqTEpdzyA0iCYx5fiLnMfaUAn3FMwCgYIKoZIzj0EAwIDRwAw 13 | RAIgTIkVeisNEXnmKbHoprQA96I/Fo4S+JeXb/sod1ETgOACIAq52FKdBfpi16jp 14 | XeLZ0QNQblGJqG7bjm2qhw7Bt5MA 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/config.yaml: -------------------------------------------------------------------------------- 1 | NodeOUs: 2 | Enable: true 3 | ClientOUIdentifier: 4 | Certificate: cacerts/ca.org1.example.com-cert.pem 5 | OrganizationalUnitIdentifier: client 6 | PeerOUIdentifier: 7 | Certificate: cacerts/ca.org1.example.com-cert.pem 8 | OrganizationalUnitIdentifier: peer 9 | AdminOUIdentifier: 10 | Certificate: cacerts/ca.org1.example.com-cert.pem 11 | OrganizationalUnitIdentifier: admin 12 | OrdererOUIdentifier: 13 | Certificate: cacerts/ca.org1.example.com-cert.pem 14 | OrganizationalUnitIdentifier: orderer 15 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/priv_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg9KQMzrve0nNEU/ld 3 | Ts4rXcdOe18vwzXW1rfspmV24EGhRANCAASaVgu4Sasr1RxF9fpCGEX06Z+8c6B6 4 | PQpyj49Ugltb/ZAZtkr99Dr8cR3QJUXF7ccD0Wu3ad40fYcQIqIkstf+ 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts/User1@org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICKjCCAdCgAwIBAgIQAM811/DS2+Zcb3YVC+I45DAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMS5leGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3MDBa 6 | MGwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMQ8wDQYDVQQLEwZjbGllbnQxHzAdBgNVBAMMFlVzZXIxQG9y 8 | ZzEuZXhhbXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASaVgu4Sasr 9 | 1RxF9fpCGEX06Z+8c6B6PQpyj49Ugltb/ZAZtkr99Dr8cR3QJUXF7ccD0Wu3ad40 10 | fYcQIqIkstf+o00wSzAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADArBgNV 11 | HSMEJDAigCDFTQtLZBze5/Qc4jCpMSl3PIDSIJjHl+Iucx9pQCfcUzAKBggqhkjO 12 | PQQDAgNIADBFAiEAndw+VLABAspJd5hsH1/CX7vzRXeTaqfnI2fdNxyGAlUCIBmi 13 | 0W7KA3au9uhtPD2pkzEhpnpw5Qjzdpm3HqDVao2h 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICVzCCAf6gAwIBAgIRALmkTukX8EIR1uIAK+q7H/cwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMjAwNjA0MTYxNzAwWhcNMzAwNjAyMTYx 6 | NzAwWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABCez9HO1ZDloGksDy6Ha1pdoDJwCFC3jmPzgdvyVj678pJZmxJjSowRM 10 | 7xu+Ya6KFYPUbF/3moyx5nZUQBBXazijbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNV 11 | HSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNV 12 | HQ4EIgQg3XL5OQfChTW08e9WwLfoFTc8f/bfpEN6kj1DFWeldIAwCgYIKoZIzj0E 13 | AwIDRwAwRAIgJySPqJCws5tblLNtfMbUWavycD8lLt0WodzhBSkRCIMCICbN0Z2D 14 | cZ+Tcu+jF5yotPpi8czskZqYHtdvcvOUonAJ 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICVzCCAf6gAwIBAgIRALmkTukX8EIR1uIAK+q7H/cwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMjAwNjA0MTYxNzAwWhcNMzAwNjAyMTYx 6 | NzAwWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G 8 | A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 9 | AwEHA0IABCez9HO1ZDloGksDy6Ha1pdoDJwCFC3jmPzgdvyVj678pJZmxJjSowRM 10 | 7xu+Ya6KFYPUbF/3moyx5nZUQBBXazijbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNV 11 | HSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNV 12 | HQ4EIgQg3XL5OQfChTW08e9WwLfoFTc8f/bfpEN6kj1DFWeldIAwCgYIKoZIzj0E 13 | AwIDRwAwRAIgJySPqJCws5tblLNtfMbUWavycD8lLt0WodzhBSkRCIMCICbN0Z2D 14 | cZ+Tcu+jF5yotPpi8czskZqYHtdvcvOUonAJ 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/client.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICOzCCAeKgAwIBAgIRAOfN/ZPklNbU17M0oSHypAUwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMjAwNjA0MTYxNzAwWhcNMzAwNjAyMTYx 6 | NzAwWjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWVXNlcjFAb3JnMS5leGFtcGxlLmNv 8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGsFhJlejXzC8naSoT6tAwzDHVNi 9 | MHx1MaGawxPiYr0XQ5SFo9RgR0FKyj2/QvecZgdiiRpfiNb5ezXPdbU5zimjbDBq 10 | MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw 11 | DAYDVR0TAQH/BAIwADArBgNVHSMEJDAigCDdcvk5B8KFNbTx71bAt+gVNzx/9t+k 12 | Q3qSPUMVZ6V0gDAKBggqhkjOPQQDAgNHADBEAiBMOEqEWF77AaU81ZjGwOZphl3m 13 | KJwKTDkKoEKnjDmJpgIgUeSVt7+zfG9XbOagJQ9erV0Z+HgbvhTKxzJHqhM1giQ= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/client.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgAAmHOgVDn4XjZtLu 3 | oYfkViQhr/kIOtOCP44nXASuS7qhRANCAARrBYSZXo18wvJ2kqE+rQMMwx1TYjB8 4 | dTGhmsMT4mK9F0OUhaPUYEdBSso9v0L3nGYHYokaX4jW+Xs1z3W1Oc4p 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICUTCCAfegAwIBAgIQaCr79FmvLmX/gUqKsF7K3zAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMi5leGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3MDBa 6 | MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMRwwGgYDVQQD 8 | ExNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE 9 | 28aZE16+aloruIoDYtr57Sbpz1rwbgHdpOLKFiHFmUSHbUBSt9mVyEkeWkD29vAq 10 | 4xlG7lKo47+YqghOqehB2qNtMGswDgYDVR0PAQH/BAQDAgGmMB0GA1UdJQQWMBQG 11 | CCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1UdDgQiBCC2 12 | 94YSClknmPkwWJbNE4naTRkTCzrhcbFKdGtwz/WhzjAKBggqhkjOPQQDAgNIADBF 13 | AiEAwN3gVIEMuDcF8eK+vNqqYeBFQ3S5zP2vx7Tdvx+LqooCIGmhtShargBL8CGx 14 | Sm4lHKVU3lcgCcui7zSs+oHxnll8 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/ca/priv_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgCFBorcXxntRpJU2o 3 | Inhd6gpmo6O7zEv7EFhlTcucohihRANCAATbxpkTXr5qWiu4igNi2vntJunPWvBu 4 | Ad2k4soWIcWZRIdtQFK32ZXISR5aQPb28CrjGUbuUqjjv5iqCE6p6EHa 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/connection-org2.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test-network-org2", 3 | "version": "1.0.0", 4 | "client": { 5 | "organization": "Org2", 6 | "connection": { 7 | "timeout": { 8 | "peer": { 9 | "endorser": "300" 10 | } 11 | } 12 | } 13 | }, 14 | "organizations": { 15 | "Org2": { 16 | "mspid": "Org2MSP", 17 | "peers": [ 18 | "peer0.org2.example.com" 19 | ], 20 | "certificateAuthorities": [ 21 | "ca.org2.example.com" 22 | ] 23 | } 24 | }, 25 | "peers": { 26 | "peer0.org2.example.com": { 27 | "url": "grpcs://localhost:9051", 28 | "tlsCACerts": { 29 | "pem": "-----BEGIN CERTIFICATE-----\nMIICVzCCAf2gAwIBAgIQH++1FAW6krBPM3ne4oYI4TAKBggqhkjOPQQDAjB2MQsw\nCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy\nYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz\nY2Eub3JnMi5leGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3\nMDBaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH\nEw1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMR8wHQYD\nVQQDExZ0bHNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D\nAQcDQgAEIqYeS0M5hhiv1mTSlqGqoaR0ElD4l/kttEYnPVRDXHtX6myG9Gt/U+oW\n4+1+R3mFV0qL1pFZapjnbxEzprhLE6NtMGswDgYDVR0PAQH/BAQDAgGmMB0GA1Ud\nJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1Ud\nDgQiBCD5Q/wC2yEI95fsnnqp9DCf8EfHRTajBgkchASPtF3EUTAKBggqhkjOPQQD\nAgNIADBFAiA6J0EKpfPbnciF9cXNy5j5ziXrn3r1UK4Dv+jcsKsggwIhAIPnXQVX\n3wPQnJyDJOwN3x5zjj4BSuZDCEFSWgbSjG9v\n-----END CERTIFICATE-----\n" 30 | }, 31 | "grpcOptions": { 32 | "ssl-target-name-override": "peer0.org2.example.com", 33 | "hostnameOverride": "peer0.org2.example.com" 34 | } 35 | } 36 | }, 37 | "certificateAuthorities": { 38 | "ca.org2.example.com": { 39 | "url": "https://localhost:8054", 40 | "caName": "ca-org2", 41 | "tlsCACerts": { 42 | "pem": "-----BEGIN CERTIFICATE-----\nMIICUTCCAfegAwIBAgIQaCr79FmvLmX/gUqKsF7K3zAKBggqhkjOPQQDAjBzMQsw\nCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy\nYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu\nb3JnMi5leGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3MDBa\nMHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T\nYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMRwwGgYDVQQD\nExNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE\n28aZE16+aloruIoDYtr57Sbpz1rwbgHdpOLKFiHFmUSHbUBSt9mVyEkeWkD29vAq\n4xlG7lKo47+YqghOqehB2qNtMGswDgYDVR0PAQH/BAQDAgGmMB0GA1UdJQQWMBQG\nCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1UdDgQiBCC2\n94YSClknmPkwWJbNE4naTRkTCzrhcbFKdGtwz/WhzjAKBggqhkjOPQQDAgNIADBF\nAiEAwN3gVIEMuDcF8eK+vNqqYeBFQ3S5zP2vx7Tdvx+LqooCIGmhtShargBL8CGx\nSm4lHKVU3lcgCcui7zSs+oHxnll8\n-----END CERTIFICATE-----\n" 43 | }, 44 | "httpOptions": { 45 | "verify": false 46 | } 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/connection-org2.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: test-network-org2 3 | version: 1.0.0 4 | client: 5 | organization: Org2 6 | connection: 7 | timeout: 8 | peer: 9 | endorser: '300' 10 | organizations: 11 | Org2: 12 | mspid: Org2MSP 13 | peers: 14 | - peer0.org2.example.com 15 | certificateAuthorities: 16 | - ca.org2.example.com 17 | peers: 18 | peer0.org2.example.com: 19 | url: grpcs://localhost:9051 20 | tlsCACerts: 21 | pem: | 22 | -----BEGIN CERTIFICATE----- 23 | MIICVzCCAf2gAwIBAgIQH++1FAW6krBPM3ne4oYI4TAKBggqhkjOPQQDAjB2MQsw 24 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 25 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 26 | Y2Eub3JnMi5leGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3 27 | MDBaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 28 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMR8wHQYD 29 | VQQDExZ0bHNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D 30 | AQcDQgAEIqYeS0M5hhiv1mTSlqGqoaR0ElD4l/kttEYnPVRDXHtX6myG9Gt/U+oW 31 | 4+1+R3mFV0qL1pFZapjnbxEzprhLE6NtMGswDgYDVR0PAQH/BAQDAgGmMB0GA1Ud 32 | JQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1Ud 33 | DgQiBCD5Q/wC2yEI95fsnnqp9DCf8EfHRTajBgkchASPtF3EUTAKBggqhkjOPQQD 34 | AgNIADBFAiA6J0EKpfPbnciF9cXNy5j5ziXrn3r1UK4Dv+jcsKsggwIhAIPnXQVX 35 | 3wPQnJyDJOwN3x5zjj4BSuZDCEFSWgbSjG9v 36 | -----END CERTIFICATE----- 37 | 38 | grpcOptions: 39 | ssl-target-name-override: peer0.org2.example.com 40 | hostnameOverride: peer0.org2.example.com 41 | certificateAuthorities: 42 | ca.org2.example.com: 43 | url: https://localhost:8054 44 | caName: ca-org2 45 | tlsCACerts: 46 | pem: | 47 | -----BEGIN CERTIFICATE----- 48 | MIICUTCCAfegAwIBAgIQaCr79FmvLmX/gUqKsF7K3zAKBggqhkjOPQQDAjBzMQsw 49 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 50 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 51 | b3JnMi5leGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3MDBa 52 | MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 53 | YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMRwwGgYDVQQD 54 | ExNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE 55 | 28aZE16+aloruIoDYtr57Sbpz1rwbgHdpOLKFiHFmUSHbUBSt9mVyEkeWkD29vAq 56 | 4xlG7lKo47+YqghOqehB2qNtMGswDgYDVR0PAQH/BAQDAgGmMB0GA1UdJQQWMBQG 57 | CCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1UdDgQiBCC2 58 | 94YSClknmPkwWJbNE4naTRkTCzrhcbFKdGtwz/WhzjAKBggqhkjOPQQDAgNIADBF 59 | AiEAwN3gVIEMuDcF8eK+vNqqYeBFQ3S5zP2vx7Tdvx+LqooCIGmhtShargBL8CGx 60 | Sm4lHKVU3lcgCcui7zSs+oHxnll8 61 | -----END CERTIFICATE----- 62 | 63 | httpOptions: 64 | verify: false 65 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICUTCCAfegAwIBAgIQaCr79FmvLmX/gUqKsF7K3zAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMi5leGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3MDBa 6 | MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMRwwGgYDVQQD 8 | ExNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE 9 | 28aZE16+aloruIoDYtr57Sbpz1rwbgHdpOLKFiHFmUSHbUBSt9mVyEkeWkD29vAq 10 | 4xlG7lKo47+YqghOqehB2qNtMGswDgYDVR0PAQH/BAQDAgGmMB0GA1UdJQQWMBQG 11 | CCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1UdDgQiBCC2 12 | 94YSClknmPkwWJbNE4naTRkTCzrhcbFKdGtwz/WhzjAKBggqhkjOPQQDAgNIADBF 13 | AiEAwN3gVIEMuDcF8eK+vNqqYeBFQ3S5zP2vx7Tdvx+LqooCIGmhtShargBL8CGx 14 | Sm4lHKVU3lcgCcui7zSs+oHxnll8 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/msp/config.yaml: -------------------------------------------------------------------------------- 1 | NodeOUs: 2 | Enable: true 3 | ClientOUIdentifier: 4 | Certificate: cacerts/ca.org2.example.com-cert.pem 5 | OrganizationalUnitIdentifier: client 6 | PeerOUIdentifier: 7 | Certificate: cacerts/ca.org2.example.com-cert.pem 8 | OrganizationalUnitIdentifier: peer 9 | AdminOUIdentifier: 10 | Certificate: cacerts/ca.org2.example.com-cert.pem 11 | OrganizationalUnitIdentifier: admin 12 | OrdererOUIdentifier: 13 | Certificate: cacerts/ca.org2.example.com-cert.pem 14 | OrganizationalUnitIdentifier: orderer 15 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICVzCCAf2gAwIBAgIQH++1FAW6krBPM3ne4oYI4TAKBggqhkjOPQQDAjB2MQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 5 | Y2Eub3JnMi5leGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3 6 | MDBaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMR8wHQYD 8 | VQQDExZ0bHNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D 9 | AQcDQgAEIqYeS0M5hhiv1mTSlqGqoaR0ElD4l/kttEYnPVRDXHtX6myG9Gt/U+oW 10 | 4+1+R3mFV0qL1pFZapjnbxEzprhLE6NtMGswDgYDVR0PAQH/BAQDAgGmMB0GA1Ud 11 | JQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1Ud 12 | DgQiBCD5Q/wC2yEI95fsnnqp9DCf8EfHRTajBgkchASPtF3EUTAKBggqhkjOPQQD 13 | AgNIADBFAiA6J0EKpfPbnciF9cXNy5j5ziXrn3r1UK4Dv+jcsKsggwIhAIPnXQVX 14 | 3wPQnJyDJOwN3x5zjj4BSuZDCEFSWgbSjG9v 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICUTCCAfegAwIBAgIQaCr79FmvLmX/gUqKsF7K3zAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMi5leGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3MDBa 6 | MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMRwwGgYDVQQD 8 | ExNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE 9 | 28aZE16+aloruIoDYtr57Sbpz1rwbgHdpOLKFiHFmUSHbUBSt9mVyEkeWkD29vAq 10 | 4xlG7lKo47+YqghOqehB2qNtMGswDgYDVR0PAQH/BAQDAgGmMB0GA1UdJQQWMBQG 11 | CCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1UdDgQiBCC2 12 | 94YSClknmPkwWJbNE4naTRkTCzrhcbFKdGtwz/WhzjAKBggqhkjOPQQDAgNIADBF 13 | AiEAwN3gVIEMuDcF8eK+vNqqYeBFQ3S5zP2vx7Tdvx+LqooCIGmhtShargBL8CGx 14 | Sm4lHKVU3lcgCcui7zSs+oHxnll8 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/config.yaml: -------------------------------------------------------------------------------- 1 | NodeOUs: 2 | Enable: true 3 | ClientOUIdentifier: 4 | Certificate: cacerts/ca.org2.example.com-cert.pem 5 | OrganizationalUnitIdentifier: client 6 | PeerOUIdentifier: 7 | Certificate: cacerts/ca.org2.example.com-cert.pem 8 | OrganizationalUnitIdentifier: peer 9 | AdminOUIdentifier: 10 | Certificate: cacerts/ca.org2.example.com-cert.pem 11 | OrganizationalUnitIdentifier: admin 12 | OrdererOUIdentifier: 13 | Certificate: cacerts/ca.org2.example.com-cert.pem 14 | OrganizationalUnitIdentifier: orderer 15 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/keystore/priv_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgcaxG4nUox4xd+8M5 3 | tT57dWJferKCIEfdB55iXkCvNn2hRANCAAQpmdtBbM/mJD6osYW9P9D6ExHHFfBV 4 | ja1nLqfK89H0U6cJwLfeSpq/3C6SSrulvwoGG1l5IN9w5InNindQo4Q+ 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/signcerts/peer0.org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICJzCCAc6gAwIBAgIQAzDl2zNE9AU6rIFcc0WN+TAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMi5leGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3MDBa 6 | MGoxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMQ0wCwYDVQQLEwRwZWVyMR8wHQYDVQQDExZwZWVyMC5vcmcy 8 | LmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKZnbQWzP5iQ+ 9 | qLGFvT/Q+hMRxxXwVY2tZy6nyvPR9FOnCcC33kqav9wukkq7pb8KBhtZeSDfcOSJ 10 | zYp3UKOEPqNNMEswDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0j 11 | BCQwIoAgtveGEgpZJ5j5MFiWzROJ2k0ZEws64XGxSnRrcM/1oc4wCgYIKoZIzj0E 12 | AwIDRwAwRAIgUsXDS5wLaD5FKU7OYGnJZCt86bvybBo9ADg2PNY3j7cCIELj1umm 13 | dGR4mc7cVWP6eNrduDZOn2yIFu3UHszWIIOV 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICVzCCAf2gAwIBAgIQH++1FAW6krBPM3ne4oYI4TAKBggqhkjOPQQDAjB2MQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 5 | Y2Eub3JnMi5leGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3 6 | MDBaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMR8wHQYD 8 | VQQDExZ0bHNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D 9 | AQcDQgAEIqYeS0M5hhiv1mTSlqGqoaR0ElD4l/kttEYnPVRDXHtX6myG9Gt/U+oW 10 | 4+1+R3mFV0qL1pFZapjnbxEzprhLE6NtMGswDgYDVR0PAQH/BAQDAgGmMB0GA1Ud 11 | JQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1Ud 12 | DgQiBCD5Q/wC2yEI95fsnnqp9DCf8EfHRTajBgkchASPtF3EUTAKBggqhkjOPQQD 13 | AgNIADBFAiA6J0EKpfPbnciF9cXNy5j5ziXrn3r1UK4Dv+jcsKsggwIhAIPnXQVX 14 | 3wPQnJyDJOwN3x5zjj4BSuZDCEFSWgbSjG9v 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICVzCCAf2gAwIBAgIQH++1FAW6krBPM3ne4oYI4TAKBggqhkjOPQQDAjB2MQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 5 | Y2Eub3JnMi5leGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3 6 | MDBaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMR8wHQYD 8 | VQQDExZ0bHNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D 9 | AQcDQgAEIqYeS0M5hhiv1mTSlqGqoaR0ElD4l/kttEYnPVRDXHtX6myG9Gt/U+oW 10 | 4+1+R3mFV0qL1pFZapjnbxEzprhLE6NtMGswDgYDVR0PAQH/BAQDAgGmMB0GA1Ud 11 | JQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1Ud 12 | DgQiBCD5Q/wC2yEI95fsnnqp9DCf8EfHRTajBgkchASPtF3EUTAKBggqhkjOPQQD 13 | AgNIADBFAiA6J0EKpfPbnciF9cXNy5j5ziXrn3r1UK4Dv+jcsKsggwIhAIPnXQVX 14 | 3wPQnJyDJOwN3x5zjj4BSuZDCEFSWgbSjG9v 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICyTCCAm+gAwIBAgIRAOTanTxLycwStUuOUPqyitAwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMjAwNjA0MTYxNzAwWhcNMzAwNjAyMTYx 6 | NzAwWjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjAub3JnMi5leGFtcGxlLmNv 8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGCdN6O1Q4kpbDNM0g6B1YY3PeQy 9 | h974avJ0JL/8Snw31pe5X4gRzdh5CS/e5kL5ZezDgD8k8hlkFIP4nEBJO9ijgfgw 10 | gfUwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD 11 | AjAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIPlD/ALbIQj3l+yeeqn0MJ/wR8dF 12 | NqMGCRyEBI+0XcRRMIGIBgNVHREEgYAwfoIWcGVlcjAub3JnMi5leGFtcGxlLmNv 13 | bYIFcGVlcjCCCWxvY2FsaG9zdIIWcGVlcjAub3JnMi5leGFtcGxlLmNvbYIFcGVl 14 | cjCCCWxvY2FsaG9zdIIWcGVlcjAub3JnMi5leGFtcGxlLmNvbYIFcGVlcjCCCWxv 15 | Y2FsaG9zdDAKBggqhkjOPQQDAgNIADBFAiEAqhWJV4kxRk0Sy3SQOmnOKND/qYTP 16 | TYU6bZFI19Rl1w8CIEBhyx7tjQP3ltKtKCOUX/KltghdWd0+irxQ/fw3Q02R 17 | -----END CERTIFICATE----- 18 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQglIA4h7tZkLAKPK8F 3 | hVJXEgQSMQQhHA8bNGruBDjV+3qhRANCAARgnTejtUOJKWwzTNIOgdWGNz3kMofe 4 | +GrydCS//Ep8N9aXuV+IEc3YeQkv3uZC+WXsw4A/JPIZZBSD+JxASTvY 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/tlsca/priv_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg95vY3MhmRV7b3hTQ 3 | MtDIHXnvHhwuH/ieDBmhnEG+iH6hRANCAAQiph5LQzmGGK/WZNKWoaqhpHQSUPiX 4 | +S20Ric9VENce1fqbIb0a39T6hbj7X5HeYVXSovWkVlqmOdvETOmuEsT 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/tlsca/tlsca.org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICVzCCAf2gAwIBAgIQH++1FAW6krBPM3ne4oYI4TAKBggqhkjOPQQDAjB2MQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 5 | Y2Eub3JnMi5leGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3 6 | MDBaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMR8wHQYD 8 | VQQDExZ0bHNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D 9 | AQcDQgAEIqYeS0M5hhiv1mTSlqGqoaR0ElD4l/kttEYnPVRDXHtX6myG9Gt/U+oW 10 | 4+1+R3mFV0qL1pFZapjnbxEzprhLE6NtMGswDgYDVR0PAQH/BAQDAgGmMB0GA1Ud 11 | JQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1Ud 12 | DgQiBCD5Q/wC2yEI95fsnnqp9DCf8EfHRTajBgkchASPtF3EUTAKBggqhkjOPQQD 13 | AgNIADBFAiA6J0EKpfPbnciF9cXNy5j5ziXrn3r1UK4Dv+jcsKsggwIhAIPnXQVX 14 | 3wPQnJyDJOwN3x5zjj4BSuZDCEFSWgbSjG9v 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICUTCCAfegAwIBAgIQaCr79FmvLmX/gUqKsF7K3zAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMi5leGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3MDBa 6 | MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMRwwGgYDVQQD 8 | ExNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE 9 | 28aZE16+aloruIoDYtr57Sbpz1rwbgHdpOLKFiHFmUSHbUBSt9mVyEkeWkD29vAq 10 | 4xlG7lKo47+YqghOqehB2qNtMGswDgYDVR0PAQH/BAQDAgGmMB0GA1UdJQQWMBQG 11 | CCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1UdDgQiBCC2 12 | 94YSClknmPkwWJbNE4naTRkTCzrhcbFKdGtwz/WhzjAKBggqhkjOPQQDAgNIADBF 13 | AiEAwN3gVIEMuDcF8eK+vNqqYeBFQ3S5zP2vx7Tdvx+LqooCIGmhtShargBL8CGx 14 | Sm4lHKVU3lcgCcui7zSs+oHxnll8 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/config.yaml: -------------------------------------------------------------------------------- 1 | NodeOUs: 2 | Enable: true 3 | ClientOUIdentifier: 4 | Certificate: cacerts/ca.org2.example.com-cert.pem 5 | OrganizationalUnitIdentifier: client 6 | PeerOUIdentifier: 7 | Certificate: cacerts/ca.org2.example.com-cert.pem 8 | OrganizationalUnitIdentifier: peer 9 | AdminOUIdentifier: 10 | Certificate: cacerts/ca.org2.example.com-cert.pem 11 | OrganizationalUnitIdentifier: admin 12 | OrdererOUIdentifier: 13 | Certificate: cacerts/ca.org2.example.com-cert.pem 14 | OrganizationalUnitIdentifier: orderer 15 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/priv_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg+fhCIn+fIVh3ybzn 3 | wgcXkygtsUss4eMmYfPfA9+9soahRANCAASQ5XRXYy7qR+m1eYndoctyGgXaxc8f 4 | 5Hb8iHgNEzPoI4uL/+WCOfJDjXQN9hxcdfEce3SIiPOXXBlH8t1vm7vU 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts/Admin@org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICKTCCAc+gAwIBAgIQWFgw+ph16eUlod0c00mMQjAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMi5leGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3MDBa 6 | MGsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMQ4wDAYDVQQLEwVhZG1pbjEfMB0GA1UEAwwWQWRtaW5Ab3Jn 8 | Mi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJDldFdjLupH 9 | 6bV5id2hy3IaBdrFzx/kdvyIeA0TM+gji4v/5YI58kONdA32HFx18Rx7dIiI85dc 10 | GUfy3W+bu9SjTTBLMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1Ud 11 | IwQkMCKAILb3hhIKWSeY+TBYls0TidpNGRMLOuFxsUp0a3DP9aHOMAoGCCqGSM49 12 | BAMCA0gAMEUCIQCMmkwBWlGEnb1hkDGzmQZNA/tBUrM2vwrWnmwCJcAv1AIgC9ro 13 | V/Y4bvuC0ZgoFnT/iBd9EAB9SiXdWL1MXEyOw/c= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICVzCCAf2gAwIBAgIQH++1FAW6krBPM3ne4oYI4TAKBggqhkjOPQQDAjB2MQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 5 | Y2Eub3JnMi5leGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3 6 | MDBaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMR8wHQYD 8 | VQQDExZ0bHNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D 9 | AQcDQgAEIqYeS0M5hhiv1mTSlqGqoaR0ElD4l/kttEYnPVRDXHtX6myG9Gt/U+oW 10 | 4+1+R3mFV0qL1pFZapjnbxEzprhLE6NtMGswDgYDVR0PAQH/BAQDAgGmMB0GA1Ud 11 | JQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1Ud 12 | DgQiBCD5Q/wC2yEI95fsnnqp9DCf8EfHRTajBgkchASPtF3EUTAKBggqhkjOPQQD 13 | AgNIADBFAiA6J0EKpfPbnciF9cXNy5j5ziXrn3r1UK4Dv+jcsKsggwIhAIPnXQVX 14 | 3wPQnJyDJOwN3x5zjj4BSuZDCEFSWgbSjG9v 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICVzCCAf2gAwIBAgIQH++1FAW6krBPM3ne4oYI4TAKBggqhkjOPQQDAjB2MQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 5 | Y2Eub3JnMi5leGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3 6 | MDBaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMR8wHQYD 8 | VQQDExZ0bHNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D 9 | AQcDQgAEIqYeS0M5hhiv1mTSlqGqoaR0ElD4l/kttEYnPVRDXHtX6myG9Gt/U+oW 10 | 4+1+R3mFV0qL1pFZapjnbxEzprhLE6NtMGswDgYDVR0PAQH/BAQDAgGmMB0GA1Ud 11 | JQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1Ud 12 | DgQiBCD5Q/wC2yEI95fsnnqp9DCf8EfHRTajBgkchASPtF3EUTAKBggqhkjOPQQD 13 | AgNIADBFAiA6J0EKpfPbnciF9cXNy5j5ziXrn3r1UK4Dv+jcsKsggwIhAIPnXQVX 14 | 3wPQnJyDJOwN3x5zjj4BSuZDCEFSWgbSjG9v 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/client.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICOjCCAeGgAwIBAgIQAXnKWFqN2MGkG4OmubiX6jAKBggqhkjOPQQDAjB2MQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 5 | Y2Eub3JnMi5leGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3 6 | MDBaMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 7 | Ew1TYW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcyLmV4YW1wbGUuY29t 8 | MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE7PKvLMG6N/u21DaSGVJmLsgsA8LH 9 | m+dQritrf2eSBURg2c/N0jv1bmGR2SOnOyR9Xd3dT0BslhBiND0X5L+dyqNsMGow 10 | DgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAM 11 | BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIPlD/ALbIQj3l+yeeqn0MJ/wR8dFNqMG 12 | CRyEBI+0XcRRMAoGCCqGSM49BAMCA0cAMEQCIBTxdXm8HWyGN+flZ3zs8Y8TigPz 13 | ci8VIY+6+eM14RbOAiAVy2tOi0nTE514v/NgcDDEw1nc9tReVCxRYFPF4pNKpQ== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/client.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgIG5XdnchjmND3YG6 3 | XKSUiWcya6735xDfNeqe/55FKq6hRANCAATs8q8swbo3+7bUNpIZUmYuyCwDwseb 4 | 51CuK2t/Z5IFRGDZz83SO/VuYZHZI6c7JH1d3d1PQGyWEGI0PRfkv53K 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICUTCCAfegAwIBAgIQaCr79FmvLmX/gUqKsF7K3zAKBggqhkjOPQQDAjBzMQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu 5 | b3JnMi5leGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3MDBa 6 | MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T 7 | YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMRwwGgYDVQQD 8 | ExNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE 9 | 28aZE16+aloruIoDYtr57Sbpz1rwbgHdpOLKFiHFmUSHbUBSt9mVyEkeWkD29vAq 10 | 4xlG7lKo47+YqghOqehB2qNtMGswDgYDVR0PAQH/BAQDAgGmMB0GA1UdJQQWMBQG 11 | CCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1UdDgQiBCC2 12 | 94YSClknmPkwWJbNE4naTRkTCzrhcbFKdGtwz/WhzjAKBggqhkjOPQQDAgNIADBF 13 | AiEAwN3gVIEMuDcF8eK+vNqqYeBFQ3S5zP2vx7Tdvx+LqooCIGmhtShargBL8CGx 14 | Sm4lHKVU3lcgCcui7zSs+oHxnll8 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/config.yaml: -------------------------------------------------------------------------------- 1 | NodeOUs: 2 | Enable: true 3 | ClientOUIdentifier: 4 | Certificate: cacerts/ca.org2.example.com-cert.pem 5 | OrganizationalUnitIdentifier: client 6 | PeerOUIdentifier: 7 | Certificate: cacerts/ca.org2.example.com-cert.pem 8 | OrganizationalUnitIdentifier: peer 9 | AdminOUIdentifier: 10 | Certificate: cacerts/ca.org2.example.com-cert.pem 11 | OrganizationalUnitIdentifier: admin 12 | OrdererOUIdentifier: 13 | Certificate: cacerts/ca.org2.example.com-cert.pem 14 | OrganizationalUnitIdentifier: orderer 15 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/keystore/priv_sk: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgH+So8CX09sRrlrUV 3 | peOqEYyXhHgOk8TPysabqBzXe5OhRANCAATwnaaPzx2ZoDv+5JbXEM6cowsmIne+ 4 | oa7+GnpjxuhHpntgpvIJCmGqiotdDz2NnHcYguIgdcuQ5XEMbbJ2yINB 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/signcerts/User1@org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICKjCCAdGgAwIBAgIRAMo7dlYKqRipVtO5L5e9w/swCgYIKoZIzj0EAwIwczEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh 5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMjAwNjA0MTYxNzAwWhcNMzAwNjAyMTYxNzAw 6 | WjBsMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN 7 | U2FuIEZyYW5jaXNjbzEPMA0GA1UECxMGY2xpZW50MR8wHQYDVQQDDBZVc2VyMUBv 8 | cmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE8J2mj88d 9 | maA7/uSW1xDOnKMLJiJ3vqGu/hp6Y8boR6Z7YKbyCQphqoqLXQ89jZx3GILiIHXL 10 | kOVxDG2ydsiDQaNNMEswDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYD 11 | VR0jBCQwIoAgtveGEgpZJ5j5MFiWzROJ2k0ZEws64XGxSnRrcM/1oc4wCgYIKoZI 12 | zj0EAwIDRwAwRAIgBBo8frX87vkd3gatVoBOkQI7AcXH3v2AyWA4RMHUzbYCIGf7 13 | pYh9OtPWCib5HBPehLCBVP3wIOWQDyL73r9Nt0Cn 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICVzCCAf2gAwIBAgIQH++1FAW6krBPM3ne4oYI4TAKBggqhkjOPQQDAjB2MQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 5 | Y2Eub3JnMi5leGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3 6 | MDBaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMR8wHQYD 8 | VQQDExZ0bHNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D 9 | AQcDQgAEIqYeS0M5hhiv1mTSlqGqoaR0ElD4l/kttEYnPVRDXHtX6myG9Gt/U+oW 10 | 4+1+R3mFV0qL1pFZapjnbxEzprhLE6NtMGswDgYDVR0PAQH/BAQDAgGmMB0GA1Ud 11 | JQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1Ud 12 | DgQiBCD5Q/wC2yEI95fsnnqp9DCf8EfHRTajBgkchASPtF3EUTAKBggqhkjOPQQD 13 | AgNIADBFAiA6J0EKpfPbnciF9cXNy5j5ziXrn3r1UK4Dv+jcsKsggwIhAIPnXQVX 14 | 3wPQnJyDJOwN3x5zjj4BSuZDCEFSWgbSjG9v 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICVzCCAf2gAwIBAgIQH++1FAW6krBPM3ne4oYI4TAKBggqhkjOPQQDAjB2MQsw 3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy 4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz 5 | Y2Eub3JnMi5leGFtcGxlLmNvbTAeFw0yMDA2MDQxNjE3MDBaFw0zMDA2MDIxNjE3 6 | MDBaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH 7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMR8wHQYD 8 | VQQDExZ0bHNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D 9 | AQcDQgAEIqYeS0M5hhiv1mTSlqGqoaR0ElD4l/kttEYnPVRDXHtX6myG9Gt/U+oW 10 | 4+1+R3mFV0qL1pFZapjnbxEzprhLE6NtMGswDgYDVR0PAQH/BAQDAgGmMB0GA1Ud 11 | JQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1Ud 12 | DgQiBCD5Q/wC2yEI95fsnnqp9DCf8EfHRTajBgkchASPtF3EUTAKBggqhkjOPQQD 13 | AgNIADBFAiA6J0EKpfPbnciF9cXNy5j5ziXrn3r1UK4Dv+jcsKsggwIhAIPnXQVX 14 | 3wPQnJyDJOwN3x5zjj4BSuZDCEFSWgbSjG9v 15 | -----END CERTIFICATE----- 16 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/client.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICPDCCAeKgAwIBAgIRAK1SRP1+IXoKs1Hgpz6X68gwCgYIKoZIzj0EAwIwdjEL 3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG 4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs 5 | c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMjAwNjA0MTYxNzAwWhcNMzAwNjAyMTYx 6 | NzAwWjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE 7 | BxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWVXNlcjFAb3JnMi5leGFtcGxlLmNv 8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHWYxRzOs46DhHFl0kbpF67qMW6L 9 | HuT/e+GXMNuxT2fmWyJajU7cisGn86+AJTkt+p9GS8EsVYPDJM5lAY/ELm+jbDBq 10 | MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw 11 | DAYDVR0TAQH/BAIwADArBgNVHSMEJDAigCD5Q/wC2yEI95fsnnqp9DCf8EfHRTaj 12 | BgkchASPtF3EUTAKBggqhkjOPQQDAgNIADBFAiEAmtZtql/cIrQEiWsF1szZBbBA 13 | 96J2Tws20265lZKiq3wCIDtOhFyohWBsg+UqxcSNOlyn+vlg6LaObcCrkP7AWXux 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/client.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgB5+sLJEU/DPzedmV 3 | aV0ZNl47HUnmZDsk7mGgZNV1coqhRANCAAR1mMUczrOOg4RxZdJG6Reu6jFuix7k 4 | /3vhlzDbsU9n5lsiWo1O3IrBp/OvgCU5LfqfRkvBLFWDwyTOZQGPxC5v 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/db.properties: -------------------------------------------------------------------------------- 1 | #p6spy 2 | driver=com.p6spy.engine.spy.P6SpyDriver 3 | url=jdbc:p6spy:mysql://localhost:3306/medical?useUnicoding=true&characterEncoding=utf-8&noDatetimeStringSync=true 4 | username=root 5 | password=root -------------------------------------------------------------------------------- /code/medical/src/main/resources/medical.sql: -------------------------------------------------------------------------------- 1 | /* 2 | Navicat MySQL Data Transfer 3 | 4 | Source Server : wow 5 | Source Server Version : 50726 6 | Source Host : localhost:3306 7 | Source Database : medical 8 | 9 | Target Server Type : MYSQL 10 | Target Server Version : 50726 11 | File Encoding : 65001 12 | 13 | Date: 2020-06-10 15:10:02 14 | */ 15 | 16 | SET FOREIGN_KEY_CHECKS=0; 17 | 18 | -- ---------------------------- 19 | -- Table structure for t_authorize 20 | -- ---------------------------- 21 | DROP TABLE IF EXISTS `t_authorize`; 22 | CREATE TABLE `t_authorize` ( 23 | `apply_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 24 | `user_id` int(11) NOT NULL COMMENT '授权人', 25 | `to_user_id` int(11) NOT NULL, 26 | `apply_state` tinyint(1) DEFAULT NULL COMMENT '0-未授权,1-已授权,2-已拒绝', 27 | `apply_date` datetime DEFAULT NULL COMMENT '授权时间', 28 | `description` text COMMENT '授权信息,指代病历数据', 29 | `sign_text` varchar(255) DEFAULT NULL COMMENT '签名信息', 30 | PRIMARY KEY (`apply_id`) 31 | ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; 32 | 33 | -- ---------------------------- 34 | -- Records of t_authorize 35 | -- ---------------------------- 36 | INSERT INTO `t_authorize` VALUES ('5', '1', '3', '1', '2020-06-07 02:47:33', '{\"createTime\":\"2020/06/07\",\"description\":\"RUrITYbNDoN5JSAYt/6u7wcWRPAmIL3lIiLBOfKDo6+NVrMY3VfkJbhKgz5sVlLstLurT42m8HwdP+IetynMBCSN419pZuIKi4WYnSkot5NNhXxg5hujUMPm28fvvkI6szAJ+QWTQGCPOfWzQQBEJ5/X5n4d4m9yC373OiCEebM=\",\"doctorName\":\"doctorName1\",\"medicalPicture\":\"1591468204842test.JPG\",\"patientName\":\"patientName1\"}', null); 37 | 38 | -- ---------------------------- 39 | -- Table structure for t_doctor 40 | -- ---------------------------- 41 | DROP TABLE IF EXISTS `t_doctor`; 42 | CREATE TABLE `t_doctor` ( 43 | `doctor_id` int(11) NOT NULL, 44 | `doctor_name` varchar(16) NOT NULL, 45 | `doctor_phone` varchar(11) NOT NULL COMMENT '手机号唯一', 46 | `doctor_password` varchar(32) NOT NULL, 47 | `doctor_picture` varchar(32) DEFAULT NULL, 48 | `doctor_hospital` int(10) unsigned NOT NULL COMMENT '所属医疗机构id', 49 | `doctor_state` tinyint(1) DEFAULT NULL COMMENT '0-正常,1-非法', 50 | PRIMARY KEY (`doctor_id`), 51 | UNIQUE KEY `doctor_phone` (`doctor_phone`) USING BTREE, 52 | KEY `doctor_hospital` (`doctor_hospital`), 53 | CONSTRAINT `t_doctor_ibfk_1` FOREIGN KEY (`doctor_hospital`) REFERENCES `t_hospital` (`hospital_id`) 54 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 55 | 56 | -- ---------------------------- 57 | -- Records of t_doctor 58 | -- ---------------------------- 59 | INSERT INTO `t_doctor` VALUES ('3', 'name1', 'phone1', '7C6A180B36896A0A8C02787EEAFB0E4C', null, '1', '0'); 60 | 61 | -- ---------------------------- 62 | -- Table structure for t_hospital 63 | -- ---------------------------- 64 | DROP TABLE IF EXISTS `t_hospital`; 65 | CREATE TABLE `t_hospital` ( 66 | `hospital_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 67 | `hospital_name` varchar(32) NOT NULL COMMENT '医院全称', 68 | `hospital_state` tinyint(1) NOT NULL COMMENT '医院状态,0-正常,1-待审核,2-非法', 69 | `business_license` varchar(32) NOT NULL COMMENT '营业执照图片地址', 70 | `in_date` date NOT NULL COMMENT '加入时间', 71 | PRIMARY KEY (`hospital_id`), 72 | UNIQUE KEY `hospital_name` (`hospital_name`) 73 | ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; 74 | 75 | -- ---------------------------- 76 | -- Records of t_hospital 77 | -- ---------------------------- 78 | INSERT INTO `t_hospital` VALUES ('1', 'hospital1', '0', 'business_license1', '2020-06-05'); 79 | 80 | -- ---------------------------- 81 | -- Table structure for t_medical 82 | -- ---------------------------- 83 | DROP TABLE IF EXISTS `t_medical`; 84 | CREATE TABLE `t_medical` ( 85 | `patient_name` varchar(255) NOT NULL, 86 | `doctor_name` varchar(255) NOT NULL, 87 | `create_time` varchar(255) NOT NULL, 88 | `medical_picture` varchar(255) NOT NULL, 89 | `description` varchar(255) NOT NULL 90 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 91 | 92 | -- ---------------------------- 93 | -- Records of t_medical 94 | -- ---------------------------- 95 | 96 | -- ---------------------------- 97 | -- Table structure for t_patient 98 | -- ---------------------------- 99 | DROP TABLE IF EXISTS `t_patient`; 100 | CREATE TABLE `t_patient` ( 101 | `patient_id` int(10) unsigned NOT NULL, 102 | `patient_name` varchar(16) NOT NULL, 103 | `patient_phone` varchar(11) NOT NULL COMMENT '手机号唯一', 104 | `patient_password` varchar(64) NOT NULL COMMENT '经过 MD5 哈希运算', 105 | `patient_picture` varchar(32) DEFAULT NULL, 106 | `patient_state` tinyint(1) DEFAULT NULL COMMENT '0-正常,1-非法', 107 | PRIMARY KEY (`patient_id`), 108 | UNIQUE KEY `patient_phone` (`patient_phone`) 109 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 110 | 111 | -- ---------------------------- 112 | -- Records of t_patient 113 | -- ---------------------------- 114 | INSERT INTO `t_patient` VALUES ('1', 'name1', 'phone1', '7C6A180B36896A0A8C02787EEAFB0E4C', null, '0'); 115 | INSERT INTO `t_patient` VALUES ('4', 'name2', 'phone2', '6CB75F652A9B52798EB6CF2201057C73', null, '0'); 116 | INSERT INTO `t_patient` VALUES ('5', 'name3', 'phone3', '819B0643D6B89DC9B579FDFC9094F28E', null, '0'); 117 | 118 | -- ---------------------------- 119 | -- Table structure for t_publickey 120 | -- ---------------------------- 121 | DROP TABLE IF EXISTS `t_publickey`; 122 | CREATE TABLE `t_publickey` ( 123 | `user_id` int(11) NOT NULL, 124 | `user_publickey` varchar(255) NOT NULL, 125 | PRIMARY KEY (`user_id`) 126 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 127 | 128 | -- ---------------------------- 129 | -- Records of t_publickey 130 | -- ---------------------------- 131 | INSERT INTO `t_publickey` VALUES ('1', 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCKA933cmIjTjfGIYqWbyDxhdtCaFdN4JW49akXZdC6wnQYnyEWGNoyG3L+GnqJVrAtrA4kwbdb6omWQ5Dbo3O9bWpodm+aLzeOrqdxTPefQJPZMhUoOgAqGAGAKco5eViR3BLVuITygp/z19gIx1V9b55F4TjlRJL5E4GAE0qhhwIDAQAB'); 132 | INSERT INTO `t_publickey` VALUES ('3', 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQ+NQa1mG+3Jqq2TZxbdSbwIeZPNECznNOjRiFpnAGQkXrthzSUR6Yym8W1Bmd0kP5+P3BjeNaDeYDjZMv6OVD5ptr/YESAn2hzcWbF2XteBy0ZpZkEQT0UmkBQNth/S6d3BrgSq5Ulpjm3Hg7NOAnspnh4WuqstQhO4EIMe6FvwIDAQAB'); 133 | INSERT INTO `t_publickey` VALUES ('4', 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCIPguAKrqOcHfgonSGsCbzA1t7rMlJ9BBqh4mI1y5URSPRoIbXodX7Nwr9ZvfKG/nOKzucaxdqI/DSidQbLbqas+Zi5KTVLhUNGJ0GVkmOykT4JS/V5LDFYr+eQ8js5fR9z4NfctCjWyj1er+SyNIgTyfrAAh7MTEX44surRY5pQIDAQAB'); 134 | INSERT INTO `t_publickey` VALUES ('5', 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6nNdnusgj+6d3MlaYVYynL/rgwsC3pqOwoZjkXfWVz60O1Mf90s8K228LUzRx/wgsul/nWoIDV4z1LTRw/Dcob/bd3p4GdqvHdX+Kv3lT3fV3+lFu0QyvK74H/xZesAxrqBgXPaXpiIJfyXhs+SSo7uCapaOxrj9H9qjPw2Nw3wIDAQAB'); 135 | 136 | -- ---------------------------- 137 | -- Table structure for t_usercount 138 | -- ---------------------------- 139 | DROP TABLE IF EXISTS `t_usercount`; 140 | CREATE TABLE `t_usercount` ( 141 | `user_count` int(11) NOT NULL 142 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 143 | 144 | -- ---------------------------- 145 | -- Records of t_usercount 146 | -- ---------------------------- 147 | INSERT INTO `t_usercount` VALUES ('6'); 148 | -------------------------------------------------------------------------------- /code/medical/src/main/resources/springmvc.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /code/medical/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | Archetype Created Web Application 7 | 8 | 9 | contextConfigLocation 10 | classpath:applicationContext.xml 11 | 12 | 13 | 14 | characterEncodingFilter 15 | org.springframework.web.filter.CharacterEncodingFilter 16 | 17 | encoding 18 | UTF-8 19 | 20 | 21 | 22 | characterEncodingFilter 23 | /* 24 | 25 | 26 | 27 | org.springframework.web.context.ContextLoaderListener 28 | 29 | 30 | 31 | dispatcherServlet 32 | org.springframework.web.servlet.DispatcherServlet 33 | 34 | contextConfigLocation 35 | classpath:springmvc.xml 36 | 37 | 1 38 | 39 | 40 | dispatcherServlet 41 | /* 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /code/medical/src/main/webapp/index.jsp: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Hello World!

4 | 5 | 6 | -------------------------------------------------------------------------------- /code/picture/medical/1591462996138test.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/code/picture/medical/1591462996138test.JPG -------------------------------------------------------------------------------- /code/picture/medical/1591463212767test.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/code/picture/medical/1591463212767test.JPG -------------------------------------------------------------------------------- /code/picture/medical/1591468204842test.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/code/picture/medical/1591468204842test.JPG -------------------------------------------------------------------------------- /code/server_api.json: -------------------------------------------------------------------------------- 1 | 2 | 1.管理员获取用户数 3 | /admin/getUserCount 4 | { 5 | "code": 200, 6 | "data": { 7 | "count": 1 8 | } 9 | } 10 | 2.用户注册 11 | /user/register 12 | 平均响应时间:200ms 13 | patient1 14 | { 15 | "code": 200, 16 | "data": { 17 | "result": "0", 18 | "privateKey": "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAIoD3fdyYiNON8YhipZvIPGF20JoV03glbj1qRdl0LrCdBifIRYY2jIbcv4aeolWsC2sDiTBt1vqiZZDkNujc71tamh2b5ovN46up3FM959Ak9kyFSg6ACoYAYApyjl5WJHcEtW4hPKCn/PX2AjHVX1vnkXhOOVEkvkTgYATSqGHAgMBAAECgYA77p/18zLQmAe6Pxh6aPmKSBFFjh/TTqJVtj/eTDVO1GArzPZGLTabKbZOx9rMRtusiZl+tqxT+s4SdXazGhCI3ZWyqTZ5JgViolZh/vyOfYWGJ1mV35q3JyhPEfd8dyhhgsqlsu5olHbjOM/ffGSLwqHjqOLFmYZkS9U+zfmgUQJBANrVX637xPuLBXbSTdK7T9EXUH+Um26yY2asLrcZVEIHo4ClUDyVcXzd9y3EI41X51Vvq8Igcuf+vB1VO5Q9t88CQQChdJqLlFR22xTPqB9j5283LNZyFFejfm82r5W9E/LkbMin578YLPcGdtVP7Mx6UP2DAjBrKBzCPr9bW3Xu2bDJAkABue8wSy0potYfMteEUw/1IU70QrLbM7MPC0qvDRcaEj9a83Lnl3I2vvWFOefh5JChnujm9iSR6fOH87UtnTMHAkEAjBV9mali95TyI5H9WlMNPdQbY/Oebm5e1BXYV6sdTW/NUVFTjghFdEhan/QXHfFzY93cYLz25tpGcV+TnV8ncQJAPXsTFFrDQPEWuR7pOuo2dXqFF0bX/7Siq6hLjkhoqd+QULLx003LthdwqZKqp1R8tO760/voLuVcINhfH4YdUg==" 19 | } 20 | } 21 | patient3 22 | { 23 | "code": 200, 24 | "data": { 25 | "result": "0", 26 | "privateKey": "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALqc12e6yCP7p3cyVphVjKcv+uDCwLemo7ChmORd9ZXPrQ7Ux/3SzwrbbwtTNHH/CCy6X+daggNXjPUtNHD8Nyhv9t3engZ2q8d1f4q/eVPd9Xf6UW7RDK8rvgf/Fl6wDGuoGBc9pemIgl/JeGz5JKju4Jqlo7GuP0f2qM/DY3DfAgMBAAECgYASI2CEgpElfjZezZPBJr+PGIjIA+X7c8UBTBOyTreqIg9uG5x8vVrGcWGvthyo3+MJhewAbrmoXYAj7IrmWH171DeQ6/rvyV6yPT1Sq9Gy7eVY6OV6HBJJhESbiopPyuINo++Rp4FSLOOXiaVnbWJe21XytJpvDq1rHdcH47DekQJBAN4AazmxLDInzntwus3gkzYEfHZFTy79KUfizytLUkuHny9//xDL3BVhl24GZBz6J3AwspSMUXEuuoBv8uVTWEUCQQDXMP8pOyYhiD+M1+slQ5p+S4jjhPhEPriBTzaca2L9pIbI7BrI0ulut3jQmNA+O9uHVeIEL2wW8mtpb7DKvfDTAkEAtavEE4cwcq7uo0eiJx5Tec38CFE5tmtH3+L0xCo0Y0jN9PIayiT5qqmdYVVrkecIZSAE09lsQGIMD1UNgatNvQJAcW93olF2yUhcT69mWk9nulmxAFaQ1NDHTArou83z8cbv8ixb9i8QNHfs7PERHS1KjO3d5dzlurbxnjPtWwKDVwJAb1wMNYub/cg06wa+w+IY0a3UfA/rkDoWhZQ+/EwduR/tEpLpsUVTFOy3bck3hkC2eXi2I+qJ3FHf2eKYeDYRvQ==" 27 | } 28 | } 29 | doctor1 30 | { 31 | "code": 200, 32 | "data": { 33 | "result": "0", 34 | "privateKey": "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJD41BrWYb7cmqrZNnFt1JvAh5k80QLOc06NGIWmcAZCReu2HNJRHpjKbxbUGZ3SQ/n4/cGN41oN5gONky/o5UPmm2v9gRICfaHNxZsXZe14HLRmlmQRBPRSaQFA22H9Lp3cGuBKrlSWmObceDs04CeymeHha6qy1CE7gQgx7oW/AgMBAAECgYBd4vgihVJ6NA5qtQ+gOBvn3rEymYNXCPL+HTyTWa3VL9huhdt2jZh+JSP6qdQJNKJXYlycnFJwAO5EwMxgy7il3aGgMEsLfTwM4YWwERRxRdWxxtX6v6YTAjcd+SPH/MsaqkW7HEmh9ru9V9KKQ+U9Gv4zp+qbrwfVP3GCs4xZeQJBAM9Kx+qrv8Z5xzixgQwvDdP2nPBOi2PepLgVkZ8N5iwEq06xPFKukBKn62HVPxyNdbuzUm4Epzbyj3QTUrjfhvUCQQCzCU/kCFT6JYJzbkPNVsREnsZNq9XFeF+JYFYosf2jXX84M5thLhU6cqZNnIAO5H9blzLMYqGLbv27NDPaYOFjAkAHG3JFSoQ1wuEgwX1CNK7NsKvq1VaUIwMUyLCIeoqEwdg5x3vg/dk0uosofI5AZV0/BUPzP7eX+7MNcMgqTIetAkBjd1b1P1PGrbQt4SK2H/Bmlzdgy4i2bsvVDLqRXWGmszkMxk8azHlqwWt3Tu0uWPAQuI22U02go4c/zB7Kwmw1AkEAloptjxt3JgEzZvP4uVoanTQewsUEhp5LKgMePzrHHldWxkoM8v5HiNh1b6qzCeG8d9wFpZr+F5NeqOy+dPMKMw==" 35 | } 36 | } 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /picture/1.1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/1.1.PNG -------------------------------------------------------------------------------- /picture/1.2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/1.2.PNG -------------------------------------------------------------------------------- /picture/2.1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/2.1.PNG -------------------------------------------------------------------------------- /picture/2.2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/2.2.PNG -------------------------------------------------------------------------------- /picture/2.3.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/2.3.PNG -------------------------------------------------------------------------------- /picture/2.4.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/2.4.PNG -------------------------------------------------------------------------------- /picture/2.5.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/2.5.PNG -------------------------------------------------------------------------------- /picture/2.6.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/2.6.PNG -------------------------------------------------------------------------------- /picture/3.1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/3.1.PNG -------------------------------------------------------------------------------- /picture/3.2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/3.2.PNG -------------------------------------------------------------------------------- /picture/3.3.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/3.3.PNG -------------------------------------------------------------------------------- /picture/3.4.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/3.4.PNG -------------------------------------------------------------------------------- /picture/3.5.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/3.5.PNG -------------------------------------------------------------------------------- /picture/3.6.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/3.6.PNG -------------------------------------------------------------------------------- /picture/4.1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/4.1.PNG -------------------------------------------------------------------------------- /picture/4.10.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/4.10.PNG -------------------------------------------------------------------------------- /picture/4.2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/4.2.PNG -------------------------------------------------------------------------------- /picture/4.3.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/4.3.PNG -------------------------------------------------------------------------------- /picture/4.4.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/4.4.PNG -------------------------------------------------------------------------------- /picture/4.5.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/4.5.PNG -------------------------------------------------------------------------------- /picture/4.6.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/4.6.PNG -------------------------------------------------------------------------------- /picture/4.7.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/4.7.PNG -------------------------------------------------------------------------------- /picture/4.8.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/4.8.PNG -------------------------------------------------------------------------------- /picture/4.9.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/4.9.PNG -------------------------------------------------------------------------------- /picture/network_createchannel1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/network_createchannel1.PNG -------------------------------------------------------------------------------- /picture/network_createchannel2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/network_createchannel2.PNG -------------------------------------------------------------------------------- /picture/network_up.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/network_up.PNG -------------------------------------------------------------------------------- /picture/p-医生新建病历.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/p-医生新建病历.png -------------------------------------------------------------------------------- /picture/p-医生查看已授权详细病历.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/p-医生查看已授权详细病历.png -------------------------------------------------------------------------------- /picture/p-患者同意授权.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/p-患者同意授权.png -------------------------------------------------------------------------------- /picture/p-患者查询病历.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/p-患者查询病历.png -------------------------------------------------------------------------------- /picture/p-签名.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/p-签名.PNG -------------------------------------------------------------------------------- /picture/p-网络拓扑.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/p-网络拓扑.PNG -------------------------------------------------------------------------------- /picture/p_校徽.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/p_校徽.jpg -------------------------------------------------------------------------------- /picture/医生新建病历.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/医生新建病历.PNG -------------------------------------------------------------------------------- /picture/医生查看已授权列表.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/医生查看已授权列表.PNG -------------------------------------------------------------------------------- /picture/医生查看已授权详细病历.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/医生查看已授权详细病历.PNG -------------------------------------------------------------------------------- /picture/医生申请授权.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/医生申请授权.PNG -------------------------------------------------------------------------------- /picture/患者上传病历.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/患者上传病历.PNG -------------------------------------------------------------------------------- /picture/患者同意授权.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/患者同意授权.PNG -------------------------------------------------------------------------------- /picture/患者查询待授权列表.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/患者查询待授权列表.PNG -------------------------------------------------------------------------------- /picture/患者查询待确认提交病历.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/患者查询待确认提交病历.PNG -------------------------------------------------------------------------------- /picture/患者查询病历.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/患者查询病历.PNG -------------------------------------------------------------------------------- /picture/用户注册测试.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/picture/用户注册测试.PNG -------------------------------------------------------------------------------- /t.txt: -------------------------------------------------------------------------------- 1 | 2 | 区块链技术是很新的概念,在各个行业中的应用场景都处于尝试阶段。医疗区块链是区块链技术应用在医疗领域的一种创新性尝试,该生对于所选课题方向进行了较为详尽的调研,参考了许多文献和书籍,证明了其可行性,而且具有一定实际价值。选择区块链技术,符合学生专业发展方向,能丰富学生的基础知识和技能,对于提高其综合工程能力有益。研究方法和进度安排基本合理,难度合适,学生能够在预定时间内完成该课题的设计。 3 | 同意该课题开题。 4 | 5 | 区块链是一个全新的概念,该生前期阅读了大量的文献和技术博客,对区块链的基础知识,技术特性,共识算法及智能合约等概念都有了一定程度的了解。之后结合区块链技术特点,研究对比可能的应用场景:物流溯源、供应链等,选择目前研究涉及较少的医疗领域,具有创新意识与挑战意识。其中期报告写作规范,思路清晰,图表准确,表现出较为扎实的理论基础和较强的科研工作能力。 6 | 目前进度基本上与原计划相符,可以继续按照原计划执行,完成系统实现部分。 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /wen.txt: -------------------------------------------------------------------------------- 1 | [1] Nakamoto S. Bitcoin: A Peer-to-Peer Electronic Cash System[EB/OL]. (2009,02,08). [2020,5,30].https://bitcoin.org/bitcoin.pdf. 2 | [2] Melanie Swan. Blockchain: Blueprint for a New Economy[M]// Blockchain : blueprint for a new economy. O'Reilly, 2015. 3 | [3] 侯周国,梁欢.区块链技术发展现状及特色应用研究[J].科技创新与应用,2019(30):18-20+23. 4 | [4] 胥婷,崔文彬,于广军.我国智慧医院建设现状及发展路径[J].中国医院,2020,24(03):1-3+10. 5 | [5] 中国区块链技术和产业发展论坛.中国区块链技术和应用发展白皮书[M].城市不详:出版社不详,2016. 6 | [6] Azaria A, Ekblaw A, Vieira T, et al. MedRec: Using Blockchain for Medical Data Access and Permission Management[C]. Vienna,AUSTRIA: International Conference on Open and Big Data.2016:25-30. 7 | [7] Xhafa F, Li Jingwei, Zhao Gansen, et al.Designing cloud-based electronic health record system with attribute-based encryption [J]. Multimedia Tools and Applications, 2015,74(10):3441. 8 | [8] Shrier A A. Blockchain and health IT: algorithms, privacy, and data[EB/OL]. (2016,08,08).[2020,05,30]. http://www.truevaluemetrics.org/DBpdfs/Technology/Blockchain/1-78-blockchainandhealthitalgorithmsprivacydatawhitepaper.pdf. 9 | [9] 薛腾飞,傅群超,王枞等.基于区块链的医疗数据共享模型研究[J].自动化学报,2017,43(09):1555-1562. 10 | [10] 张超,李强,陈子豪等.Medical Chain:联盟式医疗区块链系统[J].自动化学报,2019,45(08):1495-1510. 11 | [11] 梅颖.安全存储医疗记录的区块链方法研究[J].江西师范大学学报(自然科学版),2017,41(05):484-490. 12 | 13 | 14 | [22] Rivest R.The MD5 Message-Digest Algorithm[S].RFC 1321, 1992. 15 | [23] Eastlake D, Jones P.US Secure Hash Algorithm1 (SHA1)[S].RFC 3174, 2001. 16 | [24] Lauter K . The advantages of elliptic curve cryptography for wireless security[J]. IEEE Wireless Communications, 2004,11(1):62-67. 17 | [25] 欧阳丽炜,王帅,袁勇等.智能合约:架构及进展[J].自动化学报,2019,45(03):445-457. 18 | [26] Buterin V.A next-generation smart contract and decentralized application platform[EB/OL].(2019,6,17).[2020,5,30].https://github.com/ethereum/wiki/wiki/White-Paper. 19 | [27] 李燕,马海英,王占君.区块链关键技术的研究进展[J].计算机工程与应用,2019,55(20):13-23+100. 20 | [28] Androulaki E. Hyperledger Fabric: A Distributed Operating System for Permissioned Blockchains[EB/OL]. (2018,1,30).[2020,05,30].https://arxiv.org/pdf/1801.10228.pdf. 21 | [29] 李晓璐. 基于区块链的电子病历共享及隐私保护研究[D].西安:西安电子科技大学,2019. 22 | 23 | -------------------------------------------------------------------------------- /中期报告.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/中期报告.doc -------------------------------------------------------------------------------- /任务书.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/任务书.doc -------------------------------------------------------------------------------- /外文翻译原文.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/外文翻译原文.pdf -------------------------------------------------------------------------------- /外文翻译译文.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/外文翻译译文.doc -------------------------------------------------------------------------------- /开题报告.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/开题报告.doc -------------------------------------------------------------------------------- /数据结构.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/数据结构.docx -------------------------------------------------------------------------------- /毕业论文-基于区块链的医疗记录存储系统研究与开发.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/毕业论文-基于区块链的医疗记录存储系统研究与开发.doc -------------------------------------------------------------------------------- /电计1604-徐富-201645030.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/电计1604-徐富-201645030.zip -------------------------------------------------------------------------------- /答辩.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/答辩.docx -------------------------------------------------------------------------------- /答辩.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BattleCall3/graduatework/47a2b6bb06456abe39c63eaa36c2b3d05591fc3f/答辩.pptx --------------------------------------------------------------------------------