Пример #1
0
def test():
    """Test cases """
    wallet = generateSampleWallet(["Alice", "Bob", "Carol", "David"])
    pubKeyMap = wallet.toPublicKeyMap()
    sampleMessage1 = Message()
    sampleMessage1.addInteger(15)
    sampleMessage2 = Message()
    sampleMessage2.addInteger(20)
    sampleMessage3 = Message()
    sampleMessage3.addInteger(30)
    signature1 = wallet.signMessage(sampleMessage1, "Alice")
    signature2 = wallet.signMessage(sampleMessage2, "Bob")
    signature3 = wallet.signMessage(sampleMessage3, "Carol")
    pubKeyA = pubKeyMap.getPublicKey("Alice")
    pubKeyB = pubKeyMap.getPublicKey("Bob")
    TxInputList([TxInput(pubKeyA, 10,
                         signature1)]).testCase("Test Alice 10", pubKeyMap)
    TxInputList([TxInput(pubKeyB, 20,
                         signature2)]).testCase("Test Bob 20", pubKeyMap)
    l = TxInputList(
        [TxInput(pubKeyA, 10, signature1),
         TxInput(pubKeyA, 10, signature2)])
    l.testCase("Alice twice 10", pubKeyMap)
    l = TxInputList(
        [TxInput(pubKeyA, 10, signature1),
         TxInput(pubKeyB, 20, signature2)])
    l.testCase("Test Alice 10 and Bob  20", pubKeyMap)
    print("Same List but with words User and spends")
    print(l.str(pubKeyMap, "(User ", " spends ", ")"))
Пример #2
0
def test():
    """Test cases """
    exampleWallet = generateSampleWallet(["Alice"])
    pubKeyMap = exampleWallet.toPublicKeyMap()
    exampleMessage = Message()
    exampleMessage.addInteger(15)
    exampleSignature = exampleWallet.signMessage(exampleMessage, "Alice")
def test():
    """Test cases """
    wallet = generateSampleWallet(["Alice", "Bob", "Carol", "David"])
    pubKeyMap = wallet.toPublicKeyMap()
    pubKeyA   = pubKeyMap.getPublicKey("Alice")
    pubKeyB =   pubKeyMap.getPublicKey("Bob")                   
    print()
    print("Test (Alice in 10)")
    (TxInputUnsigned(pubKeyA,10)).print(pubKeyMap)
    print()
    print("Test (Bob in 20)");
    (TxInputUnsigned(pubKeyB,20)).print(pubKeyMap);     
Пример #4
0
def test():
    """Test cases"""
    wallet = generateSampleWallet(["Alice", "Bob", "Bob", "David"])
    print("Wallet =\n", wallet)
    pubKeyMap = wallet.toPublicKeyMap()
    pubKeyA = pubKeyMap.getPublicKey("Alice")
    AliceBack = pubKeyMap.getKeyName(pubKeyA)
    print("AliceBack=", AliceBack)
    pubKeyB = pubKeyMap.getPublicKey("Bob")
    txo = TxOutput(pubKeyA, 10)
    print("TxOutput(Alice,10)=", txo.str(pubKeyMap))
    print("txo using __str__=", str(txo))
    txo = TxOutput(pubKeyB, 20)
    print("TxOutput(Bob,20)=", txo.str(pubKeyMap))
def test():
    """Test cases """
    wallet = generateSampleWallet(["Alice", "Bob", "Bob", "David"])
    pubKeyMap = wallet.toPublicKeyMap()
    pubKeyA = pubKeyMap.getPublicKey("Alice")
    pubKeyB = pubKeyMap.getPublicKey("Bob")
    (TxOutputList([TxOutput(pubKeyA, 10)]).testCase("Test Alice 10",
                                                    pubKeyMap))
    (TxOutputList([TxOutput(pubKeyB, 20)]).testCase("Test Bob 20", pubKeyMap))
    (TxOutputList([TxOutput(pubKeyA, 10),
                   TxOutput(pubKeyA, 10)]).testCase("Alice twice 10",
                                                    pubKeyMap))
    l = TxOutputList([TxOutput(pubKeyA, 10), TxOutput(pubKeyB, 20)])
    l.testCase("Test Alice 10 and Bob  20", pubKeyMap)
    print("Same List but with words User and spends")
    print(l.str(pubKeyMap, "(User ", " spends ", ")"))
