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("com.fasterxml.jackson.core:jackson-databind:2.9.4")
compile("org.apache.commons:commons-exec:1.3") compile("org.apache.commons:commons-exec:1.3")
compile("org.apache.commons:commons-compress:1.16.1") compile("org.apache.commons:commons-compress:1.16.1")
compile("commons-codec:commons-codec:1.11")
compile("junit:junit:4.12") 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:bcpkix")
compile project(':bouncycastle:bcprov') compile project(":bouncycastle:bcprov")
} }
mainClassName = "cfig.RKt" mainClassName = "cfig.RKt"

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

@ -5,7 +5,7 @@ import avb.alg.Algorithms
import avb.desc.* import avb.desc.*
import cfig.io.Struct import cfig.io.Struct
import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.ObjectMapper
import org.bouncycastle.util.encoders.Hex import org.apache.commons.codec.binary.Hex
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
import java.io.* import java.io.*
import java.nio.file.Files import java.nio.file.Files
@ -79,7 +79,7 @@ class Avb {
hd.flags = 0 hd.flags = 0
if (do_not_use_ab) hd.flags = hd.flags or 1 if (do_not_use_ab) hd.flags = hd.flags or 1
if (!use_persistent_digest) hd.digest = digest 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, val vbmeta_blob = generateVbMetaBlob(common_algorithm,
common_key_path, common_key_path,
null, null,
@ -260,7 +260,7 @@ class Avb {
fis.skip(vbMetaHeader.public_key_offset) fis.skip(vbMetaHeader.public_key_offset)
ai.auxBlob!!.pubkey!!.pubkey = ByteArray(vbMetaHeader.public_key_size.toInt()) ai.auxBlob!!.pubkey!!.pubkey = ByteArray(vbMetaHeader.public_key_size.toInt())
fis.read(ai.auxBlob!!.pubkey!!.pubkey) 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) fis.skip(vbMetaHeader.public_key_metadata_offset)
val ba = ByteArray(vbMetaHeader.public_key_metadata_size.toInt()) val ba = ByteArray(vbMetaHeader.public_key_metadata_size.toInt())
fis.read(ba) 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) fis.skip(vbMetaHeader.hash_offset)
val ba = ByteArray(vbMetaHeader.hash_size.toInt()) val ba = ByteArray(vbMetaHeader.hash_size.toInt())
fis.read(ba) 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()) val bb = ByteArray(vbMetaHeader.signature_size.toInt())
fis.read(bb) 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 = AVBInfo.AuthBlob()
ai.authBlob!!.offset = authBlockOffset ai.authBlob!!.offset = authBlockOffset
ai.authBlob!!.size = vbMetaHeader.authentication_data_block_size ai.authBlob!!.size = vbMetaHeader.authentication_data_block_size
ai.authBlob!!.hash = String(Hex.encode(ba)) ai.authBlob!!.hash = Hex.encodeHexString(ba)
ai.authBlob!!.signature = String(Hex.encode(bb)) ai.authBlob!!.signature = Hex.encodeHexString(bb)
} }
} }

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

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

