/* * Copyright (c) 2013-2014 Galois, Inc. * Distributed under the terms of the BSD3 license (see LICENSE file) */ module TripleDES where import DES blockEncrypt : ([64],[64],[64],[64]) -> [64] blockEncrypt (k1,k2,k3,data) = result where ex = DES.encrypt k1 data dx = DES.decrypt k2 ex result = DES.encrypt k3 dx // Test vectors from NIST 800-67 Key1, Key2, Key3 : [64] Key1 = 0x0123456789ABCDEF Key2 = 0x23456789ABCDEF01 Key3 = 0x456789ABCDEF0123 P1, P2, P3 : [64] PlainText = "The qufck brown fox jump" // Yes, that's the correct phrase.. (see the 7th letter of the phrase). // It's supposed to be "the quick..." but they made a mistake in transcribing // the ASCII into hex. [P1, P2, P3] = splitBy`{3} (join PlainText) // B.1 C1, C2, C3 : [64] C1 = 0xA826FD8CE53B855F C2 = 0xCCE21C8112256FE6 C3 = 0x68D5C05DD9B6B900 test_B1_1 = blockEncrypt (Key1, Key2, Key3, P1) == C1 test_B1_2 = blockEncrypt (Key1, Key2, Key3, P2) == C2 test_B1_3 = blockEncrypt (Key1, Key2, Key3, P3) == C3 property passesTests = [test_B1_1, test_B1_2, test_B1_3] == ~zero