@ -15,7 +15,7 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
kotlin("jvm") version "1.4.31"
kotlin("jvm") version "1.5.20-RC"
application
}
@ -22,7 +22,6 @@ import avb.blob.Header
/*
a wonderfaul base64 encoder/decoder: https://cryptii.com/base64-to-hex
*/
@OptIn(ExperimentalUnsignedTypes::class)
class AVBInfo(var header: Header? = null,
var authBlob: AuthBlob? = null,
var auxBlob: AuxBlob? = null,
@ -39,7 +39,6 @@ import java.nio.file.Files
import java.nio.file.Paths
import java.nio.file.StandardOpenOption
class Avb {
private val MAX_VBMETA_SIZE = 64 * 1024
private val MAX_FOOTER_SIZE = 4096
@ -17,7 +17,6 @@ package avb.alg
import cfig.io.Struct3
class Algorithms {
companion object {
private val algMap = mutableMapOf<String, Algorithm>()
fun get(name: String): Algorithm? {
@ -25,7 +25,6 @@ import java.nio.file.Paths
import java.security.MessageDigest
import java.security.PrivateKey
data class AuthBlob(
var offset: Long = 0,
var size: Long = 0,
@ -25,7 +25,6 @@ import org.slf4j.LoggerFactory
import java.nio.file.Files
@JsonIgnoreProperties("descriptorSize")
class AuxBlob(
var pubkey: PubKeyInfo? = null,
@ -37,7 +37,6 @@ https://github.com/cfig/Android_boot_image_editor/blob/master/doc/layout.md#32-a
+---------------------------------------+-------------------------+ --> partition_size
data class Footer constructor(
var versionMajor: Int = FOOTER_VERSION_MAJOR,
var versionMinor: Int = FOOTER_VERSION_MINOR,
@ -19,7 +19,6 @@ import cfig.io.Struct3
import java.io.InputStream
//avbtool::AvbVBMetaHeader
data class Header(
var required_libavb_version_major: Int = Avb.AVB_VERSION_MAJOR,
var required_libavb_version_minor: Int = 0,
@ -22,7 +22,6 @@ import java.io.InputStream
import org.slf4j.LoggerFactory
class ChainPartitionDescriptor(
var rollback_index_location: Int = 0,
var partition_name_len: Int = 0,
@ -14,7 +14,6 @@
package avb.desc
abstract class Descriptor(var tag: Long, var num_bytes_following: Long, var sequence: Int = 0) {
abstract fun encode(): ByteArray
@ -24,7 +24,6 @@ import java.io.FileInputStream
class HashDescriptor(var flags: Int = 0,
var partition_name: String = "",
var hash_algorithm: String = "",
@ -23,7 +23,6 @@ import java.io.*
import java.util.*
class HashTreeDescriptor(
var flags: Int = 0,
var dm_verity_version: Int = 0,
@ -18,7 +18,6 @@ import cfig.helper.Helper
class KernelCmdlineDescriptor(
var cmdlineLength: Int = 0,
class PropertyDescriptor(
var key: String = "",
var value: String = "") : Descriptor(TAG, 0, 0) {
@ -21,7 +21,6 @@ import org.slf4j.LoggerFactory
import java.io.ByteArrayInputStream
class UnknownDescriptor(var data: ByteArray = byteArrayOf()) : Descriptor(0, 0, 0) {
@Throws(IllegalArgumentException::class)
constructor(stream: InputStream, seq: Int = 0) : this() {
@ -37,7 +37,6 @@ import java.nio.ByteOrder
import java.util.regex.Pattern
class Common {
data class VeritySignature(
var type: String = "dm-verity",
@ -27,7 +27,6 @@ import java.io.File
import cfig.EnvironmentVerifier
class Signer {
private val log = LoggerFactory.getLogger(Signer::class.java)
import kotlin.math.pow
open class BootHeaderV2(
var kernelLength: Int = 0,
var kernelOffset: Long = 0L, //UInt
@ -32,7 +32,6 @@ import java.io.FileOutputStream
import java.nio.ByteBuffer
import java.nio.ByteOrder
data class BootV2(
var info: MiscInfo = MiscInfo(),
var kernel: CommArgs = CommArgs(),
class BootHeaderV3(
var kernelSize: Int = 0,
var ramdiskSize: Int = 0,
@ -33,7 +33,6 @@ import java.nio.ByteBuffer
import cfig.bootimg.Common as C
data class BootV3(
@ -34,7 +34,6 @@ import cfig.EnvironmentVerifier
data class VendorBoot(
var ramdisk: CommArgs = CommArgs(),
@ -18,7 +18,6 @@ import cfig.io.Struct3
class VendorBootHeader(
var headerVersion: Int = 0,
var pageSize: Int = 0,
@ -21,7 +21,6 @@ import java.io.FileInputStream
import java.io.FileOutputStream
import java.lang.IllegalStateException
data class BootloaderMsg(//offset 0, size 2k
var command: String = "",
var status: String = "",
import java.io.FileInputStream
class BootloaderMsgAB( //offset 2k, size 2k
var slotSuffix: String = "",
var updateChannel: String = "",
data class VirtualABMsg(
var version: Int = 0,
var magic: ByteArray = byteArrayOf(),
@ -26,7 +26,6 @@ class Reboot {
ANDROID_RB_THERMOFF
private val log = LoggerFactory.getLogger(Reboot::class.java)
const val dynamicPartitionKey = "ro.boot.dynamic_partitions"
@ -26,7 +26,6 @@ import org.slf4j.LoggerFactory
import java.io.File
class BootImgParser() : IPackable {
override val loopNo: Int
get() = 0
class DtboParser(val workDir: File) : IPackable {
@ -22,7 +22,6 @@ import org.slf4j.Logger
interface IPackable {
val loopNo: Int
fun capabilities(): List<String> {
@ -25,7 +25,6 @@ import kotlin.system.exitProcess
class PackableLauncher
fun main(args: Array<String>) {
val log = LoggerFactory.getLogger(PackableLauncher::class.java)
val packablePool = mutableMapOf<List<String>, KClass<IPackable>>()
@ -18,7 +18,6 @@ import cfig.Avb
import cfig.helper.Helper
class VBMetaParser: IPackable {
get() = 1
@ -24,7 +24,6 @@ import com.fasterxml.jackson.databind.ObjectMapper
import avb.blob.Footer
import cfig.Avb
class SparseImgParser : IPackable {
@ -21,7 +21,6 @@ import org.junit.Assert.*
class AvbTest {
private val log = LoggerFactory.getLogger(AvbTest::class.java)
@ -31,7 +31,6 @@ import java.security.spec.PKCS8EncodedKeySpec
import java.security.spec.X509EncodedKeySpec
import javax.crypto.Cipher
class KeyUtilTest {
@Test
fun parseKeys() {
@ -24,7 +24,6 @@ import org.junit.Assert.assertEquals
import org.junit.Test
class BlobTest {
fun testEncodedKey2048() {
@ -20,7 +20,6 @@ import org.junit.Assert.assertEquals
class FooterTest {
fun readAVBfooter() {
@ -19,7 +19,6 @@ import org.apache.commons.codec.binary.Hex
class HeaderTest {
import org.junit.Assert
class AlgorithmsTest {
fun test1() {
@ -20,7 +20,6 @@ import org.junit.Test
class HashDescriptorTest {
private val log = LoggerFactory.getLogger(HashDescriptorTest::class.java)
@ -22,7 +22,6 @@ import org.junit.Test
class HashTreeDescriptorTest {
@ -19,7 +19,6 @@ import org.junit.Assert.assertEquals
class KernelCmdlineDescriptorTest {
fun encode() {
class UnknownDescriptorTest {
private val log = LoggerFactory.getLogger(UnknownDescriptorTest::class.java)
@ -21,7 +21,6 @@ import org.junit.Test
class BootloaderMsgTest {
private val log = LoggerFactory.getLogger(BootloaderMsgTest::class.java)
@ -23,7 +23,6 @@ import cfig.init.Reboot
import cfig.bootimg.Common.Companion.deleleIfExists
class RebootTest {
private val log = LoggerFactory.getLogger(RebootTest::class.java)
id("org.jetbrains.kotlin.jvm") version "1.4.31"
id("org.jetbrains.kotlin.jvm") version "1.5.20-RC"
`java-library`
@ -30,7 +30,6 @@ import kotlin.math.pow
import java.text.StringCharacterIterator
import java.text.CharacterIterator
class Helper {
data class Slice(
var srcFile: String,
@ -35,7 +35,6 @@ import java.util.*
https://docs.oracle.com/javase/9/security/java-pki-programmers-guide.htm#JSSEC-GUID-650D0D53-B617-4055-AFD3-AF5C2629CBBF
https://www.baeldung.com/java-read-pem-file-keys
class KeyHelper {
private val log = LoggerFactory.getLogger(KeyHelper::class.java)
@ -45,7 +45,6 @@ import java.util.*
import kotlin.random.Random
@OptIn(kotlin.ExperimentalUnsignedTypes::class)
class Struct3 {
private val log = LoggerFactory.getLogger(Struct3::class.java)
private val formatString: String
@ -19,7 +19,6 @@ import org.junit.Assert
class Struct3Test {
private fun getConvertedFormats(inStruct: Struct3): ArrayList<Map<String, Int>> {
val f = inStruct.javaClass.getDeclaredField("formats")