Updated on 2026-06-09 GMT+08:00

Creating an EC Data Key Pair

Function

This API is used to create an EC data key pair. The returned result contains the plaintext public key and ciphertext private key. You can determine whether to return the plaintext private key based on the parameter.

Calling Method

For details, see Calling APIs.

Authorization Information

Each account has all the permissions required to call all APIs, but IAM users must be assigned the required permissions.

  • If you are using role/policy-based authorization, see Permissions Policies and Supported Actions for details on the required permissions.
  • If you are using identity policy-based authorization, the following identity policy-based permissions are required.

    Action

    Access Level

    Resource Type (*: required)

    Condition Key

    Alias

    Dependencies

    kms:cmk:createDataKeyPair

    Write

    KeyId *

    • kms:KeyOrigin

    • kms:KeySpec

    • kms:KeyUsage

    • kms:MultiRegionKeyType

    • g:EnterpriseProjectId

    • g:ResourceTag/<tag-key>

    -

    -

    -

    • kms:RecipientAttestation/<attestation-key>

    • kms:RequestAlias

    • kms:ResourceAliases

    • kms:EncryptionContext

URI

POST /v1.0/{project_id}/kms/create-ec-datakey-pair

Table 1 Path Parameters

Parameter

Mandatory

Type

Description

project_id

Yes

String

Definition

Project ID. For details, see Obtaining a Project ID.

Constraints

N/A

Range

The value returned by the IAM API is used, which contains 32 characters.

Default Value

N/A

Request Parameters

Table 2 Request header parameters

Parameter

Mandatory

Type

Description

X-Auth-Token

Yes

String

Definition

User token. It can be obtained by calling the IAM API. The value of X-Subject-Token in the response header is the user token.

Constraints

N/A

Range

Obtain the value by calling the IAM API for obtaining the user token.

Default Value

N/A

Table 3 Request body parameters

Parameter

Mandatory

Type

Description

key_id

Yes

String

Definition

Key ID

Constraints

  • The value must be a 36-byte ID.

  • The value must match the regular expression ^[0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12}$.

Range

N/A

Default Value

N/A

key_spec

Yes

String

Definition

Include the algorithm, length, and curve information.

Constraints

N/A

Range

  • ECC_NIST_P256

  • ECC_NIST_P384

  • ECC_NIST_P521

  • ECC_SECG_P256K1

  • SM2

Default Value

N/A

with_plain_text

No

Boolean

Definition

Whether to return the plaintext private key

Constraints

N/A

Range

  • true

  • false

Default Value

true

additional_authenticated_data

No

String

Definition

Additional information for authentication and encryption. Do not enter sensitive information.

Constraints

N/A

Range

N/A

Default Value

N/A

sequence

No

String

Definition

A 36-byte serial number of a request message, for example, 919c82d4-8046-4722-9094-35c3c6524cff.

Constraints

N/A

Range

N/A

Default Value

N/A

Response Parameters

Status code: 200

Table 4 Response body parameters

Parameter

Type

Description

key_id

String

Definition

Key ID

Range

N/A

key_spec

String

Definition

Algorithm

Range

  • RSA_2048

  • RSA_3072

  • RSA_4096

  • ECC_NIST_P256

  • ECC_NIST_P384

  • ECC_NIST_P521

  • ECC_SECG_P256K1

  • SM2

public_key

String

Definition

Plaintext public key information

Range

N/A

private_key_cipher_text

String

Definition

Ciphertext private key

Range

N/A

private_key_plain_text

String

Definition

Plaintext private key. Only one of private_key_plain_text, wrapped_private_key, and ciphertext_recipient can have a value.

Range

N/A

wrapped_private_key

String

Definition

Ciphertext private key encrypted using the custom private key. Only one of private_key_plain_text, wrapped_private_key, and ciphertext_recipient can have a value.

Range

N/A

ciphertext_recipient

String

Definition

Ciphertext private key encrypted using the QingTian public key. Only one of private_key_plain_text, wrapped_private_key, and ciphertext_recipient can have a value.

Range

N/A

Example Requests

{
  "key_id" : "0d0466b0-e727-4d9c-b35d-f84bb474a37f",
  "key_spec" : "ECC_NIST_P256",
  "with_plain_text" : true,
  "additional_authenticated_data" : "aad",
  "sequence" : "sequence"
}

Example Responses

Status code: 200

Request succeeded.

{
  "key_id" : "0d0466b0-e727-4d9c-b35d-f84bb474a37f",
  "key_spec" : "ECC_NIST_P256",
  "public_key" : "public_key",
  "private_key_cipher_text" : "private_key_cipher_text",
  "private_key_plain_text" : "private_key_plain_text",
  "wrapped_private_key" : "wrapped_private_key",
  "ciphertext_recipient" : "ciphertext_recipient"
}

SDK Sample Code

The SDK sample code is as follows.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package com.huaweicloud.sdk.test;

