Take the 2-minute tour ×
Information Security Stack Exchange is a question and answer site for Information security professionals. It's 100% free, no registration required.

As a bit of a learning exercise, I'm trying to understand and implement a client for the Firefox Accounts Browser sync API.

I'm up to the point where I'm trying to ask the server to give me a certificate validating my public key: https://github.com/mozilla/fxa-auth-server/blob/5c1354ecbc0c606d31e7db1b8ffd047808bdf6fa/docs/api.md#post-v1certificatesign

An example of doing this can be seen here: https://github.com/zaach/sync-thing/blob/c46d344b67d7dbdcd338603325ee99c47b7ea14d/lib/fxaUser.js#L94

This uses the https://github.com/mozilla/jwcrypto library.

In order to understand exactly what's going on here, I'm attempting to generate my keypair with the node.js crypto library: http://nodejs.org/api/crypto.html#crypto_crypto_creatediffiehellman_prime_length

I can generate a keypair, but then I need to format it appropriately for the API, which asks for "y", "p", "q" and "g".

After a bunch of googling, i've found this reference to these key names: http://www.gnupg.org/documentation/manuals/gcrypt/DSA-key-parameters.html

Which seems fairly clear, while http://en.wikipedia.org/wiki/Digital_Signature_Algorithm#Key_generation contains a reasonable description of the meaning of these parameters.

The problem I'm having is figuring out what numbers represent p, q and g when using the API exposed in Node.js.

jwcrypto uses preselected values, as seen here https://github.com/mozilla/jwcrypto/blob/8e3037a049d801bd0020bb4fa9298f319409df0e/lib/algs/ds.js#L49 - although it's not clear to me how these were derived.

There also seem to be reasonable options defined in RFC 5114 (http://tools.ietf.org/html/rfc5114#section-2.3) - but I can't see how to use these with Node.

On the other hand, Node.js allows me to preselect one of the groups defined in RFC 2412 or RFC 3526, but I cannot figure out what q is for these primes.


So, to summarise my actual question(s):

  • Is it possible to use Node.js crypto's Diffie-Hellman to generate a valid JSON Web Token public key?
  • If so, how would I go about doing this?
  • Why do some Diffie Hellman prime lists talk about only p, while others specify p and q?
share|improve this question

migrated from crypto.stackexchange.com Feb 26 at 16:52

This question came from our site for software developers, mathematicians and others interested in cryptography.

add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.