use commons-codec Hex instead of BC Hex

pull/20/head
cfig 7 years ago
parent f21e851abd
commit 02be1f4b9e
No known key found for this signature in database
GPG Key ID: B104C307F0FDABB7

@ -43,12 +43,13 @@ dependencies {
compile("com.fasterxml.jackson.core:jackson-databind:2.9.4")
compile("org.apache.commons:commons-exec:1.3")
compile("org.apache.commons:commons-compress:1.16.1")
compile("commons-codec:commons-codec:1.11")
compile("junit:junit:4.12")
//compile("org.bouncycastle:bcprov-jdk15on:1.59")
compile("org.nd4j:nd4j-api:0.9.1")
//compile("org.nd4j:nd4j-api:0.9.1")
compile("com.google.guava:guava:18.0")
compile project(':bouncycastle:bcpkix')
compile project(':bouncycastle:bcprov')
compile project(":bouncycastle:bcpkix")
compile project(":bouncycastle:bcprov")
}
mainClassName = "cfig.RKt"

@ -2,7 +2,6 @@ package cfig
import avb.*
import avb.desc.*
import org.bouncycastle.util.encoders.Hex
/*
a wonderfaul base64 encoder/decoder: https://cryptii.com/base64-to-hex

@ -5,7 +5,7 @@ import avb.alg.Algorithms
import avb.desc.*
import cfig.io.Struct
import com.fasterxml.jackson.databind.ObjectMapper
import org.bouncycastle.util.encoders.Hex
import org.apache.commons.codec.binary.Hex
import org.slf4j.LoggerFactory
import java.io.*
import java.nio.file.Files
@ -79,7 +79,7 @@ class Avb {
hd.flags = 0
if (do_not_use_ab) hd.flags = hd.flags or 1
if (!use_persistent_digest) hd.digest = digest
log.info("encoded hash descriptor:" + String(Hex.encode(hd.encode())))
log.info("encoded hash descriptor:" + Hex.encodeHexString(hd.encode()))
val vbmeta_blob = generateVbMetaBlob(common_algorithm,
common_key_path,
null,
@ -260,7 +260,7 @@ class Avb {
fis.skip(vbMetaHeader.public_key_offset)
ai.auxBlob!!.pubkey!!.pubkey = ByteArray(vbMetaHeader.public_key_size.toInt())
fis.read(ai.auxBlob!!.pubkey!!.pubkey)
log.debug("Parsed Pub Key: " + String(Hex.encode(ai.auxBlob!!.pubkey!!.pubkey)))
log.debug("Parsed Pub Key: " + Hex.encodeHexString(ai.auxBlob!!.pubkey!!.pubkey))
}
}
@ -271,7 +271,7 @@ class Avb {
fis.skip(vbMetaHeader.public_key_metadata_offset)
val ba = ByteArray(vbMetaHeader.public_key_metadata_size.toInt())
fis.read(ba)
log.debug("Parsed Pub Key Metadata: " + String(Hex.encode(ba)))
log.debug("Parsed Pub Key Metadata: " + Hex.encodeHexString(ba))
}
}
@ -282,16 +282,16 @@ class Avb {
fis.skip(vbMetaHeader.hash_offset)
val ba = ByteArray(vbMetaHeader.hash_size.toInt())
fis.read(ba)
log.debug("Parsed Auth Hash (Header & Aux Blob): " + Hex.encode(ba))
log.debug("Parsed Auth Hash (Header & Aux Blob): " + Hex.encodeHexString(ba))
val bb = ByteArray(vbMetaHeader.signature_size.toInt())
fis.read(bb)
log.debug("Parsed Auth Signature (of hash): " + String(Hex.encode(bb)))
log.debug("Parsed Auth Signature (of hash): " + Hex.encodeHexString(bb))
ai.authBlob = AVBInfo.AuthBlob()
ai.authBlob!!.offset = authBlockOffset
ai.authBlob!!.size = vbMetaHeader.authentication_data_block_size
ai.authBlob!!.hash = String(Hex.encode(ba))
ai.authBlob!!.signature = String(Hex.encode(bb))
ai.authBlob!!.hash = Hex.encodeHexString(ba)
ai.authBlob!!.signature = Hex.encodeHexString(bb)
}
}

@ -2,15 +2,14 @@ package cfig
import cfig.io.Struct
import com.google.common.math.BigIntegerMath
import org.apache.commons.codec.binary.Hex
import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream
import org.apache.commons.compress.compressors.gzip.GzipParameters
import org.apache.commons.exec.CommandLine
import org.apache.commons.exec.DefaultExecutor
import org.apache.commons.exec.ExecuteException
import org.apache.commons.exec.PumpStreamHandler
import org.bouncycastle.asn1.pkcs.PrivateKeyInfo
import org.bouncycastle.asn1.pkcs.RSAPrivateKey
import org.bouncycastle.util.encoders.Hex
import org.bouncycastle.util.io.pem.PemReader
import org.junit.Assert
import org.junit.Assert.assertTrue
@ -21,19 +20,6 @@ import java.math.RoundingMode
import java.nio.charset.StandardCharsets
import java.util.zip.GZIPInputStream
import java.util.zip.GZIPOutputStream
import javax.crypto.EncryptedPrivateKeyInfo
import java.security.spec.InvalidKeySpecException
import javax.crypto.Cipher
import javax.crypto.spec.PBEKeySpec
import javax.crypto.SecretKeyFactory
import java.io.IOException
import java.nio.file.Files
import java.nio.file.Paths
import java.security.GeneralSecurityException
import java.security.PrivateKey
import java.security.spec.PKCS8EncodedKeySpec
import java.util.*
class Helper {
companion object {
@ -205,15 +191,15 @@ class Helper {
val r = BigInteger.valueOf(2).pow(numBits)
val rrModn = (r * r).mod(rsa.modulus)
log.debug("BB: " + numBits / 8 + ", mod_len: " + rsa.modulus.toByteArray().size + ", rrmodn = " + rrModn.toByteArray().size)
val unsignedModulo = rsa.modulus.toByteArray().sliceArray(1..numBits/8) //remove sign byte
log.debug("unsigned modulo: " + String(Hex.encode(unsignedModulo)))
val unsignedModulo = rsa.modulus.toByteArray().sliceArray(1..numBits / 8) //remove sign byte
log.debug("unsigned modulo: " + Hex.encodeHexString(unsignedModulo))
val ret = Struct("!II${numBits / 8}b${numBits / 8}b").pack(
numBits,
n0inv,
unsignedModulo,
rrModn.toByteArray())
log.debug("rrmodn: " + String(Hex.encode(rrModn.toByteArray())))
log.debug("RSA: " + String(Hex.encode(ret)))
log.debug("rrmodn: " + Hex.encodeHexString(rrModn.toByteArray()))
log.debug("RSA: " + Hex.encodeHexString(ret))
return ret
}
@ -232,7 +218,7 @@ class Helper {
} catch (e: ExecuteException) {
log.error("Execute error")
} finally {
log.debug("OUT: " + String(Hex.encode(stdout.toByteArray())))
log.debug("OUT: " + Hex.encodeHexString(stdout.toByteArray()))
log.debug("ERR: " + String(stderr.toByteArray()))
}

@ -3,12 +3,12 @@ package avb
import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.databind.JsonSerializer
import com.fasterxml.jackson.databind.SerializerProvider
import org.bouncycastle.util.encoders.Hex
import org.apache.commons.codec.binary.Hex
class ByteArraySerializer: JsonSerializer<ByteArray>() {
override fun serialize(value: ByteArray?, gen: JsonGenerator?, serializers: SerializerProvider?) {
if (value != null) {
gen!!.writeString(String(Hex.encode(value!!)))
gen!!.writeString(Hex.encodeHexString(value!!))
} else {
gen!!.writeString("")
}

@ -2,7 +2,7 @@ package avb.desc
import cfig.Helper
import cfig.io.Struct
import org.bouncycastle.util.encoders.Hex
import org.apache.commons.codec.binary.Hex
import org.junit.Assert
import org.slf4j.LoggerFactory
import java.io.ByteArrayInputStream
@ -27,7 +27,7 @@ class UnknownDescriptor(var data: ByteArray = byteArrayOf()) : Descriptor(0, 0,
}
override fun toString(): String {
return "UnknownDescriptor(tag=$tag, SIZE=${data.size}, data=${Hex.toHexString(data)})"
return "UnknownDescriptor(tag=$tag, SIZE=${data.size}, data=${Hex.encodeHexString(data)}"
}
fun analyze(): Any {

@ -1,6 +1,6 @@
import avb.desc.UnknownDescriptor
import avb.desc.HashDescriptor
import org.bouncycastle.util.encoders.Hex
import org.apache.commons.codec.binary.Hex
import org.junit.Test
import org.junit.Assert.*
@ -20,8 +20,8 @@ class AvbTest {
"000000000000000000000000626f6f7428f6d60b554d9532bd45874ab0cd" +
"cb2219c4f437c9350f484fa189a881878ab6156408cd763ff119635ec9db" +
"2a9656e220fa1dc27e26e59bd3d85025b412ffc3"
val desc = UnknownDescriptor(ByteArrayInputStream(Hex.decode(descStr)))
val hashdDesc = HashDescriptor(ByteArrayInputStream(Hex.decode(descStr)))
val desc = UnknownDescriptor(ByteArrayInputStream(Hex.decodeHex(descStr)))
val hashdDesc = HashDescriptor(ByteArrayInputStream(Hex.decodeHex(descStr)))
log.info(desc.toString())
log.info(hashdDesc.toString())
val descAnalyzed = desc.analyze()

File diff suppressed because one or more lines are too long

@ -1,6 +1,6 @@
package avb
import org.bouncycastle.util.encoders.Hex
import org.apache.commons.codec.binary.Hex
import org.junit.Test
import org.junit.Assert.*
@ -26,7 +26,7 @@ class FooterTest {
@Test
fun readInvalidFooterShouldFail() {
val vbmetaHeaderStr = "4156423000000001000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000000000c80000000000000000000000000000000000000000000000c800000000000000000000000000000000617662746f6f6c20312e312e3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
ByteArrayInputStream(Hex.decode(vbmetaHeaderStr)).use {
ByteArrayInputStream(Hex.decodeHex(vbmetaHeaderStr)).use {
try {
Footer(it)
assertEquals("Should never reach here", true, false)

@ -1,6 +1,6 @@
package avb
import org.bouncycastle.util.encoders.Hex
import org.apache.commons.codec.binary.Hex
import org.junit.Test
import java.io.ByteArrayInputStream
@ -9,7 +9,7 @@ class HeaderTest {
@Test
fun readHeader() {
val vbmetaHeaderStr = "4156423000000001000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000000000c80000000000000000000000000000000000000000000000c800000000000000000000000000000000617662746f6f6c20312e312e3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
val header = Header(ByteArrayInputStream(Hex.decode(vbmetaHeaderStr)))
println(header.toString())
val header2 = Header(ByteArrayInputStream(Hex.decodeHex(vbmetaHeaderStr)))
println(header2.toString())
}
}

@ -1,6 +1,6 @@
package avb.desc
import org.bouncycastle.util.encoders.Hex
import org.apache.commons.codec.binary.Hex
import org.junit.Assert
import org.junit.Test
import org.slf4j.LoggerFactory
@ -12,8 +12,8 @@ class HashDescriptorTest {
@Test
fun parseHashDescriptor() {
val descStr = "000000000000000200000000000000b80000000001ba4000736861323536000000000000000000000000000000000000000000000000000000000004000000200000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000626f6f74fbfb8e13c8082e0a16582163ad5075668903cc1237c6c007fed69de05957432103ae125531271eeeb83662cbe21543e3025f2d65268fb6b53c8718a90e3b03c7"
val desc = HashDescriptor(ByteArrayInputStream(Hex.decode(descStr)))
val desc = HashDescriptor(ByteArrayInputStream(Hex.decodeHex(descStr)))
log.info(desc.toString())
Assert.assertEquals(descStr, String(Hex.encode(desc.encode())))
Assert.assertEquals(descStr, Hex.encodeHexString(desc.encode()))
}
}

@ -1,7 +1,7 @@
package avb.desc
import com.fasterxml.jackson.databind.ObjectMapper
import org.bouncycastle.util.encoders.Hex
import org.apache.commons.codec.binary.Hex
import org.junit.Test
import org.junit.Assert.*
@ -14,15 +14,15 @@ class HashTreeDescriptorTest {
val treeStr1 = "000000000000000100000000000000e000000001000000009d787000000000009d78700000000000013d9000000010000000100000000002000000009eb60000000000000141400073686131000000000000000000000000000000000000000000000000000000000000000600000020000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000073797374656d28f6d60b554d9532bd45874ab0cdcb2219c4f437c9350f484fa189a881878ab609c2b0ad5852fc0f4a2d03ef9d2be5372e2bd1390000"
val treeStr2 = "000000000000000100000000000000e000000001000000001ec09000000000001ec0900000000000003e2000000010000000100000000002000000001efeb00000000000003ec00073686131000000000000000000000000000000000000000000000000000000000000000600000020000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000076656e646f7228f6d60b554d9532bd45874ab0cdcb2219c4f437c9350f484fa189a881878ab698cea1ea79a3fa7277255355d42f19af3378b0110000"
val tree1 = HashTreeDescriptor(ByteArrayInputStream(Hex.decode(treeStr1)), 0)
val tree1 = HashTreeDescriptor(ByteArrayInputStream(Hex.decodeHex(treeStr1)), 0)
println(ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(tree1))
assertEquals(treeStr1, String(Hex.encode(tree1.encode())))
assertEquals(treeStr1, Hex.encodeHexString(tree1.encode()))
val reDecoded = HashTreeDescriptor(ByteArrayInputStream(tree1.encode()), 0)
println(ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(reDecoded))
val tree2 = HashTreeDescriptor(ByteArrayInputStream(Hex.decode(treeStr2)), 0)
val tree2 = HashTreeDescriptor(ByteArrayInputStream(Hex.decodeHex(treeStr2)), 0)
println(ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(tree2))
assertEquals(treeStr2, String(Hex.encode(tree2.encode())))
assertEquals(treeStr2, Hex.encodeHexString(tree2.encode()))
}
}

@ -1,22 +1,19 @@
package avb.desc
import org.bouncycastle.util.encoders.Hex
import org.apache.commons.codec.binary.Hex
import org.junit.Assert.assertEquals
import org.junit.Test
import org.slf4j.LoggerFactory
import java.io.ByteArrayInputStream
class KernelCmdlineDescriptorTest {
private val log = LoggerFactory.getLogger(KernelCmdlineDescriptorTest::class.java)
@Test
fun encode() {
val cmdStr1 = "000000000000000300000000000001a8000000010000019b646d3d22312076726f6f74206e6f6e6520726f20312c3020353135393939322076657269747920312050415254555549443d2428414e44524f49445f53595354454d5f5041525455554944292050415254555549443d2428414e44524f49445f53595354454d5f504152545555494429203430393620343039362036343439393920363434393939207368613120303963326230616435383532666330663461326430336566396432626535333732653262643133392032386636643630623535346439353332626434353837346162306364636232323139633466343337633933353066343834666131383961383831383738616236203130202428414e44524f49445f5645524954595f4d4f4445292069676e6f72655f7a65726f5f626c6f636b73207573655f6665635f66726f6d5f6465766963652050415254555549443d2428414e44524f49445f53595354454d5f504152545555494429206665635f726f6f74732032206665635f626c6f636b7320363530303830206665635f7374617274203635303038302220726f6f743d2f6465762f646d2d300000000000"
val cmdStr2 = "000000000000000300000000000000300000000200000028726f6f743d50415254555549443d2428414e44524f49445f53595354454d5f504152545555494429"
val cmd1 = KernelCmdlineDescriptor(ByteArrayInputStream(Hex.decode(cmdStr1)), 0)
assertEquals(cmdStr1, String(Hex.encode(cmd1.encode())))
val cmd1 = KernelCmdlineDescriptor(ByteArrayInputStream(Hex.decodeHex(cmdStr1)), 0)
assertEquals(cmdStr1, Hex.encodeHexString(cmd1.encode()))
val cmd2 = KernelCmdlineDescriptor(ByteArrayInputStream(Hex.decode(cmdStr2)), 0)
assertEquals(cmdStr2, String(Hex.encode(cmd2.encode())))
val cmd2 = KernelCmdlineDescriptor(ByteArrayInputStream(Hex.decodeHex(cmdStr2)), 0)
assertEquals(cmdStr2, Hex.encodeHexString(cmd2.encode()))
}
}

@ -1,6 +1,6 @@
package avb.desc
import org.bouncycastle.util.encoders.Hex
import org.apache.commons.codec.binary.Hex
import org.junit.Test
import org.slf4j.LoggerFactory
@ -19,7 +19,7 @@ class UnknownDescriptorTest {
"000000000000000000000000626f6f7428f6d60b554d9532bd45874ab0cd" +
"cb2219c4f437c9350f484fa189a881878ab6156408cd763ff119635ec9db" +
"2a9656e220fa1dc27e26e59bd3d85025b412ffc3"
val descBA = Hex.decode(descStr + descStr)
val descBA = Hex.decodeHex(descStr + descStr)
val descList = UnknownDescriptor.parseDescriptors(ByteArrayInputStream(descBA), descBA.size.toLong())
descList.forEach{
log.info(it.toString())

Loading…
Cancel
Save