Skip to content

Commit 5a5bcd9

Browse files
authored
fix(ESDK): Head Auth logic and HKDF's info parameter (#621)
The ESDK-NET’s Message Header AAD incorrectly appended two empty bytes when using the DefaultCMM. The HKDF invocation of non-committing algorithm suites failed to include the Message ID in the info parameter. Neither of these issues effect the security of messages written by the 4.0.0 release. However, these messages diverge from the Encryption SDK Message Specification. Thus: * ESDK-NET v4.0.0 writes messages that only ESDK-NET v4.0.0 and greater can read. * ESDK-NET v4.0.0 is ONLY able to read messages that are written by ESDK-NET v4.0.0 These issues are fixed in 4.0.1, which writes messages according to the Encryption SDK Message Specification, and are interoperable with other implementations of this library. The option NetV4_RetryPolicy can be use to decrypt v4.0.0 messages. See AwsEncryptionSDK/runtimes/net/Examples/NetV4_0_0Example.cs on how to use the NetV4_RetryPolicy and details on distributed applications.
1 parent eaa30b3 commit 5a5bcd9

File tree

60 files changed

+5579
-1632
lines changed

Some content is hidden

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

60 files changed

+5579
-1632
lines changed

.github/CODEOWNERS

-5
This file was deleted.

.github/workflows/ci_static-analysis.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# This workflow performs static analysis checks.
22
name: static analysis
33

4-
on: ["pull_request", "push"]
4+
on: ["pull_request"]
55

66
jobs:
77
not-grep:

.github/workflows/duvet.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ on:
77
pull_request:
88
push:
99
branches:
10-
- main
10+
- public-v4
1111

1212
jobs:
1313
duvet:

.github/workflows/library_dafny_verification.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ on:
55
pull_request:
66
push:
77
branches:
8-
- main
8+
- public-v4
99
workflow_dispatch:
1010
# Manual trigger for this workflow, either the normal version
1111
# or the nightly build that uses the latest Dafny prerelease

.github/workflows/library_java_tests.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ on:
55
pull_request:
66
push:
77
branches:
8-
- main
8+
- public-v4
99
schedule:
1010
# Nightly build against Dafny's nightly prereleases,
1111
# for early warning of verification issues or regressions.

.github/workflows/library_net_tests.yml

+193-41
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ on:
55
pull_request:
66
push:
77
branches:
8-
- main
8+
- public-v4
99
schedule:
1010
# Nightly build against Dafny's nightly prereleases,
1111
# for early warning of verification issues or regressions.
@@ -22,18 +22,15 @@ env:
2222
AWS_ENCRYPTION_SDK_EXAMPLE_KMS_MRK_KEY_ID_2: arn:aws:kms:eu-west-1:658956600833:key/mrk-80bd8ecdcd4342aebd84b7dc9da498a7
2323
AWS_ENCRYPTION_SDK_EXAMPLE_LIMITED_ROLE_ARN_US_EAST_1: arn:aws:iam::370957321024:role/GitHub-CI-ESDK-Dafny-Role-us-west-2
2424
AWS_ENCRYPTION_SDK_EXAMPLE_LIMITED_ROLE_ARN_EU_WEST_1: arn:aws:iam::370957321024:role/GitHub-CI-ESDK-Dafny-Role-us-west-2
25+
# Used for Test Vectors
26+
VECTORS_URL: https://github.com/awslabs/aws-encryption-sdk-test-vectors/raw/master/vectors/awses-decrypt/python-2.3.0.zip
2527

