UNPKG

@cdottori/ecdsa-node

Version:

fast openSSL-compatible implementation of the Elliptic Curve Digital Signature Algorithm (ECDSA)

156 lines (140 loc) 6.92 kB
var assert = require("assert"); var Ecdsa = require("../lib/ecdsa"); var PrivateKey = require("../lib/privateKey").PrivateKey; var PublicKey = require("../lib/publicKey").PublicKey; var Signature = require("../lib/signature").Signature; var File = require("../lib/utils/file"); describe("ECDSA test", function() { describe("#testVerifyRightMessage()", function() { it("should confirm authenticity", function() { let privateKey = new PrivateKey(); let publicKey = privateKey.publicKey(); let message = "This is the right message"; let signature = Ecdsa.sign(message, privateKey); assert.equal(Ecdsa.verify(message, signature, publicKey), true); }); }); describe("#testVerifyWrongMessage()", function() { it("should deny authenticity", function() { let privateKey = new PrivateKey(); let publicKey = privateKey.publicKey(); let message1 = "This is the right message"; let message2 = "This is the wrong message"; let signature = Ecdsa.sign(message1, privateKey); assert.equal(Ecdsa.verify(message2, signature, publicKey), false); }); }); }); describe("openSSL test", function() { describe("#testAssign()", function() { it("should read and verify PEM file", function() { // Generated by: openssl ecparam -name secp256k1 -genkey -out privateKey.pem let privateKeyPem = File.read("test/privateKey.pem"); let privateKey = PrivateKey.fromPem(privateKeyPem); let message = File.read("test/message.txt"); let signature = Ecdsa.sign(message, privateKey); let publicKey = privateKey.publicKey(); assert.equal(Ecdsa.verify(message, signature, publicKey), true); }); }); describe("#testVerifySignature()", function() { it("should read and verify signature file", function() { // openssl ec -in privateKey.pem -pubout -out publicKey.pem let publicKeyPem = File.read("test/publicKey.pem"); // openssl dgst -sha256 -sign privateKey.pem -out signature.binary message.txt let signatureDer = File.read("test/signatureDer.txt", "binary"); let message = File.read("test/message.txt"); let publicKey = PublicKey.fromPem(publicKeyPem); let signature = Signature.fromDer(signatureDer); assert.equal(Ecdsa.verify(message, signature, publicKey), true); }); }); }); describe("PrivateKey test", function() { describe("#testPemConversion()", function() { it("should validate PEM generation and convertion", function() { let privateKey1 = new PrivateKey(); let pem = privateKey1.toPem(); let privateKey2 = PrivateKey.fromPem(pem); assert.equal(String(privateKey1.secret), String(privateKey2.secret)); assert.equal(String(privateKey1.curve), String(privateKey2.curve)); }); }); describe("#testDerConversion()", function() { it("should validate DER generation and convertion", function() { let privateKey1 = new PrivateKey(); let der = privateKey1.toDer(); let privateKey2 = PrivateKey.fromDer(der); assert.equal(String(privateKey1.secret), String(privateKey2.secret)); assert.equal(String(privateKey1.curve), String(privateKey2.curve)); }); }); describe("#testStringConversion()", function() { it("should validate private-key-string generation and convertion", function() { let privateKey1 = new PrivateKey(); let string = privateKey1.toString(); let privateKey2 = PrivateKey.fromString(string); assert.equal(String(privateKey1.secret), String(privateKey2.secret)); assert.equal(String(privateKey1.curve), String(privateKey2.curve)); }); }); }); describe("PublicKey test", function() { describe("#testPemConversion()", function() { it("should validate PEM generation and convertion", function() { let privateKey = new PrivateKey(); let publicKey1 = privateKey.publicKey(); let pem = publicKey1.toPem(); let publicKey2 = PublicKey.fromPem(pem); assert.equal(String(publicKey1.point.x), String(publicKey2.point.x)); assert.equal(String(publicKey1.point.y), String(publicKey2.point.y)); assert.equal(publicKey1.curve, publicKey2.curve); }); }); describe("#testDerConversion()", function() { it("should validate DER generation and convertion", function() { let privateKey = new PrivateKey(); let publicKey1 = privateKey.publicKey(); let der = publicKey1.toDer(); let publicKey2 = PublicKey.fromDer(der); assert.equal(String(publicKey1.point.x), String(publicKey2.point.x)); assert.equal(String(publicKey1.point.y), String(publicKey2.point.y)); assert.equal(publicKey1.curve, publicKey2.curve); }); }); describe("#testStringConversion()", function() { it("should validate private-key-string generation and convertion", function() { let privateKey = new PrivateKey(); let publicKey1 = privateKey.publicKey(); let string = publicKey1.toString(); let publicKey2 = PublicKey.fromString(string); assert.equal(String(publicKey1.point.x), String(publicKey2.point.x)); assert.equal(String(publicKey1.point.y), String(publicKey2.point.y)); assert.equal(publicKey1.curve, publicKey2.curve); }); }); }); describe("Signature test", function() { describe("#testDerConversion()", function() { it("should validate DER signature generation and convertion", function() { let privateKey = new PrivateKey(); let message = "This is a text message"; let signature1 = Ecdsa.sign(message, privateKey); let der = signature1.toDer(); let signature2 = Signature.fromDer(der); assert.equal(String(signature1.r), String(signature2.r)); assert.equal(String(signature1.s), String(signature2.s)); }); }); describe("#testBase64Conversion()", function() { it("should validate Base64 signature generation and convertion", function() { let privateKey = new PrivateKey(); let message = "This is a text message"; let signature1 = Ecdsa.sign(message, privateKey); let base64 = signature1.toBase64(); let signature2 = Signature.fromBase64(base64); assert.equal(String(signature1.r), String(signature2.r)); assert.equal(String(signature1.s), String(signature2.s)); }); }); });