Objet objet intégré

ObjetBlsKey

Objet algorithme de chiffrement de courbe elliptique

L'objet BlsKey est un objet utilisé dans fibjs pour représenter une clé BLS. Il peut être utilisé pour créer, importer, exporter et manipuler des clés BLS. La clé BLS est une méthode de cryptage à clé publique couramment utilisée pour l'authentification et la signature de données, et présente les caractéristiques d'offrir une vitesse d'exécution élevée tout en garantissant la sécurité.

L'objet BlsKey fournit diverses méthodes de constructeur pour charger des clés à partir de différents formats de clés. Il fournit également certaines propriétés et méthodes publiques comme toString(), clone(), name, publicKey(), etc., ainsi que certaines méthodes statiques, telles que from(), etc. Vous pouvez utiliser ces méthodes pour manipuler des objets BlsKey.

De plus, l'objet BlsKey possède des attributs de membre tels que isPrivate() et toJSON(key = ""), qui peuvent être utilisés pour demander si la clé est une clé privée et exporter la représentation au format JSON de l'objet.

L'objet BlsKey fournit un ensemble d'API flexibles et puissantes pour gérer facilement les clés BLS et mettre en œuvre des exigences de sécurité telles que l'authentification et la signature des données.

Ci-dessous, nous utilisons un exemple simple pour montrer comment utiliser l'objet BlsKey pour la signature et la vérification :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
var crypto = require('crypto'); // create a private key var privateKey = new crypto.BlsKey({ 'kty': 'EC', 'crv': 'BLS12-381-G1', 'x': 'TPk62yDxSISkoSBRPYkpO%tJmm0tZd4tJeLuCKVFv4UmBPfOQ2aDWrCifANam2wj', 'd': 'zE-pf24p-l0IT_lMcrX0gStTcsx_k1f7DnJmrN8V7ZU', }); // sign a message var message = '这是一条需要签名的消息'; var signature = privateKey.sign(message); // verify the signature var publicKey = privateKey.publicKey; var verify = publicKey.verify(message, signature); console.log('verification result:', verify);

relation d'héritage

Constructeur

BlsKey

Construire BlsKey à partir d'une clé au format JSON

1
new BlsKey(Object jsonKey);

Paramètres d'appel :

  • jsonKey: Objet, clé au format JSON

Le format de jsonKey prend en charge les deux types de clés privées suivants :

1 2 3 4 5 6
{ "kty": "EC", "crv": "BLS12381_G1", "x": "tCgCNuUYQotPEsrljWi-lIRIPpzhqsnJV1NPnE7je6glUb-FJm9IYkuv2hbHw22i", "d": "TXNvJBBG3h23H5hFJcnRZmYd_j1TqpwtJOllYGU3yyw" }

Clé publique Bls :

1 2 3 4 5
{ "kty": "EC", "crv": "BLS12381_G1", "x": "tCgCNuUYQotPEsrljWi-lIRIPpzhqsnJV1NPnE7je6glUb-FJm9IYkuv2hbHw22i" }

fonction statique

aggregateSignature

Fusionner un ensemble de signatures en une seule signature

1
static Buffer BlsKey.aggregateSignature(Array sigs);

Paramètres d'appel :

  • sigs: Array, un ensemble de signatures à fusionner

Résultats de retour :

  • Buffer, renvoie la signature unique fusionnée

aggregatePublicKey

Fusionner un ensemble de clés publiques en une seule clé publique

1
static BlsKey BlsKey.aggregatePublicKey(Array keys);

Paramètres d'appel :

  • keys: Array, un ensemble de clés publiques à fusionner

Résultats de retour :

  • BlsKey, renvoie la clé publique unique fusionnée

recover

Récupérer la clé publique à partir de la signature récupérable, prend uniquement en charge secp256k1

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

Paramètres d'appel :

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

Résultats de retour :

  • ECKey, renvoie un objet contenant la clé publique

from

Charger une clé au format DER

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

Paramètres d'appel :

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

