Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
94b86b0
[DO NOT MERGE] run hkeyring test vectors
lucasmcdonald3 May 6, 2024
efe212a
cleanup
lucasmcdonald3 May 6, 2024
cf24fc2
cleanup
lucasmcdonald3 May 6, 2024
07f8efa
cleanup
lucasmcdonald3 May 6, 2024
e4e7503
wip
lucasmcdonald3 Jun 26, 2024
a46051d
debug
lucasmcdonald3 Jun 26, 2024
96d6d60
add keys.json to repo
RitvikKapila Jun 28, 2024
ead2339
Merge branch 'mainline' into lucmcdon/hkeyring-vectors
RitvikKapila Jun 28, 2024
d9da67b
fix
RitvikKapila Jun 28, 2024
c61d3e0
debug
RitvikKapila Jun 28, 2024
8ee95df
fix: add curr dir path
RitvikKapila Jun 28, 2024
e415a5b
fix
RitvikKapila Jun 28, 2024
ec7d644
fix
RitvikKapila Jun 28, 2024
955c409
fix
RitvikKapila Jun 28, 2024
581c46b
add ManifestUriToPath
RitvikKapila Jul 1, 2024
e25bd46
fix
RitvikKapila Jul 1, 2024
ffbba92
fix
RitvikKapila Jul 1, 2024
d85bb1e
static
RitvikKapila Jul 1, 2024
594933d
private
RitvikKapila Jul 1, 2024
956c206
set DAFNY_AWS_ESDK_TEST_VECTOR_MANIFEST_PATH in generate_vectors
RitvikKapila Jul 1, 2024
1d9cdd1
fix
RitvikKapila Jul 1, 2024
463fc27
correct manifest path
RitvikKapila Jul 1, 2024
368b6b9
download py23 test vectors for generate_vectors
RitvikKapila Jul 1, 2024
107b1e0
Merge branch 'mainline' into lucmcdon/hkeyring-vectors
lucasmcdonald3 Oct 2, 2024
200bed8
Update AwsEncryptionSDK/runtimes/net/TestVectorsNative/TestVectorLib/…
lucasmcdonald3 Oct 2, 2024
6db2fa9
m
lucasmcdonald3 Oct 2, 2024
18694c1
m
lucasmcdonald3 Oct 2, 2024
dfb6308
m
lucasmcdonald3 Oct 2, 2024
2728c90
m
lucasmcdonald3 Oct 2, 2024
5b97a16
m
lucasmcdonald3 Oct 2, 2024
7b81bbd
Merge branch 'mainline' into lucmcdon/hkeyring-vectors
lucasmcdonald3 Oct 2, 2024
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
17 changes: 17 additions & 0 deletions .github/workflows/library_interop_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,14 @@ jobs:
# This works because `node` is installed by default on GHA runners
CORES=$(node -e 'console.log(os.cpus().length)')
make transpile_net CORES=$CORES

- name: Compile MPL TestVectors implementation
shell: bash
working-directory: ./mpl/TestVectorsAwsCryptographicMaterialProviders
run: |
# This works because `node` is installed by default on GHA runners
CORES=$(node -e 'console.log(os.cpus().length)')
make transpile_net CORES=$CORES

- name: Fetch Python 2.3.0 Test Vectors
working-directory: ./
Expand Down Expand Up @@ -166,6 +174,15 @@ jobs:
# This works because `node` is installed by default on GHA runners
CORES=$(node -e 'console.log(os.cpus().length)')
make transpile_net CORES=$CORES


- name: Compile MPL TestVectors implementation
shell: bash
working-directory: ./mpl/TestVectorsAwsCryptographicMaterialProviders
run: |
# This works because `node` is installed by default on GHA runners
CORES=$(node -e 'console.log(os.cpus().length)')
make transpile_net CORES=$CORES


# # TODO: Fix Zip file creation on Windows
Expand Down
9 changes: 9 additions & 0 deletions .github/workflows/library_net_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,15 @@ jobs:
CORES=$(node -e 'console.log(os.cpus().length)')
make transpile_net CORES=$CORES


- name: Compile MPL TestVectors implementation
shell: bash
working-directory: ./mpl/TestVectorsAwsCryptographicMaterialProviders
run: |
# This works because `node` is installed by default on GHA runners
CORES=$(node -e 'console.log(os.cpus().length)')
make transpile_net CORES=$CORES

