Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ version: 2.1
executors:
build-executor:
docker:
- image: ubuntu:20.04
- image: ubuntu:24.04
resource_class: small
jobs:
build:
Expand All @@ -26,7 +26,7 @@ jobs:
- run:
name: Build and test
command: |
export NGINX_VERSION=1.18.0
export NGINX_VERSION=1.28.0
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib
make prepare-travis-env nginx test

Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
/.cmocka_build
/test_suite
.aider*
12 changes: 7 additions & 5 deletions aws_functions.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@
#define __NGX_AWS_FUNCTIONS_INTERNAL__H__

#include <time.h>
#include <ngx_times.h>
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_times.h>
#include <ngx_http.h>

#include "crypto_helper.h"
Expand Down Expand Up @@ -146,6 +147,11 @@ static inline const ngx_str_t* ngx_aws_auth__canonize_query_string(ngx_pool_t *p
for(i = 0; i < query_string_args->nelts; i++) {
qs_arg = &((header_pair_t*)query_string_args->elts)[i];

if(i > 0) {
*(retval->data + retval->len) = '&';
retval->len++;
}

ngx_memcpy(retval->data + retval->len, qs_arg->key.data, qs_arg->key.len);
retval->len += qs_arg->key.len;

Expand All @@ -154,11 +160,7 @@ static inline const ngx_str_t* ngx_aws_auth__canonize_query_string(ngx_pool_t *p

ngx_memcpy(retval->data + retval->len, qs_arg->value.data, qs_arg->value.len);
retval->len += qs_arg->value.len;

*(retval->data + retval->len) = '&';
retval->len++;
}
retval->len--;

safe_ngx_log_error(req, "canonical qs constructed is %V", retval);

Expand Down
2 changes: 1 addition & 1 deletion crypto_helper.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#ifndef __NGX_AWS_AUTH__CRYPTO_HELPER__
#define __NGX_AWS_AUTH__CRYPTO_HELPER__


#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_palloc.h>

Expand Down
66 changes: 47 additions & 19 deletions crypto_helper_openssl.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,49 +20,77 @@ static const EVP_MD* evp_md = NULL;
ngx_str_t* ngx_aws_auth__sign_sha256_hex(ngx_pool_t *pool, const ngx_str_t *blob,
const ngx_str_t *signing_key) {

unsigned int md_len;
unsigned char md[EVP_MAX_MD_SIZE];
ngx_str_t *const retval = ngx_palloc(pool, sizeof(ngx_str_t));
unsigned int md_len;
ngx_str_t *const retval = ngx_palloc(pool, sizeof(ngx_str_t));
HMAC_CTX *ctx = NULL;

if (evp_md == NULL) {
evp_md = EVP_sha256();
}

ctx = HMAC_CTX_new();
if (ctx == NULL) {
return NULL;
}

if (!HMAC_Init_ex(ctx, signing_key->data, signing_key->len, evp_md, NULL)) {
HMAC_CTX_free(ctx);
return NULL;
}

if (!HMAC_Update(ctx, blob->data, blob->len)) {
HMAC_CTX_free(ctx);
return NULL;
}

if (evp_md==NULL) {
evp_md = EVP_sha256();
if (!HMAC_Final(ctx, md, &md_len)) {
HMAC_CTX_free(ctx);
return NULL;
}

HMAC(evp_md, signing_key->data, signing_key->len, blob->data, blob->len, md, &md_len);
retval->data = ngx_palloc(pool, md_len * 2 + 1);
retval->len = md_len * 2;
ngx_hex_dump(retval->data, md, md_len);
return retval;
HMAC_CTX_free(ctx);

retval->data = ngx_palloc(pool, md_len * 2 + 1);
if (retval->data == NULL) {
return NULL;
}
retval->len = md_len * 2;
ngx_hex_dump(retval->data, md, md_len);
return retval;
}

ngx_str_t* ngx_aws_auth__hash_sha256(ngx_pool_t *pool, const ngx_str_t *blob) {
unsigned char hash[EVP_MAX_MD_SIZE];
unsigned int hash_len;
ngx_str_t *const retval = ngx_palloc(pool, sizeof(ngx_str_t));

EVP_MD_CTX *mdctx;
mdctx = EVP_MD_CTX_new();

EVP_MD_CTX *mdctx = EVP_MD_CTX_new();
if (mdctx == NULL) {
// Handle error
return NULL;
}

if((mdctx = EVP_MD_CTX_create()) == NULL)
return NULL;

if(1 != EVP_DigestInit_ex(mdctx, EVP_sha256(), NULL))
if (1 != EVP_DigestInit_ex(mdctx, EVP_sha256(), NULL)) {
EVP_MD_CTX_free(mdctx);
return NULL;
}

if(1 != EVP_DigestUpdate(mdctx, blob->data, blob->len))
if (1 != EVP_DigestUpdate(mdctx, blob->data, blob->len)) {
EVP_MD_CTX_free(mdctx);
return NULL;
}

if(1 != EVP_DigestFinal_ex(mdctx, hash, &hash_len))
if (1 != EVP_DigestFinal_ex(mdctx, hash, &hash_len)) {
EVP_MD_CTX_free(mdctx);
return NULL;
}

EVP_MD_CTX_free(mdctx);

retval->data = ngx_palloc(pool, hash_len * 2 + 1);
if (retval->data == NULL) {
return NULL;
}
retval->len = hash_len * 2;
ngx_hex_dump(retval->data, hash, hash_len);
return retval;
Expand Down
2 changes: 1 addition & 1 deletion ngx_http_aws_auth.c
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ ngx_http_aws_proxy_sign(ngx_http_request_t *r)
continue;
}

h = ngx_list_push(&r->headers_in.headers);
h = ngx_list_push(&r->headers_out.headers);
if (h == NULL) {
return NGX_ERROR;
}
Expand Down
2 changes: 1 addition & 1 deletion vendor/cmocka
Submodule cmocka updated from f5e2cd to eba4d6