Objekt eingebautes Objekt

Objekt BlsKey

Elliptische-Kurven-Kryptographie-Objekt

Das BlsKey-Objekt ist das Objekt, das verwendet wird, um den BLS-Schlüssel in fibjs darzustellen. Es kann zum Erstellen, Importieren, Exportieren und Bearbeiten von BLS-Schlüsseln verwendet werden. Der BLS-Schlüssel ist eine Verschlüsselungsmethode mit öffentlichem Schlüssel, die normalerweise zur Identitätsprüfung und Datensignatur verwendet wird und die Eigenschaften hat, eine hohe Ausführungsgeschwindigkeit bereitzustellen und gleichzeitig die Sicherheit zu gewährleisten.

Das BlsKey-Objekt bietet mehrere Konstruktionsmethoden zum Laden von Schlüsseln aus verschiedenen Schlüsselformaten. Es bietet auch einige öffentliche Eigenschaften und Methoden wie toString(), clone(), name, publicKey() usw. sowie einige statische Methoden wie from() usw. Sie können diese Methoden verwenden, um das BlsKey-Objekt zu manipulieren.

Darüber hinaus verfügt das BlsKey-Objekt über Mitgliedsattribute wie isPrivate() und toJSON(key = ""), mit denen abgefragt werden kann, ob der Schlüssel ein privater Schlüssel ist, und die Darstellung des Objekts im JSON-Format exportiert werden kann.

Das BlsKey-Objekt bietet eine Reihe flexibler und leistungsstarker APIs, mit denen BLS-Schlüssel einfach verwaltet und Sicherheitsanforderungen wie Identitätsprüfung und Datensignatur umgesetzt werden können.

Im Folgenden verwenden wir ein einfaches Beispiel, um zu demonstrieren, wie das BlsKey-Objekt zum Signieren und Verifizieren verwendet wird:

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);

Erbverhältnis

Konstrukteur

BlsKey

Erstellen Sie BlsKey aus einem Schlüssel im JSON-Format

1
new BlsKey(Object jsonKey);

Aufrufparameter:

  • jsonKey: Objekt, Schlüssel im JSON-Format

Das Format von jsonKey unterstützt die folgenden zwei Arten von privaten Schlüsseln:

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

Öffentlicher Bls-Schlüssel:

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

statische Funktion

aggregateSignature

Führen Sie eine Reihe von Signaturen zu einer einzigen Signatur zusammen

1
static Buffer BlsKey.aggregateSignature(Array sigs);

Aufrufparameter:

  • sigs: Array, ein Satz von Signaturen, die zusammengeführt werden sollen

Rückgabeergebnis:

  • Buffer, gibt die zusammengeführte Einzelsignatur zurück

aggregatePublicKey

Führen Sie einen Satz öffentlicher Schlüssel zu einem einzigen öffentlichen Schlüssel zusammen

1
static BlsKey BlsKey.aggregatePublicKey(Array sigs);

Aufrufparameter:

  • sigs: Array, ein Satz öffentlicher Schlüssel, die zusammengeführt werden sollen

Rückgabeergebnis:

  • BlsKey, gibt den kombinierten einzelnen öffentlichen Schlüssel zurück

recover

Stellen Sie den öffentlichen Schlüssel aus einer wiederherstellbaren Signatur wieder her, nur secp256k1 wird unterstützt

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

Aufrufparameter:

  • data:Buffer, die Originaldaten der Signatur
  • sig:Buffer, die wiederherstellbare Signatur

Rückgabeergebnis:

  • ECKey, gibt ein Objekt zurück, das den öffentlichen Schlüssel enthält

from

Laden Sie einen Schlüssel im DER-Format

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

Aufrufparameter:

  • DerKey:Buffer, der Schlüssel im DER-Format
  • password: String, entschlüsseltes Passwort

Rückgabeergebnis:

  • PKey, gibt ein Objekt zurück, das den Schlüssel enthält

Laden Sie einen Schlüssel im PEM-Format

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

Aufrufparameter:

  • pemKey: String, Schlüssel im PEM-Format
  • password: String, entschlüsseltes Passwort

Rückgabeergebnis:

  • PKey, gibt ein Objekt zurück, das den Schlüssel enthält

Laden Sie einen Schlüssel im JSON-Format

1
static PKey BlsKey.from(Object jsonKey);

Aufrufparameter:

  • jsonKey: Objekt, Schlüssel im JSON-Format

Rückgabeergebnis:

  • PKey, gibt ein Objekt zurück, das den Schlüssel enthält

Das Format von jsonKey unterstützt die folgenden vier Arten von privaten RSA-Schlüsseln:

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==" }

Öffentlicher RSA-Schlüssel:

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

Privater EC-Schlüssel:

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" }

Öffentlicher EC-Schlüssel:

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

Mitgliedsattribut

curve

String, gibt den Namen der elliptischen Kurve des aktuellen Algorithmus zurück

1
readonly String BlsKey.curve;

name

String, gibt den aktuellen Algorithmusnamen zurück

1
readonly String BlsKey.name;

keySize

Ganzzahl, gibt die aktuelle Passwortlänge des Algorithmus in Bits zurück

