Skip to content

Commit

Permalink
Merge branch 'main' into openvpn
Browse files Browse the repository at this point in the history
  • Loading branch information
smittals2 authored Jun 15, 2024
2 parents 91f7e64 + 98735a2 commit 50de7b3
Show file tree
Hide file tree
Showing 13 changed files with 195 additions and 8 deletions.
4 changes: 4 additions & 0 deletions crypto/conf/conf.c
Original file line number Diff line number Diff line change
Expand Up @@ -642,6 +642,10 @@ int CONF_modules_load_file(const char *filename, const char *appname,
return 1;
}

char *CONF_get1_default_config_file(void) {
return OPENSSL_strdup("No support for Config files in AWS-LC.");
}

void CONF_modules_free(void) {}

void CONF_modules_unload(int all) {}
Expand Down
5 changes: 5 additions & 0 deletions crypto/conf/conf_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -401,3 +401,8 @@ TEST(ConfTest, ParseList) {
EXPECT_EQ(result, t.expected);
}
}

TEST(ConfTest, NoopString) {
bssl::UniquePtr<char> string(CONF_get1_default_config_file());
EXPECT_STREQ("No support for Config files in AWS-LC.", string.get());
}
6 changes: 6 additions & 0 deletions crypto/pkcs8/pkcs12_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -674,3 +674,9 @@ TEST(PKCS12Test, CreateWithAlias) {
ASSERT_EQ(alias, std::string(reinterpret_cast<const char *>(parsed_alias),
static_cast<size_t>(alias_len)));
}

