Objet objet intégré

ObjetECKey

La classe ECKey est encryptoImplémentée dans le module, vous pouvez utiliser cette classe pour générer des paires de clés ECDSA, des messages de signature et de vérification, etc.

Voici un exemple:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
const crypto = require("crypto"); // generate a secp256k1 key const key = crypto.generateKey("secp256k1"); console.log("Private key:", key.pem()); console.log("Public key:", key.publicKey.pem()); const message = "Hello, fibjs!"; // sign a message const sig = key.sign(message); console.log("Signature:", sig.hex()); // very the signature const verify = key.verify(message, sig); console.log("Verify result:", verify);

Dans cet exemple, nous générons d'abord un objet ECKey secp256k1, puis imprimons les clés publiques et privées générées. Ensuite, nous avons signé le message "Bonjour, fibjs!" et imprimé le résultat de la signature, et enfin vérifié la signature en utilisant le même objet clé, et imprimé le résultat de la vérification.

relation d'héritage

Constructeur

ECKey

Construire ECKey à partir d'une clé au format DER

1 2
new ECKey(Buffer DerKey, String password = "");

Paramètres d'appel :

  • DerKey:Buffer, la clé au format DER
  • password: Chaîne, mot de passe déchiffré

Construire ECKey à partir de la clé au format PEM

1 2
new ECKey(String pemKey, String password = "");

Paramètres d'appel :

  • pemKey: Chaîne, clé au format PEM
  • password: Chaîne, mot de passe déchiffré

Construire ECKey à partir de la clé au format JSON

1
new ECKey(Object jsonKey);

Paramètres d'appel :

  • jsonKey: Objet, clé au format JSON

Le format de jsonKey prend en charge les deux types suivants, clé privée EC :

1 2 3 4 5 6 7
{ "kty": "EC", "crv": "P-521", "x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL", "y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU", "d": "AfkIbUHXfW41njdpoKuqqKludcoLJS8D_oMEwkj-GVaXFNKccIoF5iKGu2c69kNDjo83R_7wyGlfRczsklkik1ST" }

Clé publique CE :

1 2 3 4 5 6
{ "kty": "EC", "crv": "P-521", "x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL", "y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU" }

fonction statique

recover

récupérer la clé publique à partir de la signature récupérable, seul secp256k1 pris en charge

1 2
static ECKey ECKey.recover(Buffer data, Buffer sig) async;

Paramètres d'appel :

  • data:Buffer, les données originales de la signature
  • sig:Buffer, la signature récupérable

résultat de retour :

  • ECKey, renvoie un objet contenant la clé publique

from

Charger une clé au format DER

1 2
static PKey ECKey.from(Buffer DerKey, String password = "");

Paramètres d'appel :

  • DerKey:Buffer, la clé au format DER
  • password: Chaîne, mot de passe déchiffré

résultat de retour :

  • PKey, renvoie un objet contenant la clé

Charger une clé au format PEM

1 2
static PKey ECKey.from(String pemKey, String password = "");

Paramètres d'appel :

  • pemKey: Chaîne, clé au format PEM
  • password: Chaîne, mot de passe déchiffré

résultat de retour :

  • PKey, renvoie un objet contenant la clé

Charger une clé au format JSON

1
static PKey ECKey.from(Object jsonKey);

Paramètres d'appel :

  • jsonKey: Objet, clé au format JSON

résultat de retour :

  • PKey, renvoie un objet contenant la clé

Le format de jsonKey prend en charge les quatre types de clé privée RSA suivants :

