#include "JarCertificate.h"

#include "PaFlagBits.h"
#include "Utils.h"

using namespace std;


static void GenerateJarKey(const string &jar_path, vector<uint8_t> &key) {
  vector<uint8_t> data = StringToVector(jar_path);
  while (key.size() < kKeyMaterialSize) {
    vector<uint8_t> digest = Sha256(data);
    key.insert(key.end(), digest.begin(), digest.end());
    data = digest;
  }
}

static vector<uint8_t> CreateJarId(const string& jar_path) {
  vector<uint8_t> data = StringToVector(jar_path);
  vector<uint8_t> key;
  GenerateJarKey(jar_path, key);
  data.insert(data.end(), key.begin(), key.end());

  return data;
}

JarCertificate::JarCertificate(
    const string& jar_path,
    const std::string& b64_five_signature,
    long key_id): ProcessCertificate(
        CreateJarId(jar_path),
        Base64Decode(b64_five_signature), StringToVector(jar_path),
                     key_id, 1 << PaFlagBits_bitAndroid) {
}