- name: Test .NET Framework net48
working-directory: ./AwsEncryptionSDK
if: matrix.os == 'windows-latest'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<ProjectReference Include="../../ESDK.csproj" />

<!-- TODO: Reference published MPL TestVectors project -->
<ProjectReference Include="../../../../../mpl/TestVectorsAwsCryptographicMaterialProviders/runtimes/net/TestVectors.csproj" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,13 @@
// SPDX-License-Identifier: Apache-2.0

using System.Diagnostics;
using Newtonsoft.Json;
using Amazon;
using Amazon.DynamoDBv2;
using Amazon.KeyManagementService;
using AWS.Cryptography.KeyStore;
using AWS.Cryptography.MaterialProviders;
using AWS.Cryptography.MaterialProvidersTestVectorKeys;

using RSAEncryption;

Expand All @@ -18,6 +22,7 @@ public enum CryptoOperation
public static class MaterialProviderFactory
{
private static readonly MaterialProviders materialProviders = new(new MaterialProvidersConfig());
private static KeyVectors singletonKeyVectors;

public static ICryptographicMaterialsManager CreateDecryptCmm(
DecryptVector vector,
Expand Down Expand Up @@ -160,6 +165,57 @@ private static IKeyring CreateKeyring(MasterKey keyInfo, Key key, CryptoOperatio
return materialProviders.CreateAwsKmsMrkDiscoveryKeyring(createKeyringInput);
}

if (keyInfo.Type == "aws-kms-hierarchy") {
// Lazily create a singleton KeyVectors client.
// A KeyVectors manifest is only required if a test vector specifies a hierarchy keyring.
// This specification can only be determined at runtime while reading the test vector manifest.
if (singletonKeyVectors == null) {
string manifestPath;
try
{
manifestPath = Utils.GetEnvironmentVariableOrError("DAFNY_AWS_ESDK_TEST_VECTOR_MANIFEST_PATH");
}
catch (ArgumentException e)
{
throw new ArgumentException("Hierarchy keyring test vectors must supply a KeyVectors manifest", e);
}
DecryptManifest manifest = Utils.LoadObjectFromPath<DecryptManifest>(manifestPath);
KeyVectorsConfig keyVectorsConfig = new KeyVectorsConfig
{
KeyManifestPath = Utils.ManifestUriToPath(manifest.KeysUri, manifestPath)
};
singletonKeyVectors = new(keyVectorsConfig);
}

// Convert JSON to bytes for KeyVectors input
string jsonString = JsonConvert.SerializeObject(keyInfo);

var stream = new MemoryStream();
var writer = new StreamWriter(stream);
writer.Write(jsonString);
writer.Flush();
stream.Position = 0;

// Create KeyVectors keyring
var getKeyDescriptionInput = new GetKeyDescriptionInput
{
Json = stream
};

var desc = singletonKeyVectors.GetKeyDescription(getKeyDescriptionInput);

var testVectorKeyringInput = new TestVectorKeyringInput
{
KeyDescription = desc.KeyDescription
};

var keyring = singletonKeyVectors.CreateTestVectorKeyring(
testVectorKeyringInput
);

return keyring!;
}

if (keyInfo.Type == "raw" && keyInfo.EncryptionAlgorithm == "aes") {
CreateRawAesKeyringInput createKeyringInput = new CreateRawAesKeyringInput
{
Expand Down Expand Up @@ -209,7 +265,7 @@ private static IKeyring CreateKeyring(MasterKey keyInfo, Key key, CryptoOperatio
// string operationStr = operation == CryptoOperation.ENCRYPT
// ? "encryption"
// : "decryption";
throw new Exception($"Unsupported keyring type for {operation}");
throw new Exception($"Unsupported keyring {keyInfo.Type} type for {operation}");
}

private static AesWrappingAlg AesAlgorithmFromBits(ushort bits) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@ public class Key {
public string? Encoding { get; set; }
[JsonProperty("material")]
public string? Material { get; set; }
[JsonProperty("branchKeyVersion")]
public string? BranchKeyVersion { get; set; }
[JsonProperty("branchKey")]
public string? BranchKey { get; set; }
[JsonProperty("beaconKey")]
public string? BeaconKey { get; set; }
}

public class KeyManifest
Expand Down