Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fcab0f55 authored by Kenny Root's avatar Kenny Root Committed by Android Git Automerger
Browse files

am 8fda1636: am bdf8034c: Merge "OBB: use PBKDF2 for key generation." into gingerbread

Merge commit '8fda1636'

* commit '8fda1636':
  OBB: use PBKDF2 for key generation.
parents 10aca41e 8fda1636
Loading
Loading
Loading
Loading
+9 −0
Original line number Original line Diff line number Diff line
@@ -48,6 +48,13 @@ public class ObbInfo implements Parcelable {
     */
     */
    public int flags;
    public int flags;


    /**
     * The salt for the encryption algorithm.
     * 
     * @hide
     */
    public byte[] salt;

    // Only allow things in this package to instantiate.
    // Only allow things in this package to instantiate.
    /* package */ ObbInfo() {
    /* package */ ObbInfo() {
    }
    }
@@ -75,6 +82,7 @@ public class ObbInfo implements Parcelable {
        dest.writeString(packageName);
        dest.writeString(packageName);
        dest.writeInt(version);
        dest.writeInt(version);
        dest.writeInt(flags);
        dest.writeInt(flags);
        dest.writeByteArray(salt);
    }
    }


    public static final Parcelable.Creator<ObbInfo> CREATOR
    public static final Parcelable.Creator<ObbInfo> CREATOR
@@ -93,5 +101,6 @@ public class ObbInfo implements Parcelable {
        packageName = source.readString();
        packageName = source.readString();
        version = source.readInt();
        version = source.readInt();
        flags = source.readInt();
        flags = source.readInt();
        salt = source.createByteArray();
    }
    }
}
}
+11 −0
Original line number Original line Diff line number Diff line
@@ -32,6 +32,7 @@ static struct {
    jfieldID packageName;
    jfieldID packageName;
    jfieldID version;
    jfieldID version;
    jfieldID flags;
    jfieldID flags;
    jfieldID salt;
} gObbInfoClassInfo;
} gObbInfoClassInfo;


static void doThrow(JNIEnv* env, const char* exc, const char* msg = NULL)
static void doThrow(JNIEnv* env, const char* exc, const char* msg = NULL)
@@ -69,6 +70,14 @@ static void android_content_res_ObbScanner_getObbInfo(JNIEnv* env, jobject clazz
    env->SetObjectField(obbInfo, gObbInfoClassInfo.packageName, packageName);
    env->SetObjectField(obbInfo, gObbInfoClassInfo.packageName, packageName);
    env->SetIntField(obbInfo, gObbInfoClassInfo.version, obb->getVersion());
    env->SetIntField(obbInfo, gObbInfoClassInfo.version, obb->getVersion());
    env->SetIntField(obbInfo, gObbInfoClassInfo.flags, obb->getFlags());
    env->SetIntField(obbInfo, gObbInfoClassInfo.flags, obb->getFlags());

    size_t saltLen;
    const unsigned char* salt = obb->getSalt(&saltLen);
    if (saltLen > 0) {
        jbyteArray saltArray = env->NewByteArray(saltLen);
        env->SetByteArrayRegion(saltArray, 0, saltLen, (jbyte*)salt);
        env->SetObjectField(obbInfo, gObbInfoClassInfo.salt, saltArray);
    }
}
}


/*
/*
@@ -99,6 +108,8 @@ int register_android_content_res_ObbScanner(JNIEnv* env)
            "version", "I");
            "version", "I");
    GET_FIELD_ID(gObbInfoClassInfo.flags, gObbInfoClassInfo.clazz,
    GET_FIELD_ID(gObbInfoClassInfo.flags, gObbInfoClassInfo.clazz,
            "flags", "I");
            "flags", "I");
    GET_FIELD_ID(gObbInfoClassInfo.salt, gObbInfoClassInfo.clazz,
            "salt", "[B");


    return AndroidRuntime::registerNativeMethods(env, "android/content/res/ObbScanner", gMethods,
    return AndroidRuntime::registerNativeMethods(env, "android/content/res/ObbScanner", gMethods,
            NELEM(gMethods));
            NELEM(gMethods));
+8 B (36.6 KiB)

File changed.

No diff preview for this file type.

+27 −0
Original line number Original line Diff line number Diff line
@@ -27,6 +27,7 @@ namespace android {


// OBB flags (bit 0)
// OBB flags (bit 0)
#define OBB_OVERLAY         (1 << 0)
#define OBB_OVERLAY         (1 << 0)
#define OBB_SALTED          (1 << 1)


class ObbFile : public RefBase {
class ObbFile : public RefBase {
protected:
protected:
@@ -70,6 +71,26 @@ public:
        mFlags = flags;
        mFlags = flags;
    }
    }


    const unsigned char* getSalt(size_t* length) const {
        if ((mFlags & OBB_SALTED) == 0) {
            *length = 0;
            return NULL;
        }

        *length = sizeof(mSalt);
        return mSalt;
    }

    bool setSalt(const unsigned char* salt, size_t length) {
        if (length != sizeof(mSalt)) {
            return false;
        }

        memcpy(mSalt, salt, sizeof(mSalt));
        mFlags |= OBB_SALTED;
        return true;
    }

    bool isOverlay() {
    bool isOverlay() {
        return (mFlags & OBB_OVERLAY) == OBB_OVERLAY;
        return (mFlags & OBB_OVERLAY) == OBB_OVERLAY;
    }
    }
@@ -103,6 +124,12 @@ private:
    /* Flags for this OBB type. */
    /* Flags for this OBB type. */
    int32_t mFlags;
    int32_t mFlags;


    /* Whether the file is salted. */
    bool mSalted;

    /* The encryption salt. */
    unsigned char mSalt[8];

    const char* mFileName;
    const char* mFileName;


    size_t mFileSize;
    size_t mFileSize;
Loading