@ -2,7 +2,7 @@ package avb.desc
import cfig.Helper import cfig.Helper
import cfig.io.Struct import cfig.io.Struct
import org.bouncycastle.util.encoders.Hex import org.apache.commons.codec.binary.Hex
import org.junit.Assert import org.junit.Assert
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
import java.io.ByteArrayInputStream import java.io.ByteArrayInputStream
@ -27,7 +27,7 @@ class UnknownDescriptor(var data: ByteArray = byteArrayOf()) : Descriptor(0, 0,
} }
override fun toString(): String { 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 { fun analyze(): Any {

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

File diff suppressed because one or more lines are too long

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

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

@ -1,6 +1,6 @@
package avb.desc package avb.desc
import org.bouncycastle.util.encoders.Hex import org.apache.commons.codec.binary.Hex
import org.junit.Assert import org.junit.Assert
import org.junit.Test import org.junit.Test
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
@ -12,8 +12,8 @@ class HashDescriptorTest {
@Test @Test
fun parseHashDescriptor() { fun parseHashDescriptor() {
val descStr = "000000000000000200000000000000b80000000001ba4000736861323536000000000000000000000000000000000000000000000000000000000004000000200000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000626f6f74fbfb8e13c8082e0a16582163ad5075668903cc1237c6c007fed69de05957432103ae125531271eeeb83662cbe21543e3025f2d65268fb6b53c8718a90e3b03c7" val descStr = "000000000000000200000000000000b80000000001ba4000736861323536000000000000000000000000000000000000000000000000000000000004000000200000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000626f6f74fbfb8e13c8082e0a16582163ad5075668903cc1237c6c007fed69de05957432103ae125531271eeeb83662cbe21543e3025f2d65268fb6b53c8718a90e3b03c7"
val desc = HashDescriptor(ByteArrayInputStream(Hex.decode(descStr))) val desc = HashDescriptor(ByteArrayInputStream(Hex.decodeHex(descStr)))
log.info(desc.toString()) 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 package avb.desc
import com.fasterxml.jackson.databind.ObjectMapper 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.Test
import org.junit.Assert.* import org.junit.Assert.*
@ -14,15 +14,15 @@ class HashTreeDescriptorTest {
val treeStr1 = "000000000000000100000000000000e000000001000000009d787000000000009d78700000000000013d9000000010000000100000000002000000009eb60000000000000141400073686131000000000000000000000000000000000000000000000000000000000000000600000020000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000073797374656d28f6d60b554d9532bd45874ab0cdcb2219c4f437c9350f484fa189a881878ab609c2b0ad5852fc0f4a2d03ef9d2be5372e2bd1390000" val treeStr1 = "000000000000000100000000000000e000000001000000009d787000000000009d78700000000000013d9000000010000000100000000002000000009eb60000000000000141400073686131000000000000000000000000000000000000000000000000000000000000000600000020000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000073797374656d28f6d60b554d9532bd45874ab0cdcb2219c4f437c9350f484fa189a881878ab609c2b0ad5852fc0f4a2d03ef9d2be5372e2bd1390000"
val treeStr2 = "000000000000000100000000000000e000000001000000001ec09000000000001ec0900000000000003e2000000010000000100000000002000000001efeb00000000000003ec00073686131000000000000000000000000000000000000000000000000000000000000000600000020000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000076656e646f7228f6d60b554d9532bd45874ab0cdcb2219c4f437c9350f484fa189a881878ab698cea1ea79a3fa7277255355d42f19af3378b0110000" val treeStr2 = "000000000000000100000000000000e000000001000000001ec09000000000001ec0900000000000003e2000000010000000100000000002000000001efeb00000000000003ec00073686131000000000000000000000000000000000000000000000000000000000000000600000020000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000076656e646f7228f6d60b554d9532bd45874ab0cdcb2219c4f437c9350f484fa189a881878ab698cea1ea79a3fa7277255355d42f19af3378b0110000"
val tree1 = HashTreeDescriptor(ByteArrayInputStream(Hex.decode(treeStr1)), 0) val tree1 = HashTreeDescriptor(ByteArrayInputStream(Hex.decodeHex(treeStr1)), 0)
println(ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(tree1)) 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) val reDecoded = HashTreeDescriptor(ByteArrayInputStream(tree1.encode()), 0)
println(ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(reDecoded)) 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)) 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 package avb.desc
import org.bouncycastle.util.encoders.Hex import org.apache.commons.codec.binary.Hex
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Test import org.junit.Test
import org.slf4j.LoggerFactory
import java.io.ByteArrayInputStream import java.io.ByteArrayInputStream
class KernelCmdlineDescriptorTest { class KernelCmdlineDescriptorTest {
private val log = LoggerFactory.getLogger(KernelCmdlineDescriptorTest::class.java)
@Test @Test
fun encode() { fun encode() {
val cmdStr1 = "000000000000000300000000000001a8000000010000019b646d3d22312076726f6f74206e6f6e6520726f20312c3020353135393939322076657269747920312050415254555549443d2428414e44524f49445f53595354454d5f5041525455554944292050415254555549443d2428414e44524f49445f53595354454d5f504152545555494429203430393620343039362036343439393920363434393939207368613120303963326230616435383532666330663461326430336566396432626535333732653262643133392032386636643630623535346439353332626434353837346162306364636232323139633466343337633933353066343834666131383961383831383738616236203130202428414e44524f49445f5645524954595f4d4f4445292069676e6f72655f7a65726f5f626c6f636b73207573655f6665635f66726f6d5f6465766963652050415254555549443d2428414e44524f49445f53595354454d5f504152545555494429206665635f726f6f74732032206665635f626c6f636b7320363530303830206665635f7374617274203635303038302220726f6f743d2f6465762f646d2d300000000000" val cmdStr1 = "000000000000000300000000000001a8000000010000019b646d3d22312076726f6f74206e6f6e6520726f20312c3020353135393939322076657269747920312050415254555549443d2428414e44524f49445f53595354454d5f5041525455554944292050415254555549443d2428414e44524f49445f53595354454d5f504152545555494429203430393620343039362036343439393920363434393939207368613120303963326230616435383532666330663461326430336566396432626535333732653262643133392032386636643630623535346439353332626434353837346162306364636232323139633466343337633933353066343834666131383961383831383738616236203130202428414e44524f49445f5645524954595f4d4f4445292069676e6f72655f7a65726f5f626c6f636b73207573655f6665635f66726f6d5f6465766963652050415254555549443d2428414e44524f49445f53595354454d5f504152545555494429206665635f726f6f74732032206665635f626c6f636b7320363530303830206665635f7374617274203635303038302220726f6f743d2f6465762f646d2d300000000000"
val cmdStr2 = "000000000000000300000000000000300000000200000028726f6f743d50415254555549443d2428414e44524f49445f53595354454d5f504152545555494429" val cmdStr2 = "000000000000000300000000000000300000000200000028726f6f743d50415254555549443d2428414e44524f49445f53595354454d5f504152545555494429"
val cmd1 = KernelCmdlineDescriptor(ByteArrayInputStream(Hex.decode(cmdStr1)), 0) val cmd1 = KernelCmdlineDescriptor(ByteArrayInputStream(Hex.decodeHex(cmdStr1)), 0)
assertEquals(cmdStr1, String(Hex.encode(cmd1.encode()))) assertEquals(cmdStr1, Hex.encodeHexString(cmd1.encode()))
val cmd2 = KernelCmdlineDescriptor(ByteArrayInputStream(Hex.decode(cmdStr2)), 0) val cmd2 = KernelCmdlineDescriptor(ByteArrayInputStream(Hex.decodeHex(cmdStr2)), 0)
assertEquals(cmdStr2, String(Hex.encode(cmd2.encode()))) assertEquals(cmdStr2, Hex.encodeHexString(cmd2.encode()))
} }
} }

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

Loading…
Cancel
Save