Class: Aws::KMS::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/porky_lib/aws/kms/client.rb

Overview

This class is required for unit testing in order to mock response values from the AWS KMS SDK.

Constant Summary collapse

MOCK_ALIAS_NAME_ALREADY_EXISTS =
'alias/dup'
MOCK_INVALID_ALIAS_NAME =
'alias/aws'
MOCK_INVALID_TAG_VALUE =
'bad_value'
MOCK_NOT_FOUND_KEY_ID =
'bad_key'
MOCK_VALID_KEY_USAGE =
'AES_256'
PLAINTEXT_KEY_LENGTH =
32

Instance Method Summary collapse

Instance Method Details

#create_alias(target_key_id:, alias_name:) ⇒ Object

Raises:

  • (Aws::KMS::Errors::InvalidAliasNameException)


38
39
40
41
42
# File 'lib/porky_lib/aws/kms/client.rb', line 38

def create_alias(target_key_id:, alias_name:)
  raise Aws::KMS::Errors::InvalidAliasNameException.new(nil, nil) if alias_name == MOCK_INVALID_ALIAS_NAME
  raise Aws::KMS::Errors::AlreadyExistsException.new(nil, nil) if alias_name == MOCK_ALIAS_NAME_ALREADY_EXISTS
  raise Aws::KMS::Errors::NotFoundException.new(nil, nil) if target_key_id.include?(MOCK_NOT_FOUND_KEY_ID)
end

#create_key(key_usage:, origin:, tags:) ⇒ Object

Raises:

  • (Aws::KMS::Errors::TagException)


17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/porky_lib/aws/kms/client.rb', line 17

def create_key(key_usage:, origin:, tags:)
  raise Aws::KMS::Errors::TagException.new(nil, nil) if tags[0].value?(MOCK_INVALID_TAG_VALUE)

  Aws::KMS::Types::CreateKeyResponse.new(
    key_metadata: {
      aws_account_id: '123',
      creation_date: Time.now.utc.iso8601,
      description: '',
      enabled: true,
      key_id: SecureRandom.uuid,
      key_state: 'Enabled',
      key_usage: key_usage,
      origin: origin
    }
  )
end

#decrypt(ciphertext_blob:, encryption_context: nil) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/porky_lib/aws/kms/client.rb', line 73

def decrypt(ciphertext_blob:, encryption_context: nil)
  key_id, decoded_context, plaintext = MessagePack.unpack(ciphertext_blob.reverse)
  decoded_context = Hash[decoded_context.map { |k, v| [k.to_sym, v] }] if decoded_context
  raise Aws::KMS::Errors::InvalidCiphertextException.new(nil, nil) unless decoded_context == encryption_context

  Aws::KMS::Types::DecryptResponse.new(
    key_id: key_id,
    plaintext: plaintext
  )
rescue MessagePack::MalformedFormatError
  raise Aws::KMS::Errors::InvalidCiphertextException.new(nil, nil)
end

#enable_key_rotation(key_id:) ⇒ Object

Raises:

  • (Aws::KMS::Errors::NotFoundException)


34
35
36
# File 'lib/porky_lib/aws/kms/client.rb', line 34

def enable_key_rotation(key_id:)
  raise Aws::KMS::Errors::NotFoundException.new(nil, nil) if key_id.include?(MOCK_NOT_FOUND_KEY_ID)
end

#generate_data_key(key_id:, key_spec:, encryption_context: nil) ⇒ Object

Raises:

  • (Aws::KMS::Errors::InvalidKeyUsageException)


61
62
63
64
65
66
67
68
69
70
71
# File 'lib/porky_lib/aws/kms/client.rb', line 61

def generate_data_key(key_id:, key_spec:, encryption_context: nil)
  raise Aws::KMS::Errors::InvalidKeyUsageException.new(nil, nil) unless key_spec == 'AES_256'
  raise Aws::KMS::Errors::NotFoundException.new(nil, nil) if key_id.include?(MOCK_NOT_FOUND_KEY_ID)

  plaintext = SecureRandom.random_bytes(PLAINTEXT_KEY_LENGTH)
  Aws::KMS::Types::GenerateDataKeyResponse.new(
    key_id: key_id,
    plaintext: plaintext,
    ciphertext_blob: [key_id, encryption_context, plaintext].to_msgpack.reverse
  )
end

#inspectObject



86
87
88
# File 'lib/porky_lib/aws/kms/client.rb', line 86

def inspect
  '#<Aws::KMS::Client (mocked)>'
end

#list_aliasesObject



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/porky_lib/aws/kms/client.rb', line 44

def list_aliases
  {
    aliases: [
      {
        alias_arn: 'arn:aws:kms:us-east-2:111122223333:alias/example1',
        alias_name: 'alias/example1',
        target_key_id: "4da1e216-62d0-46c5-a7c0-5f3a3d2f8046"
      },
      {
        alias_arn: 'arn:aws:kms:us-east-2:444455556666:alias/new_key',
        alias_name: 'alias/new_key',
        target_key_id: "4da1e216-62d0-46c5-a7c0-5f3a3d2f8046"
      }
    ]
  }
end