Skip to content

Commit 7b2b761

Browse files
committed
Introduced WebCrypto API according to W3C spec.
The following methods were implemented: crypto.getRandomValues() crypto.subtle.importKey() format: raw, pkcs8, spki algorithm: AES-CBC, AES-CTR, AES-GCM, ECDSA, HKDF, HMAC, PBKDF2, RSASSA-PKCS1-v1_5, RSA-OAEP, RSA-PSS crypto.subtle.decrypt() crypto.subtle.encrypt() algorithm: AES-CBC, AES-CTR, AES-GCM, RSA-OAEP crypto.subtle.deriveBits() crypto.subtle.deriveKey() algorithm: HKDF, PBKDF2 crypto.subtle.digest() algorithm: SHA-1, SHA-256, SHA-384, SHA-512 crypto.subtle.sign() crypto.subtle.verify() algorithm: ECDSA, HMAC, RSASSA-PKCS1-v1_5, RSA-PSS
1 parent 648e89a commit 7b2b761

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+4613
-14
lines changed

auto/make

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ cat << END >> $NJS_MAKEFILE
7575

7676
$NJS_BUILD_DIR/njs: \\
7777
$NJS_BUILD_DIR/libnjs.a \\
78-
src/njs_shell.c
78+
src/njs_shell.c external/njs_webcrypto.h external/njs_webcrypto.c
7979
\$(NJS_LINK) -o $NJS_BUILD_DIR/njs \$(NJS_CFLAGS) \\
8080
$NJS_LIB_AUX_CFLAGS \$(NJS_LIB_INCS) -Injs \\
8181
src/njs_shell.c \\
@@ -159,7 +159,8 @@ njs_dep_post=`njs_gen_dep_post $njs_dep $njs_externals_obj`
159159

160160
cat << END >> $NJS_MAKEFILE
161161

162-
$NJS_BUILD_DIR/$njs_externals_obj: $njs_src
162+
$NJS_BUILD_DIR/$njs_externals_obj: \\
163+
$njs_src external/njs_webcrypto.h external/njs_webcrypto.c
163164
\$(NJS_CC) -c \$(NJS_CFLAGS) $NJS_LIB_AUX_CFLAGS \\
164165
\$(NJS_LIB_INCS) -Injs \\
165166
-o $NJS_BUILD_DIR/$njs_externals_obj \\

auto/openssl

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
2+
# Copyright (C) Dmitry Volyntsev
3+
# Copyright (C) NGINX, Inc.
4+
5+
6+
NJS_OPENSSL_LIB=
7+
NJS_HAVE_OPENSSL=NO
8+
9+
10+
njs_found=no
11+
12+
13+
njs_feature="OpenSSL library"
14+
njs_feature_name=NJS_HAVE_OPENSSL
15+
njs_feature_run=yes
16+
njs_feature_incs=
17+
njs_feature_libs="-lcrypto"
18+
njs_feature_test="#include <openssl/evp.h>
19+
20+
int main() {
21+
OpenSSL_add_all_algorithms();
22+
return 0;
23+
}"
24+
. auto/feature
25+
26+
27+
if [ $njs_found = yes ]; then
28+
njs_feature="OpenSSL HKDF"
29+
njs_feature_name=NJS_HAVE_OPENSSL_HKDF
30+
njs_feature_test="#include <openssl/evp.h>
31+
#include <openssl/kdf.h>
32+
33+
int main(void) {
34+
EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_HKDF, NULL);
35+
36+
EVP_PKEY_CTX_set_hkdf_md(pctx, EVP_sha256());
37+
EVP_PKEY_CTX_free(pctx);
38+
39+
return 0;
40+
}"
41+
. auto/feature
42+
43+
njs_feature="OpenSSL EVP_MD_CTX_new()"
44+
njs_feature_name=NJS_HAVE_OPENSSL_EVP_MD_CTX_NEW
45+
njs_feature_test="#include <openssl/evp.h>
46+
47+
int main(void) {
48+
EVP_MD_CTX *ctx = EVP_MD_CTX_new();
49+
EVP_MD_CTX_free(ctx);
50+
return 0;
51+
}"
52+
. auto/feature
53+
54+
NJS_HAVE_OPENSSL=YES
55+
NJS_OPENSSL_LIB="$njs_feature_libs"
56+
fi

auto/sources

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ NJS_LIB_SRCS=" \
22
src/njs_diyfp.c \
33
src/njs_dtoa.c \
44
src/njs_dtoa_fixed.c \
5+
src/njs_str.c \
56
src/njs_strtod.c \
67
src/njs_murmur_hash.c \
78
src/njs_djb_hash.c \

auto/summary

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ if [ $NJS_HAVE_READLINE = YES ]; then
1515
echo " + using readline library: $NJS_READLINE_LIB"
1616
fi
1717

18+
if [ $NJS_HAVE_OPENSSL = YES ]; then
19+
echo " + using OpenSSL library: $NJS_OPENSSL_LIB"
20+
fi
21+
1822
echo
1923
echo " njs build dir: $NJS_BUILD_DIR"
2024

configure

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,13 @@ set -u
2626
. auto/explicit_bzero
2727
. auto/pcre
2828
. auto/readline
29+
. auto/openssl
2930
. auto/sources
3031

3132
NJS_LIB_AUX_CFLAGS="$NJS_PCRE_CFLAGS"
3233

3334
NJS_LIBS="$NJS_LIBRT"
34-
NJS_LIB_AUX_LIBS="$NJS_PCRE_LIB"
35+
NJS_LIB_AUX_LIBS="$NJS_PCRE_LIB $NJS_OPENSSL_LIB"
3536

3637
. auto/make
3738

0 commit comments

Comments
 (0)