def test_verify_signature_success(): state = pruning_state() fees_authenticator = FeesAuthNr(state, None) msg = FeeData() msg.signatures = { 'V4SGRU86Z58d6TV7PBUe6f': 'dYZZFV6Fk59bFaNFaKwXfY9AqP6cr3wqTSPjoRLoLcgAi28RNErweRXRskzZ4cwRyzBCpZyzewmSPdrQb1oES83' } # 1 2 3 4 4 # 12345678901234567890123456789012345678901234567890 inputs = [{ ADDRESS: '2gWVuNmy8rdJrDHzQ9PDDpHkfcypyUZRsSHaqA9q1K3Gti3YXw', SEQNO: 153 }] outputs = [{ ADDRESS: '2gWVuNmy8rdJrDHzQ9PDDpHkfcypyUZRsSHaqA9q1K3Gti3YXw', AMOUNT: 9 }] signatures = [ '5cEsNP3tfVLG5hdKfW5dCNVyM6gtoUAgGDsTUsikfNw6ZEJXme4v6KxZPP6wvniwg6FZbeTMtkcQ5TY4uf3ihWsG' ] setattr(msg, "fees", [inputs, outputs, signatures]) fees_authenticator.verify_signature(msg)
def test_verify_signature_mismatch_of_signatures(): state = pruning_state() fees_authenticator = FeesAuthNr(state, None) msg = FeeData() msg.signatures = { 'MSjKTWkPLtYoPEaTF1TUDb': '61PUc8K8aAkhmCjWLstxwRREBAJKbVMRuGiUXxSo1tiRwXgUfVT4TY47NJtbQymcDW3paXPWNqqD4cziJjoPQSSX' } # 1 2 3 4 4 # 12345678901234567890123456789012345678901234567890 address = '2JMyZgFBFyp5YMsBta4gCFA5TMdUzMXrWbRvMFkW7KDNbaMrk1' inputs = [{ADDRESS: address, SEQNO: 1}, {ADDRESS: address, SEQNO: 1}] outputs = [ { ADDRESS: address, AMOUNT: 4 }, { ADDRESS: address, AMOUNT: 5 }, ] signatures = [ '2z34R9vCyohVS2V7SXf8VnkHuAm8a224D6hopKJBMbdV4z8meR8aTdLMbMiknRXnKD4YkGtZnYY1D6jSQz23FziG' ] setattr(msg, "fees", [inputs, outputs, signatures]) with pytest.raises(InsufficientCorrectSignatures): fees_authenticator.verify_signature(msg)
def test_verify_signature_incorrect_signatures(node): fees_authenticator = FeesAuthNr(ACCEPTABLE_WRITE_TYPES_FEE, ACCEPTABLE_QUERY_TYPES_FEE, ACCEPTABLE_ACTION_TYPES_FEE, node[0].db_manager.idr_cache, None) msg = FeeData() msg.signatures = { 'MSjKTWkPLtYoPEaTF1TUDb': '61PUc8K8aAkhmCjWLstxwRREBAJKbVMRuGiUXxSo1tiRwXgUfVT4TY47NJtbQymcDW3paXPWNqqD4cziJjoPQSSX' } inputs = [{ ADDRESS: '2jS4PHWQJKcawRxdW6GVsjnZBa1ecGdCssn7KhWYJZGTXgL7Es', SEQNO: 2 }] outputs = [{ ADDRESS: '2jS4PHWQJKcawRxdW6GVsjnZBa1ecGdCssn7KhWYJZGTXgL7Es', AMOUNT: 10 }] signatures = [ '5wuXGeWyrM2xcp68rRsYEaegaguEJBBTDQioeSgDv5jMFeaeSLPAcMs4XwcxNXBwoUAUWgxSMN9WUnZ7ADctdPyQ' ] setattr(msg, "fees", [inputs, outputs, signatures]) with pytest.raises(InsufficientCorrectSignatures): fees_authenticator.verify_signature(PreSigVerification(msg))
def test_verify_signature_invalid_signature_format(node): fees_authenticator = FeesAuthNr(ACCEPTABLE_WRITE_TYPES_FEE, ACCEPTABLE_QUERY_TYPES_FEE, ACCEPTABLE_ACTION_TYPES_FEE, node[0].getState(DOMAIN_LEDGER_ID), None) msg = FeeData() msg.signatures = { 'MSjKTWkPLtYoPEaTF1TUDb': '61PUc8K8aAkhmCjWLstxwRREBAJKbVMRuGiUXxSo1tiRwXgUfVT4TY47NJtbQymcDW3paXPWNqqD4cziJjoPQSSX' } inputs = [{ ADDRESS: '2jS4PHWQJKcawRxdW6GVsjnZBa1ecGdCssn7KhWYJZGTXgL7Es', SEQNO: 2 }] outputs = [{ ADDRESS: '2jS4PHWQJKcawRxdW6GVsjnZBa1ecGdCssn7KhWYJZGTXgL7Es', AMOUNT: 10 }] signatures = [ '000kKoLEAP1YCYULYqxSNKvcYigGG1fHRMbZ6N1byFhaRut4P5RDF2KGR73ffgQoyzMHabrcTvrRGHhEfQ6ZdzxB' ] setattr(msg, "fees", [inputs, outputs, signatures]) with pytest.raises(InvalidSignatureFormat): fees_authenticator.verify_signature(PreSigVerification(msg))
def test_verify_signature_success(node): fees_authenticator = FeesAuthNr(ACCEPTABLE_WRITE_TYPES_FEE, ACCEPTABLE_QUERY_TYPES_FEE, ACCEPTABLE_ACTION_TYPES_FEE, node[0].db_manager.idr_cache, None) msg = FeeData() msg.signatures = { 'V4SGRU86Z58d6TV7PBUe6f': 'dYZZFV6Fk59bFaNFaKwXfY9AqP6cr3wqTSPjoRLoLcgAi28RNErweRXRskzZ4cwRyzBCpZyzewmSPdrQb1oES83' } # 1 2 3 4 4 # 12345678901234567890123456789012345678901234567890 inputs = [{ ADDRESS: '2gWVuNmy8rdJrDHzQ9PDDpHkfcypyUZRsSHaqA9q1K3Gti3YXw', SEQNO: 153 }] outputs = [{ ADDRESS: '2gWVuNmy8rdJrDHzQ9PDDpHkfcypyUZRsSHaqA9q1K3Gti3YXw', AMOUNT: 9 }] signatures = [ '5cEsNP3tfVLG5hdKfW5dCNVyM6gtoUAgGDsTUsikfNw6ZEJXme4v6KxZPP6wvniwg6FZbeTMtkcQ5TY4uf3ihWsG' ] setattr(msg, "fees", [inputs, outputs, signatures]) msg.payload_digest = msg.digest fees_authenticator.verify_signature(PreSigVerification(msg))
def test_verify_signature_no_fees(): # should just run, no exceptions state = pruning_state() fees_authenticator = FeesAuthNr(state, None) msg = FeeData() msg.signatures = { 'MSjKTWkPLtYoPEaTF1TUDb': '61PUc8K8aAkhmCjWLstxwRREBAJKbVMRuGiUXxSo1tiRwXgUfVT4TY47NJtbQymcDW3paXPWNqqD4cziJjoPQSSX' } fees_authenticator.verify_signature(msg)
def test_verify_signature_no_fees(node): # should just run, no exceptions fees_authenticator = FeesAuthNr(ACCEPTABLE_WRITE_TYPES_FEE, ACCEPTABLE_QUERY_TYPES_FEE, ACCEPTABLE_ACTION_TYPES_FEE, node[0].db_manager.idr_cache, None) msg = FeeData() msg.signatures = { 'MSjKTWkPLtYoPEaTF1TUDb': '61PUc8K8aAkhmCjWLstxwRREBAJKbVMRuGiUXxSo1tiRwXgUfVT4TY47NJtbQymcDW3paXPWNqqD4cziJjoPQSSX' } fees_authenticator.verify_signature(PreSigVerification(msg))
def test_verify_signature_incorrect_signatures(): state = pruning_state() fees_authenticator = FeesAuthNr(state, None) msg = FeeData() msg.signatures = { 'MSjKTWkPLtYoPEaTF1TUDb': '61PUc8K8aAkhmCjWLstxwRREBAJKbVMRuGiUXxSo1tiRwXgUfVT4TY47NJtbQymcDW3paXPWNqqD4cziJjoPQSSX' } inputs = [{ ADDRESS: '2jS4PHWQJKcawRxdW6GVsjnZBa1ecGdCssn7KhWYJZGTXgL7Es', SEQNO: 2 }] outputs = [{ ADDRESS: '2jS4PHWQJKcawRxdW6GVsjnZBa1ecGdCssn7KhWYJZGTXgL7Es', AMOUNT: 10 }] signatures = [ '5wuXGeWyrM2xcp68rRsYEaegaguEJBBTDQioeSgDv5jMFeaeSLPAcMs4XwcxNXBwoUAUWgxSMN9WUnZ7ADctdPyQ' ] setattr(msg, "fees", [inputs, outputs, signatures]) with pytest.raises(InsufficientCorrectSignatures): fees_authenticator.verify_signature(msg)
def test_verify_signature_sequence_order_wrong(node): fees_authenticator = FeesAuthNr(ACCEPTABLE_WRITE_TYPES_FEE, ACCEPTABLE_QUERY_TYPES_FEE, ACCEPTABLE_ACTION_TYPES_FEE, node[0].db_manager.idr_cache, None) msg = FeeData() msg.signatures = { 'MSjKTWkPLtYoPEaTF1TUDb': '61PUc8K8aAkhmCjWLstxwRREBAJKbVMRuGiUXxSo1tiRwXgUfVT4TY47NJtbQymcDW3paXPWNqqD4cziJjoPQSSX' } # 1 2 3 4 4 # 12345678901234567890123456789012345678901234567890 address = '2JMyZgFBFyp5YMsBta4gCFA5TMdUzMXrWbRvMFkW7KDNbaMrk1' inputs = [{ADDRESS: address, SEQNO: 2}] outputs = [{ADDRESS: address, AMOUNT: 9}] signatures = [ '2z34R9vCyohVS2V7SXf8VnkHuAm8a224D6hopKJBMbdV4z8meR8aTdLMbMiknRXnKD4YkGtZnYY1D6jSQz23FziG' ] setattr(msg, "fees", [inputs, outputs, signatures]) with pytest.raises(InsufficientCorrectSignatures): fees_authenticator.verify_signature(PreSigVerification(msg))