// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 include "../src/Index.dfy" include "Fixtures.dfy" module TestGetKeys { import Types = AwsCryptographyKeyStoreTypes import ComAmazonawsKmsTypes import KMS = Com.Amazonaws.Kms import DDB = Com.Amazonaws.Dynamodb import KeyStore import opened Wrappers import opened Fixtures import UTF8 const incorrectLogicalName := "MySuperAwesomeTableName"; method {:test} TestGetBeaconKey() { var kmsClient :- expect KMS.KMSClient(); var ddbClient :- expect DDB.DynamoDBClient(); var kmsConfig := Types.KMSConfiguration.kmsKeyArn(keyArn); var keyStoreConfig := Types.KeyStoreConfig( id := None, kmsConfiguration := kmsConfig, logicalKeyStoreName := logicalKeyStoreName, grantTokens := None, ddbTableName := branchKeyStoreName, ddbClient := Some(ddbClient), kmsClient := Some(kmsClient) ); var keyStore :- expect KeyStore.KeyStore(keyStoreConfig); var beaconKeyResult :- expect keyStore.GetBeaconKey( Types.GetBeaconKeyInput( branchKeyIdentifier := branchKeyId )); expect beaconKeyResult.beaconKeyMaterials.beaconKeyIdentifier == branchKeyId; expect beaconKeyResult.beaconKeyMaterials.beaconKey.Some?; expect |beaconKeyResult.beaconKeyMaterials.beaconKey.value| == 32; } method {:test} TestGetActiveKey() { var kmsClient :- expect KMS.KMSClient(); var ddbClient :- expect DDB.DynamoDBClient(); var kmsConfig := Types.KMSConfiguration.kmsKeyArn(keyArn); var keyStoreConfig := Types.KeyStoreConfig( id := None, kmsConfiguration := kmsConfig, logicalKeyStoreName := logicalKeyStoreName, grantTokens := None, ddbTableName := branchKeyStoreName, ddbClient := Some(ddbClient), kmsClient := Some(kmsClient) ); var keyStore :- expect KeyStore.KeyStore(keyStoreConfig); var activeResult :- expect keyStore.GetActiveBranchKey( Types.GetActiveBranchKeyInput( branchKeyIdentifier := branchKeyId )); expect activeResult.branchKeyMaterials.branchKeyIdentifier == branchKeyId; expect activeResult.branchKeyMaterials.branchKeyVersion == branchKeyIdActiveVersionUtf8Bytes; expect |activeResult.branchKeyMaterials.branchKey| == 32; } method {:test} TestGetBranchKeyVersion() { var kmsClient :- expect KMS.KMSClient(); var ddbClient :- expect DDB.DynamoDBClient(); var kmsConfig := Types.KMSConfiguration.kmsKeyArn(keyArn); var keyStoreConfig := Types.KeyStoreConfig( id := None, kmsConfiguration := kmsConfig, logicalKeyStoreName := logicalKeyStoreName, grantTokens := None, ddbTableName := branchKeyStoreName, ddbClient := Some(ddbClient), kmsClient := Some(kmsClient) ); var keyStore :- expect KeyStore.KeyStore(keyStoreConfig); var versionResult :- expect keyStore.GetBranchKeyVersion( Types.GetBranchKeyVersionInput( branchKeyIdentifier := branchKeyId, branchKeyVersion := branchKeyIdActiveVersion )); var testBytes :- expect UTF8.Encode(branchKeyIdActiveVersion); expect versionResult.branchKeyMaterials.branchKeyIdentifier == branchKeyId; expect versionResult.branchKeyMaterials.branchKeyVersion == branchKeyIdActiveVersionUtf8Bytes == testBytes; expect |versionResult.branchKeyMaterials.branchKey| == 32; } method {:test} TestGetActiveKeyWithIncorrectKmsKeyArn() { var kmsClient :- expect KMS.KMSClient(); var ddbClient :- expect DDB.DynamoDBClient(); var kmsConfig := Types.KMSConfiguration.kmsKeyArn(mkrKeyArn); var keyStoreConfig := Types.KeyStoreConfig( id := None, kmsConfiguration := kmsConfig, logicalKeyStoreName := logicalKeyStoreName, grantTokens := None, ddbTableName := branchKeyStoreName, ddbClient := Some(ddbClient), kmsClient := Some(kmsClient) ); var keyStore :- expect KeyStore.KeyStore(keyStoreConfig); var activeResult := keyStore.GetActiveBranchKey( Types.GetActiveBranchKeyInput( branchKeyIdentifier := branchKeyId )); expect activeResult.Failure?; } method {:test} TestGetActiveKeyWrongLogicalKeyStoreName() { var kmsClient :- expect KMS.KMSClient(); var ddbClient :- expect DDB.DynamoDBClient(); var kmsConfig := Types.KMSConfiguration.kmsKeyArn(keyArn); var keyStoreConfig := Types.KeyStoreConfig( id := None, kmsConfiguration := kmsConfig, logicalKeyStoreName := incorrectLogicalName, grantTokens := None, ddbTableName := branchKeyStoreName, ddbClient := Some(ddbClient), kmsClient := Some(kmsClient) ); var keyStore :- expect KeyStore.KeyStore(keyStoreConfig); var activeResult := keyStore.GetActiveBranchKey( Types.GetActiveBranchKeyInput( branchKeyIdentifier := branchKeyId )); expect activeResult.Failure?; } method {:test} TestGetActiveKeyWithNoClients() { var kmsConfig := Types.KMSConfiguration.kmsKeyArn(keyArn); var keyStoreConfig := Types.KeyStoreConfig( id := None, kmsConfiguration := kmsConfig, logicalKeyStoreName := logicalKeyStoreName, grantTokens := None, ddbTableName := branchKeyStoreName, ddbClient := None, kmsClient := None ); var keyStore :- expect KeyStore.KeyStore(keyStoreConfig); var activeResult :- expect keyStore.GetActiveBranchKey( Types.GetActiveBranchKeyInput( branchKeyIdentifier := branchKeyId )); expect |activeResult.branchKeyMaterials.branchKey| == 32; } }