Giter Site home page Giter Site logo

Comments (3)

max-mapper avatar max-mapper commented on May 27, 2024 1

Got it working

-----BEGIN PRIVATE KEY-----
MC4CAQAwBQYDK2VwBCIEIOpPW/6GlNi7dLe1lARjL9WWi3dO1UXoEN6cMqT7QZL0
-----END PRIVATE KEY-----

-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAW6O5rG6Q6D7/zSWsTlihNlqeNaPTrl6we55NkLz3UG0=
-----END PUBLIC KEY-----

Ended up using pkcs8-pem for the private key and spki-pem for the public key.

import { composePrivateKey, composePublicKey } from 'crypto-key-composer'

function privateToPem(privateKey) {
  var decomposed = {
    format: 'pkcs8-pem',
    keyAlgorithm: { id: 'ed25519' },
    keyData: {
      seed: privateKey,
    },
  }
  return composePrivateKey(decomposed)
}

function publicToPem(publicKey) {
  var decomposed = {
    format: 'spki-pem',
    keyAlgorithm: { id: 'ed25519' },
    keyData: {
      bytes: publicKey,
    },
  }
  return composePublicKey(decomposed)
}

from virgil-crypto-javascript.

SergeySeroshtan avatar SergeySeroshtan commented on May 27, 2024

Hi @maxogden. Thanks for your time diving to our crypto products.
There are some issues with the private key.

-----BEGIN PRIVATE KEY-----
MFECAQEEIOpPW/6GlNi7dLe1lARjL9WWi3dO1UXoEN6cMqT7QZL0oAUGAytlcKEj
AyEAW6O5rG6Q6D7/zSWsTlihNlqeNaPTrl6we55NkLz3UG0=
-----END PRIVATE KEY-----
  1. Used PEM title BEGIN PRIVATE KEY specifies that private key is encoded as PKCS#8 ASN.1 type PrivateKeyInfo:
PrivateKeyInfo ::= SEQUENCE {
    version                   Version,
    privateKeyAlgorithm       PrivateKeyAlgorithmIdentifier,
    privateKey                PrivateKey,
    attributes                [0]  IMPLICIT Attributes OPTIONAL }
  1. But actually it is encoded as SEC 1 ASN.1 type ECPrivateKey:
ECPrivateKey ::= SEQUENCE {
     version        INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1),
     privateKey     OCTET STRING,
     parameters [0] ECParameters {{ NamedCurve }} OPTIONAL,
     publicKey  [1] BIT STRING OPTIONAL }

And as defined in the RFC 5915 PEM header and footer should be :

   -----BEGIN EC PRIVATE KEY-----
   -----END EC PRIVATE KEY-----
  1. Nevertheless, Header and Footer replacement can not completely fix the issue, as curves ed25519 and curve25519 are not included to the SEC 1 standard and RFC 5915 and can not be represented as a NamedCurve defined in the RFC 5912.

Solution:

  1. Use ASN.1 type PrivateKeyInfo or it's newer version OneAsymmetricKey defined in the RFC 5958 and referenced in the RFC 8410 for keys for Ed25519, Ed448, X25519, and X448.

  2. Generate new ed25519 private keys via this library:

import { VirgilCrypto } from 'virgil-crypto';

const virgilCrypto = new VirgilCrypto();
const keyPair = virgilCrypto.generateKeys();

or by Virgil CLI.

Note, for inspecting ASN.1 DER and PEM encoded types, useful online tool can be used.

from virgil-crypto-javascript.

max-mapper avatar max-mapper commented on May 27, 2024

Ah that makes sense, my mistake. Thank you :)

from virgil-crypto-javascript.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.