From f1d760d3108cce79ab773b195005d1024b5a3fae Mon Sep 17 00:00:00 2001 From: Philip Hale Date: Thu, 5 Jul 2018 11:15:02 +0100 Subject: [PATCH 1/2] WIP --- 7.hex | 1 + 7.solution.txt | 79 +++++++++++++++++++++++ 7.txt | 64 +++++++++++++++++++ data/s1c7.solution.txt | 1 + data/s2c10.txt | 64 +++++++++++++++++++ project.clj | 1 + pw | 1 + solution.txt | 0 src/hale/cryptopals/set1/challenge7.clj | 18 ++++-- src/hale/cryptopals/set2/challenge10.clj | 81 ++++++++++++++++++++++++ 10 files changed, 303 insertions(+), 7 deletions(-) create mode 100644 7.hex create mode 100644 7.solution.txt create mode 100644 7.txt create mode 100644 data/s2c10.txt create mode 100644 pw create mode 100644 solution.txt create mode 100644 src/hale/cryptopals/set2/challenge10.clj diff --git a/7.hex b/7.hex new file mode 100644 index 0000000..ac38d2d --- /dev/null +++ b/7.hex @@ -0,0 +1 @@ +091230AADE3EB330DBAA4358F88D2A6C37B72D0CF4C22C344AEC4142D00CE530DD31B8C2303FEF7A75035BD04B3C45CE0DB93A6B8F2831B018E830D9B2E2DB734B91F5CA7D850D10406013CB20844AAD8D4ACBE1C79CCA94BB7376C9DF2B9103E6CACA8CAEC5CF8437F3FB6D77EB2D2FFF569C3CE526F028ED606C8C8E5825CDA098061AC8D7E6096DA585913F64B1B40810F668FC345B8D7B4186F870020E5BDDA3611889E0F4EC0411C37BCA38270A9A51A73AAEA762F37DE46F200E57F63644C6CDD280DBF51ABCB911EF6EBA9025A26279AB3012D324814B773F94ED81E87B27E844E93474B87A2DF16CC7C8028D6D4587A22FF9CDC442522A6F54E60BA0165794DBB8AA7C28099452060BC2C13773DC26ECA7F3F6C1707CB62CFA97DACBD9B2E106DD77431CA186ED07D3E24A8FAB2849E5F9643D51A62969F67711D6D1D6F3EBAEAD02B25CDE3129E1A368A2CE7A3AF6C43230F9A585EC6B33538A898570675D321450D51F465C04A52E8565CB0CCDE990177D1ECD22477E95BB0D51F3C222F27A24C944AA15530A38DCF5EEA672570E6532B026B69D0CFF884C32A2BEA43DE90BBF572C9B53DAD8B6666C0F548F3CFCCDBFE0157B50A8100DE3303CFF0B7455FA0EB0467072C68B39650FB45FD1CB756194AC1713B8061FF6DB4A1008290A8CAAA52412E719DC73C7015A7B6429F73B1EBE739409DD4BFC57B2FB4A9AE87CF14DE85FA47C3338CC0739F5DA39B70803A029426F1C46D0BD7D4C11878983F70B281E6351CB32B5FA2AACA925F1495B93BDC0D205D2A7CE0B6956160C1AC8EC2AE35C5D152096D3F10149CEDC270DCDD3A59386B5B92E29803ADE4BF5CEC8938608C6ED0AF496700317DC5384A162EE9EB989962CFF7CFAABD19C8AD791E3EE812F5348E24E1F3294A0E71BD7F29877D35914711CA79F037FAAD7162CFD0D2ABCD2B47929FB3E33E56EAB967ACD8F7CFD23F403A51122BF4D16EF82B3DFE07FEAB84D1C2C3B344C8CC43324BF1FED35CF1071F6FAA11CA432B3FF9A44D1CBEB807AFADD72AEE176F32C2381CF40E8140C37BE4BB11B026AE02A7192DF9E0ADC52294CCDB57327FE66CFA8F978359349F32CCCA931523834B86D84C168DFEE41870E005DCD05815DE71F53CC80285BA6A2D776BC87FB3D8B91655512437B671EB50840AEB21506AB85D0BD2651731634F14A91A40406CC69302621EE9A7B625C8236875ED769398D8D7F95CF2340B409F8424774274CE6DDDE991CE43E0343E1AECE361A08914512D91D68115D6DA038FD883CC6545C0EBD6CADE06CC0F577714F7DF7254FE7F26F8DEA1B36DCC05C674F3A929F6B2465716797FCD23473DD972353ACD68D1F6E711CA36ECB959F5B78109126E80ECA6879B5DE6D2FC0DFCEE0A6138A263768EDEC89ACA336BACD0699F539E2EFF5452778B482771714AA346F3AB740E4D62FDB91DBE30905088842FD8DB37BF90DCA2B3A16B5ED4AD723282D70F4A83C3B6E555C1D459A9BBEE27CE96CD749F4B5DA845EF08CE3D737A762C552A9CF04D88C414348C68C85A4CE4C26AA26283DEFADB8C2FEFD5116C282CCB3C1A0BB61746D6D3B2D6C5B8414179EDEE5BB077C57C3BDA6CA6336052DAE3D0E4D23099A71B86D6BC682450106A88674EFC62BACE9592236ABDE56D30A8E68EA76DB0EAF5BBE2962AD61BF4A058836E737A569790AC711720410369EE82C182B4A4424BFD02365872F8AC9EBF3D4F18E8C413B463DDE3829E13D782E7570590571DE5DDDE92D7096C72275579A336E04FC9B52F24F5702F812A0A0A3CA2AAC6B004CCD271708844293A9EA5FC65A254DEB6742DE38C4D4C3A302E1D0BE698F52AC2BCD42E6F5F6605DB495303813AA19D7DDE48A2A42468BE837CE926A67B02B393EE2DB19905585A8792FCEC863BAFA4C1D55ECA6E85C7F0F64861CD7395E98C646534A3BF9EB716561E0A5D797E896C922CDE2940CD8AB0FC7CFAE67A3B794C5C0E0D5A39AC5E9AE3EA9D8446856E8FBE365BC00B5F40F9687E10748D31EDE5B465CC5D7BAE7F6AFFAC3395CD6CB29DB199E1735E8C5F7E910B00157AFB28F781F43F6F1201F4D5A37592B4F115FDAE39BD09C06545079366B0FAED26105AA4694F9B7BCDC5439F1D6CED97DF2C15A6FEF5CB7CFCCC69060427811FA1DB92BAD8EC857BD1F954113ECD9359C17B3AC684E1CB1E74A50616EA3D0D87C5207143360FB53F2AE5589D09FD7D0F76E02E099FAE412B0CFDEC7FBDF5E9E99DFD9E0AB87B1517A0FB4022A69FAC331DF12B80B7211987263D57D2E9DAA3500DB97A248DFD6C3CFEEA90E68C9DA3967A4C09ECD12BCF5C1B5D48AA2516BC83F11E3A224F582E1F5BA4E2C4363DCD49E338C936C660A090DC3C16DFB2CE2402A509BD0C856F35AC861B55780BF776683050434884D2BF7AB8E9830D812116B2CD8C34D358C0205E5CEEB620DFCA3AC7761D02D537777429BB01B9C437CE0F1CDF2F7C84290AF8F02FCAAB123CEEE1B0CA0E87E6073601C2D4F4962DE50A031680BB3C5C5C137455A9CEFF526F49B3D5FD532AE21237ED5ADF3AFED1321BB17DB561B118D119A3730EC9DC17FFB8EDC28C50139C9B1635A776A2E9F035779DA2D0B21FC5CFC2674D81EF391EF6BEE8B0FF1E43E4F16E5D5D1A495BE6C395A76F4F6AFC1A304B5E16CE81C7E9E91A59B87BF31972A67FCBFCCFA7208117D4E9774DA54EA88C6F5D9DAC8E6F3AC51CF411DA0715FBA949E91D0542C2AA9B71A45A41B21645BDAB941FC133EF003BC232FAE465656747FBE14ECC255BBD4B0B19760B0B9A7B10BEBE67DA88CD34112FFAA286DB0A5461399645A45CE440A550D7E1CE1F220DD1C8B25E9E74E7B039146B36205ACB5342CE57F3D5C8FA56561841433D6C3132AABC0EE34D1740DA6814EC68E1FC5475DF801E60818476F2091F35FC2E8B4131B625006F8F2906E299A8AA760FC43C9E882106F8914798FD482FE8E081D8D684B5906ADB25AD6C6E112125DCF12CAC090C17B82DD1D04B8275AC735726CE7B46D6B957562FC7B364C053747112631258316E6D28AF2D64AA663FD77C65B05693FA7EC9EC7F1A58DDDDE1FDF4F10EEED4F0675D685450849FB464E771EA7449516DEEEB19E11F799855193CF0432DA44A4AAD22167D7A6180350F6747F86A04737A1927F6FB730A636316741BD3FB219EA4E1E0CA3FF28A2699BB014D428F612EFFD684028B5D900018C90EDF8BC946A7FB88B0BC28B4934214207BE4DB5DFCD6F0B48B1603671CD8EB8FB1C7F44D203FA2A65833ABD3C36608DCF0BEE3320FB6FA6AF13D2E7A7BBD66E44DB3B9F67877E9C58C883E7470FF4A134FCD5A578B3455504473B4BB9A93C02C6A1DFFCAFC0EAC7D6628430C182D7FEAA7EF6548052C91F9574129D27D8AFC56ECD1596310D20DF1C8E408A746F1A06779F121213755EC25635DC8AF43A79F91B39009F91F7305A9681142F2D0FFCDE6D7144F89B215B5E83E045973274A6FFD1DC1B01EFB65023D38AF0AD9E6D46F0207F5211F3792AAA24EFA9F10D723EDD742170B4D66B40AEC4261801E53AF5B4115C6FD2273D1B52DCA62D7981E5DC7591F6DF04D98184F081AB4B5B1089BC5A2BF0B490A6EA22B2A99E9C2DA0E2EC64F35B3F0E8ADA3A64A3D35E640C7B3D81666A64780F9D0AB738042D071A12C8B9682CED320EDFA7598AEA28F230A2112B034A2181DA8114552CD8102E0FD64CACC655B5B0ABA910690C80AF0402517A38B91B72CC631A29B4C6E1D9ECD4E141D60ECD0A23DBEACD65BF4FE51C5005E87C28615FC53D22FFA62AF1C834816FF151440DCF21F9AF19F3141855569724BBF8EEF7979A08247C6E689AD1E047A7CC0BB802FA5AE5DF95BA261B335D1A2DA55E8153EF167E2908FE14FCD6DBC383930855F61CA9961225410743B727DC705D6A7137556BE420E2EF916A361C580A381227358E503DF86357407DC8F9ED520D9905445B273C4DC87CBE0F4C9C718239F3A346AA74546C804B5E40543D904B557A7E1462989495C93E90B866FCB4A46C97637E6B65F37B7EAF80C870ED72BBCE1FFF8C2D87 \ No newline at end of file diff --git a/7.solution.txt b/7.solution.txt new file mode 100644 index 0000000..14283df --- /dev/null +++ b/7.solution.txt @@ -0,0 +1,79 @@ +I'm back and I'm ringin' the bell +A rockin' on the mike while the fly girls yell +In ecstasy in the back of me +Well that's my DJ Deshay cuttin' all them Z's +Hittin' hard and the girlies goin' crazy +Vanilla's on the mike, man I'm not lazy. + +I'm lettin' my drug kick in +It controls my mouth and I begin +To just let it flow, let my concepts go +My posse's to the side yellin', Go Vanilla Go! + +Smooth 'cause that's the way I will be +And if you don't give a damn, then +Why you starin' at me +So get off 'cause I control the stage +There's no dissin' allowed +I'm in my own phase +The girlies sa y they love me and that is ok +And I can dance better than any kid n' play + +Stage 2 -- Yea the one ya' wanna listen to +It's off my head so let the beat play through +So I can funk it up and make it sound good +1-2-3 Yo -- Knock on some wood +For good luck, I like my rhymes atrocious +Supercalafragilisticexpialidocious +I'm an effect and that you can bet +I can take a fly girl and make her wet. + +I'm like Samson -- Samson to Delilah +There's no denyin', You can try to hang +But you'll keep tryin' to get my style +Over and over, practice makes perfect +But not if you're a loafer. + +You'll get nowhere, no place, no time, no girls +Soon -- Oh my God, homebody, you probably eat +Spaghetti with a spoon! Come on and say it! + +VIP. Vanilla Ice yep, yep, I'm comin' hard like a rhino +Intoxicating so you stagger like a wino +So punks stop trying and girl stop cryin' +Vanilla Ice is sellin' and you people are buyin' +'Cause why the freaks are jockin' like Crazy Glue +Movin' and groovin' trying to sing along +All through the ghetto groovin' this here song +Now you're amazed by the VIP posse. + +Steppin' so hard like a German Nazi +Startled by the bases hittin' ground +There's no trippin' on mine, I'm just gettin' down +Sparkamatic, I'm hangin' tight like a fanatic +You trapped me once and I thought that +You might have it +So step down and lend me your ear +'89 in my time! You, '90 is my year. + +You're weakenin' fast, YO! and I can tell it +Your body's gettin' hot, so, so I can smell it +So don't be mad and don't be sad +'Cause the lyrics belong to ICE, You can call me Dad +You're pitchin' a fit, so step back and endure +Let the witch doctor, Ice, do the dance to cure +So come up close and don't be square +You wanna battle me -- Anytime, anywhere + +You thought that I was weak, Boy, you're dead wrong +So come on, everybody and sing this song + +Say -- Play that funky music Say, go white boy, go white boy go +play that funky music Go white boy, go white boy, go +Lay down and boogie and play that funky music till you die. + +Play that funky music Come on, Come on, let me hear +Play that funky music white boy you say it, say it +Play that funky music A little louder now +Play that funky music, white boy Come on, Come on, Come on +Play that funky music diff --git a/7.txt b/7.txt new file mode 100644 index 0000000..c02ff8a --- /dev/null +++ b/7.txt @@ -0,0 +1,64 @@ +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 diff --git a/data/s1c7.solution.txt b/data/s1c7.solution.txt index 14283df..534ae8b 100644 --- a/data/s1c7.solution.txt +++ b/data/s1c7.solution.txt @@ -77,3 +77,4 @@ Play that funky music white boy you say it, say it Play that funky music A little louder now Play that funky music, white boy Come on, Come on, Come on Play that funky music + \ No newline at end of file diff --git a/data/s2c10.txt b/data/s2c10.txt new file mode 100644 index 0000000..f0802a5 --- /dev/null +++ b/data/s2c10.txt @@ -0,0 +1,64 @@ +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 diff --git a/project.clj b/project.clj index b8c3fa7..9160f64 100644 --- a/project.clj +++ b/project.clj @@ -46,4 +46,5 @@ built, but you'll also understand how they're attacked. "src/hale/cryptopals/set1/challenge8.clj" "src/hale/cryptopals/set2.clj" "src/hale/cryptopals/set2/challenge9.clj" + "src/hale/cryptopals/set2/challenge10.clj" "src/hale/cryptopals/utils.clj"]}) diff --git a/pw b/pw new file mode 100644 index 0000000..369bd66 --- /dev/null +++ b/pw @@ -0,0 +1 @@ +YELLOW SUBMARINE diff --git a/solution.txt b/solution.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/hale/cryptopals/set1/challenge7.clj b/src/hale/cryptopals/set1/challenge7.clj index 849572e..7eb9e8e 100644 --- a/src/hale/cryptopals/set1/challenge7.clj +++ b/src/hale/cryptopals/set1/challenge7.clj @@ -25,25 +25,29 @@ [javax.crypto.spec SecretKeySpec])) - (defn decrypt-aes-ecb - [byte-stream key] + [key byte-stream] (let [key-spec (SecretKeySpec. (.getBytes key) "AES") - cipher (Cipher/getInstance "AES/ECB/PKCS5Padding") + cipher (Cipher/getInstance "AES/ECB/NoPadding") _ (.init cipher (int Cipher/DECRYPT_MODE) key-spec) + _ (println (count byte-stream)) decrypted (.doFinal cipher (byte-array byte-stream))] decrypted)) -(defn decrypt-aes-ecb-base64 [b64 key] - (decrypt-aes-ecb (base64/base64-decode b64) key)) +(defn decrypt-aes-ecb-base64 [key b64] + (decrypt-aes-ecb key (base64/base64-decode b64))) (def decrypt-aes-ecb-base64-to-str "Decrypt AES in ECB mode" (comp utils/bytes-to-str decrypt-aes-ecb-base64)) -(t/deftest decrypt-aes-in-ecb-mode +;; TODO: why does this return ^D^D^D^D at the end? the same is NOT returned by openssl: +;; +;; openssl enc -d -a -aes-128-ecb -in 7.txt -v -K $(echo -n "YELLOW SUBMARINE" | hexdump -v -e '/1 "%02X"') -out 7.solution.txt +;; +(t/deftest test-decrypt-aes-ecb (let [key "YELLOW SUBMARINE" ciphertext (slurp "data/s1c7.txt") plaintext (slurp "data/s1c7.solution.txt")] - (t/is (= (decrypt-aes-ecb-base64-to-str ciphertext key) plaintext)))) + (t/is (= plaintext (decrypt-aes-ecb-base64-to-str key ciphertext))))) diff --git a/src/hale/cryptopals/set2/challenge10.clj b/src/hale/cryptopals/set2/challenge10.clj new file mode 100644 index 0000000..446eeb4 --- /dev/null +++ b/src/hale/cryptopals/set2/challenge10.clj @@ -0,0 +1,81 @@ +;; +;; # Implement CBC mode +;; +;; CBC mode is a block cipher mode that allows us to encrypt irregularly-sized +;; messages, despite the fact that a block cipher natively only transforms +;; individual blocks. +;; +;; In CBC mode, each ciphertext block is added to the next plaintext block +;; before the next call to the cipher core. +;; +;; The first plaintext block, which has no associated previous ciphertext block, +;; is added to a "fake 0th ciphertext block" called the initialization vector, +;; or IV. +;; +;; Implement CBC mode by hand by taking the ECB function you wrote earlier, +;; making it encrypt instead of decrypt (verify this by decrypting whatever you +;; encrypt to test), and using your XOR function from the previous exercise to +;; combine them. +;; +;; The file here is intelligible (somewhat) when CBC decrypted against "YELLOW +;; SUBMARINE" with an IV of all ASCII 0 (\x00\x00\x00 &c) +;; +;;
+(ns hale.cryptopals.set2.challenge10 + (:require [hale.cryptopals.utils :as utils] + [hale.cryptopals.set1.challenge1 :as base64] + [hale.cryptopals.set1.challenge7 :refer [decrypt-aes-ecb-base64-to-str]] + [clojure.test :as t]) + (:import [javax.crypto Cipher] + [javax.crypto.spec SecretKeySpec])) + + + +(defn encrypt-aes-ecb + [key bs] + (let [key-spec (SecretKeySpec. (.getBytes key) "AES") + cipher (Cipher/getInstance "AES/ECB/NoPadding") + _ (.init cipher (int Cipher/ENCRYPT_MODE) key-spec) + encrypted (.doFinal cipher (byte-array bs))] + encrypted)) + +(defn encrypt-aes-ecb-str-to-base64 + [key str] + (->> str + utils/str-to-bytes + ((partial encrypt-aes-ecb key)) + base64/base64-encode)) + +;; (let [key "ICEICEBABY123456" +;; plaintext "YELLOW SUBMARINE" +;; encrypted (encrypt-aes-ecb-str-to-base64 key plaintext) +;; _ (println encrypted) +;; _ (println (count encrypted)) +;; decrypted (decrypt-aes-ecb-base64-to-str key encrypted) +;; ]) + +;; (decrypt-aes-ecb-base64-to-str encrypted key) + +(t/deftest encrypt-aes-in-ecb-mode + (let [key "YELLOW SUBMARINE" + ciphertext (slurp "data/s1c7.txt") + plaintext (slurp "data/s1c7.solution.txt")] + (t/is (= (encrypt-aes-ecb-str-to-base64 key plaintext) ciphertext)))) + + + +;; I found this image on Wikipedia helpful for understanding how CBC encryption works: +;; +;; +;; +;; So we need a function that takes an IV + plaintext and returns ciphertext. + + +(defn encrypt-aes-ecb + "bs -- bytestream input plaintext + iv -- initialization vector + blocks -- number of bytes per block" + [bs iv blocks]) + + +(def input (base64/base64-decode (slurp "data/s2c10.txt"))) From 2208453a04582de21748008b6cc0f44d97e960da Mon Sep 17 00:00:00 2001 From: Philip Hale Date: Thu, 5 Jul 2018 11:19:47 +0100 Subject: [PATCH 2/2] wip --- 7.hex | 1 - 7.solution.txt | 79 ------------------------------------------ data/s1c7.solution.txt | 1 - pw | 1 - 4 files changed, 82 deletions(-) delete mode 100644 7.hex delete mode 100644 7.solution.txt delete mode 100644 pw diff --git a/7.hex b/7.hex deleted file mode 100644 index ac38d2d..0000000 --- a/7.hex +++ /dev/null @@ -1 +0,0 @@ -091230AADE3EB330DBAA4358F88D2A6C37B72D0CF4C22C344AEC4142D00CE530DD31B8C2303FEF7A75035BD04B3C45CE0DB93A6B8F2831B018E830D9B2E2DB734B91F5CA7D850D10406013CB20844AAD8D4ACBE1C79CCA94BB7376C9DF2B9103E6CACA8CAEC5CF8437F3FB6D77EB2D2FFF569C3CE526F028ED606C8C8E5825CDA098061AC8D7E6096DA585913F64B1B40810F668FC345B8D7B4186F870020E5BDDA3611889E0F4EC0411C37BCA38270A9A51A73AAEA762F37DE46F200E57F63644C6CDD280DBF51ABCB911EF6EBA9025A26279AB3012D324814B773F94ED81E87B27E844E93474B87A2DF16CC7C8028D6D4587A22FF9CDC442522A6F54E60BA0165794DBB8AA7C28099452060BC2C13773DC26ECA7F3F6C1707CB62CFA97DACBD9B2E106DD77431CA186ED07D3E24A8FAB2849E5F9643D51A62969F67711D6D1D6F3EBAEAD02B25CDE3129E1A368A2CE7A3AF6C43230F9A585EC6B33538A898570675D321450D51F465C04A52E8565CB0CCDE990177D1ECD22477E95BB0D51F3C222F27A24C944AA15530A38DCF5EEA672570E6532B026B69D0CFF884C32A2BEA43DE90BBF572C9B53DAD8B6666C0F548F3CFCCDBFE0157B50A8100DE3303CFF0B7455FA0EB0467072C68B39650FB45FD1CB756194AC1713B8061FF6DB4A1008290A8CAAA52412E719DC73C7015A7B6429F73B1EBE739409DD4BFC57B2FB4A9AE87CF14DE85FA47C3338CC0739F5DA39B70803A029426F1C46D0BD7D4C11878983F70B281E6351CB32B5FA2AACA925F1495B93BDC0D205D2A7CE0B6956160C1AC8EC2AE35C5D152096D3F10149CEDC270DCDD3A59386B5B92E29803ADE4BF5CEC8938608C6ED0AF496700317DC5384A162EE9EB989962CFF7CFAABD19C8AD791E3EE812F5348E24E1F3294A0E71BD7F29877D35914711CA79F037FAAD7162CFD0D2ABCD2B47929FB3E33E56EAB967ACD8F7CFD23F403A51122BF4D16EF82B3DFE07FEAB84D1C2C3B344C8CC43324BF1FED35CF1071F6FAA11CA432B3FF9A44D1CBEB807AFADD72AEE176F32C2381CF40E8140C37BE4BB11B026AE02A7192DF9E0ADC52294CCDB57327FE66CFA8F978359349F32CCCA931523834B86D84C168DFEE41870E005DCD05815DE71F53CC80285BA6A2D776BC87FB3D8B91655512437B671EB50840AEB21506AB85D0BD2651731634F14A91A40406CC69302621EE9A7B625C8236875ED769398D8D7F95CF2340B409F8424774274CE6DDDE991CE43E0343E1AECE361A08914512D91D68115D6DA038FD883CC6545C0EBD6CADE06CC0F577714F7DF7254FE7F26F8DEA1B36DCC05C674F3A929F6B2465716797FCD23473DD972353ACD68D1F6E711CA36ECB959F5B78109126E80ECA6879B5DE6D2FC0DFCEE0A6138A263768EDEC89ACA336BACD0699F539E2EFF5452778B482771714AA346F3AB740E4D62FDB91DBE30905088842FD8DB37BF90DCA2B3A16B5ED4AD723282D70F4A83C3B6E555C1D459A9BBEE27CE96CD749F4B5DA845EF08CE3D737A762C552A9CF04D88C414348C68C85A4CE4C26AA26283DEFADB8C2FEFD5116C282CCB3C1A0BB61746D6D3B2D6C5B8414179EDEE5BB077C57C3BDA6CA6336052DAE3D0E4D23099A71B86D6BC682450106A88674EFC62BACE9592236ABDE56D30A8E68EA76DB0EAF5BBE2962AD61BF4A058836E737A569790AC711720410369EE82C182B4A4424BFD02365872F8AC9EBF3D4F18E8C413B463DDE3829E13D782E7570590571DE5DDDE92D7096C72275579A336E04FC9B52F24F5702F812A0A0A3CA2AAC6B004CCD271708844293A9EA5FC65A254DEB6742DE38C4D4C3A302E1D0BE698F52AC2BCD42E6F5F6605DB495303813AA19D7DDE48A2A42468BE837CE926A67B02B393EE2DB19905585A8792FCEC863BAFA4C1D55ECA6E85C7F0F64861CD7395E98C646534A3BF9EB716561E0A5D797E896C922CDE2940CD8AB0FC7CFAE67A3B794C5C0E0D5A39AC5E9AE3EA9D8446856E8FBE365BC00B5F40F9687E10748D31EDE5B465CC5D7BAE7F6AFFAC3395CD6CB29DB199E1735E8C5F7E910B00157AFB28F781F43F6F1201F4D5A37592B4F115FDAE39BD09C06545079366B0FAED26105AA4694F9B7BCDC5439F1D6CED97DF2C15A6FEF5CB7CFCCC69060427811FA1DB92BAD8EC857BD1F954113ECD9359C17B3AC684E1CB1E74A50616EA3D0D87C5207143360FB53F2AE5589D09FD7D0F76E02E099FAE412B0CFDEC7FBDF5E9E99DFD9E0AB87B1517A0FB4022A69FAC331DF12B80B7211987263D57D2E9DAA3500DB97A248DFD6C3CFEEA90E68C9DA3967A4C09ECD12BCF5C1B5D48AA2516BC83F11E3A224F582E1F5BA4E2C4363DCD49E338C936C660A090DC3C16DFB2CE2402A509BD0C856F35AC861B55780BF776683050434884D2BF7AB8E9830D812116B2CD8C34D358C0205E5CEEB620DFCA3AC7761D02D537777429BB01B9C437CE0F1CDF2F7C84290AF8F02FCAAB123CEEE1B0CA0E87E6073601C2D4F4962DE50A031680BB3C5C5C137455A9CEFF526F49B3D5FD532AE21237ED5ADF3AFED1321BB17DB561B118D119A3730EC9DC17FFB8EDC28C50139C9B1635A776A2E9F035779DA2D0B21FC5CFC2674D81EF391EF6BEE8B0FF1E43E4F16E5D5D1A495BE6C395A76F4F6AFC1A304B5E16CE81C7E9E91A59B87BF31972A67FCBFCCFA7208117D4E9774DA54EA88C6F5D9DAC8E6F3AC51CF411DA0715FBA949E91D0542C2AA9B71A45A41B21645BDAB941FC133EF003BC232FAE465656747FBE14ECC255BBD4B0B19760B0B9A7B10BEBE67DA88CD34112FFAA286DB0A5461399645A45CE440A550D7E1CE1F220DD1C8B25E9E74E7B039146B36205ACB5342CE57F3D5C8FA56561841433D6C3132AABC0EE34D1740DA6814EC68E1FC5475DF801E60818476F2091F35FC2E8B4131B625006F8F2906E299A8AA760FC43C9E882106F8914798FD482FE8E081D8D684B5906ADB25AD6C6E112125DCF12CAC090C17B82DD1D04B8275AC735726CE7B46D6B957562FC7B364C053747112631258316E6D28AF2D64AA663FD77C65B05693FA7EC9EC7F1A58DDDDE1FDF4F10EEED4F0675D685450849FB464E771EA7449516DEEEB19E11F799855193CF0432DA44A4AAD22167D7A6180350F6747F86A04737A1927F6FB730A636316741BD3FB219EA4E1E0CA3FF28A2699BB014D428F612EFFD684028B5D900018C90EDF8BC946A7FB88B0BC28B4934214207BE4DB5DFCD6F0B48B1603671CD8EB8FB1C7F44D203FA2A65833ABD3C36608DCF0BEE3320FB6FA6AF13D2E7A7BBD66E44DB3B9F67877E9C58C883E7470FF4A134FCD5A578B3455504473B4BB9A93C02C6A1DFFCAFC0EAC7D6628430C182D7FEAA7EF6548052C91F9574129D27D8AFC56ECD1596310D20DF1C8E408A746F1A06779F121213755EC25635DC8AF43A79F91B39009F91F7305A9681142F2D0FFCDE6D7144F89B215B5E83E045973274A6FFD1DC1B01EFB65023D38AF0AD9E6D46F0207F5211F3792AAA24EFA9F10D723EDD742170B4D66B40AEC4261801E53AF5B4115C6FD2273D1B52DCA62D7981E5DC7591F6DF04D98184F081AB4B5B1089BC5A2BF0B490A6EA22B2A99E9C2DA0E2EC64F35B3F0E8ADA3A64A3D35E640C7B3D81666A64780F9D0AB738042D071A12C8B9682CED320EDFA7598AEA28F230A2112B034A2181DA8114552CD8102E0FD64CACC655B5B0ABA910690C80AF0402517A38B91B72CC631A29B4C6E1D9ECD4E141D60ECD0A23DBEACD65BF4FE51C5005E87C28615FC53D22FFA62AF1C834816FF151440DCF21F9AF19F3141855569724BBF8EEF7979A08247C6E689AD1E047A7CC0BB802FA5AE5DF95BA261B335D1A2DA55E8153EF167E2908FE14FCD6DBC383930855F61CA9961225410743B727DC705D6A7137556BE420E2EF916A361C580A381227358E503DF86357407DC8F9ED520D9905445B273C4DC87CBE0F4C9C718239F3A346AA74546C804B5E40543D904B557A7E1462989495C93E90B866FCB4A46C97637E6B65F37B7EAF80C870ED72BBCE1FFF8C2D87 \ No newline at end of file diff --git a/7.solution.txt b/7.solution.txt deleted file mode 100644 index 14283df..0000000 --- a/7.solution.txt +++ /dev/null @@ -1,79 +0,0 @@ -I'm back and I'm ringin' the bell -A rockin' on the mike while the fly girls yell -In ecstasy in the back of me -Well that's my DJ Deshay cuttin' all them Z's -Hittin' hard and the girlies goin' crazy -Vanilla's on the mike, man I'm not lazy. - -I'm lettin' my drug kick in -It controls my mouth and I begin -To just let it flow, let my concepts go -My posse's to the side yellin', Go Vanilla Go! - -Smooth 'cause that's the way I will be -And if you don't give a damn, then -Why you starin' at me -So get off 'cause I control the stage -There's no dissin' allowed -I'm in my own phase -The girlies sa y they love me and that is ok -And I can dance better than any kid n' play - -Stage 2 -- Yea the one ya' wanna listen to -It's off my head so let the beat play through -So I can funk it up and make it sound good -1-2-3 Yo -- Knock on some wood -For good luck, I like my rhymes atrocious -Supercalafragilisticexpialidocious -I'm an effect and that you can bet -I can take a fly girl and make her wet. - -I'm like Samson -- Samson to Delilah -There's no denyin', You can try to hang -But you'll keep tryin' to get my style -Over and over, practice makes perfect -But not if you're a loafer. - -You'll get nowhere, no place, no time, no girls -Soon -- Oh my God, homebody, you probably eat -Spaghetti with a spoon! Come on and say it! - -VIP. Vanilla Ice yep, yep, I'm comin' hard like a rhino -Intoxicating so you stagger like a wino -So punks stop trying and girl stop cryin' -Vanilla Ice is sellin' and you people are buyin' -'Cause why the freaks are jockin' like Crazy Glue -Movin' and groovin' trying to sing along -All through the ghetto groovin' this here song -Now you're amazed by the VIP posse. - -Steppin' so hard like a German Nazi -Startled by the bases hittin' ground -There's no trippin' on mine, I'm just gettin' down -Sparkamatic, I'm hangin' tight like a fanatic -You trapped me once and I thought that -You might have it -So step down and lend me your ear -'89 in my time! You, '90 is my year. - -You're weakenin' fast, YO! and I can tell it -Your body's gettin' hot, so, so I can smell it -So don't be mad and don't be sad -'Cause the lyrics belong to ICE, You can call me Dad -You're pitchin' a fit, so step back and endure -Let the witch doctor, Ice, do the dance to cure -So come up close and don't be square -You wanna battle me -- Anytime, anywhere - -You thought that I was weak, Boy, you're dead wrong -So come on, everybody and sing this song - -Say -- Play that funky music Say, go white boy, go white boy go -play that funky music Go white boy, go white boy, go -Lay down and boogie and play that funky music till you die. - -Play that funky music Come on, Come on, let me hear -Play that funky music white boy you say it, say it -Play that funky music A little louder now -Play that funky music, white boy Come on, Come on, Come on -Play that funky music diff --git a/data/s1c7.solution.txt b/data/s1c7.solution.txt index 534ae8b..14283df 100644 --- a/data/s1c7.solution.txt +++ b/data/s1c7.solution.txt @@ -77,4 +77,3 @@ Play that funky music white boy you say it, say it Play that funky music A little louder now Play that funky music, white boy Come on, Come on, Come on Play that funky music - \ No newline at end of file diff --git a/pw b/pw deleted file mode 100644 index 369bd66..0000000 --- a/pw +++ /dev/null @@ -1 +0,0 @@ -YELLOW SUBMARINE