From 708c0c523df97d1542b7b6d128c5218f6e2cc460 Mon Sep 17 00:00:00 2001 From: iximeow Date: Fri, 21 Nov 2014 00:48:10 -0800 Subject: Move things around a bit --- src/utils/ConversionUtils.scala | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/utils/ConversionUtils.scala (limited to 'src/utils/ConversionUtils.scala') diff --git a/src/utils/ConversionUtils.scala b/src/utils/ConversionUtils.scala new file mode 100644 index 0000000..26f2d24 --- /dev/null +++ b/src/utils/ConversionUtils.scala @@ -0,0 +1,38 @@ +package ixee.cryptopals.utils + +import ByteUtils.WithBitOpts + +object ConversionUtils { + def hexStr2Bytes(s: String): Iterator[Byte] = + padToByte(s).grouped(2).map(byteStr2Byte) + + def byteStr2Byte(str: String): Byte = + charSeq2Byte(str.toSeq) + + def charSeq2Byte(seq: Seq[Char]): Byte = + seq.map(octet2nibble).reduce(joinNibbles) + + def joinNibbles(a: Byte, b: Byte): Byte = + ((a @<< 4) @+ b) + + def padToByte(s: String): String = + if (s.length % 2 != 0) "0" + s else s + + def octet2nibble(c: Char): Byte = { + (c.toLower match { + case c if c >= 'a' && c <= 'f' => + (c - 'a') + 10.toByte + case c if c >= '0' && c <= '9' => + c - '0' + case _ => + throw new IllegalArgumentException(s"Invalid hexadecimal character: $c") + }).toByte + } + + def hexStr2Base64String(s: String): String = { + import io.github.marklister.base64.Base64._ + + hexStr2Bytes(s).toArray.toBase64 + } +} + -- cgit v1.1