Release 4.0.0-preview1-00051
[platform/core/csapi/tizenfx.git] / src / Tizen.Security.SecureRepository / Tizen.Security.SecureRepository / Crypto / AesGcmCipherParameters.cs
1 /*
2  *  Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  *  Licensed under the Apache License, Version 2.0 (the "License");
5  *  you may not use this file except in compliance with the License.
6  *  You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  *  Unless required by applicable law or agreed to in writing, software
11  *  distributed under the License is distributed on an "AS IS" BASIS,
12  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *  See the License for the specific language governing permissions and
14  *  limitations under the License
15  */
16
17 using System;
18
19 namespace Tizen.Security.SecureRepository.Crypto
20 {
21     /// <summary>
22     /// A class holding parameters for AES algorithm with GCM mode.
23     /// </summary>
24     /// <since_tizen> 3 </since_tizen>
25     public class AesGcmCipherParameters : AesCipherParameters
26     {
27         /// <summary>
28         /// A default constructor
29         /// </summary>
30         /// <since_tizen> 3 </since_tizen>
31         /// <remarks>The CipherAlgorithmType in CipherParameters is set to CipherAlgorithmType.AesGcm.</remarks>
32         public AesGcmCipherParameters() : base(CipherAlgorithmType.AesGcm)
33         {
34         }
35
36         /// <summary>
37         /// GCM tag length in bits.
38         /// </summary>
39         /// <since_tizen> 3 </since_tizen>
40         /// <remarks>One of {32, 64, 96, 104, 112, 120, 128} (optional, if not present the length 128 is used.</remarks>
41         /// <exception cref="ArgumentOutOfRangeException">TagLength should be one of {32, 64, 96, 104, 112, 120, 128}</exception>
42         public long TagLength
43         {
44             get
45             {
46                 return GetInteger(CipherParameterName.TagLength);
47             }
48             set
49             {
50                 if (value != 32 && value != 64 && value != 96 && value != 104 &&
51                     value != 112 && value != 120 && value != 128)
52                 {
53                     throw new ArgumentOutOfRangeException(
54                         string.Format("invalid value{0} on TagLength", value));
55                 }
56                 else
57                 {
58                     Add(CipherParameterName.TagLength, value);
59                 }
60             }
61         }
62
63         /// <summary>
64         /// Additional authentication data(optional)
65         /// </summary>
66         /// <since_tizen> 3 </since_tizen>
67         public byte[] AAD
68         {
69             get { return GetBuffer(CipherParameterName.AAD); }
70             set { Add(CipherParameterName.AAD, value); }
71         }
72     }
73 }