Résultats de retour :

  • PKey, renvoie un objet contenant la clé

Charger une clé au format PEM

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

Paramètres d'appel :

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

Résultats de retour :

  • PKey, renvoie un objet contenant la clé

Charger une clé au format JSON

1
static PKey BlsKey.from(Object jsonKey);

Paramètres d'appel :

  • jsonKey: Objet, clé au format JSON

Résultats de retour :

  • PKey, renvoie un objet contenant la clé

Le format de jsonKey prend en charge les quatre types de clés privées 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 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" }

propriétés des membres

bbs_suite

Chaîne, suite de chiffrement signée BBS, la valeur par défaut est Bls12381Sha256, peut être modifiée en Bls12381Shake256, prend uniquement en charge la courbe BLS12-381-G2

1
String BlsKey.bbs_suite;

curve

String, renvoie le nom de la courbe elliptique de l'algorithme actuel

1
readonly String BlsKey.curve;

name

String, renvoie le nom de l'algorithme actuel

1
readonly String BlsKey.name;

keySize

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

1
readonly Integer BlsKey.keySize;

alg

String, renvoie et définit l'algorithme de signature d'objet actuel

1
readonly String BlsKey.alg;

publicKey

PKey, renvoie la clé publique de la clé actuelle

1
readonly PKey BlsKey.publicKey;

Résultats de retour :

  • la clé publique de la clé actuelle

fonction membre

bbsSign

Signez un ensemble de messages en utilisant la clé privée actuelle, prenant uniquement en charge la courbe BLS12-381-G2

1 2
Buffer BlsKey.bbsSign(Array messages, Object opts = {}) async;

Paramètres d'appel :

  • messages: Array, spécifie le tableau de messages à signer
  • opts: Objet, spécifiez les options de signature

Résultats de retour :

  • Buffer, renvoie le message signé

opts prend en charge les paramètres suivants :

