1 /* 2 * Copyright (C) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include <gtest/gtest.h> 17 #include <fstream> 18 #include <iostream> 19 #include "securec.h" 20 21 #include "aes_common.h" 22 #include "aes_openssl.h" 23 #include "blob.h" 24 #include "cipher.h" 25 #include "detailed_iv_params.h" 26 #include "detailed_gcm_params.h" 27 #include "detailed_ccm_params.h" 28 #include "log.h" 29 #include "memory.h" 30 #include "sym_common_defines.h" 31 #include "sym_key_generator.h" 32 33 using namespace std; 34 using namespace testing::ext; 35 36 namespace { 37 class CryptoAesOfbCipherTest : public testing::Test { 38 public: SetUpTestCase()39 static void SetUpTestCase() {}; TearDownTestCase()40 static void TearDownTestCase() {}; SetUp()41 void SetUp() {}; TearDown()42 void TearDown() {}; 43 }; 44 45 HWTEST_F(CryptoAesOfbCipherTest, CryptoAesOfbCipherTest001, TestSize.Level0) 46 { 47 uint8_t iv[16] = {0}; 48 uint8_t cipherText[128] = {0}; 49 int cipherTextLen = 128; 50 51 HcfIvParamsSpec ivSpec = {}; 52 HcfSymKeyGenerator *generator = nullptr; 53 HcfCipher *cipher = nullptr; 54 HcfSymKey *key = nullptr; 55 ivSpec.iv.data = iv; 56 ivSpec.iv.len = 16; 57 58 int ret = HcfSymKeyGeneratorCreate("AES128", &generator); 59 ASSERT_EQ(ret, 0); 60 61 ret = generator->generateSymKey(generator, &key); 62 ASSERT_EQ(ret, 0); 63 64 ret = HcfCipherCreate("AES128|OFB|NoPadding", &cipher); 65 ASSERT_EQ(ret, 0); 66 67 ret = AesEncrypt(cipher, key, (HcfParamsSpec *)&ivSpec, cipherText, &cipherTextLen); 68 ASSERT_EQ(ret, 0); 69 70 ret = AesDecrypt(cipher, key, (HcfParamsSpec *)&ivSpec, cipherText, cipherTextLen); 71 ASSERT_EQ(ret, 0); 72 73 HcfObjDestroy((HcfObjectBase *)key); 74 HcfObjDestroy((HcfObjectBase *)cipher); 75 HcfObjDestroy((HcfObjectBase *)generator); 76 } 77 78 HWTEST_F(CryptoAesOfbCipherTest, CryptoAesOfbCipherTest002, TestSize.Level0) 79 { 80 uint8_t iv[16] = {0}; 81 uint8_t cipherText[128] = {0}; 82 int cipherTextLen = 128; 83 84 HcfIvParamsSpec ivSpec = {}; 85 HcfSymKeyGenerator *generator = nullptr; 86 HcfCipher *cipher = nullptr; 87 HcfSymKey *key = nullptr; 88 ivSpec.iv.data = iv; 89 ivSpec.iv.len = 16; 90 91 int ret = HcfSymKeyGeneratorCreate("AES128", &generator); 92 ASSERT_EQ(ret, 0); 93 94 ret = generator->generateSymKey(generator, &key); 95 ASSERT_EQ(ret, 0); 96 97 ret = HcfCipherCreate("AES128|OFB|PKCS5", &cipher); 98 ASSERT_EQ(ret, 0); 99 100 ret = AesEncrypt(cipher, key, (HcfParamsSpec *)&ivSpec, cipherText, &cipherTextLen); 101 ASSERT_EQ(ret, 0); 102 103 ret = AesDecrypt(cipher, key, (HcfParamsSpec *)&ivSpec, cipherText, cipherTextLen); 104 ASSERT_EQ(ret, 0); 105 106 HcfObjDestroy((HcfObjectBase *)key); 107 HcfObjDestroy((HcfObjectBase *)cipher); 108 HcfObjDestroy((HcfObjectBase *)generator); 109 } 110 111 HWTEST_F(CryptoAesOfbCipherTest, CryptoAesOfbCipherTest003, TestSize.Level0) 112 { 113 uint8_t iv[16] = {0}; 114 uint8_t cipherText[128] = {0}; 115 int cipherTextLen = 128; 116 117 HcfIvParamsSpec ivSpec = {}; 118 HcfSymKeyGenerator *generator = nullptr; 119 HcfCipher *cipher = nullptr; 120 HcfSymKey *key = nullptr; 121 ivSpec.iv.data = iv; 122 ivSpec.iv.len = 16; 123 124 int ret = HcfSymKeyGeneratorCreate("AES128", &generator); 125 ASSERT_EQ(ret, 0); 126 127 ret = generator->generateSymKey(generator, &key); 128 ASSERT_EQ(ret, 0); 129 130 ret = HcfCipherCreate("AES128|OFB|PKCS7", &cipher); 131 ASSERT_EQ(ret, 0); 132 133 ret = AesEncrypt(cipher, key, (HcfParamsSpec *)&ivSpec, cipherText, &cipherTextLen); 134 ASSERT_EQ(ret, 0); 135 136 ret = AesDecrypt(cipher, key, (HcfParamsSpec *)&ivSpec, cipherText, cipherTextLen); 137 ASSERT_EQ(ret, 0); 138 139 HcfObjDestroy((HcfObjectBase *)key); 140 HcfObjDestroy((HcfObjectBase *)cipher); 141 HcfObjDestroy((HcfObjectBase *)generator); 142 } 143 144 HWTEST_F(CryptoAesOfbCipherTest, CryptoAesOfbCipherTest004, TestSize.Level0) 145 { 146 uint8_t iv[16] = {0}; 147 uint8_t cipherText[128] = {0}; 148 int cipherTextLen = 128; 149 150 HcfIvParamsSpec ivSpec = {}; 151 HcfSymKeyGenerator *generator = nullptr; 152 HcfCipher *cipher = nullptr; 153 HcfSymKey *key = nullptr; 154 ivSpec.iv.data = iv; 155 ivSpec.iv.len = 16; 156 157 int ret = HcfSymKeyGeneratorCreate("AES128", &generator); 158 ASSERT_EQ(ret, 0); 159 160 ret = generator->generateSymKey(generator, &key); 161 ASSERT_EQ(ret, 0); 162 163 ret = HcfCipherCreate("AES128|OFB|NoPadding", &cipher); 164 ASSERT_EQ(ret, 0); 165 166 ret = AesNoUpdateEncrypt(cipher, key, (HcfParamsSpec *)&ivSpec, cipherText, &cipherTextLen); 167 ASSERT_EQ(ret, 0); 168 169 ret = AesNoUpdateDecrypt(cipher, key, (HcfParamsSpec *)&ivSpec, cipherText, cipherTextLen); 170 ASSERT_EQ(ret, 0); 171 172 HcfObjDestroy((HcfObjectBase *)key); 173 HcfObjDestroy((HcfObjectBase *)cipher); 174 HcfObjDestroy((HcfObjectBase *)generator); 175 } 176 177 HWTEST_F(CryptoAesOfbCipherTest, CryptoAesOfbCipherTest005, TestSize.Level0) 178 { 179 uint8_t iv[16] = {0}; 180 uint8_t cipherText[128] = {0}; 181 int cipherTextLen = 128; 182 183 HcfIvParamsSpec ivSpec = {}; 184 HcfSymKeyGenerator *generator = nullptr; 185 HcfCipher *cipher = nullptr; 186 HcfSymKey *key = nullptr; 187 ivSpec.iv.data = iv; 188 ivSpec.iv.len = 16; 189 190 int ret = HcfSymKeyGeneratorCreate("AES128", &generator); 191 ASSERT_EQ(ret, 0); 192 193 ret = generator->generateSymKey(generator, &key); 194 ASSERT_EQ(ret, 0); 195 196 ret = HcfCipherCreate("AES128|OFB|PKCS5", &cipher); 197 ASSERT_EQ(ret, 0); 198 199 ret = AesNoUpdateEncrypt(cipher, key, (HcfParamsSpec *)&ivSpec, cipherText, &cipherTextLen); 200 ASSERT_EQ(ret, 0); 201 202 ret = AesNoUpdateDecrypt(cipher, key, (HcfParamsSpec *)&ivSpec, cipherText, cipherTextLen); 203 ASSERT_EQ(ret, 0); 204 205 HcfObjDestroy((HcfObjectBase *)key); 206 HcfObjDestroy((HcfObjectBase *)cipher); 207 HcfObjDestroy((HcfObjectBase *)generator); 208 } 209 210 HWTEST_F(CryptoAesOfbCipherTest, CryptoAesOfbCipherTest006, TestSize.Level0) 211 { 212 uint8_t iv[16] = {0}; 213 uint8_t cipherText[128] = {0}; 214 int cipherTextLen = 128; 215 216 HcfIvParamsSpec ivSpec = {}; 217 HcfSymKeyGenerator *generator = nullptr; 218 HcfCipher *cipher = nullptr; 219 HcfSymKey *key = nullptr; 220 ivSpec.iv.data = iv; 221 ivSpec.iv.len = 16; 222 223 int ret = HcfSymKeyGeneratorCreate("AES128", &generator); 224 ASSERT_EQ(ret, 0); 225 226 ret = generator->generateSymKey(generator, &key); 227 ASSERT_EQ(ret, 0); 228 229 ret = HcfCipherCreate("AES128|OFB|PKCS7", &cipher); 230 ASSERT_EQ(ret, 0); 231 232 ret = AesNoUpdateEncrypt(cipher, key, (HcfParamsSpec *)&ivSpec, cipherText, &cipherTextLen); 233 ASSERT_EQ(ret, 0); 234 235 ret = AesNoUpdateDecrypt(cipher, key, (HcfParamsSpec *)&ivSpec, cipherText, cipherTextLen); 236 ASSERT_EQ(ret, 0); 237 238 HcfObjDestroy((HcfObjectBase *)key); 239 HcfObjDestroy((HcfObjectBase *)cipher); 240 HcfObjDestroy((HcfObjectBase *)generator); 241 } 242 243 HWTEST_F(CryptoAesOfbCipherTest, CryptoAesOfbCipherTest007, TestSize.Level0) 244 { 245 uint8_t iv[16] = {0}; 246 247 HcfIvParamsSpec ivSpec = {}; 248 HcfCipher *cipher = nullptr; 249 HcfSymKey *key = nullptr; 250 ivSpec.iv.data = iv; 251 ivSpec.iv.len = 16; 252 253 int ret = GenerateSymKey("AES128", &key); 254 ASSERT_EQ(ret, 0); 255 256 ret = HcfCipherCreate("AES128|OFB|NoPadding", &cipher); 257 ASSERT_EQ(ret, 0); 258 259 ret = GeneratorFile("/data/test_aes.txt", 10 * FILE_BLOCK_SIZE); 260 ASSERT_EQ(ret, 0); 261 262 ret = AesMultiBlockEncrypt(cipher, key, (HcfParamsSpec *)&ivSpec); 263 ASSERT_EQ(ret, 0); 264 265 ret = AesMultiBlockDecrypt(cipher, key, (HcfParamsSpec *)&ivSpec); 266 ASSERT_EQ(ret, 0); 267 268 ret = CompareFileContent(); 269 ASSERT_EQ(ret, 0); 270 271 HcfObjDestroy((HcfObjectBase *)key); 272 HcfObjDestroy((HcfObjectBase *)cipher); 273 } 274 275 HWTEST_F(CryptoAesOfbCipherTest, CryptoAesOfbCipherTest008, TestSize.Level0) 276 { 277 uint8_t iv[AES_IV_LEN] = { 0 }; 278 uint8_t cipherText[CIPHER_TEXT_LEN] = { 0 }; 279 int cipherTextLen = CIPHER_TEXT_LEN; 280 281 HcfIvParamsSpec ivSpec = {}; 282 HcfCipher *cipher = nullptr; 283 HcfSymKey *key = nullptr; 284 ivSpec.iv.data = iv; 285 ivSpec.iv.len = AES_IV_LEN; 286 287 int ret = GenerateSymKey("AES192", &key); 288 ASSERT_EQ(ret, 0); 289 290 ret = HcfCipherCreate("AES192|OFB|PKCS5", &cipher); 291 ASSERT_EQ(ret, 0); 292 293 ret = AesEncrypt(cipher, key, &(ivSpec.base), cipherText, &cipherTextLen); 294 ASSERT_EQ(ret, 0); 295 296 ret = AesDecrypt(cipher, key, &(ivSpec.base), cipherText, cipherTextLen); 297 ASSERT_EQ(ret, 0); 298 299 HcfObjDestroy(key); 300 HcfObjDestroy(cipher); 301 } 302 303 HWTEST_F(CryptoAesOfbCipherTest, CryptoAesOfbCipherTest009, TestSize.Level0) 304 { 305 uint8_t iv[AES_IV_LEN] = { 0 }; 306 uint8_t cipherText[CIPHER_TEXT_LEN] = { 0 }; 307 int cipherTextLen = CIPHER_TEXT_LEN; 308 309 HcfIvParamsSpec ivSpec = {}; 310 HcfCipher *cipher = nullptr; 311 HcfSymKey *key = nullptr; 312 ivSpec.iv.data = iv; 313 ivSpec.iv.len = AES_IV_LEN; 314 315 int ret = GenerateSymKey("AES256", &key); 316 ASSERT_EQ(ret, 0); 317 318 ret = HcfCipherCreate("AES256|OFB|PKCS5", &cipher); 319 ASSERT_EQ(ret, 0); 320 321 ret = AesEncrypt(cipher, key, &(ivSpec.base), cipherText, &cipherTextLen); 322 ASSERT_EQ(ret, 0); 323 324 ret = AesDecrypt(cipher, key, &(ivSpec.base), cipherText, cipherTextLen); 325 ASSERT_EQ(ret, 0); 326 327 HcfObjDestroy(key); 328 HcfObjDestroy(cipher); 329 } 330 }