1e41f4b71Sopenharmony_ci# Converting Compressed or Uncompressed ECC Point Data
2e41f4b71Sopenharmony_ci 
3e41f4b71Sopenharmony_ciYou 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. 
4e41f4b71Sopenharmony_ciFor details about the ECC algorithm specifications, see [ECC](crypto-asym-key-generation-conversion-spec.md#ecc). 
5e41f4b71Sopenharmony_ciYou 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**.
6e41f4b71Sopenharmony_ci
7e41f4b71Sopenharmony_ci
8e41f4b71Sopenharmony_ci## Converting Uncompressed Point Data into Compressed Point Data
9e41f4b71Sopenharmony_ci
10e41f4b71Sopenharmony_ci1. Use [ECCKeyUtil.convertPoint](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#convertpoint12) to convert uncompressed ECC point data of the Uint8Array type into a [Point](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#point10) object.
11e41f4b71Sopenharmony_ci2. Use [ECCKeyUtil.getEncodedPoint](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencodedpoint12) to obtain compressed point data.
12e41f4b71Sopenharmony_ci
13e41f4b71Sopenharmony_ci```ts
14e41f4b71Sopenharmony_ciimport { cryptoFramework } from '@kit.CryptoArchitectureKit';
15e41f4b71Sopenharmony_ci
16e41f4b71Sopenharmony_cifunction eccPointUncompressedToCompressed() {
17e41f4b71Sopenharmony_ci  let pkData = new Uint8Array([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, 40, 217, 215, 148, 120, 224, 205, 82, 83, 92, 185, 21, 211, 184, 5, 19, 114, 33, 86, 85, 228, 123, 242, 206, 200, 98, 178, 184, 130, 35, 232, 45, 5, 202, 189, 11, 46, 163, 156, 152]);
18e41f4b71Sopenharmony_ci  let returnPoint = cryptoFramework.ECCKeyUtil.convertPoint('NID_brainpoolP256r1', pkData);
19e41f4b71Sopenharmony_ci  console.info('convertPoint success');
20e41f4b71Sopenharmony_ci  let returnData = cryptoFramework.ECCKeyUtil.getEncodedPoint('NID_brainpoolP256r1', returnPoint, 'COMPRESSED');
21e41f4b71Sopenharmony_ci  console.info('returnData: ' + returnData); // returnData is 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,40,217,215,148,120,224,205,82 (the prefix of the compressed point data is 02 because y is an even number). 
22e41f4b71Sopenharmony_ci}
23e41f4b71Sopenharmony_ci```
24e41f4b71Sopenharmony_ci
25e41f4b71Sopenharmony_ci
26e41f4b71Sopenharmony_ci## Converting Compressed Point Data into a Key Object
27e41f4b71Sopenharmony_ci
28e41f4b71Sopenharmony_ci1. Use [ECCKeyUtil.convertPoint](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#convertpoint12) to convert the compressed ECC point data of the Uint8Array type into a [Point](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#point10) object.
29e41f4b71Sopenharmony_ci2. Use [ECCKeyUtil.genECCCommonParamsSpec](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#genecccommonparamsspec11) with the curve name set to **NID_brainpoolP256r1** to generate the common key parameters for the ECC key pair.
30e41f4b71Sopenharmony_ci3. Construct a [ECCPubKeySpec](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#eccpubkeyspec10) object to specify the parameters for the ECC public key. **ECCPubKeySpec** is a child class of **AsyKeySpec**. Set **algName** to **ECC**.
31e41f4b71Sopenharmony_ciSpecify the key parameter type [AsyKeySpecType.PUBLIC_KEY_SPEC](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#asykeyspectype10), and set **pk** to the **Point** object obtained in step 1.
32e41f4b71Sopenharmony_ci4. Use [createAsyKeyGeneratorBySpec](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#cryptoframeworkcreateasykeygeneratorbyspec10) with the public key parameters to create an asymmetric key generator (**AsyKeyGeneratorBySpec**) object.
33e41f4b71Sopenharmony_ci5. Use [AsyKeyGeneratorBySpec.generatePubKey](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#generatepubkey-1) to generate the public key.
34e41f4b71Sopenharmony_ci6. Use [ECCKeyUtil.getEncodedPoint](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getencodedpoint12) to obtain uncompressed point data.
35e41f4b71Sopenharmony_ci7. Use [PubKey.getAsyKeySpec](../../reference/apis-crypto-architecture-kit/js-apis-cryptoFramework.md#getasykeyspec10) to obtain the x coordinate of the ECC public key **pk**.
36e41f4b71Sopenharmony_ci
37e41f4b71Sopenharmony_ci```ts
38e41f4b71Sopenharmony_ciimport { cryptoFramework } from '@kit.CryptoArchitectureKit';
39e41f4b71Sopenharmony_ci
40e41f4b71Sopenharmony_ciasync function eccPointCompressedToPoint() {
41e41f4b71Sopenharmony_ci  let pkData = new Uint8Array([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, 40, 217, 215, 148, 120, 224, 205, 82]);
42e41f4b71Sopenharmony_ci  let returnPoint = cryptoFramework.ECCKeyUtil.convertPoint('NID_brainpoolP256r1', pkData);
43e41f4b71Sopenharmony_ci  console.info('convertPoint success');
44e41f4b71Sopenharmony_ci  let eccCommonParamsSpec = cryptoFramework.ECCKeyUtil.genECCCommonParamsSpec('NID_brainpoolP256r1');
45e41f4b71Sopenharmony_ci  let eccPubKeySpec: cryptoFramework.ECCPubKeySpec = {
46e41f4b71Sopenharmony_ci    algName: "ECC",
47e41f4b71Sopenharmony_ci    specType: cryptoFramework.AsyKeySpecType.PUBLIC_KEY_SPEC,
48e41f4b71Sopenharmony_ci    params: eccCommonParamsSpec,
49e41f4b71Sopenharmony_ci    pk: returnPoint
50e41f4b71Sopenharmony_ci  };
51e41f4b71Sopenharmony_ci  let generatorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(eccPubKeySpec);
52e41f4b71Sopenharmony_ci  let pubKey = await generatorBySpec.generatePubKey();
53e41f4b71Sopenharmony_ci  let returnData = cryptoFramework.ECCKeyUtil.getEncodedPoint('NID_brainpoolP256r1', returnPoint, 'UNCOMPRESSED');
54e41f4b71Sopenharmony_ci  console.info('returnData: ' + returnData); // 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,40,217,215,148,120,224,205,82,83,92,185,21,211,184,5,19,114,33,86,85,228,123,242,206,200,98,178,184,130,35,232,45,5,202,189,11,46,163,156,152
55e41f4b71Sopenharmony_ci  let eccPkX = pubKey.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_PK_X_BN);
56e41f4b71Sopenharmony_ci  console.info('returnPoint x data: ' + returnPoint.x); // 64750044510792891439269945828433327517677381559622384455951527515863444933970
57e41f4b71Sopenharmony_ci  console.info('ECC_PK_X_BN: ' + eccPkX); // 64750044510792891439269945828433327517677381559622384455951527515863444933970
58e41f4b71Sopenharmony_ci}
59e41f4b71Sopenharmony_ci```
60