summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2017-12-31 08:25:35 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2017-12-31 08:25:35 +0000
commitfb1eca649023105c20d0cd866ff6b7905e65adc9 (patch)
tree2f63fb722e4499042119e75ad0eea642657368bf
parent7acd97fbede6d0dddbb1c26c40854019928cfa8f (diff)
parentabaf4d88d8ef3061de05da7034fc28b2ba880e71 (diff)
Snap for 4521654 from abaf4d88d8ef3061de05da7034fc28b2ba880e71 to pi-release
Change-Id: I03a2a585d1109aa848e7fe13a2265bc4e52c4b76
-rw-r--r--keystore/KeyAttestationPackageInfo.cpp14
-rw-r--r--keystore/include/keystore/KeyAttestationPackageInfo.h8
-rw-r--r--keystore/keystore_attestation_id.cpp15
3 files changed, 23 insertions, 14 deletions
diff --git a/keystore/KeyAttestationPackageInfo.cpp b/keystore/KeyAttestationPackageInfo.cpp
index 8092828..75fbb7a 100644
--- a/keystore/KeyAttestationPackageInfo.cpp
+++ b/keystore/KeyAttestationPackageInfo.cpp
@@ -25,17 +25,15 @@ namespace keymaster {
KeyAttestationPackageInfo::KeyAttestationPackageInfo() = default;
-KeyAttestationPackageInfo::KeyAttestationPackageInfo(
- const String16& packageName, int32_t versionCode,
- SharedSignaturesVector signatures) :
- packageName_(new String16(packageName)), versionCode_(versionCode),
- signatures_(signatures) {
-}
+KeyAttestationPackageInfo::KeyAttestationPackageInfo(const String16& packageName,
+ int64_t versionCode,
+ SharedSignaturesVector signatures)
+ : packageName_(new String16(packageName)), versionCode_(versionCode), signatures_(signatures) {}
status_t KeyAttestationPackageInfo::writeToParcel(Parcel* parcel) const {
auto rc = parcel->writeString16(packageName_);
if (rc != NO_ERROR) return rc;
- rc = parcel->writeInt32(versionCode_);
+ rc = parcel->writeInt64(versionCode_);
if (rc != NO_ERROR) return rc;
return parcel->writeParcelableVector(signatures_);
}
@@ -43,7 +41,7 @@ status_t KeyAttestationPackageInfo::writeToParcel(Parcel* parcel) const {
status_t KeyAttestationPackageInfo::readFromParcel(const Parcel* parcel) {
auto rc = parcel->readString16(&packageName_);
if (rc != NO_ERROR) return rc;
- rc = parcel->readInt32(&versionCode_);
+ rc = parcel->readInt64(&versionCode_);
if (rc != NO_ERROR) return rc;
std::unique_ptr<SignaturesVector> temp_vector;
diff --git a/keystore/include/keystore/KeyAttestationPackageInfo.h b/keystore/include/keystore/KeyAttestationPackageInfo.h
index efc33a6..92d4863 100644
--- a/keystore/include/keystore/KeyAttestationPackageInfo.h
+++ b/keystore/include/keystore/KeyAttestationPackageInfo.h
@@ -37,22 +37,22 @@ class KeyAttestationPackageInfo : public Parcelable {
SignaturesVector;
typedef std::shared_ptr<SignaturesVector> SharedSignaturesVector;
- KeyAttestationPackageInfo(
- const String16& packageName, int32_t versionCode, SharedSignaturesVector signatures);
+ KeyAttestationPackageInfo(const String16& packageName, int64_t versionCode,
+ SharedSignaturesVector signatures);
KeyAttestationPackageInfo();
status_t writeToParcel(Parcel*) const override;
status_t readFromParcel(const Parcel* parcel) override;
const std::unique_ptr<String16>& package_name() const { return packageName_; }
- int32_t version_code() const { return versionCode_; }
+ int64_t version_code() const { return versionCode_; }
ConstSignatureIterator sigs_begin() const { return ConstSignatureIterator(signatures_); }
ConstSignatureIterator sigs_end() const { return ConstSignatureIterator(); }
private:
std::unique_ptr<String16> packageName_;
- int32_t versionCode_;
+ int64_t versionCode_;
SharedSignaturesVector signatures_;
};
diff --git a/keystore/keystore_attestation_id.cpp b/keystore/keystore_attestation_id.cpp
index 7f9c38d..3d34ac5 100644
--- a/keystore/keystore_attestation_id.cpp
+++ b/keystore/keystore_attestation_id.cpp
@@ -37,6 +37,7 @@
#include <private/android_filesystem_config.h> /* for AID_SYSTEM */
#include <openssl/asn1t.h>
+#include <openssl/bn.h>
#include <openssl/sha.h>
#include <utils/String8.h>
@@ -148,10 +149,20 @@ status_t build_attestation_package_info(const KeyAttestationPackageInfo& pinfo,
return UNKNOWN_ERROR;
}
- if (!ASN1_INTEGER_set(attestation_package_info->version, pinfo.version_code())) {
+ BIGNUM* bn_version = BN_new();
+ if (bn_version == nullptr) {
+ return NO_MEMORY;
+ }
+ if (BN_set_u64(bn_version, static_cast<uint64_t>(pinfo.version_code())) != 1) {
+ BN_free(bn_version);
return UNKNOWN_ERROR;
}
- return NO_ERROR;
+ status_t retval = NO_ERROR;
+ if (BN_to_ASN1_INTEGER(bn_version, attestation_package_info->version) == nullptr) {
+ retval = UNKNOWN_ERROR;
+ }
+ BN_free(bn_version);
+ return retval;
}
StatusOr<std::vector<uint8_t>>