22// The .NET Foundation licenses this file to you under the Apache 2.0 License.
33// See the LICENSE file in the project root for more information.
44
5+ using System . Text ;
56using Steeltoe . Configuration . Encryption . Cryptography ;
67
78namespace Steeltoe . Configuration . Encryption . Test . Cryptography ;
@@ -42,8 +43,8 @@ public void Constructor_WithUnsupportedAlgorithmThrows()
4243 }
4344
4445 [ Theory ]
45- [ MemberData ( nameof ( GetTestVector ) ) ]
46- public void Decode_TestForSpringConfigCipher_WithDefaultKey ( string salt , string strong , string algorithm , string cipher , string plainText )
46+ [ MemberData ( nameof ( GetSpringConfigServerTestVectors ) ) ]
47+ public void Decrypt_WithSpringCipherText_UsingDefaultKeyAlias ( string salt , string strong , string algorithm , string cipher , string plainText )
4748 {
4849 var decryptor = new RsaKeyStoreDecryptor ( _keyProvider , "mytestkey" , salt , bool . Parse ( strong ) , algorithm ) ;
4950 string decrypted = decryptor . Decrypt ( cipher ) ;
@@ -52,33 +53,51 @@ public void Decode_TestForSpringConfigCipher_WithDefaultKey(string salt, string
5253 }
5354
5455 [ Theory ]
55- [ MemberData ( nameof ( GetTestVector ) ) ]
56- public void Decode_TestForSpringConfigCipher_WithSpecifiedKey ( string salt , string strong , string algorithm , string cipher , string plainText )
56+ [ MemberData ( nameof ( GetSpringConfigServerTestVectors ) ) ]
57+ public void Decrypt_WithSpringCipherText_UsingExplicitKeyAlias ( string salt , string strong , string algorithm , string cipher , string plainText )
5758 {
5859 var decryptor = new RsaKeyStoreDecryptor ( _keyProvider , "someKey" , salt , bool . Parse ( strong ) , algorithm ) ;
5960 string decrypted = decryptor . Decrypt ( cipher , "mytestkey" ) ;
6061
6162 decrypted . Should ( ) . Be ( plainText ) ;
6263 }
6364
64- public static TheoryData < string , string , string , string , string > GetTestVector ( )
65+ // Requires Config Server to be running with OAEP encryption configured (see docker-compose.yml at the repo root)
66+ [ Fact ]
67+ [ Trait ( "Category" , "Integration" ) ]
68+ public async Task Decrypt_WithOaepAlgorithm_CanDecryptSpringConfigServerCipherText ( )
69+ {
70+ // ReSharper disable once ShortLivedHttpClient
71+ using var httpClient = new HttpClient ( ) ;
72+
73+ HttpResponseMessage response = await httpClient . PostAsync ( new Uri ( "http://localhost:8888/encrypt" ) ,
74+ new StringContent ( "encrypt the world" , Encoding . UTF8 , "text/plain" ) , TestContext . Current . CancellationToken ) ;
75+
76+ response . EnsureSuccessStatusCode ( ) ;
77+ string springCipherText = await response . Content . ReadAsStringAsync ( TestContext . Current . CancellationToken ) ;
78+
79+ var decryptor = new RsaKeyStoreDecryptor ( _keyProvider , "mytestkey" , "deadbeef" , false , "OAEP" ) ;
80+ string decrypted = decryptor . Decrypt ( springCipherText ) ;
81+
82+ decrypted . Should ( ) . Be ( "encrypt the world" ) ;
83+ }
84+
85+ // Pre-generated ciphertext is from Spring Cloud Config Server (steeltoe.azurecr.io/config-server:4.3.1)
86+ public static TheoryData < string , string , string , string , string > GetSpringConfigServerTestVectors ( )
6587 {
6688 List < ( string Salt , string Strong , string Algorithm , string Cipher , string PlainText ) > data =
6789 [
6890 ( "deadbeef" , "false" , "OAEP" ,
69- "AQATBPXCmri0MCEoCam0noXJgKGlFfE/chVN7XhH1V23MqJ8sI3lI61PyvsryJP3LlfNn38gUuulMeslAs/gUCoPFPV/zD7M8x527wQUbmWD6bR0ZMJ4hu3DisK6Diw2YAOxXSsm3Zh46cPFQcowfOG1x2OXj+5uL4T+VBGdt3Nr6dHCOumkTJ1KAtaJMfASf3J8G4M27v6m4Y2EdBqP1zWwDhAZ3R0u9uTP9xYUqQiKsUeOixrhOaCvtb1Q+Zg6A41CxM4cjL3Ty6miNYLx3QkxRvfkdo0iqo7jTrWWAT1aeRV6t5U5iMlWnD4eXzad60E3ZSINhvDiB03xPPPuHKC6qUTRJEEbQFegmn/KIPMMn9WaH/JLLZNvQYMuaFszZ84AE3aQcH0be+sNFDSjHNHL" ,
70- "encrypt the world" ) ,
71- ( "deadbeef" , "false" , "OAEP" ,
72- "AQBoZM07gyw+GN0SXCkARLiSDjhN0flk07QP9+BsNnPEQD+alfH6A5FJwwuEf7d/kNJozppaZuHcPpDnRZbzmsRcqOcO0BiJFjsbX5K9o8jcAsGhDmLAf0jy/Ry1de6bELjZ4MPArbVN9numHTre4plXBXun2AVeNNBYG3yHed0A68o6FCc6UR/Pfdo/H+oTburn2qVKaZL+DAqIKHntcZjTLg/ZRa7MKUMCKiFEtV88U3lg+1YUqgz+XUmg2zyUsHgHNzYlTOtJWkFW51wNz/M2C92Zsu4R6bF1ewb2RM0N8VmjQAw6GpfLNX+CB3gGlDPsfGjc9qiF3zNsJSk88dm1+NruXeon5Nth691NQJ6DpgMXhhFzv7L/eyZKL/kZpGIVZK6dW3iePzsBtuFdrjiZ" ,
91+ "AQA5BZk2Pg7/nbcuTrJ/i4MDOIc831GfHLUg1GQlBtOvRJm2iXngfbPKcnTjbtZZ9X+qPnbdkUcTVbgYcsszY3uoqWIN5Yybwg+dHsqZTv1/XSvwR/kwflDg+I6C+dxg3GepoCAZSPi+J5/MsfCYJAp6KI3WW34tbqkqNlJq1TmF4b/AQHmP7Pth6cIsFE7svQ0xDQRhY61lJESLvLZ1Em4XpA4cfiye1YQhNud7/AKTtyENf7oPT/7siWBN82gyCB63/HEMRNtSLobOKO1XzgWNc96ms4pIhACOA3cZarTDUqaKY+B84ATV5QKgfkQ/ihI6r2oeYB24ApKwjNyE4F4b0bFH1cchdsbooreJlflgn0U9gK0oo8t7cVGnih3lccJs3t0uAFVm+SrJGMG/8rgp" ,
7392 "encrypt the world" ) ,
7493 ( "beefdead" , "true" , "OAEP" ,
75- "AQAbWqohCeQ+TTqyJ3ZlNvAtx5cC2I3PmJetuSR82yRRyX+wWd7mTkUXuN/wANJ+nr1ySdzPudjml1lHaxZn42I9szkIKSkNT+6Yg+zNaREMetcE5SXA1awtSbEaFY2NcualSzPVWs8ulsUkKlYyyh6XP9gT/kODbmX0mS6DCtxalJgjei7WujLaJaPjc3jk+EhV9M1TovexqI7XoLlsgrGf6/1gQE+SSOamTFJopWpYEeSpSEwY2dXZfct5KCFWGJVA7eDPRJk0dT6EWIvqd6J4YoMWonxgVy4nG/Gq0NTisXv9XpJHAPYBg0c8B0WrWi2PG/Q00wvFRqGmYQ1hQIVmbJm8z+f0WoCxKwnCZvvdLlgrx2qeK1S21dPdgtmLXlj5bRUrektFrNhlevlENW7wgg==" ,
94+ "AQAwoGhHV/Z82UWIrmqmTT92L510iKkwiF+EhlroV/No3dLwamUovEB9n/4IF+j6wfv8q1Baqekn5y6folcQmiMJd86JHW2n+WNeKUlbjf3Rk5uwgSTL2ST1JZ8w6sZ0PZVE2tqaQoc9mHRmjT7hqRm1lQVsHsic5tCxdTmhYVdGp5J6UGTRPQNfyJBR34w+LFjtgyaOrF//o8Z5ZF9XUx3MGaoe4HnURIYRq5HHcd4yVFINaBpW19ndgPV+nWRANxnmltLgPUbLWBJSvJ8czHOfZvZnTSJrWDBp1GIHN0OFkObJAIl7hmOdCh3vFPkxOL9gH4690VlMOCWYI8elsvuFsOdPG++FtJVSbuGgYC3AnuFo955yBfy8tgdegQ5Zzb2sOS2mwqsWr4mly4Pis+bgpw==" ,
95+ "encrypt the world" ) ,
96+ ( "deadbeef" , "false" , "DEFAULT" ,
97+ "AQBSAVVzUP21aZXVAnuTMBDQ+/HGatD/+6H2YT/EbVofx5pWNJIjOlq1ioDpLHRB/JS86nI5oC9scEVBajc/gcWiYJAOtG4+g0Sw2ixzmi3jmho/CYxhtbxGFrkrTOC0r/0I6gcGgCo5ZrQCtaQDUMnHn+aFwo8baduKQ2N6qMyGHvfXIqqJFabnTkYDlLlqgNa3jpI3oKicaDTvPU3jFO42fJyVFWyAdQ8YS0RZdOXV+0xQdRnHrHHjhR8W7D7e0Jyx05RKq1ZEXvN7+x+YSE7ajrwy8riGuxR9a8smZAKkXC8T7KcZMRqtkd/9bpNS10bpw21KSxxp2GF52ekbu0xZYIIPdIj57me7HGubwNd1kXXgV+3L6sZ1IUAN0xnOOEUQD3z6hOWkrTEAmSbNRdYM" ,
7698 "encrypt the world" ) ,
7799 ( "beefdead" , "true" , "DEFAULT" ,
78100 "AQAhwKArLZqxrc44G2sG6+EwWeqn9JytaIyBpf/Yz2UZ0bLZthR3HPtGgOoKY9AkWpBuRzrw3zQ20ZRkq6q7XU+Stp1kB4OXhrmgbwydNUtYJmuTlpGohtHH8wVoT2n0bd7NuL9rJ2OAbkPXg8K1kJMSgen7Hyg3b+LFZmaA8wCHXdmHuP63Rk4NhSec4Ul/gRRn5jftojmbxVVQ6xRGAeFTZi70oAZ+tzdyXZmukorRZsUtnlgj94aSmGdMCGkukanCiEHHrh130Nigxba4qZ2F2e5n46De7+7EVwnIWWYa2sQH+3BQ+cp5OCebWMiGPdylqZzyTagkwo2jHv/OzW0/ytIF1Qo3AblMQgympSL3/PMPggllopaf2al4o7w63vWczXdv6YzdLchQMrdXRdkLrw==" ,
79- "encrypt the world" ) ,
80- ( "nohexsaltvalue" , "true" , "DEFAULT" ,
81- "AQA+sdMQ94WuW7DMBX7ZJQeWaybtFWJqAeVv9kmHyVCwil3yobQPXMxuoF/FGpZgYQu+9JyK52jnuIXiARdyqqaDKxY7ECN/8GLVXdcQi5ooO+ewyOrL53fycyyB2iQtZphbdgmzU2qKQkXvFcWQkauHCCtni6IemITLX/y9O3I6Ss9LEK86lSAWKD1Tikf9ly78vJsCJ01ahQhEQVMbkpTixnnFRgqSL7XZo+2FGMvsyYKHp9pQwEnLkbehI8AFODQlFsTcQ9YYab5lGa4OoYw+5oS3fFH8XlIvVSTfxipI18iyphppz3EefvuGd8FwgSGCbfIeQ2R2zcYxykfWgCgSH5ckev2EqeLaiyaK3tXFanumQBeLiSg7Uii80jg9LLJ62jyrR16m0+8CGqaw6uzZkQ==" ,
82101 "encrypt the world" )
83102 ] ;
84103
0 commit comments