node-opcua/node-opcua-crypto

View on GitHub
packages/node-opcua-crypto-test/test/test_explore_private_key.ts

Summary

Maintainability
A
0 mins
Test Coverage
// ---------------------------------------------------------------------------------------------------------------------
// node-opcua-crypto
// ---------------------------------------------------------------------------------------------------------------------
// Copyright (c) 2014-2022 - Etienne Rossignon - etienne.rossignon (at) gadz.org
// Copyright (c) 2022-2024 - Sterfive.com
// ---------------------------------------------------------------------------------------------------------------------
//
// This  project is licensed under the terms of the MIT license.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
// documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so,  subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
// Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// ---------------------------------------------------------------------------------------------------------------------

import  path from "path";
import { explorePrivateKey } from "node-opcua-crypto";
import { readPrivateRsaKey, readPrivateKey } from "node-opcua-crypto";
import "should";

describe(" exploring Private Key", function () {
    it("should explore a RSA private key", () => {
        /*
        SEQUENCE (9 elem)
        INTEGER 0
        INTEGER (2048 bit) 281952593346671784482294780035408013194863483386592962559858420910675…
        INTEGER 65537
        INTEGER (2043 bit) 642747111494160010401068711373574578807583569860643432052777028000288…
        INTEGER (1024 bit) 168029228626722432524648200175282488374072188976889309122843186881641…
        INTEGER (1024 bit) 167799730827206579603051987478771655842915662838736077417872201913082…
        INTEGER (1024 bit) 137498504692349319222185304899525833788747080620742431892655404874735…
        INTEGER (1023 bit) 697524767219370561381501334343069749931878389721178411751391183105436…
        INTEGER (1022 bit) 323694182952104405846242669060692072882344375806205651430934351585722…

        Modulus=DF59774B8EE24CE9B531A7AE26AF9694F6E4F2D61B9ED84EC39109EF7FF92E709936BD23A496860D274702074E22DEA3330940CE19F60F0046286B48D0D3607831FA58F11721BCDC14481B81D37763C6E761503128EAD316D3A99297E60CE0D5C9B09EA6DE8D89044A6A8ADF71E84D6AEAE7E7639F5245DA436C8780368C4914C312D75450E32B0E5028DC200C509ED76721F721FF313D2F2A94422F85E4D58A1F8E018B0FD22FD970E2F4187D5DBC2A8E8B4C496A168BA53232AA4C15CAAD43F22BE039038934AABA5F47D23C8ACDF9F9CCF65187CCC99B1436EA8A4E3221D3EC70F8E470A925E5D9AACDB480B640FB1EA64F77A74CF267FB4B42C9257DD5D5

        */

        const privateKeyRSA = readPrivateRsaKey(path.join(__dirname, "../test-fixtures/certs/alice_id_rsa"));
        const a = explorePrivateKey(privateKeyRSA);
        // console.log("modulus = ", a.modulus.toString("hex"));
        a.modulus.length.should.eql(2048 / 8);
        a.modulus
            .toString("hex")
            .toUpperCase()
            .should.eql(
                "DF59774B8EE24CE9B531A7AE26AF9694F6E4F2D61B9ED84EC39109EF7FF92E709936BD23A496860D274702074E22DEA3330940CE19F60F0046286B48D0D3607831FA58F11721BCDC14481B81D37763C6E761503128EAD316D3A99297E60CE0D5C9B09EA6DE8D89044A6A8ADF71E84D6AEAE7E7639F5245DA436C8780368C4914C312D75450E32B0E5028DC200C509ED76721F721FF313D2F2A94422F85E4D58A1F8E018B0FD22FD970E2F4187D5DBC2A8E8B4C496A168BA53232AA4C15CAAD43F22BE039038934AABA5F47D23C8ACDF9F9CCF65187CCC99B1436EA8A4E3221D3EC70F8E470A925E5D9AACDB480B640FB1EA64F77A74CF267FB4B42C9257DD5D5"
            );
    });

    it("should explore a private key", () => {
        /*
SEQUENCE (3 elem)
  INTEGER 0
  SEQUENCE (2 elem)
    OBJECT IDENTIFIER 1.2.840.113549.1.1.1 rsaEncryption (PKCS #1)
    NULL
  OCTET STRING (2348 byte) 308209280201000282020100B31F816D72E524391E436062D41A10351C2E01292E0F…
    SEQUENCE (9 elem)
      INTEGER 0
      INTEGER (4096 bit) 730758364493913296697096330163955512510472369292956535766666823297374…
      INTEGER 65537
      INTEGER (4095 bit) 481894425999022610993104798770554485858028210874818736938886533855164…
      INTEGER (2048 bit) 291394081046854749112910883224666804495254304371712132099933428115475…
      INTEGER (2048 bit) 250780098850535989629647893398522838201934471923256997677596163282530…
      INTEGER (2046 bit) 755507305056404152910048022911262087367954154124255389877789464049034…
      INTEGER (2047 bit) 102268167933830124339563446586949682984953548325693371987296261041685…
      INTEGER (2048 bit) 271885407259811393974999577759572845350976237525226240920432441899132…

      Modulus=B31F816D72E524391E436062D41A10351C2E01292E0F010A8BECA3B23535C17096855B921A4D04E0B631DD226AF86E6A75780CF54BFF363ABBDF4505F0E59B741CA99872E0E056F34504E571FD9A4EC6F2A376BF605025136C55D0B006745102943F4F344B7138D64C5A5F76369430903A9F4BB1DB8AC90D52ED8B54EE52F0A2310EDFDA0969A70A1E74FB99D7E49FBC83D3093DE3CCC30EB42C4BA339A02C70C780A7BC9108B5369EE2F6222F43A4C36DC60DF357578C9A4D8D6F8999FB80506C0D73DAFF29CF22ECA4A9CD22296AE66C4D172591348C25440B22C2A547803EF0D83FDE2837639F0DBB22A579FEF012AEB0B303CB8DED0A5B31811949F1144D7BE8F2E73A634BFFE4D8E65CBD6825105DFBE84BFFE30E58BB5AAD78730A6A64E43D961CC3D8DCC439849357982FDE98DB7099651A8B03ECF46839E9DA2818ED4C5883C1E5BDEAD8F29BF18505CCAD17F04EC0E49509A9BE43B5E503EC330E22E4BF28E571DDF81A7E6125D5CD94094BF23753066176D8BE66E5520F64432D5757162CA71AE8870F6D424358676F1C9287623D787EBAF6D0189D085431C7CAB1E7BF37DF282058453083E8BF6D37108EFF455B2C4945AA60D768FCF837B3A7F88AB56731BC569AE73C45220627BF9912BF1E1284B1170CBA0D929A23519D8FC469BF376C61CE62361B9937660DFE70983883E3B6778A5094EB81E202D1DC8B3B

      */
        const privateKey = readPrivateKey(path.join(__dirname, "../test-fixtures/certs/demo_key_4096.pem"));
        const a = explorePrivateKey(privateKey);
        a.modulus.length.should.eql(4096 / 8);
        a.modulus
            .toString("hex")
            .toUpperCase()
            .should.eql(
                "B31F816D72E524391E436062D41A10351C2E01292E0F010A8BECA3B23535C17096855B921A4D04E0B631DD226AF86E6A75780CF54BFF363ABBDF4505F0E59B741CA99872E0E056F34504E571FD9A4EC6F2A376BF605025136C55D0B006745102943F4F344B7138D64C5A5F76369430903A9F4BB1DB8AC90D52ED8B54EE52F0A2310EDFDA0969A70A1E74FB99D7E49FBC83D3093DE3CCC30EB42C4BA339A02C70C780A7BC9108B5369EE2F6222F43A4C36DC60DF357578C9A4D8D6F8999FB80506C0D73DAFF29CF22ECA4A9CD22296AE66C4D172591348C25440B22C2A547803EF0D83FDE2837639F0DBB22A579FEF012AEB0B303CB8DED0A5B31811949F1144D7BE8F2E73A634BFFE4D8E65CBD6825105DFBE84BFFE30E58BB5AAD78730A6A64E43D961CC3D8DCC439849357982FDE98DB7099651A8B03ECF46839E9DA2818ED4C5883C1E5BDEAD8F29BF18505CCAD17F04EC0E49509A9BE43B5E503EC330E22E4BF28E571DDF81A7E6125D5CD94094BF23753066176D8BE66E5520F64432D5757162CA71AE8870F6D424358676F1C9287623D787EBAF6D0189D085431C7CAB1E7BF37DF282058453083E8BF6D37108EFF455B2C4945AA60D768FCF837B3A7F88AB56731BC569AE73C45220627BF9912BF1E1284B1170CBA0D929A23519D8FC469BF376C61CE62361B9937660DFE70983883E3B6778A5094EB81E202D1DC8B3B"
            );
    });
});