TEST(PKCS12Test, BasicAlloc) {
// Test direct allocation of |PKCS12_new| and |PKCS12_free|.
bssl::UniquePtr<PKCS12> p12(PKCS12_new());
ASSERT_TRUE(p12);
}
8 changes: 6 additions & 2 deletions crypto/pkcs8/pkcs8_x509.c
Original file line number Diff line number Diff line change
Expand Up @@ -741,7 +741,7 @@ struct pkcs12_st {

PKCS12 *d2i_PKCS12(PKCS12 **out_p12, const uint8_t **ber_bytes,
size_t ber_len) {
PKCS12 *p12 = OPENSSL_malloc(sizeof(PKCS12));
PKCS12 *p12 = PKCS12_new();
if (!p12) {
return NULL;
}
Expand Down Expand Up @@ -1328,7 +1328,7 @@ PKCS12 *PKCS12_create(const char *password, const char *name,
goto err;
}

ret = OPENSSL_malloc(sizeof(PKCS12));
ret = PKCS12_new();
if (ret == NULL ||
!CBB_finish(&cbb, &ret->ber_bytes, &ret->ber_len)) {
OPENSSL_free(ret);
Expand All @@ -1342,6 +1342,10 @@ PKCS12 *PKCS12_create(const char *password, const char *name,
return ret;
}

PKCS12 *PKCS12_new(void) {
return OPENSSL_zalloc(sizeof(PKCS12));
}

void PKCS12_free(PKCS12 *p12) {
if (p12 == NULL) {
return;
Expand Down
40 changes: 40 additions & 0 deletions crypto/x509/x509_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -7583,3 +7583,43 @@ TEST(X509Test, PublicKeyCache) {
key2.reset(X509_PUBKEY_get(pub));
EXPECT_FALSE(key2);
}

TEST(X509Test, SPKIPrint) {
bssl::UniquePtr<BIO> bio(BIO_new(BIO_s_mem()));
ASSERT_TRUE(bio);
bssl::UniquePtr<NETSCAPE_SPKI> spki(NETSCAPE_SPKI_new());
ASSERT_TRUE(spki);

bssl::UniquePtr<EVP_PKEY> key = PrivateKeyFromPEM(kP256Key);
EXPECT_TRUE(NETSCAPE_SPKI_set_pubkey(spki.get(), key.get()));
EXPECT_TRUE(NETSCAPE_SPKI_sign(spki.get(), key.get(), EVP_sha256()));

std::string challenge = "challenge string";
ASSERT_TRUE(ASN1_STRING_set(spki.get()->spkac->challenge, challenge.data(),
challenge.size()));

EXPECT_TRUE(NETSCAPE_SPKI_print(bio.get(), spki.get()));

// The contents of the signature is printed last but it's randomized,
// so we only check the expected output before that.
static const char expected_certificate_string[] = R"(Netscape SPKI:
Public Key Algorithm: id-ecPublicKey
Public-Key: (P-256)
pub:
04:e6:2b:69:e2:bf:65:9f:97:be:2f:1e:0d:94:8a:
4c:d5:97:6b:b7:a9:1e:0d:46:fb:dd:a9:a9:1e:9d:
dc:ba:5a:01:e7:d6:97:a8:0a:18:f9:c3:c4:a3:1e:
56:e2:7c:83:48:db:16:1a:1c:f5:1d:7e:f1:94:2d:
4b:cf:72:22:c1
Challenge String: challenge string
Signature Algorithm: ecdsa-with-SHA256
)";

const uint8_t *data;
size_t data_len;
ASSERT_TRUE(BIO_mem_contents(bio.get(), &data, &data_len));
ASSERT_GT(data_len, strlen(expected_certificate_string));
std::string print(reinterpret_cast<const char *>(data),
strlen(expected_certificate_string));
EXPECT_EQ(print, expected_certificate_string);
}
45 changes: 45 additions & 0 deletions crypto/x509/x509spki.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
#include <openssl/err.h>
#include <openssl/mem.h>
#include <openssl/x509.h>
#include "internal.h"

int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey) {
if ((x == NULL) || (x->spkac == NULL)) {
Expand Down Expand Up @@ -131,3 +132,47 @@ char *NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *spki) {
OPENSSL_free(der_spki);
return b64_str;
}

int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki) {
if (out == NULL || spki == NULL || spki->spkac == NULL ||
spki->spkac->pubkey == NULL || spki->sig_algor == NULL ||
spki->sig_algor->algorithm == NULL || spki->signature == NULL ||
spki->signature->data == NULL) {
OPENSSL_PUT_ERROR(X509, ERR_R_PASSED_NULL_PARAMETER);
return 0;
}
BIO_printf(out, "Netscape SPKI:\n");

// Print out public key algorithm and contents.
ASN1_OBJECT *spkioid;
X509_PUBKEY_get0_param(&spkioid, NULL, NULL, NULL, spki->spkac->pubkey);
int spkioid_nid = OBJ_obj2nid(spkioid);
BIO_printf(out, " Public Key Algorithm: %s\n",
(spkioid_nid == NID_undef) ? "UNKNOWN" : OBJ_nid2ln(spkioid_nid));
EVP_PKEY *pkey = X509_PUBKEY_get0(spki->spkac->pubkey);
if (pkey == NULL) {
BIO_printf(out, " Unable to load public key\n");
} else {
EVP_PKEY_print_public(out, pkey, 4, NULL);
}

ASN1_IA5STRING *chal = spki->spkac->challenge;
if (chal != NULL && chal->length != 0) {
BIO_printf(out, " Challenge String: %.*s\n", chal->length, chal->data);
}

// Print out signature algorithm and contents.
BIO_printf(out, " Signature Algorithm: %s",
(OBJ_obj2nid(spki->sig_algor->algorithm) == NID_undef)
? "UNKNOWN"
: OBJ_nid2ln(OBJ_obj2nid(spki->sig_algor->algorithm)));
for (int i = 0; i < spki->signature->length; i++) {
if ((i % 18) == 0) {
BIO_printf(out, "\n ");
}
BIO_printf(out, "%02x%s", (unsigned char)spki->signature->data[i],
((i + 1) == spki->signature->length) ? "" : ":");
}
BIO_write(out, "\n", 1);
return 1;
}
47 changes: 46 additions & 1 deletion docs/porting/configuration-differences.md
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ The following table contains the differences in libssl configuration options AWS
</td>
</tr>
<tr>
<td rowspan=10>
<td rowspan=13>
<p>
<span>
<a href="https://github.com/aws/aws-lc/blob/e91524c10ad698fd56f77289ba3430baf3c7af64/include/openssl/ssl.h#L794-L797">
Expand Down Expand Up @@ -188,6 +188,21 @@ The following table contains the differences in libssl configuration options AWS
<p><span>NO-OP</span></p>
</td>
</tr>
<tr>
<td>
<p><span>
<a href="">
SSL_OP_CRYPTOPRO_TLSEXT_BUG
</a>
</span></p>
</td>
<td>
<p><span>OFF</span></p>
</td>
<td>
<p><span>NO-OP</span></p>
</td>
</tr>
<tr>
<td>
<p><span>
Expand Down Expand Up @@ -280,6 +295,36 @@ The following table contains the differences in libssl configuration options AWS
<td>
<p><span>NO-OP</span></p>
</td>
</tr>
<tr>
<td>
<p><span>
<a href="">
SSL_OP_SAFARI_ECDHE_ECDSA_BUG
</a>
</span></p>
</td>
<td>
<p><span>ON</span></p>
</td>
<td>
<p><span>NO-OP</span></p>
</td>
</tr>
<tr>
<td>
<p><span>
<a href="">
SSL_OP_TLSEXT_PADDING
</a>
</span></p>
</td>
<td>
<p><span>ON</span></p>
</td>
<td>
<p><span>NO-OP</span></p>
</td>
</tr>
<tr>
<td>
Expand Down
12 changes: 10 additions & 2 deletions docs/porting/functionality-differences.md
Original file line number Diff line number Diff line change
Expand Up @@ -480,10 +480,10 @@ Older and less common usages of `EVP_PKEY` have been removed. For example, signi
</td>
</tr>
<tr>
<td rowspan=4>
<td rowspan=5>
<p><span>CONF modules</span></p>
</td>
<td rowspan=4>
<td rowspan=5>
<p>
<span>
<a href="https://github.com/aws/aws-lc/blob/746d06505b3a3827cf61959ca0c3d87c3f21accc/include/openssl/conf.h#L127-L149">
Expand All @@ -498,6 +498,14 @@ Older and less common usages of `EVP_PKEY` have been removed. For example, signi
<td>
<p><span>Returns one.</span></p>
</td>
</tr>
<tr>
<td>
<p><span>CONF_get1_default_config_file</span></p>
</td>
<td>
<p><span>Returns a fixed dummy string(&quot;</span>No support for Config files in AWS-LC.&quot;)</p>
</td>
</tr>
<tr>
<td>
Expand Down
4 changes: 4 additions & 0 deletions include/openssl/conf.h
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,10 @@ OPENSSL_EXPORT const char *NCONF_get_string(const CONF *conf,
OPENSSL_EXPORT OPENSSL_DEPRECATED int CONF_modules_load_file(
const char *filename, const char *appname, unsigned long flags);

// CONF_get1_default_config_file returns a fixed dummy string. AWS-LC is defined
// to have no config file options.
OPENSSL_EXPORT OPENSSL_DEPRECATED char *CONF_get1_default_config_file(void);

// CONF_modules_free does nothing.
OPENSSL_EXPORT OPENSSL_DEPRECATED void CONF_modules_free(void);

Expand Down
3 changes: 3 additions & 0 deletions include/openssl/pkcs8.h
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,9 @@ OPENSSL_EXPORT PKCS12 *PKCS12_create(const char *password, const char *name,
int cert_nid, int iterations,
int mac_iterations, int key_type);

// PKCS12_new returns a newly-allocated |PKCS12| object.
OPENSSL_EXPORT PKCS12 *PKCS12_new(void);

// PKCS12_free frees |p12| and its contents.
OPENSSL_EXPORT void PKCS12_free(PKCS12 *p12);

Expand Down
22 changes: 21 additions & 1 deletion include/openssl/ssl.h
Original file line number Diff line number Diff line change
Expand Up @@ -5630,6 +5630,14 @@ OPENSSL_EXPORT int SSL_set1_curves_list(SSL *ssl, const char *curves);
// unpatched clients and servers and is intentionally not supported in AWS-LC.
#define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION 0

// SSL_OP_CRYPTOPRO_TLSEXT_BUG is OFF by default in AWS-LC. Turning this ON in
// OpenSSL lets the server add a server-hello extension from early version of
// the cryptopro draft, when the GOST ciphersuite is negotiated. Required for
// interoperability with CryptoPro CSP 3.x.
//
// Note: AWS-LC does not support GOST ciphersuites.
#define SSL_OP_CRYPTOPRO_TLSEXT_BUG 0

// SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS is ON by default in AWS-LC. This
// disables a countermeasure against a SSL 3.0/TLS 1.0 protocol vulnerability
// affecting CBC ciphers, which cannot be handled by some broken SSL
Expand All @@ -5654,7 +5662,7 @@ OPENSSL_EXPORT int SSL_set1_curves_list(SSL *ssl, const char *curves);
// This always starts a new session when performing renegotiation as a server
// (i.e., session resumption requests are only accepted in the initial
// handshake).
// There is no support for renegototiation for a server in AWS-LC
// There is no support for renegototiation for a server in AWS-LC.
#define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION 0

// SSL_OP_NO_SSLv2 is ON by default in AWS-LC. There is no support for SSLv2 in
Expand All @@ -5665,6 +5673,18 @@ OPENSSL_EXPORT int SSL_set1_curves_list(SSL *ssl, const char *curves);
// AWS-LC
#define SSL_OP_NO_SSLv3 0

// SSL_OP_SAFARI_ECDHE_ECDSA_BUG is OFF by default in AWS-LC. Turning this ON in
// OpenSSL lets the application not prefer ECDHE-ECDSA ciphers when the client
// appears to be Safari on OSX.
//
// Note: OS X 10.8..10.8.3 broke support for ECDHE-ECDSA ciphers.
#define SSL_OP_SAFARI_ECDHE_ECDSA_BUG 0

// SSL_OP_TLSEXT_PADDING is OFF by default in AWS-LC. Turning this ON in OpenSSL
// adds a padding extension to ensure the ClientHello size is never between 256
// and 511 bytes in length. This is needed as a workaround for F5 terminators.
#define SSL_OP_TLSEXT_PADDING 0

// SSL_OP_TLS_ROLLBACK_BUG is OFF by default in AWS-LC. Turning this ON in
// OpenSSL disables version rollback attack detection and is intentionally not
// supported in AWS-LC.
Expand Down
3 changes: 3 additions & 0 deletions include/openssl/x509.h
Original file line number Diff line number Diff line change
Expand Up @@ -2345,6 +2345,9 @@ OPENSSL_EXPORT NETSCAPE_SPKAC *d2i_NETSCAPE_SPKAC(NETSCAPE_SPKAC **out,
OPENSSL_EXPORT int i2d_NETSCAPE_SPKAC(const NETSCAPE_SPKAC *spkac,
uint8_t **outp);

// NETSCAPE_SPKI_print prints out the contents of |spki| to |out|.
OPENSSL_EXPORT int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki);


// RSASSA-PSS Parameters.
//
Expand Down
4 changes: 2 additions & 2 deletions tests/ci/cdk/cdk/codebuild/github_ci_integration_omnibus.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ batch:
type: LINUX_CONTAINER
privileged-mode: false
compute-type: BUILD_GENERAL1_MEDIUM
image: 620771051181.dkr.ecr.us-west-2.amazonaws.com/aws-lc-docker-images-linux-x86:ubuntu-22.04_gcc-12x_latest
image: 620771051181.dkr.ecr.us-west-2.amazonaws.com/aws-lc-docker-images-linux-x86:ubuntu-22.04_gcc-11x_latest
variables:
AWS_LC_CI_TARGET: "tests/ci/integration/run_curl_integration.sh"

Expand All @@ -157,7 +157,7 @@ batch:
type: ARM_CONTAINER
privileged-mode: false
compute-type: BUILD_GENERAL1_LARGE
image: 620771051181.dkr.ecr.us-west-2.amazonaws.com/aws-lc-docker-images-linux-aarch:ubuntu-22.04_gcc-12x_latest
image: 620771051181.dkr.ecr.us-west-2.amazonaws.com/aws-lc-docker-images-linux-aarch:ubuntu-22.04_gcc-11x_latest
variables:
AWS_LC_CI_TARGET: "tests/ci/integration/run_curl_integration.sh"

Expand Down

0 comments on commit 50de7b3

Please sign in to comment.