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

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

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

Merge commit 'bdf8034c' into gingerbread-plus-aosp

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

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

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

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

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->SetIntField(obbInfo, gObbInfoClassInfo.version, obb->getVersion());
    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");
    GET_FIELD_ID(gObbInfoClassInfo.flags, gObbInfoClassInfo.clazz,
            "flags", "I");
    GET_FIELD_ID(gObbInfoClassInfo.salt, gObbInfoClassInfo.clazz,
            "salt", "[B");

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

File changed.

No diff preview for this file type.

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

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

class ObbFile : public RefBase {
protected:
@@ -70,6 +71,26 @@ public:
        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() {
        return (mFlags & OBB_OVERLAY) == OBB_OVERLAY;
    }
@@ -103,6 +124,12 @@ private:
    /* Flags for this OBB type. */
    int32_t mFlags;

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

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

    const char* mFileName;

    size_t mFileSize;
Loading