1 2 3
{ header: Buffer | string // specified header for signature, default is empty }

bbsVerify

Vérifiez la signature à l'aide de la clé publique actuelle, prend uniquement en charge la courbe BLS12-381-G2

1 2 3
Boolean BlsKey.bbsVerify(Array messages, Buffer sig, Object opts = {}) async;

Paramètres d'appel :

  • messages: Array, spécifie le tableau complet des messages
  • sig:Buffer, précisez la signature à vérifier
  • opts: Objet, spécifiez les options de vérification

Résultats de retour :

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

opts prend en charge les paramètres suivants :

1 2 3
{ header: Buffer | string // specified header for signature, default is empty }

proofGen

Générez un certificat en utilisant la clé publique et la signature actuelles, prend uniquement en charge la courbe BLS12-381-G2

1 2 3 4
Buffer BlsKey.proofGen(Buffer sig, Array messages, Array idx, Object opts = {}) async;

Paramètres d'appel :

  • sig:Buffer, précise la signature utilisée lors de la génération du certificat
  • messages: Array, spécifie le tableau complet des messages
  • idx: Array, précise l'index du message utilisé lors de la génération des preuves, l'index est basé sur 1
  • opts: Objet, spécifiez les options de preuve

Résultats de retour :

  • Buffer, renvoie la preuve générée

opts prend en charge les paramètres suivants :

1 2 3 4
{ header: Buffer | string, // specified header for signature, default is empty proof_header: Buffer | string // specified header for proof, default is empty }

proofVerify

Utilisez la clé publique actuelle pour vérifier le certificat, prenant uniquement en charge la courbe BLS12-381-G2

1 2 3 4
Boolean BlsKey.proofVerify(Array messages, Array idx, Buffer proof, Object opts = {}) async;

Paramètres d'appel :

  • messages: Array, spécifie un tableau de messages filtrés en fonction de l'index
  • idx: Array, précise l'index du message utilisé dans la preuve, l'index est basé sur 1
  • proof:Buffer, précisez la preuve générée
  • opts: Objet, spécifiez les options de preuve

Résultats de retour :

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

opts prend en charge les paramètres suivants :

1 2 3 4
{ header: Buffer | string, // specified header for signature, default is empty proof_header: Buffer | string // specified header for proof, default is empty }

computeSecret

Calculer la clé partagée Elliptic Curve Diffie-Hellman (ECDH) à l'aide de l'algorithme actuel

1
Buffer BlsKey.computeSecret(ECKey publicKey) async;

Paramètres d'appel :

  • publicKey:ECKey, précisez la clé publique de l'autre partie

Résultats de retour :

  • Buffer, renvoie la clé secrète partagée calculée

isPrivate

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

1
Boolean BlsKey.isPrivate();

Résultats de retour :

  • Boolean, est True et représente la clé privée

clone

copier la clé actuelle

1
PKey BlsKey.clone();

Résultats de retour :

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

pem

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

1
String BlsKey.pem();

Résultats de retour :

  • String, encodage au format PEM de la clé actuelle

der

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

1
Buffer BlsKey.der();

Résultats 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 BlsKey.json(Object opts = {});

Paramètres d'appel :

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

Résultats de retour :

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

opts prend en charge les paramètres suivants :

1 2 3
{ compress: false // specify whether to output public key in compressed form }

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


equals

Comparez deux clés publiques/privées pour voir si elles sont identiques

1
Boolean BlsKey.equals(object key);

Paramètres d'appel :

  • key:object, précisez la clé publique/privée de l'autre partie

Résultats de retour :

  • Boolean, s'ils sont identiques, renvoie vrai

encrypt

Chiffrer les données à l'aide de la clé publique de chiffrement de l'algorithme actuel

1
Buffer BlsKey.encrypt(Buffer data) async;

Paramètres d'appel :

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

Résultats de retour :

  • Buffer, renvoie les données chiffrées

decrypt

Décrypter les données à l'aide de la clé privée du mot de passe de l'algorithme actuel

1
Buffer BlsKey.decrypt(Buffer data) async;

Paramètres d'appel :

  • data:Buffer, précisez les données à décrypter

Résultats de retour :

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

sign

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

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

Paramètres d'appel :

  • data:Buffer, spécifiez les données à signer. Lorsque l'algorithme est RSA, le paramètre d'entrée doit être exécuté avec l'algorithme spécifié par alg.hash
  • opts: Objet, spécifiez les options de signature

Résultats de retour :

  • Buffer, renvoie les données signées

opts prend en charge les paramètres suivants :

1 2 3 4 5
{ alg: 0, // specify the hash algorithm for signing, only valid for RSA, default is 0. Supported algorithms: 0=NONE,1=MD5,2=SHA1,3=SHA224,4=SHA256,5=SHA384,6=SHA512,7=RIPEMD160 format: "der", // specify the signature format, default is der, supported formats: der, raw recoverable: false // specify whether to return a recoverable signature, only valid for secp256k1 }

verify

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

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

Paramètres d'appel :

  • data:Buffer, précisez les données à vérifier
  • sign:Buffer, précisez la signature à vérifier
  • opts: Objet, spécifiez les options de vérification

Résultats de retour :

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

opts prend en charge les paramètres suivants :

1 2 3 4
{ alg: 0, // specify the hash algorithm for signing, only valid for RSA, default is 0. Supported algorithms: 0=NONE,1=MD5,2=SHA1,3=SHA224,4=SHA256,5=SHA384,6=SHA512,7=RIPEMD160 format: "der" // specify the signature format, default is der, supported formats: der, raw }

toString

Renvoie la représentation sous forme de chaîne de l'objet. Généralement, "[Native Object]" est renvoyé. L'objet peut être réimplémenté en fonction de ses propres caractéristiques.

1
String BlsKey.toString();

Résultats de retour :

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

toJSON

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

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

Paramètres d'appel :

  • key: Chaîne, non utilisée

Résultats de retour :

  • Value, renvoie une valeur contenant du JSON sérialisable