1
- using Microsoft . Azure . Commands . KeyVault . Models ;
1
+ using Microsoft . Azure . Commands . Common . Exceptions ;
2
+ using Microsoft . Azure . Commands . KeyVault . Models ;
2
3
using Microsoft . Azure . Commands . ResourceManager . Common . ArgumentCompleters ;
4
+ using Microsoft . WindowsAzure . Commands . Common . CustomAttributes ;
5
+ using Microsoft . WindowsAzure . Commands . Utilities . Common ;
3
6
4
7
using System ;
8
+ using System . Collections ;
5
9
using System . Management . Automation ;
6
10
using System . Security ;
7
11
using System . Text ;
@@ -14,6 +18,7 @@ namespace Microsoft.Azure.Commands.KeyVault.Commands.Key
14
18
/// 3. Wraps a symmetric key using a specified key.
15
19
/// 4. Unwraps a symmetric key using the specified key that was initially used for wrapping that key.
16
20
/// </summary>
21
+ [ CmdletOutputBreakingChangeWithVersion ( typeof ( PSKeyOperationResult ) , "12.0.0" , "6.0.0" , DeprecatedOutputProperties = new string [ ] { "Result" } , NewOutputProperties = new string [ ] { "RawResult" } ) ]
17
22
[ Cmdlet ( VerbsLifecycle . Invoke , ResourceManager . Common . AzureRMConstants . AzurePrefix + "KeyVaultKeyOperation" , SupportsShouldProcess = true , DefaultParameterSetName = ByVaultNameParameterSet ) ]
18
23
[ OutputType ( typeof ( PSKeyOperationResult ) ) ]
19
24
public class InvokeAzureKeyVaultKeyOperation : KeyVaultKeyCmdletBase
@@ -52,51 +57,89 @@ enum Operations
52
57
[ Alias ( "EncryptionAlgorithm" , "WrapAlgorithm" ) ]
53
58
public string Algorithm { get ; set ; }
54
59
55
- [ Parameter ( Mandatory = true ,
56
- HelpMessage = "The value to be operated" ) ]
60
+ [ Parameter ( Mandatory = false , HelpMessage = "The value to be operated. This parameter will be converted to byte array in UTF-8 encoding way. If your value can't be encoded by UTF-8, please use parameter ByteArrayValue as its alternative." ) ]
57
61
[ ValidateNotNullOrEmpty ]
62
+ [ CmdletParameterBreakingChangeWithVersion ( nameof ( Value ) , "12.0.0" , "6.0.0" , ReplaceMentCmdletParameterName = nameof ( ByteArrayValue ) ) ]
58
63
public SecureString Value { get ; set ; }
64
+
65
+ [ Parameter ( Mandatory = false , HelpMessage = "The value to be operated in byte array format." ) ]
66
+ [ ValidateNotNullOrEmpty ]
67
+ public byte [ ] ByteArrayValue { get ; set ; }
68
+
59
69
#endregion Input Parameter Definitions
60
70
71
+ private Operations opt = Operations . Unknown ;
72
+
73
+ internal void ValidateParameters ( )
74
+ {
75
+ if ( this . IsParameterBound ( c => c . Value ) && this . IsParameterBound ( c => c . ByteArrayValue ) )
76
+ {
77
+ throw new AzPSArgumentException ( string . Format ( "Please provide only one of parameter Value and ByteArrayValue" ) , nameof ( ByteArrayValue ) ) ;
78
+ }
79
+ else if ( ! this . IsParameterBound ( c => c . Value ) && ! this . IsParameterBound ( c => c . ByteArrayValue ) )
80
+ {
81
+ throw new AzPSArgumentException ( string . Format ( "Must provide one of parameter Value and ByteArrayValue" ) , nameof ( ByteArrayValue ) ) ;
82
+ }
83
+ }
84
+
61
85
internal override void NormalizeParameterSets ( )
62
86
{
87
+
63
88
if ( InputObject != null )
64
89
{
65
90
Version = Version ?? InputObject . Version ;
66
91
}
92
+
93
+ Enum . TryParse ( Operation , out opt ) ;
94
+
95
+ if ( this . IsParameterBound ( c => c . Value ) )
96
+ {
97
+ switch ( opt )
98
+ {
99
+ case Operations . Encrypt :
100
+ ByteArrayValue = Encoding . UTF8 . GetBytes ( Value . ConvertToString ( ) ) ;
101
+ break ;
102
+ case Operations . Decrypt :
103
+ ByteArrayValue = Convert . FromBase64String ( Value . ConvertToString ( ) ) ;
104
+ break ;
105
+ case Operations . Wrap :
106
+ ByteArrayValue = Encoding . UTF8 . GetBytes ( Value . ConvertToString ( ) ) ;
107
+ break ;
108
+ case Operations . Unwrap :
109
+ ByteArrayValue = Convert . FromBase64String ( Value . ConvertToString ( ) ) ;
110
+ break ;
111
+ default :
112
+ throw new NotSupportedException ( "Not supported ${Operation} yet" ) ;
113
+ }
114
+ }
115
+
67
116
base . NormalizeParameterSets ( ) ;
68
117
}
69
118
70
119
public override void ExecuteCmdlet ( )
71
120
{
121
+ ValidateParameters ( ) ;
72
122
NormalizeParameterSets ( ) ;
73
123
74
- Operations opt = Operations . Unknown ;
75
- Enum . TryParse ( Operation , out opt ) ;
76
-
77
124
if ( string . IsNullOrEmpty ( HsmName ) )
78
125
{
79
126
switch ( opt )
80
127
{
81
128
case Operations . Encrypt :
82
129
this . WriteObject (
83
- this . Track2DataClient . Encrypt ( VaultName , Name , Version ,
84
- Encoding . UTF8 . GetBytes ( Value . ConvertToString ( ) ) , Algorithm ) ) ;
130
+ this . Track2DataClient . Encrypt ( VaultName , Name , Version , ByteArrayValue , Algorithm ) ) ;
85
131
break ;
86
132
case Operations . Decrypt :
87
133
this . WriteObject (
88
- this . Track2DataClient . Decrypt ( VaultName , Name , Version ,
89
- Convert . FromBase64String ( Value . ConvertToString ( ) ) , Algorithm ) ) ;
134
+ this . Track2DataClient . Decrypt ( VaultName , Name , Version , ByteArrayValue , Algorithm ) ) ;
90
135
break ;
91
136
case Operations . Wrap :
92
137
this . WriteObject (
93
- this . Track2DataClient . WrapKey ( VaultName , Name , Version ,
94
- Encoding . UTF8 . GetBytes ( Value . ConvertToString ( ) ) , Algorithm ) ) ;
138
+ this . Track2DataClient . WrapKey ( VaultName , Name , Version , ByteArrayValue , Algorithm ) ) ;
95
139
break ;
96
140
case Operations . Unwrap :
97
141
this . WriteObject (
98
- this . Track2DataClient . UnwrapKey ( VaultName , Name , Version ,
99
- Convert . FromBase64String ( Value . ConvertToString ( ) ) , Algorithm ) ) ;
142
+ this . Track2DataClient . UnwrapKey ( VaultName , Name , Version , ByteArrayValue , Algorithm ) ) ;
100
143
break ;
101
144
case Operations . Unknown :
102
145
throw new NotSupportedException ( "Not supported ${Operation} yet" ) ;
@@ -108,23 +151,19 @@ public override void ExecuteCmdlet()
108
151
{
109
152
case Operations . Encrypt :
110
153
this . WriteObject (
111
- this . Track2DataClient . ManagedHsmKeyEncrypt ( HsmName , Name , Version ,
112
- Encoding . UTF8 . GetBytes ( Value . ConvertToString ( ) ) , Algorithm ) ) ;
154
+ this . Track2DataClient . ManagedHsmKeyEncrypt ( HsmName , Name , Version , ByteArrayValue , Algorithm ) ) ;
113
155
break ;
114
156
case Operations . Decrypt :
115
157
this . WriteObject (
116
- this . Track2DataClient . ManagedHsmKeyDecrypt ( HsmName , Name , Version ,
117
- Convert . FromBase64String ( Value . ConvertToString ( ) ) , Algorithm ) ) ;
158
+ this . Track2DataClient . ManagedHsmKeyDecrypt ( HsmName , Name , Version , ByteArrayValue , Algorithm ) ) ;
118
159
break ;
119
160
case Operations . Wrap :
120
161
this . WriteObject (
121
- this . Track2DataClient . ManagedHsmWrapKey ( HsmName , Name , Version ,
122
- Encoding . UTF8 . GetBytes ( Value . ConvertToString ( ) ) , Algorithm ) ) ;
162
+ this . Track2DataClient . ManagedHsmWrapKey ( HsmName , Name , Version , ByteArrayValue , Algorithm ) ) ;
123
163
break ;
124
164
case Operations . Unwrap :
125
165
this . WriteObject (
126
- this . Track2DataClient . ManagedHsmUnwrapKey ( HsmName , Name , Version ,
127
- Convert . FromBase64String ( Value . ConvertToString ( ) ) , Algorithm ) ) ;
166
+ this . Track2DataClient . ManagedHsmUnwrapKey ( HsmName , Name , Version , ByteArrayValue , Algorithm ) ) ;
128
167
break ;
129
168
case Operations . Unknown :
130
169
throw new NotSupportedException ( "Not supported ${Operation} yet" ) ;
0 commit comments