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> </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
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