Skip to content

Commit 1b73176

Browse files
committed
add mock table tests for signing
1 parent 02d8f5a commit 1b73176

File tree

1 file changed

+47
-18
lines changed

1 file changed

+47
-18
lines changed

tests/requests/kms/key_tests.rb

Lines changed: 47 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
KEY_SPECS = %w[RSA_2048 RSA_3072 RSA_4096 ECC_NIST_P256 ECC_NIST_P384 ECC_NIST_P521 ECC_SECG_P256K1].freeze
2+
SIGNING_ALGORITHMS = %w[RSASSA_PSS_SHA_256 RSASSA_PSS_SHA_384 RSASSA_PSS_SHA_512 RSASSA_PKCS1_V1_5_SHA_256 RSASSA_PKCS1_V1_5_SHA_384 RSASSA_PKCS1_V1_5_SHA_512 ECDSA_SHA_256 ECDSA_SHA_384 ECDSA_SHA_512]
3+
14
Shindo.tests('AWS::KMS | key requests', %w[aws kms]) do
25
key_id = nil
3-
public_key = nil
46
pkey = nil
57
data = 'sign me'
68

@@ -41,32 +43,59 @@
4143
end
4244

4345
tests('#sign') do
44-
sign_response = Fog::AWS[:kms].sign(key_id, data, 'RSASSA_PSS_SHA_256', 'MessageType' => 'RAW').body
46+
sign_response = Fog::AWS[:kms].sign(key_id, data, 'RSASSA_PKCS1_V1_5_SHA_256', 'MessageType' => 'RAW').body
4547

4648
tests('format').data_matches_schema(AWS::KMS::Formats::SIGN) { sign_response }
4749

4850
tests('#verify').returns(true) do
4951
signature = Base64.decode64(sign_response['Signature'])
50-
pkey.verify('SHA256', signature, data, { rsa_padding_mode: 'pss' })
52+
pkey.verify('SHA256', signature, data)
5153
end
5254
end
5355

54-
tests('#sign RAW').returns(true) do
55-
sign_response = Fog::AWS[:kms].sign(key_id, data, 'RSASSA_PSS_SHA_256', 'MessageType' => 'RAW').body
56-
signature = Base64.decode64(sign_response['Signature'])
57-
58-
pkey.verify('SHA256', signature, data, { rsa_padding_mode: 'pss' })
59-
end
60-
61-
tests('#sign DIGEST').returns(true) do
62-
hash = OpenSSL::Digest.digest('SHA256', data)
63-
sign_response = Fog::AWS[:kms].sign(key_id, hash, 'RSASSA_PSS_SHA_256', 'MessageType' => 'DIGEST').body
64-
signature = Base64.decode64(sign_response['Signature'])
65-
66-
pkey.verify_raw('SHA256', signature, hash, { rsa_padding_mode: 'pss' })
67-
end
68-
6956
tests('#schedule_key_deletion').data_matches_schema(AWS::KMS::Formats::SCHEDULE_KEY_DELETION) do
7057
Fog::AWS[:kms].schedule_key_deletion(key_id, 7).body
7158
end
59+
60+
tests('mock sign') do
61+
pending unless Fog.mock?
62+
63+
KEY_SPECS.each do |key_spec|
64+
SIGNING_ALGORITHMS.select { |sa| sa.start_with?(key_spec[0...2]) }.each do |signing_algorithm|
65+
key_id = Fog::AWS[:kms].create_key(
66+
'KeySpec' => key_spec,
67+
'KeyUsage' => 'SIGN_VERIFY'
68+
).body['KeyMetadata']['KeyId']
69+
70+
result = Fog::AWS[:kms].get_public_key(key_id).body
71+
public_key = Base64.decode64(result['PublicKey'])
72+
pkey = if key_spec.start_with?('RSA')
73+
OpenSSL::PKey::RSA.new(public_key)
74+
elsif key_spec.start_with?('EC')
75+
OpenSSL::PKey::EC.new(public_key)
76+
end
77+
sha = "SHA#{signing_algorithm.split('_SHA_').last}"
78+
sign_opts = if signing_algorithm.include?('_PSS_')
79+
{ rsa_padding_mode: 'pss' }
80+
else
81+
{}
82+
end
83+
84+
tests("#sign #{key_spec} #{signing_algorithm} DIGEST").returns(true) do
85+
hash = OpenSSL::Digest.digest(sha, data)
86+
sign_response = Fog::AWS[:kms].sign(key_id, hash, signing_algorithm, 'MessageType' => 'DIGEST').body
87+
signature = Base64.decode64(sign_response['Signature'])
88+
89+
pkey.verify_raw(sha, signature, hash, sign_opts)
90+
end
91+
92+
tests("#sign #{key_spec} #{signing_algorithm} RAW").returns(true) do
93+
sign_response = Fog::AWS[:kms].sign(key_id, data, signing_algorithm, 'MessageType' => 'RAW').body
94+
signature = Base64.decode64(sign_response['Signature'])
95+
96+
pkey.verify(sha, signature, data, sign_opts)
97+
end
98+
end
99+
end
100+
end
72101
end

0 commit comments

Comments
 (0)