Object ingebouwd object

ObjectECKey

De ECKey-les is binnencryptoGeïmplementeerd in de module, kunt u deze klasse gebruiken om ECDSA-sleutelparen, handtekening- en verificatieberichten, enz. te genereren.

Hier is een voorbeeld:

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

In dit voorbeeld genereren we eerst een secp256k1 ECKey-object en drukken vervolgens de gegenereerde publieke en private sleutels af. Vervolgens ondertekenden we het bericht "Hallo, fibjs!" en drukten we het handtekeningresultaat af, en tenslotte verifieerden we de handtekening met hetzelfde sleutelobject en drukten we het verificatieresultaat af.

erfenis relatie

Constructeur

ECKey

Construeer ECKey uit een sleutel in DER-formaat

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

Oproepparameters:

  • DerKey:Buffer, de sleutel in DER-indeling
  • password: Tekenreeks, gedecodeerd wachtwoord

Construeer ECKey uit sleutel in PEM-indeling

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

Oproepparameters:

  • pemKey: Tekenreeks, sleutel in PEM-indeling
  • password: Tekenreeks, gedecodeerd wachtwoord

Construeer ECKey uit de sleutel in JSON-formaat

1
new ECKey(Object jsonKey);

Oproepparameters:

  • jsonKey: Object, sleutel in JSON-indeling

Het formaat van jsonKey ondersteunt de volgende twee typen, EC private key:

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

EG openbare sleutel:

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

statische functie

recover

openbare sleutel herstellen van herstelbare handtekening, alleen secp256k1 wordt ondersteund

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

Oproepparameters:

  • data:Buffer, de originele gegevens van de handtekening
  • sig:Buffer, de herstelbare handtekening

retour resultaat:

  • ECKey, retourneert een object dat de openbare sleutel bevat

from

Laad een sleutel in DER-indeling

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

Oproepparameters:

  • DerKey:Buffer, de sleutel in DER-indeling
  • password: Tekenreeks, gedecodeerd wachtwoord

retour resultaat:

  • PKey, retourneert een object dat de sleutel bevat

Laad een sleutel in PEM-indeling

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

Oproepparameters:

  • pemKey: Tekenreeks, sleutel in PEM-indeling
  • password: Tekenreeks, gedecodeerd wachtwoord

retour resultaat:

  • PKey, retourneert een object dat de sleutel bevat

Laad een sleutel in JSON-indeling

1
static PKey ECKey.from(Object jsonKey);

Oproepparameters:

  • jsonKey: Object, sleutel in JSON-indeling

retour resultaat:

  • PKey, retourneert een object dat de sleutel bevat

Het formaat van jsonKey ondersteunt de volgende vier typen RSA-privésleutel:

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

RSA openbare sleutel:

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

EG-privésleutel:

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

EG openbare sleutel:

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

lid attribuut

curve

Tekenreeks, retourneert de naam van de elliptische curve van het huidige algoritme

1
readonly String ECKey.curve;

name

Tekenreeks, retourneert de naam van het huidige algoritme

1
readonly String ECKey.name;

keySize

Integer, retourneert de huidige wachtwoordlengte van het algoritme in bits

1
readonly Integer ECKey.keySize;

alg

String, retourneert en stelt het handtekeningalgoritme van het huidige object in

1
String ECKey.alg;

publicKey

PKey, retourneert de openbare sleutel van de huidige sleutel

1
readonly PKey ECKey.publicKey;

retour resultaat:

  • de openbare sleutel van de huidige sleutel

lid functie

computeSecret

Berekent een Elliptic Curve Diffie-Hellman (ECDH) gedeeld geheim met behulp van het huidige algoritme

1
Buffer ECKey.computeSecret(ECKey publicKey) async;

Oproepparameters:

  • publicKey: ECKey, specificeer de openbare sleutel van de andere partij

retour resultaat:

  • Buffer, retourneert het berekende gedeelde geheim

isPrivate

Vraag of de huidige sleutel een persoonlijke sleutel is

1
Boolean ECKey.isPrivate();

retour resultaat:

  • Boolean, als True persoonlijke sleutel betekent

clone

kopieer de huidige sleutel

1
PKey ECKey.clone();

retour resultaat:

  • PKey, het kopieerobject van de huidige sleutel

pem

Retourneert de codering in PEM-indeling van de huidige sleutel

1
String ECKey.pem();

retour resultaat:

  • String, de codering in PEM-indeling van de huidige sleutel

der

Retourneert de DER-indelingscodering van de huidige sleutel

1
Buffer ECKey.der();

retour resultaat:

  • Buffer, de DER-formaatcodering van de huidige sleutel

json

Retourneert de jwt-indelingscodering van de huidige sleutel

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

Oproepparameters:

  • opts: Object, specificeert exportopties

retour resultaat:

  • Object, de codering in jwt-indeling van de huidige sleutel

opts ondersteunt de volgende parameters:

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

De curven die compressie ondersteunen zijn: secp192r1, secp192k1, secp256r1, secp256k1, brainpoolP256r1, secp384r1, brainpoolP384r1, brainpoolP512r1, secp521r1, sm2


equals

Vergelijk of twee publieke/private sleutels hetzelfde zijn

1
Boolean ECKey.equals(PKey key);

Oproepparameters:

  • key:PKey, geeft u de openbare/privésleutel van de andere partij op

retour resultaat:

  • Boolean, geef waar terug als hetzelfde

encrypt

Versleutel gegevens met behulp van de huidige cryptografische openbare sleutel van het algoritme

1
Buffer ECKey.encrypt(Buffer data) async;

Oproepparameters:

  • data:Buffer, geeft aan welke gegevens moeten worden gecodeerd

retour resultaat:

  • Buffer, retourneert de versleutelde gegevens

decrypt

Ontsleutel de gegevens met behulp van de cryptografische privésleutel van het huidige algoritme

1
Buffer ECKey.decrypt(Buffer data) async;

Oproepparameters:

  • data:Buffer, specificeert de gegevens die moeten worden gedecodeerd

retour resultaat:

  • Buffer, retourneert de gedecodeerde gegevens

sign

Onderteken gegevens met behulp van de huidige cryptografische privésleutel van het algoritme

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

Oproepparameters:

  • data:Buffer, specificeert de te ondertekenen gegevens
  • opts: Object, specificeert handtekeningopties

retour resultaat:

  • Buffer, retourneert de ondertekende gegevens

opts ondersteunt de volgende parameters:

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

Verifieer gegevens met behulp van de cryptografische openbare sleutel van het huidige algoritme

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

Oproepparameters:

  • data:Buffer, waarbij de gegevens worden opgegeven die moeten worden gevalideerd
  • sign:Buffer, met vermelding van de handtekening die moet worden geverifieerd
  • opts: Object, specificeert de authenticatie-opties

retour resultaat:

  • Boolean, retourneert het geverifieerde resultaat

opts ondersteunt de volgende parameters:

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

Retourneert de tekenreeksrepresentatie van het object, retourneert over het algemeen "[Native Object]", het object kan opnieuw worden geïmplementeerd volgens zijn eigen kenmerken

1
String ECKey.toString();

retour resultaat:

  • String, retourneert een tekenreeksrepresentatie van het object

toJSON

Retourneert de weergave in JSON-indeling van het object, retourneert over het algemeen een verzameling leesbare eigenschappen die door het object zijn gedefinieerd

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

Oproepparameters:

  • key: String, niet gebruikt

retour resultaat:

  • Value, die een JSON-serialiseerbare waarde retourneert