1
readonly Integer BlsKey.keySize;

alg

String, gibt den Signaturalgorithmus des aktuellen Objekts zurück und legt ihn fest

1
String BlsKey.alg;

publicKey

PKey, gibt den öffentlichen Schlüssel des aktuellen Schlüssels zurück

1
readonly PKey BlsKey.publicKey;

Rückgabeergebnis:

  • der öffentliche Schlüssel des aktuellen Schlüssels

Mitgliedsfunktion

computeSecret

Berechnet ein Elliptic Curve Diffie-Hellman (ECDH) Shared Secret unter Verwendung des aktuellen Algorithmus

1
Buffer BlsKey.computeSecret(ECKey publicKey) async;

Aufrufparameter:

  • publicKey:ECKey, der den öffentlichen Schlüssel der Gegenpartei angibt

Rückgabeergebnis:

  • Buffer, gibt das berechnete gemeinsame Geheimnis zurück

isPrivate

Abfrage, ob der aktuelle Schlüssel ein privater Schlüssel ist

1
Boolean BlsKey.isPrivate();

Rückgabeergebnis:

  • Boolean, wenn True privater Schlüssel bedeutet

clone

aktuellen Schlüssel kopieren

1
PKey BlsKey.clone();

Rückgabeergebnis:

  • PKey, das Kopierobjekt des aktuellen Schlüssels

pem

Gibt die PEM-Formatcodierung des aktuellen Schlüssels zurück

1
String BlsKey.pem();

Rückgabeergebnis:

  • String, die PEM-Formatcodierung des aktuellen Schlüssels

der

Gibt die DER-Formatcodierung des aktuellen Schlüssels zurück

1
Buffer BlsKey.der();

Rückgabeergebnis:

  • Buffer, die DER-Formatcodierung des aktuellen Schlüssels

json

Gibt die Codierung im jwt-Format des aktuellen Schlüssels zurück

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

Aufrufparameter:

  • opts: Objekt, gibt Exportoptionen an

Rückgabeergebnis:

  • Object, die jwt-Formatcodierung des aktuellen Schlüssels

opts unterstützt die folgenden Parameter:

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

Die Kurven, die die Komprimierung unterstützen, sind: secp192r1, secp192k1, secp256r1, secp256k1, brainpoolP256r1, secp384r1, brainpoolP384r1, brainpoolP512r1, secp521r1, sm2


equals

Vergleichen Sie, ob zwei öffentliche/private Schlüssel gleich sind

1
Boolean BlsKey.equals(PKey key);

Aufrufparameter:

  • key:PKey, geben Sie den öffentlichen/privaten Schlüssel der anderen Partei an

Rückgabeergebnis:

  • Boolean, geben Sie true zurück, wenn es dasselbe ist

encrypt

Verschlüsseln Sie Daten mit dem aktuellen kryptografischen öffentlichen Schlüssel des Algorithmus

1
Buffer BlsKey.encrypt(Buffer data) async;

Aufrufparameter:

  • data:Buffer, gibt die zu verschlüsselnden Daten an

Rückgabeergebnis:

  • Buffer, gibt die verschlüsselten Daten zurück

decrypt

Entschlüsseln Sie die Daten mit dem kryptografischen privaten Schlüssel des aktuellen Algorithmus

1
Buffer BlsKey.decrypt(Buffer data) async;

Aufrufparameter:

  • data:Buffer, gibt die zu entschlüsselnden Daten an

Rückgabeergebnis:

  • Buffer, gibt die entschlüsselten Daten zurück

sign

Signieren Sie Daten mit dem kryptografischen privaten Schlüssel des aktuellen Algorithmus

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

Aufrufparameter:

  • data:Buffer, gibt die zu signierenden Daten an
  • opts: Objekt, gibt Signaturoptionen an

Rückgabeergebnis:

  • Buffer, gibt die signierten Daten zurück

opts unterstützt die folgenden Parameter:

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

Verifizieren Sie Daten mit dem kryptografischen öffentlichen Schlüssel des aktuellen Algorithmus

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

Aufrufparameter:

  • data:Buffer, wobei die zu validierenden Daten angegeben werden
  • sign:Buffer, wobei die zu überprüfende Signatur angegeben wird
  • opts: Objekt, gibt die Authentifizierungsoptionen an

Rückgabeergebnis:

  • Boolean, gibt das verifizierte Ergebnis zurück

opts unterstützt die folgenden Parameter:

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

Geben Sie die Zeichenfolgendarstellung des Objekts zurück, geben Sie im Allgemeinen "[Native Object]" zurück, das Objekt kann gemäß seinen eigenen Eigenschaften neu implementiert werden

1
String BlsKey.toString();

Rückgabeergebnis:

  • String, gibt eine Zeichenfolgendarstellung des Objekts zurück

toJSON

Gibt die Darstellung des Objekts im JSON-Format zurück, gibt im Allgemeinen eine Sammlung lesbarer Eigenschaften zurück, die durch das Objekt definiert sind

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

Aufrufparameter:

  • key: Zeichenfolge, nicht verwendet

Rückgabeergebnis:

  • Value, die einen JSON-serialisierbaren Wert zurückgibt