Beispiel #1
0
def cryptBlock(mess, key, direction="enc"):
    if makeReport:
        reporter.count += 1
        reporter.openHandle()
    # adding zeros to the end of the last block
    numZerosToAdd = blockSize - cryptBlocks.getSizeOfBlock(mess)
    mess = cryptBlocks.addZeros(mess, numZerosToAdd)
    if makeReport:
        reporter.add("S-box(таблица замен):<br><table><tr><td>&nbsp;</td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>a</td><td>b</td><td>c</td><td>d</td><td>e</td><td>f</td></tr>")
        i=1
        for l in Sbox:
            l_str =""
            for s in l:
                l_str += "<td>"+hex(s)+"</td>"
            reporter.add("<tr><td>K%d:</td> %s</tr>"%(i, l_str))
            i += 1
        reporter.add("</table>")
        reporter.addBold("Список значений переданых для (рас)шифрования блока")
        reporter.addList([hex(mess),hex(key), direction])
    key = genKeys(key)
    if not (direction == "enc"):
        key.reverse()
    if makeReport:
        reporter.addBold("Сгенерированная последовательность ключей:")
        reporter.addList([hex(x) for x in key])
    N1 = cryptBlocks.getRight(mess, 4)
    N2 = cryptBlocks.getLeft(mess, 4)
    if makeReport:
        reporter.addBold("N1=%s,<br>N2=%s"%(hex(N1), hex(N2)))
        i = 1
    # 32 times
    for k in key:
        if makeReport:
            reporter.addBold("Сеть Фейстеля, итерация %d с N1=%s, N2=%s, key=%s"%(i, hex(N1), hex(N2), hex(k)))
            i+=1
        tmp = N1
        N1 = N2^functionF(N1, k)
        N2 = tmp
        if makeReport:
            reporter.addBold("Результат итерации: N1=%s, N2=%s<br>"%(hex(N1), hex(N2)))
    mess = cryptBlocks.concat(N1, N2, 32)
    if makeReport:
        reporter.addBold("Шифрованное сообщение "+hex(mess))
    return mess
Beispiel #2
0
def getHash(src):
    """
        Main function - calculates hash of the given blocks.
    """
    # wtf?! 256 bit, 32 byte! its amazin
    blockLength = 32
    mess = cryptBlocks.getBlocksFromString(src, blockLength)
    checksumE = 0
    # size of message modulo 2^256
    lengthL = 0
    stepH = 0
    if makeReport:
        i = 0
    for m in mess:
        if makeReport:
            i += 1
            reporter.addBold("Variables list for block N%d "%(i))
            reporter.addList(["m = "+hex(m),"H = "+hex(stepH),"L = "+hex(lengthL),"E = "+hex(checksumE)])
        stepH = stepFunction(stepH, m)
        lengthL = (lengthL + cryptBlocks.getSizeOfBlock(m))%(2**(blockLength*8))
        checksumE += (checksumE + m)%(2**(blockLength*8))
    stepH = stepFunction(stepH, lengthL)
    stepH = stepFunction(stepH, checksumE)
    return stepH