2628
jobs:
2729
testDotNet:
2830
# Don't run the nightly build on forks
2931
if: github.event_name != 'schedule' || github.repository_owner == 'aws'
3032
strategy:
3133
matrix:
32-
library: [
33-
AwsEncryptionSDK
34-
]
35-
dotnet-version: [ '6.0.x' ]
36-
frameworks: [net6.0, net48]
3734
os: [
3835
windows-latest,
3936
ubuntu-latest,
@@ -57,18 +54,18 @@ jobs:
5754
run: |
5855
git submodule update --init libraries
5956
git submodule update --init --recursive mpl
60-
57+
6158
- name: Configure AWS Credentials
62-
uses: aws-actions/configure-aws-credentials@v1
59+
uses: aws-actions/configure-aws-credentials@v2
6360
with:
6461
aws-region: us-west-2
65-
role-to-assume: arn:aws:iam::370957321024:role/GitHub-CI-Public-ESDK-Dafny-Role-us-west-2
62+
role-to-assume: arn:aws:iam::370957321024:role/GitHub-CI-ESDK-Dafny-Role-us-west-2
6663
role-session-name: NetTests
67-
68-
- name: Setup .NET Core SDK ${{ matrix.dotnet-version }}
64+
65+
- name: Setup .NET Core SDK 6
6966
uses: actions/setup-dotnet@v3
7067
with:
71-
dotnet-version: ${{ matrix.dotnet-version }}
68+
dotnet-version: '6.0.x'
7269

7370
- name: Setup Dafny
7471
uses: dafny-lang/[email protected]
@@ -77,53 +74,208 @@ jobs:
7774
dafny-version: ${{ (github.event_name == 'schedule' || inputs.nightly) && 'nightly-latest' || '4.2.0' }}
7875

7976
- name: Download Dependencies
80-
working-directory: ./${{ matrix.library }}
77+
working-directory: ./AwsEncryptionSDK
8178
run: make setup_net
8279

83-
- name: Compile ${{ matrix.library }} implementation
80+
- name: Compile AwsEncryptionSDK implementation
8481
shell: bash
85-
working-directory: ./${{ matrix.library }}
82+
working-directory: ./AwsEncryptionSDK
8683
run: |
8784
# This works because `node` is installed by default on GHA runners
8885
CORES=$(node -e 'console.log(os.cpus().length)')
8986
make transpile_net CORES=$CORES
9087
91-
- name: Test ${{ matrix.library }} .NET Framework net48
92-
working-directory: ./${{ matrix.library }}
88+
- name: Test .NET Framework net48
89+
working-directory: ./AwsEncryptionSDK
90+
shell: bash
91+
run: |
92+
make test_net FRAMEWORK=net48
93+
94+
- name: Test .NET net6.0
95+
working-directory: ./AwsEncryptionSDK
96+
shell: bash
97+
run: |
98+
if [ "$RUNNER_OS" == "macOS" ]; then
99+
make test_net_mac_intel FRAMEWORK=net6.0
100+
else
101+
make test_net FRAMEWORK=net6.0
102+
fi
103+
104+
- name: Test Examples on .NET Framework net48
105+
working-directory: ./AwsEncryptionSDK
106+
shell: bash
107+
run: |
108+
dotnet test \
109+
runtimes/net/Examples \
110+
--framework net48
111+
112+
- name: Test Examples on .NET net6.0
113+
working-directory: ./AwsEncryptionSDK
93114
shell: bash
94115
run: |
95116
if [ "$RUNNER_OS" == "macOS" ]; then
96-
DYLD_LIBRARY_PATH="/usr/local/opt/[email protected]/lib"
97-
dotnet run \
98-
--project runtimes/net/tests/ \
99-
--framework net48
100-
else
101-
dotnet run \
102-
--project runtimes/net/tests/ \
103-
--framework net48
104-
fi
117+
DYLD_LIBRARY_PATH="/usr/local/opt/[email protected]/lib"
118+
dotnet test \
119+
runtimes/net/Examples \
120+
--framework net6.0
121+
else
122+
dotnet test \
123+
runtimes/net/Examples \
124+
--framework net6.0
125+
fi
126+
127+
- name: Fetch awses-decrypt/python-2.3.0.zip
128+
working-directory: ./
129+
shell: bash
130+
run: |
131+
PYTHON_23_VECTOR_PATH=$GITHUB_WORKSPACE/python23/vectors
132+
mkdir -p $PYTHON_23_VECTOR_PATH
133+
DOWNLOAD_NAME=python23.zip
134+
curl --no-progress-meter --output $DOWNLOAD_NAME --location $VECTORS_URL
135+
unzip -o -qq $DOWNLOAD_NAME -d $PYTHON_23_VECTOR_PATH
136+
rm $DOWNLOAD_NAME
105137
106-
- name: Test ${{ matrix.library }}
107-
working-directory: ./${{ matrix.library }}
138+
- name: Run Test Vectors on .NET Framework net48
139+
working-directory: ./AwsEncryptionSDK/runtimes/net/TestVectorsNative/TestVectors
108140
shell: bash
109141
run: |
142+
PYTHON_23_VECTOR_PATH=$GITHUB_WORKSPACE/python23/vectors
143+
DAFNY_AWS_ESDK_TEST_VECTOR_MANIFEST_PATH="$PYTHON_23_VECTOR_PATH/manifest.json" \
144+
dotnet test --framework net48
145+
146+
- name: Run Decrypt Test Vectors on .NET net6.0
147+
working-directory: ./AwsEncryptionSDK/runtimes/net/TestVectorsNative/TestVectors
148+
shell: bash
149+
run: |
150+
PYTHON_23_VECTOR_PATH=$GITHUB_WORKSPACE/python23/vectors
110151
if [ "$RUNNER_OS" == "macOS" ]; then
111-
make test_net_mac_intel
152+
DAFNY_AWS_ESDK_TEST_VECTOR_MANIFEST_PATH="$PYTHON_23_VECTOR_PATH/manifest.json" \
153+
DYLD_LIBRARY_PATH="/usr/local/opt/[email protected]/lib" \
154+
dotnet test --framework net6.0
112155
else
113-
make test_net
156+
DAFNY_AWS_ESDK_TEST_VECTOR_MANIFEST_PATH="$PYTHON_23_VECTOR_PATH/manifest.json" \
157+
dotnet test --framework net6.0
114158
fi
115159
116-
- name: Test Examples on ${{ matrix.frameworks }}
160+
- name: Generate Test Vectors with .NET Framework net6.0
161+
# TODO Post-#619: Fix Zip file creation on Windows
162+
if: matrix.os != 'windows-latest'
163+
working-directory: ./AwsEncryptionSDK
164+
shell: bash
165+
run: |
166+
NET_41_VECTOR_PATH=$GITHUB_WORKSPACE/net41/vectors
167+
mkdir -p $NET_41_VECTOR_PATH
168+
GEN_PATH=runtimes/net/TestVectorsNative/TestVectorGenerator
169+
dotnet run --project $GEN_PATH --framework net6.0 -- \
170+
--encrypt-manifest $GEN_PATH/resources/0006-awses-message-decryption-generation.v2.json \
171+
--output-dir $NET_41_VECTOR_PATH
172+
173+
# TODO: Fix Zip file creation on Windows
174+
# - name: Zip the Generated Test Vectors for ESDK-JS on Windows
175+
# if: matrix.os == 'windows-latest'
176+
# shell: pwsh
177+
# run: |
178+
# # NET_41_VECTOR_PATH=$GITHUB_WORKSPACE/net41/vectors
179+
# Set-Location -Path "$env:GITHUB_WORKSPACE\net41\vectors"
180+
# Compress-Archive -Path "$env:GITHUB_WORKSPACE\net41\vectors\*" -DestinationPath "$env:GITHUB_WORKSPACE\net41\vectors\net41.zip"
181+
182+
- name: Zip the Generated Test Vectors for ESDK-JS on Mac/Linux
183+
if: matrix.os != 'windows-latest'
184+
shell: bash
185+
run: |
186+
NET_41_VECTOR_PATH=$GITHUB_WORKSPACE/net41/vectors
187+
cd $NET_41_VECTOR_PATH
188+
zip -qq net41.zip -r .
189+
190+
- name: Decrypt Generated Test Vectors with ESDK-JS
191+
# TODO Post-#619: Fix Zip file creation on Windows
192+
if: matrix.os != 'windows-latest'
193+
shell: bash
194+
run: |
195+
NET_41_VECTOR_PATH=$GITHUB_WORKSPACE/net41/vectors
196+
cd $NET_41_VECTOR_PATH
197+
npx -y @aws-crypto/integration-node decrypt -v $NET_41_VECTOR_PATH/net41.zip -c cpu
198+
199+
- name: Unzip ESDK-NET @ v4.0.0 Valid Vectors
200+
working-directory: ./AwsEncryptionSDK/runtimes/net/TestVectorsNative/TestVectors/resources
201+
shell: bash
202+
run: |
203+
NET_400_VALID_VECTORS=$GITHUB_WORKSPACE/v4Net400Valid/vectors
204+
mkdir -p $NET_400_VALID_VECTORS
205+
DOWNLOAD_NAME=valid-Net-4.0.0.zip
206+
unzip -o -qq $DOWNLOAD_NAME -d $NET_400_VALID_VECTORS
207+
208+
- name: Run ESDK-NET @ v4.0.0 Valid Vectors expect success
209+
working-directory: ./AwsEncryptionSDK/runtimes/net/TestVectorsNative/TestVectors
210+
continue-on-error: true
211+
shell: bash
212+
run: |
213+
NET_400_VALID_VECTORS=$GITHUB_WORKSPACE/v4Net400Valid/vectors
214+
ESDK_NET_V400_POLICY="forbid" \
215+
DAFNY_AWS_ESDK_TEST_VECTOR_MANIFEST_PATH="$NET_400_VALID_VECTORS/manifest.json" \
216+
dotnet test --framework net48
217+
ESDK_NET_V400_POLICY="forbid" \
218+
DAFNY_AWS_ESDK_TEST_VECTOR_MANIFEST_PATH="$NET_400_VALID_VECTORS/manifest.json" \
219+
dotnet test --framework net6.0 --logger "console;verbosity=quiet"
220+
221+
- name: Unzip ESDK-NET @ v4.0.0 Invalid Vectors
222+
working-directory: ./AwsEncryptionSDK/runtimes/net/TestVectorsNative/TestVectors/resources
117223
shell: bash
118-
working-directory: ./${{ matrix.library }}
119224
run: |
225+
NET_400_INVALID_VECTORS=$GITHUB_WORKSPACE/v4Net400Invalid/vectors
226+
mkdir -p $NET_400_INVALID_VECTORS
227+
DOWNLOAD_NAME=invalid-Net-4.0.0.zip
228+
unzip -o -qq $DOWNLOAD_NAME -d $NET_400_INVALID_VECTORS
229+
230+
- name: Run ESDK-NET @ v4.0.0 Invalid Vectors .NET 48 expect failure
231+
working-directory: ./AwsEncryptionSDK/runtimes/net/TestVectorsNative/TestVectors
232+
continue-on-error: true
233+
shell: bash
234+
run: |
235+
NET_400_INVALID_VECTORS=$GITHUB_WORKSPACE/v4Net400Invalid/vectors
236+
ESDK_NET_V400_POLICY="forbid" \
237+
DAFNY_AWS_ESDK_TEST_VECTOR_MANIFEST_PATH="$NET_400_INVALID_VECTORS/manifest.json" \
238+
dotnet test --framework net48
239+
# Dotnet test returns 1 for failure.
240+
TEMP=$?; if [[ "$TEMP" -eq 1 ]]; then true; else false; fi;
241+
# We want this to fail, so if it returned 1, step passes, else it fails
242+
# TODO Post-#619: Refactor Test Vectors to expect failure,
243+
# as I doubt this true false logic works
244+
245+
- name: Run ESDK-NET @ v4.0.0 Invalid Vectors .NET 6.0 expect failure
246+
working-directory: ./AwsEncryptionSDK/runtimes/net/TestVectorsNative/TestVectors
247+
continue-on-error: true
248+
shell: bash
249+
run: |
250+
NET_400_INVALID_VECTORS=$GITHUB_WORKSPACE/v4Net400Invalid/vectors
120251
if [ "$RUNNER_OS" == "macOS" ]; then
121-
DYLD_LIBRARY_PATH="/usr/local/opt/[email protected]/lib"
122-
dotnet test \
123-
runtimes/net/Examples \
124-
--framework ${{ matrix.frameworks }}
125-
else
126-
dotnet test \
127-
runtimes/net/Examples \
128-
--framework ${{ matrix.frameworks }}
129-
fi
252+
ESDK_NET_V400_POLICY="forbid" \
253+
DAFNY_AWS_ESDK_TEST_VECTOR_MANIFEST_PATH="$NET_400_INVALID_VECTORS/manifest.json" \
254+
DYLD_LIBRARY_PATH="/usr/local/opt/[email protected]/lib" \
255+
dotnet test --framework net6.0
256+
else
257+
ESDK_NET_V400_POLICY="forbid" \
258+
DAFNY_AWS_ESDK_TEST_VECTOR_MANIFEST_PATH="$NET_400_INVALID_VECTORS/manifest.json" \
259+
dotnet test --framework net6.0
260+
fi
261+
# Dotnet test returns 1 for failure.
262+
TEMP=$?; if [[ "$TEMP" -eq 1 ]]; then true; else false; fi;
263+
# We want this to fail, so if it returned 1, step passes, else it fails
264+
# TODO Post-#619: Refactor Test Vectors to expect failure,
265+
# as I doubt this true false logic works
266+
267+
- name: Run ESDK-NET @ v4.0.0 Invalid Vectors .NET expect Success
268+
working-directory: ./AwsEncryptionSDK/runtimes/net/TestVectorsNative/TestVectors
269+
shell: bash
270+
run: |
271+
NET_400_INVALID_VECTORS=$GITHUB_WORKSPACE/v4Net400Invalid/vectors
272+
DAFNY_AWS_ESDK_TEST_VECTOR_MANIFEST_PATH="$NET_400_INVALID_VECTORS/manifest.json" \
273+
dotnet test --framework net48 --logger "console;verbosity=quiet"
274+
if [ "$RUNNER_OS" == "macOS" ]; then
275+
DAFNY_AWS_ESDK_TEST_VECTOR_MANIFEST_PATH="$NET_400_INVALID_VECTORS/manifest.json" \
276+
DYLD_LIBRARY_PATH="/usr/local/opt/[email protected]/lib" \
277+
dotnet test --framework net6.0 --logger "console;verbosity=quiet"
278+
else
279+
DAFNY_AWS_ESDK_TEST_VECTOR_MANIFEST_PATH="$NET_400_INVALID_VECTORS/manifest.json" \
280+
dotnet test --framework net6.0 --logger "console;verbosity=quiet"
281+
fi

.gitmodules

-3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,3 @@
88
[submodule "mpl"]
99
path = mpl
1010
url = https://github.com/aws/aws-cryptographic-material-providers-library-dafny.git
11-
[submodule "AwsEncryptionSDK/runtimes/net/TestVectorsV3/TestVectors/resources/aws-encryption-sdk-test-vectors"]
12-
path = AwsEncryptionSDK/runtimes/net/TestVectorsV3/TestVectors/resources/aws-encryption-sdk-test-vectors
13-
url = https://github.com/awslabs/aws-encryption-sdk-test-vectors.git

0 commit comments

Comments
 (0)