I am getting an errors when I used crypto.constants.RSA_NO_PADDING
respectively.
node:internal/crypto/cipher:79
return method(data, format, type, passphrase, buffer, padding, oaepHash,
^
Error: error:0200007A:rsa routines::data too small for key size
at Object.publicEncrypt (node:internal/crypto/cipher:79:12)
at Object._encryptFile (C:\Users\GB\Documents\projects\customprojects\numericalarrays\pickler\node_modules\hasher-apis\src\hasher.js:260:28)
at Object.<anonymous> (C:\Users\GB\Documents\projects\customprojects\numericalarrays\pickler\demos\demos.jscertificate.pickle.js:44:49)
at Module._compile (node:internal/modules/cjs/loader:1149:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1203:10)
at Module.load (node:internal/modules/cjs/loader:1027:32)
at Module._load (node:internal/modules/cjs/loader:868:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:23:47 {
library: 'rsa routines',
reason: 'data too small for key size',
code: 'ERR_OSSL_RSA_DATA_TOO_SMALL_FOR_KEY_SIZE'
}
Node.js v18.10.0
I am getting error when I used crypto.constants.RSA_PKCS1_OAEP_PADDING
.
node:internal/crypto/cipher:79
return method(data, format, type, passphrase, buffer, padding, oaepHash,
^
Error: error:0200006E:rsa routines::data too large for key size
at Object.publicEncrypt (node:internal/crypto/cipher:79:12)
at Object._encryptFile (C:\Users\GB\Documents\projects\customprojects\numericalarrays\pickler\node_modules\hasher-apis\src\hasher.js:260:28)
at Object.<anonymous> (C:\Users\GB\Documents\projects\customprojects\numericalarrays\pickler\demos\demos.jscertificate.pickle.js:44:49)
at Module._compile (node:internal/modules/cjs/loader:1149:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1203:10)
at Module.load (node:internal/modules/cjs/loader:1027:32)
at Module._load (node:internal/modules/cjs/loader:868:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:23:47 {
library: 'rsa routines',
reason: 'data too large for key size',
code: 'ERR_OSSL_RSA_DATA_TOO_LARGE_FOR_KEY_SIZE'
}
Node.js v18.10.0
This is the encrypt file function
function _encryptFile(remotePath, remoteDestPath, algorithm = "sha256", keyAlgorithm = "rsa", digest = "base64", keyOptions = { modulusLength: 2048 }, options = { modulusLength: 2048 }) {
const crypto = require('crypto');
let data = fs.readFileSync(remotePath, { encoding: options.encoding ? options.encoding : "utf-8", flag: "r" });
algorithm = algorithm || "sha256";
keyAlgorithm = keyAlgorithm || "rsa";
digest = digest || "base64";
keyOptions = keyOptions || { modulusLength: 2048 };
options = options || { modulusLength: 2048 };
const { privateKey, publicKey } = _genKeyPair(keyAlgorithm, keyOptions);
let encrypted = crypto.publicEncrypt({
key: publicKey,
padding: crypto.constants.RSA_PKCS1_PADDING,
oaepHash: algorithm
},
Buffer.from(data)
).toString(digest);
fs.writeFileSync(remoteDestPath, encrypted);
return {
privateKey: privateKey,
publicKey: publicKey,
encrypted: encrypted
}
}
This is the deencrypt file function
function _decryptFile(remotePath, remoteDestPath, privateKey, algorithm = "sha256", keyAlgorithm = "rsa", digest = "base64", options = { modulusLength: 2048 }) {
const crypto = require('crypto');
let hashdata = fs.readFileSync(remotePath, { encoding: options.encoding ? options.encoding : "utf-8", flag: "r" });
algorithm = algorithm || "sha256";
keyAlgorithm = keyAlgorithm || "rsa";
digest = digest || "base64";
options = options || { modulusLength: 2048 };
let decrypted = crypto.privateDecrypt({
key: privateKey,
padding: crypto.constants.RSA_PKCS1_PADDING,
oaepHash: algorithm
},
Buffer.from(hashdata, digest)
);
fs.writeFileSync(remoteDestPath, decrypted);
return {
decrypted: decrypted.toString("utf-8")
}
}
function _genKeyPair(keyGenType = "rsa", options = { modulusLength: 2048 }) {
const crypto = require('crypto');
const { privateKey, publicKey } = crypto.generateKeyPairSync(keyGenType, options);
return { privateKey, publicKey }
}
This is the encrypt decrpt file usage of the functions function
// Hash P3 File to P3
let { privateKey, publicKey, encrypted } = hash.encrypt(p1, p1, "sha256", "rsa", "base64", { modulusLength: 2048 }, { modulusLength: 2048 });
// let { privateKey, publicKey, encrypted } = hash.encrypt(p3, p1);
console.log("[hasher._fileHash]: File hashed");
console.log(encrypted);
// DeHash P3 File hashed content to P3
let r3 = hash.decrypt(p1, p1, privateKey, "sha256", "rsa", "base64", { modulusLength: 2048 });
// let r3 = hash.decrypt(p1, p1, privateKey);
console.log("[hasher._fileHash]: File dehashed");
console.log(r3);
This is the contents of the file for I do not get
data too large for key size`:
1. C
2. C++
3. Java
This is a file containing a collection of interpreted programming languages.
1. Python
2. Nodejs
3. Ruby
This is the contents of the file for I do not get "data too small for key size"
:
1. C
2. C++
3. Java
I do not get the error when I use "crypto.constants.RSA_PKCS1_PADDING"
. What is the issue here and how do I get the buffer length right for dynamic use cases?