Esempio n. 1
0
def mix(column):

    fixedmatrix = bytearray([0x02, 0x03, 0x01, 0x01])
    mixcolumnmatrix = bytearray()

    for i in range(4):

        resultinglist = []
        rijndael = gf.makeblist(0x11b)

        for j in range(4):

            fixedbytelist = gf.makeblist(fixedmatrix[j])
            columnvector = gf.makeblist(column[j])

            resultingbyte = gf.mul(fixedbytelist, columnvector)

            if gf.value(resultingbyte) > 255:
                resultingbyte = gf.div(resultingbyte, rijndael)[1]

            resultinglist.append(resultingbyte)

        finalvalue = gf.add(resultinglist[0], resultinglist[1])
        finalvalue = gf.add(finalvalue, resultinglist[2])
        finalvalue = gf.add(finalvalue, resultinglist[3])

        mixcolumnmatrix.append(gf.value(finalvalue))
        fixedmatrix = gf.circrotateright(fixedmatrix)

    return mixcolumnmatrix
Esempio n. 2
0
def inv(column):

    fixedmatrix = bytearray([0x0e, 0x0b, 0x0d, 0x09])
    mixcolumnmatrix = bytearray()

    for i in range(0, 4):

        resultinglist = []
        rijndael = gf.makeblist(0x11b)

        for j in range(0, 4):

            fixedbitlist = gf.makeblist(fixedmatrix[j])
            columnvector = gf.makeblist(column[j])

            resultingbyte = gf.mul(fixedbitlist, columnvector)

            while gf.value(resultingbyte) > 255:
                # note the inverted division function!
                resultingbyte = gf.div(rijndael, resultingbyte)[1]

            resultinglist.append(resultingbyte)

        finalvalue = gf.add(resultinglist[0], resultinglist[1])
        finalvalue = gf.add(finalvalue, resultinglist[2])
        finalvalue = gf.add(finalvalue, resultinglist[3])

        mixcolumnmatrix.append(gf.value(finalvalue))

        fixedmatrix = gf.circrotateright(fixedmatrix)

    return mixcolumnmatrix
Esempio n. 3
0
def makematrix():
    matrixbits = [0, 0, 0, 1, 1, 1, 1, 1]  # 0x1F
    affmatrix = []
    for i in range(8):
        matrixbits = gf.circrotateright(matrixbits)
        affmatrix.append(matrixbits)

    return affmatrix
Esempio n. 4
0
def makeinversematrix():
    matrixbits = [0, 1, 0, 0, 1, 0, 1, 0]  # inverse of 0x1F (in GF?)
    affmatrix = []
    for i in range(8):
        matrixbits = gf.circrotateright(matrixbits)
        affmatrix.append(matrixbits)

    return affmatrix
Esempio n. 5
0
def do(state):

    r0, r1, r2, r3 = bytearray(), bytearray(), bytearray(), bytearray()

    for i in range(4):

        r0.append(state[i * 4])
        r1.append(state[1 + i * 4])
        r2.append(state[2 + i * 4])
        r3.append(state[3 + i * 4])

    r1 = gf.circrotateleft(r1)
    r2 = gf.circrotateleft(gf.circrotateleft(r2))
    r3 = gf.circrotateright(r3)

    newstatematrix = r0 + r1 + r2 + r3

    return newstatematrix