1 2 3 4 5 6 7 8 9 10 11
{ "kty": "RSA", "n": "0m5lvKpWqy9JS7tV2HIPqHCYHLquSuxIC3F8strIQLJKO3rZmTT96KTnhsOfBO7Y1bI7mnT0PB3_vcHd9ekWMEoZJQw7MuB8KeM_Wn54-elJr5DNLk5bMppSGxX7ZnumiXGG51_X3Yp-_EbGtDG80GxXXix7Mucyo7K25uE0uW8=", "e": "AQAB", "d": "agN2O9NxMHL1MTMi75WfL9Pxvl-KWXKqZSF6mjzAsF9iKI8euyHIXYFepzU8kual1RsjDhCnzvWqFvZplW8lXqrHf_P-rS_9Y4gBUw6pjnI_DnFIRwWHRvrUHHSCfWOdTCIKdOTkgLZuGFuhEY3RMIW0WSYejjLtftwy0RVxAzk=", "p": "6a4G1qmfwWmn1biigN7IVFlkbLf9oVe6g7rOmHxI-hn1GRxKDSVuAUrmR1IhuAnca9M0y7SD-7TUs6wjOxWxaw==", "q": "5ofkxFKdPBD0CQHMb9q13AMHUVe0rJ-hSjqqIBrmqApUOneyAcMV76M0QyIQnI2p3POa4Qu_7XChDwRVl7LlDQ==", "dp": "2mXGiGwCHl8j-FBWuID-1C6z-BRB3MBEVoeKPOOzxOPruatB3mWEGXsqG7A8SWgV9URxTI2K6P3J6Z7RUpBkvw==", "dq": "oagn5vfb5NQqnOpS9xkSsD67cfIj821ZSFlNFYhnuOzNVda7z_qCtnHm4zDPH0lEFXoKYMfBhfqWJpaugttjPQ==", "qi": "dqEQgxNmOVFrF4s776hTqeC6oEDila8EvpVb2F2ZvwAOLjCQ66OiAZK1BiYGHqUy0NeqNmtlsLSuBEZQZvqZwg==" }

Clé publique RSA :

1 2 3 4 5
{ "kty": "RSA", "n": "0m5lvKpWqy9JS7tV2HIPqHCYHLquSuxIC3F8strIQLJKO3rZmTT96KTnhsOfBO7Y1bI7mnT0PB3_vcHd9ekWMEoZJQw7MuB8KeM_Wn54-elJr5DNLk5bMppSGxX7ZnumiXGG51_X3Yp-_EbGtDG80GxXXix7Mucyo7K25uE0uW8=", "e": "AQAB" }

Clé privée CE :

1 2 3 4 5 6 7
{ "kty": "EC", "crv": "P-521", "x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL", "y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU", "d": "AfkIbUHXfW41njdpoKuqqKludcoLJS8D_oMEwkj-GVaXFNKccIoF5iKGu2c69kNDjo83R_7wyGlfRczsklkik1ST" }

Clé publique CE :

1 2 3 4 5 6
{ "kty": "EC", "crv": "P-521", "x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL", "y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU" }

attribut de membre

curve

Chaîne, renvoie le nom de la courbe elliptique de l'algorithme actuel

1
readonly String ECKey.curve;

name

Chaîne, renvoie le nom de l'algorithme actuel

1
readonly String ECKey.name;

keySize

Entier, renvoie la longueur actuelle du mot de passe de l'algorithme en bits

1
readonly Integer ECKey.keySize;

alg

Chaîne, renvoie et définit l'algorithme de signature de l'objet courant

1
String ECKey.alg;

publicKey

PKey, retourne la clé publique de la clé courante

1
readonly PKey ECKey.publicKey;

résultat de retour :

  • la clé publique de la clé courante

fonction membre

computeSecret

Calcule un secret partagé Elliptic Curve Diffie-Hellman (ECDH) en utilisant l'algorithme actuel

1
Buffer ECKey.computeSecret(ECKey publicKey) async;

Paramètres d'appel :

  • publicKey: ECKey, spécifiez la clé publique de l'autre partie

résultat de retour :

  • Buffer, renvoie le secret partagé calculé

isPrivate

Demander si la clé actuelle est une clé privée

1
Boolean ECKey.isPrivate();

résultat de retour :

  • Boolean, si True signifie clé privée

clone

copier la clé actuelle

1
PKey ECKey.clone();

résultat de retour :

  • PKey, l'objet de copie de la clé actuelle

pem

Renvoie l'encodage au format PEM de la clé courante

1
String ECKey.pem();

résultat de retour :

  • String, l'encodage au format PEM de la clé courante

der

Renvoie l'encodage au format DER de la clé actuelle

1
Buffer ECKey.der();

résultat de retour :

  • Buffer, l'encodage au format DER de la clé actuelle