Пример #6
0
def test():
    """Test cases """
    wallet = generateSampleWallet(["Alice", "Bob", "Carol", "David"])
    pubKeyMap = wallet.toPublicKeyMap()
    sampleMessage1 = Message()
    sampleMessage1.addInteger(15)
    sampleMessage2 = Message()
    sampleMessage2.addInteger(20)
    sampleMessage3 = Message()
    sampleMessage3.addInteger(30)
    signature1 = wallet.signMessage(sampleMessage1, "Alice")
    signature2 = wallet.signMessage(sampleMessage2, "Bob")
    signature3 = wallet.signMessage(sampleMessage3, "Carol")
    pubKeyA = pubKeyMap.getPublicKey("Alice")
    pubKeyB = pubKeyMap.getPublicKey("Bob")
    pubKeyC = pubKeyMap.getPublicKey("Carol")
    tx = Transaction(TxInputList(), TxOutputList())
    tx.testCase("Transaction null to null", pubKeyMap)
    tx = Transaction(TxInputList([TxInput(pubKeyA, 10, signature1)]),
                     TxOutputList([TxInput(pubKeyB, 5, signature1)]))
    tx.testCase("Transaction Alice 10  to Bob 5", pubKeyMap)

    tx = Transaction(TxInputList([TxInput(pubKeyA, 5, signature1)]),
                     TxOutputList([TxOutput(pubKeyB, 10)]))
    tx.testCase("Transaction Alice 5  to Bob 10", pubKeyMap)

    tx = Transaction(
        TxInputList([
            TxInput(pubKeyA, 10, signature1),
            TxInput(pubKeyB, 5, signature1)
        ]), TxOutputList([TxOutput(pubKeyA, 7),
                          TxOutput(pubKeyC, 8)]))
    tx.testCase("Transaction Alice 10  Bob 5 to Alice 7 Carol 8", pubKeyMap)

    tx = Transaction(
        TxInputList([
            TxInput(pubKeyA, 10, signature1),
            TxInput(pubKeyB, 5, signature1)
        ]), TxOutputList([TxOutput(pubKeyA, 10),
                          TxOutput(pubKeyC, 8)]))
    tx.testCase("Transaction Alice 10  Bob 5 to Alice 10 Carol 8", pubKeyMap)
Пример #7
0
def test():
    """Test cases """
    wallet = generateSampleWallet(["Alice", "Bob", "Carol", "David"])
    pubKeyMap = wallet.toPublicKeyMap()
    sampleMessage1 = Message()
    sampleMessage1.addInteger(15)
    sampleMessage2 = Message()
    sampleMessage2.addInteger(20)
    sampleMessage3 = Message()
    sampleMessage3.addInteger(30)
    signature1 = wallet.signMessage(sampleMessage1, "Alice")
    print("signature1 =", signature1)
    pubKeyA = pubKeyMap.getPublicKey("Alice")
    pubKeyB = pubKeyMap.getPublicKey("Bob")
    print("Test Alice 10")
    (TxInput(pubKeyA, 10, signature1)).print(pubKeyMap)
    print()
    print("Test Bob 20")
    (TxInput(pubKeyB, 20, signature1)).print(pubKeyMap)
    txOutputList = TxOutputList([TxOutput(pubKeyA, 10), TxOutput(pubKeyA, 10)])
    txInput = createTxInput("Alice", 10, txOutputList, wallet)
    print("Check Signature", txInput.checkSignature(txOutputList, signature1))
