14fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root/* 24fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * Copyright (C) 2012 The Android Open Source Project 34fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * 44fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 54fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * you may not use this file except in compliance with the License. 64fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * You may obtain a copy of the License at 74fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * 84fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * http://www.apache.org/licenses/LICENSE-2.0 94fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * 104fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * Unless required by applicable law or agreed to in writing, software 114fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * distributed under the License is distributed on an "AS IS" BASIS, 124fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * See the License for the specific language governing permissions and 144fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * limitations under the License. 154fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root */ 164fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 17eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root#include <fcntl.h> 18eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root#include <stdlib.h> 19eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root#include <unistd.h> 20eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root#include <sys/mman.h> 21eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root#include <sys/stat.h> 22eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root#include <sys/types.h> 234fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 24eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root#include <fstream> 25eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root#include <iostream> 264fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 274fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root#include <gtest/gtest.h> 284fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 298467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root#include <openssl/bn.h> 308467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root#include <openssl/evp.h> 318467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root#include <openssl/x509.h> 328467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root 33eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root#define LOG_TAG "keymaster_test" 34eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root#include <utils/Log.h> 35a4cef693679293528bcca4084709e0b62c7a2ac0Kenny Root 36a4cef693679293528bcca4084709e0b62c7a2ac0Kenny Root#include <UniquePtr.h> 37eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 38302d252f2c655b50a8d1223105a0742d456ce206Shawn Willden#include <hardware/keymaster0.h> 394fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 404fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Rootnamespace android { 414fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 424fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Rootclass UniqueBlob : public UniquePtr<uint8_t[]> { 434fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Rootpublic: 44bcfe2933caf28bcbda052914d81a5c0bc2d4c44eChih-Hung Hsieh explicit UniqueBlob(size_t length) : 45eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root mLength(length) { 46eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root } 47eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 484fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root UniqueBlob(uint8_t* bytes, size_t length) : 494fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root UniquePtr<uint8_t[]>(bytes), mLength(length) { 504fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root } 514fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 524fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root bool operator==(const UniqueBlob &other) const { 534fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root if (other.length() != mLength) { 544fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root return false; 554fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root } 564fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 574fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root const uint8_t* mine = get(); 584fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root const uint8_t* theirs = other.get(); 594fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 604fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root for (size_t i = 0; i < mLength; i++) { 614fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root if (mine[i] != theirs[i]) { 624fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root return false; 634fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root } 644fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root } 654fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 664fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root return true; 674fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root } 684fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 694fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t length() const { 704fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root return mLength; 714fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root } 724fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 734fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root friend std::ostream &operator<<(std::ostream &stream, const UniqueBlob& blob); 744fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 754fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Rootprivate: 764fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t mLength; 774fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root}; 784fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 794fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Rootstd::ostream &operator<<(std::ostream &stream, const UniqueBlob& blob) { 804fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root const size_t length = blob.mLength; 814fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root stream << "Blob length=" << length << " < "; 824fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 834fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root const uint8_t* data = blob.get(); 844fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root for (size_t i = 0; i < length; i++) { 854fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root stream << std::hex << std::setw(2) << std::setfill('0') 864fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << static_cast<unsigned int>(data[i]) << ' '; 874fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root } 884fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root stream << '>' << std::endl; 894fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 904fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root return stream; 914fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root} 924fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 934fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Rootclass UniqueKey : public UniqueBlob { 944fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Rootpublic: 95302d252f2c655b50a8d1223105a0742d456ce206Shawn Willden UniqueKey(keymaster0_device_t** dev, uint8_t* bytes, size_t length) : 964fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root UniqueBlob(bytes, length), mDevice(dev) { 974fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root } 984fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 994fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root ~UniqueKey() { 1004fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root if (mDevice != NULL && *mDevice != NULL) { 101302d252f2c655b50a8d1223105a0742d456ce206Shawn Willden keymaster0_device_t* dev = *mDevice; 1024fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root if (dev->delete_keypair != NULL) { 1034fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root dev->delete_keypair(dev, get(), length()); 1044fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root } 1054fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root } 1064fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root } 1074fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 1084fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Rootprivate: 109302d252f2c655b50a8d1223105a0742d456ce206Shawn Willden keymaster0_device_t** mDevice; 1104fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root}; 1114fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 112eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Rootclass UniqueReadOnlyBlob { 113eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Rootpublic: 114eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root UniqueReadOnlyBlob(uint8_t* data, size_t dataSize) : 115eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root mDataSize(dataSize) { 116eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root int pageSize = sysconf(_SC_PAGE_SIZE); 117eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root if (pageSize == -1) { 118eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root return; 119eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root } 120eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 121eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root int fd = open("/dev/zero", O_RDONLY); 122eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root if (fd == -1) { 123eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root return; 124eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root } 125eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 126eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root mBufferSize = (dataSize + pageSize - 1) & ~(pageSize - 1); 127eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root uint8_t* buffer = (uint8_t*) mmap(NULL, mBufferSize, PROT_READ | PROT_WRITE, 128eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root MAP_PRIVATE, fd, 0); 129eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root close(fd); 130eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 131eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root if (buffer == NULL) { 132eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root return; 133eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root } 134eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 135eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root memcpy(buffer, data, dataSize); 136eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root if (mprotect(buffer, mBufferSize, PROT_READ) == -1) { 137eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root munmap(buffer, mBufferSize); 138eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root return; 139eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root } 140eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 141eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root mBuffer = buffer; 142eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root } 143eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 144eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root ~UniqueReadOnlyBlob() { 145eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root munmap(mBuffer, mBufferSize); 146eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root } 147eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 148eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root uint8_t* get() const { 149eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root return mBuffer; 150eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root } 151eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 152eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root size_t length() const { 153eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root return mDataSize; 154eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root } 155eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 156eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Rootprivate: 157eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root uint8_t* mBuffer; 158eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root size_t mBufferSize; 159eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root size_t mDataSize; 160eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root}; 161eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 1628467a6d2918274295212d07fc6e3894f6bc5d623Kenny Rootstruct BIGNUM_Delete { 1638467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root void operator()(BIGNUM* p) const { 1648467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root BN_free(p); 1658467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root } 1668467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root}; 1678467a6d2918274295212d07fc6e3894f6bc5d623Kenny Roottypedef UniquePtr<BIGNUM, BIGNUM_Delete> Unique_BIGNUM; 1688467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root 1698467a6d2918274295212d07fc6e3894f6bc5d623Kenny Rootstruct EVP_PKEY_Delete { 1708467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root void operator()(EVP_PKEY* p) const { 1718467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root EVP_PKEY_free(p); 1728467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root } 1738467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root}; 1748467a6d2918274295212d07fc6e3894f6bc5d623Kenny Roottypedef UniquePtr<EVP_PKEY, EVP_PKEY_Delete> Unique_EVP_PKEY; 1758467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root 1768467a6d2918274295212d07fc6e3894f6bc5d623Kenny Rootstruct PKCS8_PRIV_KEY_INFO_Delete { 1778467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root void operator()(PKCS8_PRIV_KEY_INFO* p) const { 1788467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root PKCS8_PRIV_KEY_INFO_free(p); 1798467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root } 1808467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root}; 1818467a6d2918274295212d07fc6e3894f6bc5d623Kenny Roottypedef UniquePtr<PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_Delete> Unique_PKCS8_PRIV_KEY_INFO; 1828467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root 1838467a6d2918274295212d07fc6e3894f6bc5d623Kenny Rootstruct RSA_Delete { 1848467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root void operator()(RSA* p) const { 1858467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root RSA_free(p); 1868467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root } 1878467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root}; 1888467a6d2918274295212d07fc6e3894f6bc5d623Kenny Roottypedef UniquePtr<RSA, RSA_Delete> Unique_RSA; 1898467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root 1906e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Rootstruct EC_KEY_Delete { 1916e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root void operator()(EC_KEY* p) const { 1926e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root EC_KEY_free(p); 1936e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root } 1946e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root}; 1956e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Roottypedef UniquePtr<EC_KEY, EC_KEY_Delete> Unique_EC_KEY; 1966e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 1976e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 1984fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root/* 1994fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * DER-encoded PKCS#8 format RSA key. Generated using: 2004fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * 2014fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * openssl genrsa 2048 | openssl pkcs8 -topk8 -nocrypt -outform der | recode ../x1 2024fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root */ 2036e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Rootstatic uint8_t TEST_RSA_KEY_1[] = { 2044fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x30, 0x82, 0x04, 0xBE, 0x02, 0x01, 0x00, 0x30, 0x0D, 0x06, 0x09, 0x2A, 2054fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 2064fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x04, 0xA8, 0x30, 0x82, 0x04, 0xA4, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 2074fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x01, 0x00, 0xD8, 0x58, 0xD4, 0x9F, 0xC0, 0xE8, 0xF0, 0xFF, 0x87, 0x27, 2084fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x43, 0xE6, 0x2E, 0xE6, 0x9A, 0x42, 0x3B, 0x39, 0x94, 0x84, 0x43, 0x55, 2094fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x8D, 0x20, 0x5B, 0x71, 0x88, 0xE6, 0xD1, 0x62, 0xC8, 0xF2, 0x20, 0xD0, 2104fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x75, 0x13, 0x83, 0xA3, 0x5D, 0x19, 0xA8, 0x62, 0xD0, 0x5F, 0x3E, 0x8A, 2114fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x7C, 0x0E, 0x26, 0xA9, 0xFF, 0xB2, 0x5E, 0x63, 0xAA, 0x3C, 0x8D, 0x13, 2124fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x41, 0xAA, 0xD5, 0x03, 0x01, 0x01, 0x53, 0xC9, 0x02, 0x1C, 0xEC, 0xE8, 2134fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xC4, 0x70, 0x3F, 0x43, 0xE5, 0x51, 0xD0, 0x6E, 0x52, 0x0B, 0xC4, 0x0A, 2144fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xA3, 0x61, 0xDE, 0xE3, 0x72, 0x0C, 0x94, 0xF1, 0x1C, 0x2D, 0x36, 0x77, 2154fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xBB, 0x16, 0xA8, 0x63, 0x4B, 0xD1, 0x07, 0x00, 0x42, 0x2D, 0x2B, 0x10, 2164fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x80, 0x45, 0xF3, 0x0C, 0xF9, 0xC5, 0xAC, 0xCC, 0x64, 0x87, 0xFD, 0x5D, 2174fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xC8, 0x51, 0xD4, 0x1C, 0x9E, 0x6E, 0x9B, 0xC4, 0x27, 0x5E, 0x73, 0xA7, 2184fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x2A, 0xF6, 0x90, 0x42, 0x0C, 0x34, 0x93, 0xB7, 0x02, 0x19, 0xA9, 0x64, 2194fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x6C, 0x46, 0x3B, 0x40, 0x02, 0x2F, 0x54, 0x69, 0x79, 0x26, 0x7D, 0xF6, 2204fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x85, 0x90, 0x01, 0xD0, 0x21, 0x07, 0xD0, 0x14, 0x00, 0x65, 0x9C, 0xAC, 2214fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x24, 0xE8, 0x78, 0x42, 0x3B, 0x90, 0x75, 0x19, 0x55, 0x11, 0x4E, 0xD9, 2224fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xE6, 0x97, 0x87, 0xBC, 0x8D, 0x2C, 0x9B, 0xF0, 0x1F, 0x14, 0xEB, 0x6A, 2234fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x57, 0xCE, 0x78, 0xAD, 0xCE, 0xD9, 0xFB, 0xB9, 0xA1, 0xEF, 0x0C, 0x1F, 2244fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xDD, 0xE3, 0x5B, 0x73, 0xA0, 0xEC, 0x37, 0x9C, 0xE1, 0xFD, 0x86, 0x28, 2254fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xC3, 0x4A, 0x42, 0xD0, 0xA3, 0xFE, 0x57, 0x09, 0x29, 0xD8, 0xF6, 0xEC, 2264fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xE3, 0xC0, 0x71, 0x7C, 0x29, 0x27, 0xC2, 0xD1, 0x3E, 0x22, 0xBC, 0xBD, 2274fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x5A, 0x85, 0x41, 0xF6, 0x15, 0xDA, 0x0C, 0x58, 0x5A, 0x61, 0x5B, 0x78, 2284fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xB8, 0xAA, 0xEC, 0x5C, 0x1C, 0x79, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 2294fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x82, 0x01, 0x00, 0x1D, 0x10, 0x31, 0xE0, 0x14, 0x26, 0x36, 0xD9, 0xDC, 2304fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xEA, 0x25, 0x70, 0xF2, 0xB3, 0xFF, 0xDD, 0x0D, 0xDF, 0xBA, 0x57, 0xDA, 2314fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x43, 0xCF, 0xE5, 0x9C, 0xE3, 0x2F, 0xA4, 0xF2, 0x53, 0xF6, 0xF2, 0xAF, 2324fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xFD, 0xD0, 0xFC, 0x82, 0x1E, 0x9C, 0x0F, 0x2A, 0x53, 0xBB, 0xF2, 0x4F, 2334fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x90, 0x83, 0x01, 0xD3, 0xA7, 0xDA, 0xB5, 0xB7, 0x80, 0x64, 0x0A, 0x26, 2344fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x59, 0x83, 0xE4, 0xD3, 0x20, 0xC8, 0x2D, 0xC9, 0x77, 0xA3, 0x55, 0x07, 2354fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x6E, 0x6D, 0x95, 0x36, 0xAA, 0x84, 0x4F, 0xED, 0x54, 0x24, 0xA9, 0x77, 2364fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xF8, 0x85, 0xE2, 0x4B, 0xF2, 0xFA, 0x0B, 0x3E, 0xA6, 0xF5, 0x46, 0x0D, 2374fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x9F, 0x1F, 0xFE, 0xF7, 0x37, 0xFF, 0xA3, 0x60, 0xF1, 0x63, 0xF2, 0x75, 2384fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x6A, 0x8E, 0x10, 0xD7, 0x89, 0xD2, 0xB3, 0xFF, 0x76, 0xA5, 0xBA, 0xAF, 2394fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x0A, 0xBE, 0x32, 0x5F, 0xF0, 0x48, 0x48, 0x4B, 0x9C, 0x9A, 0x3D, 0x12, 2404fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xA7, 0xD2, 0x07, 0xC7, 0x59, 0x32, 0x94, 0x95, 0x65, 0x2F, 0x87, 0x34, 2414fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x76, 0xBA, 0x7C, 0x08, 0x4B, 0xAB, 0xA6, 0x24, 0xDF, 0x64, 0xDB, 0x48, 2424fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x63, 0x42, 0x06, 0xE2, 0x2C, 0x3D, 0xFB, 0xE5, 0x47, 0x81, 0x94, 0x98, 2434fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xF7, 0x32, 0x4B, 0x28, 0xEB, 0x42, 0xB8, 0xE9, 0x8E, 0xFC, 0xC9, 0x43, 2444fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xC9, 0x47, 0xE6, 0xE7, 0x1C, 0xDC, 0x71, 0xEF, 0x4D, 0x8A, 0xB1, 0xFC, 2454fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x45, 0x37, 0xEC, 0xB3, 0x16, 0x88, 0x5B, 0xE2, 0xEC, 0x8B, 0x6B, 0x75, 2464fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x16, 0xBE, 0x6B, 0xF8, 0x2C, 0xF8, 0xC9, 0xD1, 0xF7, 0x55, 0x87, 0x57, 2474fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x5F, 0xDE, 0xF4, 0x7E, 0x72, 0x13, 0x06, 0x2A, 0x21, 0xB7, 0x78, 0x21, 2484fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x05, 0xFD, 0xE2, 0x5F, 0x7B, 0x7C, 0xF0, 0x26, 0x2B, 0x75, 0x7F, 0x68, 2494fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xF9, 0xA6, 0x98, 0xFD, 0x54, 0x0E, 0xCC, 0x22, 0x41, 0x7F, 0x29, 0x81, 2504fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x2F, 0xA3, 0x3C, 0x3D, 0x64, 0xC8, 0x41, 0x02, 0x81, 0x81, 0x00, 0xFA, 2514fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xFA, 0xE4, 0x2E, 0x30, 0xF0, 0x7A, 0x8D, 0x95, 0xB8, 0x39, 0x58, 0x27, 2524fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x0F, 0x89, 0x0C, 0xDF, 0xFE, 0x2F, 0x55, 0x3B, 0x6F, 0xDD, 0x5F, 0x12, 2534fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xB3, 0xD1, 0xCF, 0x5B, 0x8D, 0xB6, 0x10, 0x1C, 0x87, 0x0C, 0x30, 0x89, 2544fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x2D, 0xBB, 0xB8, 0xA1, 0x78, 0x0F, 0x54, 0xA6, 0x36, 0x46, 0x05, 0x8B, 2554fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x5A, 0xFF, 0x48, 0x03, 0x13, 0xAE, 0x95, 0x96, 0x5D, 0x6C, 0xDA, 0x5D, 2564fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xF7, 0xAD, 0x1D, 0x33, 0xED, 0x23, 0xF5, 0x4B, 0x03, 0x78, 0xE7, 0x50, 2574fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xD1, 0x2D, 0x95, 0x22, 0x35, 0x02, 0x5B, 0x4A, 0x4E, 0x73, 0xC9, 0xB7, 2584fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x05, 0xC4, 0x21, 0x86, 0x1F, 0x1E, 0x40, 0x83, 0xBC, 0x8A, 0x3A, 0x95, 2594fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x24, 0x62, 0xF4, 0x58, 0x38, 0x64, 0x4A, 0x89, 0x8A, 0x27, 0x59, 0x12, 2604fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x9D, 0x21, 0xC3, 0xA6, 0x42, 0x1E, 0x2A, 0x3F, 0xD8, 0x65, 0x1F, 0x6E, 2614fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x3E, 0x4D, 0x5C, 0xCC, 0xEA, 0x8E, 0x15, 0x02, 0x81, 0x81, 0x00, 0xDC, 2624fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xAC, 0x9B, 0x00, 0xDB, 0xF9, 0xB2, 0xBF, 0xC4, 0x5E, 0xB6, 0xB7, 0x63, 2634fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xEB, 0x13, 0x4B, 0xE2, 0xA6, 0xC8, 0x72, 0x90, 0xD8, 0xC2, 0x33, 0x33, 2644fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xF0, 0x66, 0x75, 0xBD, 0x50, 0x7C, 0xA4, 0x8F, 0x82, 0xFB, 0xFF, 0x44, 2654fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x3B, 0xE7, 0x15, 0x3A, 0x0C, 0x7A, 0xF8, 0x92, 0x86, 0x4A, 0x79, 0x32, 2664fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x08, 0x82, 0x1D, 0x6A, 0xBA, 0xAD, 0x8A, 0xB3, 0x3D, 0x7F, 0xA5, 0xB4, 2674fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x6F, 0x67, 0x86, 0x7E, 0xB2, 0x9C, 0x2A, 0xF6, 0x7C, 0x49, 0x21, 0xC5, 2684fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x3F, 0x00, 0x3F, 0x9B, 0xF7, 0x0F, 0x6C, 0x35, 0x80, 0x75, 0x73, 0xC0, 2694fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xF8, 0x3E, 0x30, 0x5F, 0x74, 0x2F, 0x15, 0x41, 0xEA, 0x0F, 0xCE, 0x0E, 2704fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x18, 0x17, 0x68, 0xBA, 0xC4, 0x29, 0xF2, 0xE2, 0x2C, 0x1D, 0x55, 0x83, 2714fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xB6, 0x64, 0x2E, 0x03, 0x12, 0xA4, 0x0D, 0xBF, 0x4F, 0x2E, 0xBE, 0x7C, 2724fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x41, 0xD9, 0xCD, 0xD0, 0x52, 0x91, 0xD5, 0x02, 0x81, 0x81, 0x00, 0xD4, 2734fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x55, 0xEB, 0x32, 0xC1, 0x28, 0xD3, 0x26, 0x72, 0x22, 0xB8, 0x31, 0x42, 2744fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x6A, 0xBC, 0x52, 0x6E, 0x37, 0x48, 0xA8, 0x5D, 0x6E, 0xD8, 0xE5, 0x14, 2754fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x97, 0x99, 0xCC, 0x4A, 0xF2, 0xEB, 0xB3, 0x59, 0xCF, 0x4F, 0x9A, 0xC8, 2764fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x94, 0x2E, 0x9B, 0x97, 0xD0, 0x51, 0x78, 0x16, 0x5F, 0x18, 0x82, 0x9C, 2774fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x51, 0xD2, 0x64, 0x84, 0x65, 0xE4, 0x70, 0x9E, 0x14, 0x50, 0x81, 0xB6, 2784fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xBA, 0x52, 0x75, 0xC0, 0x76, 0xC2, 0xD3, 0x46, 0x31, 0x9B, 0xDA, 0x67, 2794fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xDF, 0x71, 0x27, 0x19, 0x17, 0xAB, 0xF4, 0xBC, 0x3A, 0xFF, 0x6F, 0x0B, 2804fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x2F, 0x0F, 0xAE, 0x25, 0x20, 0xB2, 0xA1, 0x76, 0x52, 0xCE, 0xC7, 0x9D, 2814fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x62, 0x79, 0x6D, 0xAC, 0x2D, 0x99, 0x7C, 0x0E, 0x3D, 0x19, 0xE9, 0x1B, 2824fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xFC, 0x60, 0x92, 0x7C, 0x58, 0xB7, 0xD8, 0x9A, 0xC7, 0x63, 0x56, 0x62, 2834fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x18, 0xC7, 0xAE, 0xD9, 0x97, 0x1F, 0xB9, 0x02, 0x81, 0x81, 0x00, 0x91, 2844fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x40, 0xC4, 0x1E, 0x82, 0xAD, 0x0F, 0x6D, 0x8E, 0xD2, 0x51, 0x2E, 0xD1, 2854fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x84, 0x30, 0x85, 0x68, 0xC1, 0x23, 0x7B, 0xD5, 0xBF, 0xF7, 0xC4, 0x40, 2864fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x51, 0xE2, 0xFF, 0x69, 0x07, 0x8B, 0xA3, 0xBE, 0x1B, 0x17, 0xC8, 0x64, 2874fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x9F, 0x91, 0x71, 0xB5, 0x6D, 0xF5, 0x9B, 0x9C, 0xC6, 0xEC, 0x4A, 0x6E, 2884fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x16, 0x8F, 0x9E, 0xD1, 0x5B, 0xE3, 0x53, 0x42, 0xBC, 0x1E, 0x43, 0x72, 2894fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x4B, 0x4A, 0x37, 0x8B, 0x3A, 0x01, 0xF5, 0x7D, 0x9D, 0x3D, 0x7E, 0x0F, 2904fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x19, 0x73, 0x0E, 0x6B, 0x98, 0xE9, 0xFB, 0xEE, 0x13, 0x8A, 0x3C, 0x11, 2914fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x2E, 0xD5, 0xB0, 0x7D, 0x84, 0x3A, 0x61, 0xA1, 0xAB, 0x71, 0x8F, 0xCE, 2924fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x53, 0x29, 0x45, 0x74, 0x7A, 0x1E, 0xAA, 0x93, 0x19, 0x3A, 0x8D, 0xC9, 2934fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x4E, 0xCB, 0x0E, 0x46, 0x53, 0x84, 0xCC, 0xCF, 0xBA, 0x4D, 0x28, 0x71, 2944fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x1D, 0xDF, 0x41, 0xCB, 0xF8, 0x2D, 0xA9, 0x02, 0x81, 0x80, 0x04, 0x8B, 2954fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x4A, 0xEA, 0xBD, 0x39, 0x0B, 0x96, 0xC5, 0x1D, 0xA4, 0x47, 0xFD, 0x46, 2964fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xD2, 0x8A, 0xEA, 0x2A, 0xF3, 0x9D, 0x3A, 0x7E, 0x16, 0x74, 0xFC, 0x13, 2974fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xDE, 0x4D, 0xA9, 0x85, 0x42, 0x33, 0x02, 0x92, 0x0B, 0xB6, 0xDB, 0x7E, 2984fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xEA, 0x85, 0xC2, 0x94, 0x43, 0x52, 0x37, 0x5A, 0x77, 0xAB, 0xCB, 0x61, 2994fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x88, 0xDE, 0xF8, 0xFA, 0xDB, 0xE8, 0x0B, 0x95, 0x7D, 0x39, 0x19, 0xA2, 3004fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x89, 0xB9, 0x32, 0xB2, 0x50, 0x38, 0xF7, 0x88, 0x69, 0xFD, 0xA4, 0x63, 3014fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x1F, 0x9B, 0x03, 0xD8, 0xA6, 0x7A, 0x05, 0x76, 0x02, 0x28, 0x93, 0x82, 3024fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x73, 0x7F, 0x14, 0xCC, 0xBE, 0x29, 0x10, 0xAD, 0x8A, 0x2E, 0xAC, 0xED, 3034fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x11, 0xA7, 0x72, 0x7C, 0x60, 0x78, 0x72, 0xFB, 0x78, 0x20, 0x18, 0xC9, 3044fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x7E, 0x63, 0xAD, 0x55, 0x54, 0x51, 0xDB, 0x9F, 0x7B, 0xD4, 0x8F, 0xB2, 3054fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xDE, 0x3B, 0xF1, 0x70, 0x23, 0xE5, 3064fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root}; 3074fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 3084fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root/* 3096e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root * DER-encoded PKCS#8 format EC key. Generated using: 3106e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root * 3116e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root * openssl ecparam -name prime256v1 -genkey -noout | openssl pkcs8 -topk8 -nocrypt -outform der | recode ../x1 3126e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root */ 3136e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Rootstatic uint8_t TEST_EC_KEY_1[] = { 3146e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 0x30, 0x81, 0x87, 0x02, 0x01, 0x00, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 3156e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 3166e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 0x03, 0x01, 0x07, 0x04, 0x6D, 0x30, 0x6B, 0x02, 0x01, 0x01, 0x04, 0x20, 3176e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 0x25, 0xAC, 0x77, 0x2B, 0x04, 0x33, 0xC8, 0x16, 0x59, 0xA3, 0xC7, 0xE7, 3186e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 0x11, 0x42, 0xD0, 0x11, 0x71, 0x30, 0x7B, 0xB8, 0xD2, 0x67, 0xFF, 0x9C, 3196e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 0x5F, 0x50, 0x2E, 0xAB, 0x67, 0xD4, 0x17, 0x51, 0xA1, 0x44, 0x03, 0x42, 3206e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 0x00, 0x04, 0xCF, 0xCE, 0xB8, 0x7F, 0x88, 0x36, 0xC4, 0xF8, 0x51, 0x29, 3216e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 0xE2, 0xA7, 0x21, 0xC3, 0x3B, 0xFF, 0x88, 0xE3, 0x87, 0x98, 0xD1, 0xA6, 3226e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 0x4B, 0xB3, 0x4B, 0xD5, 0x44, 0xF8, 0xE0, 0x43, 0x6B, 0x50, 0x74, 0xFB, 3236e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 0xB0, 0xAD, 0x41, 0x1C, 0x11, 0x9D, 0xC6, 0x1E, 0x83, 0x8C, 0x49, 0xCA, 3246e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 0xBE, 0xC6, 0xCE, 0xB6, 0xC9, 0xA1, 0xBF, 0x69, 0xA9, 0xA0, 0xA3, 0x80, 3256e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 0x14, 0x39, 0x57, 0x94, 0xDA, 0x5D 3266e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root}; 3276e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 3286e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 3296e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root/* 3304fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * Generated using keys on the keyboard and lack of imagination. 3314fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root */ 3324fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Rootstatic unsigned char BOGUS_KEY_1[] = { 0xFF, 0xFF, 0xFF, 0xFF }; 3334fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 3344fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 3358467a6d2918274295212d07fc6e3894f6bc5d623Kenny Rootclass KeymasterBaseTest : public ::testing::Test { 3368467a6d2918274295212d07fc6e3894f6bc5d623Kenny Rootpublic: 3374fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root static void SetUpTestCase() { 3384fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root const hw_module_t* mod; 3394fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root ASSERT_EQ(0, hw_get_module_by_class(KEYSTORE_HARDWARE_MODULE_ID, NULL, &mod)) 3404fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should be able to find a keymaster hardware module"; 3414fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 3424fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root std::cout << "Using keymaster module: " << mod->name << std::endl; 3434fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 344302d252f2c655b50a8d1223105a0742d456ce206Shawn Willden ASSERT_EQ(0, keymaster0_open(mod, &sDevice)) 3454fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should be able to open the keymaster device"; 3464fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 34736ab8ed76fb751d8570d0323e6ece4c60f730703Kenny Root ASSERT_EQ(KEYMASTER_MODULE_API_VERSION_0_2, mod->module_api_version) 3486e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "Keymaster should implement API version 2"; 3496e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 3504fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root ASSERT_TRUE(sDevice->generate_keypair != NULL) 3514fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should implement generate_keypair"; 3524fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 3534fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root ASSERT_TRUE(sDevice->import_keypair != NULL) 3544fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should implement import_keypair"; 3554fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 3564fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root ASSERT_TRUE(sDevice->get_keypair_public != NULL) 3574fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should implement get_keypair_public"; 3584fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 3594fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root ASSERT_TRUE(sDevice->sign_data != NULL) 3604fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should implement sign_data"; 3614fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 3624fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root ASSERT_TRUE(sDevice->verify_data != NULL) 3634fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should implement verify_data"; 3644fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root } 3654fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 3664fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root static void TearDownTestCase() { 367302d252f2c655b50a8d1223105a0742d456ce206Shawn Willden ASSERT_EQ(0, keymaster0_close(sDevice)); 3684fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root } 3694fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 3708467a6d2918274295212d07fc6e3894f6bc5d623Kenny Rootprotected: 371302d252f2c655b50a8d1223105a0742d456ce206Shawn Willden static keymaster0_device_t* sDevice; 3728467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root}; 3734fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 374302d252f2c655b50a8d1223105a0742d456ce206Shawn Willdenkeymaster0_device_t* KeymasterBaseTest::sDevice = NULL; 3754fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 3768467a6d2918274295212d07fc6e3894f6bc5d623Kenny Rootclass KeymasterTest : public KeymasterBaseTest { 3774fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root}; 3784fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 3796e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Rootclass KeymasterAllTypesTest : public KeymasterBaseTest, 3806e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root public ::testing::WithParamInterface<keymaster_keypair_t> { 3816e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root}; 3826e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 3836e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Rootclass KeymasterGenerateRSATest : public KeymasterBaseTest, 3848467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root public ::testing::WithParamInterface<uint32_t> { 3858467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root}; 3864fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 3876e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Rootclass KeymasterGenerateDSATest : public KeymasterBaseTest, 3886e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root public ::testing::WithParamInterface<uint32_t> { 3896e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root}; 3906e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 3916e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Rootclass KeymasterGenerateECTest : public KeymasterBaseTest, 3926e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root public ::testing::WithParamInterface<uint32_t> { 3936e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root}; 3946e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 3956e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny RootTEST_P(KeymasterGenerateRSATest, GenerateKeyPair_RSA_Success) { 3964fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root keymaster_keypair_t key_type = TYPE_RSA; 3974fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root keymaster_rsa_keygen_params_t params = { 3981aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .modulus_size = GetParam(), 3991aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .public_exponent = RSA_F4, 4004fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root }; 4014fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 4024fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* key_blob; 4034fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t key_blob_length; 4044fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 405139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(0, 4064fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root sDevice->generate_keypair(sDevice, key_type, ¶ms, &key_blob, &key_blob_length)) 4076e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "Should generate an RSA key with " << GetParam() << " bit modulus size"; 4084fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root UniqueKey key(&sDevice, key_blob, key_blob_length); 4094fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 4108467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root uint8_t* x509_data = NULL; 4118467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root size_t x509_data_length; 412139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(0, 4138467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root sDevice->get_keypair_public(sDevice, key_blob, key_blob_length, 4148467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root &x509_data, &x509_data_length)) 4158467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root << "Should be able to retrieve RSA public key successfully"; 4168467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root UniqueBlob x509_blob(x509_data, x509_data_length); 4178467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root ASSERT_FALSE(x509_blob.get() == NULL) 4188467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root << "X509 data should be allocated"; 4194fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 4208467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root const unsigned char *tmp = static_cast<const unsigned char*>(x509_blob.get()); 4218467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root Unique_EVP_PKEY actual(d2i_PUBKEY((EVP_PKEY**) NULL, &tmp, 4228467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root static_cast<long>(x509_blob.length()))); 4234fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 4248467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root ASSERT_EQ(EVP_PKEY_RSA, EVP_PKEY_type(actual.get()->type)) 4258467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root << "Generated key type should be of type RSA"; 4264fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 4278467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root Unique_RSA rsa(EVP_PKEY_get1_RSA(actual.get())); 4288467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root ASSERT_FALSE(rsa.get() == NULL) 4298467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root << "Should be able to extract RSA key from EVP_PKEY"; 4304fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 431139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(static_cast<unsigned long>(RSA_F4), BN_get_word(rsa.get()->e)) 4328467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root << "Exponent should be RSA_F4"; 4334fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 4346e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_EQ((GetParam() + 7) / 8, static_cast<uint32_t>(RSA_size(rsa.get()))) 4358467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root << "Modulus size should be the specified parameter"; 4364fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root} 4374fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 4388467a6d2918274295212d07fc6e3894f6bc5d623Kenny RootINSTANTIATE_TEST_CASE_P(RSA, 4396e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root KeymasterGenerateRSATest, 44063b64337fbaa10b282f85a7e887b40ced6d6d632Brian Carlstrom ::testing::Values(512U, 1024U, 2048U, 3072U, 4096U)); 4418467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root 4426e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 4436e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny RootTEST_P(KeymasterGenerateECTest, GenerateKeyPair_EC_Success) { 4446e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root keymaster_keypair_t key_type = TYPE_EC; 4456e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root keymaster_ec_keygen_params_t params = { 4461aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .field_size = GetParam(), 4476e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root }; 4486e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 4496e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root uint8_t* key_blob; 4506e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root size_t key_blob_length; 4516e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 4526e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_EQ(0, 4536e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root sDevice->generate_keypair(sDevice, key_type, ¶ms, &key_blob, &key_blob_length)) 4546e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "Should generate an EC key with " << GetParam() << " field size"; 4556e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueKey key(&sDevice, key_blob, key_blob_length); 4566e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 4576e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root uint8_t* x509_data = NULL; 4586e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root size_t x509_data_length; 4596e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_EQ(0, 4606e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root sDevice->get_keypair_public(sDevice, key_blob, key_blob_length, 4616e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root &x509_data, &x509_data_length)) 4626e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "Should be able to retrieve EC public key successfully"; 4636e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueBlob x509_blob(x509_data, x509_data_length); 4646e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_FALSE(x509_blob.get() == NULL) 4656e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "X509 data should be allocated"; 4666e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 4676e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root const unsigned char *tmp = static_cast<const unsigned char*>(x509_blob.get()); 4686e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root Unique_EVP_PKEY actual(d2i_PUBKEY((EVP_PKEY**) NULL, &tmp, 4696e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root static_cast<long>(x509_blob.length()))); 4706e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 4716e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_EQ(EVP_PKEY_EC, EVP_PKEY_type(actual.get()->type)) 4726e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "Generated key type should be of type EC"; 4736e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 4746e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root Unique_EC_KEY ecKey(EVP_PKEY_get1_EC_KEY(actual.get())); 4756e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_FALSE(ecKey.get() == NULL) 4766e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "Should be able to extract EC key from EVP_PKEY"; 4776e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 4786e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_FALSE(EC_KEY_get0_group(ecKey.get()) == NULL) 4796e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "EC key should have a EC_GROUP"; 4806e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 4816e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_TRUE(EC_KEY_check_key(ecKey.get())) 4826e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "EC key should check correctly"; 4836e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root} 4846e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 4856e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny RootINSTANTIATE_TEST_CASE_P(EC, 4866e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root KeymasterGenerateECTest, 4876e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ::testing::Values(192U, 224U, 256U, 384U, 521U)); 4886e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 4896e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 4906e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny RootTEST_P(KeymasterAllTypesTest, GenerateKeyPair_NullParams_Failure) { 4916e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root keymaster_keypair_t key_type = GetParam(); 4924fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 4934fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* key_blob; 4944fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t key_blob_length; 4954fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 496139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(-1, 4974fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root sDevice->generate_keypair(sDevice, key_type, NULL, &key_blob, &key_blob_length)) 4986e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "Should not be able to generate a key with null params"; 4994fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root} 5004fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 5016e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny RootINSTANTIATE_TEST_CASE_P(Types, 5026e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root KeymasterAllTypesTest, 5036e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ::testing::Values(TYPE_RSA, TYPE_DSA, TYPE_EC)); 5046e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 5054fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny RootTEST_F(KeymasterTest, GenerateKeyPair_UnknownType_Failure) { 5064fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root keymaster_keypair_t key_type = static_cast<keymaster_keypair_t>(0xFFFF); 5074fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 5084fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* key_blob; 5094fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t key_blob_length; 5104fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 511139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(-1, 5124fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root sDevice->generate_keypair(sDevice, key_type, NULL, &key_blob, &key_blob_length)) 5134fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should not generate an unknown key type"; 5144fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root} 5154fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 5164fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny RootTEST_F(KeymasterTest, ImportKeyPair_RSA_Success) { 5174fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* key_blob; 5184fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t key_blob_length; 5194fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 520139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(0, 5216e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root sDevice->import_keypair(sDevice, TEST_RSA_KEY_1, sizeof(TEST_RSA_KEY_1), 5224fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root &key_blob, &key_blob_length)) 5234fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should successfully import an RSA key"; 5244fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root UniqueKey key(&sDevice, key_blob, key_blob_length); 5258467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root 5268467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root uint8_t* x509_data; 5278467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root size_t x509_data_length; 528139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(0, 5298467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root sDevice->get_keypair_public(sDevice, key_blob, key_blob_length, 5308467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root &x509_data, &x509_data_length)) 5318467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root << "Should be able to retrieve RSA public key successfully"; 5328467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root UniqueBlob x509_blob(x509_data, x509_data_length); 5338467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root 5348467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root const unsigned char *tmp = static_cast<const unsigned char*>(x509_blob.get()); 5358467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root Unique_EVP_PKEY actual(d2i_PUBKEY((EVP_PKEY**) NULL, &tmp, 5368467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root static_cast<long>(x509_blob.length()))); 5378467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root 538139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(EVP_PKEY_type(actual.get()->type), EVP_PKEY_RSA) 5398467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root << "Generated key type should be of type RSA"; 5408467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root 5416e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root const unsigned char *expectedTmp = static_cast<const unsigned char*>(TEST_RSA_KEY_1); 5428467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root Unique_PKCS8_PRIV_KEY_INFO expectedPkcs8( 5438467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root d2i_PKCS8_PRIV_KEY_INFO((PKCS8_PRIV_KEY_INFO**) NULL, &expectedTmp, 5446e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root sizeof(TEST_RSA_KEY_1))); 5456e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 5466e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root Unique_EVP_PKEY expected(EVP_PKCS82PKEY(expectedPkcs8.get())); 5476e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 5486e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_EQ(1, EVP_PKEY_cmp(expected.get(), actual.get())) 5496e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "Expected and actual keys should match"; 5506e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root} 5516e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 5526e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny RootTEST_F(KeymasterTest, ImportKeyPair_EC_Success) { 5536e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root uint8_t* key_blob; 5546e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root size_t key_blob_length; 5556e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 5566e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_EQ(0, 5576e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root sDevice->import_keypair(sDevice, TEST_EC_KEY_1, sizeof(TEST_EC_KEY_1), 5586e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root &key_blob, &key_blob_length)) 5596e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "Should successfully import an EC key"; 5606e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueKey key(&sDevice, key_blob, key_blob_length); 5616e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 5626e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root uint8_t* x509_data; 5636e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root size_t x509_data_length; 5646e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_EQ(0, 5656e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root sDevice->get_keypair_public(sDevice, key_blob, key_blob_length, 5666e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root &x509_data, &x509_data_length)) 5676e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "Should be able to retrieve EC public key successfully"; 5686e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueBlob x509_blob(x509_data, x509_data_length); 5696e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 5706e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root const unsigned char *tmp = static_cast<const unsigned char*>(x509_blob.get()); 5716e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root Unique_EVP_PKEY actual(d2i_PUBKEY((EVP_PKEY**) NULL, &tmp, 5726e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root static_cast<long>(x509_blob.length()))); 5736e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 5746e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_EQ(EVP_PKEY_type(actual.get()->type), EVP_PKEY_EC) 5756e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "Generated key type should be of type EC"; 5766e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 5776e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root const unsigned char *expectedTmp = static_cast<const unsigned char*>(TEST_EC_KEY_1); 5786e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root Unique_PKCS8_PRIV_KEY_INFO expectedPkcs8( 5796e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root d2i_PKCS8_PRIV_KEY_INFO((PKCS8_PRIV_KEY_INFO**) NULL, &expectedTmp, 5806e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root sizeof(TEST_EC_KEY_1))); 5818467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root 5828467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root Unique_EVP_PKEY expected(EVP_PKCS82PKEY(expectedPkcs8.get())); 5838467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root 584139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(1, EVP_PKEY_cmp(expected.get(), actual.get())) 5858467a6d2918274295212d07fc6e3894f6bc5d623Kenny Root << "Expected and actual keys should match"; 5864fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root} 5874fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 5884fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny RootTEST_F(KeymasterTest, ImportKeyPair_BogusKey_Failure) { 5894fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* key_blob; 5904fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t key_blob_length; 5914fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 592139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(-1, 5934fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root sDevice->import_keypair(sDevice, BOGUS_KEY_1, sizeof(BOGUS_KEY_1), 5944fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root &key_blob, &key_blob_length)) 5954fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should not import an unknown key type"; 5964fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root} 5974fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 5984fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny RootTEST_F(KeymasterTest, ImportKeyPair_NullKey_Failure) { 5994fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* key_blob; 6004fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t key_blob_length; 6014fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 602139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(-1, 6034fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root sDevice->import_keypair(sDevice, NULL, 0, 6044fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root &key_blob, &key_blob_length)) 6054fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should not import a null key"; 6064fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root} 6074fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 6084fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny RootTEST_F(KeymasterTest, GetKeypairPublic_RSA_Success) { 6094fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* key_blob; 6104fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t key_blob_length; 6114fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 6126e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueReadOnlyBlob testKey(TEST_RSA_KEY_1, sizeof(TEST_RSA_KEY_1)); 613eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root ASSERT_TRUE(testKey.get() != NULL); 614eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 6154fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root ASSERT_EQ(0, 616eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root sDevice->import_keypair(sDevice, testKey.get(), testKey.length(), 6174fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root &key_blob, &key_blob_length)) 6184fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should successfully import an RSA key"; 6194fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root UniqueKey key(&sDevice, key_blob, key_blob_length); 6204fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 6214fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* x509_data; 6224fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t x509_data_length; 623139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(0, 6244fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root sDevice->get_keypair_public(sDevice, key_blob, key_blob_length, 6254fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root &x509_data, &x509_data_length)) 6264fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should be able to retrieve RSA public key successfully"; 6274fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root UniqueBlob x509_blob(x509_data, x509_data_length); 6284fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root} 6294fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 6306e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny RootTEST_F(KeymasterTest, GetKeypairPublic_EC_Success) { 6316e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root uint8_t* key_blob; 6326e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root size_t key_blob_length; 6336e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 6346e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueReadOnlyBlob testKey(TEST_EC_KEY_1, sizeof(TEST_EC_KEY_1)); 6356e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_TRUE(testKey.get() != NULL); 6366e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 6376e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_EQ(0, 6386e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root sDevice->import_keypair(sDevice, testKey.get(), testKey.length(), 6396e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root &key_blob, &key_blob_length)) 6406e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "Should successfully import an EC key"; 6416e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueKey key(&sDevice, key_blob, key_blob_length); 6426e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 6436e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root uint8_t* x509_data; 6446e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root size_t x509_data_length; 6456e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_EQ(0, 6466e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root sDevice->get_keypair_public(sDevice, key_blob, key_blob_length, 6476e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root &x509_data, &x509_data_length)) 6486e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "Should be able to retrieve EC public key successfully"; 6496e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueBlob x509_blob(x509_data, x509_data_length); 6506e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root} 6516e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 6526e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny RootTEST_F(KeymasterTest, GetKeypairPublic_NullKey_Failure) { 6534fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* key_blob; 6544fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t key_blob_length; 6554fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 6564fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* x509_data = NULL; 6574fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t x509_data_length; 658139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(-1, 6594fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root sDevice->get_keypair_public(sDevice, NULL, 0, 6604fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root &x509_data, &x509_data_length)) 6616e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "Should not be able to retrieve public key from null key"; 6624fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root UniqueBlob x509_blob(x509_data, x509_data_length); 6634fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root} 6644fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 6654fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny RootTEST_F(KeymasterTest, GetKeypairPublic_RSA_NullDestination_Failure) { 6664fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* key_blob; 6674fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t key_blob_length; 6684fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 6696e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueReadOnlyBlob testKey(TEST_RSA_KEY_1, sizeof(TEST_RSA_KEY_1)); 6706e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_TRUE(testKey.get() != NULL); 6716e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 6726e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_EQ(0, 6736e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root sDevice->import_keypair(sDevice, testKey.get(), testKey.length(), 6746e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root &key_blob, &key_blob_length)) 6756e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "Should successfully import an RSA key"; 6766e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueKey key(&sDevice, key_blob, key_blob_length); 6776e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 6786e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_EQ(-1, 6796e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root sDevice->get_keypair_public(sDevice, key.get(), key.length(), 6806e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root NULL, NULL)) 6816e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "Should not be able to succeed with NULL destination blob"; 6826e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root} 6836e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 6846e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny RootTEST_F(KeymasterTest, GetKeypairPublic_EC_NullDestination_Failure) { 6856e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root uint8_t* key_blob; 6866e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root size_t key_blob_length; 6876e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 6886e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueReadOnlyBlob testKey(TEST_EC_KEY_1, sizeof(TEST_EC_KEY_1)); 689eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root ASSERT_TRUE(testKey.get() != NULL); 690eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 6914fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root ASSERT_EQ(0, 692eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root sDevice->import_keypair(sDevice, testKey.get(), testKey.length(), 6934fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root &key_blob, &key_blob_length)) 6944fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should successfully import an RSA key"; 6954fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root UniqueKey key(&sDevice, key_blob, key_blob_length); 6964fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 697139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(-1, 6984fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root sDevice->get_keypair_public(sDevice, key.get(), key.length(), 6994fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root NULL, NULL)) 7004fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should not be able to succeed with NULL destination blob"; 7014fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root} 7024fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 7034fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny RootTEST_F(KeymasterTest, DeleteKeyPair_RSA_Success) { 7044fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* key_blob; 7054fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t key_blob_length; 7064fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 7076e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueReadOnlyBlob testKey(TEST_RSA_KEY_1, sizeof(TEST_RSA_KEY_1)); 708eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root ASSERT_TRUE(testKey.get() != NULL); 709eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 710139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(0, 711eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root sDevice->import_keypair(sDevice, testKey.get(), testKey.length(), 7124fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root &key_blob, &key_blob_length)) 7134fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should successfully import an RSA key"; 7144fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root UniqueKey key(&sDevice, key_blob, key_blob_length); 7154fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root} 7164fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 7174fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny RootTEST_F(KeymasterTest, DeleteKeyPair_RSA_DoubleDelete_Failure) { 7184fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* key_blob; 7194fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t key_blob_length; 7204fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 7216e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueReadOnlyBlob testKey(TEST_RSA_KEY_1, sizeof(TEST_RSA_KEY_1)); 722eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root ASSERT_TRUE(testKey.get() != NULL); 723eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 7244fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root /* 7254fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * This is only run if the module indicates it implements key deletion 7264fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * by implementing delete_keypair. 7274fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root */ 7284fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root if (sDevice->delete_keypair != NULL) { 7294fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root ASSERT_EQ(0, 730eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root sDevice->import_keypair(sDevice, testKey.get(), testKey.length(), 7314fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root &key_blob, &key_blob_length)) 7324fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should successfully import an RSA key"; 7334fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root UniqueBlob blob(key_blob, key_blob_length); 7344fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 735139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(0, sDevice->delete_keypair(sDevice, key_blob, key_blob_length)) 7364fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should delete key after import"; 7374fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 738139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(-1, sDevice->delete_keypair(sDevice, key_blob, key_blob_length)) 7394fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should not be able to delete key twice"; 7404fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root } 7414fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root} 7424fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 7434fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny RootTEST_F(KeymasterTest, DeleteKeyPair_RSA_NullKey_Failure) { 7444fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root /* 7454fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * This is only run if the module indicates it implements key deletion 7464fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * by implementing delete_keypair. 7474fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root */ 7484fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root if (sDevice->delete_keypair != NULL) { 749139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(-1, sDevice->delete_keypair(sDevice, NULL, 0)) 7504fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should not be able to delete null key"; 7514fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root } 7524fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root} 7534fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 7544fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root/* 7554fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * DER-encoded PKCS#8 format RSA key. Generated using: 7564fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * 7574fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * openssl genrsa 512 | openssl pkcs8 -topk8 -nocrypt -outform der | recode ../x1 7584fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root */ 7596e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Rootstatic uint8_t TEST_SIGN_RSA_KEY_1[] = { 7604fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x30, 0x82, 0x01, 0x56, 0x02, 0x01, 0x00, 0x30, 0x0D, 0x06, 0x09, 0x2A, 7614fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 7624fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x01, 0x40, 0x30, 0x82, 0x01, 0x3C, 0x02, 0x01, 0x00, 0x02, 0x41, 0x00, 7634fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xBD, 0xC0, 0x7F, 0xEF, 0x75, 0x1D, 0x63, 0x2A, 0xD0, 0x9A, 0x26, 0xE5, 7644fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x5B, 0xB9, 0x84, 0x7C, 0xE5, 0xC7, 0xE7, 0xDE, 0xFE, 0xB6, 0x54, 0xD9, 7654fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xF0, 0x9B, 0xC2, 0xCF, 0x36, 0xDA, 0xE5, 0x4D, 0xC5, 0xD9, 0x25, 0x78, 7664fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xBD, 0x55, 0x05, 0xBD, 0x86, 0xFB, 0x37, 0x15, 0x33, 0x42, 0x52, 0xED, 7674fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xE5, 0xCD, 0xCB, 0xB7, 0xA2, 0x51, 0xFA, 0x36, 0xE9, 0x9C, 0x2E, 0x5D, 7684fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xE3, 0xA5, 0x1F, 0x01, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x41, 0x00, 7694fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x96, 0x71, 0xDE, 0xBD, 0x83, 0x94, 0x96, 0x40, 0xA6, 0xFD, 0xE1, 0xA2, 7704fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xED, 0xD3, 0xAC, 0x28, 0xBE, 0xA2, 0x7D, 0xC3, 0xFF, 0x1D, 0x9F, 0x2E, 7714fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xE0, 0xA7, 0x0E, 0x90, 0xEE, 0x44, 0x25, 0x92, 0xE3, 0x54, 0xDD, 0x55, 7724fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xA3, 0xEF, 0x42, 0xF5, 0x52, 0x55, 0x41, 0x47, 0x5E, 0x00, 0xFB, 0x8B, 7734fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x47, 0x5E, 0x45, 0x49, 0xEA, 0x3D, 0x2C, 0xFD, 0x9F, 0xEC, 0xC8, 0x4E, 7744fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x4E, 0x86, 0x90, 0x31, 0x02, 0x21, 0x00, 0xE6, 0xA5, 0x55, 0xB3, 0x64, 7754fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xAB, 0x90, 0x5E, 0xA2, 0xF5, 0x6B, 0x21, 0x4B, 0x15, 0xD6, 0x4A, 0xB6, 7764fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x60, 0x24, 0x95, 0x65, 0xA2, 0xBE, 0xBA, 0x2A, 0x73, 0xFB, 0xFF, 0x2C, 7774fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x61, 0x88, 0x9D, 0x02, 0x21, 0x00, 0xD2, 0x9C, 0x5B, 0xFE, 0x82, 0xA5, 7784fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xFC, 0x52, 0x6A, 0x29, 0x38, 0xDB, 0x22, 0x3B, 0xEB, 0x74, 0x3B, 0xCA, 7794fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xB4, 0xDD, 0x1D, 0xE4, 0x48, 0x60, 0x70, 0x19, 0x9B, 0x81, 0xC1, 0x83, 7804fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x28, 0xB5, 0x02, 0x21, 0x00, 0x89, 0x2D, 0xFE, 0xF9, 0xF2, 0xBF, 0x43, 7814fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xDF, 0xB5, 0xA6, 0xA8, 0x30, 0x26, 0x1B, 0x77, 0xD7, 0xF9, 0xFE, 0xD6, 7824fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xE3, 0x70, 0x8E, 0xCA, 0x47, 0xA9, 0xA6, 0x50, 0x54, 0x25, 0xCE, 0x60, 7834fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xD5, 0x02, 0x21, 0x00, 0xBE, 0x5A, 0xF8, 0x82, 0xE6, 0xCE, 0xE3, 0x6A, 7844fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x11, 0xED, 0xC4, 0x27, 0xBB, 0x9F, 0x70, 0xC6, 0x93, 0xAC, 0x39, 0x20, 7854fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x89, 0x7D, 0xE5, 0x34, 0xD4, 0xDD, 0x30, 0x42, 0x6D, 0x07, 0x00, 0xE9, 7864fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x02, 0x20, 0x05, 0x91, 0xEF, 0x12, 0xD2, 0xD3, 0x6A, 0xD2, 0x96, 0x6B, 7874fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x10, 0x62, 0xF9, 0xBA, 0xA4, 0x91, 0x48, 0x84, 0x40, 0x61, 0x67, 0x80, 7884fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x68, 0x68, 0xC8, 0x60, 0xB3, 0x66, 0xC8, 0xF9, 0x08, 0x9A, 7894fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root}; 7904fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 7914fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root/* 7926e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root * DER-encoded PKCS#8 format EC key. Generated using: 7936e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root * 7946e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root * openssl ecparam -name prime256v1 -genkey -noout | openssl pkcs8 -topk8 -nocrypt -outform der | recode ../x1 7956e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root */ 7966e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Rootstatic uint8_t TEST_SIGN_EC_KEY_1[] = { 7976e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 0x30, 0x81, 0x87, 0x02, 0x01, 0x00, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 7986e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 7996e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 0x03, 0x01, 0x07, 0x04, 0x6D, 0x30, 0x6B, 0x02, 0x01, 0x01, 0x04, 0x20, 8006e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 0x9E, 0x66, 0x11, 0x6A, 0x89, 0xF5, 0x78, 0x57, 0xF3, 0x35, 0xA2, 0x46, 8016e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 0x09, 0x06, 0x4B, 0x4D, 0x81, 0xEC, 0xD3, 0x9B, 0x0A, 0xC4, 0x68, 0x06, 8026e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 0xB8, 0x42, 0x24, 0x5E, 0x74, 0x2C, 0x62, 0x79, 0xA1, 0x44, 0x03, 0x42, 8036e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 0x00, 0x04, 0x35, 0xB5, 0x9A, 0x5C, 0xE5, 0x52, 0x35, 0xF2, 0x10, 0x6C, 8046e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 0xD9, 0x98, 0x67, 0xED, 0x5E, 0xCB, 0x6B, 0xB8, 0x96, 0x5E, 0x54, 0x7C, 8056e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 0x34, 0x2A, 0xA3, 0x3B, 0xF3, 0xD1, 0x39, 0x48, 0x36, 0x7A, 0xEA, 0xD8, 8066e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 0xCA, 0xDD, 0x40, 0x8F, 0xE9, 0xE0, 0x95, 0x2E, 0x3F, 0x95, 0x0F, 0x14, 8076e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 0xD6, 0x14, 0x78, 0xB5, 0xAD, 0x17, 0xD2, 0x5A, 0x41, 0x96, 0x99, 0x20, 8086e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 0xC7, 0x5B, 0x0F, 0x60, 0xFD, 0xBA 8096e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root}; 8106e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 8116e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root/* 8124fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * PKCS#1 v1.5 padded raw "Hello, world" Can be generated be generated by verifying 8134fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * the signature below in no padding mode: 8144fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * 8154fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * openssl rsautl -keyform der -inkey rsa.der -raw -verify -in test.sig 8164fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root */ 8174fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Rootstatic uint8_t TEST_SIGN_DATA_1[] = { 8184fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 8194fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 8204fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 8214fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 8224fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xFF, 0xFF, 0xFF, 0x00, 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x2C, 0x20, 0x77, 8234fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x6F, 0x72, 0x6C, 0x64, 8244fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root}; 8254fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 8264fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root/* 8276e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root * Signature of TEST_SIGN_DATA_1 using TEST_SIGN_RSA_KEY_1. Generated using: 8284fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * 8294fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * echo 'Hello, world' | openssl rsautl -keyform der -inkey rsa.der -sign | recode ../x1 8304fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root */ 8316e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Rootstatic uint8_t TEST_SIGN_RSA_SIGNATURE_1[] = { 8324fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xA4, 0xBB, 0x76, 0x87, 0xFE, 0x61, 0x0C, 0x9D, 0xD6, 0xFF, 0x4B, 0x76, 8334fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x96, 0x08, 0x36, 0x23, 0x11, 0xC6, 0x44, 0x3F, 0x88, 0x77, 0x97, 0xB2, 8344fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xA8, 0x3B, 0xFB, 0x9C, 0x3C, 0xD3, 0x20, 0x65, 0xFD, 0x26, 0x3B, 0x2A, 8354fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xB8, 0xB6, 0xD4, 0xDC, 0x91, 0xF7, 0xE2, 0xDE, 0x4D, 0xF7, 0x0E, 0xB9, 8364fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x72, 0xA7, 0x29, 0x72, 0x82, 0x12, 0x7C, 0x53, 0x23, 0x21, 0xC4, 0xFF, 8374fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x79, 0xE4, 0x91, 0x40, 8384fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root}; 8394fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 8404fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root/* 8416e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root * Identical to TEST_SIGN_RSA_SIGNATURE_1 except the last octet is '1' instead of '0' 8424fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root * This should fail any test. 8434fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root */ 8444fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Rootstatic uint8_t TEST_SIGN_SIGNATURE_BOGUS_1[] = { 8454fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xA4, 0xBB, 0x76, 0x87, 0xFE, 0x61, 0x0C, 0x9D, 0xD6, 0xFF, 0x4B, 0x76, 8464fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x96, 0x08, 0x36, 0x23, 0x11, 0xC6, 0x44, 0x3F, 0x88, 0x77, 0x97, 0xB2, 8474fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xA8, 0x3B, 0xFB, 0x9C, 0x3C, 0xD3, 0x20, 0x65, 0xFD, 0x26, 0x3B, 0x2A, 8484fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0xB8, 0xB6, 0xD4, 0xDC, 0x91, 0xF7, 0xE2, 0xDE, 0x4D, 0xF7, 0x0E, 0xB9, 8494fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x72, 0xA7, 0x29, 0x72, 0x82, 0x12, 0x7C, 0x53, 0x23, 0x21, 0xC4, 0xFF, 8504fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 0x79, 0xE4, 0x91, 0x41, 8514fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root}; 8524fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 8534fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny RootTEST_F(KeymasterTest, SignData_RSA_Raw_Success) { 8544fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* key_blob; 8554fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t key_blob_length; 8564fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 8576e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueReadOnlyBlob testKey(TEST_SIGN_RSA_KEY_1, sizeof(TEST_SIGN_RSA_KEY_1)); 858eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root ASSERT_TRUE(testKey.get() != NULL); 859eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 8604fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root ASSERT_EQ(0, 861eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root sDevice->import_keypair(sDevice, testKey.get(), testKey.length(), 8624fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root &key_blob, &key_blob_length)) 8634fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should successfully import an RSA key"; 8644fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root UniqueKey key(&sDevice, key_blob, key_blob_length); 8654fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 8664fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root keymaster_rsa_sign_params_t params = { 8671aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .digest_type = DIGEST_NONE, 8681aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .padding_type = PADDING_NONE, 8694fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root }; 8704fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 8714fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* sig; 8724fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t sig_length; 8734fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 874eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root UniqueReadOnlyBlob testData(TEST_SIGN_DATA_1, sizeof(TEST_SIGN_DATA_1)); 875eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root ASSERT_TRUE(testData.get() != NULL); 876eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 877139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(0, 8784fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root sDevice->sign_data(sDevice, ¶ms, key_blob, key_blob_length, 879eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root testData.get(), testData.length(), 8804fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root &sig, &sig_length)) 8814fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should sign data successfully"; 8824fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root UniqueBlob sig_blob(sig, sig_length); 8834fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 8846e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueBlob expected_sig(TEST_SIGN_RSA_SIGNATURE_1, sizeof(TEST_SIGN_RSA_SIGNATURE_1)); 8854fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 886139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(expected_sig, sig_blob) 8874fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Generated signature should match expected signature"; 8884fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 8894fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root // The expected signature is actually stack data, so don't let it try to free. 8904fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* unused __attribute__((unused)) = expected_sig.release(); 8914fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root} 8924fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 8936e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny RootTEST_F(KeymasterTest, SignData_EC_Success) { 8946e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root uint8_t* key_blob; 8956e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root size_t key_blob_length; 8966e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 8976e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueReadOnlyBlob testKey(TEST_SIGN_EC_KEY_1, sizeof(TEST_SIGN_EC_KEY_1)); 8986e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_TRUE(testKey.get() != NULL); 8996e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 9006e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_EQ(0, 9016e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root sDevice->import_keypair(sDevice, testKey.get(), testKey.length(), 9026e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root &key_blob, &key_blob_length)) 9036e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "Should successfully import an EC key"; 9046e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueKey key(&sDevice, key_blob, key_blob_length); 9056e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 9066e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root keymaster_ec_sign_params_t params = { 9071aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .digest_type = DIGEST_NONE, 9086e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root }; 9096e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 9106e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root uint8_t* sig; 9116e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root size_t sig_length; 9126e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 9136e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueReadOnlyBlob testData(TEST_SIGN_DATA_1, sizeof(TEST_SIGN_DATA_1)); 9146e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_TRUE(testData.get() != NULL); 9156e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 9166e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_EQ(0, 9176e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root sDevice->sign_data(sDevice, ¶ms, key_blob, key_blob_length, 9186e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root testData.get(), testData.length(), 9196e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root &sig, &sig_length)) 9206e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "Should sign data successfully"; 9216e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueBlob sig_blob(sig, sig_length); 9226e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 9236e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root uint8_t* x509_data; 9246e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root size_t x509_data_length; 9256e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_EQ(0, 9266e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root sDevice->get_keypair_public(sDevice, key_blob, key_blob_length, 9276e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root &x509_data, &x509_data_length)) 9286e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "Should be able to retrieve RSA public key successfully"; 9296e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueBlob x509_blob(x509_data, x509_data_length); 9306e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 9316e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root const unsigned char *tmp = static_cast<const unsigned char*>(x509_blob.get()); 9326e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root Unique_EVP_PKEY expected(d2i_PUBKEY((EVP_PKEY**) NULL, &tmp, 9336e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root static_cast<long>(x509_blob.length()))); 9346e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 9356e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root Unique_EC_KEY ecKey(EVP_PKEY_get1_EC_KEY(expected.get())); 9366e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 9376e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_EQ(1, ECDSA_verify(0, testData.get(), testData.length(), sig_blob.get(), sig_blob.length(), ecKey.get())) 9386e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "Signature should verify"; 9396e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root} 9406e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 9414fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny RootTEST_F(KeymasterTest, SignData_RSA_Raw_InvalidSizeInput_Failure) { 9424fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* key_blob; 9434fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t key_blob_length; 9444fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 9456e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueReadOnlyBlob testKey(TEST_SIGN_RSA_KEY_1, sizeof(TEST_SIGN_RSA_KEY_1)); 946eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root ASSERT_TRUE(testKey.get() != NULL); 947eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 9484fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root ASSERT_EQ(0, 949eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root sDevice->import_keypair(sDevice, testKey.get(), testKey.length(), 9504fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root &key_blob, &key_blob_length)) 9514fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should successfully import an RSA key"; 9524fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root UniqueKey key(&sDevice, key_blob, key_blob_length); 9534fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 9544fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root keymaster_rsa_sign_params_t params = { 9551aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .digest_type = DIGEST_NONE, 9561aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .padding_type = PADDING_NONE, 9574fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root }; 9584fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 9594fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* sig; 9604fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t sig_length; 9614fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 9626e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueReadOnlyBlob testData(TEST_RSA_KEY_1, sizeof(TEST_RSA_KEY_1)); 963eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root ASSERT_TRUE(testData.get() != NULL); 964eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 965139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(-1, 9664fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root sDevice->sign_data(sDevice, ¶ms, key_blob, key_blob_length, 967eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root testData.get(), testData.length(), 9684fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root &sig, &sig_length)) 9694fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should not be able to do raw signature on incorrect size data"; 9704fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root} 9714fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 9724fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny RootTEST_F(KeymasterTest, SignData_RSA_Raw_NullKey_Failure) { 9734fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root keymaster_rsa_sign_params_t params = { 9741aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .digest_type = DIGEST_NONE, 9751aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .padding_type = PADDING_NONE, 9764fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root }; 9774fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 9784fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* sig; 9794fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t sig_length; 9804fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 9816e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueReadOnlyBlob testData(TEST_RSA_KEY_1, sizeof(TEST_RSA_KEY_1)); 982eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root ASSERT_TRUE(testData.get() != NULL); 983eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 984139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(-1, 9854fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root sDevice->sign_data(sDevice, ¶ms, NULL, 0, 986eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root testData.get(), testData.length(), 9874fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root &sig, &sig_length)) 9884fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should not be able to do raw signature on incorrect size data"; 9894fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root} 9904fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 9914fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny RootTEST_F(KeymasterTest, SignData_RSA_Raw_NullInput_Failure) { 9924fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* key_blob; 9934fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t key_blob_length; 9944fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 9956e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueReadOnlyBlob testKey(TEST_SIGN_RSA_KEY_1, sizeof(TEST_SIGN_RSA_KEY_1)); 996eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root ASSERT_TRUE(testKey.get() != NULL); 997eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 9984fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root ASSERT_EQ(0, 999eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root sDevice->import_keypair(sDevice, testKey.get(), testKey.length(), 10004fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root &key_blob, &key_blob_length)) 10014fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should successfully import an RSA key"; 10024fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root UniqueKey key(&sDevice, key_blob, key_blob_length); 10034fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 10044fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root keymaster_rsa_sign_params_t params = { 10051aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .digest_type = DIGEST_NONE, 10061aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .padding_type = PADDING_NONE, 10074fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root }; 10084fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 10094fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* sig; 10104fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t sig_length; 10114fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 1012139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(-1, 10134fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root sDevice->sign_data(sDevice, ¶ms, key_blob, key_blob_length, 10144fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root NULL, 0, 10154fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root &sig, &sig_length)) 10164fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should error when input data is null"; 10174fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root} 10184fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 10194fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny RootTEST_F(KeymasterTest, SignData_RSA_Raw_NullOutput_Failure) { 10204fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* key_blob; 10214fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t key_blob_length; 10224fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 10236e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueReadOnlyBlob testKey(TEST_SIGN_RSA_KEY_1, sizeof(TEST_SIGN_RSA_KEY_1)); 1024eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root ASSERT_TRUE(testKey.get() != NULL); 1025eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 10264fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root ASSERT_EQ(0, 1027eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root sDevice->import_keypair(sDevice, testKey.get(), testKey.length(), 10284fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root &key_blob, &key_blob_length)) 10294fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should successfully import an RSA key"; 10304fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root UniqueKey key(&sDevice, key_blob, key_blob_length); 10314fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 10324fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root keymaster_rsa_sign_params_t params = { 10331aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .digest_type = DIGEST_NONE, 10341aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .padding_type = PADDING_NONE, 10354fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root }; 10364fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 10374fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* sig; 10384fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t sig_length; 10394fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 10406e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueReadOnlyBlob testData(TEST_RSA_KEY_1, sizeof(TEST_RSA_KEY_1)); 1041eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root ASSERT_TRUE(testData.get() != NULL); 1042eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 1043139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(-1, 10444fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root sDevice->sign_data(sDevice, ¶ms, key_blob, key_blob_length, 1045eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root testData.get(), testData.length(), 10464fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root NULL, NULL)) 10474fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should error when output is null"; 10484fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root} 10494fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 10504fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny RootTEST_F(KeymasterTest, VerifyData_RSA_Raw_Success) { 10514fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* key_blob; 10524fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t key_blob_length; 10534fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 10546e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueReadOnlyBlob testKey(TEST_SIGN_RSA_KEY_1, sizeof(TEST_SIGN_RSA_KEY_1)); 1055eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root ASSERT_TRUE(testKey.get() != NULL); 1056eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 10574fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root ASSERT_EQ(0, 1058eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root sDevice->import_keypair(sDevice, testKey.get(), testKey.length(), 10594fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root &key_blob, &key_blob_length)) 10604fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should successfully import an RSA key"; 10614fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root UniqueKey key(&sDevice, key_blob, key_blob_length); 10624fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 10634fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root keymaster_rsa_sign_params_t params = { 10641aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .digest_type = DIGEST_NONE, 10651aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .padding_type = PADDING_NONE, 10664fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root }; 10674fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 1068eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root UniqueReadOnlyBlob testData(TEST_SIGN_DATA_1, sizeof(TEST_SIGN_DATA_1)); 1069eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root ASSERT_TRUE(testData.get() != NULL); 1070eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 10716e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueReadOnlyBlob testSig(TEST_SIGN_RSA_SIGNATURE_1, sizeof(TEST_SIGN_RSA_SIGNATURE_1)); 1072eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root ASSERT_TRUE(testSig.get() != NULL); 1073eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 1074139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(0, 10754fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root sDevice->verify_data(sDevice, ¶ms, key_blob, key_blob_length, 1076eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root testData.get(), testData.length(), 1077eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root testSig.get(), testSig.length())) 10784fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should verify data successfully"; 10794fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root} 10804fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 10816e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny RootTEST_F(KeymasterTest, VerifyData_EC_Raw_Success) { 10826e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root uint8_t* key_blob; 10836e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root size_t key_blob_length; 10846e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 10856e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueReadOnlyBlob testKey(TEST_SIGN_EC_KEY_1, sizeof(TEST_SIGN_EC_KEY_1)); 10866e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_TRUE(testKey.get() != NULL); 10876e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 10886e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_EQ(0, 10896e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root sDevice->import_keypair(sDevice, testKey.get(), testKey.length(), 10906e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root &key_blob, &key_blob_length)) 10916e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "Should successfully import an RSA key"; 10926e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueKey key(&sDevice, key_blob, key_blob_length); 10936e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 10946e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root keymaster_ec_sign_params_t params = { 10951aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .digest_type = DIGEST_NONE, 10966e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root }; 10976e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 10986e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root uint8_t* sig; 10996e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root size_t sig_length; 11006e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 11016e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueReadOnlyBlob testData(TEST_SIGN_DATA_1, sizeof(TEST_SIGN_DATA_1)); 11026e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_TRUE(testData.get() != NULL); 11036e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 11046e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_EQ(0, 11056e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root sDevice->sign_data(sDevice, ¶ms, key_blob, key_blob_length, 11066e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root testData.get(), testData.length(), 11076e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root &sig, &sig_length)) 11086e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "Should sign data successfully"; 11096e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueBlob sig_blob(sig, sig_length); 11106e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 11116e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_EQ(0, 11126e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root sDevice->verify_data(sDevice, ¶ms, key_blob, key_blob_length, 11136e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root testData.get(), testData.length(), 11146e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root sig_blob.get(), sig_blob.length())) 11156e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "Should verify data successfully"; 11166e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root} 11176e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 11184fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny RootTEST_F(KeymasterTest, VerifyData_RSA_Raw_BadSignature_Failure) { 11194fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* key_blob; 11204fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t key_blob_length; 11214fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 11226e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueReadOnlyBlob testKey(TEST_SIGN_RSA_KEY_1, sizeof(TEST_SIGN_RSA_KEY_1)); 1123eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root ASSERT_TRUE(testKey.get() != NULL); 1124eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 11254fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root ASSERT_EQ(0, 1126eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root sDevice->import_keypair(sDevice, testKey.get(), testKey.length(), 11274fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root &key_blob, &key_blob_length)) 11284fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should successfully import an RSA key"; 11294fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root UniqueKey key(&sDevice, key_blob, key_blob_length); 11304fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 11314fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root keymaster_rsa_sign_params_t params = { 11321aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .digest_type = DIGEST_NONE, 11331aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .padding_type = PADDING_NONE, 11344fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root }; 11354fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 1136139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(-1, 11374fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root sDevice->verify_data(sDevice, ¶ms, key_blob, key_blob_length, 11384fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root TEST_SIGN_DATA_1, sizeof(TEST_SIGN_DATA_1), 11394fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root TEST_SIGN_SIGNATURE_BOGUS_1, sizeof(TEST_SIGN_SIGNATURE_BOGUS_1))) 11404fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should sign data successfully"; 11414fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root} 11424fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 11436e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny RootTEST_F(KeymasterTest, VerifyData_EC_Raw_BadSignature_Failure) { 11446e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root uint8_t* key_blob; 11456e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root size_t key_blob_length; 11466e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 11476e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueReadOnlyBlob testKey(TEST_SIGN_EC_KEY_1, sizeof(TEST_SIGN_EC_KEY_1)); 11486e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_TRUE(testKey.get() != NULL); 11496e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 11506e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_EQ(0, 11516e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root sDevice->import_keypair(sDevice, testKey.get(), testKey.length(), 11526e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root &key_blob, &key_blob_length)) 11536e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "Should successfully import an RSA key"; 11546e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueKey key(&sDevice, key_blob, key_blob_length); 11556e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 11566e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root keymaster_ec_sign_params_t params = { 11571aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .digest_type = DIGEST_NONE, 11586e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root }; 11596e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 11606e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root ASSERT_EQ(-1, 11616e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root sDevice->verify_data(sDevice, ¶ms, key_blob, key_blob_length, 11626e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root TEST_SIGN_DATA_1, sizeof(TEST_SIGN_DATA_1), 11636e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root TEST_SIGN_SIGNATURE_BOGUS_1, sizeof(TEST_SIGN_SIGNATURE_BOGUS_1))) 11646e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root << "Should sign data successfully"; 11656e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root} 11666e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root 11674fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny RootTEST_F(KeymasterTest, VerifyData_RSA_Raw_NullKey_Failure) { 11684fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root keymaster_rsa_sign_params_t params = { 11691aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .digest_type = DIGEST_NONE, 11701aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .padding_type = PADDING_NONE, 11714fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root }; 11724fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 1173eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root UniqueReadOnlyBlob testData(TEST_SIGN_DATA_1, sizeof(TEST_SIGN_DATA_1)); 1174eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root ASSERT_TRUE(testData.get() != NULL); 1175eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 1176eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root UniqueReadOnlyBlob testSig(TEST_SIGN_SIGNATURE_BOGUS_1, sizeof(TEST_SIGN_SIGNATURE_BOGUS_1)); 1177eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root ASSERT_TRUE(testSig.get() != NULL); 1178eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 1179139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(-1, 11804fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root sDevice->verify_data(sDevice, ¶ms, NULL, 0, 1181eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root testData.get(), testData.length(), 1182eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root testSig.get(), testSig.length())) 11834fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should fail when key is null"; 11844fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root} 11854fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 11864fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny RootTEST_F(KeymasterTest, VerifyData_RSA_NullInput_Failure) { 11874fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* key_blob; 11884fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t key_blob_length; 11894fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 11904fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root ASSERT_EQ(0, 11916e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root sDevice->import_keypair(sDevice, TEST_SIGN_RSA_KEY_1, sizeof(TEST_SIGN_RSA_KEY_1), 11924fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root &key_blob, &key_blob_length)) 11934fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should successfully import an RSA key"; 11944fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root UniqueKey key(&sDevice, key_blob, key_blob_length); 11954fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 11964fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root keymaster_rsa_sign_params_t params = { 11971aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .digest_type = DIGEST_NONE, 11981aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .padding_type = PADDING_NONE, 11994fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root }; 12004fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 12016e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueReadOnlyBlob testSig(TEST_SIGN_RSA_SIGNATURE_1, sizeof(TEST_SIGN_RSA_SIGNATURE_1)); 1202eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root ASSERT_TRUE(testSig.get() != NULL); 1203eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 1204139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(-1, 12054fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root sDevice->verify_data(sDevice, ¶ms, key_blob, key_blob_length, 12064fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root NULL, 0, 1207eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root testSig.get(), testSig.length())) 12084fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should fail on null input"; 12094fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root} 12104fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 12114fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny RootTEST_F(KeymasterTest, VerifyData_RSA_NullSignature_Failure) { 12124fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root uint8_t* key_blob; 12134fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root size_t key_blob_length; 12144fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 12156e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueReadOnlyBlob testKey(TEST_SIGN_RSA_KEY_1, sizeof(TEST_SIGN_RSA_KEY_1)); 1216eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root ASSERT_TRUE(testKey.get() != NULL); 1217eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 12184fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root ASSERT_EQ(0, 1219eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root sDevice->import_keypair(sDevice, testKey.get(), testKey.length(), 12204fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root &key_blob, &key_blob_length)) 12214fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should successfully import an RSA key"; 12224fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root UniqueKey key(&sDevice, key_blob, key_blob_length); 12234fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 12244fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root keymaster_rsa_sign_params_t params = { 12251aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .digest_type = DIGEST_NONE, 12261aa58f9ef95e0c15bd3e41bb987dd6d8f48aa978Andreas Gampe .padding_type = PADDING_NONE, 12274fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root }; 12284fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 1229eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root UniqueReadOnlyBlob testData(TEST_SIGN_DATA_1, sizeof(TEST_SIGN_DATA_1)); 1230eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root ASSERT_TRUE(testData.get() != NULL); 1231eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 1232139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(-1, 12334fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root sDevice->verify_data(sDevice, ¶ms, key.get(), key.length(), 1234eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root testData.get(), testData.length(), 12354fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root NULL, 0)) 12364fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root << "Should fail on null signature"; 12374fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root} 12384fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root 12398ae65e71996ce871cda97cc9114cb5211cb273bfKenny RootTEST_F(KeymasterTest, EraseAll_Success) { 12408ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root uint8_t *key1_blob, *key2_blob; 12418ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root size_t key1_blob_length, key2_blob_length; 12428ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root 12438ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root // Only test this if the device says it supports delete_all 12448ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root if (sDevice->delete_all == NULL) { 12458ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root return; 12468ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root } 12478ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root 12486e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueReadOnlyBlob testKey(TEST_SIGN_RSA_KEY_1, sizeof(TEST_SIGN_RSA_KEY_1)); 1249eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root ASSERT_TRUE(testKey.get() != NULL); 1250eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 12518ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root ASSERT_EQ(0, 1252eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root sDevice->import_keypair(sDevice, testKey.get(), testKey.length(), 12538ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root &key1_blob, &key1_blob_length)) 12548ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root << "Should successfully import an RSA key"; 12558ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root UniqueKey key1(&sDevice, key1_blob, key1_blob_length); 12568ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root 12576e1683f5d508a4c1ff761a9a3508619ac5ac6ed7Kenny Root UniqueReadOnlyBlob testKey2(TEST_SIGN_RSA_KEY_1, sizeof(TEST_SIGN_RSA_KEY_1)); 1258eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root ASSERT_TRUE(testKey2.get() != NULL); 1259eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root 12608ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root ASSERT_EQ(0, 1261eca8b3cdf0f906062285d03a0d08e3104625df94Kenny Root sDevice->import_keypair(sDevice, testKey2.get(), testKey2.length(), 12628ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root &key2_blob, &key2_blob_length)) 12638ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root << "Should successfully import an RSA key"; 12648ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root UniqueKey key2(&sDevice, key2_blob, key2_blob_length); 12658ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root 1266139d44f26d21f9943c473aa1391ce419c5bd442aKenny Root ASSERT_EQ(0, sDevice->delete_all(sDevice)) 12678ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root << "Should erase all keys"; 12688ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root 12698ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root key1.reset(); 12708ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root 12718ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root uint8_t* x509_data; 12728ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root size_t x509_data_length; 12738ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root ASSERT_EQ(-1, 12748ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root sDevice->get_keypair_public(sDevice, key1_blob, key1_blob_length, 12758ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root &x509_data, &x509_data_length)) 12768ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root << "Should be able to retrieve RSA public key 1 successfully"; 12778ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root 12788ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root ASSERT_EQ(-1, 12798ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root sDevice->get_keypair_public(sDevice, key2_blob, key2_blob_length, 12808ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root &x509_data, &x509_data_length)) 12818ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root << "Should be able to retrieve RSA public key 2 successfully"; 12828ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root} 12838ae65e71996ce871cda97cc9114cb5211cb273bfKenny Root 12844fd0db7cd15dc01d27d928feb5c7122c908fc70cKenny Root} 1285