distinguish between key and subkey type, when refactoring key just grab type from packets
This commit is contained in:
parent
3b8cea67a2
commit
0de9eecdc8
36
src/key.js
36
src/key.js
|
@ -1115,13 +1115,23 @@ export function readArmored(armoredText) {
|
||||||
export function generate(options) {
|
export function generate(options) {
|
||||||
var secretKeyPacket, secretSubkeyPacket;
|
var secretKeyPacket, secretSubkeyPacket;
|
||||||
return Promise.resolve().then(() => {
|
return Promise.resolve().then(() => {
|
||||||
|
|
||||||
if (options.curve) {
|
if (options.curve) {
|
||||||
options.keyType = enums.publicKey.ecdsa;
|
options.keyType = options.keyType || enums.publicKey.ecdsa;
|
||||||
|
options.subkeyType = options.subkeyType || enums.publicKey.ecdh;
|
||||||
|
} else {
|
||||||
|
options.keyType = options.keyType || enums.publicKey.rsa_encrypt_sign;
|
||||||
|
options.subkeyType = options.subkeyType || enums.publicKey.rsa_encrypt_sign;
|
||||||
}
|
}
|
||||||
options.keyType = options.keyType || enums.publicKey.rsa_encrypt_sign;
|
|
||||||
if (options.keyType !== enums.publicKey.rsa_encrypt_sign &&
|
if (options.keyType !== enums.publicKey.rsa_encrypt_sign &&
|
||||||
options.keyType !== enums.publicKey.ecdsa) { // RSA Encrypt-Only and RSA Sign-Only are deprecated and SHOULD NOT be generated
|
options.keyType !== enums.publicKey.ecdsa) { // RSA Encrypt-Only and RSA Sign-Only are deprecated and SHOULD NOT be generated
|
||||||
throw new Error('Only RSA Encrypt or Sign supported');
|
throw new Error('Unsupported key type');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.subkeyType !== enums.publicKey.rsa_encrypt_sign &&
|
||||||
|
options.subkeyType !== enums.publicKey.ecdh) { // RSA Encrypt-Only and RSA Sign-Only are deprecated and SHOULD NOT be generated
|
||||||
|
throw new Error('Unsupported subkey type');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!options.passphrase) { // Key without passphrase is unlocked by definition
|
if (!options.passphrase) { // Key without passphrase is unlocked by definition
|
||||||
|
@ -1139,25 +1149,13 @@ export function generate(options) {
|
||||||
function generateSecretKey() {
|
function generateSecretKey() {
|
||||||
secretKeyPacket = new packet.SecretKey();
|
secretKeyPacket = new packet.SecretKey();
|
||||||
secretKeyPacket.algorithm = enums.read(enums.publicKey, options.keyType);
|
secretKeyPacket.algorithm = enums.read(enums.publicKey, options.keyType);
|
||||||
var material;
|
return secretKeyPacket.generate(options.numBits, options.curve);
|
||||||
if (typeof(options.material) !== "undefined") {
|
|
||||||
material = options.material.key;
|
|
||||||
}
|
|
||||||
return secretKeyPacket.generate(options.numBits, options.curve, material);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function generateSecretSubkey() {
|
function generateSecretSubkey() {
|
||||||
secretSubkeyPacket = new packet.SecretSubkey();
|
secretSubkeyPacket = new packet.SecretSubkey();
|
||||||
var subkeyType = options.keyType;
|
secretSubkeyPacket.algorithm = enums.read(enums.publicKey, options.subkeyType);
|
||||||
if (subkeyType === enums.publicKey.ecdsa) {
|
return secretSubkeyPacket.generate(options.numBits, options.curve);
|
||||||
subkeyType = enums.publicKey.ecdh;
|
|
||||||
}
|
|
||||||
var material;
|
|
||||||
if (typeof(options.material) !== "undefined") {
|
|
||||||
material = options.material.subkey;
|
|
||||||
}
|
|
||||||
secretSubkeyPacket.algorithm = enums.read(enums.publicKey, subkeyType);
|
|
||||||
return secretSubkeyPacket.generate(options.numBits, options.curve, material);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1196,8 +1194,10 @@ export function reformat(options) {
|
||||||
for (var i = 0; i < packetlist.length; i++) {
|
for (var i = 0; i < packetlist.length; i++) {
|
||||||
if (packetlist[i].tag === enums.packet.secretKey) {
|
if (packetlist[i].tag === enums.packet.secretKey) {
|
||||||
secretKeyPacket = packetlist[i];
|
secretKeyPacket = packetlist[i];
|
||||||
|
options.keyType = secretKeyPacket.algorithm;
|
||||||
} else if (packetlist[i].tag === enums.packet.secretSubkey) {
|
} else if (packetlist[i].tag === enums.packet.secretSubkey) {
|
||||||
secretSubkeyPacket = packetlist[i];
|
secretSubkeyPacket = packetlist[i];
|
||||||
|
options.subkeyType = secretSubkeyPacket.algorithm;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return wrapKeyObject(secretKeyPacket, secretSubkeyPacket, options);
|
return wrapKeyObject(secretKeyPacket, secretSubkeyPacket, options);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user