This document attempts to describe the implementation status of Crypto APIs/Interfaces from Node.js in the react-native-quick-crypto
library.
- ❌ - implemented in Node, not RNQC
- ✅ - implemented in Node and RNQC
- ❌ Class:
Certificate
- ❌ Static method:
Certificate.exportChallenge(spkac[, encoding])
- ❌ Static method:
Certificate.exportPublicKey(spkac[, encoding])
- ❌ Static method:
Certificate.verifySpkac(spkac[, encoding])
- ✅ Class:
Cipher
- ✅
cipher.final([outputEncoding])
- ✅
cipher.getAuthTag()
- ✅
cipher.setAAD(buffer[, options])
- ✅
cipher.setAutoPadding([autoPadding])
- ✅
cipher.update(data[, inputEncoding][, outputEncoding])
- ✅ Class:
Decipher
- ✅
decipher.final([outputEncoding])
- ✅
decipher.setAAD(buffer[, options])
- ✅
decipher.setAuthTag(buffer[, encoding])
- ✅
decipher.setAutoPadding([autoPadding])
- ✅
decipher.update(data[, inputEncoding][, outputEncoding])
- ❌ Class:
DiffieHellman
- ❌
diffieHellman.computeSecret(otherPublicKey[, inputEncoding][, outputEncoding])
- ❌
diffieHellman.generateKeys([encoding])
- ❌
diffieHellman.getGenerator([encoding])
- ❌
diffieHellman.getPrime([encoding])
- ❌
diffieHellman.getPrivateKey([encoding])
- ❌
diffieHellman.getPublicKey([encoding])
- ❌
diffieHellman.setPrivateKey(privateKey[, encoding])
- ❌
diffieHellman.setPublicKey(publicKey[, encoding])
- ❌
diffieHellman.verifyError
- ❌ Class:
DiffieHellmanGroup
- ❌ Class:
ECDH
- ❌
Static method: ECDH.convertKey(key, curve[, inputEncoding[, outputEncoding[, format]]])
- ❌
ecdh.computeSecret(otherPublicKey[, inputEncoding][, outputEncoding])
- ❌
ecdh.generateKeys([encoding[, format]])
- ❌
ecdh.getPrivateKey([encoding])
- ❌
ecdh.getPublicKey([encoding][, format])
- ❌
ecdh.setPrivateKey(privateKey[, encoding])
- ❌
ecdh.setPublicKey(publicKey[, encoding])
- ✅ Class:
Hash
- ✅
hash.copy([options])
- ✅
hash.digest([encoding])
- ✅
hash.update(data[, inputEncoding])
- ✅ Class:
Hmac
- ✅
hmac.digest([encoding])
- ✅
hmac.update(data[, inputEncoding])
- 🚧 Class:
KeyObject
- ❌
Static method: KeyObject.from(key)
- ❌
keyObject.asymmetricKeyDetails
- ✅
keyObject.asymmetricKeyType
- ✅
keyObject.export([options])
- ❌
keyObject.equals(otherKeyObject)
- ❌
keyObject.symmetricKeySize
- ❌
keyObject.type
- ✅ Class:
Sign
- ✅
sign.sign(privateKey[, outputEncoding])
- ✅
sign.update(data[, inputEncoding])
- ✅ Class:
Verify
- ✅
verify.update(data[, inputEncoding])
- ✅
verify.verify(object, signature[, signatureEncoding])
- ❌ Class:
X509Certificate
- ❌
new X509Certificate(buffer)
- ❌
x509.ca
- ❌
x509.checkEmail(email[, options])
- ❌
x509.checkHost(name[, options])
- ❌
x509.checkIP(ip)
- ❌
x509.checkIssued(otherCert)
- ❌
x509.checkPrivateKey(privateKey)
- ❌
x509.fingerprint
- ❌
x509.fingerprint256
- ❌
x509.fingerprint512
- ❌
x509.infoAccess
- ❌
x509.issuer
- ❌
x509.issuerCertificate
- ❌
x509.extKeyUsage
- ❌
x509.publicKey
- ❌
x509.raw
- ❌
x509.serialNumber
- ❌
x509.subject
- ❌
x509.subjectAltName
- ❌
x509.toJSON()
- ❌
x509.toLegacyObject()
- ❌
x509.toString()
- ❌
x509.validFrom
- ❌
x509.validTo
- ❌
x509.verify(publicKey)
- 🚧 node:crypto module methods and properties
- ✅
crypto.constants
- ❌
crypto.fips
- ❌
crypto.checkPrime(candidate[, options], callback)
- ❌
crypto.checkPrimeSync(candidate[, options])
- ✅
crypto.createCipheriv(algorithm, key, iv[, options])
- ✅
crypto.createDecipheriv(algorithm, key, iv[, options])
- ❌
crypto.createDiffieHellman(prime[, primeEncoding][, generator][, generatorEncoding])
- ❌
crypto.createDiffieHellman(primeLength[, generator])
- ❌
crypto.createDiffieHellmanGroup(name)
- ❌
crypto.createECDH(curveName)
- ✅
crypto.createHash(algorithm[, options])
- ✅
crypto.createHmac(algorithm, key[, options])
- ❌
crypto.createPrivateKey(key)
- ❌
crypto.createPublicKey(key)
- ❌
crypto.createSecretKey(key[, encoding])
- ✅
crypto.createSign(algorithm[, options])
- ✅
crypto.createVerify(algorithm[, options])
- ❌
crypto.diffieHellman(options)
- ❌
crypto.hash(algorithm, data[, outputEncoding])
- ❌
crypto.generateKey(type, options, callback)
- ✅
crypto.generateKeyPair(type, options, callback)
- ✅
crypto.generateKeyPairSync(type, options)
- ❌
crypto.generateKeySync(type, options)
- ❌
crypto.generatePrime(size[, options[, callback]])
- ❌
crypto.generatePrimeSync(size[, options])
- ❌
crypto.getCipherInfo(nameOrNid[, options])
- ✅
crypto.getCiphers()
- ❌
crypto.getCurves()
- ❌
crypto.getDiffieHellman(groupName)
- ❌
crypto.getFips()
- ✅
crypto.getHashes()
- ✅
crypto.getRandomValues(typedArray)
- ❌
crypto.hkdf(digest, ikm, salt, info, keylen, callback)
- ❌
crypto.hkdfSync(digest, ikm, salt, info, keylen)
- ✅
crypto.pbkdf2(password, salt, iterations, keylen, digest, callback)
- ✅
crypto.pbkdf2Sync(password, salt, iterations, keylen, digest)
- ❌
crypto.privateDecrypt(privateKey, buffer)
- ❌
crypto.privateEncrypt(privateKey, buffer)
- ✅
crypto.publicDecrypt(key, buffer)
- ✅
crypto.publicEncrypt(key, buffer)
- ✅
crypto.randomBytes(size[, callback])
- ✅
crypto.randomFillSync(buffer[, offset][, size])
- ✅
crypto.randomFill(buffer[, offset][, size], callback)
- ✅
crypto.randomInt([min, ]max[, callback])
- ✅
crypto.randomUUID([options])
- ❌
crypto.scrypt(password, salt, keylen[, options], callback)
- ❌
crypto.scryptSync(password, salt, keylen[, options])
- ❌
crypto.secureHeapUsed()
- ❌
crypto.setEngine(engine[, flags])
- ❌
crypto.setFips(bool)
- ❌
crypto.sign(algorithm, data, key[, callback])
- 🚧
crypto.subtle
(see below)
- ❌
crypto.timingSafeEqual(a, b)
- ❌
crypto.verify(algorithm, data, key, signature[, callback])
- 🚧
crypto.webcrypto
(see below)
- 🚧 Class:
Crypto
- 🚧
crypto.subtle
- ✅
crypto.getRandomValues(typedArray)
- ✅
crypto.randomUUID()
- ✅ Class:
CryptoKey
- ✅
cryptoKey.algorithm
- ✅
cryptoKey.extractable
- ✅
cryptoKey.type
- ✅
cryptoKey.usages
- ❌ Class:
CryptoKeyPair
- ❌
cryptoKeyPair.privateKey
- ❌
cryptoKeyPair.publicKey
- 🚧 Class:
CryptoSubtle
- 🚧 Class:
SubtleCrypto
- ❌
subtle.decrypt(algorithm, key, data)
- 🚧
subtle.deriveBits(algorithm, baseKey, length)
- ❌
subtle.deriveKey(algorithm, baseKey, derivedKeyAlgorithm, extractable, keyUsages)
- ✅
subtle.digest(algorithm, data)
- ❌
subtle.encrypt(algorithm, key, data)
- 🚧
subtle.exportKey(format, key)
- ❌
subtle.generateKey(algorithm, extractable, keyUsages)
- 🚧
subtle.importKey(format, keyData, algorithm, extractable, keyUsages)
- ❌
subtle.sign(algorithm, key, data)
- ❌
subtle.unwrapKey(format, wrappedKey, unwrappingKey, unwrapAlgo, unwrappedKeyAlgo, extractable, keyUsages)
- ❌
subtle.verify(algorithm, key, signature, data)
- ❌
subtle.wrapKey(format, key, wrappingKey, wrapAlgo)
Algorithm |
Status |
RSA-OAEP |
|
AES-CTR |
|
AES-CBC |
|
AES-GCM |
|
Algorithm |
Status |
RSA-OAEP |
|
AES-CTR |
|
AES-CBC |
|
AES-GCM |
|
Algorithm |
Status |
RSASSA-PKCS1-v1_5 |
|
RSA-PSS |
|
ECDSA |
|
Ed25519 |
|
Ed448 |
|
HMAC |
|
Algorithm |
Status |
RSASSA-PKCS1-v1_5 |
|
RSA-PSS |
|
ECDSA |
|
Ed25519 |
|
Ed448 |
|
HMAC |
|
Algorithm |
Status |
SHA-1 |
✅ |
SHA-256 |
✅ |
SHA-384 |
✅ |
SHA-512 |
✅ |
Algorithm |
Status |
RSASSA-PKCS1-v1_5 |
|
RSA-PSS |
|
RSA-OAEP |
|
ECDSA |
|
Ed25519 |
|
Ed448 |
|
ECDH |
|
X25519 |
|
X448 |
|
Algorithm |
Status |
HMAC |
|
AES-CTR |
|
AES-CBC |
|
AES-GCM |
|
AES-KW |
|
Algorithm |
Status |
ECDH |
|
X25519 |
|
X448 |
|
HKDF |
|
PBKDF2 |
|
Algorithm |
Status |
ECDH |
|
X25519 |
|
X448 |
|
HKDF |
|
PBKDF2 |
✅ |
Key Type |
spki |
pkcs8 |
jwk |
raw |
AES-CBC |
|
|
✅ |
✅ |
AES-CTR |
|
|
✅ |
✅ |
AES-GCM |
|
|
✅ |
✅ |
AES-KW |
|
|
✅ |
✅ |
ECDH |
❌ |
❌ |
✅ |
✅ |
X25519 |
❌ |
❌ |
❌ |
❌ |
X448 |
❌ |
❌ |
❌ |
❌ |
ECDSA |
❌ |
❌ |
✅ |
✅ |
Ed25519 |
❌ |
❌ |
❌ |
❌ |
Ed448 |
❌ |
❌ |
❌ |
❌ |
HDKF |
|
|
|
|
HMAC |
|
|
❌ |
❌ |
PBKDF2 |
|
|
|
✅ |
RSA-OAEP |
❌ |
❌ |
✅ |
|
RSA-PSS |
❌ |
❌ |
✅ |
|
RSASSA-PKCS1-v1_5 |
❌ |
❌ |
✅ |
|
- not implemented in Node
- ❌ - implemented in Node, not RNQC
- ✅ - implemented in Node and RNQC
Key Type |
spki |
pkcs8 |
jwk |
raw |
AES-CBC |
|
|
✅ |
✅ |
AES-CTR |
|
|
✅ |
✅ |
AES-GCM |
|
|
✅ |
✅ |
AES-KW |
|
|
✅ |
✅ |
ECDH |
✅ |
❌ |
✅ |
✅ |
ECDSA |
✅ |
❌ |
✅ |
✅ |
Ed25519 |
❌ |
❌ |
❌ |
❌ |
Ed448 |
❌ |
❌ |
❌ |
❌ |
HDKF |
|
|
|
|
HMAC |
|
|
❌ |
❌ |
PBKDF2 |
|
|
|
|
RSA-OAEP |
❌ |
❌ |
✅ |
|
RSA-PSS |
❌ |
❌ |
✅ |
|
RSASSA-PKCS1-v1_5 |
❌ |
❌ |
✅ |
|
- not implemented in Node
- ❌ - implemented in Node, not RNQC
- ✅ - implemented in Node and RNQC
Algorithm |
Status |
RSA-OAEP |
|
AES-CTR |
|
AES-CBC |
|
AES-GCM |
|
AES-KW |
|
Algorithm |
Status |
RSA-OAEP |
|
AES-CTR |
|
AES-CBC |
|
AES-GCM |
|
AES-KW |
|
Algorithm |
Status |
RSASSA-PKCS1-v1_5 |
|
RSA-PSS |
|
RSA-OAEP |
|
ECDSA |
|
Ed25519 |
|
Ed448 |
|
ECDH |
|
X25519 |
|
X448 |
|
HMAC |
|
AES-CTR |
|
AES-CBC |
|
AES-GCM |
|
AES-KW |
|