/// <summary> /// Adds an additional RSA private key for a known service. Useful if you plan to process Webhook requests for a service. /// </summary> /// <param name="serviceId">The unique service ID</param> /// <param name="pemKey">The private key contents</param> /// <returns>The builder</returns> public FactoryFactoryBuilder AddServicePrivateKey(string serviceId, string pemKey) { var crypto = GetCrypto(); var key = crypto.LoadRsaPrivateKey(pemKey); var fingerprint = crypto.GeneratePublicKeyFingerprintFromPrivateKey(key); _entityKeyMap.AddKey( new EntityIdentifier(EntityType.Service, Guid.Parse(serviceId)), fingerprint, key ); return(this); }
public void AddKey_ShouldOverwrite() { var km = new EntityKeyMap(); var rsa = new RSACryptoServiceProvider(); var identifier = new EntityIdentifier(EntityType.Directory, Guid.NewGuid()); km.AddKey(identifier, "key", rsa); var rsa2 = km.GetKey(identifier, "key"); Assert.AreSame(rsa, rsa2); var rsa3 = new RSACryptoServiceProvider(); km.AddKey(identifier, "key", rsa3); var rsa4 = km.GetKey(identifier, "key"); Assert.AreSame(rsa3, rsa4); }
private ITransport MakeTransport( EntityIdentifier issuer, Dictionary <string, RSA> privateKeys, string currentPrivateKey) { foreach (var key in privateKeys) { _entityKeyMap.AddKey(issuer, key.Key, key.Value); } return(new WebClientTransport( _httpClient, _crypto, _keyCache, _apiBaseUrl, issuer, new JwtService(new UnixTimeConverter(), _apiIdentifier, privateKeys, currentPrivateKey, _requestExpireSeconds), new JweService(privateKeys[currentPrivateKey]), _offsetTtl, _currentPublicKeyTtl, _entityKeyMap, new JsonNetJsonEncoder() )); }