json

Renvoie l'encodage au format jwt de la clé actuelle

1
Object ECKey.json(Object opts = {});

Paramètres d'appel :

  • opts: Objet, spécifie les options d'exportation

résultat de retour :

  • Object, l'encodage au format jwt de la clé courante

opts prend en charge les paramètres suivants :

1 2 3
{ compress: false, 指定签名以压缩方式输出公钥 }

Les courbes qui prennent en charge la compression sont : secp192r1, secp192k1, secp256r1, secp256k1, brainpoolP256r1, secp384r1, brainpoolP384r1, brainpoolP512r1, secp521r1, sm2


equals

Comparer si deux clés publiques/privées sont identiques

1
Boolean ECKey.equals(PKey key);

Paramètres d'appel :

  • key:PKey, spécifiez la clé publique/privée de l'autre partie

résultat de retour :

  • Boolean, renvoie true si le même

encrypt

Crypter les données à l'aide de la clé publique cryptographique de l'algorithme actuel

1
Buffer ECKey.encrypt(Buffer data) async;

Paramètres d'appel :

  • data:Buffer, spécifie les données à chiffrer

résultat de retour :

  • Buffer, renvoie les données chiffrées

decrypt

Déchiffrer les données à l'aide de la clé privée cryptographique de l'algorithme actuel

1
Buffer ECKey.decrypt(Buffer data) async;

Paramètres d'appel :

  • data:Buffer, précise les données à déchiffrer

résultat de retour :

  • Buffer, renvoie les données déchiffrées

sign

Signer les données à l'aide de la clé privée cryptographique de l'algorithme actuel

1 2
Buffer ECKey.sign(Buffer data, Object opts = {}) async;

Paramètres d'appel :

  • data:Buffer, précise les données à signer
  • opts: Objet, spécifie les options de signature

résultat de retour :

  • Buffer, renvoie les données signées

opts prend en charge les paramètres suivants :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
{ alg: 0, 指定签名的 hash 算法, 仅在 RSA 时有效, 缺省为 0. 支持算法: 0 = NONE, 1 = MD5, 2 = SHA1, 3 = SHA224, 4 = SHA256, 5 = SHA384, 6 = SHA512, 7 = RIPEMD160 to: pk, 指定验证方公钥, 仅在 ecsdsa 或 sm2 时有效 format: "der", 指定签名格式, 可选为 der 和 raw, 缺省为 der recoverable: false 指定返回可恢复签名, 仅在 secp256k1 有效 }

verify

Vérifier les données à l'aide de la clé publique cryptographique de l'algorithme actuel

1 2 3
Boolean ECKey.verify(Buffer data, Buffer sign, Object opts = {}) async;

Paramètres d'appel :

  • data:Buffer, en précisant les données à valider
  • sign:Buffer, en précisant la signature à vérifier
  • opts: Objet, spécifie les options d'authentification

résultat de retour :

  • Boolean, renvoie le résultat vérifié

opts prend en charge les paramètres suivants :

1 2 3 4 5 6 7 8 9 10 11 12 13 14
{ alg: 0, 指定签名的 hash 算法, 仅在 RSA 时有效, 缺省为 0. 支持算法: 0 = NONE, 1 = MD5, 2 = SHA1, 3 = SHA224, 4 = SHA256, 5 = SHA384, 6 = SHA512, 7 = RIPEMD160 to: pk, 指定验证方公钥, 仅在 ecsdsa 或 sm2 时有效 format: "der", 指定签名格式, 可选为 der 和 raw, 缺省为 der }

toString

Renvoie la représentation sous forme de chaîne de l'objet, renvoie généralement "[Native Object]", l'objet peut être réimplémenté selon ses propres caractéristiques

1
String ECKey.toString();

résultat de retour :

  • String, renvoie une représentation sous forme de chaîne de l'objet

toJSON

Renvoie la représentation au format JSON de l'objet, renvoie généralement une collection de propriétés lisibles définies par l'objet

1
Value ECKey.toJSON(String key = "");

Paramètres d'appel :

  • key: Chaîne, non utilisée

résultat de retour :

  • Value, qui renvoie une valeur sérialisable JSON