summaryrefslogtreecommitdiffstats
path: root/lib/xor.go
diff options
context:
space:
mode:
Diffstat (limited to 'lib/xor.go')
-rw-r--r--lib/xor.go30
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/xor.go b/lib/xor.go
index ae2bd12..0d1f3d7 100644
--- a/lib/xor.go
+++ b/lib/xor.go
@@ -21,3 +21,33 @@ func FixedXOR(a, b string) string {
}
return cs
}
+
+// Both 'data' and 'key' need to be plain ascii string.
+func RepeatingXOR(data, key string) string {
+ xs := ""
+ 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++ {
+ if ki == lk {
+ ki = 0
+ }
+
+ // xor a byte
+ eb := db[i] ^ dk[ki]
+
+ // append to result
+ xs += string(eb)
+
+ ki += 1
+ }
+ return xs
+}