import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import com.huaweicloud.sdk.kms.v2.region.KmsRegion;
import com.huaweicloud.sdk.kms.v2.*;
import com.huaweicloud.sdk.kms.v2.model.*;


public class CreateEcDatakeyPairSolution {

    public static void main(String[] args) {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        String ak = System.getenv("CLOUD_SDK_AK");
        String sk = System.getenv("CLOUD_SDK_SK");
        String projectId = "{project_id}";

        ICredential auth = new BasicCredentials()
                .withProjectId(projectId)
                .withAk(ak)
                .withSk(sk);

        KmsClient client = KmsClient.newBuilder()
                .withCredential(auth)
                .withRegion(KmsRegion.valueOf("<YOUR REGION>"))
                .build();
        CreateEcDatakeyPairRequest request = new CreateEcDatakeyPairRequest();
        CreateEcDatakeyPairRequestBody body = new CreateEcDatakeyPairRequestBody();
        body.withSequence("sequence");
        body.withAdditionalAuthenticatedData("aad");
        body.withWithPlainText(true);
        body.withKeySpec(CreateEcDatakeyPairRequestBody.KeySpecEnum.fromValue("ECC_NIST_P256"));
        body.withKeyId("0d0466b0-e727-4d9c-b35d-f84bb474a37f");
        request.withBody(body);
        try {
            CreateEcDatakeyPairResponse response = client.createEcDatakeyPair(request);
            System.out.println(response.toString());
        } catch (ConnectionException e) {
            e.printStackTrace();
        } catch (RequestTimeoutException e) {
            e.printStackTrace();
        } catch (ServiceResponseException e) {
            e.printStackTrace();
            System.out.println(e.getHttpStatusCode());
            System.out.println(e.getRequestId());
            System.out.println(e.getErrorCode());
            System.out.println(e.getErrorMsg());
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# coding: utf-8

import os
from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkkms.v2.region.kms_region import KmsRegion
from huaweicloudsdkcore.exceptions import exceptions
from huaweicloudsdkkms.v2 import *

if __name__ == "__main__":
    # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak = os.environ["CLOUD_SDK_AK"]
    sk = os.environ["CLOUD_SDK_SK"]
    projectId = "{project_id}"

    credentials = BasicCredentials(ak, sk, projectId)

    client = KmsClient.new_builder() \
        .with_credentials(credentials) \
        .with_region(KmsRegion.value_of("<YOUR REGION>")) \
        .build()

    try:
        request = CreateEcDatakeyPairRequest()
        request.body = CreateEcDatakeyPairRequestBody(
            sequence="sequence",
            additional_authenticated_data="aad",
            with_plain_text=True,
            key_spec="ECC_NIST_P256",
            key_id="0d0466b0-e727-4d9c-b35d-f84bb474a37f"
        )
        response = client.create_ec_datakey_pair(request)
        print(response)
    except exceptions.ClientRequestException as e:
        print(e.status_code)
        print(e.request_id)
        print(e.error_code)
        print(e.error_msg)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package main

import (
	"fmt"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
    kms "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/kms/v2"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/kms/v2/model"
    region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/kms/v2/region"
)

func main() {
    // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak := os.Getenv("CLOUD_SDK_AK")
    sk := os.Getenv("CLOUD_SDK_SK")
    projectId := "{project_id}"

    auth, err := basic.NewCredentialsBuilder().
        WithAk(ak).
        WithSk(sk).
        WithProjectId(projectId).
        SafeBuild()

    if err != nil {
        fmt.Println(err)
        return
    }

    hcClient, err := kms.KmsClientBuilder().
         WithRegion(region.ValueOf("<YOUR REGION>")).
         WithCredential(auth).
         SafeBuild()


    if err != nil {
        fmt.Println(err)
        return
    }

    client := kms.NewKmsClient(hcClient)

    request := &model.CreateEcDatakeyPairRequest{}
	sequenceCreateEcDatakeyPairRequestBody:= "sequence"
	additionalAuthenticatedDataCreateEcDatakeyPairRequestBody:= "aad"
	withPlainTextCreateEcDatakeyPairRequestBody:= true
	request.Body = &model.CreateEcDatakeyPairRequestBody{
		Sequence: &sequenceCreateEcDatakeyPairRequestBody,
		AdditionalAuthenticatedData: &additionalAuthenticatedDataCreateEcDatakeyPairRequestBody,
		WithPlainText: &withPlainTextCreateEcDatakeyPairRequestBody,
		KeySpec: model.GetCreateEcDatakeyPairRequestBodyKeySpecEnum().ECC_NIST_P256,
		KeyId: "0d0466b0-e727-4d9c-b35d-f84bb474a37f",
	}
	response, err := client.CreateEcDatakeyPair(request)
	if err == nil {
        fmt.Printf("%+v\n", response)
    } else {
        fmt.Println(err)
    }
}

For SDK sample code of more programming languages, see the Sample Code tab in API Explorer. SDK sample code can be automatically generated.

Status Codes

Status Code

Description

200

Request succeeded.

Error Codes

See Error Codes.