def test_responder_finalize(responder, test_vectors): responder.msg_1 = MessageOne.decode(test_vectors['S']['message_1']) responder.msg_2 = MessageTwo.decode( responder.create_message_two(test_vectors['S']['message_1'])) responder.msg_3 = MessageThree.decode(test_vectors['S']['message_3']) decoded = EdhocMessage.decode( responder._decrypt(responder.msg_3.ciphertext)) if KID.identifier in cbor2.loads(test_vectors['I']['cred_id']): assert decoded[0] == EdhocMessage.encode_bstr_id( cbor2.loads(test_vectors['I']['cred_id'])[KID.identifier]) else: assert decoded[0] == cbor2.loads(test_vectors['I']['cred_id']) assert decoded[1] == test_vectors['S']['signature_3'] if getattr(responder, 'remote_authkey', None) is None: warnings.warn(NoRemoteKey()) return c_i, c_r, app_aead, app_hash = responder.finalize( test_vectors['S']['message_3']) assert c_i == test_vectors['I']['conn_id'] assert c_r == test_vectors['R']['conn_id'] assert app_aead == CipherSuite.from_id( test_vectors['I']['selected']).app_aead.identifier assert app_hash == CipherSuite.from_id( test_vectors['I']['selected']).app_hash.identifier
def create_message_three(self, message_two: bytes): self.msg_2 = MessageTwo.decode(message_two) self._internal_state = EdhocState.MSG_2_RCVD decoded = EdhocMessage.decode(self._decrypt(self.msg_2.ciphertext)) self.cred_idr = decoded[0] if not self._verify_signature_or_mac2(signature_or_mac2=decoded[1]): self._internal_state = EdhocState.EDHOC_FAIL return MessageError( err_msg='Signature verification failed').encode() try: ad_2 = decoded[2] if self.aad2_cb is not None: self.aad2_cb(ad_2) except IndexError: pass self.msg_3 = MessageThree(self.ciphertext_3, self.conn_idr) self._internal_state = EdhocState.MSG_3_SENT return self.msg_3.encode(self.corr)
def test_initiator_finalize(initiator, test_vectors): initiator.msg_1 = MessageOne.decode(initiator.create_message_one()) initiator.msg_2 = MessageTwo.decode(test_vectors['R']['message_2']) initiator.msg_3 = MessageThree.decode( initiator.create_message_three(test_vectors['R']['message_2'])) c_i, c_r, app_aead, app_hash = initiator.finalize() assert c_i == test_vectors['I']['conn_id'] assert c_r == test_vectors['R']['conn_id'] assert app_aead == CipherSuite(test_vectors['I']['selected']).app_aead.id assert app_hash == CipherSuite(test_vectors['I']['selected']).app_hash.id
def test_initiator_finalize(initiator, test_vectors): initiator.msg_1 = MessageOne.decode(initiator.create_message_one()) initiator.msg_2 = MessageTwo.decode(test_vectors['S']['message_2']) if getattr(initiator, 'remote_authkey', None) is None: warnings.warn(NoRemoteKey()) return initiator.msg_3 = MessageThree.decode(initiator.create_message_three(test_vectors['S']['message_2'])) c_i, c_r, app_aead, app_hash = initiator.finalize() assert c_i == test_vectors['I']['conn_id'] assert c_r == test_vectors['R']['conn_id'] assert app_aead == CipherSuite.from_id(test_vectors['I']['selected']).app_aead.identifier assert app_hash == CipherSuite.from_id(test_vectors['I']['selected']).app_hash.identifier
def test_initiator_message3(initiator, test_vectors): initiator.msg_1 = MessageOne.decode(test_vectors['I']['message_1']) initiator.msg_2 = MessageTwo.decode(test_vectors['R']['message_2']) crv = CoseEllipticCurves(CipherSuite(initiator._selected_cipher).dh_curve) hash_func = config_cose(CipherSuite(initiator._selected_cipher).hash).hash assert initiator.data_2 == test_vectors['R']['data_2'] assert initiator._th2_input == test_vectors['R']['input_th_2'] assert initiator._prk2e == test_vectors['R']['prk_2e'] assert initiator._prk3e2m == test_vectors['R']['prk_3e2m'] assert initiator.transcript( hash_func, initiator._th2_input) == test_vectors['R']['th_2'] assert initiator._decrypt( initiator.msg_2.ciphertext) == test_vectors['R']['p_2e'] assert initiator.shared_secret(initiator.ephemeral_key, OKP(x=initiator.g_y, crv=crv)) == test_vectors['S']['g_xy'] assert initiator.data_3 == test_vectors['I']['data_3'] assert initiator._th3_input == test_vectors['I']['input_th_3'] assert initiator.transcript( hash_func, initiator._th3_input) == test_vectors['I']['th_3'] assert initiator.cred_id == test_vectors['I']['id_cred'] assert initiator._prk4x3m == test_vectors['I']['prk_4x3m'] assert initiator._external_aad( initiator._th3_input, initiator.aad3_cb) == test_vectors['I']['eaad_3m'] assert initiator._hkdf3(16, 'K_3m', initiator._prk4x3m) == test_vectors['I']['k_3m'] assert initiator._hkdf3(13, 'IV_3m', initiator._prk4x3m) == test_vectors['I']['iv_3m'] assert initiator._mac(initiator._hkdf3, 'K_3m', 16, 'IV_3m', 13, initiator._th3_input, initiator._prk4x3m, initiator.aad2_cb) == test_vectors['I']['mac3'] assert initiator.signature_or_mac3( test_vectors['I']['mac3']) == test_vectors['I']['sign_or_mac3'] assert initiator._p_3ae == test_vectors['I']['p_3ae'] assert initiator._hkdf3(16, 'K_3ae', initiator._prk3e2m) == test_vectors['I']['k_3ae'] assert initiator._hkdf3(13, 'IV_3ae', initiator._prk3e2m) == test_vectors['I']['iv_3ae'] assert initiator.ciphertext_3 == test_vectors['I']['ciphertext_3'] assert initiator.create_message_three( test_vectors['R']['message_2']) == test_vectors['I']['message_3']
def test_initiator_message3(initiator, test_vectors): initiator.msg_1 = MessageOne.decode(test_vectors['S']['message_1']) initiator.msg_2 = MessageTwo.decode(test_vectors['S']['message_2']) crv = CipherSuite.from_id(initiator._selected_cipher).dh_curve hash_func = CipherSuite.from_id(initiator._selected_cipher).hash.hash_cls assert initiator.data_2 == test_vectors['S']['data_2'] assert initiator._th2_input == test_vectors['S']['input_th_2'] assert initiator._prk2e == test_vectors['S']['prk_2e'] assert initiator._prk3e2m == test_vectors['S']['prk_3e2m'] assert initiator.transcript(hash_func, initiator._th2_input) == test_vectors['S']['th_2'] assert initiator._decrypt(initiator.msg_2.ciphertext) == test_vectors['S']['p_2e'] assert initiator.shared_secret(initiator.ephemeral_key, OKPKey(x=initiator.g_y, crv=crv)) == test_vectors['S'][ 'g_xy'] assert initiator.data_3 == test_vectors['S']['data_3'] assert initiator._th3_input == test_vectors['S']['input_th_3'] assert initiator.transcript(hash_func, initiator._th3_input) == test_vectors['S']['th_3'] assert initiator.cred_id == cbor2.loads(test_vectors['I']['cred_id']) assert initiator._prk4x3m == test_vectors['S']['prk_4x3m'] assert initiator._hkdf3(16, 'K_3m', initiator._prk4x3m) == test_vectors['S']['k_3m'] assert initiator._hkdf3(13, 'IV_3m', initiator._prk4x3m) == test_vectors['S']['iv_3m'] assert initiator._mac( initiator.cred_idi, initiator.cred, initiator._hkdf3, 'K_3m', 16, 'IV_3m', 13, initiator._th3_input, initiator._prk4x3m, initiator.aad2_cb) == test_vectors['S']['mac_3'] assert initiator.signature_or_mac3(test_vectors['S']['mac_3']) == test_vectors['S']['signature_3'] assert initiator._p_3ae == test_vectors['S']['p_3ae'] assert initiator._hkdf3(16, 'K_3ae', initiator._prk3e2m) == test_vectors['S']['k_3ae'] assert initiator._hkdf3(13, 'IV_3ae', initiator._prk3e2m) == test_vectors['S']['iv_3ae'] assert initiator.ciphertext_3 == test_vectors['S']['ciphertext_3'] if initiator.remote_authkey is None: warnings.warn(NoRemoteKey()) return assert initiator.create_message_three(test_vectors['S']['message_2']) == test_vectors['S']['message_3']
def test_responder_finalize(responder, test_vectors): responder.msg_1 = MessageOne.decode(test_vectors['I']['message_1']) responder.msg_2 = MessageTwo.decode( responder.create_message_two(test_vectors['I']['message_1'])) responder.msg_3 = MessageThree.decode(test_vectors['I']['message_3']) decoded = EdhocMessage.decode( responder._decrypt(responder.msg_3.ciphertext)) if CoseHeaderKeys.KID in test_vectors['I']['id_cred']: assert decoded[0] == EdhocMessage.encode_bstr_id( test_vectors['I']['id_cred'][CoseHeaderKeys.KID]) else: assert decoded[0] == test_vectors['I']['id_cred'] assert decoded[1] == test_vectors['I']['sign_or_mac3'] c_i, c_r, app_aead, app_hash = responder.finalize( test_vectors['I']['message_3']) assert c_i == test_vectors['I']['conn_id'] assert c_r == test_vectors['R']['conn_id'] assert app_aead == CipherSuite(test_vectors['I']['selected']).app_aead.id assert app_hash == CipherSuite(test_vectors['I']['selected']).app_hash.id