Пример #8
0
def test():
    """Test cases """
    exampleWallet = generateSampleWallet(["Alice"])
    pubKeyMap = exampleWallet.toPublicKeyMap()
    exampleMessage = Message()
    exampleMessage.addInteger(15)
    exampleSignature = exampleWallet.signMessage(exampleMessage, "Alice")

    ##################################################################
    #  Task 5
    #   add  to the test case the test as described in the lab sheet
    #
    #   You can use the above exampleSignature, when a sample
    #      signature is needed, which cannot be computed from the data.
    #
    ##################################################################
    print(
        " 5.1 Create a sample wallet for Alice containing keys with names A1, A2, for Bob containing keynames B1, B2, for Carol containing keynames C1, C2, C3, and for David containing keyname D1 by using the method generate of SampleWallet"
    )
    Alicewallet = Wallet()
    Bobwallet = Wallet()
    Carolwallet = Wallet()
    Davidwallet = Wallet()

    Alicewallet = generateSampleWallet(["A1", "A2"])
    Bobwallet = generateSampleWallet(["B1", "B2"])
    Carolwallet = generateSampleWallet(["C1", "C2", "C3"])
    Davidwallet = generateSampleWallet(["D1"])

    print(
        "5.2 Compute the PublicKeyMap containing the public keys of all these wallets. The PublicKeyMap is for convenience, since comparing public keys is cumbersome."
    )

    pubKeyMapa = Alicewallet.toPublicKeyMap()
    pubKeyMapb = Bobwallet.toPublicKeyMap()
    pubKeyMapc = Carolwallet.toPublicKeyMap()
    pubKeyMapd = Davidwallet.toPublicKeyMap()

    pubKeyMapabcd = PublicKeyMap()
    pubKeyMapabcd.addPublicKeyMap(pubKeyMapa)
    pubKeyMapabcd.addPublicKeyMap(pubKeyMapb)
    pubKeyMapabcd.addPublicKeyMap(pubKeyMapc)
    pubKeyMapabcd.addPublicKeyMap(pubKeyMapd)

    pubKeyA1 = pubKeyMapabcd.getPublicKey("A1")
    pubKeyA2 = pubKeyMapabcd.getPublicKey("A2")
    pubKeyB1 = pubKeyMapabcd.getPublicKey("B1")
    pubKeyB2 = pubKeyMapabcd.getPublicKey("B2")
    pubKeyC1 = pubKeyMapabcd.getPublicKey("C1")
    pubKeyC2 = pubKeyMapabcd.getPublicKey("C2")
    pubKeyC3 = pubKeyMapabcd.getPublicKey("C3")
    pubKeyD1 = pubKeyMapabcd.getPublicKey("D1")
    print(
        "– Create an empty AccountBalance and add to it the keynames of the wallets created before initialised with the amount 0 for each key"
    )
    AccBal = AccountBalance()

    AccBal.addAccount(pubKeyA1, 0)
    AccBal.addAccount(pubKeyA2, 0)
    AccBal.addAccount(pubKeyB1, 0)
    AccBal.addAccount(pubKeyB2, 0)
    AccBal.addAccount(pubKeyC1, 0)
    AccBal.addAccount(pubKeyC2, 0)
    AccBal.addAccount(pubKeyC3, 0)
    AccBal.addAccount(pubKeyD1, 0)
    AccBal.print(pubKeyMapabcd)

    print("5.4Set the balance for A1 to 20")
    AccBal.setBalance(pubKeyA1, 20)
    AccBal.print(pubKeyMapabcd)

    print("5.5 Add 15 to the balance for B1")
    AccBal.addToBalance(pubKeyB1, 5)
    AccBal.print(pubKeyMapabcd)

    print("5.6 – Subtract 5 from the balance for B1")
    AccBal.subtractFromBalance(pubKeyB1, 5)
    AccBal.print(pubKeyMapabcd)

    print("5.7 Set the balance for C1 to 10.")
    AccBal.setBalance(pubKeyC1, 10)
    AccBal.print(pubKeyMapabcd)

    print(
        "5.8 Check whether the TxInputList txil1 giving A1 15 units, and B1 5 units (withsample signatures used) can be deducted."
    )
    txiL1 = TxInputList()
    tx1 = (AccBal.checkTxInputListCanBeDeducted(txiL1))
    txiL1 = TxInputList([
        TxInput(pubKeyA1, 10, exampleSignature),
        TxInput(pubKeyB1, 5, exampleSignature)
    ])
    print("can txil1 be deducted?? : ",
          AccBal.checkTxInputListCanBeDeducted(txiL1))

    print(
        "5.9 – Check whether the TxInputList txil2 giving A1 15 units, and giving A1 again15 units can be deducted."
    )
    txiL2 = TxInputList()
    txiL2 = TxInputList([
        TxInput(pubKeyA1, 15, exampleSignature),
        TxInput(pubKeyA1, 15, exampleSignature)
    ])
    tx1 = (AccBal.checkTxInputListCanBeDeducted(txiL2))
    print("can txil1 be deducted?? : ",
          AccBal.checkTxInputListCanBeDeducted(txiL2))

    print("6.0 Deduct txil1 from the AccountBalance")
    AccBal.subtractTxInputList(txiL1)
    AccBal.print(pubKeyMapabcd)

    print(
        "6.1Create a TxOutputList corresponding to txil2 which gives A1 twice 15 Units,and add it to the AccountBalance."
    )
    txoL2 = TxOutputList()
    txoL2 = TxOutputList([TxOutput(pubKeyA1, 15), TxOutput(pubKeyA1, 15)])
    AccBal.addTxOutputList(txoL2)
    AccBal.print(pubKeyMapabcd)

    print(
        "6.2 Create a correctly signed input, where A1 is spending 30, referring to an outputlist giving B2 10 and C1 20 The output list is needed in order to create the message to be signed(consisting of A1 spending 30, B1 receiving 10 and C1receiving 20). Check whether the signature is valid for this signed input."
    )
    txoL3 = TxOutputList()
    txoL3 = TxOutputList([TxOutput(pubKeyB2, 10), TxOutput(pubKeyC1, 20)])
    TIU = TxInputUnsigned(pubKeyA1, 30)
    message = TIU.getMessageToSign(txoL2)
    A1Signature = Alicewallet.signMessage(message, "A1")
    txiL3 = TxInputList()
    txiL3 = TxInputList([createTxInput("A1", 30, txoL3, Alicewallet)])
    valid = txiL3.checkSignature(txoL3)
    print("Is the signature valid for signed input?  : ", valid)

    print(
        "6.3Create a wrongly signed input, which gives A1 30, and uses instead of the correctly created signature an example signature (example signatures are provided in thecode). Check whether the signature is valid for this signed input."
    )
    txisL4 = TxInputList()
    txisL4 = TxInputList([TxInput(pubKeyA1, 30, exampleSignature)])
    valid_check = txisL4.checkSignature(txoL3)
    print("Is the signature valid for signed input?  : " + str(valid_check))

    print(
        "6.4 Create a transaction tx1 which takes as input for A1 35 units and gives B2 10, C2 10, and returns the change (whatever is left) to A2."
    )
    TxOuLi = TxOutputList([
        TxOutput(pubKeyB2, 10),
        TxOutput(pubKeyC2, 10),
        TxOutput(pubKeyA2, 15)
    ])
    Tiu1 = TxInputList([createTxInput("A1", 35, TxOuLi, Alicewallet)])
    #A1message = Tiu1.getMessageToSign(TxOuLi)
    #signA1 = Alicewallet.signMessage(A1message,"A1" )
    #txiL5 = TxInputList(pubKeyA1,35,signA1)
    tx1 = Transaction(Tiu1, TxOuLi)

    #AccBal.print(pubKeyMapabcd)

    print(
        "6.5 Check whether the signature is approved for the transaction input, and whether the transaction is valid. Then update the AccountBalance using that transaction."
    )

    if Tiu1.checkSignature(TxOuLi):
        print(
            "signature is approved transaction input and the transaction is valid"
        )
        AccBal.processTransaction(tx1)
        print("Account balance updated")
        AccBal.print(pubKeyMapabcd)
    else:
        print("Transaction is invalid")

    print(
        "6.6 Create a transaction tx2 which takes as inputs from B2 10, C2 10, and as outputs given D1 15 and C3 the change (whatever is left) "
    )
    TxOuLi1 = TxOutputList(pubKeyD1, 15, pubKeyC3, 5)
    Tiu2 = TxInputUnsigned(pubKeyB2, 10)
    B2message = Tiu2.getMessageToSign(TxOuLi1)
    signB2 = Bobwallet.signMessage(B2message, "B2")
    Tiu3 = TxInputUnsigned(pubKeyC2, 10)
    C2message = Tiu3.getMessageToSign(TxOuLi1)
    signC2 = Carolwallet.signMessage(C2message, "C2")
    txil6 = TxInputList(pubKeyB2, 10, signB2, pubKeyC2, 10, signC2)
    trx = Transaction(txil6, TxOuLi1)
    AccBal.print(pubKeyMapabcd)

    print(
        "6.7 Check whether the signature is approved for the transaction input, and whether the transaction is valid. Then update the AccountBalance using that transaction."
    )
    if AccBal.checkTransactionValid(trx):
        print(
            "signature is approved transaction input and the transaction is valid"
        )
        AccBal.processTransaction(trx)
        print("Account balance updated")
        AccBal.print(pubKeyMapabcd)

    else:
        print("Transaction is invalid")