mirror of
https://github.com/openpgpjs/openpgpjs.git
synced 2025-11-24 22:45:48 +00:00
Clean up CurvesWithOID
This commit is contained in:
parent
fb710bc2dc
commit
aa9b009d91
@ -238,24 +238,24 @@ async function jsPublicEphemeralKey(curve, Q) {
|
|||||||
* @async
|
* @async
|
||||||
*/
|
*/
|
||||||
async function webPrivateEphemeralKey(curve, V, Q, d) {
|
async function webPrivateEphemeralKey(curve, V, Q, d) {
|
||||||
const recipient = privateToJWK(curve.payloadSize, curve.web.web, Q, d);
|
const recipient = privateToJWK(curve.payloadSize, curve.web, Q, d);
|
||||||
let privateKey = webCrypto.importKey(
|
let privateKey = webCrypto.importKey(
|
||||||
'jwk',
|
'jwk',
|
||||||
recipient,
|
recipient,
|
||||||
{
|
{
|
||||||
name: 'ECDH',
|
name: 'ECDH',
|
||||||
namedCurve: curve.web.web
|
namedCurve: curve.web
|
||||||
},
|
},
|
||||||
true,
|
true,
|
||||||
['deriveKey', 'deriveBits']
|
['deriveKey', 'deriveBits']
|
||||||
);
|
);
|
||||||
const jwk = rawPublicToJWK(curve.payloadSize, curve.web.web, V);
|
const jwk = rawPublicToJWK(curve.payloadSize, curve.web, V);
|
||||||
let sender = webCrypto.importKey(
|
let sender = webCrypto.importKey(
|
||||||
'jwk',
|
'jwk',
|
||||||
jwk,
|
jwk,
|
||||||
{
|
{
|
||||||
name: 'ECDH',
|
name: 'ECDH',
|
||||||
namedCurve: curve.web.web
|
namedCurve: curve.web
|
||||||
},
|
},
|
||||||
true,
|
true,
|
||||||
[]
|
[]
|
||||||
@ -264,11 +264,11 @@ async function webPrivateEphemeralKey(curve, V, Q, d) {
|
|||||||
let S = webCrypto.deriveBits(
|
let S = webCrypto.deriveBits(
|
||||||
{
|
{
|
||||||
name: 'ECDH',
|
name: 'ECDH',
|
||||||
namedCurve: curve.web.web,
|
namedCurve: curve.web,
|
||||||
public: sender
|
public: sender
|
||||||
},
|
},
|
||||||
privateKey,
|
privateKey,
|
||||||
curve.web.sharedSize
|
curve.sharedSize
|
||||||
);
|
);
|
||||||
let secret = webCrypto.exportKey(
|
let secret = webCrypto.exportKey(
|
||||||
'jwk',
|
'jwk',
|
||||||
@ -289,11 +289,11 @@ async function webPrivateEphemeralKey(curve, V, Q, d) {
|
|||||||
* @async
|
* @async
|
||||||
*/
|
*/
|
||||||
async function webPublicEphemeralKey(curve, Q) {
|
async function webPublicEphemeralKey(curve, Q) {
|
||||||
const jwk = rawPublicToJWK(curve.payloadSize, curve.web.web, Q);
|
const jwk = rawPublicToJWK(curve.payloadSize, curve.web, Q);
|
||||||
let keyPair = webCrypto.generateKey(
|
let keyPair = webCrypto.generateKey(
|
||||||
{
|
{
|
||||||
name: 'ECDH',
|
name: 'ECDH',
|
||||||
namedCurve: curve.web.web
|
namedCurve: curve.web
|
||||||
},
|
},
|
||||||
true,
|
true,
|
||||||
['deriveKey', 'deriveBits']
|
['deriveKey', 'deriveBits']
|
||||||
@ -303,7 +303,7 @@ async function webPublicEphemeralKey(curve, Q) {
|
|||||||
jwk,
|
jwk,
|
||||||
{
|
{
|
||||||
name: 'ECDH',
|
name: 'ECDH',
|
||||||
namedCurve: curve.web.web
|
namedCurve: curve.web
|
||||||
},
|
},
|
||||||
false,
|
false,
|
||||||
[]
|
[]
|
||||||
@ -312,11 +312,11 @@ async function webPublicEphemeralKey(curve, Q) {
|
|||||||
let s = webCrypto.deriveBits(
|
let s = webCrypto.deriveBits(
|
||||||
{
|
{
|
||||||
name: 'ECDH',
|
name: 'ECDH',
|
||||||
namedCurve: curve.web.web,
|
namedCurve: curve.web,
|
||||||
public: recipient
|
public: recipient
|
||||||
},
|
},
|
||||||
keyPair.privateKey,
|
keyPair.privateKey,
|
||||||
curve.web.sharedSize
|
curve.sharedSize
|
||||||
);
|
);
|
||||||
let p = webCrypto.exportKey(
|
let p = webCrypto.exportKey(
|
||||||
'jwk',
|
'jwk',
|
||||||
@ -338,7 +338,7 @@ async function webPublicEphemeralKey(curve, Q) {
|
|||||||
* @async
|
* @async
|
||||||
*/
|
*/
|
||||||
async function nodePrivateEphemeralKey(curve, V, d) {
|
async function nodePrivateEphemeralKey(curve, V, d) {
|
||||||
const recipient = nodeCrypto.createECDH(curve.node.node);
|
const recipient = nodeCrypto.createECDH(curve.node);
|
||||||
recipient.setPrivateKey(d);
|
recipient.setPrivateKey(d);
|
||||||
const sharedKey = new Uint8Array(recipient.computeSecret(V));
|
const sharedKey = new Uint8Array(recipient.computeSecret(V));
|
||||||
const secretKey = new Uint8Array(recipient.getPrivateKey());
|
const secretKey = new Uint8Array(recipient.getPrivateKey());
|
||||||
@ -354,7 +354,7 @@ async function nodePrivateEphemeralKey(curve, V, d) {
|
|||||||
* @async
|
* @async
|
||||||
*/
|
*/
|
||||||
async function nodePublicEphemeralKey(curve, Q) {
|
async function nodePublicEphemeralKey(curve, Q) {
|
||||||
const sender = nodeCrypto.createECDH(curve.node.node);
|
const sender = nodeCrypto.createECDH(curve.node);
|
||||||
sender.generateKeys();
|
sender.generateKeys();
|
||||||
const sharedKey = new Uint8Array(sender.computeSecret(Q));
|
const sharedKey = new Uint8Array(sender.computeSecret(Q));
|
||||||
const publicKey = new Uint8Array(sender.getPublicKey());
|
const publicKey = new Uint8Array(sender.getPublicKey());
|
||||||
|
|||||||
@ -129,32 +129,25 @@ const curves = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
class CurveWithOID {
|
class CurveWithOID {
|
||||||
constructor(oidOrName, params) {
|
constructor(oidOrName) {
|
||||||
try {
|
try {
|
||||||
if (util.isArray(oidOrName) ||
|
this.name = oidOrName instanceof OID ?
|
||||||
util.isUint8Array(oidOrName)) {
|
oidOrName.getName() :
|
||||||
// by oid byte array
|
enums.write(enums.curve,oidOrName);
|
||||||
oidOrName = new OID(oidOrName);
|
|
||||||
}
|
|
||||||
if (oidOrName instanceof OID) {
|
|
||||||
// by curve OID
|
|
||||||
oidOrName = oidOrName.getName();
|
|
||||||
}
|
|
||||||
// by curve name or oid string
|
|
||||||
this.name = enums.write(enums.curve, oidOrName);
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
throw new UnsupportedError('Unknown curve');
|
throw new UnsupportedError('Unknown curve');
|
||||||
}
|
}
|
||||||
params = params || curves[this.name];
|
const params = curves[this.name];
|
||||||
|
|
||||||
this.keyType = params.keyType;
|
this.keyType = params.keyType;
|
||||||
|
|
||||||
this.oid = params.oid;
|
this.oid = params.oid;
|
||||||
this.hash = params.hash;
|
this.hash = params.hash;
|
||||||
this.cipher = params.cipher;
|
this.cipher = params.cipher;
|
||||||
this.node = params.node && curves[this.name];
|
this.node = params.node;
|
||||||
this.web = params.web && curves[this.name];
|
this.web = params.web;
|
||||||
this.payloadSize = params.payloadSize;
|
this.payloadSize = params.payloadSize;
|
||||||
|
this.sharedSize = params.sharedSize;
|
||||||
if (this.web && util.getWebCrypto()) {
|
if (this.web && util.getWebCrypto()) {
|
||||||
this.type = 'web';
|
this.type = 'web';
|
||||||
} else if (this.node && util.getNodeCrypto()) {
|
} else if (this.node && util.getNodeCrypto()) {
|
||||||
|
|||||||
@ -241,7 +241,6 @@ export default () => describe('Elliptic Curve Cryptography @lightweight', functi
|
|||||||
});
|
});
|
||||||
const curves = ['secp256k1' , 'nistP256', 'nistP384', 'nistP521', 'brainpoolP256r1', 'brainpoolP384r1', 'brainpoolP512r1'];
|
const curves = ['secp256k1' , 'nistP256', 'nistP384', 'nistP521', 'brainpoolP256r1', 'brainpoolP384r1', 'brainpoolP512r1'];
|
||||||
curves.forEach(curveName => it(`${curveName} - Sign and verify message`, async function () {
|
curves.forEach(curveName => it(`${curveName} - Sign and verify message`, async function () {
|
||||||
const curve = new elliptic_curves.CurveWithOID(curveName);
|
|
||||||
const { Q: keyPublic, secret: keyPrivate } = await elliptic_curves.generate(curveName);
|
const { Q: keyPublic, secret: keyPrivate } = await elliptic_curves.generate(curveName);
|
||||||
const message = new Uint8Array([
|
const message = new Uint8Array([
|
||||||
0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
|
0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
|
||||||
@ -249,8 +248,8 @@ export default () => describe('Elliptic Curve Cryptography @lightweight', functi
|
|||||||
]);
|
]);
|
||||||
const messageDigest = await hashMod.digest(openpgp.enums.hash.sha512, message);
|
const messageDigest = await hashMod.digest(openpgp.enums.hash.sha512, message);
|
||||||
await testNativeAndFallback(async () => {
|
await testNativeAndFallback(async () => {
|
||||||
const signature = await elliptic_curves.ecdsa.sign(curve.oid, openpgp.enums.hash.sha512, message, keyPublic, keyPrivate, messageDigest);
|
const signature = await elliptic_curves.ecdsa.sign(curveName, openpgp.enums.hash.sha512, message, keyPublic, keyPrivate, messageDigest);
|
||||||
await expect(elliptic_curves.ecdsa.verify(curve.oid, openpgp.enums.hash.sha512, signature, message, keyPublic, messageDigest)).to.eventually.be.true;
|
await expect(elliptic_curves.ecdsa.verify(curveName, openpgp.enums.hash.sha512, signature, message, keyPublic, messageDigest)).to.eventually.be.true;
|
||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user