| @@ -1,7 +1,7 @@ | |||||
| Protocol | Protocol | ||||
| ======== | ======== | ||||
| The responder will be the node under control (irrigation controler), and | |||||
| The responder will be the node under control (irrigation controller), and | |||||
| the initiator will be the server. | the initiator will be the server. | ||||
| The responder will always respond with one and only one packet. That | The responder will always respond with one and only one packet. That | ||||
| @@ -25,7 +25,7 @@ initiator: | |||||
| send_enc(<16 bytes random data> + 'reqreset') # nonce injection | send_enc(<16 bytes random data> + 'reqreset') # nonce injection | ||||
| send_mac(8) | send_mac(8) | ||||
| respondant: | |||||
| respondent: | |||||
| send_enc(<16 bytes random data>) # nonce injection | send_enc(<16 bytes random data>) # nonce injection | ||||
| send_mac(8) | send_mac(8) | ||||
| @@ -33,7 +33,7 @@ initiator: | |||||
| send_enc('confirm') | send_enc('confirm') | ||||
| send_mac(8) | send_mac(8) | ||||
| respondant: | |||||
| respondent: | |||||
| send_enc('confirmed') | send_enc('confirmed') | ||||
| send_mac(8) | send_mac(8) | ||||
| @@ -45,7 +45,7 @@ The new key/session does not become active till this point. | |||||
| In order to handle a reset and prevent a replay attack, the existing | In order to handle a reset and prevent a replay attack, the existing | ||||
| session, if any is maintained till the completion of a reset request. | session, if any is maintained till the completion of a reset request. | ||||
| Only after that, does the old conenction key get removed. This does | |||||
| Only after that, does the old connection key get removed. This does | |||||
| mean that after a reset request, it is required that both sides attempt | mean that after a reset request, it is required that both sides attempt | ||||
| to decode each packet w/ both keys. | to decode each packet w/ both keys. | ||||
| @@ -54,4 +54,19 @@ Where type is to be: | |||||
| ecdh - Results of an ECDH exchange, key = K || K_A || K_B | ecdh - Results of an ECDH exchange, key = K || K_A || K_B | ||||
| ecdhe - Results of an ECDHE exchange, key = TBD | ecdhe - Results of an ECDHE exchange, key = TBD | ||||
| Once the session has been established, the initiator will send commands of the | |||||
| following format: | |||||
| <cmd byte> <args> | |||||
| Currently the only defined type for args, is a 4 byte integer in little endian | |||||
| format. Additional types may be added later. | |||||
| The following commands are defined: | |||||
| TERMINATE: 1 -- no args: terminate the session, reply confirms | |||||
| WAITFOR: 2 -- args: (length): waits for length seconds | |||||
| RUNFOR: 3 -- args: (chan, length): turns on chan for length seconds | |||||
| When the responder receives a command, it will process it, and send back | |||||
| a response w/ the same command byte as an acknowledgment. | |||||
| Note: look at: https://monocypher.org/manual/advanced/elligator when doing ECDHE | Note: look at: https://monocypher.org/manual/advanced/elligator when doing ECDHE | ||||