make Sha256 own Class

This commit is contained in:
CodeSteak 2019-06-03 15:33:41 +02:00
parent 7f8277415e
commit 73fd94e314
2 changed files with 43 additions and 17 deletions

View File

@ -2,6 +2,7 @@ package org.hso.texturesyncclient.controller.net
// These types will be converted to the model.DataModel // These types will be converted to the model.DataModel
import org.hso.texturesyncclient.model.Sha256
import org.hso.texturesyncclient.model.Texture import org.hso.texturesyncclient.model.Texture
import org.hso.texturesyncclient.model.TextureFormat import org.hso.texturesyncclient.model.TextureFormat
import java.lang.Exception import java.lang.Exception
@ -32,7 +33,7 @@ internal data class InternalTexture(
tex.addedOn.get(Calendar.MONTH), // tex.addedOn.get(Calendar.MONTH), //
tex.addedOn.get(Calendar.DAY_OF_MONTH) tex.addedOn.get(Calendar.DAY_OF_MONTH)
), ),
texture_hash = bytes2hexString(tex.textureHash) texture_hash = tex.textureHash.toString()
) )
@Throws(ConnectionException::class) @Throws(ConnectionException::class)
@ -50,24 +51,10 @@ internal data class InternalTexture(
}, },
resolution = Pair(resolution[0], resolution[1]), resolution = Pair(resolution[0], resolution[1]),
addedOn = GregorianCalendar(added_on[0], added_on[1], added_on[2]), addedOn = GregorianCalendar(added_on[0], added_on[1], added_on[2]),
textureHash = hexString2Bytes(texture_hash) textureHash = Sha256(texture_hash)
) )
} catch (e: Exception) { // i Know, but no time :[] } catch (e: Exception) { // i Know, but no time :[]
throw ConnectionInvalidJsonException() throw ConnectionInvalidJsonException()
} }
} }
}
private fun bytes2hexString(bytes: ByteArray): String {
val s = StringBuilder(64)
for (byte in bytes) {
s.append(String.format("%02X"), byte)
}
return s.toString()
}
private fun hexString2Bytes(bytes: String): ByteArray {
return ByteArray(bytes.length / 2) { i ->
bytes.substring(i * 2, i * 2 + 2).toInt(16).toByte()
}
} }

View File

@ -1,6 +1,10 @@
package org.hso.texturesyncclient.model package org.hso.texturesyncclient.model
import java.lang.IllegalArgumentException
import java.util.* import java.util.*
import java.security.MessageDigest
class DataModel class DataModel
@ -16,5 +20,40 @@ data class Texture(
val format : TextureFormat, val format : TextureFormat,
val resolution : Pair<Int, Int>, val resolution : Pair<Int, Int>,
val addedOn : Calendar, val addedOn : Calendar,
val textureHash : ByteArray val textureHash : Sha256
) )
@Suppress("ArrayInDataClass")
class Sha256 {
private val hashBytes : ByteArray
@Throws(IllegalArgumentException::class)
constructor(hex : String) {
if(hex.length != 64) {
throw IllegalArgumentException("Sha256 has wrong length.")
}
try {
hashBytes = ByteArray(hex.length / 2) { i ->
hex.substring(i * 2, i * 2 + 2).toInt(16).toByte()
}
}catch(n : NumberFormatException) {
throw IllegalArgumentException("Hash does not only Contain '0-9a-zA-Z'.")
}
}
constructor(data : ByteArray ) {
val digest = MessageDigest.getInstance("SHA-256")
hashBytes = digest.digest(data)
}
override fun toString(): String {
val s = StringBuilder(64)
for (byte in hashBytes) {
s.append(String.format("%02X"), byte)
}
return s.toString()
}
}