1 /* 2 * Copyright (C) 2020 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #pragma once 18 19 #include <functional> 20 #include <string> 21 #include <vector> 22 23 #include <android-base/result.h> 24 25 // Information extracted from a certificate. 26 struct CertInfo { 27 std::string subjectCn; 28 std::vector<uint8_t> subjectRsaPublicKey; 29 }; 30 31 // Subjects of certificates we issue. 32 struct CertSubject { 33 const char* commonName; 34 unsigned serialNumber; 35 }; 36 37 // This is our self-signed cert. 38 inline const CertSubject kRootSubject{"ODS", 1}; 39 40 android::base::Result<void> createSelfSignedCertificate( 41 const std::vector<uint8_t>& publicKey, 42 const std::function<android::base::Result<std::string>(const std::string&)>& signFunction, 43 const std::string& path); 44 45 android::base::Result<std::vector<uint8_t>> 46 extractPublicKeyFromX509(const std::vector<uint8_t>& x509); 47 android::base::Result<std::vector<uint8_t>> extractPublicKeyFromX509(const std::string& path); 48 49 android::base::Result<void> verifySignature(const std::string& message, 50 const std::string& signature, 51 const std::vector<uint8_t>& publicKey); 52