github.com/futurehomeno/fimpgo@v1.14.0/transport/signed_msg_test.go (about) 1 package transport 2 3 import ( 4 "encoding/json" 5 "github.com/futurehomeno/fimpgo" 6 "github.com/futurehomeno/fimpgo/security" 7 "testing" 8 ) 9 10 func TestSignMessageES256(t *testing.T) { 11 keys := security.NewEcdsaKey() 12 if err:=keys.Generate();err !=nil { 13 t.Error("SerializedKey generation error",err) 14 t.FailNow() 15 } 16 private , pub := keys.ExportX509EncodedKeys() 17 t.Log(private) 18 t.Log(pub) 19 msg := fimpgo.NewFloatMessage("evt.sensor.report", "temp_sensor", 35.5, nil, nil, nil) 20 got, err := SignMessageES256(msg, nil, "alex@gmail.com", keys, nil) 21 if err !=nil { 22 t.Error("Signing error",err) 23 t.FailNow() 24 } 25 26 bmsg,err := got.SerializeToJson() 27 if err = keys.Generate();err !=nil { 28 t.Error("SerializedKey generation error",err) 29 t.FailNow() 30 } 31 t.Log("X:",keys.PublicKey().X.Text(16)) 32 t.Log("Y:",keys.PublicKey().Y.Text(16)) 33 34 t.Log(string(bmsg)) 35 36 keys2 := security.NewEcdsaKey() 37 err = keys2.ImportX509PublicKey(pub) 38 if err != nil { 39 t.Error("Wrong key") 40 t.FailNow() 41 } 42 43 result,err := GetVerifiedMessageES256(got,keys2) 44 if err != nil || result == nil { 45 t.Error("Signature is not valid") 46 }else { 47 t.Log(result) 48 } 49 50 } 51 52 func TestSignMessageES256_TestKey(t *testing.T) { 53 keys := security.NewEcdsaKey() 54 if err:=keys.Generate();err !=nil { 55 t.Error("SerializedKey generation error",err) 56 t.FailNow() 57 } 58 private , pub := keys.ExportJsonEncodedKeys() 59 bprivate,err := json.Marshal(private) 60 if err !=nil { 61 t.Error("Serialize error",err) 62 t.FailNow() 63 } 64 bpub,err := json.Marshal(pub) 65 if err !=nil { 66 t.Error("Serialize error",err) 67 t.FailNow() 68 } 69 t.Log(string(bprivate)) 70 t.Log(string(bpub)) 71 msg := fimpgo.NewFloatMessage("evt.sensor.report", "temp_sensor", 35.5, nil, nil, nil) 72 got, err := SignMessageES256(msg, nil, "alex@gmail.com", keys, nil) 73 if err !=nil { 74 t.Error("SerializedKey generation error",err) 75 t.FailNow() 76 } 77 78 bmsg,err := got.SerializeToJson() 79 if err !=nil { 80 t.Error("Serialize error",err) 81 t.FailNow() 82 } 83 84 t.Log(string(bmsg)) 85 86 keys2 := security.NewEcdsaKey() 87 err = keys2.ImportJsonPublicKey(pub) 88 if err != nil { 89 t.Error("Wrong key") 90 t.FailNow() 91 } 92 result,err := GetVerifiedMessageES256(got,keys2) 93 if err != nil || result == nil { 94 t.Error("Signature is not valid") 95 }else { 96 t.Log(result) 97 } 98 } 99 100 func TestSignMessageES256_TestVerify(t *testing.T) { 101 pubKey := security.JsonEcKey{ 102 X: "f149023bb33138b6bfc6458c50b21c4ed67004b25d8ae201a2fea3731a9da694", 103 Y: "6ce19554fbb2104de755c01aeb247fc3fb99b122b3ade55bbb2332b3c9acdd66", 104 } 105 keys := security.NewEcdsaKey() 106 err := keys.ImportJsonPublicKey(pubKey) 107 if err != nil { 108 t.Error("Keys import error") 109 t.FailNow() 110 } 111 signedMsgTxt := "{\"type\":\"evt.transport.signed\",\"serv\":\"temp_sensor\",\"val_t\":\"bin\",\"val\":\"eyJjb3JpZCI6bnVsbCwiY3RpbWUiOiIyMDIwLTA1LTE1VDExOjI5OjQ4Ljc1NzY4MSIsInByb3BzIjpudWxsLCJzZXJ2IjoiZmhidXRsZXIiLCJ0YWdzIjpudWxsLCJ0eXBlIjoiY21kLmdhdGV3YXkuZ2V0X2FjdGl2ZV9hZGFwdGVycyIsInVpZCI6IjlmMjJlYzkwLTk2OGUtMTFlYS1kZTdmLWViYTk3ODNhZjQwMCIsInZhbF90Ijoic3RyaW5nIiwidmVyIjpudWxsLCJ2YWwiOiIiLCJyZXNwX3RvIjoicHQ6ajEvbXQ6cnNwL3J0OmNsb3VkL3JuOnJlbW90ZS1jbGllbnQvYWQ6c21hcnRob21lLWFwcCIsInNyYyI6ImFwcCJ9\",\"tags\":null,\"props\":{\"sig\":\"SCwiI0yRhv4vydSND-Khpi2uCkoSjLOHmdZeKnELmkMtZOnxCuVpMs1A9zNPfXBprL3xN4_n8WT__IM8kpjEhA\",\"user_id\":\"alex@gmail.com\"},\"ver\":\"1\",\"corid\":\"\",\"ctime\":\"2020-05-14T10:56:32.385+02:00\",\"uid\":\"6ad4ae68-7458-44a9-8cdc-fcc8551689e5\"}" 112 signedMsg,err := fimpgo.NewMessageFromBytes([]byte(signedMsgTxt)) 113 t.Log("Signature:",signedMsg.Properties["sig"]) 114 if err != nil { 115 t.Error("Wrong message") 116 t.FailNow() 117 } 118 innnerMsg,err := GetVerifiedMessageES256(signedMsg,keys) 119 if err != nil { 120 t.Error("Message can't be verified. Err:",err) 121 t.FailNow() 122 } 123 t.Logf("%+v",*innnerMsg) 124 } 125 126 func TestSignMessageES256_TestVerify2(t *testing.T) { 127 128 keyStore := security.NewKeyStore("../testdata/hub/pub_key_store.json", false) 129 keyStore.LoadFromDisk() 130 signedMsgTxt := "{\n \"corid\": \"\",\n \"ctime\": \"2020-05-27T16:16:06.410681\",\n \"props\": {\n \"user_id\": \"emiliana.guzik@gmail.com\",\n \"device_id\": \"9c69f39059f27185\",\n \"sig\": \"IECSBikTtYEFPJSt5LBa3UCcvnHSvXF2ksOQGoFbC4Ktw82-l7ogaWLp3opKZUUOvUnjlX_giQ7-NsgFgSFl-Q\",\n \"alg\": \"ES256\"\n },\n \"serv\": \"door_lock\",\n \"tags\": null,\n \"type\": \"cmd.transport.signed\",\n \"uid\": \"9ac54db0-a024-11ea-c1f3-0f1c4cea82d3\",\n \"val_t\": \"bin\",\n \"ver\": null,\n \"val\": \"eyJjb3JpZCI6IiIsImN0aW1lIjoiMjAyMC0wNS0yN1QxNjoxNjowNi4wNzU3MDAiLCJwcm9wcyI6bnVsbCwic2VydiI6ImRvb3JfbG9jayIsInRhZ3MiOm51bGwsInR5cGUiOiJjbWQubG9jay5zZXQiLCJ1aWQiOiI5YTkyMmZjMC1hMDI0LTExZWEtZWZhMy02ZDU4ZDJjMTNkZjkiLCJ2YWxfdCI6ImJvb2wiLCJ2ZXIiOm51bGwsInZhbCI6ZmFsc2UsInJlc3BfdG8iOm51bGwsInNyYyI6ImFwcCJ9\",\n \"resp_to\": null,\n \"src\": \"app\"\n}" 131 msg,err := fimpgo.NewMessageFromBytes([]byte(signedMsgTxt)) 132 userId := msg.Properties["user_id"] 133 deviceId := msg.Properties["device_id"] 134 // The error is from this call 135 key, err := keyStore.GetEcdsaKey(userId, deviceId, security.KeyTypePublic) 136 innnerMsg,err := GetVerifiedMessageES256(msg,key) 137 if err != nil { 138 t.Error("Message can't be verified. Err:",err) 139 t.FailNow() 140 } 141 t.Logf("%+v",*innnerMsg) 142 }