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  }