From e285c8aa4a03b4f96b1ab36a0fd4b1a6e810ec4b Mon Sep 17 00:00:00 2001 From: siddharth Date: Sat, 19 Jun 2021 10:04:46 -0400 Subject: lib: update RepeatingXOR - Change input type to []byte. - Change retur type to []byte. - Update RepeatingXOR calls in challenge 5 an 6. --- challenge/c05.go | 12 ++++++------ challenge/c06.go | 8 ++++---- lib/xor.go | 16 +++++----------- 3 files changed, 15 insertions(+), 21 deletions(-) diff --git a/challenge/c05.go b/challenge/c05.go index a9b1682..a1413ef 100644 --- a/challenge/c05.go +++ b/challenge/c05.go @@ -10,12 +10,12 @@ import ( ) func C5() { - icebaby := `Burning 'em, if you ain't quick and nimble -I go crazy when I hear a cymbal` - key := "ICE" - es := lib.RepeatingXOR(icebaby, key) - hs := lib.AsciiStrToHexStr(es) - fmt.Printf("RepeatingXOR('%v', '%v') = %v\n", icebaby, key, hs) + icebaby := lib.StrToBytes(`Burning 'em, if you ain't quick and nimble +I go crazy when I hear a cymbal`) + key := lib.StrToBytes("ICE") + eb := lib.RepeatingXOR(icebaby, key) + hs := lib.AsciiStrToHexStr(lib.BytesToStr(eb)) + fmt.Printf("RepeatingXOR('%s', '%s') = %v\n", icebaby, key, hs) } // Output: diff --git a/challenge/c06.go b/challenge/c06.go index 589236b..5d19146 100644 --- a/challenge/c06.go +++ b/challenge/c06.go @@ -94,17 +94,17 @@ Jk8DCkkcC3hFMQIEC0EbAVIqCFZBO1IdBgZUVA4QTgUWSR4QJwwRTWM=` } // 'bs' is the data to decrypt. // 'ks' is the key size. - crack := func(bs []byte, ks int) (string, string) { + crack := func(bs []byte, ks int) ([]byte, []byte) { blocks := lib.BreakIntoBlocks(bs, ks) blocks = lib.TransposeBlocks(blocks, ks) - key := "" + key := make([]byte, 0) for i := 0; i < len(blocks); i++ { k := findKey(blocks[i]) - key += string(k) + key = append(key, k) } - return key, lib.RepeatingXOR(string(bs), key) + return key, lib.RepeatingXOR(bs, key) } // Compute keysize. diff --git a/lib/xor.go b/lib/xor.go index 7b57d82..31a4b8b 100644 --- a/lib/xor.go +++ b/lib/xor.go @@ -35,29 +35,23 @@ func FixedXORBytes(as, bs []byte) []byte { } // Both 'data' and 'key' need to be plain ascii string. -func RepeatingXOR(data, key string) string { - xs := "" +func RepeatingXOR(data, key []byte) []byte { + xs := make([]byte, 0) if len(data) < 1 || len(key) < 1 { return xs } - // data in bytes - db := []byte(data) - - // key in bytes - dk := []byte(key) - lk := len(key) - for i, ki := 0, 0; i < len(db); i++ { + for i, ki := 0, 0; i < len(data); i++ { if ki == lk { ki = 0 } // xor a byte - eb := db[i] ^ dk[ki] + eb := data[i] ^ key[ki] // append to result - xs += string(eb) + xs = append(xs, eb) ki += 1 } -- cgit v1.2.3