1# Converting Compressed or Uncompressed ECC Point Data (C/C++) 2 3<!--Kit: Crypto Architecture Kit--> 4<!--Subsystem: Security--> 5<!--Owner: @zxz--3--> 6<!--Designer: @lanming--> 7<!--Tester: @PAFT--> 8<!--Adviser: @zengyawen--> 9 10You can convert compressed or uncompressed point data into a **Point** object for generating a key object, or convert a **Point** object into compressed or uncompressed point data.<br> 11For details about the ECC algorithm specifications, see [ECC](crypto-asym-key-generation-conversion-spec.md#ecc).<br> 12You can pass in the string parameter **format** to specify the format of the point data to obtain. To obtain compressed point data, set **format** to **COMPRESSED**. To obtain uncompressed point data, set **format** to **UNCOMPRESSED**. 13 14## Converting Uncompressed Point Data into Compressed Point Data 15 161. Pass the uncompressed ECC point data of the uint8_t type, and call [OH_CryptoEcPoint_Create](../../reference/apis-crypto-architecture-kit/capi-crypto-asym-key-h.md#oh_cryptoecpoint_create) to construct a [OH_CryptoEcPoint](../../reference/apis-crypto-architecture-kit/capi-cryptoasymkeyapi-oh-cryptoecpoint.md) object for generating point data. 172. Call [OH_CryptoEcPoint_Encode](../../reference/apis-crypto-architecture-kit/capi-crypto-asym-key-h.md#oh_cryptoecpoint_encode) to obtain the compressed point data. 18 19```C++ 20#include "CryptoArchitectureKit/crypto_architecture_kit.h" 21 22static OH_Crypto_ErrCode doTestEccPointUncompressedToCompressed() 23{ 24 uint8_t pk[] = { 25 4, 143, 39, 57, 249, 145, 50, 63, 222, 35, 70, 178, 121, 202, 154, 21, 146, 129, 75, 76, 63, 8, 195, 157, 111, 26 40, 217, 215, 148, 120, 224, 205, 82, 83, 92, 185, 21, 211, 184, 5, 19, 114, 33, 86, 85, 228, 123, 242, 206, 27 200, 98, 178, 184, 130, 35, 232, 45, 5, 202, 189, 11, 46, 163, 156, 152 28 }; 29 Crypto_DataBlob pkData = {pk, sizeof(pk)}; 30 OH_CryptoEcPoint *point = nullptr; 31 OH_Crypto_ErrCode ret = OH_CryptoEcPoint_Create("NID_brainpoolP256r1", &pkData, &point); 32 if (ret != CRYPTO_SUCCESS) { 33 return ret; 34 } 35 Crypto_DataBlob returnPointBlobData = {0}; 36 ret = OH_CryptoEcPoint_Encode(point, "COMPRESSED", &returnPointBlobData); 37 if (ret != CRYPTO_SUCCESS) { 38 OH_CryptoEcPoint_Destroy(point); 39 return ret; 40 } 41 OH_Crypto_FreeDataBlob(&returnPointBlobData); 42 OH_CryptoEcPoint_Destroy(point); 43 return ret; 44} 45``` 46 47## Converting Compressed Point Data into a Key Object 48 491. Pass the compressed ECC point data of the uint8_t type, and call [OH_CryptoEcPoint_Create](../../reference/apis-crypto-architecture-kit/capi-crypto-asym-key-h.md#oh_cryptoecpoint_create) to construct a [OH_CryptoEcPoint](../../reference/apis-crypto-architecture-kit/capi-cryptoasymkeyapi-oh-cryptoecpoint.md) object for generating point data. 502. Call [OH_CryptoEcPoint_Encode](../../reference/apis-crypto-architecture-kit/capi-crypto-asym-key-h.md#oh_cryptoecpoint_encode) to obtain the uncompressed point data. 51 52```C++ 53#include "CryptoArchitectureKit/crypto_architecture_kit.h" 54 55static OH_Crypto_ErrCode doTestEccPointeccPointCompressedToPoint() 56{ 57 uint8_t pk[] = { 58 2, 143, 39, 57, 249, 145, 50, 63, 222, 35, 70, 178, 121, 202, 154, 21, 146, 129, 75, 76, 63, 8, 195, 157, 111, 59 40, 217, 215, 148, 120, 224, 205, 82 60 }; 61 Crypto_DataBlob pkData = {pk, sizeof(pk)}; 62 OH_CryptoEcPoint *point = nullptr; 63 OH_Crypto_ErrCode ret = OH_CryptoEcPoint_Create("NID_brainpoolP256r1", &pkData, &point); 64 if (ret != CRYPTO_SUCCESS) { 65 return ret; 66 } 67 Crypto_DataBlob returnPointBlobData = {0}; 68 ret = OH_CryptoEcPoint_Encode(point, "UNCOMPRESSED", &returnPointBlobData); 69 if (ret != CRYPTO_SUCCESS) { 70 OH_CryptoEcPoint_Destroy(point); 71 return ret; 72 } 73 OH_Crypto_FreeDataBlob(&returnPointBlobData); 74 OH_CryptoEcPoint_Destroy(point); 75 return ret; 76} 77``` 78