MCPcopy Create free account
hub / github.com/apple/foundationdb / parseKey

Function parseKey

fdbrpc/JsonWebKeySet.cpp:417–464  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

415
416template <class Value>
417Optional<PublicOrPrivateKey> parseKey(const Value& key, StringRef kty, int keyIndex) {
418 if (kty == "EC"_sr) {
419 DECLARE_JWK_REQUIRED_STRING_MEMBER(key, alg);
420 if (alg != "ES256"_sr) {
421 JWK_PARSE_ERROR("Unsupported EC algorithm").detail("Algorithm", alg.toString());
422 return {};
423 }
424 DECLARE_JWK_REQUIRED_STRING_MEMBER(key, crv);
425 if (crv != "P-256"_sr) {
426 JWK_PARSE_ERROR("Unsupported EC curve").detail("Curve", crv.toString());
427 return {};
428 }
429 DECLARE_JWK_REQUIRED_STRING_MEMBER(key, x);
430 DECLARE_JWK_REQUIRED_STRING_MEMBER(key, y);
431 DECLARE_JWK_OPTIONAL_STRING_MEMBER(key, d);
432 return parseEcP256Key(x, y, d, keyIndex);
433 } else if (kty == "RSA"_sr) {
434 DECLARE_JWK_REQUIRED_STRING_MEMBER(key, alg);
435 if (alg != "RS256"_sr) {
436 JWK_PARSE_ERROR("Unsupported RSA algorithm").detail("Algorithm", alg.toString());
437 return {};
438 }
439 DECLARE_JWK_REQUIRED_STRING_MEMBER(key, n);
440 DECLARE_JWK_REQUIRED_STRING_MEMBER(key, e);
441 DECLARE_JWK_OPTIONAL_STRING_MEMBER(key, d);
442 DECLARE_JWK_OPTIONAL_STRING_MEMBER(key, p);
443 DECLARE_JWK_OPTIONAL_STRING_MEMBER(key, q);
444 DECLARE_JWK_OPTIONAL_STRING_MEMBER(key, dp);
445 DECLARE_JWK_OPTIONAL_STRING_MEMBER(key, dq);
446 DECLARE_JWK_OPTIONAL_STRING_MEMBER(key, qi);
447 auto privKeyArgs = 0;
448 privKeyArgs += d.present();
449 privKeyArgs += p.present();
450 privKeyArgs += q.present();
451 privKeyArgs += dp.present();
452 privKeyArgs += dq.present();
453 privKeyArgs += qi.present();
454 if (privKeyArgs == 0 || privKeyArgs == 6) {
455 return parseRsaKey(n, e, d, p, q, dp, dq, qi, keyIndex);
456 } else {
457 JWK_PARSE_ERROR("Private key arguments partially exist").detail("NumMissingArgs", 6 - privKeyArgs);
458 return {};
459 }
460 } else {
461 JWK_PARSE_ERROR("Unsupported key type").detail("KeyType", kty.toString());
462 return {};
463 }
464}
465
466bool encodeEcKey(rapidjson::Writer<rapidjson::StringBuffer>& writer,
467 StringRef keyName,

Callers 2

parseMethod · 0.85

Calls 5

parseEcP256KeyFunction · 0.85
parseRsaKeyFunction · 0.85
detailMethod · 0.80
toStringMethod · 0.45
presentMethod · 0.45

Tested by

no test coverage detected