/// <summary> /// Initializes a new instance of the <see cref="Protocol"/> class. /// </summary> /// <param name="context">The instance of the <see cref="ProtocolContext"/> /// which contains application credentials. /// How to get passw0rd's application credentials /// you will find <see href="https://github.com/passw0rd/cli">here</see>.</param> public Protocol(ProtocolContext context) { Validation.NotNull( context, "Context with Application token, Service Public Key and Application Secret Key isn't provided."); this.ctx = context; }
public static ProtocolContext Create(string appId, string accessToken, string serverPublicKey, string clientSecretKey, string[] updateTokens = null) { var phe = new PheCrypto(); var(pkSVer, pkS) = EnsureServerPublicKey(serverPublicKey, phe); var(skCVer, skC) = EnsureClientSecretKey(clientSecretKey, phe); if (pkSVer != skCVer) { throw new ArgumentException("Incorrect versions for Server/Client keys."); } var serializer = new HttpBodySerializer(); var client = new PheClient(serializer) { AccessToken = accessToken, BaseUri = new Uri("https://api.passw0rd.io/") }; var ctx = new ProtocolContext { AppId = appId, Client = client, Crypto = phe }; var serverPksDictionary = new Dictionary <int, PublicKey> { [pkSVer] = pkS }; var clientSksDictionary = new Dictionary <int, SecretKey> { [skCVer] = skC }; if (updateTokens != null && updateTokens.Length > 0) { var updateTokenList = updateTokens.Select(UpdateToken.Decode) .Where(it => it.Version > skCVer) .OrderBy(it => it.Version) .ToList(); ctx.UpdateTokens = updateTokenList; foreach (var token in updateTokenList) { pkS = phe.RotatePublicKey(pkS, token.A, token.B); skC = phe.RotateSecretKey(skC, token.A, token.B); serverPksDictionary.Add(token.Version, pkS); clientSksDictionary.Add(token.Version, skC); } } ctx.clientSecretKeys = clientSksDictionary; ctx.serverPublicKeys = serverPksDictionary; return(ctx); }
/// <summary> /// Create the context with passw0rd's application credentials. /// How to get passw0rd's application credentials /// you will find <see href="https://github.com/passw0rd/cli">here</see>. /// </summary> /// <returns>The new instance of the <see cref="ProtocolContext"/> /// which contains application credentials.</returns> /// <param name="appToken">Application token.</param> /// <param name="servicePublicKey">Service public key.</param> /// <param name="appSecretKey">Application Secret Key.</param> /// <param name="updateToken">Update token. /// How to generate Update Token you will find /// <see href="https://github.com/passw0rd/cli#get-an-update-token">here</see>.</param> public static ProtocolContext Create( string appToken, string servicePublicKey, string appSecretKey, string updateToken = null) { Validation.NotNullOrWhiteSpace(appToken, "Application token isn't provided."); Validation.NotNullOrWhiteSpace(servicePublicKey, "Service Public Key isn't provided."); Validation.NotNullOrWhiteSpace(appSecretKey, "Application Secret Key isn't provided."); var serializer = new HttpBodySerializer(); var client = new PheHttpClient(serializer, appToken, ServiceUrl.ProvideByToken(appToken)); var ctx = new ProtocolContext(appToken, client, servicePublicKey, appSecretKey); if (!string.IsNullOrWhiteSpace(updateToken)) { ctx.UpdatePheClients(updateToken); } return(ctx); }
/// <summary> /// Initializes a new instance of the <see cref="Protocol"/> class. /// </summary> public Protocol(ProtocolContext context) { this.ctx = context; }