Comments (3)
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.
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-----
- Used PEM title
BEGIN PRIVATE KEY
specifies that private key is encoded as PKCS#8 ASN.1 typePrivateKeyInfo
:
PrivateKeyInfo ::= SEQUENCE {
version Version,
privateKeyAlgorithm PrivateKeyAlgorithmIdentifier,
privateKey PrivateKey,
attributes [0] IMPLICIT Attributes OPTIONAL }
- 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-----
- 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:
-
Use ASN.1 type
PrivateKeyInfo
or it's newer versionOneAsymmetricKey
defined in the RFC 5958 and referenced in the RFC 8410 for keys for Ed25519, Ed448, X25519, and X448. -
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.
Ah that makes sense, my mistake. Thank you :)
from virgil-crypto-javascript.
Related Issues (20)
- Update webpack example for v5 HOT 1
- wasm-eval HOT 8
- Steps to use this library for RSA and AES Encryption and decryption
- generateKeyPair for RSA PRIVATE KEY or PRIVATE KEY HOT 1
- Document is not defined HOT 1
- Use of eval causes security error in Electron HOT 6
- [React Native] Can't find variable: self HOT 6
- How to compile for node 8.10? HOT 5
- [React Native] Virgil Crypto slow performance with large number of messages HOT 34
- [React Native] No dynCall invoker for signature HOT 3
- Failed to download Virgil Crypto Node.js Addon - which node version is supported by virgil-crypto? HOT 3
- Missing and invalid compilation of virgil_js.node HOT 2
- Problem with generating tokens HOT 4
- React native javascript bundle build error
- e3kit-node using this in electron v8.3.0 HOT 1
- Catches uncaught exceptions
- [v5.0.0] Error: Cannot find module '@virgilsecuritycore-foundationode.cjs.js' HOT 6
- Unit Testing with Jest -- FoundationError: One of the entropy sources failed.
- initCrypto() causes Nest.JS app crash and exit the container with a huge error in the container logs HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from virgil-crypto-javascript.