From a2186fd64a2d38bbba8602bef630c7685a7cc9ca Mon Sep 17 00:00:00 2001 From: AnotherTest Date: Thu, 29 Oct 2020 11:53:13 +0330 Subject: [PATCH] LibTLS: Move out Certificate to its own header file --- Libraries/LibTLS/Certificate.h | 82 ++++++++++++++++++++++++++++++++++ Libraries/LibTLS/TLSv12.h | 42 +---------------- 2 files changed, 83 insertions(+), 41 deletions(-) create mode 100644 Libraries/LibTLS/Certificate.h diff --git a/Libraries/LibTLS/Certificate.h b/Libraries/LibTLS/Certificate.h new file mode 100644 index 00000000000..e5f67942a9c --- /dev/null +++ b/Libraries/LibTLS/Certificate.h @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2020, the SerenityOS developers. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#pragma once + +#include +#include +#include +#include +#include + +namespace TLS { + +enum class CertificateKeyAlgorithm { + Unsupported = 0x00, + RSA_RSA = 0x01, + RSA_MD5 = 0x04, + RSA_SHA1 = 0x05, + RSA_SHA256 = 0x0b, + RSA_SHA512 = 0x0d, +}; + +struct Certificate { + u16 version; + CertificateKeyAlgorithm algorithm; + CertificateKeyAlgorithm key_algorithm; + CertificateKeyAlgorithm ec_algorithm; + ByteBuffer exponent; + Crypto::PK::RSAPublicKey public_key; + Crypto::PK::RSAPrivateKey private_key; + String issuer_country; + String issuer_state; + String issuer_location; + String issuer_entity; + String issuer_subject; + String issuer_unit; + String not_before; + String not_after; + String country; + String state; + String location; + String entity; + String subject; + String unit; + u8** SAN; + u16 SAN_length; + u8* ocsp; + Crypto::UnsignedBigInteger serial_number; + ByteBuffer sign_key; + ByteBuffer fingerprint; + ByteBuffer der; + ByteBuffer data; + + bool is_valid() const; +}; + +} + +using TLS::Certificate; diff --git a/Libraries/LibTLS/TLSv12.h b/Libraries/LibTLS/TLSv12.h index 9b358758b18..c263917c40a 100644 --- a/Libraries/LibTLS/TLSv12.h +++ b/Libraries/LibTLS/TLSv12.h @@ -26,6 +26,7 @@ #pragma once +#include "Certificate.h" #include #include #include @@ -190,47 +191,6 @@ enum ClientVerificationStaus { VerificationNeeded, }; -enum class CertificateKeyAlgorithm { - Unsupported = 0x00, - RSA_RSA = 0x01, - RSA_MD5 = 0x04, - RSA_SHA1 = 0x05, - RSA_SHA256 = 0x0b, - RSA_SHA512 = 0x0d, -}; - -struct Certificate { - u16 version; - CertificateKeyAlgorithm algorithm; - CertificateKeyAlgorithm key_algorithm; - CertificateKeyAlgorithm ec_algorithm; - ByteBuffer exponent; - Crypto::PK::RSAPublicKey public_key; - Crypto::PK::RSAPrivateKey private_key; - String issuer_country; - String issuer_state; - String issuer_location; - String issuer_entity; - String issuer_subject; - String not_before; - String not_after; - String country; - String state; - String location; - String entity; - String subject; - u8** SAN; - u16 SAN_length; - u8* ocsp; - Crypto::UnsignedBigInteger serial_number; - ByteBuffer sign_key; - ByteBuffer fingerprint; - ByteBuffer der; - ByteBuffer data; - - bool is_valid() const; -}; - struct Context { String to_string() const; bool verify() const;